XML总结

时间:2024.5.15

XML总结

XML是指可扩展标记语言(eXtendsible Markup Language),它是一种标记语言,很类似HTML,它的作用是早期主要用来传输数据和保存,而不是显示数据,显示用的是html。后来主要用于实现软件的配置。使软件更易于维护和更新。

XML是由W3C制定和维护的,目前遵循1.0版本规范. XML语法:

一个XML文件一般由以下几部分组成的:

? 文档的声明

? 元素

? 元素的属性

? 注释

? CDATA区

? 特殊字符

? 处理指令PI(Processing Instruction)

文档的声明:

? 在编写XML前,首先要声明XML文档,并且必须出现在文档的第一行。

? 最简单的语法<?xml version=”1.0” ?>

? 用encoding属性在说明文档所使用的字符编码,需要注意的是,要注意文档中指定的编码格式和保存在磁盘上的编码格式是否一

致,如果不一致,就会造成XML文件读取失败。

? 用standalone说明文档是否独立,就是是否依赖于其他的文档。 如:<?xml version=”1.0” standalone=”yes” ?>

元素:

? XML元素指XML文件中出现的标签。一个标签分为开始标签和结束标签,一般标签的两种写法:

包含主体:<mytag>content</mytag> 不包含主体:<mytag/> ? 一个标签中允许嵌套多个子标签,但需要配对使用,才可以。 ? 一个XML文档只有一个根标签,其他的标签都是它的子标签或者是孙标签。

? XML不会忽略主体文档中出现的空格和换行。

? 元素(标签)的命名可以包含字母、数字、下划线和英文句点,但必须遵守相关遵守:

? 严格区分大小写

? 只能以字母或下划线开头,不能以数字开头

? 不能以xml开头(测试能用,但一般不建议使用)

? 名称字符之间不能有空格和制表符

? 名称字符之间不能使用:冒号

元素的属性:

? 一个元素可以有多个属性,每个属性都有对应的标签和取值。 ? 属性值一定要用引号(单引号和双引号)引起来。

? 属性名称的命名规范和元素的是一样的

? 元素中的属性是不允许重复的

? 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述。

注释:

Xml文档中的注释用: <!-- -->

需要注意的是xml文档的中的注释不能嵌套使用。

CDATA区:

? CDATA是Character Data的缩写

? 作用:把标签当做普通的文本内容

? 语法:<![CDATA[内容]]> 注:内容可包括标签

特殊字符:

一些特殊的字符,若要在主体内容中进行显示,则需要转义。这里列举比较实用的几个:< (&lt)、> (&gt)、”(&quot)

处理指令:

? 简称PI(Processing Instruction)

? 作用是用来告诉软件怎么解析xml文档

? 语法:以<?开头,以?>结尾

? 常用的处理指令:

? Xml声明:<?xml version=”1.0” encoding=”utf-8”?>

? Xml-stylesheet指令:指xml文档所使用的css样式XSL <?xml-stylesheet type=”text/css” href=”some.css” ?>

注:对中文的元素(标签)名称没有作用

XML与HTML的比较

? HTML中的标记是用来显示数据的,而XML中的标记是用来描述数据的性质和结构的。

? XML严格区分大小写,HTML不区分大小写。

? XML只有一个根元素,而HTML可以有多个根元素。 ? XML中属性的值必须放在引号中,而HTML中的属性可以不用放在引号中。

? XML中的空格和换行等符号是不会自动删除过滤的,而HTML中是可以自动过滤的。

? XML中的标记是可以随便定义的,并且是可扩展的。而HTML中的标记是预定义的。

XML约束之DTD

? 什么是是XML约束:

? 在XML技术中,可以编写一个XML文档来约束一个

XML书写规范,而这个文档就成为约束。

? 编写XML文档的时候应该注意的是:

? 良好的XML格式:遵循XML语法的XML

? 有效的XML:遵循约束文档XML

注:XML文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等。

常用的XML约束:

? XML DTD

? XDR

? SOX

? XML Schema

DTD简单理解:

? DTD(Dcoument Type Definition)文档类型定义

? DTD作用:约束XML文档规范

验证XML的有效性:

? 需要解析器,解析器又可以分为:

? 非效验解析器,如IE。

? 效验解析器

? 创建XML文档解析器对象:

Var xmldoc=new ActiveXObject(“Microsoft.XMLDOM”);

说明:Microsoft.XMLDOM是IE5以上内置的,用这个解析工具解析,编程开发人员可以编写Javascript代码,用这个解析工具来装在xml文件,并对xml文件进行dtd验证。

? 开启XML效验:

? xmldoc.validateOnParse=”true”;

? 装载XML文档

? xmldoc.load(“xxx.xml”);

? 获取错误信息

? xmldoc.parseError.reason;

? xmldoc.parseError.line;

编写DTD的方式:

DTD的约束文档可以再xml中直接定义,也可以编写成单独的文档,但是编写成单独的文档的时候必须要以utf-8编码保存。

引入外部的DTD文档的两种方式:

