DTD约束语法细节

来源:互联网 发布:怎样修复网络连接 编辑:程序博客网 时间:2024/05/06 13:53
 

一,属性声明

属性是描述元素的额外信息的,是对元素的修饰与补

充。一般来说,信息详实的XML文档都是一个特点,即元

素通过属性来描述边缘信息。

      在 DTD 中,属性通过 ATTLIST 声明来进行声明。一

个属性声明可以声明一个元素的多个属性。

<! ATTLIST 元素名 属性名 属性类型  [属性限定条件] [默认值]>

“属性限定条件”和“默认值‘两部分是可选的吗,有下面几种情况

Ø     在没有指定“元素对属性的约束”时,必须为该属性指定“默认值”;

Ø     当“元素对属性的约束”是#REQUIRED时,不能为该属性指定“默认值”;

Ø     当“元素对属性的约束”是“IMPLIED”时,不能为该属性指定“默认值”;

Ø     当“元素对属性的约束”是“FIXED”时,必须为该属性指定“默认值”;

二,限定条件

v    #REQUIRED: 必须的属性,意味着必须为该元素提供该属性

 

v    #IMPLIED: 该属性是可有可无的

 

v    #FIXED: 该属性的值是固定的,定义是必须制定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为给属性增加固定值

例题 Dtd

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 计算机书籍 ((书名, 作者, 价格, 简要介绍))>

<!ELEMENT 简要介绍 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ATTLIST 作者 地址 CDATA #REQUIRED>

<!ELEMENT 价格 (#PCDATA)>

<!ELEMENT 书籍列表 ((计算机书籍))>

<!ELEMENT 书名 (#PCDATA)>

Xml

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE 书籍列表 SYSTEM "required.dtd">

<书籍列表>

   <计算机书籍>

      <书名>Struts 2.1权威指南</书名>

      <作者 地址="广州">kongyeeku</作者>

      <价格>79.00</价格>

      <简要介绍>该书详细介绍了Struts 2.1的各种功能和用法</简要介绍>

   </计算机书籍>

</书籍列表>

三,属性类型

属性类型

含义

CDATA

值为字符串数据

(en1|en2|..)

此值是枚举列表中的一个值

ID

该属性值必须是有效地标识符,在XML文档时唯一的

IDREF

值为另外一个元素的 id属性值

IDREFS

值必须引用自多个已经有的ID属性值,多个ID属性值用空格隔开

NMTOKEN

值为合法的 XML 名称

NMTOKENS

值为多个合法的 XML 名称的列表

ENTITY

值是一个外部实体,如图片支持

ENTITIES

值是一个实体列表,多个实体之间以空格隔开

NOTATION

该属性值是在DTD中声明过的符号,这个是过期的,不要使用

(1),字符类型

CDATA   是简单的纯文本字符类型,是最常用的类型,将简单的文本用做属性值。可以包括任何字符串,但不允许使用“<”,“>”,“&”,“””,“‘”。如果需要使用必须使用实体引用。属性值和元素内容都

可以是文本类型,但是定义的方法不同

(2),枚举类型

声明了属性的备选值列表,属性必须从该列表

中选择一个值作为属性值。

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 购物车 (肉* , 水果*)>

<!ELEMENT 肉 EMPTY>

<!ELEMENT 水果 EMPTY>

<!ATTLIST 肉 类型 (鸡肉|牛肉|猪肉|鱼肉) #REQUIRED>

<!ATTLIST 水果 类型 (苹果|梨|桔子) #REQUIRED>

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE 购物车 SYSTEM "enumerated.dtd">

<购物车>

      <肉 类型="猪肉"/>

      <肉 类型="鸡肉"/>

      <水果 类型="苹果"/>

      <水果 类型="梨"/>

</购物车>

(3),ID、IDREF、 IDREFS类型

ID类型是一种较为严格的约束,它要求属性值必须是有效地XML标识名,而且在整个XML文件档中其值不能重复。

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT beans (bean|object)*>

<!ELEMENT bean (property*)>

<!ELEMENT object EMPTY>

<!ELEMENT property EMPTY>

<!ATTLIST bean id ID #REQUIRED>

<!ATTLIST object id ID #REQUIRED>

<!ATTLIST property name CDATA #REQUIRED>

<!ATTLIST property ref IDREF #IMPLIED>

<!ATTLIST property set IDREFS #IMPLIED>

(4),NMTOKEN和NMTOKENS类型

NMTOKEN是一个比ID类型更宽松的类型,它只要求该属性是个合法的XML标识。它也是字符串数据,但是约束比CDATA约束要严格,它要求出现的字符要少

<?xml version="1.0" encoding="GB2312"?>

<!ELEMENT 书籍列表 (计算机书籍)*>

<!ELEMENT 计算机书籍 (书名,作者,价格,简要介绍)>

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 价格 (#PCDATA)>

<!ELEMENT 简要介绍 (#PCDATA)>

<!ATTLIST 作者 地址 CDATA #REQUIRED>

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE 书籍列表  SYSTEM "cdata.dtd">

<书籍列表>

   <计算机书籍>

      <书名>轻量级Java EE企业开发实战</书名>

      <作者 地址="广州#">李刚</作者>

      <价格>63</价格>

      <简要介绍>该书主要介绍了一种流行的轻量级企业应用架构</简要介绍>

   </计算机书籍>

</书籍列表>

(5),ENTITY和ENTITIES类型

定义ENTITY和ENTITIES类型的属性其属性值只能是未解析的实体,与外部数据相连。如图像文件,音像文件等。

<?xml version="1.0" encoding="gb2312"?>

<!ENTITY desc_movie SYSTEM "http://www.crazyit.org/test.wmv" >

<!ENTITY book_part1 SYSTEM "http://www.crazyit.org/part1.pdf" >

<!ENTITY book_part2 SYSTEM "http://www.crazyit.org/part2.pdf" >

<!ENTITY book_part3 SYSTEM "http://www.crazyit.org/part3.pdf" >

<!ELEMENT book (#PCDATA)>

<!-- 定义2个属性,它们的类型分别是ENTITY和ENTITIES -->

<!ATTLIST book description ENTITY "desc_movie">

<!ATTLIST book content ENTITIES #IMPLIED >

 

原创粉丝点击