xml中的命名空间
XML中的namespace,targetNamespace,schemaLocation的概念是什么,功能是什么?...
XML中的namespace,targetNamespace,schemaLocation的概念是什么,功能是什么?
展开
1个回答
展开全部
1.什么是defaultNamespace? 就是xmlns属性的值。defaultNamespace的作用就是它下面的没有prefix的element的Namespace就是defaultNamespace.示例如下: <?xmlversion="1.0"encoding="UTF-8"?> <!--defaultNamespace为http://schema ,a的namespace为http://schema 1--> <axmlns="http://schema 1"xmlns:edi="http://ccc.cc "> <!--b由于没有前缀,所以会自动采用defaultNamespace,即http://schema 1--> <bedi:attr1="123"attr2="1.112">qwe</b> <edi:axmlns=http://xxx.xxx > <!--d的namespace不再是http://schema 1,而是http://xxx.xxx ,因为d的父节点也定义了一个defaultNamespace:http://xxx.xxx --> <d>false</d> </edi:a> <edi:a> <!--注意,虽然e的父节点Namespace为http://ccc.cc c,但是e的namespace并不是http://ccc.cc ,而是http://schema 1--> <e>false</e> </edi:a> </a> 2.如果一个element定义了xmlns="xxx"属性,那么直接具有xxx的Namespace,除非这个element自己包含一个前缀。 ... <!--a具有xxx命名空间--> <!--属性d不具有xxx命名空间--> <axmlns="xxx"d="ddd"> <!--b也具有xxx命名空间--> <b> ... </b> <!--c不具有xxx的命名空间--> <edi:c> ... <edi:c> </a> ... <!--a不具有xxx命名空间,因为它使用着edi的命名空间--> ... <edi:axmlns="xxx"> <b> ... </b> </edi:a> ... 5.3UniquenessofAttributes InXMLdocumentsconformingtothisspecification,notagmaycontaintwoattributeswhich: haveidenticalnames,or havequalifiednameswiththesamelocalpartandwithprefixeswhichhavebeenboundtonamespacenamesthatareidentical. Forexample,eachofthebadstart-tagsisillegalinthefollowing: <!--http://www.w3.org isboundton1andn2--> <!--没有prefix的attribute不具有任何命名空间--> <xxmlns:n1="http://www.w3.org " xmlns:n2="http://www.w3.org "> <bada="1"a="2"/> <!--n1:a和n2:a的命名空间和属性名均相同,不允许出现在同一个element中--> <badn1:a="1"n2:a="2"/> </x> However,eachofthefollowingislegal,thesecondbecausethedefaultnamespacedoesnotapplytoattributenames: <!--http://www.w3.org isboundton1andisthedefault--> <xxmlns:n1="http://www.w3.org " xmlns="http://www.w3.org "> <gooda="1"b="2"/> <!--属性a的命名空间为空,而n1:a的命名空间为http://www.w3.org --> <gooda="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://schema s.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是用来指定XMLSchema文档路径的 新的XMLSchema系统即将成为W3C推荐标准,目的是为了克服DTD的局限性(请参阅侧栏,DTD的局限性),为XML文档提供丰富的语法结构。本文展示了模式的灵活性,说明如何使用XMLSchema系统来定义最基本的XML文档构造块——元素。 XMLSchema比DTD更强大。为了说明XMLSchema机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。清单1给出了一个XML文档片段,清单2用DTD语法声明了这两个元素,清单3则是相应的XMLSchema语法形式。要注意,清单3中所用的是相同的XML语法。通过模式,验证解析器可以检查元素InvoiceNo是否是正整数,元素ProductID的首字符是否为A到Z之间的字母,后面为六个阿拉伯数字。相反,引用DTD的验证解析器只能检查这些元素是否用字符串表示。
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询