以文本方式查看主题

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


--  作者:npuhetao
--  发布时间:6/19/2004 10:24:00 AM

--  结构完整的XML文档——实体引用
2.2 实体引用

  实体引用是指分析文档时会被字符数据取代的置标。XML预先定义了5个实体引用,列在表6-1中。实体引用用于XML文档中的特殊字符,否则这些字符将被解释为置标的组成部分。例如,实体引用&lt;代表小于号(<),否则会被解释为一个标记的起始部分。
表6-1 XML预定义的实体引用

实体引用 所代表字符
&amp; &  
&lt; <  
&gt; >  
&quot; "  
&apos;  '

  XML中的实体引用与HTML中不同,必须以一个分号结束。因此&gt;是正确的实体引用写法,&gt是不正确的。  

  未经处理的小于号(<)同表示"和"的符号(&)在一般的XML文本中往往被分别解释为起始标记和实体引用(特殊文本是指CDATA段,将在后面讨论)。因此,小于号同"和"号必须分别编码为&lt;和&amp;。
  例如,短语"Ben & Jerry s New York Super Fudge Chunk Ice Cream"应当写成Ben &amp;Jerry s New York Super Fudge Chunk Ice Cream 。
  大于号、双引号和撇号在它们可能会被解释成为置标的一部分时也必须编码。但是,养成全部编码的习惯要比努力推测一个特定的应用是否会被解释为置标容易得多。
  实体引用也能用于属性值中。例如:
<PARAM NAME="joke" VALUE="The diner said,
&quote;Waiter,There&apos;s a fly in my soup!&quote;">
</PARAM>


--  作者:npuhetao
--  发布时间:6/19/2004 10:25:00 AM

--  
结构完整的XML文档——CDATA
2.3 CDATA

  大多数情况下,出现在一对尖括号(<>)中的是置标,不在尖括号中的是字符数据。但是有一种情况例外,在CDATA段中所有文本都是纯字符数据。看起来与标记或者实体相似的仅仅是它们各自相应的文本。XML处理器无论如何是不会解释它们的。

  CDATA段用于需要把整个文本解释为纯字符数据而并不是置标的情况。当有一个包含许多<、>、&或"字符而非置标的庞大文本时,这是非常有用的。对于大部分C和Java源代码,正是这种情况。

  如果想使用XML写有关XML的简介,CDATA段同样非常有效。例如,在本书中包含许多小的XML代码块,而我正在使用的字处理器又不能顾及这些情况。但是如果把本书转换为XML,我将不得不很辛苦地用&lt;代替全部小于号,&amp;代替所有"和"字符。如下所示:

&lt;?xml version="1.0" standalone="yes"?&gt;
&lt;GREETING&gt;
Hello XML!
&lt;/GREETING&gt;

为了避免这种麻烦,可以使用一个CDATA段表示一个不需翻译的文本块。CDATA段以<![CDATA[ 开始并以 ]]>结束,例如:

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

  唯一不许出现在CDATA段中的文本是CDATA的结束界定符]]>。注释可能会出现在CDATA段中,但不再扮演注释的角色。也就是说两个注释标记和包含在它们之间的全部文本都将显示出来。

  因为]]>不能出现在CDATA段中,所以CDATA段不能嵌套。这使得使用XML写有关的CDATA段相对困难些。如果需要的话,必须去掉项目符号,并使用&lt;、&amp;和实体引用。

  CDATA段不常需要,一旦需要时,它是非常有用的。


--  作者:npuhetao
--  发布时间:6/19/2004 10:26:00 AM

--  
2.2 实体引用

  实体引用是指分析文档时会被字符数据取代的置标。XML预先定义了5个实体引用,列在表6-1中。实体引用用于XML文档中的特殊字符,否则这些字符将被解释为置标的组成部分。例如,实体引用&lt;代表小于号(<),否则会被解释为一个标记的起始部分。
表6-1 XML预定义的实体引用

实体引用 所代表字符
&amp; &  
&lt; <  
&gt; >  
&quot; "  
&apos;  '

  XML中的实体引用与HTML中不同,必须以一个分号结束。因此&gt;是正确的实体引用写法,&gt是不正确的。  

  未经处理的小于号(<)同表示"和"的符号(&)在一般的XML文本中往往被分别解释为起始标记和实体引用(特殊文本是指CDATA段,将在后面讨论)。因此,小于号同"和"号必须分别编码为&lt;和&amp;。
  例如,短语"Ben & Jerry s New York Super Fudge Chunk Ice Cream"应当写成Ben &amp;Jerry s New York Super Fudge Chunk Ice Cream 。
  大于号、双引号和撇号在它们可能会被解释成为置标的一部分时也必须编码。但是,养成全部编码的习惯要比努力推测一个特定的应用是否会被解释为置标容易得多。
  实体引用也能用于属性值中。例如:
<PARAM NAME="joke" VALUE="The diner said,
&quote;Waiter,There&apos;s a fly in my soup!&quote;">
</PARAM>