? 当需要引入的文档时本地的文档时,可以用的方式是: ? <!DOCTYPE 根元素 SYSTEM “DTD文档路径”>

? 当需要引入的文档时网络上公用的时候,用下面这种方式:

? <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL路径”> DTD的语法细节(这里只需要看懂即可):

DTD文档的语法主要包括以下几个内容:

? 定义元素

? 定义属性

? 定义实体

? DTD定义元素:

? 在DTD文档中使用ELEMENT关键字来声明一个XML元素 ? 语法:<!ELEMENT 元素名称 使用规则>

? 使用规则:

? (#PCDATA):指元素的主体内容只能是普通的文本。

? EMPTY:指元素的主体内容为空

? ANY:指元素的主体内容可以为任意类型

? (子元素):指元素的子元素

? 定义子元素及描述它们的关系:

? 如果子元素用逗号(,)分开,说明必须按照声明顺序去编写xml文档。如:<!ELEMENT FILE(TITLE,AUTHOR,EMAIL)>

? 如果子元素中用“|”分开,说明任选其中的一个。 如:<!ELEMENT FILE(TITLE|AUTHOR|EMAIL)>

? 用+、*、?来表示元素出现的次数

如果元素后面没有+*? 表示必须并且只能出现一次

+: 表示至少出现一次,一次或多次

*: 表示可有可无,零次、一次或多次

?: 也可以表示可有可无,有的话只能出现一次。零次或一次 如:<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)> ? 定义属性:

? 在DTD文档中,使用ATTLIST关键字来给一个元素声明属性 ? 语法:

<!ATTLIST 元素名

属性1 属性值类型 设置说明

属性2 属性值类型 设置说明

…….

>

? 例如:

<!ATTLIST 商品

类别 CDATA #REQUIRED

颜色 CDATA #IMPLIED

>

对应的xml为:<商品 类别=”服装” 颜色=”黄色”/>

? 属性值类型:

CDATA表示属性的取值为普通的文本字符串

EUNMERATED(DTD没有此关键字),表示枚举,只能从枚举列表中任选其一。

ID表示属性的取值不能重复

? 设置说明:

#REUQIRED表示必须出现

#IMPLIED表示属性可有可无

#FIXED 表示属性的取值是一个固定值,语法: #FIXED “固定值”。

直接值:表示属性的取值为该默认值

? 定义实体:

定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。

在DTD文档中,使用ENTITY关键字来声明一个实体。 实体可分为:引用实体和参数实体,两者的语法不同。 ? 定义引用实体

? 概念:在DTD中定义,在xml中引用

? 语法:<!ENTITY 实体名称 “实体内容”>

? 引用方式:(在xml中使用)&实体名称

DTD中定义:

<!ENTITY copyright “xxxx版权所有”>

XML中引用:

& copyright;

? 定义参数实体(了解即可)

概念:在DTD中定义,在xml中引用

语法:<!ENTITY % 实体名称 “实体元素”>

引用方式:(在xml中使用)%实体名称

DTD中定义:

<!ENTITY %TAG_NAMES “姓名|电话|EMAIL|地址”> DTD中引用:

<!ELEMENT 个人信息(%TAG_NAMES;|生日)>

<!ELEMENT 客户信息(%TAG_NAMES;|公司名)>

Java解析XML概述

? XML的解析方式分为两种:DOM方式和SAX方式

DOM:(Document Object Model)文档对象模型,这种方式是W3C推荐处理XML文件的方式

SAX:(Simple API for XML)。这种方式不是官方标准,是开源社区XML-DEV,几乎所有的XML解析器都支持它。

? XML解析开发包

JAXP:是SUN公司推出的解析标准

Dom4J:是开源组织推出的解析开发包(最常用) JDom:是开源组织推出的解析开发包

? JAXP(JAVA API for XML Processing)是JavaSE的一部分,它由以下几个包及其子包的组成:

org.w3c.dom:提供DOM方式解析XML的标准接口。 org.xml.sax:提供SAX方式解析XML的标准接口

javax.xml:提供了解析XML文档的类

? javax.xml.parsers包中,定义了几个工厂类。我们开源调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。

DocumentBuilderFactory : 用于创建DOM模式的解析器对象,是一个抽象工厂类,不能直接实例化,但这个类提供了一个newInstance方法,该解析器会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

SAXParserFactory

? 获得JAXP中的DOM解析器

? 调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂。

? 调用工厂对象的newDocumentBuilder()方法得到解析器对象。

? 调用解析器对象的parse()方法解析XML文档,得到代表整个文档的Document对象,进行可以利用的DOM特性对整个xml文档操作。

DOM模型

DOM(Document Object Model)

DOM解析器在解析XML文档时,会把文档中的所有元素,按照其层次关系,解析成一个一个节点(Node)对象 ? 在dom中节点之间的关系如下:

? 位于一个节点之上的节点是该节点的父节点(parent)

? 一个节点之下的节点是该节点的子节点

(children)

? 同一层次,具有相同父节点的节点是兄弟节点(Sibling)

? 一个节点的下一个层次的节点集合石节点后代(descendant)

? 父、祖节点及所有位于节点上面的,都是节点的祖先(ancestor)

Node对象

? Node提供了一系列的常量来代表节点的类型,当开发人员获得某个节点类型之后,就可以把Node节点转换成相应的节点对象(Node的子类对象),这样方便调用其特有的方法

? Node对象提供了相应的方法获得它的父节点或子节点,编程人员通过这些方法就可以读取整个XML文档内容,或者添加、修改、删除XML的内容。

更新XML文档

? Javax.xml.transform包中的transformer类用于代表xml文件的Document对象转换为某种格式后进行输出。

? Transformer类中的transform方法完成转换操作,该方法接收一个源一个目的地,我们可以通过:

? javax.xml.transform.dom.DOMSource来关联要转换的

Document对象

? 用javax.xml.transform.stream.StreamResult对象来表示数据的目的地

? Transformer通过transformerFactory获得

SAX解析XML文档

? 使用SAXParserFactory创建SAX解析工厂

SAXParserFactory spf = SAXParserFactory.newInstance(); ? 通过SAX解析工厂得到解析器对象

SAXParser sp = spf.newSAXParser();

? 通过解析器对象得到一个XML的读取器

XMLReader xmlReader = sp.getXMLReader();

? 设置读取器的事件处理器

xmlReader.setContentHandler(new BookParserHandler()); ? 解析xml文件

xmlReader.parse("book.xml");


第二篇:XML数据类型总结


XML数据类型总结SQLServer2005中新增加了XML的数据类型,用来存储XML文档。XML数据类型和其他基本的数据类型一样,可以用于声明变量、存储过程或者函数的参数、或者作为表的列的数据类型,XML数据类型最大能存储2G。eg:1、表中的列使用XML类型CREATE TABLE T1(Col1 int primary key, Col2 xml) 2、变量中使用XML类型declare @x xml 3、存储过程中使用XML类型CREATE PROCEDURE SampleProc(XmlDoc xml) as ... 如果一个XML数据类型的变量或者列与某个XML架构集相关联的话,则把该变量或者列上的XML称为类型化XML,否则称为非类型化XML。(关于XML Schema在后面再讲)XML 数据类型列、参数以及变量可以是有类型的也可以是无类型的 —— 也就是说,它们可能遵循也可能不遵循某个架构。Typed:类型化eg:1、表中的列使用Typed XML类型CREATE TABLE T1(Col1 int primary key, Col2 xml(Sales.StoreSurveySchemaCollection)) 2、变量中使用Typed XML类型declare @x xml (Sales.StoreSurveySchemaCollection)3、存储过程中使用Typed XML类型CREATE PROCEDURE SampleProc(XmlDoc xml(Sales.StoreSurveySchemaCollection)) as ... 这里Sales.StoreSurveySchemaCollection是一个已经定义好的XML Schema。/******************************************************************************************/XML数据类型的方法:XML数据类型有5个方法,分别为query()、value()、modify()、exist()、nodes()。具体用法如下:要使用这些方法,必须先了解XQuery。XQuery是专门用来查询XML数据类型的,符合W3C标准。XQuery包含命名空间声明和查询表达式。XML 片段是遵循合式 XML 规则的数据实例,但不一定包含单个根元素。所谓合式,仅仅是指文档符合 XML 1.0 中定义的语法。例如,T-SQL FOR XML 查询的输出是一个 XML 片段,但它没有根元素。既支持文档又支持片段,这与 XQuery 1.0 和 XPath 2.0 数据模型是一致的。无论如何,在 XML 数据类型中存储的数据必须合式。由于 XML 数据类型遵循 XML XQuery 1.0 和 XPath 2.0 数据模型,所以它们不受关系约束限制,而受 XML 架构约束。除了将 XML 文档或片段存储在 XML 数据类型列中之外,还可以将 XML 数据类型列与 XML 架构相关联,用 SQL Server 验证该列。因此,可以把能够包含文档或片段的 XML 数据类型想像为架构有效的 — 也就是说,遵循架构中定义的类型或者仅仅是合式。XML 架构定义了存在于一个特殊的命名空间中的数据类型集。架构本身是合式的,且遵守一个称为“架构的架构”的架构。架构是有效的 XML 文档,正如关系表定义及其他数据定义语言 (DDL) 语句是有效的 T-SQL 一样。尽管

