1. 什么是defaultNamespace?
就是xmlns属性的值。defaultNamespace的作用就是它下面的没有prefix的element的Namespace就是defaultNamespace. 示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--defaultNamespace为http://schema, a的namespace为http://schema1 -->
<a xmlns="http://schema1" xmlns:edi="http://ccc.cc">
<!--b由于没有前缀,所以会自动采用defaultNamespace, 即http://schema1-->
<b edi:attr1="123" attr2="1.112">qwe</b>
<edi:a xmlns=http://xxx.xxx>
<!--d的namespace不再是http://schema1, 而是http://xxx.xxx, 因为d的父节点也定义了一个defaultNamespace: http://xxx.xxx-->
<d>false</d>
</edi:a>
<edi:a>
<!--注意,虽然e的父节点Namespace为http://ccc.ccc, 但是e的namespace并不是http://ccc.cc, 而是http://schema1-->
<e>false</e>
</edi:a>
</a>
2.如果一个element定义了xmlns="xxx"属性, 那么直接具有xxx的Namespace, 除非这个element自己包含一个前缀。
...
<!-- a 具有xxx 命名空间 -->
<!-- 属性d不具有xxx命名空间 -->
<a xmlns="xxx" d="ddd">
<!--b也具有xxx命名空间 -->
<b>
...
</b>
<!--c不具有xxx的命名空间-->
<edi:c>
...
<edi:c>
</a>
...
<!--a不具有xxx命名空间, 因为它使用着edi的命名空间-->
...
<edi:a xmlns="xxx">
<b>
...
</b>
</edi:a>
...
5.3 Uniqueness of Attributes
In XML documents conforming to this specification, no tag may contain two attributes which:
have identical names, or
have qualified names with the same local part and with prefixes which have been bound to namespace names that are identical.
For example, each of the bad start-tags is illegal in the following:
<!-- http://www.w3.org is bound to n1 and n2 -->
<!--没有prefix的attribute不具有任何命名空间-->
<x xmlns:n1="http://www.w3.org"
xmlns:n2="http://www.w3.org" >
<bad a="1" a="2" />
<!--n1:a和n2:a的命名空间和属性名均相同,不允许出现在同一个element中-->
<bad n1:a="1" n2:a="2" />
</x>
However, each of the following is legal, the second because the default namespace does not apply to attribute names:
<!-- http://www.w3.org is bound to n1 and is the default -->
<x xmlns:n1="http://www.w3.org"
xmlns="http://www.w3.org" >
<good a="1" b="2" />
<!--属性a的命名空间为空,而n1:a的命名空间为http://www.w3.org-->
<good a="1" n1:a="2" />
</x>
targetNamespace
在Schema中targetNamespace定义了Schema定义出的新元素与属性的名称空间。也就是它是对所定义的XML模型进行限制:限制定义出的元素,或者属性的名称空间。与targetNamespace相关的还有两个属性:elementFormDefault ,attributeFormDefault,这两个属性的缺省值都是unqualified。 如果定义为unqualified表示定义的元素的名称空间可以缺省,此时直接引用父元素的名称空间。如果是qualified则表示,必需要指明名称空间,不能直接引用其父元素的,要指明。(如果Schema限定的文档,刚好定义了”空的名称空间“并且刚好与targetNamespace一至,可以缺省)。
在WSDL中也有一个targetNamespace,但是没有Schema中的两个属性。但其它这两个属性在WSDL中其实并不需要,不管这两个属性取值,对文档其实没有什么影响,所以也就不用定义这两个属性。
不失一般性,下面我假定WSDL与SOAP绑定。WSDL是用来定义的是服务的一些属性,targetNamespace定义的服务“收到的请求”与“发出响应”的一些属性(也许有其它的,但我没发现,如果有知道的,请指教),定义了请求与响应对应的XML元素应该使用的名称空间。从SOAP协议中,我们可以看到,响应与请求元素的父元素是<env:Body>,它的名称空间是SOAP标准指定了的,根据不同的SOPA协议版本不同,比如Soap1.1为http://schemas.xmlsoap.org/soap/envelope/ ,而Soap1.2为http://www.w3.org/2001/06/soap-envelope。
这样导致了响应与请求元素也就无法使用其父元素的名称空间,要使响应与请求的名称空间与targetNamespace一至,元素也就不能使用缺省的父元素的名称空间,必需显示的使用完整的名称空间。这样在Schema中出现的elementFormDefault ,attributeFormDefault两个属性,也就在WSDL中没有存在的必要了。
也就是WSDL与Schema中的targetNamespace基本上是一至,你完全可以相互参考起来理解。
参考文献:
http://xml.org.cn/dispbbs.asp?BoardID=23&id=25672&replyID=17053&star=1&skin=0
http://www.w3.org/TR/xmlschema-0/#UnqualLocals (Schema的官方文档)
http://www.w3.org/TR/wsdl#_Toc492291093 (WSDL的官方文档)
schemaLocation是用来指定XML Schema文档路径的
新的 XML Schema 系统即将成为 W3C 推荐标准,目的是为了克服 DTD 的局限性(请参阅侧栏, DTD 的局限性 ),为 XML 文档提供丰富的语法结构。本文展示了模式的灵活性,说明如何使用 XML Schema 系统来定义最基本的 XML 文档构造块——元素。
XML Schema 比 DTD 更强大。为了说明 XML Schema 机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。 清单 1给出了一个 XML 文档片段, 清单 2用 DTD 语法声明了这两个元素, 清单 3则是相应的 XML Schema 语法形式。要注意, 清单 3中所用的是相同的 XML 语法。通过模式,验证解析器可以检查元素 InvoiceNo 是否是正整数,元素 ProductID 的首字符是否为 A 到 Z 之间的字母,后面为六个阿拉伯数字。相反,引用 DTD 的验证解析器只能检查这些元素是否用字符串表示。
分享到:
相关推荐
WebApi去除XML命名空间 vs2013版本及以上环境下运行
python xml命名空间 The ns0: prefix for an element name is a reference to a (XML) NameSpace.
XML的命名空间
XML 命名空间(XML Namespaces)
winform 使用XML命名空间源码! 很值得下载看看!资源免费,大家分享!!
WebApi 返回 xml 格式数据时自动去除命名空间相关标记
jquery.xmlns-1.7.0.js 是根据jquery.xmlns.js改写的适用于各种版本的jquery解析带命名空间的XML数据,里面附有实例代码,如果使用中有遇到问题,可以反馈,我会进一步改进。
删除和添加对XML命名空间未做处理。不过仿照查询和修改,很简单!将数据查询出来,并且绑定到下拉列表框,处理了数据重复的问题!实现二级联动的效果!加油哦!
主要介绍了XML的命名空间,包括命名空间的声明等XML入门学习中的基础知识,需要的朋友可以参考下
通过 利用 java 以及 dom4j 来进行XML 文件的 生成与 解析操作。代码简单易懂。
services.xml加命名空间services.xml加命名空间
WCF 返回XML去除默认命名空间实例Demo 解压后根据说明文档修改您的程序。
一本关于XML Schema的打包教程,深入浅出,系统性强,并附有相应实例。
元素的lang(无命名空间的)属性用于定义元素的内容及其他文本属性的语言种类。 它的值必须是符合BCP 47规定范围内的一个语言标签。 当该属性设置成空字符串时,...请不要在html文档中使用带有xml命名空间的lang属性。
xml的命名空间.md
怎样使用XML命名空间来避免元素命名冲突。 XML CDATA 怎样让XML解析器知道某些文字不进行解析呢。使用CDATA。 XML编码 怎样把你的XML文档编码。 XML服务器 怎样在服务器上产生XML。 XML应用 怎样...
C# 读取 带 xmlns 命名空间 XML 结点 SelectSingleNode 类 For .NET Framework 1.1x AutoPrefix(System.Xml.XmlNode xNode, System.Xml.XmlNamespaceManager xNameSpaceManager) AutoXPath(System.Xml.XmlNode ...
3.4 XML命名空间 3.5 开发工具XML Spy与XML实例 第四章 XML文档类型定义 第五章 XML Schema结构 第六章 层叠样式表 6.1 CSS简介 6.2 设置字体属性 6.3 设置色彩和背景图像属性 6.4 设置边界属性 ...