我有一个像这样的XSD文件:
<schema xmlns="https://www.w3.org/2001/XMLSchema"
targetNamespace="http://myns.com"
elementFormDefault="qualified">
<complexType name="playerInfo">
<sequence>
<element name="level" type="integer" />
</sequence>
</complexType>
<element name="player">
<complexType>
<sequence>
<element name="name" type="string" />
<element name="info" type="playerInfo" />
</sequence>
</complexType>
</element>
</schema>
现在我的IDE引发错误,说它在本地type
元素声明的info
属性中“无法解析符号'playerInfo'”。
但是,如果我将命名空间别名xmlns:target="http://myns.com"
添加到<schema>
标记中,然后将该type
属性更改为type="target:playerInfo"
,该错误就会消失。我已经在其他教程中看到了它的完成,所以我知道这是正确的。但是我很困惑:为什么用目标名称空间限定type
属性值?全局complexType如何自动与目标名称空间建立连接?据我所知,该模式的默认名称空间是w3.org的路径,那么complexType与目标名称空间有什么关系?
答案 0 :(得分:1)
这里有两件事要理解。
首先,所有全局模式组件的名称都是QName,包括所包含模式文档的targetNamespace
以及在name
属性中给出的本地名称。
第二,所有引用全局架构组件的属性(例如ref
和type
)都是xs:QName
的实例,因此,如果它们没有前缀,则它们表示没有名称空间的名称
因此您的类型具有名称(以XPath 3.0表示法)Q{http://myns.com}playerInfo
,但是type属性扩展为Q{}playerInfo
。