XML Schema命名空间

XML Schema命名空间

写在前面

XML Schema有两种,分别是微软W3C的版本。可以从其命名空间直接区分

  • 微软的Schema,以.xml为文档后缀,文档头二句是:

    <?xml version="1.0"?>    
    <Schema xmlns="urn:schemas-microsoft-com:xml-data">
  • W3C的Schema,又称为XSD(XML Schema Definition),通常以.xsd为文档后缀,文档头二句是:

    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3c.org/2001/XMLSchema">

这里我们主要讨论的是W3C版本,实际上两者差别并不是很大。

在Schema中

<xsd:schema xmlns:xsd= "http://www.w3.org/2001/XMLSchema" 
            xmlns="http://www.jnu.edu.cn/namespace/stu"
            targetNamespace="http://www.jnu.edu.cn/namespace/stu"
            elementFormDefault="qualified">

这段代码是W3C版本下的Schema命名空间的声明。下面我们逐个介绍这个根元素各个属性的含义。

xmlns

这个指出此Schema文档的命名空间,其中xsd是前缀,在后续的代码中用xsd来代替http://www.w3.org/2001/XMLSchema这个命名空间。

当没有前缀的时候表示该命名空间是默认的命名空间,同时,标准的命名空间不可以写成:

  • xmlns=”http://www.w3.org/2001/XMLSchema

    这个的话就失去了前缀,是不允许的,允许没有前缀的是其他命名空间,而不是标准的命名空间。

其次,可以存在多个其他的命名空间,也可以没有。但是标准的命名空间http://www.w3.org/2001/XMLSchema必须要有,且只能有一个。如参考的例子中:

  • xmlns:xsd= “http://www.w3.org/2001/XMLSchema” 表示标准的命名空间
  • xmlns=”http://www.jnu.edu.cn/namespace/stu”表示其他命名空间,且是默认的,因为无前缀。当然这个可以没有,那么就表示这个Schema没有命名空间,不算标准命名空间。
targetNamespace

这个指出本Schema文档的命名空间,相当于自己的名字一样,和其中一个xmlns的值相同。可以没有这个属性,表示当前Schema没有命名空间。

elementFormDefault

引用自http://blog.csdn.net/lmj623565791/article/details/12655781

1、在xml中,所有引用xsd的全局的元素都必须加上命名空间的前缀(例如xmlns:aa=http://www.example.org/classroom,全局元素都得加上aa)。

2、非全局的元素当设置为qualified时,必须添加命名空间的前缀。

3、非全局的元素当设置为unqualified时,不必也不能添加前缀。 

在XML实例文档中

XML文档要引用Schema需要加入下列关键语句,参考上个例子,假设根元素是stu,保存之后是C:\example.xsd

     <?xml version="1.0"?> 
     <stu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns="http://www.jnu.edu.cn/namespace/stu"
          xsi:schemaLocation=“file://C:/example.xsd”> 
xmlns

这里的xmlns和Schema中的不一样,这里的xmlns指出XML的实例命名空间,也就是实现和Schema的对接。

同样的,需要一个标准实例空间:xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

该命名空间申明XML实例文档愿意遵循Schema的实例规范。

xmlns=”http://www.jnu.edu.cn/namespace/stu”这个指出该实例文档要引用的命名空间,是真实有用的。

schemaLocation和noNamespaceLocation

这两个属性分别指出一个有命名空间的schema和无命名空间的schema的位置。这个属性要跟实际的schema中有没有命名空间相对应。比如我们上个例子的就是有命名空间的,于是在xml实例文档中用了schemaLocation属性。当然也可以指定多个有名和无名命名空间,例如下面这个:

<booklist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="book2Namespace.xsd"
    xmlns:crazy="http://www.crazyit.org/crazy"
    xmlns:crazyitnet="http://www.crazyit.net.cn"    
    xsi:schemaLocation="http://www.crazyit.org/crazy/crazy.xsd
    http://www.crazyit.net.cn/crazyitnet.xsd">
</booklist>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值