您的位置:首页 > 其它

用DTD约束XML详解及示例

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

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

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

<?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>


显示结果:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: