因为学习Sematic Web的原因接触RDF,RDF的学习又涉及到了XML Schema,因此这里复习了一下XML Schema。
-- 引入目的是克服XML DTD的局限性,并且XML Schema是W3C的正式标准
特点:
1)XML Schema本身也是一种XML文档
2)由于特点(1),XML Schema可以用DOM\SAX\JDOM等XML API来解析其中的内容
3)XML Schema对名称空间支持的非常好
先引入一段XML文档 xmlbook.xml,代码如下
<?xml version="1.0" encoding="utf-8" >? <bookshelf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlbook.xsd"> <book> <bookName>XML</bookName> <author>Well_SUN</author> <price>28</price> </book> </bookshelf>
在此基础上引入一个XML Schema的约束文档进行进一步的解释
<?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="bookshelf"> <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:element name="book"> <xs:complexType> <xs:sequence> <xs:element name="bookName" type="xs:string" /> <xs:element name="author" type="xs:string" /> <xs:element name="price" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
下面说一下一些标签的使用说明:
(1)<schema>元素为XML Schema文档的根元素,用于声明该文档为XML Schema文档
(2)xmlns:xs="http://www.w3.org/2001/XMLSchema" 表明文档的名称空间(所有的词汇来自于这个文档),并将该名称空间定义成使用xs前缀名来代表,所以所有有关元素前都增加了xs前缀
(3)<element>用于定义实例文档各种的一个元素,通过 type 来指定类型
(4)若一个元素具有子元素或属性,则该元素需要定义为 复杂类型 。使用<complexType>来嵌套在相关的<element>元素中,子元素必须嵌套在<sequence>标签内
(5)<xs:sequence maxOccurs="unbounded"> 该属性设置表示嵌套在<sequence>元素中的子元素定义可以在XML实例文档中出现多次
此外,值得说明的是 name space的作用:
1)使用名称空间来区分每个约束模式文档,每个名称空间使用唯一的URI表示
2)通过在元素名前加前缀的方式来表明该元素所属于的模式文档的名称空间
URI,Uniform Resource Locator,统一资源定位符,更注重资源而不太注重位置
“前缀部分:本地部分” 的形式来作为元素或属性的完整名称
名称空间声明:
xmlns:PREFIX_NAME="URI",其中 PREFIX_NAME 为名称空间的一个临时缩写
在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效
默认名称空间:--- pdf 38
xmlns="uri" 即省略前缀部分,以这种方式声明的名称空间将作为其作用域内的所有元素的默认名称空间
属性的名称空间:
xml:space 和 xml:lang 属性 --- pdf 39
xml:space 告诉下游应用程序如何处理解析器传递的空格等字符
xml:lang 用于设置国家地区的语言格式,解决国际化问题
最后,关于引入XML Schema文档的问题:
1)使用名称空间引入XML Schema文档
声明名称空间,并指定该名称空间所对应的XML Schema文档的存储位置, 通过schemaLocation属性来指定
2)不使用名称空间引入XML Schema文档
但它只可以引入一个XML Schema文件对其进行约束。XML Schema文档的位置通过noNamespaceSchemaLocation属性直接指定,noNamespaceSchemaLocation属性也是在标准命名空间“http://www.w3.org/2001/XMLSchema-instance”中定义的
节前的几天会对RDF进行系统的回顾。