XML Schema和名域(命名空间)
XML Schema和名域
Schema 是一些规则的集合(也称为语法或者语汇),其中包括了类型定义(简单和复杂类型)以及元素和属性声明。由于XML中可能存在不同的语汇来描述不同的元素和属性,因此需要使用名域(namespace)和前缀来避免元素和属性声明之间的模糊性。当你使用来自多个名域的schema时,分清元素和属性名称是最基础性的工作。
一个名域通常有一串字符串来相互区别,如 "urn:www.microsoft.com", "http://www.xml.org.cn", "http://www.w3c.org/2001/XMLSchema"以及 "uuid:1234567890"等。
XML Schema的序言
XML schema的开头时是一些导言,之后才是正式的声明。在schema 元素的导言中可能包含三个可选的属性。
例如,下面的语法使用的schema元素引用了三个最常使用的名域:
<schema
xmlns="http://www.w3c.org/2001/XMLSchema" xmlns:xsd="http://www.w3c.org/2001/XMLSchema-datatypes" xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instances"
version"1.0">
</schema>
前两个属性用XML名域来标识W3C中的两个XML schema规范。第一个 xmlns属性包含了基本的XML schema元素,比如element, attribute, complexType, group, simpleType等。第二个xmlns属性定义了标准的XML schema属性类型例如string, float, integer, 等。
缺省名域
对于任何一个XML Schema定义文档(XSD)都有一个最顶层的schema (XSD)元素。而且该schema (XSD)元素定义必须包含下面的名域:
http://www.w3.org/2001/XMLSchema
作为名域的标识符(在声明中作为元素或属性的前缀),你也可以不使用xsd或xsi。
我们分别来观察XSD和XML实例文档中相关的名域。比如前面介绍student.xsd的序言是这样的:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sl="http://www.xml.org.cn/namespaces/StudentList" targetNamespace="http://www.xml.org.cn/namespaces/StudentList">
这里的targetNamespace属性表示了该shema所对应的名域的URI。也就是说在引用该Schema的其它文档中要声明名域,其URI应该是 targetNamespace的属性值。例如在这里因为要用到student.xsd自己定义的扩展数据类型,所以也声明的名域xmlns:sl= "http://www.xml.org.cn/namespaces/StudentList"。
我们再来看由该schema规定的XML文档的开头将是什么样子:
<studentlst xmlns="http://www.xml.org.cn/namespaces/StudentList"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xml.org.cn/namespaces/StudentList student.xsd">
其中缺省名域声明xmlns="http://www.xml.org.cn/namespaces/StudentList"就是和刚刚声明的XML Schema的名域相结合来规定该XML文档。xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" 是任何XML实例文档固有的名域,当然按照前面所说的名域名称xsi是可以自己规定的。而xsi:schemaLocation="http: //www.xml.org.cn/namespaces/StudentList student.xsd"则规定了该名域所对象的schema的位置,即在相同路径的student.xsd文件。