2012-11-16 53 views
8

我已經定義了兩種複雜的元素類型 - Developer和App。如何在XML模式中定義用戶定義數據類型?

開發孩子的 - ID,姓名,電子郵件

應用孩子的 - ID,姓名,開發

在這裏,在應用程序的複雜元素的開發是指開發商/ ID。

如何在xml模式中定義這種關係。我正在使用XML spy2013編輯器。

我已經嘗試過在簡單類型開發人員 - > ID的聲明中指定名稱。並在App-> Developer數據類型中使用此名稱。但它給錯誤..

<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSpy v2013 (x64) (http://www.altova.com) by Piyush (USC) --> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"   attributeFormDefault="unqualified"> 
<xs:element name="appinfo"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Developer"> 
       <xs:complexType> 
        <xs:all> 
         **<xs:element name="ID">** 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="5"/> 
            <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Name"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="([a-zA-Z])+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Email"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="[^@][email protected][^\.]+\..+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Company" type="xs:string"/> 
         <xs:element name="Website" type="xs:string"/> 
         <xs:element name="Phone"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="13"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="App"> 
       <xs:complexType> 
        <xs:all> 
         <xs:element name="ID"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:length value="5"/> 
            <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Name"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:pattern value="([a-zA-Z])+"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Developer" ***type="xs:anySimpleType"/>*** 
         <xs:element name="Price"> 
          <xs:simpleType> 
           <xs:restriction base="xs:float"> 
            <xs:minInclusive value="0.00"/> 
            <xs:maxInclusive value="6.99"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> 
         <xs:element name="Category"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="Travel"/> 
            <xs:enumeration value="Productivity"/> 
            <xs:enumeration value="Game"/> 
            <xs:enumeration value="Music"/> 
            <xs:enumeration value="Education"/> 
            <xs:enumeration value="Lifestyle"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
         <xs:element name="Platform"> 
          <xs:simpleType> 
           <xs:restriction base="xs:string"> 
            <xs:enumeration value="Android"/> 
            <xs:enumeration value="iOS"/> 
            <xs:enumeration value="Blackberry"/> 
           </xs:restriction> 
          </xs:simpleType> 
         </xs:element> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="AppStat"> 
       <xs:complexType> 
        <xs:all> 
         <xs:element name="AppID" type="xs:anySimpleType"/> 
         <xs:element name="Statistics"> 
          <xs:complexType> 
           <xs:sequence maxOccurs="unbounded"> 
            <xs:element name="Platform" type="xs:anySimpleType"/> 
            <xs:element name="Downloads" type="xs:positiveInteger"/> 
            <xs:element name="Rating"> 
             <xs:simpleType> 
              <xs:restriction base="xs:float"> 
               <xs:minInclusive value="0.0"/> 
               <xs:maxInclusive value="5.0"/> 
              </xs:restriction> 
             </xs:simpleType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
         <xs:element name="LastChecked" type="xs:date"/> 
        </xs:all> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

+0

我不知道是誰upvoted這個問題或者爲什麼,但我downvoting它。如果您編寫了一些代碼,但它給了我們一個錯誤,您應該向我們展示您編寫的代碼以及它給出的錯誤,然後我們可以看到錯誤發生的位置。你不能害怕或尷尬顯示你的編碼嘗試;最好的學習方法是讓你的努力受到你正在學習的技術更豐富經驗的人的批判性評論。 –

回答

10

使用通用的簡單類型的開發者ID的方法是將其聲明爲開頭命名類型:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"   
    attributeFormDefault="unqualified"> 

    <xs:simpleType name="developerID"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="5"/> 
     <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    . . . 

,然後使用它:

. . . 
    <xs:element name="Developer" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:all> 
      <xs:element name="ID" type="developerID"> 
. . . 
    <xs:element name="App" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:all> 
      . . . 
      <xs:element name="Developer" type="developerID"/> 

但是,這不足以創建一個約束,以便appinfo/App/Developer ca n僅包含appinfo/Developer/ID中聲明的開發人員ID中的一個。要做到這一點,必須使用xs:key創建一個唯一的密鑰定義,並使用xs:keyref(請參閱here)引用它。

下面是完整的XSD:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"   
    attributeFormDefault="unqualified"> 

    <xs:simpleType name="developerID"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="5"/> 
     <xs:pattern value="[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="appinfo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Developer" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="ID" type="developerID"> 
       </xs:element> 
       <xs:element name="Name"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="([a-zA-Z])+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Email"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="[^@][email protected][^\.]+\..+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Company" type="xs:string"/> 
       <xs:element name="Website" type="xs:string"/> 
       <xs:element name="Phone"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:length value="13"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:all> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="App" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="ID"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:length value="5"/> 
        <xs:pattern value="[0-9][0-9][0-9][0-9][A-Z]"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Name"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:pattern value="([a-zA-Z])+"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Developer" type="developerID"/> 
       <xs:element name="Price"> 
       <xs:simpleType> 
        <xs:restriction base="xs:float"> 
        <xs:minInclusive value="0.00"/> 
        <xs:maxInclusive value="6.99"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="TabletCompatible" type="xs:boolean" minOccurs="0"/> 
       <xs:element name="Category"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="Travel"/> 
        <xs:enumeration value="Productivity"/> 
        <xs:enumeration value="Game"/> 
        <xs:enumeration value="Music"/> 
        <xs:enumeration value="Education"/> 
        <xs:enumeration value="Lifestyle"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
       <xs:element name="Platform"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:enumeration value="Android"/> 
        <xs:enumeration value="iOS"/> 
        <xs:enumeration value="Blackberry"/> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:all> 
      </xs:complexType> 
      <xs:keyref name="developerIDref" refer="developerID"> 
      <xs:selector xpath="."/> 
      <xs:field xpath="Developer"/> 
      </xs:keyref> 
     </xs:element> 
     <xs:element name="AppStat"> 
      <xs:complexType> 
      <xs:all> 
       <xs:element name="AppID" type="xs:anySimpleType"/> 
       <xs:element name="Statistics"> 
       <xs:complexType> 
        <xs:sequence maxOccurs="unbounded"> 
        <xs:element name="Platform" type="xs:anySimpleType"/> 
        <xs:element name="Downloads" type="xs:positiveInteger"/> 
        <xs:element name="Rating"> 
         <xs:simpleType> 
         <xs:restriction base="xs:float"> 
          <xs:minInclusive value="0.0"/> 
          <xs:maxInclusive value="5.0"/> 
         </xs:restriction> 
         </xs:simpleType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="LastChecked" type="xs:date"/> 
      </xs:all> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:key name="developerID"> 
     <xs:selector xpath="Developer"/> 
     <xs:field xpath="ID"/> 
    </xs:key> 
    </xs:element> 

</xs:schema> 
相關問題