翻译(二)Stairway to XML: Level 1 - Introduction to XML

(原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/Introduction+to+XML/92780/)

作者:By Rob Sheldon, 2014/03/26(first published: 2012/09/20)

通往XML的阶梯:第一部分,介绍XML

The Series

       XML从2003年起就是SQL的一部分,XML对于数据库管理员也是必要的,因为众多的动态管理视图都返回XML数据。现在业界更习惯于文档标记定义的数据,对于数据库开发人员和数据库管理员了解技术和知道在哪些方面使用XML有意义变得比以往更重要。在这系列的文章中,Robert  Sheldon展示了他使复杂变简单的才华。注:这系列的文章现在已经可作为电子书。

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

      然而,大家对于XML的兴趣直到SQL Server2000发布才得到支持。XML数据类型可以让你本地XML文档存储在列和配置类型变量中。这种数据类型还支持一组用于检索和修改XML文档中特定组件的方法。

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

XML概述

       类似于超文本标记语言(HTML),XML是一种使用勾画和描述与这些标记相关联的数据的性质。使XML可扩展的是它的自描述性质,即,创建特定于XML文档中包含的数据值的标记。在HTML中,这些标签是预定义的。(XML的可扩展性在我们通过XML组件工作时会变得更清晰)。

      尽管XML具有可扩展性,但她仍然是一种必须遵循万维网联盟(W3C)定义的特定格式规则集的标记语言。由于这种标准化,与用于显示数据的HTM不同的是,XML被广泛的用于传输和存储数据。XML使得在异构系统中轻松地共享数据成为可能,而不管硬件、操作系统或应用程序类型如何,XML的普遍采用意味着可以用很少的人工干预处理数据。同时,您可以控制如何描述数据,同时也控制数据是如何排列和显示的。  

XML组件

    构成XML文档的主要组件和支配这些组件使用的规则通常非常简单,但为了使XML文档能够正确处理,必须严格遵守这些规则。

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

   每个离散数据存储在一个打开标记和一个结束标记中,如下面的例子所示:

<Person>John Doe</Person>

      在这个例子中,打开标签是<Person>,关闭标签是</Person>。注意,前斜杠在标签后面的标记描述之前。前斜杠必须位于所有结束标记之前,但标签的语言必须与打开标记相同,在上面的示例中是Person。我可以选择一个名字,而不是Person,包括一个与人无关的名字,但一个好的做法是总是提供标记名称,最好描述在打开和关闭标签中包含的数据。在这种情况下,标签是描述一个人的名字,某个身份不明的人,因此标签名<Person>。

      同时,标记和封闭的数据代表一个元素。但是,元素并不总是必须包含数据。一个空元素可以以两种方式之一呈现。第一种方法是指定打开和关闭标记,但不包含数据,如下面的示例中所示:

<Person></Person>

   表示空元素的另一种方法是只使用一组括号,但仍然包含前斜杠

<Person />

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

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

<person>John Doe</Person>

打开标记中的描述性单词都是小写的;但是,结束标记中的描述性单词以大写字母开头。打开和关闭标记必须匹配为合适的或格式良好的XML。

不过,您可以将元素嵌入彼此之间。在下面的示例中,我将<Person>中的两个实例嵌入到< Person >:

<People>

<Person>John Doe</Person>

<Person>Jane Doe</Person>

</People>

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

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

<Person>John Doe</Person>

<Place>Seattle, WA</Place>

      元素必须仍然是格式良好的XML,也就是说,有包含数据的匹配标记,但它们不一定是XML文档。正如您稍后在XML系列的阶梯中看到的,您可以指定在XML列或变量中只允许XML文档,但现在只知道SQL Server区分XML文档和片段,可以存储两者。

    在其他元素中嵌入元素时,必须确保在结束父元素之前完成子元素。例如,在下面的示例中,我在< >元素>之前结束< >元素>,这将导致SQL Server解析器产生错误:

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

   无论多个级别包含嵌入元素,都必须确保子元素是完整的。在下面这个例子里,< FirstName >和< LastName >元件嵌入在每个<人>和< 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 >的元素,这是文档的根元素。

元素也可以有与他们相关的属性。属性是一个属性,你可以指定一个值。属性被定义为元素的打开标记的一部分。在下面的示例中,我将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属性的值为1234,而该元素的第二个实例的id属性值为5678。

      在许多XML文档中包含的另一个组件是声明,它至少指定文档符合的XML标准的版本。迄今为止,只有两个版本:1和1.1。如果使用XML 1,则声明是不必要的;然而,XML 1.1需要一个。出于这个原因,您应该知道如何在XML文档中包含声明。

      如果包含声明,则必须将其放置在文档的开头,并以< 开始声明,打开标签,并用>结束吗结束标记。此外,还必须包含XML关键字(小写)和版本属性(也小写)。另一个通常包含的属性是可选的,即编码,它指定用于XML文档的字符编码。在下面的例子中,我有一个声明,指定版本1和UTF-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文件添加注释。这样做,只是在评论<!用下面的示例来标记并结束它:

<?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时的另一个考虑是,某些字符在元素值中出现时无法解析。例如,你不能有一个符号(&)在一个元素的值,正如我在下面的例子中<favoritebook > 子元素做:

<?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>

      如果我试图将此XML文档的XML列或变量,< favoritebook >子元素会导致解析器生成错误的价值因罪与罚包括符号。您必须用一个实体引用替换这种类型的字符,该实体引用告诉解析器保留它原来打算的字符。实体引用从一个符号和结束分号在包括多个字符代码表示原始值。为一个符号、实体引用应&amp;,我在下面的例子中使用的:

<?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>

       注意,我用&amp取代&;实体引用。现在XML解析器将处理没问题< favoritebook >元。但需要注意的是,符号不是唯一的字符,将产生一个错误。XML标准标识了应该用实体引用替换的五个字符,正如我在上面的示例中所做的那样:

  • Less than (<): replace with &lt;
  • Greater than (>): replace with &gt;
  • Ampersand (&): replace with &amp;
  • Apostrophe ('): replace with &apos;
  • Quotation mark ("): replace with &quot;

      该示例提出的另一个问题是,子元素不必从一个父实例到下一个父实例相同。你可以看到,在<Person>元素的第一个实例只包含<名>和<FirstName>子元素,但<LastName>元第二实例包含<名>和<姓>子元素,以及< favoritebook >元。只要您的子元素格式良好,就可以包含定义和定义数据所需的任何元素。

总结

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

    就像知道如何组合XML文档一样方便,这个级别的目的并不是训练你如何创建这些类型的文档,而是提供对XML的介绍,这样你就可以更有效地在SQL Server中使用XML。在下一个层次,我们将研究如何在SQL Server中实现XML数据类型,以及如何将其分配给列和变量以存储XML文档和XML片段。

转载于:https://www.cnblogs.com/Angular-JS/p/7563248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值