XSD-схема для списка элементов, содержащих текст и имеющих атрибуты?
Допустим, у меня есть следующий XML:
<wordlist>
<language>English</language>
<author>John Smith</author>
<words>
<word id="0">Point</word>
<word id="1">Triangle</word>
<word id="2">Apple</word>
<word id="3">Plate</word>
<word id="4">Mango</word>
<word id="5">Computer</word>
</words>
</wordlist>
и хочу создать схему XSD для него.
Я не могу получить определение для <word>
элементы правильные по какой-то причине. То, что я до сих пор придумал, это:
<xs:element name="wordlist">
<xs:complexType>
<xs:sequence>
<xs:element name="language" type="xs:string" />
<xs:element name="author" type="xs:string" />
<xs:element name="words">
<xs:complexType>
<xs:sequence>
<xs:element name="word">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
но когда я бегу
xmllint -noout -schema wordlist.xsd
я получил
dictionary.xml:11: element word: Schemas validity error : Element 'word': This element is not expected.
dictionary.xml fails to validate
Строка 11
<word id="1">Triangle</word>
так что, кажется, первое слово работает, как и ожидалось, но не второе...
1 ответ
+ Изменить
<xs:element name="word">
в
<xs:element name="word" maxOccurs="unbounded">
потому что по умолчанию для maxOccurs
1, но вы хотите разрешить множественное.