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> - 子元素只能按照指定的顺序出现。

  1. xsd:choice 元素不正确。它只允许 一个 包含的成员出现。也就是说,您可以有一个 titel 或一个 regiseur,但不能同时有两个。请改用 xsd:all (items appear in any order) or xsd:sequence(项目按指定顺序出现)。根据您的 XML 判断,顺序并不重要,所以应该是 xsd:all.

  2. xsd:sequence@maxOccurs的默认值为1。因此它在 film 的第二个实例中抱怨。指定适当的最大界限:

    <xs:sequence maxOccurs="unbounded">