我正在创建一个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
有人可以告诉我为什么吗?
答案 0 :(得分:1)
更改
<xs:element name="reportSetAspects"/>
到
<xs:element ref="reportSetAspects"/>
以使用reportSetAspects
的全局声明。否则,将使用reportSetAspects
的新本地声明,并且其中允许使用任何内容模型,因为它仅指定元素名称。
其他说明:
aspect
遇到了类似的问题。errorsPerEntity
目前允许任何内容出于类似原因。<xml version="1.0" encoding="UTF-8"?>
应该是<?xml version="1.0" encoding="UTF-8"?>
[请注意缺少?
]。