`

XML Schema介绍之namespace

    博客分类:
  • XML
阅读更多
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhangjunhd.51cto.com/blog/113473/18934
介绍XML Schema的中名称空间,回答namespace, targetNamespace,schemaLocation的概念是什么,功能是什么?
author: ZJ 07-2-28
Blog:
http://zhangjunhd.blog.51cto.com/
1.名称空间
     名称空间是W3C推荐标准提供的一种统一命名XML文档中的元素和属性的机制。使用名称空间可以明确标识和组合XML文档中来自不同标记词汇表的元素和属性,避免了名称之间的冲突。
1.1声明名称空间
     名称空间声明的一般形式为:第一部分是一个关键字xmlns:,第二部分是名称空间的前缀,第三部分是一个等号,第四部分是双引号,将第五部分的名称空间标识URI包括起来。需要注意的是,名称空间的前缀不能为xml,因为在XML中这个字符串是保留作特殊用途的。例:
xmlns:river=”http://www.testriver.com///其中river为前缀。
     还可以隐式声明名称空间,即省略掉冒号和名称空间前缀。例:
xmlns=”http://www.testriver.com/
1.2 使用名称空间
1.2.1 在XML文档中使用名称空间
     在XML中,名称空间的使用涉及范畴的概念,范畴即名称空间的覆盖范围,它指的是哪些元素和属性在该名称空间中,哪些不在该名称空间中。名称空间既可以限定整个XML文档,也可以只针对XML文档中的一部分。
1.2.2示例:名称空间限定整个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>
1.2.3示例:名称空间只针对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>
1.2.4示例:嵌套的名称空间
<?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被定义在新的名称空间中外,其余的元素仍然使用原来的名称空间。
1.3 在XML Schema中使用名称空间
1.3.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
1.3.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的值,使得某些非全局成分不包含在名称空间中。如下:
<?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.w3.org/XML_Schema
targetNamespace=“http://www.test.com/ns/ns_test
elementFormDefault=“qualified“>
...
...
<xsd:complexType name=“cType“>
   <xsd:sequence>
     <xsd:element name=”name” type=”xsd:string” form=”unqualified”/>
     ...
2.一个XML Schema
     下面的例子是一个XML Schema文件,名为"note.xsd"。
3.一个与XML Schema相关联的XML文档
     下面的XML文档和上文给出的XML Schema相关联,名为"note.xml"。并且下文的讨论将围绕这两个文档展开。

4.XSD-<schema>元素
     <schema>元素是每个XML Schema的根元素:
<?xml version="1.0"?>
<xsd:schema>
...
...
</xsd:schema>
     <schema>元素可以包含一些属性。一个schema声明通常如下所示:
     对于任何一个XML Schema定义文档(XSD)都有一个最顶层的schema (XSD)元素。而且该schema (XSD)元素定义必须包含这个名称空间:http://www.w3.org/2001/XMLSchema。即此名称空间是由XML模式规范定义的标准名称空间-所有XML模式元素必须属于该名称空间。
     此片段:targetNamespace="",表明此schema (note, to, from, heading, body)定义的元素来自于""名称空间。这个targetNamespace属性表示了该shema所对应的名称空间的URI。也就是说在引用该Schema的其它文档(包括自身文档)中要声明名称空间,其URI应该是targetNamespace的属性值。例如在这里因为要用到note.xsd自己定义的扩展数据类型(note, to, from, heading, body),所以也声明了名称空间xmlns=""。而且该名称空间是默认名称空间(没有前缀)。targetNamespace属性为在模式中显式创建的所有新类型均声明了XML名称空间。http://www.w3schools.comhttp://www.w3schools.comhttp://www.w3schools.com
     我们再来看由该schema规定的XML文档note.xml的开头将是什么样子:
5.targetNamespace
     xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找。修改一下note.xsd,去除默认名称空间的声明,并添加一个复杂类型:
     上述代码中,复杂类型stu是找不到的,因为你定义了一个名称空间"",该复杂类型存在于""中,因此应该修改代码如下: http://www.w3schools.comhttp://www.w3schools.com
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="
"
targetNamespace="
"
xmlns:student="
"
elementFormDefault="qualified">
<xsd:element name="note">
       <xsd:complexType>
         <xsd:sequence>
        <xsd:element name="to" type="xs:string"/>
        <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
        <xsd:element name="body" type="xs:string"/>
        </xsd:sequence>
       </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="student:stu"/>
   <xsd:complexType name="stu">
   <xsd:sequence>
    <xsd:element name="Name" type="xs:string"/>
    <xsd:element name="Class" type="xs:string"/>
   </xsd:sequence>
</xsd:complexType>
</xsd:schema>
http://www.w3schools.comhttp://www.w3schools.comhttp://www.w3.org/2001/XMLSchema
     若自身并不使用重用组件,仅供外部使用的话,则只定义targetNameSpace就可以,不用指定别名。
     通过上面的例子,我们可以很深刻的理解targetNameSpace。targetNamespace定义了Schema定义的新元素与属性的名称空间。而""名称空间则定义了element, attribute, complexType, group, simpleType等元素。http://www.w3.org/2001/XMLSchema
6. schemaLocation
     schemaLocation 属性引用具有目标名称空间的 XML 架构文档(.xsd)。该xml文件中用到的所有新创的元素、属性等的.xsd文件都必须在这里声明。
<xsi:schemaLocation="list of anyURI" >
6.1属性
anyURI (list)
     一个架构位置,该架构包含限定的(具有名称空间的架构)架构构造。每一对中的第一个 URI 引用是名称空间名称,第二个则是描述名称空间的架构的位置。
6.2 备注
     该属性将具有目标名称空间的 XML 架构文档(.xsd)与实例文档(.xml)相关联。 不要求 XML 架构有名称空间。若要为没有目标名称空间的 XML 架构指定位置,请使用 noNamespaceSchemaLocation 属性。此属性中引用的 XML 架构不能有目标名称空间。因为此属性不接受 URL 列表,所以只能指定一个架构位置。

     将具有目标名称空间的架构文档与实例文档相关联。可以列出多对 URI 引用,每一对都有不同的名称空间名称部分。
     根据万维网联合会 (W3C) XML 架构建议,XML 实例文档可以同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。此外,还可以多次列出同一个命名空间。
6.3 示例
     以下示例显示如何使用 xsi:schemaLocation 属性为多个 XML 架构文档提供位置信息。
7.noNamespaceSchemaLocation
     noNamespaceSchemaLocation 属性引用没有目标名称空间的 XML 架构文档。
<xsi:noNamespaceSchemaLocation="anyURI" >
7.1属性
anyURI
     一个架构位置,该架构包含非限定的(没有名称空间的架构)架构构造。
7.2备注
     不要求 XML 架构有名称空间。若要为没有目标名称空间的 XML 架构指定位置,请使用 noNamespaceSchemaLocation 属性。此属性中引用的 XML 架构不能有目标名称空间。因为此属性不接受 URL 列表,所以只能指定一个架构位置。

     根据万维网联合会 (W3C) XML 架构建议,XML 实例文档可以同时指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 属性。
7.3示例
     以下示例显示如何对包含非限定元素的实例文档使用 xsi:noNamespaceSchemaLocation 属性。
分享到:
评论

相关推荐

    maven项目使用assembly打包jar时处理Unable to locate Spring NamespaceHandler问题

    使用assembly插件打包jar后启动时,总是出现Unable to locate Spring NamespaceHandler for XML schema....错误,网上找了各种方法都没有用,在尝试了100+失败后,解决了这个问题,在打包的jar中,META-INF目录下,...

    MS XML 6.0 SDK 文档

    The XML Data Reduced schema definition language (XDR), which Microsoft introduced support for top assist with XML schema working needs while awaiting the now final W3C standard XML Schema Definition ...

    dubbo.xsd文件

    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springframework.org/schema/tool" targetNamespace=...

    Java and XML, 3rd Edition

    书中的主题如下: *XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换 (Transformation) *SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 *DOM应用程序编程接口,...

    利用Dom4j生成XML和解析XML

    Namespace namespace1 = new DefaultNamespace("xs", "http://www.w3.org/2001/XMLSchema"); Namespace namespace2 = new DefaultNamespace("", namespace); root.add(namespace1); root.add(namespace2); ...

    JAVA与XML.rar

    书中的主题如下: XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层...

    DIXML v5.9.0 for D6-XE10.1 XML XSLT EXSLT 解析

    DIXml is an embedded XML, XSLT, and EXSLT processing library for Delphi (Embarcadero / CodeGear / Borland). It is build on the libxml2, libxslt and libexslt libraries but requires no DLLs nor other ...

    Java与XML第三版本

    书中的主题为XML基础,包括DTD、命名空间(namespace)、XML Schema和数据格式转换(Transformation) SAX应用程序编程接口,包括处理器接口、过滤器接口和写出接口 DOM应用程序编程接口,包括DOM第2层、第3层和DOM ...

    xml入门教程/xml入门教程

    只有结构符合所引用的DTD文件的XML文件才能称之为有效的XML文件。 DTD(文档类型定义) !DOCTYPE 定义DTD文件名 !ELEMENT 定义元素中可用的数据类型 #PCDATA 可解析字符串。 1)DTD的调用 方式一:调用内部文档类型...

    dubbo.xsd阿里巴巴开源xsd文件

    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springframework.org/schema/tool" targetNamespace=...

    JDOM创建XML完整实例和jdom-2.0.5.jar

    在工作中发现jdom生成xml标签如&lt;taxML xmlns:xsi="http://www.worg/2001/XMLSchema-instance" xsi:type="Fb1"cnName="附表1" name="Fb1"version="SW5001-2006"&gt; 不能用冒号的问题root.setAttribute("xsi:type", "fb1...

    ONVIF WSDL and XML Schemas Specifications

    Nov 2010 - ONVIF Device Management Service WSDL, ver 1.2 Nov 2010 - ONVIF Event Service WSDL, ver 1.2 ...Nov 2010 - ONVIF Topic Namespace XML, ver 1.2 Nov 2010 - ONVIF Schema, ver 1.2

    JavaXML解析器FastXml.zip

    支持namespace,但不校验schema 为什么FastXml这么快尽可能少的解码字节:往往xml文档中的很多字节都是ASCII范围,它们可以直接强转成char,而不需要解码,比如:标签名、属性名,大部分时候只需要对属性值和...

    Matlab高阶谱分析(HOSA)工具箱及安装方法

    XML-file failed validation against schema located in: D:\Program Files\MATLAB\R2007b\sys\namespace\info\v1\info.xsd XML-file name: d:\program files\matlab\r2007b\toolbox\hosa_d\hosa\info.xml To ...

    accept方法源码java-peretesan.:此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。元素或声明一个TilesCon

    此XML文件似乎没有与之关联的任何样式信息。 文档树如下所示。 &lt;xsd uff1aschema xmlns =“” xmlns:xsd u201c” xmlns:beans =“” xmlns:tool u201c” targetNamespace =“” elementFormDefault u201c ...

    wahaha.zip

    以XML作为编码与传输的语法,此外,也需要透过XML的名称空间(Namespace)来指定宣告属性(Property)词汇的纲要(Schema)。RDF规格提供了两种XML语法来对RDF资料模型进行编码,第一种称为序列语法(Serialization syntax)...

    EasyBuys.zip

    RDF以XML作为编码与传输的语法,此外,RDF也需要透过XML的名称空间(Namespace)来指定宣告属性(Property)词汇的纲要(Schema)。RDF规格提供了两种XML语法来对RDF资料模型进行编码,第一种称为序列语法(Serialization ...

    JXMLPad v4.1

    可用于编辑的XML/XHTML 文档特点:支持Javabeans的用法用DTD, Schema, RelaxNG将标签和实体的语法补充完整(从光标当前位置开始)用户可自定义事件工具条实时语法错误检测智能分析(Schema 检测)几个用于XML的标准...

    springAOP demo 带错误解决文档

    在搭建spring项目时通常需要这些jar包 ...org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace ...

    thymeleaf-extras-eclipse-plugin-2.1-master.zip

    All you need to do is create an XML file that conforms to the schema above, then bundle that XML file with your JAR. Some notes on where you put that file in the JAR: it cannot go in the default ...

Global site tag (gtag.js) - Google Analytics