新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → 结构完整的XML文档——XML文档规则(一) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5546 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 结构完整的XML文档——XML文档规则(一) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客楼主
    发贴心情 结构完整的XML文档——XML文档规则(一)

    独立文档中结构完整的XML(XML文档规则)(一)

      尽管可以根据需要编写标记,XML文档为了保持结构完整必须遵循一定的规则。如果一个文档不是结构完整的,大部分读取和显示操作都会失败。

      事实上,XML规范严格禁止XML句法分析器分析和解释结构欠妥的文档。正在执行操作的分析器唯一能做的是报告出错。它不会修改错误,不会作最大的努力显示作者想要的东西,也不会忽略不当的结构欠妥的标记。它所能做的是报告错误和退出。

      这样做的目的是为了避免对错误的兼容性的竞争。这种竞争已使得编写HTML语法分析程序和显示程序变得非常困难。因为Web浏览器承认畸形的HTML,而Web页面设计者不会特别尽力确保他们的HTML正确无误。事实上,他们甚至利用个别浏览器中的错误达到特殊的效果。为了正确显示被大量安装的HTML页面,每个新的Web浏览器必须支持已有的Web浏览器的每一个细微差别和各自的属性。用户将放弃任何一种严格执行HTML标准的浏览器。正是为了避免这种遗憾,XML处理器才只接受结构完整的XML。

      为了使一个文档结构完整,XML文档中的所有置标和字符数据必须遵守前几节中给出的规则。而且有几条关于如何把置标和字符数据相互联系起来的规则。这些规则总结如下:

    文档的开始必须是XML声明。
    含有数据的元素必须有起始标记和结束标记。
    不含数据并且仅使用一个标记的元素必须以/>结束。
    文档只能包含一个能够包含全部其他元素的元素。
    元素只能嵌套不能重叠。
    属性值必须加引号。
    字符<和&只能用于起始标记和实体引用。
    出现的实体引用只有&amp;、&lt;、&gt;、&apos;和&quot;。
      这八条规则稍加调整就能适用于含有一个DTD的文档,而且对于定义文档与它的DTD之间关系的完整性有另外的规则。我们将在后面几章中介绍。现在请仔细看这些用于没有DTD文档的规则。

    #1:文档必须以XML声明开始

    下面是XML 1.0中独立文档的XML声明:
        <?xml version="1.0" standalone="yes"?>
    如果声明出现,它绝对是该文件最开头部分,因为XML处理器会读取文件最先的几个字节并将它与字符串<?XML的不同编码作比较来确定正在使用的字符串集(UTF-8、大头(高字节先传格式)或者小头(低字节先传格式))。除去看不见的字节顺序记号,在它之前不能有任何东西,包括空格。例如,下面一行用于XML的开始是不能接受的,因为在该行的前面有多余的空白。
      < ?xml version="1.0" standalone="yes"?>

      XML确实允许完全省略XML声明。通常不推荐这样做,但这样做有特殊的用途。例如,省略XML声明,通过连接其他结构完整的XML文档有助于重新建立一个结构完整的XML文档。

    #2:在非空标记中使用起始和结束标记

      如果忘了结束HTML的标记,Web浏览器并不严格追究。例如,如果文档包含一个<B>标记却没有相应的</B>标记,在<B>标记之后的全部文档将变为粗体。但文档仍然能显示。
    XML不会如此宽松,每个起始标记必须以相应的结束标记结束。如果一个文档未能结束一个标记,浏览器或移交器将报告一个错误信息,并且不会以任何形式显示任何文档的内容。

    #3:用"/>"结束空标记

      不包含数据的标记,例如HTML的<BR>、<HR>和<IMG>,不需要结束标记。但是XML空标记必须由/>结束,而不是>。例如<BR>、<HR>和<IMG>的XML等价物是<BR/>、 <HR/>和<IMG/>。
      当前的Web浏览器处理这种标记的方法不一致。但是如果想保持向后的兼容性,可以使用结束标记来代替,而且不能在其间包含任何文本。例如:

    <BR></BR>
    <HR></HR>
    <IMG></IMG>

      即使这样,Netscape处理<BR></BR>也有困难(它把这两个标记解释为行间距,而不是前面所讲的)。因此,在HTML中包含结构完整的空标记也并非总是可行的。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/19 10:29:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客2
    发贴心情 
    结构完整的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;。所有其他的用法均会破坏结构完整性。

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/19 10:30:00
     
     efootball 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:15
      积分:109
      门派:XML.ORG.CN
      注册:2004/6/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给efootball发送一个短消息 把efootball加入好友 查看efootball的个人资料 搜索efootball在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看efootball的博客3
    发贴心情 
    不错,值得初学者好好地读一读!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/12 13:05:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/22 7:06:22

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms