zoukankan      html  css  js  c++  java
  • Stairway to XML: Level 1

    Stairway to XML:  Level 1 - Introduction to XML(XML的阶梯:一级-XML的介绍)

     

    作者:罗伯·谢尔登,2014/03/26(第一次出版:2012/09/20)

    该系列

    本文是阶梯系列的一部分:XML的阶梯

    自2003年以来,XML一直是SQL标准的一部分,对于任何DBA来说,XML都是必不可少的,因为许多动态管理视图都返回XML数据。现在,该行业更习惯于由文档标记定义的数据,对于数据库开发人员和dba来说,了解该技术并了解使用XML的意义是越来越重要了。在这一系列的文章中,罗伯特谢尔登展示了他的才华,让这个复杂的东西看起来简单。注:本系列文章现在可作为电子书使用。

    随着SQL Server 2000的发布,对可扩展标记语言(XML)的支持首先在SQL Server中引入。然而,与XML相关的特性仅限于侧重于映射关系和XML数据的数据管理功能。例如,SQL Server 2000添加了For XML子句,它允许您将关系查询结果作为XML返回。

    然而,直到2005年SQL Server的发布,XML数据类型才得到了支持,对XML的支持才变得有趣起来。XML数据类型允许您将XML文档存储在具有该类型的列和变量中。数据类型还支持一组可用于检索和修改XML文档中的特定组件的方法。

    要充分利用SQL Server支持的与XML相关的特性,您可能会发现对XML本身有基本的了解是很有用的。为了达到这个目的,XML系列的第一级阶梯解释了XML是什么,并描述了组成XML文档的各种组件。

    XML的概述

    与超文本标记语言(HTML)类似,XML是一种标记语言,它使用标记来描述和描述与这些标记相关的数据的性质。使XML具有可扩展性的原因是它的自描述性质,即,您可以创建特定于XML文档中包含的数据值的标记。在HTML中,这些标记是预定义的。(XML的可扩展特性将在我们处理XML组件时变得更加清晰。)

    尽管它具有可扩展性,但XML仍然是一种标准化的语言,它必须符合一组特定的格式化规则,就像万维网联盟(W3C)所定义的那样。由于这种标准化,为了传输和存储数据,这种语言被广泛采用,不像HTML,它被用来显示数据。XML使得在异构系统中轻松地共享数据变得可能,而不管硬件、操作系统或应用程序类型,XML的普遍采用意味着数据可以在很少人为干预的情况下进行处理。同时,您可以控制数据的描述方式,同时控制数据的排序和显示方式。

    XML组件

    组成XML文档的主要组件和控制这些组件使用的规则通常非常简单,但是必须严格遵守这些规则,以便让XML文档正确地处理SQL Server XML解析器。

    XML文档中主要包含两种类型的信息:要存储的数据和描述数据的标记。标记是由一组尖括号(小于)组成的,它包含描述与标记相关的数据的描述性单词或复合词(没有空格)。这是因为这些标记的自描述性质,XML通常被认为是一种元语言。

    每个离散的存储数据都被封装在一个开放标签和一个结束标签中,如下面的例子所示:

     

     

    <Person>John Doe</Person>

    在本例中,打开标签是“角色”,而结束标签是“个人”。请注意,前面的斜杠在结束标记后面的标记描述前面。一个前斜杠必须先于所有的结束标记,但是标记的语言必须与打开标记相同,在上面的示例中是Person。我本可以选择一个人以外的名字,包括一个与人无关的名字,但一个好的做法是总是提供标签名,以便最好地描述在打开和关闭标签中所包含的数据。在这种情况下,标签描述了一个人的名字,John Doe,因此标签的名字是“人”。

    在一起,标记和封闭的数据表示单个元素。但是,一个元素并不总是必须包含数据。一个空元素可以通过两种方式来呈现。第一种方法是指定打开和关闭标签,但不包括数据,就像我在下面的示例中所做的那样:

    <Person></Person>

    另一种方式来表示一个空元素是仅使用一组括号,但还包括斜杠:

    <Person />

    同样,只有当一个元素没有值时,才可以使用该方法。正如您稍后将在XML系列的阶梯上看到的,模式可能需要一个没有值的元素。在这种情况下,您可以使用缩短的格式来表示元素的两个标记。

    无论一个元素是否包含一个值,无论何时使用两个标记,打开和关闭标记必须完全匹配,直到大写(在结束标记中,前面的斜杠除外)。例如,下面的元素在SQL Server XML解析器中生成一个错误,因为两个标签之间的情况是不同的:

    <person>John Doe</Person>

    描述性的词开始标记中的所有小写; 然而,关闭标签的描述性的词从一个大写字母开始。 打开和关闭标签必须匹配被认为是适当的,或格式良好的XML。

    然而,你可以嵌入元素在每个其他。 在下面的例子中,我嵌入的两个实例< Person >内的元素< Person >元素:

    <People>
    <Person>John Doe</Person>
    <Person>Jane Doe</Person>
    </People>

    请注意,每个< Person >元素本身就是完整的。 它包括打开和关闭标签和他们附上的数据。 被称为元素嵌入到其他元素孩子元素,或者在某些情况下,子元素。 外层的元素,在这种情况下,< Person >,是元素。 父元素的XML文档被认为是最高水平的元素. 所有XML文档必须有一个且只有一个根元素。因此,< Person >元素的父元素是在上面的例子中< Person >元素,它是XML文档的根元素。

    SQL Server允许您存储XML片段在一个XML列或变量。 一个片段是一个没有根元素的XML代码块,如以下示例所示的两个元素:

    <Person>John Doe</Person>
    <Place>Seattle, WA</Place>

    元素仍然必须是良好的XML格式,也就是说,有匹配的标记来封装数据,但它们不一定非得是XML文档。稍后您将在XML系列的阶梯上看到,您可以指定XML列或变量中只允许使用XML文档,但现在只知道SQL Server将XML文档和片段区分开来,并且可以同时存储这两种文档。

    当您在其他元素中嵌入元素时,您必须确保子元素在您结束父元素之前是完整的。例如,在下面的例子中,我在元素的作用下结束了元素的作用,这使得SQL Server XML解析器产生了一个错误:

    <People><Person>John Doe</People></Person>

    你必须确保你的孩子元素包含嵌入元素完全不管有多少水平。 在下面这个例子< FirstName >< LastName >每个元素嵌入< Person >元素,< Person >元素嵌入到< Person >元素:

    <People>
    <Person>
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person>
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    </Person>
    </People>

    在这种情况下,< Person >作为儿童和父母的元素。 不过,请注意,每个内嵌元素,不管水平,下降完全打开和关闭标签内的父元素。 例如,第一个的实例< FirstName >< LastName >  在第一个实例的元素完全下降< Person >元素,和两个实例< Person >元素内完全下降< Person >元素,它是文档的根元素。

    元素也可以拥有属性。 属性是一个属性,你可以指定一个值。 属性被定义为元素的开始标记的一部分。 在下面的例子中,我已经添加了id属性的每个实例< Person >元素:

    <People>
    <Person id="1234">
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person id="5678">
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    </Person>
    </People>

    案例展示了,一个属性由属性名(在本例中,id),其次是一个等号和属性值,包含在双引号。 因此,id第一个实例的属性< Person >元素有一个值1234年,id第二个实例的属性< Person >元素有一个值5678年

    是另一个组件中包含许多XML文档声明,这至少指定版本的XML文档符合标准。 到目前为止,只有两个版本:1.0和1.1。 如果使用XML 1.0, 声明没有必要; 然而,XML 1.1要求。 出于这个原因,你应该知道如何在XML文档包含一个声明。

    如果您包含一个声明,那么您必须将它放在文档的开头,并使用小于的声明开始声明?打开标签,然后用它结束?>关闭标签。此外,还必须包括xml关键字(小写)和版本属性(也包括小写)。通常包含的另一个属性,尽管是可选的,是编码,它指定了用于XML文档的字符编码。在下面的例子中,我包含了一个声明,它指定了版本1.0和一个编码的8-8编码,这意味着数据被存储为一个8位Unicode字符的序列:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <People>
    <Person id="1234">
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person id="5678">
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    </Person>
    </People>

     

    您还可以添加评论你的XML文档。 这样做,只是之前的评论<!-- tag and end it with the -->标签,我做了下面的例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- A list of current clients -->
    <People>
    <Person id="1234">
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person id="5678">
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    </Person>
    </People>

    如您所见,我已经添加了评论列表,其中包含了当前客户端,我已经将其包含在注释标记中。内的SQL Server XML解析器将忽略任何标签,所以你可以使用评论功能不仅提供XML文档的信息和数据,但还保留部分XML代码,你想挂在但你不想处理文档的一部分。

    使用XML时另一个考虑因素是,当元素值出现时,不能解析某些字符。例如,您不能在元素的值中包含一个&(&),就像我在下面的例子中所做的:子元素:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- A list of current clients -->
    <People>
    <Person id="1234">
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person id="5678">
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    <FavoriteBook>Crime & Punishment</FavoriteBook>
    </Person>
    </People>

    如果我尝试将这个XML文档分配给XML列或变量,那么子元素将导致解析器产生错误,因为值罪和惩罚包含了&符号。您必须使用一个实体引用来替换此类型的字符,该实体引用将告诉解析器保留原来的字符。实体引用从一个符号开始,以分号结尾,在中间包含一个代表原始值的多字符代码。对于&符号,实体引用应该是&;我在下面的示例中使用的:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- A list of current clients -->
    <People>
    <Person id="1234">
    <FirstName>John</FirstName>
    <LastName>Doe</LastName>
    </Person>
    <Person id="5678">
    <FirstName>Jane</FirstName>
    <LastName>Doe</LastName>
    <FavoriteBook>Crime &amp; Punishment</FavoriteBook>
    </Person>
    </People>

    注意,我已经用&符号替换了&实体引用。现在,XML解析器将处理没有问题的元素。但是请注意,&符号并不是唯一会产生错误的字符。XML标准标识了应该用实体引用替换的五个字符,正如我在上面的示例中所做的那样:

    小于(小于):替换为<

    大于(大于):用>代替;

    &(&):用&

    省略符号(“):替换为”

    引号(“):替换为”

    这个例子提出的另一个问题是,子元素不必从一个父实例到下一个父元素。正如您所看到的,元素的第一个实例只包含了子元素的第一个名称和第一个名称,但是第二个元素包含了子元素和子元素,以及元素的作用。只要您的子元素是良好的,您就可以包含任何必要的元素来描述和定义您的数据。

    总结

    在这个级别上,我们研究了组成XML文档的主要组件。元素作为所有XML文档的基本构建块,每个元素由一个开放标记和一个结束标记来描述,并且数据值本身被包含在这两个标记之间。元素可以相互嵌入,但是元素-根元素必须充当XML文档中的所有其他元素的父元素。元素还可以包括属性,这些属性被定义为元素的开放标签的一部分。

    那样方便可能是知道如何组建一个XML文档,这个级别的目的没有训练你如何创建这些类型的文档,而是提供一个介绍XML,这样你就可以更有效地处理XML在SQL Server。在下一层中,我们将了解如何在SQL Server中实现XML数据类型,以及如何将XML数据类型分配给列和变量,以便存储XML文档和XML片段。

    原文链接:

    Stairway to XML: Level 1 - Introduction to XML
    http://www.sqlservercentral.com/articles/Stairway+Series/Introduction+to+XML/92780/
  • 相关阅读:
    存储过程练习 超市管理系统
    SQL 视图
    SQL 存储过程
    SQL 变量、 运算符、 if 、while
    连接查询
    关于表的主外键关系练习 师生 分数表
    java 代码
    转--select/poll/epoll到底是什么一回事
    python学习路线--从入门到入土
    转---变量LEGB规则
  • 原文地址:https://www.cnblogs.com/1-1-1-1-2/p/7597689.html
Copyright © 2011-2022 走看看