zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    Command Line Tools for win32
    鼠标快速复制粘帖工具!
    IBM T系列笔记本安装2003未知设备问题!
    拔智齿!痛苦磨难中!
    I am a hero!
    vim学习笔记!
    产生数
    NumPy矩阵运算
    1130:找第一个只出现一次的字符
    小A与小姐姐给气球涂色[dp + 快速幂]
  • 原文地址:https://www.cnblogs.com/xidongyu/p/12237183.html
Copyright © 2011-2022 走看看