--  作者:npuhetao
--  发布时间:6/19/2004 10:26:00 AM

--  
2.4 标记

  置标能够区分XML文件与无格式文本文件。置标的最大部分是标记。

  简而言之,标记在XML文档中以<开始,以>结束,而且不包含在注释或者CDATA段中。因此,XML标记有与HTML标记相同的形式。开始或打开标记?lt;开始,后面跟有标记名。终止或结束标记以</开始,后面也跟标记名。遇到的第一个>该标记结束。

.2.4.1 标记名

  每个标记都有一个名称。标记名必须以字母或下划线(_)开始,名称中后续字符可以包含字母、数字、下划线、连字符和句号。其中不能含有空格(经常用下划线替代空格)。下面是一些合法的XML标记:
<HELP>
<Book>
<volume>
<heading1>
<section.paragraph>
<Mary_Smith>
<_8ball>

以下是句法不正确的XML标记:
<Book%7>
<volume control>
<1heading>
<Mary Smith>
<.employee.salary>

  结束标记与起始标记同名,只是在起始尖括号后加了一个/。例如,如果起始标记是<FOO>,那么结束标记是</FOO>。下面是前面所提到的合法起始标记所对应的结束标记:
</HELP>
</Book>
</volume>
</heading1>
</section.paragraph>
</Mary_Smith>
</_8ball>

  XML名称是大小写敏感的。在HTML中的<P>和<p>是同一个标记,</p>可以结束一个<P>标记,但在XML中却不行。下面所示的并不是我们讨论过的合法起始标记所对应的结束标记:
</help>
</book>
</Volume>
</HEADING1>
</Section.Paragraph>
</MARY_SMITH>
</_8BALL>

.2.4.2 空标记

  许多不含数据的HTML标记没有结束标记。例如,有</LI>、</IMG>、</HR>或</BR>标记。一些页面作者在所列的项目后面确实会包含</LI>标记,一些HTML工具也使用</LI>标记。但是HTML 4.0标准特别否认了这一点的必要性。同HTML中所有没有被公认的标记一样,一个不必要的</LI>的出现对交付的输出没有任何影响。

  这在XML中不是问题。XML的总体观点就是在分析文档时允许发现新的标记。因此没有识别的标记就不会被简单地忽略。而且XML处理器一定能够判明以前从没出现过的一个标记有没有结束标记。

  XML区分带有结束标记的标记,而不带结束标记的标记称为空标记。空标记以斜杠和一个结束尖括号(/>)结束。例如,<BR/>或<HR/>。

  目前的Web浏览器处理这种标记的方法不一致,如果希望保持向后的兼容性,可以用结束标记来代替,只要在两个标记之间不包含任何文本。例如:
<BR></BR>
<HR></HR>
<IMG></IMG>


--  作者:npuhetao
--  发布时间:6/19/2004 10:27:00 AM

--  
2.5 属性

  在前面的章节中讨论过,起始标记和空标记可以随意地包含属性。属性是用等号(=)分隔开的名称-数值对。例如:

<GREETING LANGUAGE="English">
Hello XML!
<MOVIE SRC="WavingHand.mov"/>
</GREETING>

  在此<GREETING>标记有一个LANGUAGE属性,其属性值是English。<MOVIE>标记有一个SRC属性,其属性值为WavingHand.mov。

.2.5.1 属性名

  属性名是字符串,遵循与标记名同样的规则。这就是,属性名必须以字母或下划线(_)开始,名称中后续字符可以包含字母、数字、下划线、连字符和句号。其中不能含有空格(经常用下划线替代空格)。

同一个标记不能有两个同名的属性。例如,下面的例子是不合法的:

<RECTANGLE SIDE="8cm" SIDE="10cm"/>

  属性名是区分大小写的。SIDE属性与side或者Side属性不是同一个属性,因此以下例子是合法的:

<BOX SIDE="8cm" side="10cm" Side="31cm"/>

.2.5.2 属性值

  属性值也是字符串。如下面所示的LENGTH属性,即使字符串表示的是一个数,但还是两个字符7和2,不是十进制数的72。
<RULE LENGTH="72"/>

  如果编写处理XML的代码,在对字符串执行算术运算之前必须把它们转换为一个数。
与属性名不同,对属性值包含的内容没有任何限制。属性值可以包含空格,可以以一个数字或任何标点符号(有时单括号和双括号除外)开头。

  XML属性值由引号界定。与HTML属性不同,XML属性值必须加引号。大多数情况下是使用双引号,但是如果属性值本身含有一个引号,就需要使用单引号。例如:
<RECTANGLE LENGTH= 7" WIDTH= 8.5" />

  如果属性值中含有两种引号,那么其中不用于界定字符串的一个必须用合适的实体引用代替。我通常替换两个,这种方法很管用。例如:
<RECTANGLE LENGTH= 8&apos;7&quot; WIDTH="10&apos;6&quot;"/>


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