XML实例禁止未在架构中定义的元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML实例禁止未在架构中定义的元素相关的知识,希望对你有一定的参考价值。
我正在创建一个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实例禁止未在架构中定义的元素的主要内容,如果未能解决你的问题,请参考以下文章