2016-10-17 95 views
2

我被要求建立一個商業數據庫,這是我第一個虛構的「公司」。我已經獲得了使用XML進行驗證的模式,但被要求爲XML文件中的至少一家公司提供ORDER/RANKING。然而,我嘗試這樣做,我無法設法驗證它(即使提供了正確的線路)。xsd:屬性應該去哪裏?

這是我的XML文件(你可以看到我把排名=「3」,這是我不能寫入我的架構的行)。

<?xml version="1.0"?> 
    <CompanyList> 
    <Company ranking="3"> 
    <CompanyName>CasesWorldwide</CompanyName> 
    <CompanyID>00001</CompanyID> 
    <City>Edmonton</City> 
    <Province>Alberta</Province> 
<ContactName> 
    <LastName>Soliman</LastName> 
    <FirstName>Ahmed</FirstName> 
    <PhoneNumber>646959891</PhoneNumber> 
    <ContactCompanyID>00001</ContactCompanyID> 
</ContactName> 
    <NumberOfEmployees>4000</NumberOfEmployees> 
</Company> 
</CompanyList> 

這裏是模式(我試圖線旁 「本公司」):

<?xml version="1.0"?> 
<!-- XSD schema for CS Assignment #3.xml --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

<xsd:element name="CompanyList"> 
<xsd:complexType> 
<xsd:sequence> 

<xsd:element name="Company"> <xsd:attribute name="ranking」 type=「xsd:string」 use=「optional」/> 
<xsd:complexType> 
<xsd:sequence>  

    <xsd:element name="CompanyName"> 
     <xsd:simpleType> 
      <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="1"/> 
      <xsd:pattern value=".*[^\s].*" /> 
     </xsd:restriction> 
    </xsd:simpleType> 
    </xsd:element> 

    <xsd:element name="CompanyID" type="xsd:integer"/> 

    <xsd:element name="City" type="xsd:string" minOccurs="0"/> 

    <xsd:element name="Province" type="xsd:string" minOccurs="0"/> 

    <xsd:element name="ContactName" minOccurs = "1" maxOccurs="5"> 
    <xsd:complexType> 
    <xsd:sequence>    

      <xsd:element name="LastName" type="xsd:string" minOccurs="1"/> 

      <xsd:element name="FirstName" type="xsd:string" minOccurs="1"/> 

      <xsd:element name="PhoneNumber" type="xsd:integer" minOccurs="1"/> 

      <xsd:element name="ContactCompanyID" type="xsd:integer" minOccurs="1"/> 

    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element>  

    <xsd:element name="NumberOfEmployees" type="xsd:integer" minOccurs="0"/>  


    </xsd:sequence> 
</xsd:complexType> 
</xsd:element> 

    </xsd:sequence> 
</xsd:complexType> 
</xsd:element> 

</xsd:schema> 
+0

當我嘗試將它放在那裏時,您的屬性應該位於Company元素 – Dijkgraaf

+0

@Dijkgraaf的下面,我得到的錯誤是:格式不正確:屬性值與元素類型「xsd:attribute」關聯的「name」不能包含「<」字符。 –

回答

1

一般來說,xsd:attribute會出現:

  • 在XSD的頂層(在xsd:schema內)。
  • xsd:complexType(完全或引用)。
  • xs:attributeGroup以內(完全或引用)。

你非常接近;你只需要兩個更正:

  1. 將您xsd:attributexsd:complexTypexsd:sequence後。
  2. xsd:attribute中的智能報價更改爲正常報價。

共有:

<?xml version="1.0"?> 
<!-- XSD schema for CS Assignment #3.xml --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="CompanyList"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="Company"> 
      <xsd:complexType> 
      <xsd:sequence>  
       <xsd:element name="CompanyName"> 
       <xsd:simpleType> 
        <xsd:restriction base="xsd:string"> 
        <xsd:minLength value="1"/> 
        <xsd:pattern value=".*[^\s].*" /> 
        </xsd:restriction> 
       </xsd:simpleType> 
       </xsd:element> 
       <xsd:element name="CompanyID" type="xsd:integer"/> 
       <xsd:element name="City" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="Province" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="ContactName" minOccurs = "1" maxOccurs="5"> 
       <xsd:complexType> 
        <xsd:sequence>    
        <xsd:element name="LastName" type="xsd:string" 
           minOccurs="1"/> 
        <xsd:element name="FirstName" type="xsd:string" 
           minOccurs="1"/> 
        <xsd:element name="PhoneNumber" type="xsd:integer" 
           minOccurs="1"/> 
        <xsd:element name="ContactCompanyID" type="xsd:integer" 
           minOccurs="1"/> 
        </xsd:sequence> 
       </xsd:complexType> 
       </xsd:element>  
       <xsd:element name="NumberOfEmployees" type="xsd:integer" 
          minOccurs="0"/>  
      </xsd:sequence> 
      <xsd:attribute name="ranking" type="xsd:string" use="optional"/> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

這XSD將成功地驗證XML。

+0

非常感謝你,我知道這條線,但根本不知道該把它放在哪裏。這爲我節省了很多時間和痛苦! –

+0

在XSD上閱讀一本書會爲你節省更多的時間和痛苦。 –