以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  结构完整的XML文档——XML文档规则(二)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=8481)


--  作者:npuhetao
--  发布时间:6/25/2004 4:08:00 PM

--  结构完整的XML文档——XML文档规则(二)
#4:让一个元素完全包含其他所有元素

  一个XML文档包含一个根元素,它完全包含了文档中其他所有元素。有时候这种元素被称作文档元素。假设根元素是非空的(通常都是如此),它肯定有起始标记和结束标记。这些标记可能使用但不是必须使用root或DOCUMENT命名。例如,在下面的文档中根元素是GREETING:

<?xml version="1.0" standalone="yes"?>
<GREETING>
Hello XML!
</GREETING>

  XML声明不是一个元素,它更像是一个处理指令,因此不必包含在根元素中。类似地,在一个XML文档中的其他非元素数据,诸如其他处理指令、DTD和注释也不必包含在根元素中。但是所有实际的元素(除根元素本身)必须包含在根元素中。

#5:不能重叠元素

  元素可以包含别的元素(大多数情况下),但是元素不能重叠。事实上是指,如果一个元素含有一个起始标记,则必须同时含有相应的结束标记。同样,一个元素不能只含有一个结束标记而没有相应的起始标记。例如,下面的XML是允许的:
   <PRE><CODE>n =n +1;</CODE></PRE>
下面所示的XML是非法的,因为结束标记</PRE>放在了结束标记</CODE>之前:
   <PRE><CODE>n =n +1;</PRE></CODE>
大部分HTML浏览器容易处理这种情况,但是XML浏览器会因为这种结构而报告出错。
空标记可随处出现。例如:
   <PLAYWRIGHTS>Oscar Wilde<HR/>Joe Orton</PLAYWRIGHTS>
本规则与规则4联系在一起有如下含义:对于所有非根元素,只能有一个元素包含某一非根元素,但是元素不能包含其中含有非根元素的元素。这个直接含有者称为非根元素的父元素,非根元素被认为是父元素的子元素。因此,每个非根元素只有一个父元素。但是一个单独的元素可以有任意数目的子元素或不含有子元素。

  请分析如下所示的清单6-1。根元素是DOCUMENT元素,它含有两个元素。第一个STATE元素含有4个子元素:NAME、TREE、FLOWER和CAPITOL。第二个STATE元素含有3个子元素:NAME、TREE和CAPITOL。这些里层的子元素只包含字符数据,没有子元素。
清单6-1:父元素和子元素

<?xml version="1.0" standalone="yes"?>
<DOCUMENT>
<STATE>
<NAME>Louisiana</NAME>
<TREE>Bald Cypress</TREE>
<FLOWER>Magnolia</FLOWER>
<CAPITOL>Baton Rouge</CAPITOL>
</STATE>
<STATE>
<NAME>Mississippi</NAME>
<TREE>Magnolia</TREE>
<CAPITOL>Jackson</CAPITOL>
</STATE>
</DOCUMENT>

#6:属性值必须加引号

XML要求所有的属性值必须加引号,不管属性值是否包括空白。例如:
  <A HREF="http://metalab.unc.edu/xml/">
HTML的要求则不是这样。比如,HTML允许标记含有不带引号的属性。例如,下面是一个合法的HTML<A>标记:
  <A HREF=http://metalab.unc.edu/xml/>
唯一的要求是属性值不能嵌有空格。
如果一个属性值本身含有双引号,可以使用属性值加单引号来代替。例如:
  <IMG SRC="sistinechapel.jpg"ALT= And God said,"Let there be light," and there was light />
如果一个属性值包含有单引号和双引号,可以使用实体引用&apos;代替单引号,&quot;代替双引号。例如:
  <PARAM name="joke" value="The diner said,
  &quot;Waiter,There&apos;s a fly in my soup!&quot;">

#7:只在开始标记和实体引用中使用<和&

XML假定最先的<是一个标记的开始,&是一个实体引用的开始(HTML也是如此,如果省略它们,大部分浏览器会假定有一个分号)。例如:
  <H1>A Homage to Ben &Jerry s 
    New York Super Fudge Chunk Ice Cream</H1>
Web浏览器会正确地显示该标记,但是为了最大限度的安全,应当避免使用&,用&amp;来代替,像下面这样:
  <H1>A Homage to Ben &amp;Jerry s New York Super Fudge Chunk
Ice Cream</H1>
开尖括号(<)的情况也类似。请看下面很普通的一行Java代码:
  <CODE> for (int i =0;i <=args.length;i++){</CODE>
XML与HTML都会把<=中的小于号当作一个标记的开始。该标记会延续到下一个>。因此该行会现示成:
  for (int i =0;i
而不是:
  for (int i =0;i <=args.length;i++){
  "=args.length;i++){"被解释成一个不能识别的标记的一部分。
把小于号写成&lt;可以出现在XML和HTML文本中。例如:
  <CODE> for (int i =0;i &lt;=args.length;i++){</CODE>
结构完整的XML要求把&写成&amp;,把<写成&lt;,只要不是作为标记或者实体的一部分时都应如此。

#8:只能使用现有的5个实体引用

读者可能已经熟悉了几个HTML中的实体引用,例如&copy;为插入版权号,&reg为插入注册商标号。但是除了已经讨论过的五个实体引用,XML只能使用预先在DTD中定义过的实体引用。
但是现在读者可能还不了解DTD,如果与字符&出现在文档中的任何地方,其后必须紧跟amp;、lt;、gt;、apos;或者quot;。所有其他的用法均会破坏结构完整性。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms