XML Schema 是什么
XML Schema完全解说:本文讲述了XML Schema 是什么,为什么需要XML Schema ,以及举例说明怎么为一个XML文档准备XML Schema。
XML Schema 是用来定义XML格式,构造的语言的一种。有W3C加以开发,标准定义。
XML Schema 本身也是一种XML构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema是对XML的树形构造加以描述说明的一种语言。
原本,使用DTD对XML的树形构造加以描述说明,但DTD存在严重的局限性,DTD不能定义数据的类型,语法也与XML语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。
上面我们解说了XML Schema是什么,但为什么需要XML Schema呢?为了回答这个问题,我们举个例子。
XML作为数据载体,可以用来描述各种各样的数据。在系统开发中,可以使用XML在系统(或不同功能模块)之间传递数据,也可以使用XML作为配置文件,数据文件等。
但系统使用XML,需要对XML文件本身加以解析,也就是说,系统需要知道XML文件的格式是什么。
比如下面两个XML文件:
hello.xml
order.xml
它们的格式不一样,所代表的意思也不一样。
一般来说,一个系统只能处理那些事先决定好的具有固定构造的XML文档。
也就是说,系统在使用它们之前,需要判别它们是否是合法的XML文件格式。
而XML Schema则刚好可以很好地对XML构造加以描述。
事实上,一些XML解析器,以及某些工具需要借助XML Schema来处理XML。
我们为上面的例子
hello.xml
写一个简单的XML Schema:
hello.xsd
解说:
第一行:
<?xml version="1.0" encoding="utf-8"?>
XML申明。XML Schema本身也是XML文档,所以它遵循XML记述语法。使用encoding属性指定文档的编码格式。
根节点:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
其中xs是命名空间,schema是根节点名。
注意xs:schema与xmlns:xs中的xs要完全一样(名称可以任意,只要一样就可以),它标明以xs:开头的节点元素是http://www.w3.org/2001/XMLSchema定义的元素。
element元素
<xs:element name="hello" type="xs:string">
上面已经说明,xs:element表示element是http://www.w3.org/2001/XMLSchema中定义的元素。它的name属性用来定义它所描述的XML文档中的节点名。type是表示该节点的值的类型。这里的xs:string(string类型)表示hello节点不能包含子节点,不能包含属性,它的内容值应该是string类型。
除了string之外,XML Schema还有很多其他类型,我们另外的文章再作介绍。
最后使用
</xs:schema>
完成整个XML Schema描述。
XML Schema 具体是什么呢?
XML Schema 本身也是一种XML构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema是对XML的树形构造加以描述说明的一种语言。
原本,使用DTD对XML的树形构造加以描述说明,但DTD存在严重的局限性,DTD不能定义数据的类型,语法也与XML语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。
为什么需要XML Schema?
上面我们解说了XML Schema是什么,但为什么需要XML Schema呢?为了回答这个问题,我们举个例子。
XML作为数据载体,可以用来描述各种各样的数据。在系统开发中,可以使用XML在系统(或不同功能模块)之间传递数据,也可以使用XML作为配置文件,数据文件等。
但系统使用XML,需要对XML文件本身加以解析,也就是说,系统需要知道XML文件的格式是什么。
比如下面两个XML文件:
hello.xml
- <?xml version="1.0"?>
- <hello>World</hello>
order.xml
- <?xml version="1.0"?>
- <order>
- <id>01</id>
- <name>Order Book</name>
- <price>100.00</price>
- </order>
它们的格式不一样,所代表的意思也不一样。
一般来说,一个系统只能处理那些事先决定好的具有固定构造的XML文档。
也就是说,系统在使用它们之前,需要判别它们是否是合法的XML文件格式。
而XML Schema则刚好可以很好地对XML构造加以描述。
事实上,一些XML解析器,以及某些工具需要借助XML Schema来处理XML。
简单的XML Schema例
我们为上面的例子
hello.xml
- <?xml version="1.0"?>
- <hello>World</hello>
写一个简单的XML Schema:
hello.xsd
- <?xml version="1.0" encoding="utf-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="hello" type="xsd:string">
- </xs:schema>
解说:
第一行:
<?xml version="1.0" encoding="utf-8"?>
XML申明。XML Schema本身也是XML文档,所以它遵循XML记述语法。使用encoding属性指定文档的编码格式。
根节点:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
其中xs是命名空间,schema是根节点名。
注意xs:schema与xmlns:xs中的xs要完全一样(名称可以任意,只要一样就可以),它标明以xs:开头的节点元素是http://www.w3.org/2001/XMLSchema定义的元素。
element元素
<xs:element name="hello" type="xs:string">
上面已经说明,xs:element表示element是http://www.w3.org/2001/XMLSchema中定义的元素。它的name属性用来定义它所描述的XML文档中的节点名。type是表示该节点的值的类型。这里的xs:string(string类型)表示hello节点不能包含子节点,不能包含属性,它的内容值应该是string类型。
除了string之外,XML Schema还有很多其他类型,我们另外的文章再作介绍。
最后使用
</xs:schema>
完成整个XML Schema描述。