XML DTD详解
一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,即有效的是格式正规的一个子集。 本文详细介绍DTD,包括其对元素的定义,属性的定义,以及实体的定义。
元素的定义
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 元素名 属性名 属性类型 #IMPLIEDATTLIST contact fax CDATA #IMPLIEDcontact fax="888-228833" 没有这个属性也是对的。 #FIXED value 元素实例中该属性的值必须为指定的固定值。 ATTLIST 元素名 属性名 属性类型 #FIXED "value"ATTLIST sender company CDATA #FIXED "Microsoft"sender company="Microsoft"Default value 为属性提供一个默认的值。 ATTLIST 元素名 属性名 属性类型 "value"ATTLIST hello paymenttype CDATA "check"hello paymenttype="check"定义实体 一般 ENTITY 实体名 "实体值"ENTITY writer "Donald Duck"> ENTITY copyright "Copyright W3Schools"author>&writer;©right;</外部实体: ENTITY 实体名 SYSTEM "URI/URL"ENTITY writer SYSTEM "http://www.baidu.com/index.php?tn=coralqq"ENTITY copyright SYSTEM "http://www.baidu.com/index.php?tn=coralqq" 与上面的区别就是加上了SYSTEM关键字。 这样就不是使用网址的字符串来代替,而是用网址的文档本身内容。 实体类型 前面所讲的都是普通实体,分为内部实体和外部实体。 所谓参数实体,该实体实际上不是在具体实例化文档中使用,而是在DTD文档内部被使用。 我们可以定义一个实体,然后在DTD内部来引用它。 如下: ENTITY %地址 "街道,城市,邮编,国家"ELEMENT 联系人 (人名,电话,%地址;)
总结如下: 普通实体:DTD中定义,XML中使用,使用格式:&名; 参数实体:DTD中定义,定义的时候要用%,DTD中使用,使用格式:%名; 普通实体和参数实体都分为内部实体和外部实体两种,外部实体定义需要加上SYSTEM关键字,其内容是URL所指向的外部文件实际的内容。 如果不加SYSTEM关键字,则为内部实体,表示实体指代内容为字符串。 参考资料 圣思园张龙老师视频教程。 文章出处:http://www.cnblogs.com/mengdd/archive/2013/05/30/3107361.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Navicat 提示 Access violation at address ***(如004ECCF4
- 在结果集PostgreSQL中创建自动增量列
- c – 如何在qt中编写我自己的集合?
- 详解Vue路由History mode模式中页面无法渲染的原因及解决
- 依赖注入 – 在Unity3D中工作的轻量级IoC容器
- 详解如何用模块化的方式写vuejs
- Missing artifact net.sf.json-lib:json-lib:jar:2.4
- C编译器如何决定何时为std :: vector或任何对象调用移动构造
- 依赖注入 – Asp.Net Core中的属性注入
- 将整个按钮链接到它包含的Ajax.ActionLink