用DTD约束XML详解及示例

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

dtd的三种引入方式
    (1)引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd路径">

    (2)使用内部的dtd文件

 <!DOCTYPE 根元素名称 [
            <!ELEMENT person (name,age)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
        ]>

    (3)使用外部的dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">

例如 struts2 框架配置文件 使用 外部的dtd文件

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

 使用dtd定义元素
            简单元素:没有子元素的元素  <!ELEMENT 元素名 约束>   如:<!ELEMENT name (#PCDATA)>
                   约束: (#PCDATA): 约束name是字符串类型
                     EMPTY : 元素为空(没有内容)
                  ANY:任意类型
                复杂元素:有子元素的元素  <!ELEMENT 元素名称 (子元素)>  如:<!ELEMENT person (name+,age?,sex*,school)>
             子元素后面的符号表示子元素出现的次数  + :表示一次或者多次
                                       ? :表示零次或者一次
                                       * :表示零次或者多次
                                   无 :子元素只能出现一次
                            子元素直接使用逗号进行隔开 ,表示元素出现的顺序
          子元素直接使用|隔开,表示元素只能出现其中的任意一个

使用dtd定义属性
        语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
          属性类型:CDATA: 字符串          如:<!ATTLIST  birthday  ATT  CDATA  #REQUIRED>
            枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个 。如<!ATTLIST  age  ATT2  (AA|BB|CC)   #REQUIRED>
            ID: 值只能是字母或者下划线开头  <!ATTLIST name  ATT3  ID    #REQUIRED>
      属性的约束:   #REQUIRED:属性必须存在
             #IMPLIED:属性可有可无
                                    #FIXED: 表示一个固定值   <!ATTLIST  sex ATT4  CDATA  #FIXED  "ABC">
             直接值:不写属性,使用直接值,写了属性,使用设置那个值   <!ATTLIST school ATT5 CDATA "WWW">

实体的定义
        语法: <!ENTITY 实体名称 "实体的值">       如:<!ENTITY TEST "HAHAHEHE">
      使用实体: &实体名称;  比如 &TEST;(注:定义实体需要写在内部dtd里面,如果写在外部的dtd里面,有某些浏览器下,内容得不到
实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
    <!ELEMENT person (name+,age?,sex*,school,birthday)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name ATT ID   #REQUIRED >
    <!ELEMENT age (#PCDATA)>
    <!ATTLIST age ATT2 (AA|BB|CC)  #REQUIRED >
    <!ELEMENT sex  (#PCDATA)>
    <!ATTLIST sex ATT4 CDATA #FIXED "ABC" >
    <!ELEMENT school  (#PCDATA)>
    <!ATTLIST school ATT5 CDATA "WWW">
    <!ELEMENT birthday (#PCDATA)>
    <!ATTLIST birthday ATT1 CDATA #IMPLIED >
    <!ENTITY TEST "HAHAHEHE">
]>
<person>
    <name ATT="A1">&TEST;</name>
    <age ATT2="CC">20</age> 
    <sex ATT4="ABC">111</sex> 
    <school>1111</school>
    <birthday>2015</birthday>
</person>

显示结果:

posted @ 2016-10-12 18:25  凌晨。。。三点  阅读(5440)  评论(0编辑  收藏  举报