称号空间是W3C引荐规范供应的一种一致定名XML文档中的元素和属性的机制。运用称号空间能够明白标识和组合XML文档中来自差别标记词汇表的元素和属性,避免了称号之间的争执。
运用过DTD的人应当晓得,定名争执是DTD的一大题目,而Schema里引入了定名空间的观点,就很好的处理了这个题目。详细来看:
1、声明称号空间
称号空间声明的平常情势为:第一部份是一个关键字xmlns:,第二部份是称号空间的前缀,第三部份是一个等号,第四部份是双引号,将第五部份的称号空间标识URI包括起来。须要注重的是,称号空间的前缀不能为xml,由于在XML中这个字符串是保留作特别用处的。例:
xmlns:tns="http://www.whtest.com/" //个中tns为前缀。
还能够隐式声明称号空间,即省略掉冒号和称号空间前缀。例:
xmlns="http://www.whtest.com/" //注重在一个文档中只能有一个隐式声明的定名空间
2、Schema中的定名空间:
(1)Schema中的全局身分
全局身分指的是元素xsd:schema的直接子节点,包括元素声明、属性声明、庞杂/简朴范例定义、组定义、属性组定义。
<?xml version=”1.0”> <xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema” targetNamespace=“http://www.test.com/ns/ns_test“> // Schema的目的称号空间用属性targetNamespace在根元素上定义。 //Schema的全局身分被放在称号空间http://www.test.com/ns/ns_test里。
(2)Schema中的非全局身分
偶然愿望将非全局身分定义在目的空间中去,可运用下面要领。
<?xml version=”1.0”> <xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema” targetNamespace=“http://www.test.com/ns/ns_test“ elementFormDefault=“qualified“>
属性elementFormDefault的默认值是unqualified,也就是划定了只要全局身分才被定义在目的称号空间中。将elementFormDefault的值赋为qualified,使得目的称号空间包括非全局的元素定义。一样,使属性attributeFormDefault的值赋为qualified,可使得目的称号空间包括非全局属性定义。以下:
<?xml version=”1.0”> <xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema” targetNamespace=“http://www.test.com/ns/ns_test“ attributeFormDefault=“qualified“>
也能够修正属性form的值,使得某些非全局身分不包括在称号空间中。以下:
<xsd:element name=”name” type=”xsd:string” form=”unqualified”/>
(3)targetNamespace
xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,范例等都属于该targetNameSpace,其本身或外部xsd文件运用这些元素,属性等都必须从定义的targetNameSpace中找。
targetNamespace定义了Schema定义的新元素与属性的称号空间。而"www.w3.org/2001/XMLSchema"称号空间则定义了element, attribute, complexType, group, simpleType等元素。
若本身并不运用重用组件,仅供外部运用的话,则只定义targetNameSpace就能够,不必指定别号。
3、XML文档中定名空间
在XML中,称号空间的运用触及领域的观点,领域即称号空间的掩盖局限,它指的是哪些元素和属性在该称号空间中,哪些不在该称号空间中。称号空间既能够限制全部XML文档,也能够只针对XML文档中的一部份。
(1).称号空间限制全部XML文档
<?xml version=”1.0”?> <member_details xmlns=”http://www.testns.com/ns.xsd”> <name>Tom</name> <age>12</age> <sex>male</sex> </member_details>
(2)称号空间只针对XML文档中的一部份
<?xml version=”1.0”?> <member_details> <name xmlns=”http://www.testns.com/ns.xsd”>Tom</name> <age>12</age> <sex>male</sex> </member_details>
(3)嵌套的定名空间
<?xml version=”1.0”?> <member_details xmlns=”http://www.testns.com/ns.xsd” xmlns:newns=”http://www.testns/newns.xsd”> <name>Tom</name> <age>12</age> <newns:sex>male</sex> </member_details> // 此例中,除了元素sex被定义在新的称号空间中外,其他的元素依然运用本来的称号空间。
(4)schemaLocation
schemaLocation 属性援用具有目的称号空间的 XML 架构文档(.xsd)。该xml文件中用到的一切新创的元素、属性等的.xsd文件都必须在这里声明。
<xsi:schemaLocation="list of anyURI" >
个中的anyURI是一个架构位置,该架构包括限制的(具有称号空间的架构)架构组织。每一对中的第一个 URI 援用是称号空间称号,第二个则是形貌称号空间的架构的位置。
将具有目的称号空间的架构文档与实例文档相干联。能够列出多对 URI 援用,每一对都有差别的称号空间称号部份。
依据万维网联合会 (W3C) XML 架构发起,XML 实例文档能够同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。另外,还能够屡次列出同一个定名空间。
以下示例显现怎样运用 xsi:schemaLocation 属性为多个 XML 架构文档供应位置信息。
<p:Person xmlns:p="http://contoso.com/People" xmlns:v="http://contoso.com /Vehicles" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://contoso.com/People http://contoso.com/schemas/people.xsd http://contoso.com/schemas/Vehicles http://contoso.com/schemas/vehicles.xsd http://contoso.com/schemas/People http://contoso.com/schemas/people.xsd"> <name>John</name> <age>28</age> <height>59</height> .... </p:Person>
(5)noNamespaceSchemaLocation
noNamespaceSchemaLocation 属性援用没有目的称号空间的 XML 架构文档。
<xsi:noNamespaceSchemaLocation="anyURI" >
与SchemaLocation雷同anyURI是一个架构位置,该架构包括非限制的(没有称号空间的架构)架构组织。
不请求 XML 架构有称号空间。若要为没有目的称号空间的 XML 架构指定位置,请运用 noNamespaceSchemaLocation 属性。此属性中援用的 XML 架构不能有目的称号空间。由于此属性不接受 URL 列表,所以只能指定一个架构位置。
依据万维网联合会 (W3C) XML 架构发起,XML 实例文档能够同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。
以下示例显现怎样对包括非限制元素的实例文档运用 xsi:noNamespaceSchemaLocation 属性。
<?xml version="1.0" encoding="UTF-8"?> <book:books xmlns:book="http://www.example.org/02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="02.xsd"> <book:book id="1"> <book:title>Java in action</book:title> <book:content>Java is good</book:content> <book:author>Bruce</book:author> </book:book> </book:books>
经由过程上边的剖析,我们能够看到,XML和Schema的定名空间标签运用花样是雷同的(这也是Schema相对与DTD的上风),但XML和Schema都有各自的奇特的属性,这也是由他们差别的功用决议的,Schema主要给XML供应效劳,所以会划定好targetNameSpace来声明定名空间的名字,而XML须要运用schema的效劳,所以须要SchemaLocation来声明运用的定名空间。
以上就是XML和Schema定名空间的细致引见的细致内容,更多请关注ki4网别的相干文章!