XML 验证问题
XML validation issues
你好,我是 XML / XSD 的新手。有谁能帮我解决这个问题:
XML(给出):
<?xml version="1.0" encoding="UTF-8"?>
<filmliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="filmliste.xsd"
author="Max" datum="20.01.2016">
<film>
<titel> Movie</titel>
<regiseur> abc </regiseur>
<erscheinungsjahr> 2015 </erscheinungsjahr>
<schauspieler> abc </schauspieler>
<bewertung> abc </bewertung>
</film>
<film>
<titel> Movie2 </titel>
<erscheinungsjahr> 2015 </erscheinungsjahr>
<regiseur> abc </regiseur>
<schauspieler> abc </schauspieler>
<genre> abc </genre>
</film>
</filmliste>
我的架构:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="filmliste">
<xs:complexType>
<xs:sequence>
<xs:element name="film">
<xs:complexType>
<xs:choice >
<xs:element type="xs:string" name="titel" maxOccurs="1"/>
<xs:element type="xs:string" name="regiseur" maxOccurs="unbounded"/>
<xs:element type="xs:float" name="erscheinungsjahr" maxOccurs="1"/>
<xs:element type="xs:string" name="schauspieler" maxOccurs="unbounded"/>
<xs:element type="xs:float" name="bewertung" minOccurs="0"/>
<xs:element type="xs:string" name="genre"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="author"/>
<xs:attribute type="xs:string" name="datum"/>
</xs:complexType>
</xs:element>
</xs:schema>
现在我的 XML 文档中有两个验证错误。
1: 元素'regiseur':这个元素不是预期的。
2:元素'film':这个元素不是预期的。
错误是您使用了 <xs:choice>
标签。
使用此标记意味着您只能放入其中一个选项(子元素)。将其更改为以下任一标签。
<xsd:all>
- 子元素可以以任何顺序出现。
<xsd:sequence>
- 子元素只能按照指定的顺序出现。
xsd:choice
元素不正确。它只允许 一个 包含的成员出现。也就是说,您可以有一个 titel
或一个 regiseur
,但不能同时有两个。请改用 xsd:all
(items appear in any order) or xsd:sequence
(项目按指定顺序出现)。根据您的 XML 判断,顺序并不重要,所以应该是 xsd:all
.
xsd:sequence@maxOccurs
的默认值为1
。因此它在 film
的第二个实例中抱怨。指定适当的最大界限:
<xs:sequence maxOccurs="unbounded">
你好,我是 XML / XSD 的新手。有谁能帮我解决这个问题: XML(给出):
<?xml version="1.0" encoding="UTF-8"?>
<filmliste xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="filmliste.xsd"
author="Max" datum="20.01.2016">
<film>
<titel> Movie</titel>
<regiseur> abc </regiseur>
<erscheinungsjahr> 2015 </erscheinungsjahr>
<schauspieler> abc </schauspieler>
<bewertung> abc </bewertung>
</film>
<film>
<titel> Movie2 </titel>
<erscheinungsjahr> 2015 </erscheinungsjahr>
<regiseur> abc </regiseur>
<schauspieler> abc </schauspieler>
<genre> abc </genre>
</film>
</filmliste>
我的架构:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="filmliste">
<xs:complexType>
<xs:sequence>
<xs:element name="film">
<xs:complexType>
<xs:choice >
<xs:element type="xs:string" name="titel" maxOccurs="1"/>
<xs:element type="xs:string" name="regiseur" maxOccurs="unbounded"/>
<xs:element type="xs:float" name="erscheinungsjahr" maxOccurs="1"/>
<xs:element type="xs:string" name="schauspieler" maxOccurs="unbounded"/>
<xs:element type="xs:float" name="bewertung" minOccurs="0"/>
<xs:element type="xs:string" name="genre"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="author"/>
<xs:attribute type="xs:string" name="datum"/>
</xs:complexType>
</xs:element>
</xs:schema>
现在我的 XML 文档中有两个验证错误。 1: 元素'regiseur':这个元素不是预期的。 2:元素'film':这个元素不是预期的。
错误是您使用了 <xs:choice>
标签。
使用此标记意味着您只能放入其中一个选项(子元素)。将其更改为以下任一标签。
<xsd:all>
- 子元素可以以任何顺序出现。
<xsd:sequence>
- 子元素只能按照指定的顺序出现。
xsd:choice
元素不正确。它只允许 一个 包含的成员出现。也就是说,您可以有一个titel
或一个regiseur
,但不能同时有两个。请改用xsd:all
(items appear in any order) orxsd:sequence
(项目按指定顺序出现)。根据您的 XML 判断,顺序并不重要,所以应该是xsd:all
.xsd:sequence@maxOccurs
的默认值为1
。因此它在film
的第二个实例中抱怨。指定适当的最大界限:<xs:sequence maxOccurs="unbounded">