阶梯XML1级-简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阶梯XML1级-简介相关的知识,希望对你有一定的参考价值。

这篇文章是阶梯系列的一部分:阶梯XML

  XML自2003年以来一直都是SQL标准的一部分,对于任何DBA也是至关重要的,因为许多动态管理视图该行业更多地返回XML数据。现在,该行业更多地用于由文档标记定义的数据,数据库开发人员和数据库管理员比以往任何时候都更了解技术并了解使用XML的方式。在这一系列文章中,罗伯特。谢尔顿(Robert Sheldon)使复杂看似简单。注意:这一系列的文章现在可以作为电子书。

  可扩展标记语言(XML)的支持首先在SQL Server中引入了SQL Server 2000的发行版。但是,与XML相关的功能仅限于专注于映射关系数据和XML数据的数据管理功能。例如,SQL Server 2000添加了FOR XML子句,可以将关系查询结果作为XML返回。

  但是,直到SQL Server 2005添加了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文档的主要组件以及管理这些组件的使用的规则通常非常简单,但是您 必须严格遵守这些规则,以便SQL Server XML解析器正确处理XML文档。

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

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

  <Person>John Doe</Person>

  在这种情况下,开始标签是<Person>,结束标签是</Person>。请注意,正斜杠位于结束标记中标记描述之前。正斜杠必须在所有结束标签之前,但标签的语言必须与开头标签相同,上面的示例是Person。我可以选择一个除Person之外的名称,包括与人无关开头标签相同,的名称,但是一个很好的做法是始终提供最能描述打开和关闭标签中包含的数据的标签名称。 在这种情况下,标签描述了一个人的名字John Doe,因此标签名称为<Person>。

另外,标签和封闭的数据代表一个单一的元素。 但是,元素并不总是包含数据。 一个空的元素可以以两种方式之一呈现。 第一个是通过指定打开和关闭标签,但不包括数据,如下例所示:

<Person></Person>

表示一个空白元素的另一种方法是只使用一组括号,但仍包括正斜杠:

<Person />

再次,只有当元素不包含值时,才能使用此方法。 如稍后您将在楼梯到XML系列中看到的,模式可能需要一个没有值的元素。 在这种情况下,您可以使用缩写格式来表示元素的两个标签。

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

<person>John Doe</Person>

开始标签中的描述性字都是小写的; 然而,结束标签中的描述性词以大写字母开头。 开始和结束标签必须匹配,以被认为是适当的,或者格式良好的XML。

但是,您可以将元素嵌入彼此。 在以下示例中,我将<Person>元素的两个实例嵌入到<People>元素中:

<People>

<Person>John Doe</Person>

<Person>Jane Doe</Person>

</People>

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

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

<Person>John Doe</Person>

<Place>Seattle, WA</Place>

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

在其他元素中嵌入元素时,必须确保子元素在完成父元素之前已经完成。 例如,在以下示例中,我在<Person>元素之前结束<People>元素,这会导致SQL Server XML解析器生成错误:

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

   您必须确保您的子元素是完整的,无论多少级别包含嵌入元素。 在下面的示例中,<FirstName>和<LastName>元素嵌入在每个<Person>元素中,<Person>元素嵌入在<People>元素中:

 <People>

<Person>

<FirstName>John</FirstName>

<LastName>Doe</LastName>

</Person>

<Person>

<FirstName>Jane</FirstName>

<LastName>Doe</LastName>

</Person>

</People>

在这种情况下,<Person>元素充当子元素和父元素。 但是请注意,每个嵌入的元素,无论级别如何,完全落在父元素的开始和结束标记之内。 例如,<FirstName>和<LastName>元素的第一个实例完全落在<Person>元素的第一个实例中,并且<Person>元素的两个实例完全落在<People>元素中,即 文档的根元素。

    元素也可以具有与它们相关联的属性。 属性是可以赋值的属性。 该属性被定义为元素的开始标签的一部分。 在以下示例中,我已经将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),后跟等号,属性值由双引号括起来。 因此,<Person>元素的第一个实例的id属性的值为1234,而<Person>元素的第二个实例的id属性的值为5678。

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

如果您包含声明,则必须将其放在文档的开头,用<? 打开标签,并使用?>关闭标签结束。 另外,您必须包含xml关键字(小写)和版本属性(也是小写)。 通常包括的另一个属性(尽管是可选的)是编码,它指定用于XML文档的字符编码。 在下面的示例中,我包括一个声明,它指定版本1.0和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>

<erson id="5678">

<FirstName>Jane</FirstName>

<LastName>Doe</LastName>

<FavoriteBook>Crime & Punishment</FavoriteBook>

</Person>

</People>

如果我尝试将此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 & Punishment</FavoriteBook>

</Person>

</People>

请注意,我已经用&amp; 实体参考。 现在XML解析器将处理<FavoriteBook>元素没有任何问题。 但是请注意,&符号不是唯一会产生错误的字符。 XML标准标识了应该用实体引用替换的五个字符,就像我在上面的例子中所做的那样

    Less than (<): replace with <

    Greater than (>): replace with

    Ampersand (&): replace with &

    Apostrophe (‘): replace with ‘

    Quotation mark ("): replace with "

该示例提出的另一个问题是子元素不一定要从一个父实例到另一个父实例相同。 您可以看到,<Person>元素的第一个实例只包含<FirstName>和<LastName>子元素,但<Person>元素的第二个实例包含<FirstName>和<LastName>子元素,如 以及<FavoriteBook>元素。 只要您的子元素形成良好,您可以包括描述和定义数据所需的任何元素。

概要

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

 尽可能方便地了解如何组织一个XML文档,但是本课程的目的并不是要培养您如何创建这些类型的文档,而是提供XML简介,以便您能更有效地工作 在SQL Server中使用XML。 在下一级,我们将介绍如何在SQL Server中实现XML数据类型,以及如何将其分配给列和变量以便存储XML文档和XML片段。

以上是关于阶梯XML1级-简介的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server复制的阶梯:第1级 - SQL Server复制简介

SQL Server复制的阶梯:第1级 - SQL Server复制简介

翻译:SQL Server复制的阶梯:第1级 - SQL Server复制

SQL Server复制的阶段:1级 - SQL Server复制简介

剑指offer8:青蛙跳台阶

永远的阶梯1级:什么是“SQL Server AlwaysOn”?