gpt4 book ai didi

xml - 为什么我必须为导入的 XSD 中的属性添加前缀?

转载 作者:行者123 更新时间:2023-12-04 05:25:25 24 4
gpt4 key购买 nike

我有以下两个XSDS,test.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="http://www.test.com/ns1"
targetNamespace="http://www.test.com"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<import namespace="http://www.test.com/ns1" schemaLocation="test1.xsd"/>
<element name="Root">
<complexType>
<sequence>
<element name="Child" type="string"/>
</sequence>
<attribute ref="ns1:myAttrib1" use="required"/>
<attribute ref="ns1:myAttrib2" use="required"/>
</complexType>
</element>
</schema>

和 test1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="http://www.test.com/ns1"
targetNamespace="http://www.test.com/ns1"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<attribute name="myAttrib1" type="string"/>
<attribute name="myAttrib2" type="string"/>
</schema>

实例文档如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="http://www.test.com" xmlns:ns1="http://www.test.com/ns1"
ns1:myAttrib1="1" ns1:myAttrib2="2">
<Child>Child 1</Child>
</Root>

现在,使用 Xerces 2.11.0,我必须为属性添加前缀 myAttrib1myAttrib2ns1让它通过验证。起初我觉得这不符合模式定义(由于 attributeFormDefault="unqualified" 中的 ns1 ),但再想一想它有点道理。这是我的理解:前缀是必需的,因为属性 myAttrib1myAttrib2未在 targetNamespace 中定义使用它们的默认命名空间,即它们未在 xmlns="http://www.test.com" 中定义.

这是我的问题:1) 我是否正确理解了前缀所述属性的必要性,以及 2) 在 W3C rec.txt 中的位置。我可以找到一段描述这种行为的文章吗?谢谢。 :)

更新:我遇到了以下段落

The final two attributes (elementFormDefault and attributeFormDefault) are a facility provided by W3C XML Schema to control, within a single schema, whether attributes and elements are considered by default to be qualified (in a namespace). This differentiation between qualified and unqualified can be indicated by specifying the default values, as above, but also when defining the elements and attributes, by adding a form attribute of value qualified or unqualified.

It is important to note that only local elements and attributes can be specified as unqualified. All globally defined elements and attributes must always be qualified.



xml.com 找到.另一个有趣的来源是 zvon.org .所以这确实支持了公认的答案。但是,我还没有看到(众所周知的神秘)W3C rec 的确切位置。详细提到了这一点。毕竟,他们是这个问题的管理机构。

最佳答案

1) 正确。然而,attributeFormDefaultelementFormDefault仅适用于 本地定义的属性和元素。换句话说,那些不是 的直接子代的架构 重新定义 ,嵌套在其他架构组件中。

2) Section 3.2 .2 表明 ref 必须是 QName。通常,在 XSD 中的任何地方您都会看到 ref 属性,它将是 QName 类型。

关于xml - 为什么我必须为导入的 XSD 中的属性添加前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250819/

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