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>