• DTD与XML Schema


    XML是一种数据格式化语言,用于描述复杂的数据结构。而DTD/Schema是规范XML文档,对XML文档的书写进行约束

    XML DTD

    一个例子

    DTD约束文档

    <!ELEMENT books (book)>
    <!ELEMENT book (name,price)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT price (#PCDATA)>
    

    在DTD文档中定义book Tag的相关属性

    XML文档

    <?xml version="1.0" encoding="utf-8" ?>
    
    <!DOCTYPE books SYSTEM "books.dtd">
    <books>
    <book>
    <name>java</name>
    <price>$16</price>
    </book>
    </books>
    

    在XML文档中引入DTD约束,因为DTD中规定books Tag有book组成,因此在XML中books Tag需有book child Tag,
    DTD中规定book Tag由name和price组成,因此XML文档中book Tag必须有name和price

    当然DTD和XML可以写在同一个文件中

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE users [
    <!ELEMENT users (user*)>
    <!ELEMENT user (id,username,password,email,birthday)>
    <!ELEMENT id      (#PCDATA)>
    <!ELEMENT username    (#PCDATA)>
    <!ELEMENT password (#PCDATA)>
    <!ELEMENT email    (#PCDATA)>
    <!ELEMENT birthday    (#PCDATA)>
    ]>
    <users>
    <user>
    <id>1</id>
    <username>1</username>
    <password>1</password>
    <email>1</email>
    </user>
    </users>
    

    XML引入DTD

    XML中有两个方式引入DTD,一种是直接引入,即将DTD和XML写在同一个文档中。还有一种是外部引入。外部引入分为本地和公共。本地表示自定义DTD,而公共则表示大家共同认可的DTD。

    本地引入DTD 
    	<!DOCTYPE root-element SYSTEM "filename">
    引入公共DTD
    	<!DOCTYPE root-element PUBLIC "DTD-NAME" "URL">
    

    很少有自定义DTD,大部分开发场景下都使用公用DTD,关于DTD可参考DTD定义

    XML Schema

    xml Schema使用预先定义好的元素和属性开发的,其本身就是XML文档(这与DTD不同),通过Schema再来规定XML实例文档。由于一个XML实例文档可以引入多个Schema,为了避免元素重名问题,每个Schema都应有一个名称空间(这里使用URI来区分)。由于定义Schema文档时要用到预先定义的属性和元素,因此需引入W3C组织规定的scheme,即xmlns="http://www.w3.org/2001/XMLSchema"

    约束文档

    <?xml version="1.0" encoding="utf-8" ?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNameSpace="http://www.dy-pc.com"
    elementFormDefault = "qualified"
    >
    <element name="books">
    	<complexType>
    		<sequence>
    			<element name="book">
    				<squence>
    					<element name="name" type="string" />
    					<element name="price" type="double" />
    				</squence>	
            	</element>
    		</sequence>
    	</complexType>
    </element>
    

    XML文档

    <?xml version="1.0" encoding="utf-8" ?>
    <books  xmlns="http://www.dy-pc.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		xsi:schemaLocation="http://www.dy-pc.com  test.xsd">
    	<book>
    		<name>java</name>
    		<price>$16</price>
    	</book>
    </books>
    
  • 相关阅读:
    Leetcode 233 Number of Digit One
    获取各种常见形状的位图
    关于编程
    LintCode-第k大元素
    基于IBM Bluemix的数据缓存应用实例
    LeakCanary:简单粗暴的内存泄漏检測工具
    MFC,C++,VC++,VS2010 之间究竟是什么关系
    我对高考考场制度(比方是否同意迟到、忘带考证、上厕所)优化的点滴思考,不一定非常有道理
    ural 1989(树状数组+多项式hash)
    TI C66x DSP 系统events及其应用
  • 原文地址:https://www.cnblogs.com/xidongyu/p/12237183.html
Copyright © 2020-2023  润新知