DTD(Document Type Definition)文档类型定义:

DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形
成统一规范的文档。

在XML文档中使用DTD:

内部DOCTYPE声明:

在XML文档中包好DTD:<!DOCTYPE 根元素 [元素声明]>

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE student [
<!ELEMENT student (name,hometown,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT hometown (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<student>
<name>Halen</name>
<hometown>unknown</hometown>
<age>ninteen</age>
</student>

外部文档声明:

DTD作为单独文件存在:
引用共有DTD文档:<!DOCTYPE 根元素 PUBLIC "文件路径及文件名">
引用私有DTD文档:<!DOCTYPE 根元素 SYSTEM "文件路径及文件名">

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE student SYSTEM "student.dtd">
<student>
<name>Halen</name>
<hometown>unknown</hometown>
<age>ninteen</age>
</student>
<!DOCTYPE student [
<!ELEMENT student (name,hometown,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT hometown (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>

声明一个元素:

叶子元素声明:<!ELEMENT 元素名 类别>
枝干元素声明:<!ELEMENT 元素名 (子元素1,子元素2...)>
选择性子元素声明:<!ELEMENT 元素名 (子元素1|子元素2|...)>
 
类别可使用下列值:
EMPTY     空元素
#PCDATA   字符类型数据,声明时使用#PCDATA需要用括号将其括起来
ANY       任意内容
 
控制子元素出现次数:
无符号  子元素只出现1次
+       子元素出现1次或多次
?       子元素出现0次或1次
*       子元素出现任意次

声明属性:

语法规则:<!ATTLIST 元素名称 属性名称 属性类型 默认值>

示例:
<!ATTLIST student name CDATA "unknown">
<student name="unknown">
 
属性类型选项:
CDATA    值为字符数据 (character data)
(en1|en2|..)  此值是枚举列表中的一个值
ID     值为唯一的 id
IDREF    值为另外一个元素的 id
IDREFS    值为其他 id 的列表
NMTOKEN   值为合法的 XML 名称
NMTOKENS   值为合法的 XML 名称的列表
ENTITY    值是一个实体
ENTITIES   值是一个实体列表
NOTATION   此值是符号的名称
xml:    值是一个预定义的 XML 值
 
默认值参数也可选用下列值:
#REQUIRED   属性值是必需的
#IMPLIED  属性不是必需的
#FIXED value 属性值是固定的
默认值   在XML中若没有定义属性值,则采用默认值

DTD实体:

内部通用实体:在DTD中定义的一段具体数据,可在DTD或XML中引用
语法规则:<!ENTITY 实体名称 "实体值">
示例:
<!ENTITY unknown "BeiJing">
<hometown>&unknown;</hometown>

 
外部通用实体:在文档实体(DTD、XML文档)以外定义的实体对象
语法规则:<!ENTITY 实体名称 SYSTEM "URI/URL">
示例:
<!ENTITY unknown SYSTEM "hometown.txt>
<hometown>&unknown;</hometown>
&unknown;表示hometown.txt文件的内容
 
内部参数实体:只能出现在DTD文档中
语法规则:<!ENTITY % 实体名 实体内容>
示例:
<!ENTITY % info "(name,age)">
<!ELEMENT student %info;>
 
外部参数实体:在外部DTD文档中声明的参数实体
语法规则:<!ENTITY % 实体名 SYSTEM "URI/URL">

DTD笔记的更多相关文章

  1. XML学习入门

    很久没更新博客了.来一发! 关于XML,当时没学过感觉难吧?其实XML还是蛮好学的,这里留下一些入门级别的内容. XML中dtd(文档类型定义)的主要用处是约束xml,也可以去约束html,xhtml ...

  2. XML学习笔记2——DTD

    在上一篇笔记中,将文档类型分类时,曾经根据文档是否使用并遵守了DTD或Schema来区分为格式良好的XML和有效的XML,那么什么是DTD和Schema呢?DTD和Schema都是用来规范XML文档的 ...

  3. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

  4. DTD学习笔记

    1.  DTD基本介绍 xml文件分为两种类型,一个是在好形式,这是well-formed,还有一个合法有效,这是valid. XML文件遵循-called"好形式"各种语法规则要 ...

  5. 超全面的JavaWeb笔记day05<xml&dtd&jaxp>

    0.表单提交方式(*****) button提交 超链接提交 事件 1.xml简介和应用(了解) 2.xml文档声明和乱码解决(*****) 文档声明 必须放在第一行第一列 设置xml编码和保存编码一 ...

  6. 【代码笔记】XML深入学习:DTD约束与DTD语法(2)

    DTD语法之定义实体(了解即可) 实体分为一般实体和参数实体. 定义实体:定义变量 引用实体:使用变量 一般实体:定义实体在DTD中,实体引用在xml中. 参数实体:定义实体在DTD中,实体引用在DT ...

  7. 【代码笔记】XML深入学习:DTD约束与DTD语法(1)

    2015-12-27 文件名    student.xml <?xml version="1.0" encoding="GB2312" standalon ...

  8. DTD复习笔记(复习资料为菜鸟教程里的DTD教程)

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 为什么使用 DTD? 通过 DTD,您的每一个 XML 文件均可携带 ...

  9. HTML学习笔记——DOCTYPE和DTD,标准模式和兼容模式

    主要涉及知识点: HTML与XHTML HTML与XHTML的区别 DOCTYPE与DTD的概念 DTD的分类以及DOCTYPE的声明方式 标准模式(Standard Mode)和兼容模式(Quirc ...

随机推荐

  1. Spring 常见错误解决方案记录

    错误提示: 严重: Servlet.service() for servlet [datasync.controller.manager.SettingServlet] in context with ...

  2. 关于requirejs和grunt压缩合并是否矛盾

    requirejs主要是为了模块化开发,这样带来的好处不言而喻.但是分成多个js文件增加了请求数,那么就要用到合并压缩.合并压缩了原来的许多独立的js模块,那requirejs又是怎么冲压缩的文件中找 ...

  3. 【11】把 GitHub 当 CMS 用

    把 GitHub 当 CMS 用 你的网站需要显示一些文字,但是你还不想直接放在 HTML 里面,那你可以把 GitHub 作为你储存内容的一个地方. 这样,就可以让任何一个非程序员通过修改 Mark ...

  4. unittest编写Web测试用例

    案例:百度搜索关键词:“unittest” test_baidu.py: from selenium import webdriver from time import sleep import un ...

  5. 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

    /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x ...

  6. 九度oj 题目1031:xxx定律 题目1033:继续xxx定律

    题目描述:     对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止.    请计算需要经过几步才能将n变到1,具体可见样例. 输入:     ...

  7. iOS-runtime-根据协议名调某一个类有与协议里面放的相同的方法

    // // ViewController.m // ObserverTrampoline // // Created by Rob Napier on 9/7/11. // Copyright (c) ...

  8. 【Luogu】P2912牧场散步(TarjanLCA)

    题目链接 老天……终于碰上一个除了模板之外的LCA题了 这道题用Tarjan来LCA.树上两个点的路径是唯一的,所以钦定一个根,两点间的路径就是两点到根的路径减去双倍的公共祖先到根的路径.大概很好理解 ...

  9. [BZOJ1595] [Usaco2008 Jan]人工湖(单调栈)

    传送门 好难的题..至少对我来说. 这题就是模拟从最低的平台注水,然后将最低的填满以后从最低的平台向两边扩展,每次找最近的最低的平台h,然后将水填到h高度. 栈里存的是向外扩展的时候,有时会遇到高度递 ...

  10. [BZOJ3545] [ONTAK2010]Peaks(线段树合并 + 离散化)

    传送门 由于困难值小于等于x这个很恶心,可以离线处理,将边权,和询问时的x排序. 每到一个询问的时候,将边权小于等于x的都合并起来再询问. .. 有重复元素的线段树合并的时间复杂度是nlog^2n # ...