zoukankan      html  css  js  c++  java
  • XML

    XML语法

    基本规则

    (1).XML是区分大小写的;

    (2).所有元素的起始和结束标注必须成对出现,且要正确嵌套;

    (3).如果使XML说明,则它必须是XML文档的第一行:<?xml version=”1.0”?>,一般还要在里面指定编码集,否则默认使用ISO-8859-1编码,该编码是不支持中文的。(文件保存的编码集必须和文件查看的编码集一致,否则会出现乱码)

    (4).元素属性必须用引号引起来,单、双引号都可以,但必须成对出现。如:

    <basic attr=”1.0”>

    <basic attr=’1.0’>

    (5).XML命名规则:

    .XML名以下划线或字母开始;

    .XML名可包含字母、数字、句点、下划线和冒号;

    .XML名不能包含空格;

    .XML名不能以数字开始,但可包含数字;

    .XML名区分大小写。

    (6).保留标记字符,如果要在XML中显示<&之类的标记,就要使用字符的实体形式,XML中有五种预先定义了的实体:

    &lt:   表示<字符

    &gt:   表示>字符

    &amp:  表示&字符

    &apos: 表示字符

    &quot: 表示字符

    我们也可用ENTITY自定义实体:

    <!ENTITY linux “linux is a very good system”>

    这样我们可用&linux来调用。

     (7).XML文档内容中的空格是有意义的,在转换后会保留。(所以要避免全角符号的出现特别是全角空格,该错误很难排查)

     (8).元素以<开始并以/>结束,如<br/>

     

    元素(ELEMENT)

    元素其实就是标记,或者也可以将元素视为标记名称,并没有很明确的定义,而只是一个形容词而已。元素可以说XML文件里最重要的构成单元。有三种元素使用方法:⑴简单内容,文本或其它数据出现在开始和结束标记之间。开始标记与结束标记有相同名字,但结束标记明要以一个斜杠开始。下面的元素包括一个开始标记、内容和一个结束标记

    <author>Stephen Hawking</author>.

    ⑵把元素用作其它元素的容器,元素包含其他元素,呈现出一种分层或树形数据结构。以下的book元素包含了authortitle元素

    <book>

    <author>Stephen Hawking</author>

    <title>A brief history of time</title>

        </book>

    ⑶空元素用作属性容器,当元素只包含属性而无内容时,有一种不需使用开始和结束标记的元素简写方式。空元素的书写可用标记名后跟着一个斜杠来表示

    <book/>

    他表示了:<book></book>空元素常用来包含属性数据。<book title=”A brief history of time” author=”Stephen Hawking”/>

    元素命名规则⑴名字可以包含字母、数字和其他字符。⑵名字不能以数字或标点开始。⑶名字不能用字符串“XML”开始,不管是小写形式还是大写形式。⑷名字不能包含空格,不能使用冒号。

     

    属性

    属性提供了有关元素的附加信息。再HTML中,当加载HTML文档时,属性用来规定图像文件的名字:<img src=”inde01.gif”>属性常用来表明信息,它不是元素中被描述数据的一部分。属性也常用来描述有关数据本身的信息。以下的XML中属性use告诉程序处理此文件不需要的数据

    <file use=”optional”>index01.gif</file>

    XML中,属性值必须用单引号或双引号包围。

    一般共识:如果信息看起来像数据就使用元素;而在描述有关数据的信息时就使用属性。不使用属性来存储数据的原因包括:⑴属性不能包含多个值,而元素能包含多个子元素。⑵属性不容易扩展以适应将来的变化。⑶与元素相比,用程序更难以操作属性。⑷不容易检查属性值是否违反文档类型定义(DTD)。

     

    实体

    实体用来替代XML文档中的字符串.例如:短语”XML and the Data Revolution”当文档中重复出现,就可在DTD中定义一个快捷实体声明。

    <!ENTITY xdr”XML and the Data Revolution”>

    这样,当要是用整个短语时,就可使用&xdr;而他在XML文档中会被替换。使用实体就可以避免拼写错误以及反复输入同一件事的繁琐。同时还有预定义实体和参数实体之分

     

     

    XML文档的组成

     

    一个完整地XML应该具备以下规则:

    1.文档的开始必须是XML声明。 
    2.
    含有数据的元素必须有起始标记和结束标记。 
    3.
    不含数据并且仅使用一个标记的元素必须以/>结束。 
    4.
    文档只能包含一个能够包含全部其他元素的元素。 
    5.
    元素只能嵌套不能重叠。 
    6.
    属性值必须加引号。 
    7.
    字符<&只能用于起始标记和实体引用。 
    8.
    出现的实体引用只有&<>&apos;"

    XML声明:

    1.version,定义XML规范的版本号,到现在为止,只有一个版本号1.0

    <?xml version="1.0" standalone="yes"?>

    他的出现是文档最开头的部分,因为XML处理器会读取文件最先的几个字节并将它与字符串<?XML的不同编码作比较来确定正在使用的字符串集。除去看不见的字节顺序记号,在它之前不能有任何东西,包括空格。①在非空标记中使用起始和结束标记:如果忘了结束HTML的标记,Web浏览器并不严格追究。例如,如果文档包含一个<B>标记却没有相应的</B>标记,在<B>标记之后的全部文档将变为粗体。但文档仍然能显示。XML不会如此宽松,每个起始标记必须以相应的结束标记结束。如果一个文档未能结束一个标记,浏览器或移交器将报告一个错误信息,并且不会以任何形式显示任何文档的内容。②用"/>"结束空标记:不包含数据的标记,例如HTML<BR><HR><IMG>,不需要结束标记。但是XML空标记必须由/>结束,而不是>。例如<BR><HR><IMG>XML等价物是<BR/><HR/><IMG/>
      当前的Web浏览器处理这种标记的方法不一致。但是如果想保持向后的兼容性,可以使用结束标记来代替,而且不能在其间包含任何文本。例如:

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

    2.encoding,指定文档的编码系统。

    3.standalone,定义文档是独立的还是需要装入其他元素才能正确分析。如果XML文档没有外部实体或DTD,则可以设置为no,否则设置为yes。可用该值提高性能:如果为no,则可提高处理速度;如果设置为yes,则首先要分析文档,确定需要其他哪些文件,然后才能完全分析文档。

    4.根元素,每篇XML文档都需要有且只能有一个根元素。由元素是文档的第一个元素,包含其它所有元素。下例的portal就是根元素,如:

       <portal>

         <name>jims</name>

         <email></email>

         …

       </portal>

    属性,每个元素都可以设置一个或多个属性,如:

       <portal>

    <name id=’1’,sex=”male”>Jims</name>

    </portal>

    元素和属性都可以表示信息,属性信息表现能力有限,它只能表示字符串。所以当需灵活表示信息时应该使用元素。一般把信息主体放到元素中,属性只放一些注释或额外的信息。

     

    CDATA  CDATA的格式:

    〈![CDATA[
    文本内容
    ]]〉

    它用<![CDATA[]]>表示,它们之间的数据作为原始字符显示,唯一不能出现的标志是]]>

    注释,注释是很重要,不论是在编写程序和文档时,所以XML也提供了注释功能,以<!--开头,以-->结尾的一对区间为注释。在以-->结束之前,不能出现“--”号,“---”更不允许。

    处理指令,处理指令以<?开头以?>结尾。处理指令是标记而不是元素。与注释一样,处理指令可出现在XML文档的标签外的任何位置,包括根元素之前或之后。最常见的处理指令是,xml-stylesheet样式表指令,它会告诉浏览器在显示文档时应用什么样式表。如:

    <?xml-stylesheet href=”sample.css” type=”text/css”?>

    <portal>

         <name>…</name>

             …

       </portal>

    命名空间

     

    命名冲突问题是XML文档中引入多DTD的老大难问题,那么,命名空间标准又是如何解决这一问题的呢?一个直接的想法是保证所引用到的DTD没有重名的元素。可是,你所引用的DTD可能来自世界上各个地方,由不同的人制定,要求这成千上万的DTD没有重名现象似乎有些异想天开,且想想你身边重名的人还有多少呢!再有一个想法就是要求所引用到的DTD改名字,把“联系人列表”中的元素“姓名”改为“联系人姓名”,“电话”改为“联系人电话”;相应地,“企业经理”中的“姓名”改为“经理姓名”,“电话”改为“经理电话”。但是,如果出现了大量重名元素,这个修改的工作量就很大了,如此麻烦,多DTD的优势消失殆尽,还不如自己重新定义一个呢。命名空间标准提供了一个很聪明的方法,就是所谓前缀标识法,即在元素名和属性名前面增加一个标识,以唯一区分当前元素或属性来自哪一个DTD

     

    命名空间声明有两种方式:直接定义方式和缺省定义方式:

    直接定义

    xmlns:<命名空间前缀> = <命名空间名>

    缺省定义

    xmlns = <命名空间名>

    直接定义方式

    命名空间声明的属性名部分由两部分组成,即保留属性名前缀"xmlns:"和命名空间前缀,且命名空间前缀是一个合法的XML名称。例如,"xmlns: 联系人""xmlns: 企业经理"都是合法的命名空间声明的属性名。

    命名空间声明的属性值部分是一个URI引用,其功能是区分不同的命名空间,因此,这个URI引用被称为“命名空间名”,它应该具有唯一性和持久性。

    缺省定义方式

    在缺省方式下,命名空间声明的属性名部分仅有保留属性名xmlns,属性值部分与直接定义方式相同。例如:

    <联系人:联系人列表 xmlns ="http://xml.net.cn/联系人列表.dtd" xmlns:企业经理 ="http://xml.net.cn/企业经理.dtd">

     

    DTD的基本要素

     

    DTD的全称是“Document Type Definition“(文件类型定义)。他是用来规范XML文件的格式,它必须出现在文件头(Prolog)中,以便XML校验器在一开始便可以得到该份XML文件的格式定义。

    XML分为两类:有效XML文档和简化格式XML文档。有效是指有一个DTD参考文件的XML文档 ,一个有效的XML文档必须是简化格式的XML文档,跟随着这个文档的DTD文件的有效性,促进了XML执行程序的运行以及文档在兼容XML浏览器的显示。

    要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。例如:<?xml version="1.0" standalone="no"?>

    <!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd">

    <portal>

      <name>Jims</name>

      <email>Jims@163.com</email>

      <email>Jims@21cn.com</email>

    </portal> 

    文档类型声明位于XML声明之后,根元素之前。如果DTD文档位于本机,可用路径名直接指出DTD文档的位置。如果DTD位于XML文档外,则叫外部DTD子集。我们可以结合内外DTD,共同组成一个DTD来为XML文档作验证。

    具体地说,DTD是一个或是一些用XML书写的文件。它包含了对一种文件的正式定义。它定义了文件中的元素能用什么名字,能放在什么位置,应该怎样组合。在这里举一个简单的例子。比如说想要文件可以描述一组<List>,其中每个<List>由可以包含若干个<Item>。那么DTD中应该有以下语句:     

    <!ELEMENT List (Item)+>

    <!ELEMENT Item (#PCDATA)>
      这样一个框架定义了一个表(list),它可以包含若干个项(items)。每一个项只能包括文本的内容。当处理器处理XML文件时将自动检查DTD,以此确定文件中元素从哪而来,以及它们之间是什么关系。上面的框架允许生成下面的一个表:
    <List><Item>Chocolate</Item><Item>Music</Item><Item>Surfing</Item></List>
      而这样一个表在屏幕上是怎样一个表象,取决于样式表(Stylesheet)。在HTML中要在文件中指定应是怎样的形式。使用DTD表明你能够确定一类文章的结构和格式。

    文档类型声明中的每一项都是元素声明,定义了每个元素的约束。元素声明的格式为:

    <!ELEMENT element_name (content_model)>

    内容包括:1. #PCDATA,规定元素只包含已析的字符数据。

    2. 子元素,可指明元素的子元素。也可用逗号为分隔符,指明多个子元素。并且子元素出现的次序必须按定义时的顺序。

    3. 子元素的个数,我们可通过正则表达式来规定子元素的个数。①?,允许零个或一个该元素 *,允许零个或多个该元素 +,允许一个或多个该元素

    4. 可选项(|),选项是一个参数列表,每个参数间用“|”分隔,代表能且只能选一个子元素。

    5. 小括号,可用小括号把选项括起来,以表达更丰富的意思,如我们想表示choice元素必须包含一个good子元素,并且必须包含ok子元素或bad子元素的一个。

    6. 混合内容,在一些文档中,一个元素可能既包含子元素,也包含字符串,这些内容叫混合内容。

    7. 空元素,某些元素不用包含任何内容,称之为空元素。写成以/>结束的独立标签。

    8. ANY,允许元素内包含任意内容。该选项在dtd测试时很有用,在生产系统中尽量不要使用。

    一个有效的XML文档,必须对元素的属性进行声明。使用ATTLIST声明来完成,一个ATTLIST可以为一个元素类型声明多个属性。

    有效文档中使用的每个元素都必须在文档的DTD中用元素声明进行声明。element_name可是任何合法的XML名称,content_model(内容模型)指定元素可以或必须包含的子元素以及子元素的顺序。

  • 相关阅读:
    word设置的密码忘了怎么办?
    Navicat Report Viewer 设置 HTTP 的方法
    如何处理Navicat Report Viewer 报表
    excel密码忘记了怎么办
    Beyond Compare文本比较搜索功能详解
    Popular Cows POJ
    Problem B. Harvest of Apples HDU
    网络流模型整理
    The Shortest Statement CodeForces
    Vasya and Multisets CodeForces
  • 原文地址:https://www.cnblogs.com/tester-l/p/6574913.html
Copyright © 2011-2022 走看看