DTD 属性详解

在属性的声明中TYPE部分为属性的类型设定,DTD 中属性的类型有10种,下面将

对这些数据类型进行逐一的介绍。

   1. CDATA

   CDATA  型表明属性值为不包含“<”和“"”的任意字符串,如果属性值中需要包含

 <”和“"”,则可使用特殊字符来代替。

   2. Enumerated

   如果属性值并不是任意的字符串,而是在几个可能的值中进行选择,如书籍的“类别”

属性,其值可为“文艺”,也可为“自然科学”,而不可能为其他情况时,则可以将书籍

的“类别”属性设定为Enumerated型。

   3. ID

   当元素的某个属性值是不能重复时,如书籍的ISBN 属性、个人的“身份证号”属性

等,要定义这样的属性则需使用属性的ID类型。在一个XML 文档中,所有元素的ID

类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的

属性。

   4. IDREFIDREFS

   IDREFIdentifier Reference的缩写,IDREFID类型属性的关系为子元素与父元素

的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的

值必须在文档的其他地方被设定过。IDREFS                类型属性的属性值可有多个,每一个都必须

是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。

 IDREFS的使用,代码如源程序code4_10.xml所示。

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

     <!DOCTYPE school [

        <!ELEMENT school (teacher, subject*)>

        <!ELEMENT teacher (#PCDATA)>

        <!ELEMENT subject (#PCDATA)>

        <!ATTLIST teacher

        teach IDREFS #IMPLIED

     >

        <!ATTLIST subject

        number ID #REQUIRED

     >

     ]>

     <school>

        <teacher teach="c 0001 c 0002 c 0003">

          丁潇

     </teacher>

        <subject number="c0001">

         PowerBuilder

         </subject>

        <subject number="c0002">

         AutoCAD

         </subject>

        <subject number="c0003">

         XML

         </subject>

     </school>

5. ENTITYENTITIES

   ENTITY 类型的属性提供了把外部二进制形式的文件(.jpeg.mp3 )和外部不可解

析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的

通用实体名。ENTITIES 类型属性的属性值可由多个不可解析的外部实体名称组成,各实体

名称之间使用空格隔开。

 ENTITYENTITIES的使用,代码如源程序code4_11.xml所示。

 

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

     <!DOCTYPE customers [

        <!ELEMENT customers (customer*)>

        <!ELEMENT customer (username, password, picture)>

        <!ELEMENT username (#PCDATA)>

        <!ELEMENT password (#PCDATA)>

  <!ELEMENT picture EMPTY>

        <!ATTLIST picture pic ENTITIES #REQUIRED

     >

        <!ATTLIST customer

     ID #REQUIRED

     >

        <!ENTITY pic1 SYSTEM "a.jpg">

        <!ENTITY pic2 SYSTEM "b.jpg">

        <!ENTITY pic3 SYSTEM "c.jpg">

        <!ENTITY pic4 SYSTEM "d.jpg">

     ]>

     <customers>

        <customer ID="c0500103">

           <username>cheaperget</username>

           <password>12345678</password>

           <picture pic="pic1 pic2"/>

        </customer>

        <customer ID="c0500208">

           <username>dreamingboy</username>

           <password>22345678</password>

           <picture pic="pic3 pic4"/>

        </customer>

     </customers>

 

   本例不是所有浏览器都可以自动识别的通用格式,仅仅某些浏览器和应用程序

可能采用的在文档中嵌入非XML数据的方法而已。

   6. NMTOKENNMTOKENS

   NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数

字、“.”、_”、“-”、“:”等组成,这里有几点需要注意。

   (1)不能包括空格。

   (2)以上字符中除“:”以外,其他字符都可以作为开头字符。

   (3):”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。

   正因为NMTOKEN类型的属性对于字符的严格要求,使得它在一些常用编程语言中,

都是合法的数据,这就为这些编程语言对XML文档数据的操作打下了良好的基础。

   NMTOKENS类型的属性具有与NMTOKEN属性相近的形式。这种类型的属性可以使如

下情况合法——属性由若干XML名称组成,彼此间由空格隔开。通常可为使用NMTOKEN

属性相同的理由而使用NMTOKENS属性,但仅仅在需要多个名字的时候。

 

   7. NOTATION

   XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,

就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进

行处理。

 NOTATION 的使用,代码如下

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

     <!DOCTYPE customers [

          <!ELEMENT customers (customer*)>

     <!ELEMENT customer (username,password,picture)>

     <!ELEMENT username (#PCDATA)>

     <!ELEMENT password (#PCDATA)>

     <!NOTATION mspaint SYSTEM "C:/WINDOWS/system32/mspaint.exe">

     <!ELEMENT picture EMPTY>

     <!ATTLIST picture pic ENTITIES #REQUIRED>

     <!ATTLIST picture procedure NOTATION #REQUIRED>

     <!ATTLIST customer ID ID #REQUIRED>

     <!ENTITY pic1 SYSTEM "a.jpg">

     <!ENTITY pic2 SYSTEM "b.jpg">

     <!ENTITY pic3 SYSTEM "c.jpg">

     <!ENTITY pic4 SYSTEM "d.jpg">

     ]>

     <customers>

     <customer ID="c0500103" >

         <username>cheaperget</username>

         <password>12345678</password>

         <picture pic="pic1 pic2" procedure="mspaint"/>

     </customer>

     <customer ID="c0500208" >

         <username>dreamingboy</username>

         <password>22345678</password>

         <picture pic="pic3 pic4" procedure="mspaint"/>

     </customer>

     </customers>

 


版权声明:本文为yinghuayu1324117原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。