XML学习笔记之DTD之元素(ELEMENT)

元素  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。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值