XML学习笔记之DTD之元素(ELEMENT)
2007-06-24 16:13
483 查看
元素 ELEMENT
元素是xml的核心和灵魂。在DTD中,元素类型是通过ELEMENT标记声明的。此外,标记还提供所声明类型的名称和内容贵含。
命名规则:名称可以是字母、数字,也可以使用标点符号,名称不能以数字开头。它的第一个字符只能是字母、下划线或冒号。
冒号:为避免与命名空间的保留用法,最好避免在元素名称中使用冒号。
元素内容 四种类型 : 空,元素,复合,任意。
空元素:即不包含文本,也不包含子元素,但是可以有属性,用关键 字EMRTY声明。
元素:更确切说是纯元素,只包含子元素,而不包含文本。
复合:元素和可解析字符数据(#PCDATA)或文本的组合。
任意:同名称含义,任意。使用关键字ANY声明
e.g
<!ELEMENT SomeDate EMPTY>
<!ELEMENT ANY>
//SomeDate类型实例
<SomeDate/>
XML定义的某些属性类型可以用来表示一对一或一对多关系。如果你要说明的仅仅是关系本身,空元素是最适合不过的。
AnyOldThing声明为ANY内容,因为可以使用元素和文本的任意组合。一般而言使用ANY内容要格外谨慎,因为解析器基本上不能提供有效性验证
复合内容和元素内容采用内容模型(content model)表示。内容模型是一种规范,定义了元素内容的内部结构,即元素结构的声明。
内容模型组成:由圆括号包含的若干子元素名称、运算符和#PCDATA关键字的组合。
运算符用于说明元素包含的元组。元素和字符数据之间的组合关系。
顺序运算符 , 表示严格顺序
| 表示选择
以逗号分割的列表表示顺序排列的元素。
以管道分割的列表表示选择排列的元素。
e.g
<!ELEMENT PersonName (First,Middle,Last)>
<!ELEMENT FruitBasket (Apple|Orange)>
<!ELEMENT FruitBasket1 (Cherry,(Apple|Orange))>
在PersonName实例中,First,Middle,Last必须按指定的顺序出现。
在FruitBasket实例中,必须从Apple和Orange中选择其一。
在FruitBasket1实例中,必须包含两个元素:Cherry以及Apple或Oran ge,且它们必须按照指定的顺序出现(第二个参数可以从Apple或Oran ge中选择其一)
所以元素实例只能有以下两种形式
e.g
<FruitBasket1>
<Cherry>//some code</Cherry>
<Apple> //some code</Apple>
</FruitBasket1>
or
<FruitBasket1>
<Cherry>//some code</Cherry>
<Orange> //some code</Orange>
</FruitBasket1>
元组运算符
? 可以选的;可有可无
* 零个或多个
+ 一个或多个
如果没有元组运算符,说明元组数为一。元组运算符可以用于元素或内容模型,它能够产生许多非常复杂的结构。
e.g
<!ELEMENT FruitBasket (Cherry+,(Apple|Orange)*)>
以上声明说明FruitBasket可以有一个或多个元素Cherry的实例,以及零个或多个Apple或Orange的实例。而所有cherry元素必须连续出现。
e.g
<FruitBasket>
<Cherry>//some code</Cherry>
<Cherry>//some code</Cherry>
<Cherry>//some code</Cherry>
<Apple> //some code</Apple>
<Orange>//some code</Orange>
<Orange>//some code</Orange>
</FruitBasket>
如果需要表示复合内容,需要在内容模型中包含#PCDATA。内容模型中的元素必须以|运算符分割。而且整个组声明为”*“:
<!ELEMENT MixedBag (#PCDATA|ItemA|ItemB)*>
使用复合内容模型时,#PCDATA关键字必须是模型中的第一个选项。
考虑以下内容模型,看看它们各自表达什么含义:
<!ELEMENT foo (A,(B|C))>
元素foo包含两个子元素,第一个永远是元素A。第二个是B或C。
<!ELEMENT foo (A,B?,C)>
foo包含两个或三个按顺序排列的子元素。其中 B是可选的。
<!ELEMENT foo ((A,B)+|(C|D))>
元素 foo可以包含重复的A、B对列表,或者一个单独的 C或D。
借助内容模型,可以产生变化多样的子内容实例。例如:
<!ELEMENT foo (A,(B,C)*,D+)>
元素foo可以包含一个A,零个或多个B、C对,以及至少一个D。
元素是xml的核心和灵魂。在DTD中,元素类型是通过ELEMENT标记声明的。此外,标记还提供所声明类型的名称和内容贵含。
命名规则:名称可以是字母、数字,也可以使用标点符号,名称不能以数字开头。它的第一个字符只能是字母、下划线或冒号。
冒号:为避免与命名空间的保留用法,最好避免在元素名称中使用冒号。
元素内容 四种类型 : 空,元素,复合,任意。
空元素:即不包含文本,也不包含子元素,但是可以有属性,用关键 字EMRTY声明。
元素:更确切说是纯元素,只包含子元素,而不包含文本。
复合:元素和可解析字符数据(#PCDATA)或文本的组合。
任意:同名称含义,任意。使用关键字ANY声明
e.g
<!ELEMENT SomeDate EMPTY>
<!ELEMENT ANY>
//SomeDate类型实例
<SomeDate/>
XML定义的某些属性类型可以用来表示一对一或一对多关系。如果你要说明的仅仅是关系本身,空元素是最适合不过的。
AnyOldThing声明为ANY内容,因为可以使用元素和文本的任意组合。一般而言使用ANY内容要格外谨慎,因为解析器基本上不能提供有效性验证
复合内容和元素内容采用内容模型(content model)表示。内容模型是一种规范,定义了元素内容的内部结构,即元素结构的声明。
内容模型组成:由圆括号包含的若干子元素名称、运算符和#PCDATA关键字的组合。
运算符用于说明元素包含的元组。元素和字符数据之间的组合关系。
顺序运算符 , 表示严格顺序
| 表示选择
以逗号分割的列表表示顺序排列的元素。
以管道分割的列表表示选择排列的元素。
e.g
<!ELEMENT PersonName (First,Middle,Last)>
<!ELEMENT FruitBasket (Apple|Orange)>
<!ELEMENT FruitBasket1 (Cherry,(Apple|Orange))>
在PersonName实例中,First,Middle,Last必须按指定的顺序出现。
在FruitBasket实例中,必须从Apple和Orange中选择其一。
在FruitBasket1实例中,必须包含两个元素:Cherry以及Apple或Oran ge,且它们必须按照指定的顺序出现(第二个参数可以从Apple或Oran ge中选择其一)
所以元素实例只能有以下两种形式
e.g
<FruitBasket1>
<Cherry>//some code</Cherry>
<Apple> //some code</Apple>
</FruitBasket1>
or
<FruitBasket1>
<Cherry>//some code</Cherry>
<Orange> //some code</Orange>
</FruitBasket1>
元组运算符
? 可以选的;可有可无
* 零个或多个
+ 一个或多个
如果没有元组运算符,说明元组数为一。元组运算符可以用于元素或内容模型,它能够产生许多非常复杂的结构。
e.g
<!ELEMENT FruitBasket (Cherry+,(Apple|Orange)*)>
以上声明说明FruitBasket可以有一个或多个元素Cherry的实例,以及零个或多个Apple或Orange的实例。而所有cherry元素必须连续出现。
e.g
<FruitBasket>
<Cherry>//some code</Cherry>
<Cherry>//some code</Cherry>
<Cherry>//some code</Cherry>
<Apple> //some code</Apple>
<Orange>//some code</Orange>
<Orange>//some code</Orange>
</FruitBasket>
如果需要表示复合内容,需要在内容模型中包含#PCDATA。内容模型中的元素必须以|运算符分割。而且整个组声明为”*“:
<!ELEMENT MixedBag (#PCDATA|ItemA|ItemB)*>
使用复合内容模型时,#PCDATA关键字必须是模型中的第一个选项。
考虑以下内容模型,看看它们各自表达什么含义:
<!ELEMENT foo (A,(B|C))>
元素foo包含两个子元素,第一个永远是元素A。第二个是B或C。
<!ELEMENT foo (A,B?,C)>
foo包含两个或三个按顺序排列的子元素。其中 B是可选的。
<!ELEMENT foo ((A,B)+|(C|D))>
元素 foo可以包含重复的A、B对列表,或者一个单独的 C或D。
借助内容模型,可以产生变化多样的子内容实例。例如:
<!ELEMENT foo (A,(B,C)*,D+)>
元素foo可以包含一个A,零个或多个B、C对,以及至少一个D。
相关文章推荐
- xml学习笔记 2. dtd
- 【代码笔记】XML深入学习:DTD约束与DTD语法(1)
- XML学习笔记(二)——XML元素与属性
- XML学习笔记(二): 读取元素、属性和内容值
- 学习笔记-XML、DTD与Schema
- AS3----Spring 框架学习笔记(二)----xml智能提示DTD文件
- 【代码笔记】XML深入学习:DTD约束与DTD语法(2)
- SharePoint【学习笔记】-- 关于Element.xml中Ghostable与GhostableInLibrary属性设置
- [XML]学习笔记(三)——DTD属性的声明及类型
- XML学习笔记之文档类型定义(DTD) 和实体(ENTITY)
- Python学习笔记(8):The ElementTree XML API——操作XML文件
- 学习笔记之Document Object Model(1)——如何使用document获得文档元素(element对象)
- XML & DTD 学习笔记
- AJAX 学习笔记(5) 处理XML文档的DOM元素属性和遍历DOM元素方法
- xml学习笔记(2)DTD约束
- Sharepoint学习笔记---关于Element.xml中Ghostable与GhostableInLibrary属性设置
- [XML]学习笔记(二)——DTD的声明与实体
- xml学习笔记三-DTD
- xml、dtd学习笔记
- 【XML学习笔记】1:认识XML和XML元素,属性