XML的约束技术DTD语法

引用本地DTD约束

<!DOCTYPE 文档根节点  SYSTEM "dtd文件">
如:
<!DOCTYPE 书架  SYSTEM "book.dtd">
<书架>
  <书>
  </书>
  <书>
  </书>
</书架>

引用公共的文件时

<!DOCTYPE 文档根节点  PUBLIC  "DTD名称" “DTD文件的URL”>
如:
<!DOCTYPE web-app PUBLIC  "....." “http://java.sun.com/dtd/web-app_2_3.dtd”>

DTD元素定义:

<!ELEMENT 元素名称 (子元素名称+)>  声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称*)> 声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称?)> 声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 带有子元素(序列)的元素
<!ELEMENT 元素名称 EMPTY> 空元素
<!ELEMENT 元素名称 ANY>  带有任何内容的元素
<!ELEMENT 元素名称 (#PCDATA)> 只有 PCDATA 的元素
<!ELEMENT note (to,from,header,(message|body))> 必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素
<!ELEMENT note (#PCDATA|to|from|header|message)*> 可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"
<?xml version="1.0" encoding="UTF-8"?>
<!-- 书架 有多本书 -->
<!ELEMENT 书架 (书+)>
<!-- 书 可以要有书名,作者,售价-->
<!ELEMENT 书  (书名,作者,售价)>
<!-- 书名的内容为字符串-->
<!ELEMENT 书名 (#PCDATA) >
<!ELEMENT 作者 (#PCDATA) >
<!ELEMENT 售价 (#PCDATA) >
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <>
        <书名>红楼梦</书名>
        <作者>堂婶</作者>
        <售价>34.0</售价>
    </>
    <>
        <书名>三国演绎</书名>
        <作者>老夫子</作者>
    </>
</书架>

属性定义:

<!ATTLIST 元素名称 属性名称 属性类型 属性值>   声明属性
其中属性类型
CDATA/(en1,en2,..)/ID/ENTITY实体
属性值:
默认值/#REQUIRED必须的/#IMPLIED不是必须的/#FIXED value固定值
<?xml version="1.0" encoding="UTF-8"?>
<!-- 书架 有多本书 -->
<!ELEMENT 书架 (书+)>
<!-- 书 可以要有书名,作者,售价-->
<!ELEMENT 书    (书名,作者,售价)>
<!-- 书的id属性 是唯一的ID,其中id不能用纯数字-->
<!ATTLIST 书 id ID #IMPLIED>
<!-- 书名的内容为字符串-->
<!ELEMENT 书名 (#PCDATA)>
<!-- 用于定义空元素 -->
<!ELEMENT 作者 (#PCDATA)>
<!-- 作者的phone属性是必须的-->
<!ATTLIST 作者 phone CDATA #REQUIRED>
<!-- 作者的age属性默认值是0 -->
<!ATTLIST 作者 age CDATA "0">
<!-- 作者的email的属性不是必须的 -->
<!ATTLIST 作者 email CDATA #IMPLIED>
<!-- 作者的地址只能是北京上海深圳  默认是北京-->
<!ATTLIST 作者 address (北京|上海|深圳) "北京">
<!-- 表示内容元素可以是任何类型-->
<!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <书 id="a1">
        <书名>红楼梦</书名>
        <作者 age="23" phone="123" address="上海">堂婶</作者> 
        <售价>34.0</售价>
    </>
    <书 id="a2">  
        <书名>三国演绎</书名> 
        <作者 email="lfz@qq.com" phone="345">老夫子</作者>   
        <售价>445</售价>
    </>
</书架>

实体定义:

<!ENTITY 实体名称 "实体的值"> 
<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个引用实体--> <!ENTITY copyright "Copyright W3Schools."> <!-- 书架 有多本书 --> <!ELEMENT 书架 (书+)> <!-- 书 可以要有书名,作者,售价--> <!ELEMENT 书 (书名,作者,售价)> <!-- 书的id属性 是唯一的ID,其中id不能用纯数字--> <!ATTLIST 书 id ID #IMPLIED> <!-- 书名的内容为字符串--> <!ELEMENT 书名 (#PCDATA)> <!-- 用于定义空元素 --> <!ELEMENT 作者 (#PCDATA)> <!-- 作者的phone属性是必须的--> <!ATTLIST 作者 phone CDATA #REQUIRED> <!-- 作者的age属性默认值是0 --> <!ATTLIST 作者 age CDATA "0"> <!-- 作者的email的属性不是必须的 --> <!ATTLIST 作者 email CDATA #IMPLIED> <!-- 作者的地址只能是北京上海深圳 默认是北京--> <!ATTLIST 作者 address (北京|上海|深圳) "北京"> <!-- 表示内容元素可以是任何类型--> <!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <书 id="a1">
        <书名>红楼梦</书名>
        <作者 age="23" phone="123" address="上海">堂婶</作者> 
        <售价>34.0</售价>
    </>
    <书 id="a2">  
        <书名>三国演绎</书名> 
        <作者 email="lfz@qq.com" phone="345">老夫子</作者>   
        <售价>445</售价>
    </>
    <书 id="a3">
        <书名>&copyright;</书名>
        <作者 phone="678">中央台</作者>
        <售价>23</售价>
    </>
</书架>
参数实体
<!ENTITY % 实体名称 "实体的值">  参数实体名称用于属性定义时使用
<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一个参数实体 -->
<!ENTITY % common.attrutes "remark CDATA #REQUIRED">
<!-- 书架 有多本书 -->
<!ELEMENT 书架 (书+)>
<!-- 书 可以要有书名,作者,售价-->
<!ELEMENT 书    (书名,作者,售价)>
<!-- 书的id属性 是唯一的ID,其中id不能用纯数字-->
<!ATTLIST 书 id ID #IMPLIED>
<!-- 书使用参数实体-->
<!ATTLIST 书 %common.attrutes;>
<!-- 书名的内容为字符串-->
<!ELEMENT 书名 (#PCDATA)>
<!-- 用于定义空元素 -->
<!ELEMENT 作者 (#PCDATA)>
<!-- 作者的phone属性是必须的-->
<!ATTLIST 作者 phone CDATA #REQUIRED>
<!-- 作者的age属性默认值是0 -->
<!ATTLIST 作者 age CDATA "0">
<!-- 作者的email的属性不是必须的 -->
<!ATTLIST 作者 email CDATA #IMPLIED>
<!-- 作者的地址只能是北京上海深圳  默认是北京-->
<!ATTLIST 作者 address (北京|上海|深圳) "北京">
<!-- 表示内容元素可以是任何类型-->
<!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <书 id="a1" remark="色情书">
        <书名>红楼梦</书名>
        <作者 age="23" phone="123" address="上海">堂婶</作者> 
        <售价>34.0</售价>
    </>
    < remark="历史书">  
        <书名>三国演绎</书名> 
        <作者 email="lfz@qq.com" phone="345">老夫子</作者>   
        <售价>445</售价>
    </>
    <书 id="a3" remark="政治书">
        <书名></书名>
        <作者 phone="678">中央台</作者>
        <售价>23</售价>
    </>
</书架>
posted @ 2016-05-05 23:03  倔强的鸭子  阅读(399)  评论(0编辑  收藏  举报