Xml 在名称空间中定义和引用XSD类型

Xml 在名称空间中定义和引用XSD类型,xml,xsd,xml-namespaces,codesynthesis,Xml,Xsd,Xml Namespaces,Codesynthesis,我知道xmlns定义了一个名称空间,但我对它在XSD文件中的使用有点困惑(这是代码合成提供的示例) 模式标记中的targetNamespace属性定义了定义当前模式元素的名称空间。在您的示例中,这是“”。文档中定义的所有类型、属性和元素都属于targetNamespace。为了获得对其中一个的引用,您需要为名称空间定义xmlns(在您的示例中为xmlns:lib=)http://www.codesynthesis.com/library"). 因此,只有在获得对模式中定义的类型的引用时,才能使用

我知道
xmlns
定义了一个名称空间,但我对它在XSD文件中的使用有点困惑(这是代码合成提供的示例)


模式标记中的targetNamespace属性定义了定义当前模式元素的名称空间。在您的示例中,这是“”。文档中定义的所有类型、属性和元素都属于targetNamespace。为了获得对其中一个的引用,您需要为名称空间定义xmlns(在您的示例中为xmlns:lib=)http://www.codesynthesis.com/library"). 因此,只有在获得对模式中定义的类型的引用时,才能使用已定义的前缀“lib”。顺便说一下,您可以将目标命名空间定义为默认命名空间(xmlns=”http://www.codesynthesis.com/library)并且目标命名空间不需要前缀

为什么定义为
person
author
使用lib名称空间前缀引用,但不使用
xsd
前缀引用,其中 两者都在文档中定义?是什么使它们属于
lib
而不是 要
xsd

xsd
名称空间前缀由

xmlns:xsd="http://www.w3.org/2001/XMLSchema"
此命名空间是为XML架构构造保留的

lib
名称空间前缀由

xmlns:lib="http://www.codesynthesis.com/library"
该名称空间是用户定义的(在本例中,由其组件的Codesynthesis控制)

其次,当它们被定义时,它们是独立引用的,但是 在使用它们时具有名称空间前缀。难道不是吗 是否也使用名称空间前缀定义

否,对于targetNamespace声明,例如:

targetNamespace="http://www.codesynthesis.com/library"
类型的定义,例如
author
(此处没有名称空间前缀)

。。。

http://www.codesynthesis.com/library
命名空间,但必须通过相应的命名空间前缀引用,
type=“lib:author”

targetNamespace和
xmlns
确实让我感到困惑。在C++中,<代码> XMLNS 使用命名空间< /代码>大致等于<代码> >代码>目标NAMSITUL> <代码>正在声明您自己的命名空间。我认为 XMLNS做了明显的<代码> TaleNAMESPACEST> <代码>,即,将标签分配给特定的命名空间。<代码> XS:Schema/@ TaleNealStEs= =“< /Cord>命名空间>代码>声明此架构中定义的组件位于namespaceURI命名空间中。这与
xmlns
不同,后者用于(1)定义名称空间前缀,或(2)定义默认名称空间。
xmlns:lib="http://www.codesynthesis.com/library"
targetNamespace="http://www.codesynthesis.com/library"
<xsd:complexType name="author">...</xsd:complexType>