XML 文档定义的两种形式(DTD,SCHEMA)
http://wlt2008-com.iteye.com/blog/1072747 http://www.w3school.com.cn/schema/schema_howto.asp XML DTD是目前使用比较广泛的一种XML模式,而XML SCHEMA是W3C官方推荐的XML定义格式。 DTD 指定:可以在文档中存在的元素、那些元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。 XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。 结构良好的XML文档——如果某个文档符合XML语法规范,那么我们就说这个文档是“结构良好”的文档。使用本书讲到的XMLSpy 2006工具就可以测试某文档是否为结构良好的XML文档。 有效的XML文档——所谓有效的XML文档是指通过了DTD的验证的,具有良好结构的XML文档,在此大家要明白XML文档可分为结构良好的XML文档和有效的XML文档,以及他们之间的关系。即具有结构良好的XML文档并不一定就是有效的XML文档,反之一个有效的XML文档必定是一个结构良好的XML文档。 xml schema 与 xml dtd 区别: XML Schema和DTD都用于文档验证,但二者还有一定区别,本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)。另外: XML Schema是内容开放模型,可扩展,功能性强;而DTD可扩展性差; XML Schema支持丰富的数据类型,而DTD不支持元素的数据类型,对属性的类型定义也很有限; XML Schema支持命名空间机制,而DTD不支持; XML Schema可针对不同情况对整个XML文档或文档局部进行验证;而DTD缺乏这种灵活性; XML Schema完全遵循XML规范,符合XML语法,可以和DOM结合使用,功能强大;而DTD语法本身有自身的语法和要求,难以学习; 1. 最简单的Schema文档 首先,我们写出一个最简单的XML文档。 hello.xml ------------------- <?xml version="1.0"?> <greeting>Hello World!!</greeting> <!--一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。--> hello.xsd ---------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="greeting" type="xsd:string"/> XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd="http://www.w3.org/2001/XMLSchema,用元素<element>定义实例文档中的元素,如greeting。 2. 含子元素的Schema文档 customer.xml ----------- <customer> <name>teiki</name> <address>No.237,Road Waitan,Shanghai</address> </customer> 则可以写出以下的XML Schema文档: customer.xsd ---------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="address" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 实例文档customer.xml中,<customer>元素含有两个子元素,所以我们在Schema文档中采用ComplexType来定义该元素。sequence表示子元素依次出现的顺序。 3. 含子元素和孙元素的Schema文档 customer.xml --------------- <customer> <name>Teiki</name> <address> <!-- address追加一个地址子元素 --> <prefecture>Zhejiang</prefecture> <city>Hangzhou</city> <street>Xilu Road,No.121,7F</street> </address> </customer> 为此,我们需要一个更加复杂一点的Schema文档: address.xsd ----------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <!-- 追加子元素address--> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="prefecture" type="xsd:string"/> <xsd:element name="city" type="xsd:string" /> <xsd:element name="street" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 不过,我们还可以采用ref元素来重新编写这个Schema文档: address2.xsd ---------------------- <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element ref="address"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="prefecture" type="xsd:string"/> <xsd:element name="city" type="xsd:string" /> <xsd:element name="street" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |