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文件。