2013-04-22 137 views
0

我有一個XML模式如下:XML - 層次元素與子元素的屬性和序列

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="labels"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="label" minOccurs="1" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="language" minOccurs="1" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:simpleContent> 
             <xs:extension base="xs:string"> 
              <xs:attribute name="value" type="xs:string" /> 
             </xs:extension> 
            </xs:simpleContent> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element>  

</xs:schema> 

<labels>可以有許多<label>元件,並且一個<label>元件可以具有許多<language>元件。現在我需要的是我的<label>元素具有一個稱爲「標識符」的唯一屬性。

我想有一個XML結構是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 

<labels 
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xsi:noNamespaceSchemaLocation='labels.xsd'> 

    <label identifier="class_contact"> 
     <language value="english">Contacts</language> 
     <language value="afrikaans">Kontakte</language> 
    </label> 

</labels> 

確定我改成了這一點,現在,它允許標識符屬性,但不強制它是唯一的。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="labels"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="label" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="language" minOccurs="1" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:simpleContent> 
             <xs:extension base="xs:string"> 
              <xs:attribute name="value" type="xs:string" /> 
             </xs:extension> 
            </xs:simpleContent> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
         <xs:attribute name="identifier" type="xs:string" /> 
        </xs:complexType> 
        <xs:unique name="UniqueLabelLanguage"> 
         <xs:selector xpath="language" /> 
         <xs:field xpath="@value" /> 
        </xs:unique> 
        <xs:unique name="UniqueLabelIdentifier"> 
         <xs:selector xpath="label" /> 
         <xs:field xpath="@identifier" /> 
        </xs:unique> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element>  

</xs:schema> 

回答

1
<?xml version="1.0" encoding="ISO-8859-1"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="labels"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="label" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="language" minOccurs="1" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:simpleContent> 
             <xs:extension base="xs:string"> 
              <xs:attribute name="value" type="xs:string" /> 
             </xs:extension> 
            </xs:simpleContent> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
         <xs:attribute name="identifier" type="xs:string" /> 
        </xs:complexType> 
        <xs:unique name="UniqueLabelLanguage"> 
         <xs:selector xpath="language" /> 
         <xs:field xpath="@value" /> 
        </xs:unique> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="UniqueLabelIdentifier"> 
      <xs:selector xpath="label" /> 
      <xs:field xpath="@identifier" /> 
     </xs:unique> 
    </xs:element>  

</xs:schema>