XML DTD详解

 

 

XML DTD详解

前情提要与本文内容介绍

  前面的两篇XML相关博文:

  第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节

  第二篇介绍DTD,引入有效的XML的概念(符合语法规范并符合DTD要求),并介绍DTD的三种使用方法:有效的XML: DTD(文档类型定义)介绍与三种使用方式

  一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集。

  本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义。

<!DOCTYPE root-element SYSTEM "filename">   外部引用

<!DOCTYPE root-element  "filename">                  内部定义

<!ENTITY name SYSTEM  value>   外部引用

<!ENTITY name  value>                  内部定义

<!ELEMENT name  type>

<!ATTLIST   元素名称  属性名称  属性类型  属性特点  属性值>

元素的定义

DTD中的修饰符号:

  这部分符号可以联系正则表达式的符号来记忆。

属性的定义

属性类型——CDATA

  比如:

<!ATTLIST title name CDATA #REQUIRED>

  定义了一个属性,是属于title元素的,属性名叫name,类型是字符串(包括数字和中文),并且是一个必须要有的属性。

属性类型——NMTOKEN/NMTOKENS

  左边图中因为加了空格而出错。

属性类型——ID

  类型为ID的属性取值必须是唯一的。

  从这个例子还可以看到同一个元素可以一次定义多个属性,多个属性之间用空格分隔即可。

属性类型——IDREF/IDREFS

 

                                        (“儿子”后面漏掉了一个斜线)

属性类型——Enumerated

  实现定义好一些值,属性的值必须在所列出的值的范围内。

属性的特点

#REQUIRED

  元素的所有实例都必须有该属性的值(NOT NULL)。

  语法:

<!ATTLIST 元素名 属性名 属性类型 #REQUIRED>

  DTD示例:

<!ATTLIST person number CDATA #REQUIRED>

  XML示例:

<person number="6788"/>

#IMPLIED

  元素的实例中可以忽略该属性(NULL)。

  语法:

<!ATTLIST 元素名 属性名 属性类型 #IMPLIED>

  DTD示例:

<!ATTLIST contact fax CDATA #IMPLIED>

  XML示例:

<contact fax="888-228833"/>

  没有这个属性也是对的。

#FIXED value

  元素实例中该属性的值必须为指定的固定值。

  语法:

<!ATTLIST 元素名 属性名 属性类型 #FIXED "value">

  DTD示例:

<!ATTLIST sender company CDATA #FIXED "Microsoft">

  XML示例:

<sender company="Microsoft"/>

Default value

  为属性提供一个默认的值。

  语法:

<!ATTLIST 元素名 属性名 属性类型 "value">

  DTD示例:

<!ATTLIST hello paymenttype CDATA "check">

  XML示例:

<hello paymenttype="check"/>

定义实体

一般

  语法:

<!ENTITY 实体名 "实体值">

  DTD示例:

<!ENTITY writer "Donald Duck">

<!ENTITY copyright "Copyright W3Schools">

  XML示例:

<author>&writer;&copyright;</author>

外部实体:

  语法:

<!ENTITY 实体名 SYSTEM "URI/URL">

  DTD示例:

<!ENTITY writer SYSTEM "http://www.baidu.com/index.php?tn=coralqq">

<!ENTITY copyright SYSTEM "http://www.baidu.com/index.php?tn=coralqq">

  XML示例:

<author>&writer;&copyright;</author>

  与上面的区别就是加上了SYSTEM关键字。

  这样就不是使用网址的字符串来代替,而是用网址的文档本身内容。

实体类型

  前面所讲的都是普通实体,分为内部实体和外部实体。

  所谓参数实体,该实体实际上不是在具体实例化文档中使用,而是在DTD文档内部被使用。

  我们可以定义一个实体,然后在DTD内部来引用它。

  如下:

<!ENTITY %地址 "街道,城市,邮编,国家">

<!ELEMENT 联系人 (人名,电话,%地址;)>

  

总结如下:

  普通实体:DTD中定义,XML中使用,使用格式: &名;

  参数实体:DTD中定义,定义的时候要用%,DTD中使用,使用格式: %名;

  普通实体和参数实体都分为内部实体外部实体两种,外部实体定义需要加上SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。

  如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。

XML DTD语法详解的更多相关文章

  1. XML 之 语法详解

    一.文档规则 .区分大小写. .属性值必须加引号(单引号.双引号都可以),一般情况下建议使用使用双引号. .所有标记必须有结束符号. .所有空标记必须关闭. .必须有且仅有一根元素. .解析空白字符时 ...

  2. crossdomain.xml的配置详解

    目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...

  3. Thymeleaf3语法详解和实战

    Thymeleaf3语法详解 Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有Freemarker和Jsp.Jsp应该是我们最早接触的模版引擎.而Freemarker工 ...

  4. Xpath语法详解

    1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...

  5. spring AspectJ切入点语法详解 记录以便查阅

    AspectJ切入点语法详解 6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spri ...

  6. spring AOP 之四:@AspectJ切入点标识符语法详解

    @AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...

  7. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  9. logback logback.xml常用配置详解(三)

    logback logback.xml常用配置详解 <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之 ...

随机推荐

  1. UVA - 1471 Defense Lines (set/bit/lis)

    紫薯例题+1. 题意:给你一个长度为n(n<=200000)的序列a[n],求删除一个连续子序列后的可能的最长连续上升子序列的长度. 首先对序列进行分段,每一段连续的子序列的元素递增,设L[i] ...

  2. JSplitPane的简单实现

    import java.awt.Color; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.J ...

  3. BZOJ1370:[Baltic2003]团伙

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...

  4. loj 6485 LJJ学二项式定理 —— 单位根反演

    题目:https://loj.ac/problem/6485 先把 \( a_{i mod 4} \) 处理掉,其实就是 \( \sum\limits_{i=0}^{3} a_{i} \sum\lim ...

  5. Proxmox qm命令应用实例

          1) 把一个物理硬盘增加到VM上qm set 105 --virtio1 /dev/sdb     <-- 表示把/dev/sdb物理硬盘以 virtio 接口类型增加至 105 的 ...

  6. laravel 常用知识总结

    看到一篇别人的文章感觉写的不错 就copy过来了 学习源头: https://www.cnblogs.com/yjf512/p/3830750.html aravel是个很强大的PHP框架,它剔除了开 ...

  7. Angular5学习笔记 - 配置NG-ZORRO(八)

    一.在项目中集成组件 $ cd PROJECT_NAME $ npm install ng-zorro-antd --save 二.在项目中导入组件 直接用下面的代码替换 /src/app/app.m ...

  8. 蓝桥杯 算法训练 ALGO-151 6-2递归求二进制表示位数

    算法训练 6-2递归求二进制表示位数   时间限制:10.0s   内存限制:256.0MB 问题描述 给定一个十进制整数,返回其对应的二进制数的位数.例如,输入十进制数9,其对应的二进制数是1001 ...

  9. php实现oracle操作

    <?php function Query($sql,$prms){ $db = " (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ...

  10. C#的颜色解析及操作和相关Brush

    一.颜色表示方式 // // Summary: // Creates a System.Drawing.Color structure from a 32-bit ARGB value. // // ...