对于一个特殊的命名空间可以有不止一个架构定义文档,但一个架构定义文档只能在一个命名空间中定义类型。XSD 定义了 XML 文档中被作为类型支持的基本类型的标准集,其方式与 SQL-99 标准定义关系型数据库必须支持的基本类型集的方式完全一样。为了能够用与 XML 文档相应的架构验证 XML 文档,SQL Server Yukon 把 XML 架构存储在数据库中。请注意,无论怎样配置数据库,命名空间都是区分大小写的。当将一个 XML 架构存储到 SQL Server 中时,并不直接将其存储为 XML 文档。相反,而是将其分解为有助于优化架构验证的专有格式。一旦存储了 XML 架构,SQL Server 就可以利用 xml_schema_namespace 函数对其大部分进行重构。不过,该函数不重构像批注和注释这样的项,因此您可能需要单独记取原始的架构文档。为了日后使用而完全原样地保留架构的副本,一个便捷的方法是,将其作为一个 varchar(max) 列存储在一个单独的表中。建立 XML 数据的索引XML 数据是以内部二进制形式存储的,存储容量可以达到 2 GB。每个查询在运行时一次或多次地解析表中每一行的 XML BLOB。这会使查询处理的速度变得很慢。如果在工作负荷中常常需要进行查询,则建立 XML 列的索引是有好处的,不过,这样做必须考虑在修改数据的过程中维护 XML 索引的成本。XML 索引是通过一个新的 DDL 语句在类型化和非类型化的 XML 列中创建的。这为该列中的所有 XML 实例创建了一个 B+ 树。XML 列中的第一个索引是“主 XML 索引”。通过这个索引,可以在 XML 列中支持三种类型的次 XML 索引来加速普通类的查询,如下一节所述。主 XML 索引在基表(即定义 XML 列的表)的主键中,主 XML 索引需要聚集索引。它在 XML 节点的信息集项的一个子集中创建一个 B+ 树。B+ 树的列表示标记,例如元素和属性名称、节点值和节点类型。其他的列捕获 XML 数据中的文档顺序和结构,以及从 XML 实例的根节点到每个节点的路径,从而有效地对路径表达式进行求值。基表的主键在主 XML 索引中复制,以使索引行与基表行相关。 XML 架构中给定的标记和类型名称被映射为整数值,而映射值存储在 B+ 树中以优化存储。索引中的路径列按照相反的顺序(即从节点到 XML 实例的根)存储映射值的串联。当路径后缀已知时(在一个路径表达式中,如 //author/last-name),相反的表示使得可以匹配路径值。 如果对基表进行分区,则需要以相同的方式对主 XML 索引进行分区,也就是使用相同的分区函数和分区架构。全部的 XML 实例都是从 XML 列检索的(SELECT * FROM docs 或 SELECT xCol FROM docs)。需要 XML 数据类型

方法的查询使用主 XML 索引,从索引本身返回标量值或 XML 子树。例:创建主 XML 索引下面的语句在表 docs 的 XML 列 xCol 中创建一个名为 idx_xCol 的 XML 索引。CREATE PRIMARY XML INDEX idx_xCol on docs (xCol)次 XML 索引一旦主 XML 索引创建完毕,就可以创建次 XML 索引来加速工作负荷中不同类的查询。三种类型的次 XML 索引 — PATH、PROPERTY 和 VALUE — 分别对基于路径的查询、自定义属性管理方案和基于值的查询有利。 ? PATH 索引在主 XML 索引的列 (path, value) 中构建 B+ 树。该路径的值是通过计算路径表达式和节点的值得出的,如果提供了一个路径值,则也可以使用所提供的值。在已知 PATH 索引开始字段的情况下,查找 PATH 索引可以加速路径表达式的求值。最常见的情况是在 SELECT 语句的 WHERE 子句中对 XML 列使用 exist() 方法。 ? PROPERTY 索引在主 XML 索引的列 (PK, path, value) 中创建 B+ 树,其中 PK 是基表的主键。此索引对 XML 实例中的属性值查找有利。 ? 最后,VALUE 索引在主 XML 索引的列 (value, path) 中创建一个 B+ 树。此索引对节点的值已知但是其路径没有准确地在查询中指定的查询有利。这通常出现在祖先或自身 (descendant-or-self) 轴查询中,例如,//author[last-name="Howard"],其中, 元素可以出现在层次的任何一层。它还可以出现在“wildcard”查询中,例如 /book [@* = "novel"],其中,查询查找具有“novel”属性值的 元素。此外,VALUE 索引还可用于对类型化的 XML 进行基于值的范围扫描。 可以容纳多达 128 层的 XML 层次;在插入和修改的过程中,如果 XML 实例包含更长的路径,则会被拒绝。 类似地,可以建立一个节点值的前 128 个字节的索引;系统中可以容纳更长的值,但是不会建立索引。内容索引可以在 XML 列中创建全文本索引;这会建立 XML 值内容的索引而忽略 XML 标记。属性值不是全文本索引的(因为它们被认为是标记的一部分),而元素标记被用作标记边界。可以在 XML 列中创建 XML 和全文本索引,并且组合使用全文本搜索和 XML 索引。使用全文本索引作为第一个筛选器来缩小选择范围,接着再应用 XQuery 进一步筛选。使用 CONTAINS() 和 XQuery contains() 的全文本搜索有不同的语义。后者是子字符串匹配,而前者是使用词根检索的标记匹配。 例:在 XML 列中创建全文本索引在 XML 列中创建全文本索引的步骤与在其他 SQL 类型列中创建全文本索引的步骤是非常相似的。需要在基表中有一个唯一的键列。DDL 语句如下,其中,PK__docs__7F60ED59 是该表的单列主键索引:CREATE FULLTEXT CATALOG ft AS DEFAULTCREATE FULLTEXT INDEX ON dbo.docs (xCol) KEY INDEX PK__doc

s__7F60ED59例:组合全文搜索和 XML 查询下面的查询检查 XML 值是否在书的标题中包含单词“Secure”:SELECT * FROM docs WHERE CONTAINS(xCol,'Secure') AND xCol.exist('/book/title/text()[contains(.,"Secure")]') =1CONTAINS() 方法使用全文本索引来产生一个 XML 值的子集,它包含文档中所有的单词“Secure”。exist() 子句确保单词“Secure”出现在书的标题中。使用 XML 索引执行查询XML 索引可以加速查询的执行。查询总是针对 XML 列中的主 XML 索引进行编译(如果存在的话)。为整个查询(包括关系部分和 XML 部分)制订一个查询计划,该计划可以通过数据库引擎基于成本的优化器进行优化。根据查询优化器的成本估算来选择次 XML 索引。 XML 索引的目录视图目录视图用于提供关于 XML 索引的元数据信息。目录视图 sys.indexes 包含带有索引“type”3 的 XML 索引项。“name”列包含 XML 索引的名称。 XML 索引也记录在目录视图 sys.xml_indexes 中,它包含所有的 sys.indexes 列以及一些对 XML 索引有意义的特别的列。列“secondary_type”中的值 NULL 表示主 XML 索引,值“P”、“R”和“V”分别代表 PATH、PROPERTY 和 VALUE 次 XML 索引。 可以从表值函数 sys.fn_indexinfo() 中找到 XML 索引的空间使用。它提供的信息包括所占用的磁盘页数、按字节计算的平均行大小、记录数,以及其他包括 XML 索引在内的所有索引类型的信息。这些信息可用于每个数据库分区;XML 索引使用与基表相同的分区架构和分区函数。 例:XML 索引的空间使用SELECT sum(Pages)FROM sys.fn_indexinfo ('docs', 'idx_xCol_Path' , DEFAULT, 'DETAILED')这产生在表 T 的所有分区中 XML 索引 idx_xCol_Path 所占用的磁盘页数。如果没有 sum() 函数,则结果将会返回每个分区的磁盘页使用。数据建模本节概述了使用 SQL Server 2005 中的 XML 的理由,提供了在原生 XML 存储和 XML 视图技术之间进行选择的准则,并且提供了数据建模建议。关系或 XML 数据模型如果您的数据是高度结构化的,具有已知的架构,则关系模型可能对于数据存储最为有效。Microsoft SQL Server 提供了您可能需要的必要功能和工具。另一方面,如果结构是灵活的(半结构化和非结构化)或未知的,则必须适当地考虑如何对此类数据进行建模。如果您需要独立于平台的模型,以便确保使用结构化和语义标记的数据的可移植性,则 XML 是一种不错的选择。而且,如果满足下列某些属性,则它还是一种适当的选择: ? 您的数据比较稀疏,或者您不了解数据的结构,或者数据的结构将来可能发生重大更改。 ? 您的数据表示容器层次结构(与实体中的引用相对

),并且可能是递归的。 ? 您的数据具有内在的顺序。 ? 您希望对数据进行查询,或者基于其结构更新部分数据。 如果上述任一条件都不满足,则您应该使用关系数据模型。例如,如果您的数据是 XML 格式,但您的应用程序很少使用数据库来存储和检索数据,则 [n]varchar(max) 列就能满足您的全部需要。在 XML 列中存储数据可以带来其他好处 - 引擎将检查数据格式规范或者有效,并且支持对 XML 数据进行细粒度的查询和更新。在 SQL Server 2005 中存储 XML 数据的理由以下为一些使用 SQL Server 2005 中的原生 XML 功能而不是在文件系统中管理 XML 数据的理由: ? 您希望使用数据库服务器的管理功能来管理 XML 数据(例如,备份、恢复和复制)。 ? 您希望以高效的方式和事务处理方式来共享、查询和修改 XML数据。细粒度的数据访问对于您的应用程序而言很重要。例如,您可能需要提取 XML 文档内部的某些节,或者您可能需要插入一个新节而不是替换整个文档。 ? 您具有关系数据和 SQL 应用程序,您希望在应用程序内部的关系数据和 XML 数据之间进行互操作。对于跨域应用程序,您需要有关查询和数据修改的语言支持。 ? 您希望服务器能够保证数据格式规范,并能够视情况根据 XML 架构来验证数据。 ? 您需要将 XML 数据编入索引以便实现高效的查询处理和良好的可伸缩性,并且使用一流的查询优化器。 ? 您希望对 XML 数据进行 SOAP、ADO.NET 和 OLE DB 访问。 如果不满足上述任一条件,您最好将数据存储为非 XML 的大型数据类型,如 [n]varchar(max) 或 varbinary(max)。XML 技术的选择XML 技术(原生 XML 与 XML 视图)的选择通常取决于下列因素: ? 存储选项: 您的 XML 数据可能更适合于大型对象存储(例如,产品手册),或者更适合于存储在关系列中(例如,转换到 XML 的行项目)。每个存储选项都在不同程度上保留了文档保真度。 ? 查询功能: 基于查询的性质以及对 XML 数据进行查询的程度,您可能发现一个存储选项比其他存储选项更为适合。细粒度的 XML 数据查询(例如,XML 节点上的谓词计算)在这两个存储选项中受到不同程度的支持。 ? 将 XML 数据编入索引: 您可能希望将 XML 数据编入索引,以便提高 XML 查询性能。索引选项随存储选项的不同而不同;您需要进行适当的选择以优化工作量。 ? 数据修改功能: 某些工作量涉及到对 XML 数据进行细粒度的修改(例如,在文档内添加新节),而其他工作量则不涉及(例如,Web 内容)。对于您的应用程序而言,数据修改语言支持可能很重要。

? 架构支持: 您的 XML 数据可能通过架构进行描述,这可能是也可能不是 XML 架构文档。对架构绑定 XML 的支持取决于 XML 技术。 不用说,不同的选择具有不同的性能特性。原生 XML 存储可以将您的 XML 数据存储在服务器的 XML 数据类型列中。在下列情况下,这将是一个适当的选择: ? 您需要一种在服务器上存储 XML 数据的简单方法,同时需要保留文档顺序和文档结构。 ? 您的 XML 数据可能有也可能没有架构。 ? 您需要查询和修改您的 XML 数据。 ? 您需要将 XML 数据编入索引以便实现更为快速的查询处理。 ? 您的应用程序需要系统目录视图以管理您的 XML 数据和 XML 架构。 当您的 XML 文档具有多种结构时,或者当您的 XML 文档符合不同的或复杂的架构,而这些架构很难映射到关系结构时,原生 XML 存储将很有用。使用 XML 数据类型进行数据建模本节讨论有关原生 XML 存储的数据建模主题。这些主题包括将 XML 数据编入索引、属性提升和类型化 XML 数据类型。相同或不同的表XML 数据类型列可以在包含其他关系列的表中创建,也可以在与主表之间具有外键关系的独立表中创建。在满足下列某个条件时,请在同一个表中创建 XML 数据类型列: ? 您的应用程序在 XML 列上执行数据检索,并且不需要 XML 列上的 XML 索引。 或者 ? 您需要在 XML 数据类型列上生成 XML 索引,并且主表的主键与其聚集键相同。有关详细信息,请参阅将 XML 数据类型列编入索引一节。 在满足下列条件时,请在单独的表中创建 XML 数据类型列: ? 您需要在 XML 数据类型列上生成 XML 索引,但主表的主键与其聚集键不同,或者主表不具有主键,或者主表是一个堆(也就是说,没有聚集键)。如果主表已经存在,则这可能是真的。 ? 您不希望表扫描由于表中存在 XML 列(无论它是存储在行中还是存储在行外,都会占用空间)而降低速度。 XML 数据的粒度XML 列中存储的 XML 数据的粒度对于锁定和更新特性而言至关重要。SQL Server 对 XML 和非 XML 数据采用了相同的锁定机制。因此,行级锁定会导致相应行中的所有 XML 实例被锁定。当粒度比较大时,锁定大型 XML 实例以便进行更新会导致多用户场合下的吞吐量下降。另一方面,严重的分解会丢失对象封装并提高重新组合成本。对 XML 实例进行更新会将现有实例替换为更新后的实例,即使只修改单个属性的值。XML 数据粒度越大,更新成本就越高。较小的 XML 实例会产生较高的更新性能。对于良好的设计而言,重要的是保持数据建模需要与锁定和更新特性之间的平衡

。非类型化、类型化和受约束的 XML 数据类型SQL Server 2005 XML 数据类型实现了 ISO SQL-2003 标准 XML 数据类型。因此,它可以在非类型化 XML 列中存储格式规范的 XML 1.0 文档以及带有文本节点和任意数量顶级元素的所谓的 XML 内容片段。系统将检查数据的格式是否规范,不要求将列绑定到 XML 架构,并且拒绝在扩展意义上格式不规范的数据。对于非类型化 XML 变量和参数,也是如此。如果您具有描述 XML 数据的 XML 架构,则可以将这些架构与 XML 列相关联,以便产生类型化 XML。XML 架构用于对数据进行有效性验证,在查询和数据修改语句编译过程中执行比非类型化 XML 更准确的类型检查,以及优化存储和查询处理。在下列条件下,请使用非类型化 XML 数据类型: ? 您没有对应于 XML 数据的架构 ? 您拥有架构,但不希望服务器对数据进行有效性验证。当应用程序在服务器中存储数据之前执行客户端验证时,或者暂时存储根据架构无效的 XML 数据时,或者使用在服务器中不受支持的架构组件(例如 key/keyref)时,有时会出现这种情况。 在下列条件下,请使用类型化 XML 数据类型: ? 您拥有对应于 XML 数据的架构,并且希望服务器按照 XML 架构对 XML 数据进行有效性验证。 ? 您希望充分利用基于类型信息的存储和查询优化。 ? 您希望在查询的编译过程中更充分地利用类型信息。 类型化 XML 列、参数和变量可以存储 XML 文档或内容 - 您在声明时必须将它们指定为标志(分别指定为 DOCUMENT 或 CONTENT)。而且,您必须提供 XML 架构集合。如果每个 XML 实例恰好有一个顶级元素,请指定 DOCUMENT;否则,请使用 CONTENT。查询编译器在查询编译过程的类型检查中使用 DOCUMENT 标记来推理唯一的顶级元素。除了将 XML 列类型化以外,您还可以在类型化或非类型化 XML 数据类型列上使用关系(列或行)约束。在下列条件下,请使用约束: ? 无法在 XML 架构中表示业务规则。例如,花店的送货地址必须在其营业地点周围 50 英里范围之内,这可以编写为 XML 列上的约束。该约束可能涉及到 XML 数据类型方法。 ? 您的约束涉及到表中的其他 XML 列或非 XML 列。这方面的一个例子是:强制 XML 实例中存在的 Customer ID (/Customer/@CustId) 与关系 CustomerID 列中的值匹配。 文档类型定义 (DTD)XML 数据类型列、变量和参数可以使用 XML 架构而不是 DTD 加以类型化。然而,对于非类型化和类型化 XML,都可以使用内联 DTD 来提供默认值,以便将实体引用替换为它们的扩展形式。您可以使用第三方工具将 DTD 转化为 XML 架构文档,并且将 XML 架构加载到数据

库中。将 XML 数据类型列编入索引可以在 XML 数据类型列上创建 XML 索引。这会将该列中 XML 实例上的所有标记、值和路径编入索引,从而提高查询性能。在下列条件下,您的应用程序可能受益于 XML 索引: ? 对 XML 列进行查询在您的工作负荷中很常见。必须考虑数据修改过程中的 XML 索引维护成本。 ? XML 值相对较大,而检索的部分相对较小。生成索引可以避免在运行时分析全部数据,并且因为受益于索引查找而提高查询处理的性能。 XML 列上的第一个索引是"主 XML 索引"。通过该索引,可以在 XML 列上创建三种类型的辅助 XML 索引,从而提高常见种类的查询的速度,如下节所述。主 XML 索引这会将 XML 列中的 XML 实例内部的所有标记、值和路径编入索引。基表(即包含 XML 列的表)必须在该表的主键上具有聚集索引;主键用于将索引行与基表中的行相关联。从 XML 列中检索完整的 XML 实例(例如 SELECT *)。查询使用主 XML 索引,并返回标量值或使用索引本身的 XML 子树。辅助 XML 索引在创建主 XML 索引之后,您可能希望创建辅助 XML 索引来提高工作负荷中的不同种类查询的速度。三种类型的辅助 XML 索引 - PATH、PROPERTY 和 VALUE 分别为基于路径的查询、自定义属性管理场合和基于值的查询提供帮助。PATH 索引在列中的所有 XML 实例上,按照文档顺序生成各个 XML 节点的 (path, value) 对的 B+ 树。PROPERTY 索引创建各个 XML 实例中 (PK, path, value) 对的聚集 B+ 树,其中 PK 是基表的主键。最后,VALUE 索引在 XML 列中的所有 XML 实例中,按照文档顺序创建各个节点的 (value, path) 对的 B+ 树。以下是创建上述一个或多个索引的一些准则: ? 如果工作负荷大量使用 XML 列中的路径表达式,则 PATH 辅助 XML 索引可能会加快工作负荷的处理速度。最常见的例子是在 T-SQL 的 WHERE 子句中对 XML 列使用 exist() 方法。 ? 如果您的工作负荷从单独的使用路径表达式的 XML 实例中检索多个值,则将各个 XML 实例中的路径聚集到 PROPERTY 索引中可能会很有用。这种情况通常出现在属性包场合中,此时对象的属性被获取并且其主键值已知。 ? 如果您的工作负荷涉及到查询 XML 实例中的值,而不知道包含这些值的元素或属性名称,则您可能需要创建 VALUE 索引。这通常发生在子代轴查找中,例如 //author[last-name="Howard"],其中 元素可以出现在层次结构的任意级别上。这种情况还会发生在"通配符"查询中,例如 /book [@* = "novel"],其中查询将查找具有某个值为 "novel" 的属性的 元素。 XML 架构集合XML 架构集合是一个元数据实体,其范围由关系架构确定,包含一

个或多个可能相关(例如,通过 )或无关的 XML 架构。XML 架构集合中的单独 XML 架构由其目标命名空间标识。XML 架构集合是使用 CREATE XML SCHEMA COLLECTION 语法创建的,并且提供了一个或多个 XML 架构。可以向现有 XML 架构中添加更多的 XML 架构组件,并且可以使用 ALTER XML SCHEMA COLLECTION 语法向 XML 架构集合中添加更多的架构。可以使用 SQL Server 2005 中的安全模型像任何 SQL 对象那样保证 XML 架构集合的安全。多类型化列XML 架构集合 C 按照多个 XML 架构将 XML 列 xCol 类型化。此外,标志 DOCUMENT 或 CONTENT 分别指定 XML 树或片段是否可以存储在列 xCol 中。对于 DOCUMENT,每个 XML 实例都会按照用来对其进行验证和类型化的命名空间,指定实例中顶级元素的目标命名空间。另一方面,对于 CONTENT,每个顶级元素都可以指定 C 中的任一目标命名空间。XML 实例将按照实例中存在的所有目标命名空间进行验证和类型化。架构演变XML 架构集合用于类型化 XML 列、变量和参数。它提供了一种 XML 架构演变机制。假设您将带有目标命名空间 BOOK-V1 的 XML 架构添加到 XML 架构集合 C 中。使用 C 加以类型化的 XML 列 xCol 可以存储符合 BOOK-V1 架构的 XML 数据。假设某个应用程序希望通过新的架构组件(例如复杂类型定义和顶级元素声明)来扩展 XML 架构。这些新的架构组件可以添加到 BOOK-V1 架构中,并且不要求对列 xCol 中的现有 XML 数据进行重新验证。假设该应用程序后来希望提供该 XML 架构的新版本,并且为该新版本选择目标命名空间 BOOK-V2。该 XML 架构可以添加到 C 中。XML 列可以存储 BOOK-V1 和 BOOK-V2 二者的实例,并且对符合这些命名空间的 XML 实例执行查询和数据修改。XQuery表达式分为:主式、路径式、序列式、数学式、比较式、逻辑式、XML构造、FLWR语句和循环、排序和非排序式、过滤、条件式、常量式、序列类型式、有效式

更多相关推荐:
燕大plc总结

1中间继电器的作用:当电压或电流继电器触电容量不够时,可用中间继电器做执行原件,作一级放大器。当其他继电器或接触器触电数量不够时,可利用中间继电器来切换多条控制电路2可编程控制器是一种数字运算操作的电子系统,专…

plc总结

1.电磁式电器由哪三部分组成?由电磁机构、灭弧系统和触头系统组成。2.电磁机构由哪三部分组成?试描述其工作原理。由铁心、衔铁、吸引线圈三个部分组成。原理:线圈通入电流,产生磁场,经铁芯、衔铁和气隙形成回路,产生…

PLC总结

1.电磁式低压电器感受部分为电磁机构,执行部分为触头系统。P42.电磁机构由吸引线圈、铁芯、衔铁组成,直流铁芯为整块铸铁,交流铁芯为硅钢片叠成。P43.电压线圈并联在电路中,匝数多、导线细;电流线圈串联在电路中…

plc总结xiaozhuanzhuan

电磁接触器:电磁结构、触点、灭弧装置、释放弹簧机构、支架和底座等原理:电磁线圈通电、磁场、使静铁芯产生吸力吸引衔铁、带动触点动作、开闭、闭开;断电、衔铁在释放弹簧作用、触点恢复...继电器:作信号转换;有电压(…

电气传动与可编程控制器(PLC)总结

电气传动与可编程控制器(PLC)总结一.填空题1.2.用接触器本身的触点来使其线圈保持通电的环节称为环节。3.机床电气控制线路一般使用提供的控制电源。4.根据工作原理而绘制的电器控制线路图是电气原理图。5.PL…

电气控制PLC总结

电气控制技术的发展方向:集成化(模块化):智能化:信息化:网络化电器对电能的生产、输送、分配与应用起着控制、调节、检测和保护的作用。1.电器就是广义的电气设备。2.在工业意义上,电器是指能根据特定的信号和要求,…

PLC总结

《PLC原理及其应用》课程总结通过这一个学期以及老师精细的讲解使我了解到:可编程控制器(ProgrammableController)是计算机家族中的一员,是为工业控制应用而设计制造的。早期的可编程控制器称作可…

20xxplc实训总结

20xxplc实训总结plc实训总结光阴似箭日月如梭为期四个礼拜的plc实训已近结束但我们对plc的学习始终没有结束虽然学习的时间说长不长说短不短但这段时间我确确实实收获了不少无论从方面为人处事还是专业课的学习...

plc总结

第一章1低压电器传感器和执行器件是工业电气控制系统的基本组成原件2低压电器指工作在交流电压1200V以下直流电压1500V以下的电器3电器按有无触电分有触点电器无触点电器混合式电器4电器按电压等级分高压电器低压...

plc课程心得小结

目录引言11概述111PLC概述112项目概述221系统结构配置23取水站工程设计过程331取水站整体设计思路332取水站的硬件你配置44项目实现过程541进行硬件组态542进行程序的编写5421所有程序的程序...

plc_总结报告

PLC课程设计报告题目基于PLC控制器的电梯控制系统设计与实现系别机电一体化班级机电11303学生姓名肖升指导教师姜新桥20xx年12月10日引言人类已进入21世纪科学技术突飞猛进经济知识和信息产业初见端倪特别...

plc实习报告

学生实习报告实习专业班级:自动化08、2班学生姓名:关守东实习性质:生产实习实习单位:校内PLC实习基地实习起讫日期:20XX.12.2620XX.1.6指导老师:自动控制系统与PLC综合实习一、实习目的:1、…

plc总结(15篇)