`
mamacmm
  • 浏览: 200538 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

DTD的定义规则和编写

    博客分类:
  • J2EE
阅读更多

1DTD - XML 建立主组件群(blocks
    <body>....</body>之类的标签是XMLHTML文件的主组件群(blocks)。

1.1XML文件的组件群
    DTD来看,所有的XML文件(和HTML文件)都是由接下来的简单组件群组成的:Elements元素;Attributes 属性;Entities实体;PCDATA 被解析的字符数据(Parsed Character Data);CDATA 字符数据值(Character Data)。下面是每个组件群的简短解释。

1.2元素(Elements
    元素是XMLHTML文件的主组件群(main building blocks)。HTML元素的实例是"body" "table"XML元素实例是"note" "message"。元素可以包括文本、其它元素或者空值。空值html元素的实例是"hr", "br" "img"
例如:
<body>body text in between</body>
<message>some message in between</message>

1.3属性(Attributes
    属性提供关于元素的额外信息(extra information about elements)。属性总是置于元素的开始标签里面。属性一般是以名称(name/值(value这样的形势一对对的出现。下面的“img”元素就是关于源文件的补充信息:
<img src="computer.gif" />
   
元素名称是“img”。属性名称“src”。属性值是"computer.gif"。因为元素自身是空值,所以它是以“/”结束的。

1.4实体(Entities
    实体是对于定义普通文件(define common text)的变量。实体参数是定义实体的参数。很多人都知道HTML实体参数:"&nbsp;"。这里的"no-breaking-space"实体是在HTML中用来在文本中插入一个额外空间的。当XML剖析器解析文件时,实体就会得到扩展。下面(表1)的实体是在XML中预定的:

1

字符

字符实体

&

&amp;&#38;

'

&apos;&#39;

>

&gt;&#62;

<

&lt;&#60;

"

&quot;&#34;

1.5 PCDATA
    PCDATA的意思是被解析的字符数据。把字符数据当作XML元素的开始标签与结束标签之间的文本。剖析器会分析PCDATA文本。文本中的标签会被当作标示的字体,实体将会扩展。

1.6 CDATA
    CDATA也是字符数据的意思。剖析器不会解析CDATA文本。文本中的标签不会作为标示字体,实体也将不会得到扩展。

2.元素定义
2.1元素声明
    元素声明语法如下:
<!ELEMENT name content>
   
其中,name是一个标准的XML标记的名字。Centent
由以下三种之一组成:
关键字
EMPTY
关键字
ANY
描述包含在本元素中的子元素的顺序和重复次数的内容模型。

2.2元素内容类型(Element Content Model
    元素内容通常有五种类型:EMPTYANY#PCDATA、子元素型和混合型。


2.2.1 EMPTY类型
    EMPTY用于定义空元素,该元素只可能有属性而不会有字符数据或子元素。其形式为<swt/><swt></swt>。声明空元素的语法如下:
<!ELEMENT emptyelement EMPTY>

2.2.2 ANY类型
    该元素可以包含DTD中定义的其他任何元素或已编译的字符数据。声明该元素的语法如下:
<!ELEMENT anyelement ANY>

2.2.3 #PCDATA类型
    不包含其它任何元素而只包含字符数据的元素,用关键字#PCDATA进行定义,它代表已编译的字符数据(parsed character dataPCDATA可以包含除标记以外的一切字符,包括数字、字母和符号等。被定义为包含PCDATA的元素不能包含任何其它子元素。示例如下:
<!ELEMENT title(#PCDATA)>

2.2.4 子元素类型
    元素可以包含一系列的子元素,子元素内容模型用于指定某个元素可以包含哪些子元素,如:
<!ELEMENT message(header,body,signature,footer)>//message元素包含四个子元素,依次是headerbodysignaturefooter元素。
    根据子元素间的关系,子元素内容模型可以有两种可能的结构:序列和选择。
序列。其所有子元素必须出现且仅出现一次,这种结果成为序列。使用序列时应注意,首先,序列中不能出现
#PCDATA;其次,子元素自身还可以包含其它子元素。
选择。元素间的选择可以进行如下声明:
<!ELEMENT elem(subelem1|subelem2|subelem3)>//将子元素用竖线进行分隔,表明elem元素的子元素为subelem1subelem2subelem3三者之一,但不能同时包含其中的两个或三个子元素。
    序列和选择这两种结构可以结合使用。

2.2.5 混合类型
    若某元素既包含子元素又包含已编译的字符数据,则该元素具有混合内容。其声明如下:
<!ELEMENT pick(#PCDATA|one|two|three)*>
   
为避免产生错误,混合内容元素的声明必须遵循这一格式。即采用单一的一组可选项,以#PCDATA开始,后面是混合内容中可能出现的子元素类型,每种只需声明一次。除此之外,“*”
必须放在右括号之后。下面的声明是错误的:
<!ELEMENT pick(one|#PCDATA|two*|three)>

2.3元素出现次数指示符(Element Occurrence Indicator见表2

2

符号

代表标记出现的次数

不出现或只出现一次

*

不出现或可出现多次

+

必须出现一次以上

无符号

只能出现一次

  

3.属性定义
3.1
属性声明
   
属性声明的语法如下:
<!ATTLIST Element_name Attribute_name Type Defualt_value>
   
其中,ATTLIST关键字用来定义元素所具有的属性,Element_name是元素名,Attribute_name是该元素所具有的属性名,Type是属性的类型,Defualt_value是属性的默认值。注意:在一个给定的元素中不能有两个属性同名;若属性值中含有双撇号,则该属性值应用单撇号括起来。如:
<job comments=’He said,”I can paint only red door” ’>Door Painter</job>

3.2 属性类型
   
XML中共有10种属性类型(attribute-type):(见表3

3

属性值类别

描述

CDATA

属性值仅仅是一般的文字。与#PCDATA元素声明类似。

<!ATTLIST AnElem attr CDATA #REQUIRED>

Enumerated

列出该属性的取值范围,一次只能有一个属性值能够赋予属性。

<!ATTLIST play position (center|forward|defense) ”center”>

NMTOKEN

表示属性值只能由字母或下划线_开始,之后是字母、数字、下划线、短横线或圆点,且不能含有空格。

NMTOKENS

表示属性值能够由多个nmtoken组成,每个nmtoken之间用空格隔开。

ID

ID类型用于标识文档中的元素。该属性在xml文件中是唯一的。同时,每个元素最多只能具有一个ID类型的属性。

<!ALLTIST author authorID ID #REQUIRED >

IDREF/ IDREFS

IDREF表示该属性值是参考了另一个id属性;IDREFS表示该属性值是参考了多个id属性,这些id属性的值用空格隔开。

DTD定义:

<!ELEMENT bookInfo(publishers,authors,books)>

<!ELEMENT publishers(publisher+)>

<!ELEMENT publisher(pname,address)>

<!ATTLIST publisher publisherID ID #REQUIRED>

<!ELEMENT pname(#PCDATA)>

<!ELEMENT address(#PCDATA)>

<!ELEMENT authors(author+)>

<!ELEMENT author(aname,age,sex)>

<!ATTLIST author authorID ID #REQUIRED>

<!ELEMENT aname(#PCDATA)>

<!ELEMENT age(#PCDATA)>

<!ELEMENT sex(#PCDATA)>

<!ELEMENT books(book*)>

<!ELEMENT book(title,price,year)>

<!ATTLIST book publisher IDREF #REQUIRED

author IDREFS #REQUIRED>

<!ELEMENT title(#PCDATA)>

<!ELEMENT price(#PCDATA)>

<!ELEMENT year(#PCDATA)>

对应的XML文档:

<bookInfo>

<publishers>

<publisher publisherID=”p001”>

<pname>tsinghua university press</pname>

<address>Beijing</address>

</publisher>

<publisher publisherID=”p002”>

<pname>electronic industy press</pname>

<address>Beijing</address>

</publisher>

</publishers>

<authors>

<author authorID=”a001”>

<aname>Mary</aname>

<age>34</age>

<sex>male</sex>

</author>

<author authored=”a002”>

<aname>Tom</aname>

<age>39</age>

<sex>female</sex>

</author>

</authors>

<books>

<book publisher=”p001” author=”a001 a002”>

<title>XML</title>

<price>22</price>

<year>2007</year>

</book>

</books>

</bookInfo>

ENTITY

表示该属性的设定值是一个外部实体(entity),如一个图片文件。

ENTITYS

该属性值包含了多个外部entity,不同的entity之间用空格隔开。

NOTATION

属性值是在DTD中声明过的notation(声明用什么应用软件解读某些二进制文件,如图片)。

<!NOTATION gif SYSTEM “GIF_Viewer”>

<!NOTATION jpg SYSTEM “JPG_Viewer”>

<!NOTATION png SYSTEM “PNG_Viewer”>

<!ELEMENT img #PCDATA>

<!ATTLIST img src CDATA #REQUIRED

NOTATIONpng|jpg|gif#REQUIRED >

//其中,type属性的值可以为pngjpggif之一,且每个值均与一个相应的<!NOTATION>声明相对应。

3.3 属性默认值
   
属性声明可以给属性指定一个默认值,使得当在XML文档中未明确地指定该属性的值时,XML处理器会将此默认值作为该属性的值。属性的默认值可用#REQUIRED#IMPLIED#FIXED和字符串定义,见表4

4

属性内定值

描述

#REQUIRED

表示在标记中必须出现此属性。

#IMPLIED

标记中可以不出现此属性。即该属性不是必须使用。

#FIXED

属性的值是固定的某个值。

字符串

标记中如没有指定属性的值,那么此字符串就是此属性的值。

示例:
属性值为字符数据,默认值为numeric,在未指定其他值时使用该值。
<!ELEMENT year
#PCDATA>
<!ATTLIST year format CDATA “numeric”>
属性有一默认值numeric,并且必须使用该值作为属性的值。

<!ELEMENT year
#PCDATA>
<!ATTLIST year format CDATA #FIXED “numeric”>
属性无默认值,但它必须出现在year元素中。

<!ELEMENT year
#PCDATA>
<!ATTLIST year format CDATA #REQUIRED>
属性值为numericcharacter,而numeric为默认值。

<!ELEMENT year
#PCDATA>
<!ATTLIST year format (numeric|character) ”numeric”>
属性值为numericcharacter,在此处numeric被固定为唯一的实际值。

<!ELEMENT year
#PCDATA>
<!ATTLIST year format (numeric|character) #FIXED”numeric”>
属性必须有一个值,numericcharacter

<!ELEMENT year
#PCDATA>
<!ATTL

分享到:
评论

相关推荐

    DTD的定义、规则和编写

    - **DTD文档**:DTD文档必须按照一定的规则编写,以确保其正确性和有效性。 - **语法格式**:DTD的编写需遵循特定的语法格式,包括元素声明、实体声明、属性列表声明等。 - **示例**: ``` &lt;!DOCTYPE note [ &lt;!...

    DTD(文档类型定义)

    使用DTD对于编写和解析XML文档有以下好处: - **验证文档结构**:确保XML文档遵循预定义的规则,避免了语法错误。 - **提高文档一致性**:通过定义元素和属性,保证了不同开发者创建的文档有一致的格式。 - **增强...

    DTD(XML文档类型定义)教程

    DTD通过一系列元标记来定义XML文档的语法和词汇表,它规定了哪些元素可以存在,元素间的关系如何,以及属性的使用规则等。例如,DTD可以定义一个“联系人列表”元素,它包含多个“联系人”元素,每个“联系人”元素...

    XML中的外部dtd和内部dtd实例

    理解XML的外部DTD和内部DTD对于编写符合规范的XML文档至关重要。 一、XML DTD概述 DTD是一种元语言,它允许我们定义XML文档的合法结构和内容。通过定义元素类型、属性和实体,DTD确保XML文档遵循一定的规则,从而...

    DTD文件和XSD文件

    Struts 2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的配置文件(通常为`struts.xml`)采用DTD定义,包含了动作配置、拦截器、结果类型等核心组件的声明。DTD帮助开发者确保配置文件遵循正确...

    几个常用的DTD

    了解和掌握DTD对于XML文档的编写和解析至关重要,因为它确保了数据的准确性和互操作性。在处理XML文档时,正确引用或创建DTD可以帮助开发者维持文档的一致性,并简化验证过程。不过,随着XML Schema等现代验证工具的...

    mybatis-dtd约束文件

    - DTD定义了XML文档的合法结构和内容。 - 它包含元素声明,指定元素的名称、是否可选、允许的内容类型等。 - 属性声明用于定义元素可能具有的属性及其数据类型。 - DTD也可以包含实体声明,用于引入重复的文本或...

    XML DTD简单设计

    在XML中,DTD(Document Type Definition)是一种定义XML文档结构的规范,它规定了XML文档的元素和属性的规则。DTD可以帮助确保XML文档的合法性,即文档是否遵循了预定义的结构。 XML DTD的编写可以分为内部DTD和...

    xml与DTD,xml与DTD

    ### XML与DTD详解 #### 一、XML简介 XML(Extensible Markup Language)是一种非常重要...通过使用XML来存储数据,结合DTD定义数据结构,可以有效地保证数据的一致性和完整性。这对于跨系统数据交换和管理至关重要。

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    这个文件是MyBatis配置文件的DTD定义,它规定了MyBatis主配置文件(`mybatis-config.xml`)的结构和元素。主配置文件中,我们可以设置全局属性,比如数据库连接的信息、事务管理器的类型、数据源的配置、插件的启用...

    DTD的CHM帮助文档

    10. **最佳实践**:分享编写和使用DTD的最佳实践,以提高XML文档的质量和维护性。 通过这个CHM文件,学习者可以全面了解和掌握DTD的基本概念、语法以及实际应用,同时也能熟悉CHM文件的查阅方式,提升技术学习效率...

    dtd编写说明文档,有语法,有内部声明,外部声明等

    1. **元素的定义规则**:在DTD中,元素是构成XML文档的基本单位。它们通过`&lt;element&gt;`标签定义,例如`&lt;elementName&gt;`. 元素可以是空的(`&lt;!ELEMENT elementName EMPTY&gt;`),包含其他元素(`&lt;!ELEMENT elementName ...

    sql-map-2.dtd和sql-map-config-2.dtd

    总结来说,"sql-map-2.dtd"和"sql-map-config-2.dtd"是Ibatis 2.x版本中非常关键的组件,它们为XML配置文件提供了结构化规则,使得开发人员能够编写出合法且易于维护的SQL映射文件和全局配置文件。理解并正确使用...

    mybatis配置dtd文件

    开发者可以根据这些定义来编写和组织自己的XML配置,实现与数据库的高效交互。 总结来说,`mybatis-3-config.dtd`和`mybatis-3-mapper.dtd`是MyBatis框架中不可或缺的部分,它们规定了XML配置文件的结构,帮助...

    不同版本的 struts2.dtd

    - Struts2.0是Struts2框架的早期版本,其DTD定义了初始的配置元素。例如,`&lt;struts&gt;`是根元素,包含`&lt;package&gt;`,`&lt;action&gt;`等子元素。`&lt;action&gt;`元素定义了一个动作,包括其名称、类和结果等属性。`&lt;result&gt;`元素...

    ibatis的dtd文件

    在Ibatis中,DTD(Document Type Definition)文件扮演着关键角色,它们定义了XML配置文件的结构和规则,使得XML配置能够被正确解析和理解。下面我们将深入探讨Ibatis的DTD文件及其在学习和开发过程中的应用。 首先...

    eclipse dtd 包 插件 文件 下载

    文件列表中的“dtd”可能是指包含DTD定义的文件,这可能是用户在下载过程中获取的一个具体示例或模板,用于参考或直接应用到自己的项目中。 在实际工作中,掌握Eclipse DTD插件的使用能够提高XML文档的开发效率,...

    mybatis-3-config.dtd

    在实际使用中,开发者需要按照这两个DTD文件定义的规则编写`mybatis-config.xml`和`mapper.xml`,这样MyBatis才能正确解析并执行相应的数据库操作。同时,由于DTD是公开的,开发者可以通过查阅DTD文件了解MyBatis...

    XML学习 DTD

    DTD定义了元素、属性、实体以及元素之间的关系,有助于验证XML文档是否符合预设的规范。 在XML学习中,DTD起着至关重要的作用。首先,了解DTD的基本概念是必要的,包括元素(element)、属性(attribute)、实体...

Global site tag (gtag.js) - Google Analytics