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"?>
[注意缺少 ?
]。
我正在创建一个 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"?>
[注意缺少?
]。