DTD实际上文件中的元素、元素的属性、排列方式

DTD 实际上可以看作是一个或多个 XML 文件的模板。这些XML文件中的元素、元素的属性、元素的排列/顺序、元素可以包含的内容等都必须符合DTD中的定义。XML文件中的元素,我们创建的标签,是根据我们应用的实际情况创建的。要创建一个完整度高、适应性广的DTD是很困难的,因为每个行业都有自己的行业特点,所以DTD通常被定义为一定的应用领域dtd文件的扩展名是什么,比如:医药、建筑、工商、行政等。DTD 定义的元素范围越广,它就越复杂。

DTD 可以是完全独立的文件,也可以直接在 XML 文件中设置。因此,DTD分为外部DTD(调用XML文件中另一个已编辑的DTD)和内部DTD(直接在XML文件中设置DTD)。例如,有数十家相互关联、合作的公司和制造商,它们都使用 XML 文档来相互交换电子文档。那么我们可以把这些XML文档的DTD放在某个地方,让所有交换的XML文档都使用这个DTD,这样最方便,也适合公司内部使用XML文件。

内部 DTD

内部 DTD 定义在 XML 文件的文件前导区域中。语法:

引用如下:

<!-名称[……..

]>

<! :表示开始设置DTD,注意大写。

-name :指定此 DTD 的根元素的名称。一个 XML 文件只能有一个根元素。请注意,如果 XML 文件使用 DTD,则在此处指定文件中的根元素。

[…….]> :在 [ ] 标签中定义 XML 文件使用元素,然后使用 > 结束 DTD 的定义。

接下来,我们看一下如何为 XML 文件定义 DTD,参见示例 1。

例1中的DTD定义区可以看作是DTD定义的一个通用框架,该DTD是为其他XML文件定义的。结构类似于示例 1 中的 DTD,但可能需要添加、删除或更改某些内容。DTD定义的中间是元素设置,这是一个DTD最重要的部分。其主要语法如下:

<!-名称->

<!:表示开始元素设置,注意这里的关键字是大写的。

-name:表示要设置的元素的名称。

-:表示如何定义这个元素,即<>…</>之间可以包含什么内容,是其他元素还是一般文本。

在示例 1 中,您可以看到 <! (Books)>元素被设置为声明“”元素,它是“Books”元素的父元素。<!Books(name, , price)> 这个元素设置声明了“book”元素,它是“name”、“”和“price”三个元素的父元素。<!name(#)> 元素设置声明了“name”元素,但该元素只包含一般文本,是基本元素,由# 关键字定义。

在元素设置中,如果元素包含多个子元素,如:<! Books (name, , price)>这样的声明有多个子元素,那么标签“name”、“”和“price”在XML文件中必须按照上面列出的顺序出现,并且每个标签必须并且只能出现一次。如果元素是根据<! Book ANY>,任何已经设置好的元素都可以包含在该元素下,并且不限制出现次数和顺序,并且在该元素下,除了包含子元素之外,还可以包含一般字符。有时,在一个 XML 文件中,一个标签可能会出现多次(或不出现),所以除了在其父元素中使用 ANY 关键字之外,我们还可以在元素旁边添加一个特定的符号来控制标签出现的次数。有关这些符号,请参见表 1。

表格1

符号代表标记出现的次数

? 不出现或只出现一次

* 不出现或可以出现多次

+ 必须出现多次

无符号只能出现一次

例如:<! (Book?, +, ?, )> 设置此元素,“book”标签可能不会出现或在XML文件中出现多次;“报纸”标签必须出现多次;” “杂志”标签不得出现或仅出现一次;“网站”标签必须出现且仅出现一次。

在某些父元素的声明中,它所包含的子元素有可能是从多个子元素中选择出来使用的,那么我们在声明这个父元素的时候,可以将其声明为选择性元素,例如:<! 配偶(妻子|丈夫)”。可选的子元素用“|”分隔,所以我们可以在 XML 文件中这样写:

<配偶>

<老公>张三</老公>

</配偶>

仅从中选择一个子元素。

在我们的XML文件中dtd文件的扩展名是什么,也可能有很多“空元素”,即元素单独存在,没有</>之类的结束标签。然后在 DTD 中用 EMPTY 关键字声明它。如:<! 元素名称 EMPTY>。在 XML 文件中,空元素不需要结束标记,但必须写为 </empty name>。

在 DTD 中,还可以声明一些名为 的东西,由 DTD 和 XML 文件使用。我们可以把它看成是一个常数,它具有一定的价值。在 DTD 中,声明语法是:<! -名称->。例如:我们声明 <! DTD中的PC”(#)”>,那么在下面的元素设置中,我们可以用这个代替字符串”(#)”,如:<! (#)> 可以写成 <!&&PC;>。引用时,必须在名称前加上“&&”符号和“;” 后面的符号。

在示例 1 中,句子 <! 价格货币单位CDATA#>是设置元素的属性,设置元素属性的语法为:<! -name -name 类型 -value>。其中,<! 是start属性的设置(注意大小写)。-name 表示该属性是为哪个元素设置的;-name 是设置属性的名称;type是属性的属性值的类型,属性值有多种,可以是一般的文本,也可以从几个属性值中选择一个,属性值的类型如表2所示.-value指的是属性的默认值类型,有四种不同的属性默认值(见表3).

下面举几个例子来看看几个常用元素属性的设置。例子:

<! 姓名性别(男|女)“男”>

该元素的属性设置是为元素“name”设置一个名为“”的属性。该属性的属性值类别为“男”或“女”(用“|”隔开)。如果未在 XML 文件中为该属性分配值,则该值为“male”,因为该属性的默认值为字符串“male”。

<! 姓名号码ID#>

属性设置是为“Name”元素设置一个名为“”的属性,属性值类别为ID,即在XML文件中赋值时,该属性值在该XML文件中是唯一的。如果以下 XML 语句出现在同一个 XML 文件中:

<name =””>张三</name>

<name =””>李斯</name>

注意:“”属性的值是重复的,所以解析时会出现错误信息。该属性设置中的属性默认值为#,表示该属性必须出现在XML文件的<name>标签中,否则会出现解析错误。

<! 电话号码国家代码 CDATA #FIX “86”>

属性设置是为元素“电话号码”设置一个名为“国家代码”的属性,该属性的值为普通文本。< > 标签中不能设置该属性,因为该属性被设置为具有固定值(#FIX 关键字)的属性,解析器会自动将该属性和值“86”添加到< > > 标记。

表 2

属性值类别描述

cdata 属性值只是普通的文字。

列出属性的取值范围,一次只能给属性赋值一个属性值。

表示属性值只能由字母、数字、下划线、.、:、-这些符号组成。

表示属性值可以由多个值组成,以空格分隔。

id 这个属性在xml文件中是唯一的,经常用来表示一个人的身份证号。

idref 表示属性值是对另一个 id 属性的引用。

表示属性值引用多个id属性,这些id属性的值用空格隔开。

表示该属性的设定值是外部的,例如图片文件。

属性值包含多个外部值,以空格分隔。

属性值在dtd中声明(声明使用什么应用软件来解释某些二进制文件,比如图片)。

在 XML 规范中,还指定了两个默认属性,即:xml:space 和 xml:lang。默认属性名以xml:开头,你定义的属性名不能以xml:开头,否则解析时会被解析。发生错误。

图片[1]-DTD实际上文件中的元素、元素的属性、排列方式-4747i站长资讯

前面我们说过,空白在XML文件中是有意义的,xml:space属性用于设置解析器将XML文件中的空白传递给应用程序后的处理方式。

xml:space 是一个类型的属性,只能取 和 之间的值。xml:space=”” 表示解析器将空格传递给应用程序后,应用程序的默认方法会处理这些空格。如果未设置 xml:space 属性,解析器将默认设置此属性。

xml:space=”” 表示解析器将空格传递给应用程序后,要求应用程序保留这些空格。

xml:lang 属性用于设置标签中的文本信息使用哪种语言。ISO-639规定了不同语言的代表缩写,如:xml:lang=”en”表示英文;

xml:lang=”la” 表示拉丁语;xml:lang=”zh” 表示中文数据;xml:lang=”zh-CN” 表示中文(简体);xml:lang=”zh-TW” 表示中文(繁体)。系统默认为xml:lang=”en”,即标记中的文字信息为英文。

外部 DTD

外部 DTD 是与 XML 文件分开的文件,实际上是一个文本文件,只是带有 .dtd 文件扩展名。因为外部DTD独立于XML文件,所以可以被多个XML文件使用,就像可以用同一个模板写多个不同内容的文件一样。因为这多个 XML 文件引用同一个外部 DTD,所以它们的结构大致相同。

外部DTD的创建方法和语法与内部DTD相同。例1中内部DTD的例子是用外部DTD编写的,文件如下。该文件保存为扩展名为 .dtd 的文件。

引用如下:

<?xml =”1.0″ =”” ?>

<! 参考资料(书籍*)>

<! 书籍(姓名、作者、价格)>

<!名称(#)>

<! 作者(#)>

<! 价格(#)>

<! 价格货币单位 CDATA #>

除了在内部 DTD 中没有 <![…]> 语句之外,其他都是一样的。并且元素个数、排列顺序、空元素设置、可选元素、声明、属性设置等与内部DTD相同。

XML 文件使用 <!-name DTD-URL> 或 <!-name DTD-name DTD-URL> 来引用创建的外部 DTD 文件。

表3

属性默认描述

# 表示该属性必须存在于标记中。

此属性可能不会出现在# 标记中。

#fix 属性的值是固定值。

如果字符串标签中没有指定属性的值,则字符串就是属性的值。

该语句必须位于XML文件的文件前导区域,其中<! 表示开始声明应用程序外部DTD;-name 指的是DTD的根元素的名称;表示外部DTD文件是私有的,也就是我们自己创建的,没有公开发布,只是个人或者公司内部或者几个合作单位之间使用;PUBIC 关键字表示外部 DTD 是公共的。经过公开讨论,使用的 DTD 有一个逻辑名称 – DTD-name ,我们在调用时必须指定这个逻辑名称。DTD-URL 是通过 URL 来指定外部 DTD 文件的位置。比如我们的DTD文件存放在URL:这个地方,文件名是ckzl.dtd。那么XML文件中的声明如下:

<?xml =”1.0″ =”” ?>

<! 参考 “”>

介绍

DTD的语法比较复杂,不符合XML文档的标准,它是一个自己的系统。上面的介绍只是一个介绍,目的是帮助你理解DTD文件,并在必要时创建简单的DTD文件,因为现在很多XML应用程序都是建立在DTD之上的。

此外,W3C 定义了 DTD 的替代方案,与 DTD 相比的明显优势在于 XML 文档本身也是 XML 文档,而不是像 DTD 那样使用自包含语法。这对用户和开发人员来说很方便,因为可以使用相同的工具来处理 XML 和其他 XML 信息,而无需使用特殊工具。简单易懂,任何了解XML语法和规则的人都可以立即理解。XML的概念由来已久,但W3C标准直到最近才问世,相应的应用支持还没有完善,但采用已成为XML发展的趋势。

示例 1

DTD定义区:

引用如下:

<?xml =”1.0″ =”” ?>

<! 参考 [

<! 参考资料(书籍?)>

<! 书籍(姓名、作者、价格)>

<!名称(#)>

<! 作者(#)>

<! 价格(#)>

<! 价格货币单位 CDATA #>

]>

<参考>

<书籍>

<name>XML 简介</name>

<>张三</>

<price unit=”RMB”>20.00</price>

</书>

<书籍>

<name>XML 语法</name>

<!– 即将推出–>

<>李思</>

<price unit=”RMB”>18.00</price>

</书>

</参考>

文章来源:https://www.chinaz.com/program/2008/0225/23416.shtml

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享