dtd教程.docx

上传人:b****2 文档编号:13966116 上传时间:2023-06-19 格式:DOCX 页数:13 大小:19.03KB
下载 相关 举报
dtd教程.docx_第1页
第1页 / 共13页
dtd教程.docx_第2页
第2页 / 共13页
dtd教程.docx_第3页
第3页 / 共13页
dtd教程.docx_第4页
第4页 / 共13页
dtd教程.docx_第5页
第5页 / 共13页
dtd教程.docx_第6页
第6页 / 共13页
dtd教程.docx_第7页
第7页 / 共13页
dtd教程.docx_第8页
第8页 / 共13页
dtd教程.docx_第9页
第9页 / 共13页
dtd教程.docx_第10页
第10页 / 共13页
dtd教程.docx_第11页
第11页 / 共13页
dtd教程.docx_第12页
第12页 / 共13页
dtd教程.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

dtd教程.docx

《dtd教程.docx》由会员分享,可在线阅读,更多相关《dtd教程.docx(13页珍藏版)》请在冰点文库上搜索。

dtd教程.docx

dtd教程

文档类型定义(DTD)可定义合法的XML文档构建模块。

它使用一系列合法的元素来定义文档的结构。

DTD可被成行地声明于XML文档中,也可作为一个外部引用。

内部的DOCTYPE声明

假如DTD被包含在您的XML源文件中,它应当通过下面的语法包装在一个DOCTYPE声明中:

DOCTYPE根元素[元素声明]>

带有DTD的XML文档实例(请在IE5以及更高的版本打开,并选择查看源代码):

xmlversion="1.0"?

>

