1 DTD:document type definition
1.1 DTD XML构建模块
元素,实体,属性,PCDATA,CADTA.
元素:元素是xml与html的主要构建模块。如html的<head><body>等。元素可以是空元素,包含其他元素和属性。
实体:实体是用来定义普通文本的变量。实体引用用来对普通文本的引用。如大家熟悉的html中的 就是对“”空格的实体引用。在xml中有以下的预定义的实体引用。
实体引用 |
字符 |
< |
< |
> |
> |
& |
& |
" |
‘’ |
' |
‘ |
PCDATA:parse character data按字面意思来解释就是可被解析的字符串。PCDATA可被看成是开始标签与结束标签之间的内容。其中的实体会被展开,标签会被当做标示处理。但PCDATA应被不包括<,>等符号,要使用这些符号请用实体引用代替。
CDATA:character data按字面意思来讲是字符数据,CDATA中的数据标签将不会当做标记,实体也不会展开。
1.2 DTD元素
》DTD中声明一个元素
<!ELEMENT 元素名元素类别>
或
<!ELEMENT 元素名(元素内容>
元素类别可以是ANY 表示任意类型,EMPTY 表示空元素。
元素内容:
元素内容使用空白符分隔,表示出现顺序没有要求:
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> ×
用逗号分隔,表示内容的出现顺序必须与声明时一致。
<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>
用|分隔,表示任选其一,即多个只能出现一个
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>
在元素内容中也可以使用+、*、?等符号表示元素出现的次数:
+: 一次或多次 (书+)
?: 0次或一次 (书?)
*: 0次或多次 (书*)
也可使用圆括号( )批量设置,例
<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
通过()、空白、逗号、|组合n中类型的元素内容。
1.3 DTD属性
》属性声明:属性是对元素的额外说明
声明属性
属性声明使用下列语法:
<!ATTLIST 元素名称
属性名称1 属性类型 默认值
属性名称2 属性类型 默认值
… >
元素名称定义是哪个元素的属性
属性类型可以是以下类型
常用:CDATA,枚举列表(en1|en2|en3…),实体Entity。
默认值:注意#FIXED value此处的value是让你提供一个固定的默认值
DTD 实例:
<!ATTLIST 元素名称属性名称1 属性类型默认值>
<!ATTLIST
paymenttype CDATA "check">
XML 实例:
<payment type="check" />
1.3 DTD实体
实体引用是对实体的引用,实体是用来引用普通文本和特殊字符的变量。
实体构成: 一个实体由三部分构成: 一个和号 (&),一个实体名称, 以及一个分号 (;)。
实体引用由内部引用和外部引用:
一个内部实体声明
》引用实体定义
语法:<!ENTITY实体名称 "实体的值">
引用方式:&实体名称;注意结尾有分号。
例子:
DTD 例子:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML 例子:
<author>&writer;©right;</author>
》参数实体定义
语法: <!ENTITY % 实体名称 "实体内容">
引用方式:%实体名称; 注意结尾有分号。
DTD 例子:
<!ENTITY % TAG_NAMES "name| email | phone| address">
<!ELEMENT personInfo (%TAG_NAMES; | birthday)>
<!ELEMENT customerInfo (%TAG_NAMES; | companyName)>
DTD 例子2:
<!ENTITY % common.attributes
" id ID #IMPLIED
accountCDATA #REQUIRED ">
<!ATTLIST purchaseOrder
%common.attributes;>
<!ATTLIST item
%common.attributes;>
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">
例子:
DTD 例子:
<!ENTITY writer SYSTEM"http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM"http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
1.4 DTD验证
1.5 DTD实例
》一个DTD的写法
<!DOCTYPE 文档根元素 [
<!ENTITY 实体名称 "实体的值">
…
…
…
<!ELEMENT 元素名元素类别>
…
…
…
<!ATTLIST 元素名称
属性名称1 属性类型 默认值
属性名称2 属性类型 默认值
… >
…
…
…
]>
DTD实例例子1:全部看懂这个你就差不多都学会了,老实说DTD实在是太简单了
产品目录 DTD
<!DOCTYPE CATALOG [
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
1.6在xml中引入xml约束
在xml中引入dtd文件的有两种声明方式:
(1)内部定义的(定义在XML文件中),
(2)外部引入的DTD文件(导入)。
(1)内部定义的很少用到。
里面进行DTD文档的定义。
<?xml version="1.0"?>
<!DOCTYPE 根元素的名称 [
里面进行DTD文档的定义。
]>
<根元素>
…
…
</根元素>
(2)外部引入的DTD文件,用得最多。
这种方式又分为:私有方式、公共方式。
私有方式:<!DOCTYPE XML根元素的名称 SYSTEM "C:/test.dtd">
私有方式最后写的是DTD的地址,也可以是一个URL地址。DTD文件并不是XML文档格式来写,DTD文件有自己的书写格式。私有方式关键字是SYSTEM。
公共方式:<!DOCTYPE XML根元素的名称 PUBLIC "ISO/+/-">
公共方式最后的标示如果是经过ISO组织认证的用ISO进行标示,没有经过ISO但是经过行业内其他组织认证的用+,没有经过任何组织认证的用-。
"+//所有人的名称(谁来写的这个DTD文件)//DTD文档的说明"