Определение сложного типа в XSD - PullRequest
0 голосов
/ 28 мая 2018

Попытка определить сложный элемент, который также может иметь атрибут.XML выглядит как

<dummy id="asdsa">
   <Item> 
   </Item>
   <Item> 
   </Item>
<dummy>

Я делаю:

<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="dummy">
      <complexType>
        <attribute name="id"/>
        <sequence>
        <element name="Item" minOccurs="0" maxOccurs="unbounded">
        </element>
        </sequence>
      </complexType>
    </element>
</schema> 

Обновление: если я добавлю атрибут после последовательности, он работает.Если кто-нибудь может дать мне ответ, почему, я дам ему ответ на вопросительный знак:

<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="dummy">
      <complexType>
        <sequence>
        <element name="Item" minOccurs="0" maxOccurs="unbounded">
        </element>
        </sequence>
        <attribute name="id"/>
      </complexType>
    </element>
</schema> 

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Как вы узнали, объявления xs:attribute должны идти после объявления группы моделей для объявления сложного типа.Причина в том, что именно этого требует грамматика XML-схемы.Соответствующая выдержка из мета-схемы схемы для схем (s4s) :

<xs:group name="complexTypeModel">
<xs:choice>
  <xs:element ref="xs:simpleContent"/>
  <xs:element ref="xs:complexContent"/>
  <xs:sequence>       
    <xs:group ref="xs:typeDefParticle" minOccurs="0"/>
    <xs:group ref="xs:attrDecls"/>
  </xs:sequence>
</xs:choice>

0 голосов
/ 28 мая 2018

попробуйте что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="numero_etiqueta">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="13"/>
                <xs:maxLength value="13"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="codigo_objeto_cliente">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="20"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="objeto_postal">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="numero_etiqueta"/>
                <xs:element ref="codigo_objeto_cliente"/>                                               
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
...