DOCTYPEnote[

ELEMENTnote(to,from,heading,body)>

ELEMENTto(#PCDATA)>

ELEMENTfrom(#PCDATA)>

ELEMENTheading(#PCDATA)>

ELEMENTbody(#PCDATA)>

]>

George

John

Reminder

Don'tforgetthemeeting!

在您的浏览器中打开此XML文件,并选择“查看源代码”命令。

以上DTD解释如下:

!

DOCTYPEnote(第二行)定义此文档是note类型的文档。

!

ELEMENTnote(第三行)定义note元素有四个元素:

"to、from、heading,、body"

!

ELEMENTto(第四行)定义to元素为"#PCDATA"类型

!

ELEMENTfrom(第五行)定义frome元素为"#PCDATA"类型

!

ELEMENTheading(第六行)定义heading元素为"#PCDATA"类型

!

ELEMENTbody(第七行)定义body元素为"#PCDATA"类型

外部文档声明

假如DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中:

DOCTYPE根元素SYSTEM"文件名">

这个XML文档和上面的XML文档相同,但是拥有一个外部的DTD:

(在IE5中打开,并选择“查看源代码”命令。

xmlversion="1.0"?

>

DOCTYPEnoteSYSTEM"note.dtd">

George

John

Reminder

Don'tforgetthemeeting!

这是包含DTD的"note.dtd"文件:

ELEMENTnote(to,from,heading,body)>

ELEMENTto(#PCDATA)>

ELEMENTfrom(#PCDATA)>

ELEMENTheading(#PCDATA)>

ELEMENTbody(#PCDATA)>

为什么使用DTD?

通过DTD,您的每一个XML文件均可携带一个有关其自身格式的描述。

通过DTD,独立的团体可一致地使用某个标准的DTD来交换数据。

而您的应用程序也可使用某个标准的DTD来验证从外部接收到的数据。

您还可以使用DTD来验证您自身的数据。

XML以及HTML文档的主要构建模块是类似....这样的标签。

XML文档构建模块

所有的XML文档(以及HTML文档)均由以下简单的构建模块构成:

∙元素

∙属性

∙实体

∙PCDATA

∙CDATA

下面是每个构建模块的简要描述。

元素

元素是XML以及HTML文档的主要构建模块。

HTML元素的例子是"body"和"table"。

XML元素的例子是"note"和"message"。

元素可包含文本、其他元素或者是空的。

空的HTML元素的例子是"hr"、"br"以及"img"。

实例:

bodytextinbetween

somemessageinbetween

属性

属性可提供有关元素的额外信息。

属性总是被置于某元素的开始标签中。

属性总是以名称/值的形式成对出现的。

下面的"img"元素拥有关于源文件的额外信息:

元素的名称是"img"。

属性的名称是"src"。

属性的值是"computer.gif"。

由于元素本身为空,它被一个"/"关闭。

实体

实体是用来定义普通文本的变量。

实体引用是对实体的引用。

大多数同学都了解这个HTML实体引用:

" "。

这个“无折行空格”实体在HTML中被用于在某个文档中插入一个额外的空格。

当文档被XML解析器解析时,实体就会被展开。

下面的实体在XML中被预定义:

实体引用

字符

<

<

>

>

&

&

"

"

'

'

PCDATA

PCDATA的意思是被解析的字符数据(parsedcharacterdata)。

可把字符数据想象为XML元素的开始标签与结束标签之间的文本。

PCDATA是会被解析器解析的文本。

这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何&、<或者>字符;需要使用&、<以及>实体来分别替换它们。

CDATA

CDATA的意思是字符数据(characterdata)。

CDATA是不会被解析器解析的文本。

在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

在一个DTD中,元素通过元素声明来进行声明。

声明一个元素

在DTD中,XML元素通过元素声明来进行声明。

元素声明使用下面的语法:

ELEMENT元素名称类别>

或者

ELEMENT元素名称(元素内容)>

空元素

空元素通过类别关键词EMPTY进行声明:

ELEMENT元素名称EMPTY>

例子:

ELEMENTbrEMPTY>

XML例子:


只有PCDATA的元素

只有PCDATA的元素通过圆括号中的#PCDATA进行声明:

ELEMENT元素名称(#PCDATA)>

例子:

ELEMENTfrom(#PCDATA)>

带有任何内容的元素

通过类别关键词ANY声明的元素,可包含任何可解析数据的组合:

ELEMENT元素名称ANY>

例子:

ELEMENTnoteANY>

带有子元素(序列)的元素

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

ELEMENT元素名称(子元素名称1)>

或者

ELEMENT元素名称(子元素名称1,子元素名称2,.....)>

例子:

ELEMENTnote(to,from,heading,body)>

当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。

在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。

"note"元素的完整声明是:

ELEMENTnote(to,from,heading,body)>

ELEMENTto(#PCDATA)>

ELEMENTfrom(#PCDATA)>

ELEMENTheading(#PCDATA)>

ELEMENTbody(#PCDATA)>

声明只出现一次的元素

ELEMENT元素名称(子元素名称)>

例子:

ELEMENTnote(message)>

上面的例子声明了:

message子元素必须出现一次,并且必须只在"note"元素中出现一次。

声明最少出现一次的元素

ELEMENT元素名称(子元素名称+)>

例子:

ELEMENTnote(message+)>

上面的例子中的加号声明了:

message子元素必须在"note"元素内出现至少一次。

声明出现零次或多次的元素

ELEMENT元素名称(子元素名称*)>

例子:

ELEMENTnote(message*)>

上面的例子中的星号声明了:

子元素message可在"note"元素内出现零次或多次。

声明出现零次或一次的元素

ELEMENT元素名称(子元素名称?

)>

例子:

ELEMENTnote(message?

)>

上面的例子中的问号声明了:

子元素message可在"note"元素内出现零次或一次。

声明“非.../既...”类型的内容

例子:

ELEMENTnote(to,from,header,(message|body))>

上面的例子声明了:

"note"元素必须包含"to"元素、"from"元素、"header"元素,以及非"message"元素既"body"元素。

声明混合型的内容

例子:

ELEMENTnote(#PCDATA|to|from|header|message)*>

上面的例子声明了:

"note"元素可包含出现零次或多次的PCDATA、"to"、"from"、"header"或者"message"。

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

声明属性

属性声明拥使用下列语法:

ATTLIST元素名称属性名称属性类型默认值>

DTD实例:

ATTLISTpaymenttypeCDATA"check">

XML实例:

以下是属性类型的选项:

类型

描述

CDATA

值为字符数据(characterdata)

(en1|en2|..)

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

ID

值为唯一的id

IDREF

值为另外一个元素的id

IDREFS

值为其他id的列表

NMTOKEN

值为合法的XML名称

NMTOKENS

值为合法的XML名称的列表

ENTITY

值是一个实体

ENTITIES

值是一个实体列表

NOTATION

此值是符号的名称

xml:

值是一个预定义的XML值

默认值参数可使用下列值:

解释

属性的默认值

#REQUIRED

属性值是必需的

#IMPLIED

属性不是必需的

#FIXEDvalue

属性值是固定的

规定一个默认的属性值

DTD:

ELEMENTsquareEMPTY>

ATTLISTsquarewidthCDATA"0">

合法的XML:

在上面的例子中,"square"被定义为带有CDATA类型的"width"属性的空元素。

如果宽度没有被设定,其默认值为0。

#IMPLIED

语法

ATTLIST元素名称属性名称属性类型#IMPLIED>

例子

DTD:

ATTLISTcontactfaxCDATA#IMPLIED>

合法的XML:

合法的XML:

假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词#IMPLIED。

#REQUIRED

语法

ATTLIST元素名称属性名称属性类型#REQUIRED>

例子

DTD:

ATTLISTpersonnumberCDATA#REQUIRED>

合法的XML:

非法的XML:

假如您没有默认值选项,但是仍然希望强制作者提交属性的话,请使用关键词#REQUIRED。

#FIXED

语法

ATTLIST元素名称属性名称属性类型#FIXED"value">

例子

DTD:

ATTLISTsendercompanyCDATA#FIXED"Microsoft">

合法的XML:

非法的XML:

如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用#FIXED关键词。

如果作者使用了不同的值,XML解析器会返回错误。

列举属性值

语法:

ATTLIST元素名称属性名称(en1|en2|..)默认值>

DTD例子:

ATTLISTpaymenttype(check|cash)"cash">

XML例子:

或者

如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。

实体引用是对实体的引用。

实体可在内部或外部进行声明。

一个内部实体声明

语法:

ENTITY实体名称"实体的值">

例子:

DTD例子:

ENTITYwriter"BillGates">

ENTITYcopyright"CopyrightW3S">

XML例子:

&writer;©right;

注释:

一个实体由三部分构成:

一个和号(&),一个实体名称,以及一个分号(;)。

一个外部实体声明

语法:

ENTITY实体名称SYSTEM"URI/URL">

例子:

DTD例子:

ENTITYwriterSYSTEM"

ENTITYcopyrightSYSTEM"

XML例子:

&writer;©right;

InternetExplorer5.0可根据某个DTD来验证您的XML。

通过XML解析器进行验证

当您试图打开某个XML文档时,XML解析器有可能会产生错误。

通过访问parseError对象,就可以取回引起错误的确切代码、文本甚至所在的行。

注释:

load()方法用于文件,而loadXML()方法用于字符串。

varxmlDoc=newActiveXObject("Microsoft.XMLDOM")

xmlDoc.async="false"

xmlDoc.validateOnParse="true"

xmlDoc.load("note_dtd_error.xml")

document.write("
ErrorCode:

")

document.write(xmlDoc.parseError.errorCode)

document.write("
ErrorReason:

")

document.write(xmlDoc.parseError.reason)

document.write("
ErrorLine:

")

document.write(xmlDoc.parseError.line)

TryitYourself或者仅仅看一下这个XML文件。

关闭验证

通过把XML解析器的validateOnParse设置为"false",就可以关闭验证。

varxmlDoc=newActiveXObject("Microsoft.XMLDOM")

xmlDoc.async="false"

xmlDoc.validateOnParse="false"

xmlDoc.load("note_dtd_error.xml")

document.write("
ErrorCode:

")

document.write(xmlDoc.parseError.errorCode)

document.write("
ErrorReason:

")

document.write(xmlDoc.parseError.reason)

document.write("
ErrorLine:

")

document.write(xmlDoc.parseError.line)

TryitYourself

通用的XML验证器

为了帮助您验证XML文件,我们创建了此链接,这样你就可以验证任何XML文件了。

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2