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实例禁止未在架构中定义的元素的主要内容,如果未能解决你的问题,请参考以下文章

创建片段而不从 java 代码实例化它

Vuejs 属性或方法未在实例上定义,但在渲染期间引用

ReferenceError:全局未在xml2js中定义

Laravel 刀片中的 Vue 错误:属性或方法“类型”未在实例上定义,但在渲染期间引用

Vue属性或方法未在实例上定义但在渲染期间引用?

itemSelected 未在 Xamarin.Android 中触发