2014-08-28 3 views
0

Я читал различные источники и тестировал различные методы, но я до сих пор не могу понять это правильно.Как объявить атрибут для элемента в XSD

Произнесите XML является:

<?xml version="1.0"?> 

<zoo xmlns="http://www.example.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.example.com zoo.xsd"> 
    <animal id="l123444"> 
     <name>Mighty</name> 
     <type>lion</type> 
     <kg>135</kg> 
    </animal> 

    <animal id="b343234"> 
     <name>Lucky</name> 
     <type>bear</type> 
     <kg>205</kg> 
    </animal> 
</zoo> 

Как я должен написать XSD?

Вот что я получил:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.example.com" 
      xmlns="http://www.example.com" 
      elementFormDefault="qualified"> 

<xs:element name="zoo"><xs:complexType><xs:sequence> 
    <xs:element name="animal" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="id"/> 
     </xs:extension> 
     <xs:sequence> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="type"><xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="lion"/> 
        <xs:enumeration value="bear"/> 
        <xs:enumeration value="tiger"/> 
       </xs:restriction> 
      </xs:simpleType></xs:element> 
      <xs:element name="kg"><xs:simpleType> 
       <xs:restriction base="xs:integer"> 
        <xs:minInclusive value="10"/> 
        <xs:maxInclusive value="5000"/> 
       </xs:restriction> 
      </xs:simpleType></xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:sequence></xs:complexType></xs:element> 

</xs:schema> 

я мог получить документ подтверждено изначально. Когда я попытался добавить и объявить атрибут id, проверка не удалась. Любая подсказка?

ответ

2

Вам не нужно extension под тип animal, только

<xs:element name="animal" maxOccurs="unbounded"> 
    <xs:complexType> 
    <xs:sequence> 
     <!-- child elements --> 
    </xs:sequence> 
    <xs:attribute name="id" type="xs:string"/> 
    </xs:complexType> 
</xs:element> 

объявления атрибутов для комплексного типа, без явного надтипа (т.е. без simpleContent или complexContent) идут непосредственно под complexType, и должны be после любой sequence (или choice или что-то еще).

+0

Спасибо. Теперь я работаю. Мне никогда не приходило в голову, что порядок имеет значение. –

Смежные вопросы