阶梯XML:一级-介绍XML

来自Rob Sheldon,2014/03/26(第一次出版:2012/09/20)

本系列

本文是楼梯系列的一部分:XML的解体

自从2003年以来,XML已经成为SQL标准的一部分。它也是必不可少的对于任何数据库管理员来说,因为许多动态管理视图需要返回XML数据,如今这个行业更习惯于用数据定义文档标记,它也正变得比以往更为重要对于数据库开发人员和数据库管理员们来说,去理解技术以及知道合理使用XML。在这个系列的文章中,Rob Sheldon通过使用他的才华使得这个复杂的东西变得简单。

注意:本系列文章可以作为一本电子书。

支持可扩展标记语言(XML)第一次介绍了SQL Server与Server 2000的释放。然而,与XML相关的功能仅限于数据管理功能,专注于关系数据和XML数据映射。例如SQL Server 2000添加了XML条款,它可以让你返回关系查询结果为XML。

然而,它没有被实现直到SQL Server2005,数据类型被加入—支持XML变得有趣。本机数据类型允许您在列中存储XML文档类型和变量配置。数据类型也支持一种方法可以用来检索和修改XML文档中的特定组件。

为了充分利用XML相关的特性SQL Server,您可能会发现它是有用的如果事先对XML有一个基本的了解。为此,本系列第一阶梯XML说明了什么事XML,并且描述了各个组件是如何组成一个XML文档。

XML的概述

与超文本标记语言(HTML)相似,XML是一种标记语言,使用标签来描述,描述这些与标签相关的数据的性质。XML可扩展它的自描述的性质,也就是说,你创建标记特定于XML文档中的包含的数据值,在HTML中,这些标签是预定义的。(XML的可扩展性将变得更加清楚当我们通过XML组件工作的时候)

尽管它拥有可扩展性,XML仍然是一个标准化的语言,必须符合一组特定的格式规则,根据万维网联盟(W3C)的定义。正是因为这种标准化,本语言已经被广泛用来传输和存储数据,不像HTML,仅用于显示数据。XML可以轻松地在异构系统之间共享数据,无论硬件、操作系统或应用程序类型,XML的通用性意味着数据可以很少的被人工干预。 同时,你也可以控制如何描述数据,同时控制如何命令和显示数据。

XML的组件

XML的主要组件组成了一个XML文档,并管理这些组件的使用。通常,规则很简单,但是你必须严格遵守这些规则以便XML文档能够妥善处理SQL Server的XML解析器。

主要有两种类型的信息包含在一个XML文档:数据存储和描述数据标签。 标签是由一组尖括号(< >),附上一个描述性的词或复合词(没有空格),描述了与标记相关的数据。 这是因为这些标记的自描述特性的XML通常被认为是一个元语言。

每个离散块存储数据封装在一个开始标记和结束标记,如以下示例所示:

<Person>John Doe</Person>

在这种情况下,开始标记<person>,关闭标签></person。 注意,一个斜杠之前结束标记标签描述。 斜杠必须先于所有结束标签,但是标签的语言必须一样的开始标记,在上面的示例。 除了我可以选择一个名称person,其中一个名字与人无关,但是一个良好的实践是总是最好提供标记名称,描述数据封装在打开和关闭标签。 在这种情况下,标签是描述一个人的名字,John Doe,因此,标签的名字<person>。

在一起,标记和封闭数据代表的是单一的元素。 然而,不总是包含一个元素的数据。 一个空的元素可以以两种方式呈现。 首先是通过指定打开和关闭标签,但是没有包括数据,和我一样在以下例子:

<Person></Person>

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

<Person />

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

一个元素是否包含一个值,只要这两个标签,打开和关闭标签必须完全匹配,到资本化(除了斜杠结束标记)。 例如,下列元素生成一个错误在SQL服务器的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文档。

嵌入在其他元素时,你必须确保孩子结束之前完成父元素的元素。 例如,在下面的例子中,我结束了<person>元素之前<person>元素,它导致SQL Server XML解析器生成一个错误:

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

你必须确保你的孩子元素包含嵌入元素完全不管有多少水平。 在下面这个例子<FirstName>和<LsatName>每个元素嵌入<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版本包括一个声明,指定一个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>
</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>
 

请注意,我的&所取代&amp;实体引用。 现在,XML解析器将处理<FavoriteBook>元素没有问题。 但注意&不是唯一的角色,将生成一个错误。 XML标准标识应该替换为5个字符实体引用,就像我在上面的例子中:

  • 小于(<):替换为& lt;
  • 更大的比(>):替换为一些损伤t;
  • &(&):替换为&amp;
  • 撇号():替换为&7月;
  • 引号():替换为&;

