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
不同,后者用于(1)定义名称空间前缀,或(2)定义默认名称空间。
xmlns:lib="http://www.codesynthesis.com/library"
targetNamespace="http://www.codesynthesis.com/library"
<xsd:complexType name="author">...</xsd:complexType>