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

XML的阶梯:一级——XML的介绍

作者:Rob Sheldon(first published: 2012/09/20)

本系列文章是楼梯系列:楼梯到XML

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

随着SQL Server 2000的发布,可扩展标记语言支持第一次在SQL Server中被介绍。但是,X,ML的相关数据在致力于映射XML的数据间的关系的数据管理容量中是有限的。例如,SQL Server 2000增加了让关系查询结果展示位为XML的 FOR XML子句。

然而,直到SQL Sever 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文档的主要组件和支配这些组件使用的规则通常非常简单,但为了使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 >元素,元素嵌入在< Perso

</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.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文档中添加注释。要做到这,只需在评论前面与“小于!”标记,并以-标签结束,就像我在下面的例子中所做的那样:

   <? 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 & Punishment</FavoriteBook>

    </Person>

    </People>

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

小于(<):替换为& lt;

大于(>):替换为& gt;

&兼:替换为& amp;

撇号(‘):替换为& apos;

引号("):用"替换"

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

总结:

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

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

这篇文章是通往XML楼梯的楼梯的一部分

注册到我们的RSS频道,一旦我们在楼梯上发布一个新的级别,就会得到通知

时间: 2024-08-03 13:12:44

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

XML学习总结(一)——XML介绍

一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范. 二.学习XML的目的 在现实生活中大量存在有关系的数据,如下图(图-1)所示 图-1 这样的数据如何交给计算机处理呢?,XML语言出现的根本目标在于描述上图(图1)那种在现实生活中经常出现的有关系的数据. 在XML语言中,它允许用户自定义标签.一个标签用于描述一段数据:一个标签可分为开始标签和结束标签,在开始标

XML(二)有效的XML: DTD(文档类型定义)介绍与三种使用方式

有效的XML: DTD(文档类型定义)介绍 有效(Valid)的XML文档: 首先,XML文档是个格式正规的(Well-formed)XML文档: 其次,需要满足DTD的要求,这样的XML文档称为有效的(Valid)XML文档. DTD DTD,即文档类型定义——Document Type Definition. DTD用来描述XML文档的结构, 一个DTD文档包含: 元素(ELEMENT)的定义规则: 元素之间的关系规则: 属性(ATTLIST)的定义规则: 可使用的实体(ENTITY)或符号

C#中使用XML指南之读取XML

? C#中使用XML指南之读取XML ? 访问的两种模型: ? 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题.流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

XML学习3:XML基本语法(二)

三XML属性 XML元素可以在开始标签中包含属性,类似HTML.属性(Attribute)提供关于元素的额外(附加)信息. XML属性基本语法:<元素 属性1="属性值" 属性2="属性值">元素内容</元素> 注意事项: 1)属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔:有",用'分隔). 2)一个元素可以有多个属性. 3)属性名称在同一个元素标记中只能出现一次. 4)属性值不能包括<

XML(一)XML大揭秘

前言 每天都要学习很多新的知识,比你厉害的程序员比你还努力,那你混的下这口饭吗?所以不抱怨,坚持!接下来给大家分享的是xml.可能很多做开发的都遇到过xml, 比如maven,各种框架的配置文件都有,但是你有没有深入的去了解一下xml呢?xml是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 一.XML简介 1.1.XML简单的历史介绍 1969年 GML (General Markup Language,通用标记语言): 用于计算机之间的通信,通信就会

XML - 十分钟了解XML结构以及DOM和SAX解析方式

引言 NOKIA 有句著名的广告语:"科技以人为本".不论什么技术都是为了满足人的生产生活须要而产生的.详细到小小的一个手机.里面蕴含的技术也是浩如烟海.是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角.只是个人一直觉得主要的技术和思想是放之四海而皆准的,很多技术未必须要我们从头到尾再研究一遍.我们要做的就是站在巨人的肩膀上.利用其成果来为人们的需求服务. 随着移动互联网时代的大潮.越来越多的App不光是须要和网络server进行数据传输和交互,也须要和其它 App 进行数据

xml字符串转对象xml文件转对象

判断是否是ie浏览器和非ie浏览器的方法有多种,在此只介绍用例中的方法: 1.解析xml字符串,得到xml对象的方式: function createXml(str){ if(document.all){//IE浏览器 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.loadXML(str); return xmlDoc; } else{//非IE浏览器         r

Maven入门2-pom.xml文件与settings.xml文件

Maven入门2-pom.xml文件与settings.xml文件 本文内容来源于官网文档部分章节,settings.xml文件:参考http://maven.apache.org/settings.html,pom.xml文件参考:http://maven.apache.org/guides/introduction/introduction-to-the-pom.html. http://maven.apache.org/pom.html:一个是POM的简单介绍,一个是详细介绍. 下面针对几