的例子提出的另一个问题是,子元素从一个父母不必是相同的实例。 正如您可以看到的,第一个实例<person>元素只包含<FirstName>和<LastName>的子元素,但第二个实例元素<person>包含了<FirstName>和<LastName>子元素,以及<FavoriteBook>元素。 只要你的子元素是完整的,你可以包括任何必要的描述和定义数据元素。

总结

在这个层面上,我们看了看主要组件组成一个XML文档。 元素作为所有XML文档的基本构建块,与每个元素被划定一个开始标记和结束标记之间的数据值本身是封闭的这两个标记。 元素可以相互嵌入,但一个元素—root-must作为父在XML文档中所有其他元素。 一个元素还可以包含属性,定义为元素的开始标记的一部分。

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

时间: 2024-08-25 16:34:45

阶梯XML:一级-介绍XML的相关文章

(转)通过 XML Catalog 实现 XML 文件的自动化实时校验

引言 XML Catalog 实现了根据 XSD 实时校验 XML 文件的功能.用户不用编写程序,通过少量的配置就可以在编辑 XML 文件的时候得到及时的反馈(需要在 XML 编辑器进行文件的编写),实现了实时的校验. 然而在实际应用中,由于环境的不同以及 XML 文件本身的不同,手动方式的配置并不能满足需求.比如,作者在实践中发现,在开发环境里手动配置的 XML Catalog 是不能保存在运行环境的.而且,许多实际的 XML 的编写方式并没有采用标准的格式,这也给 XML Catalog 的

翻译:XML的阶梯:一级-XML的介绍

XML的阶梯:一级--XML的介绍 作者:Rob Sheldon(first published: 2012/09/20) 本系列文章是楼梯系列:楼梯到XML XML从2003年就成为了SQL标准的一部分,也是许多DBA必不可缺的一部分,因为很多的动态管理师徒返回XML数据.现代的行业更多用来定义数据的文档标记,这比以往让数据库开发人员和数据库应用系统去理解该技术和知道怎么有效的利用XML更重要.本系列的文章,Robert Sheldon展示了他的才华把复杂的问题简单化.注:本系列的文章现在可以

IOS 阶段学习第23天笔记(XML数据格式介绍)

IOS学习(OC语言)知识点整理 一.XML数据格式介绍 1)概念:xml是extensible markup language扩展的标记语言,一般用来表示.传输和存储数据 2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比: 1. json:市场上占90%,轻量级的表示数据 2.xml:占10%,表示数据比较复杂 3)XML三种数据解析方法: 1.DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据.缺点:如果数据大, 比较占内存,解

web.xml元素介绍

web.xml元素介绍编辑 每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定. web.xml元素定义 ◆站台的名称和说明 ◆针对环境参数(Context)做初始化工作 ◆Servlet的名称和映射 ◆Session的设定 ◆Tag library的对映 ◆JSP网页设定 ◆Mime Type处理 ◆错误处理 ◆利用JDNI取得站台资源 要了解web.xml的设定值,必须了解它的schema,从web.xml中知道它的schema是由Sum Microsys

xml简单介绍及libmxml编程

今天我们来简单介绍一下,关于xml的一些内容,包括自己编写一些程序进行生成和解析. 首先我们我们还是从xml的演化历史来了解一下它吧. 历史演化 GML: 在20世纪60年代为了促进数据交换和操作,通过IBM公司研究人员的杰出工作,得出了重要的结论:要提高系统的移植性,必须采用一种通用的文档格式,这种文档的格式必须遵守特定的规则.这也就是创建通用标记语言(外语全称:Generalized Markup Language.外语缩写:GML)的指导原则,从人们所产生的将文件结构化为标准的格式的动机出

PHP读取xml方法介绍

PHP读取xml方法介绍 一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言).Xml是Internet环境中跨平台的... 一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalize

web.xml 详细介绍(转)

web.xml 详细介绍 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交给servletContext. 4.容器创建<listener>中的类实例,创建监听器. 二  Load-on

solr的schema.xml配置介绍

schema.xml配置介绍如下: 常见的元素有以下几种: <field name="weight" type="float" indexed="true" stored="true"/> <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/&

XML简单介绍

XML编程 主要内容: XML及其语法 XML约束之DTD XML编程(CRUD - Create Read Update Delete) XML约束之Schema XML概述 什么是XML XML是指可扩展标记语言(eXtensible Markup Language),他是一种标记语言,很类似HTML,他被设计的宗旨是传输数据,而非显示数据. XML标签没有被预定义,需要用户自行定义标签. XML技术是W3C组织(World Wide Web Consortium 万维网联盟)发布的,目前遵