XML 架构中未定义实例禁止元素

XML instance prohibiting elements not defined in the schema

我正在创建一个 XML 模式来向数据报告者提供反馈。 如何防止另一方使用架构中未定义的元素基于架构创建文件?

使用以下架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="logical-model" 
           targetNamespace="logical-model"
           elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="logicalModelErrors">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="reportSetAspects"/>
            <xs:element name="errorsPerEntity"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="reportSetAspects">
    <xs:complexType>
        <xs:sequence >
            <xs:element name="aspect" minOccurs="1" maxOccurs="2"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="aspect">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="name" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
</xs:schema>

我的实例是:

<?xml version="1.0" encoding="UTF-8"?>
<logicalModelErrors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="logical-model" xsi:schemaLocation="logical-model LogMod.xsd">
  <reportSetAspects>
    <aspect name="bank identifier">BANK-ABDC1234</aspect>
    <aspect name="reporting reference date">2018-04-01</aspect>
    <abc>dd</abc>
  </reportSetAspects>
  <def>sss</def>
</logicalModelErrors>

如果我在 XMLSpy 中验证此文件,我会收到 def 而不是 abc 的错误。 错误信息:

Element <def> is not allowed under element <logicalModelErrors>.
Reason: No more elements expected.
Error location: logicalModelErrors / def

谁能告诉我为什么?

改变

        <xs:element name="reportSetAspects"/>

        <xs:element ref="reportSetAspects"/>

为了使用你的全局声明 reportSetAspects。否则,将使用新的局部声明 reportSetAspects,并且允许在其中使用任何内容模型,因为它仅指定元素名称。

其他说明:

  • aspect 遇到类似的问题。
  • errorsPerEntity 目前出于类似原因允许任何内容。
  • 在你的 XSD 中,<xml version="1.0" encoding="UTF-8"?> 应该是 <?xml version="1.0" encoding="UTF-8"?> [注意缺少 ?]。