文档类型定义(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>

显示结果:
aaarticlea/png;base64,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" alt="" />

用DTD约束XML详解及示例的更多相关文章

  1. Ant 之bulid.xml详解

    ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...

  2. logback的使用和logback.xml详解,在Spring项目中使用log打印日志

    logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分 ...

  3. 转载 logback的使用和logback.xml详解 http://www.cnblogs.com/warking/p/5710303.html

    logback的使用和logback.xml详解  一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前 ...

  4. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  5. build.xml详解

    build.xml详解1.<project>标签每个构建文件对应一个项目.<project>标签时构建文件的根标签.它可以有多个内在属性,就如代码中所示,其各个属性的含义分别如 ...

  6. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  7. Tomcat配置(二):tomcat配置文件server.xml详解和部署简介

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务 ...

  9. Ant之build.xml详解

    Ant之build.xml详解 关键字: ant build.xml Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译 ...

随机推荐

  1. prob

    void calc_probability(int num) { , j = , k = ; #define SIZE_NUM 8 int *array_num = NULL; int *rememb ...

  2. 繁华模拟赛 Evensgn与字符矩阵

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  3. More is better(MST)(求无向图中最大集合元素个数)

    More is better Time Limit:1000MS     Memory Limit:102400KB     64bit IO Format:%I64d & %I64u Sub ...

  4. Android5.0版本之后切换听筒模式

    5.0以前Android听筒模式和扬声器模式这样就管用 扬声器://关闭麦克风  mAudioManager.setMicrophoneMute(false);  // 打开扬声器  mAudioMa ...

  5. [颓废] 改某人的WebGL light mapping demo并9xSSAA

    渲染图(4k) 链接: http://pan.baidu.com/s/1bnB4Wqz 密码: 8839 2px高斯模糊+立方缩小AA:  链接: http://pan.baidu.com/s/1mg ...

  6. 生成PHP数组文件

    1. 解释型语言的妙处之一,在于可以动态生成代码再调用执行~2. 对于数据量不大(几千条?)的(key,value),存成数组文件,执行查找操作,效率应该是好于数据库操作的:3. php的数组,是ha ...

  7. Java中Set集合的使用

    除了List之外,Set集合接口也经常使用,Set接口中存放的元素是无序的并且是不可重复的,因此被称为数据集: Set接口因为是无序的,所以没有提供像List一样的set方法来修改元素,查找,添加.删 ...

  8. Java for LeetCode 165 Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  9. Java for LeetCode 064 Minimum Path Sum

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  10. cc.game

    概述 使用cc.game单例代替了原有的cc.Application以及cc.AppControl. cc.game是Cocos2d-JS的游戏对象,主要职责包括,配置的读取,引擎的加载,游戏脚本的加 ...