dtd-教程.doc

上传人:scccc 文档编号:12097748 上传时间:2021-12-01 格式:DOC 页数:11 大小:75.50KB
返回 下载 相关 举报
dtd-教程.doc_第1页
第1页 / 共11页
dtd-教程.doc_第2页
第2页 / 共11页
dtd-教程.doc_第3页
第3页 / 共11页
dtd-教程.doc_第4页
第4页 / 共11页
dtd-教程.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《dtd-教程.doc》由会员分享,可在线阅读,更多相关《dtd-教程.doc(11页珍藏版)》请在三一文库上搜索。

1、.文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。内部的 DOCTYPE 声明假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:<!DOCTYPE 根元素 元素声明>带有 DTD 的 XML 文档实例(请在 IE5 以及更高的版本打开,并选择查看源代码):<?xml version="1.0"?><!DOCTYPE note <!ELEMENT note (to,from,hea

2、ding,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>><note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!&

3、lt;/body></note>在您的浏览器中打开此 XML 文件,并选择“查看源代码”命令。以上 DTD 解释如下:!DOCTYPE note (第二行)定义此文档是 note 类型的文档。!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型!ELEMENT from (第五行)定义 frome 元素为 "#PCDATA" 类型!ELEMENT heading (第六行)定义

4、 heading 元素为 "#PCDATA" 类型!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型外部文档声明假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:<!DOCTYPE 根元素 SYSTEM "文件名">这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD: (在 IE5 中打开,并选择“查看源代码”命令。)<?xml version="1.0"?><!DOCTYPE

5、 note SYSTEM "note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note> 这是包含 DTD 的 "note.dtd" 文件:<!ELEMENT note (to,from,heading,body)><!ELEM

6、ENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>为什么使用 DTD?通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。您还可以使用 DTD 来验证您自身的数据。XML 以及 HTML 文档的主要构建模块是类似 <body>.</body&g

7、t; 这样的标签。XML 文档构建模块所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:· 元素 · 属性 · 实体 · PCDATA · CDATA 下面是每个构建模块的简要描述。元素元素是 XML 以及 HTML 文档的主要构建模块。HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr&quo

8、t;、"br" 以及 "img"。实例:<body>body text in between</body><message>some message in between</message>属性属性可提供有关元素的额外信息。属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。下面的 "img" 元素拥有关于源文件的额外信息:<img src="computer.gif" />元素的名称是 "img"。属性的名称是 &q

9、uot;src"。属性的值是 "computer.gif"。由于元素本身为空,它被一个 " /" 关闭。实体实体是用来定义普通文本的变量。实体引用是对实体的引用。大多数同学都了解这个 HTML 实体引用:"&nbsp;"。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。当文档被 XML 解析器解析时,实体就会被展开。下面的实体在 XML 中被预定义:实体引用字符&lt;<&gt;>&amp;&&quot;"&apos;&

10、#39;PCDATAPCDATA 的意思是被解析的字符数据(parsed character data)。可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。CDATACDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被

11、当作标记来对待,其中的实体也不会被展开。在一个 DTD 中,元素通过元素声明来进行声明。声明一个元素在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:<!ELEMENT 元素名称 类别>或者<!ELEMENT 元素名称 (元素内容)>空元素空元素通过类别关键词EMPTY进行声明:<!ELEMENT 元素名称 EMPTY>例子:<!ELEMENT br EMPTY>XML例子:<br />只有 PCDATA 的元素只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:<!ELEMENT 元素

12、名称 (#PCDATA)>例子:<!ELEMENT from (#PCDATA)>带有任何内容的元素通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:<!ELEMENT 元素名称 ANY>例子:<!ELEMENT note ANY>带有子元素(序列)的元素带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:<!ELEMENT 元素名称 (子元素名称 1)>或者<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.)>例子:<!ELEMENT note (to,from,heading,bod

13、y)>当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。"note" 元素的完整声明是:<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>声明只出现一次的元素<!ELEMENT 元

14、素名称 (子元素名称)>例子:<!ELEMENT note (message)>上面的例子声明了:message 子元素必须出现一次,并且必须只在 "note" 元素中出现一次。声明最少出现一次的元素<!ELEMENT 元素名称 (子元素名称+)>例子:<!ELEMENT note (message+)>上面的例子中的加号声明了:message 子元素必须在 "note" 元素内出现至少一次。声明出现零次或多次的元素<!ELEMENT 元素名称 (子元素名称*)>例子:<!ELEMENT not

15、e (message*)>上面的例子中的星号声明了:子元素 message 可在 "note" 元素内出现零次或多次。声明出现零次或一次的元素<!ELEMENT 元素名称 (子元素名称?)>例子:<!ELEMENT note (message?)>上面的例子中的问号声明了:子元素 message 可在 "note" 元素内出现零次或一次。声明“非./既.”类型的内容例子:<!ELEMENT note (to,from,header,(message|body)>上面的例子声明了:"note"

16、元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。声明混合型的内容例子:<!ELEMENT note (#PCDATA|to|from|header|message)*>上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"

17、;。在 DTD 中,属性通过 ATTLIST 声明来进行声明。声明属性属性声明拥使用下列语法:<!ATTLIST 元素名称 属性名称 属性类型 默认值>DTD 实例:<!ATTLIST payment type CDATA "check">XML 实例:<payment type="check" />以下是属性类型的选项:类型描述CDATA值为字符数据 (character data)(en1|en2|.)此值是枚举列表中的一个值ID值为唯一的 idIDREF值为另外一个元素的 idIDREFS值为其他 id 的列表N

18、MTOKEN值为合法的 XML 名称NMTOKENS值为合法的 XML 名称的列表ENTITY值是一个实体ENTITIES值是一个实体列表NOTATION此值是符号的名称xml:值是一个预定义的 XML 值默认值参数可使用下列值:值解释值属性的默认值#REQUIRED属性值是必需的#IMPLIED属性不是必需的#FIXED value属性值是固定的规定一个默认的属性值DTD:<!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">合法的 XML:<square width="10

19、0" />在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。如果宽度没有被设定,其默认值为0 。#IMPLIED语法<!ATTLIST 元素名称 属性名称 属性类型 #IMPLIED>例子DTD:<!ATTLIST contact fax CDATA #IMPLIED>合法的 XML:<contact fax="555-667788" />合法的 XML:<contact />假如您不希望强制作者包含属性,并且您没有默认值选

20、项的话,请使用关键词 #IMPLIED。#REQUIRED语法<!ATTLIST 元素名称 属性名称 属性类型 #REQUIRED>例子DTD:<!ATTLIST person number CDATA #REQUIRED>合法的 XML:<person number="5677" />非法的 XML:<person />假如您没有默认值选项,但是仍然希望强制作者提交属性的话,请使用关键词 #REQUIRED。#FIXED语法<!ATTLIST 元素名称 属性名称 属性类型 #FIXED "value"

21、;>例子DTD:<!ATTLIST sender company CDATA #FIXED "Microsoft">合法的 XML:<sender company="Microsoft" />非法的 XML:<sender company="W3School" />如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用 #FIXED 关键词。如果作者使用了不同的值,XML 解析器会返回错误。列举属性值语法:<!ATTLIST 元素名称 属性名称 (en1|en2|.) 默认值>

22、DTD 例子:<!ATTLIST payment type (check|cash) "cash">XML 例子:<payment type="check" />或者<payment type="cash" />如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体引用是对实体的引用。实体可在内部或外部进行声明。一个内部实体声明语法:<!ENTITY 实体名称 "实体的值">例子:DTD 例子:<!

23、ENTITY writer "Bill Gates"><!ENTITY copyright "Copyright W3S">XML 例子:<author>&writer;&copyright;</author>注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。一个外部实体声明语法:<!ENTITY 实体名称 SYSTEM "URI/URL">例子:DTD 例子:<!ENTITY writer SYSTEM &qu

24、ot;<!ENTITY copyright SYSTEM "XML 例子:<author>&writer;&copyright;</author>Internet Explorer 5.0 可根据某个 DTD 来验证您的 XML。通过 XML 解析器进行验证当您试图打开某个 XML 文档时,XML 解析器有可能会产生错误。通过访问 parseError 对象,就可以取回引起错误的确切代码、文本甚至所在的行。注释:load( ) 方法用于文件,而 loadXML( ) 方法用于字符串。var xmlDoc = new ActiveXObje

25、ct("Microsoft.XMLDOM")xmlDoc.async="false"xmlDoc.validateOnParse="true"xmlDoc.load("note_dtd_error.xml")document.write("<br>Error Code: ")document.write(xmlDoc.parseError.errorCode)document.write("<br>Error Reason: ")document.wr

26、ite(xmlDoc.parseError.reason)document.write("<br>Error Line: ")document.write(xmlDoc.parseError.line)Try it Yourself 或者 仅仅看一下这个 XML 文件。关闭验证通过把 XML 解析器的 validateOnParse 设置为 "false",就可以关闭验证。var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")xmlDoc.async="false&q

27、uot;xmlDoc.validateOnParse="false"xmlDoc.load("note_dtd_error.xml")document.write("<br>Error Code: ")document.write(xmlDoc.parseError.errorCode)document.write("<br>Error Reason: ")document.write(xmlDoc.parseError.reason)document.write("<br>Error Line: ")document.write(xmlDoc.parseError.line)Try it Yourself通用的 XML 验证器为了帮助您验证 XML 文件,我们创建了此链接,这样你就可以验证任何 XML 文件了。.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1