您的位置:首页 > 其它

XML-DTD

2015-12-30 13:19 239 查看
DTD即Document Type Definition文档类型定义,规定了XML文档的逻辑结构,可在XML文档中声明,也可作为一个外部引用。通过DTD,我们可以知道XML文档的格式,也可以用来验证所传输数据的格式是否正确。

1、在XML文档内部声明DTD——

DTD可以直接在XML文档内部声明,语法格式如下:

<!DOCTYPE root-element [element-declaration]>


DOCTYPE:关键字

root-element:根元素

element-declaration:根元素的子元素声明

例子如下:

<?xml version="1.0"?>
<!DOCTYPE family [
<!ELEMENT family (name,address)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
]>
<family>
<name>Smith</name>
<address>China</address>
</family>


第二行!DOCTYPE family定义此文档为family类型。

第三行!ELEMENT family定义family根元素有两个子元素。

第四行!ELEMENT name定义name元素为“#PCDATA”类型。

第五行!ELEMENT address定义address元素为“#PCDATA”类型。

PCDATA即parsed character data,被解析的字符数据,对应的字符数据会被解析器解析;对应的还有CDATA,这种类型的数据不会被解析。

2、在XML文档外部声明DTD——

DTD还可以在XML文档外部声明,语法格式如下:

<!DOCTYPE root-element SYSTEM "dtd_name">


SYSTEM:关键字

dtd_name:外部DTD的文件名

修改上面的例子,XML文档如下:

<?xml version="1.0"?>
<!DOCTYPE family SYSTEM "family.dtd">
<family>
<name>Smith</name>
<address>China</address>
</family>


外部的family.dtd文档如下:

<!ELEMENT family (name,address)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>


3、DTD元素声明——

DTD元素声明要使用到ELEMENT关键字,从上面的例子中也可以看到,但是有多种不同的形式,下面逐个说明。

使用类别关键字EMPTY声明一个空元素(元素内容为空但可能包含一些子元素):

<!ELEMENT element_name EMPTY>


使用(#PCDATA)声明元素内容为PCDATA的元素:

<!ELEMENT element_name (#PCDATA)>


使用类别关键字ANY声明可包含任何内容的元素:

<!ELEMENT element_name ANY>


声明带有子元素的元素(注意保持子元素的声明顺序,子元素也可以有它的子元素):

<!ELEMENT father (child1,child2,child3)>


当声明带有子元素的元素时,还可以对子元素进行正则匹配,例如,子元素只出现一次:

<!ELEMENT father (child)>


子元素出现零次或一次(使用”?”):

<!ELEMENT father (child?)>


子元素出现一次或多次(使用”+”):

<!ELEMENT father (child+)>


子元素出现零次或多次(使用”*”):

<!ELEMENT father (child*)>


子元素是多个待选子元素中的任意一个(使用”|”):

<!ELEMENT father (child1|child2|child3)>


对子元素进行分组(使用”()”):

<!ELEMENT father ((child1|child2),(child3|child4)>


上面提到的三个正则匹配符号“?”、“+”和“*”都是针对单个子元素的,还可以对子元素组使用:

<!ELEMENT father (child1|child2|child3)*>


4、DTD属性声明——

DTD属性声明要使用到ATTLIST关键字,基本格式如下:

<!ATTLIST element_name attribute_name attribute_type value>


attribute_type属性类型有以下几个类型:



value属性值有以下几种情况:



5、DTD实体声明——

DTD实体定义了用来引用普通文本或特殊符号的变量,使用ENTITY关键字,类似于DOCTYPE,可在内部或外部声明。

例如,在内部声明:

<!ENTITY name "Smith">


在XML中使用:

<family>&name;</family>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: