您的位置:首页 > 移动开发

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 apple c