Можем ли мы написать схему XSD для сложного элемента, который содержит другой элемент, атрибуты и текст (все из них)? - PullRequest
1 голос
/ 16 июня 2011

У меня есть элемент XML, который содержит другие элементы, атрибуты, а также текст. Пример XML-данных здесь:

<property readonly="0" eraseable="1" >
    <property readonly="0" eraseable="1" >
        <property readonly="0" eraseable="1" >windows XP unknown SP unknown (Build unknown)</property>
        <property readonly="0" eraseable="1" >Windows 5.1</property>
    </property>
</property>

Я хочу определить схему XSD для элемента. Я пытался добавить SimpleContent в ComplexType, но я получаю ошибку при проверке. Вот схема, которую я пытаюсь:

<xs:element name="property">
    <xs:complexType >
        <xs:simpleContent>
            <xs:extension base="xs:string"/>
        </xs:simpleContent>
        <xs:sequence>
            <xs:element ref="property" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" use="optional" type="xs:integer"/>
        <xs:attribute name="readonly" use="required" type="xs:boolean"/>
        <xs:attribute name="eraseable" use="required" type="xs:boolean"/>
    </xs:complexType>
</xs:element>

Ошибка, которую я получаю при проверке:

* Содержимое '#AnonType_property' недопустимо. Элемент 'sequence' недопустим, смещен или встречается слишком часто. *

Если я удаляю <xs:simpleContent> из определения схемы, я получаю ошибку как:

Элемент 'property' не может иметь символ [children], поскольку тип содержимого типа только для элемента.

Как мне написать схему для такого элемента?

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Будет ли это работать для вас?

<xs:element name="property">
   <xs:complexType mixed="true">
      <xs:sequence>
         <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
      </xs:sequence>
      <xs:attribute name="eraseable" use="required" type="xs:integer"/>
      <xs:attribute name="readonly" use="required" type="xs:integer"/>
   </xs:complexType>
</xs:element>
0 голосов
/ 17 июня 2011

Если вы используете Visual Studio для генерации схемы из своего фрагмента XML, вы получите следующее:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="property">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="property">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="property">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="readonly" type="xs:unsignedByte" use="required" />
                      <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="readonly" type="xs:unsignedByte" use="required" />
            <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="readonly" type="xs:unsignedByte" use="required" />
      <xs:attribute name="eraseable" type="xs:unsignedByte" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>
...