gpt4 book ai didi

xml - 定义允许来自混合 namespace 的属性的模式

转载 作者:数据小太阳 更新时间:2023-10-29 02:37:27 26 4
gpt4 key购买 nike

我正在努力尝试开发一个允许来自混合命名空间的属性的模式。

这是 xxx_schema2.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="qualified"
targetNamespace="http://www.mrbouffant.com/schema2"
xmlns:xxx="http://www.mrbouffant.com/schema2">

<xs:attributeGroup name="schema2AttributeGroup">
<xs:attribute name="schema2Attribute1 " type="xs:string"/>
<xs:attribute name="schema2Attribute2 " type="xs:string"/>
</xs:attributeGroup>

</xs:schema>

这是导入 xxx_schema2 的 xxx_schema1.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:xxx="http://www.mrbouffant.com/schema2">

<xs:import namespace="http://www.mrbouffant.com/schema2" schemaLocation="xxx_schema2.xsd"/>

<!-- ROOT ELEMENT -->
<xs:element name="rootElement" type="rootElementType" />

<!-- COMPLEX TYPES -->
<xs:complexType name="rootElementType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="xxx:schema2AttributeGroup"/>
<xs:attribute name="schema1Attribute1" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>

这是我想根据 xxx_schema1.xsd 验证的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<rootElement xmlns:xxx='http://www.mrbouffant.com/schema2/'
schema1Attribute1="foo"
xxx:schema2Attribute1="bar"
xxx:schema2Attribute2="far" />

当 Saxon-EE 解析器尝试根据模式验证 XML 文档时,它生成的错误实际上是:

Engine name: Saxon-EE 9.3.0.5
Severity: error
Description: Attribute @xxx:schema2Attribute1 is not allowed on element <rootElement>
(it would be allowed in namespace http://www.mrbouffant.com/schema2)

Engine name: Saxon-EE 9.3.0.5
Severity: error
Description: Attribute @xxx:schema2Attribute2 is not allowed on element <rootElement>
(it would be allowed in namespace http://www.mrbouffant.com/schema2)

请您帮助我理解我在架构定义或 XML 文档中做错了什么导致验证无法成功?谢谢。

最佳答案

您的实例 XML 中 http://www.mrbouffant.com/schema2 的 namespace 声明有尾部斜杠,并且与您的架构声明的 namespace 不匹配。

删除尾部的斜杠,它就可以正常验证了:

<?xml version="1.0" encoding="UTF-8"?>
<rootElement xmlns:xxx='http://www.mrbouffant.com/schema2'
schema1Attribute1="foo"
xxx:schema2Attribute1="bar"
xxx:schema2Attribute2="far" />

关于xml - 定义允许来自混合 namespace 的属性的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6677601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com