`

xml命名空间

    博客分类:
  • xml
 
阅读更多
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命名空间

    首先,我们需要了解XML命名空间的作用。XML命名空间是一种用于解决XML文档中元素和属性名称冲突的方法。它们通过使用URI(统一资源标识符)作为唯一标识,为元素和属性提供上下文。然而,在某些情况下,我们可能希望...

    WebApi返回xml格式时去除命名空间

    XML命名空间是为了避免元素名称冲突而引入的概念,它为XML文档中的元素提供了唯一的标识。然而,在某些场景下,例如与JavaScript或简单的数据解析应用集成时,我们可能希望去掉这些命名空间以简化处理。 要实现这个...

    python xml命名空间

    ### Python XML命名空间详解 在处理XML文档时,命名空间(Namespace)的使用十分常见,尤其是在需要合并多个来源的数据或确保元素唯一性的情况下。本文将详细介绍Python中如何处理XML命名空间,包括理解命名空间的...

    XML 命名空间(XML Namespaces).pdf

    XML命名空间的引入正是为了解决这种命名冲突问题。它通过给元素和属性名称附加命名空间的方式,区分不同来源的同名元素,从而能够在一个XML文档中混合使用多个不同的XML文档片段。 命名空间的基本语法是在XML元素的...

    winform 使用XML命名空间源码

    在WinForm应用中,我们可以利用XML命名空间来处理XML文件,实现数据的读取、写入和解析。本资源包含的源码展示了如何在WinForm程序中有效地使用XML命名空间。 XML命名空间用于避免XML元素名称的冲突,它通过URI...

    XML的命名空间

    XML的命名空间

    dom4j 读取带有命名空间的xml文件

    在处理带有命名空间的XML文件时,DOM4J库显得尤为重要,因为XML命名空间是XML规范中一个关键的概念,用于避免元素名称的冲突。 XML命名空间的引入是为了在一个文档中使用来自不同来源的元素和属性。它们通过URI...

    C#读写XML文件,支持多层节点

    首先,我们需要了解.NET Framework提供的System.Xml命名空间,其中包含了处理XML文档的主要类。例如,XmlDocument、XmlNode、XmlElement等。在这个小测试程序中,我们可能使用了XmlDocument来创建、加载和修改XML...

    简单了解XML中的命名空间

    XML命名空间是一个用于区分具有相同名称的元素和属性的作用域概念,它通过使用URI(统一资源标识符)来唯一地标识这些名称。命名空间的使用,使得在同一个XML文档中可以包含来自不同源的数据,而不会出现名称冲突的...

    带命名空间的XML增删改查操作实例

    首先,理解XML命名空间的基本概念。命名空间通过一个URI(Uniform Resource Identifier)来唯一标识,通常以`xmlns:`前缀定义。例如,`xmlns:ns="http://example.com/ns"`声明了一个名为`ns`的命名空间,指向`...

    xml内容解析,包含命名空间时需特殊处理(dom4j)

    首先,我们需要理解XML命名空间的基本概念。命名空间通过使用一个URI(Uniform Resource Identifier)来唯一标识一组元素和属性。它们通常以`xmlns:`前缀形式出现,例如`xmlns:ns="http://example.com/ns"`。在XML文...

    Python利用命名空间解析XML文档

    XML命名空间通常以URI(Uniform Resource Identifier)的形式表示,它为XML元素提供了一种唯一标识的方式。在XML文档中,使用`xmlns`属性定义命名空间,例如`xmlns="http://www.w3.org/1999/xhtml"`。当查询这些带有...

    对象序列化:使用System.Xml.Serialization命名空间

    为了自定义XML命名空间,可以使用`XmlSerializerNamespaces`类,然后在`Serialize`方法中传入这个对象,以控制生成的XML文档中的命名空间。 总结来说,`System.Xml.Serialization`命名空间提供了丰富的工具,使得在...

    XPATH读取有命名空间的节点

    总结来说,处理带有命名空间的XML文档,特别是在使用XPath时,需要理解XML命名空间的概念,掌握DOM4J的命名空间注册方法,并能够正确构造XPath表达式。这样,即使面对复杂的XML结构,也能游刃有余地进行数据提取和...

    WCF 返回XML去除默认命名空间实例Demo

    当WCF服务返回XML时,它会默认添加一个命名空间,以确保数据的唯一性和可识别性。然而,在某些情况下,我们可能希望去除这些默认命名空间,以简化处理或满足特定需求。 **去除默认命名空间** 的主要目的是减少XML的...

    Web 服务编程技巧和窍门: 手工创建的 SOAP 消息中命名空间的处理

    首先,了解XML命名空间的基本概念。命名空间是一个URI(Uniform Resource Identifier),用于唯一标识一个XML文档中的元素和属性。在SOAP消息中,命名空间通过`xmlns`前缀定义,例如`xmlns:ns1=...

    通过Schema验证XML格式是否正确

    4. **System.Xml命名空间**:C#的System.Xml命名空间提供了处理XML文档的类和方法,如XmlSchema和XmlDocument,它们可用于加载和验证XML Schema以及读取和操作XML文档。 5. **XmlSchema类**:该类用于加载和处理XML...

    jquery解析带名称空间的xml

    jquery.xmlns-1.7.0.js 是根据jquery.xmlns.js改写的适用于各种版本的jquery解析带命名空间的XML数据,里面附有实例代码,如果使用中有遇到问题,可以反馈,我会进一步改进。

Global site tag (gtag.js) - Google Analytics