XML Schema约束
- 格式:pdf
- 大小:203.96 KB
- 文档页数:3
schema约束语法Schema约束语法是一种用于定义和描述数据结构的语法规则。
它可以约束数据的类型、格式、关系以及数据之间的约束关系,从而保证数据的一致性和完整性。
在本文中,我们将介绍Schema约束语法的基本概念和用法,并通过实例来说明其在实际应用中的作用。
一、Schema约束语法的基本概念1.1 数据类型在Schema约束语法中,可以定义各种数据类型,如字符串、数字、布尔值等。
每个数据类型都有相应的约束条件,用于限制数据的取值范围。
1.2 数据格式除了数据类型,Schema约束语法还可以定义数据的格式,如日期、时间、邮箱等。
通过定义数据格式,可以确保数据的正确性和合法性。
1.3 数据关系Schema约束语法可以定义数据之间的关系,如一对一、一对多、多对多等。
通过定义数据关系,可以建立数据之间的连接和关联,从而方便数据的查询和操作。
1.4 数据约束除了数据类型、格式和关系,Schema约束语法还可以定义数据的约束条件,如唯一性、非空性等。
通过定义数据约束,可以保证数据的一致性和完整性。
二、Schema约束语法的用法2.1 定义Schema在使用Schema约束语法时,首先需要定义Schema,即数据结构的描述。
Schema可以包括表、字段、索引等信息,用于描述数据的组织和结构。
2.2 定义字段在定义Schema时,需要为每个字段指定数据类型、格式和约束条件。
字段可以是简单类型,也可以是复合类型,如数组、对象等。
2.3 定义关系在定义Schema时,需要指定数据之间的关系。
可以通过定义外键、引用等方式来建立数据之间的连接和关联。
2.4 定义约束在定义Schema时,可以为数据设置各种约束条件,如唯一性约束、非空性约束等。
这些约束条件可以保证数据的一致性和完整性。
三、Schema约束语法的实际应用3.1 数据库设计在数据库设计中,Schema约束语法可以用于定义数据库的表结构、字段类型、关系等。
xml使用方法XML使用方法XML(可扩展标记语言)是一种用于描述数据的标记语言,它可以用于在不同的系统之间传递和存储数据。
XML的使用方法非常灵活,可以用于各种不同的应用程序和场景。
本文将介绍XML的使用方法,包括XML的语法、DTD和XML Schema、XML解析和转换等。
XML的语法XML的语法非常简单,它由标签、属性和文本组成。
标签用于标识数据的类型,属性用于描述数据的属性,文本用于存储数据的值。
例如,下面是一个简单的XML文档:```<?xml version="1.0" encoding="UTF-8"?><bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book></bookstore>```在这个例子中,`<?xml version="1.0" encoding="UTF-8"?>`是XML 文档的声明,它指定了XML的版本和编码方式。
列举xml的文档结构XML(可扩展标记语言)是一种用于存储和传输结构化数据的标记语言,它具有自描述性和扩展性,被广泛应用于各种领域,例如Web应用程序、数据库系统和电子商务等。
XML文档结构由各种元素和标记组成,下面将列举和描述XML文档结构的相关参考内容。
1. XML声明(XML Declaration):XML声明是XML文档的开头,用于指定XML版本和使用的字符编码。
它以`<?xml version="1.0" encoding="UTF-8"?>`的格式出现,其中`version`属性指定XML版本,`encoding`属性指定字符编码。
2. 根元素(Root Element):XML文档的根元素是所有其他元素的父元素。
它是XML文档的顶层元素,包含整个文档的内容。
3. 元素(Element):XML文档中的元素是最基本的构建块,用于表示数据或信息。
元素由开始标签和结束标签组成,之间包含文本、子元素或属性等。
4. 属性(Attribute):XML元素可以具有属性,用于提供关于该元素的额外信息。
属性位于元素的开始标签中,由名称和值组成,中间使用等号连接。
5. 文本(Text):XML文档中的文本表示实际的数据或信息。
文本出现在元素的开始标签和结束标签之间,可以包含任意字符,包括空白字符和特殊字符。
6. 注释(Comment):XML文档中的注释用于添加对文档的解释或说明。
注释以`<!--`开头,以`-->`结尾,它们不会被解析器处理。
7. CDATA段(CDATA Section):CDATA段用于包含特殊字符和标记,它不会被解析器解析。
CDATA段以`<![CDATA[`开头,以`]]>`结尾,其中的内容作为原始文本处理。
8. 命名空间(Namespace):XML文档中的命名空间用于避免元素和属性名称的冲突。
wsdl文件中schemalocation写法-回复Wsdl文件中schemalocation写法介绍Wsdl文件中的schemalocation用于指定包含业务接口定义和数据模型的XML Schema文件的位置。
schemalocation是一个重要的属性,它告诉Wsdl文件在哪里可以找到所需的模型定义。
在本文中,我们将一步一步地回答关于schemalocation的问题,以便更好地理解和使用它。
第一步:了解XML Schema在深入了解schemalocation之前,我们需要先了解XML Schema。
XML Schema是一种用于定义XML文档结构和约束的语言。
它允许我们定义元素、属性、数据类型和复杂类型之间的关系,从而描述和限制XML 文档的内容。
XML Schema文件通常以.xsd为文件扩展名。
第二步:理解Wsdl文件Wsdl(Web Services Description Language)描述了一个Web服务的接口和操作。
它使用XML语法来定义服务的消息格式、协议和绑定等方面。
Wsdl文件通常以.wsdl为文件扩展名。
第三步:掌握schemalocation的含义schemalocation是Wsdl文件中的一个属性,用于指定XML Schema 文件的位置。
其语法如下:<schemalocation xmlns:schema="[Schema命名空间]" location="[Schema文件URL]"/>其中,[Schema命名空间]是指有效的XML Schema命名空间,[Schema文件URL]是指XML Schema文件的URL或相对路径。
第四步:使用绝对路径当XML Schema文件位于与Wsdl文件不同的位置时,我们可以使用绝对路径来指定schemalocation。
例如,假设我们的Wsdl文件位于" Schema文件位于"<schemalocation xmlns:schema=" location="这样,Wsdl文件将通过URL获取所需的XML Schema文件。
dtd和schema的区别在XML技术⾥,可以编写⼀个⽂档来约束⼀个XML⽂档的书写规范,这称之为XML约束。
常⽤的约束技术XML DTD ;XML Schema。
XML Schema 也是⼀种⽤于定义和描述 XML ⽂档结构与内容的模式语⾔,其出现是为了克服 DTD 的局限性XML Schema VS DTD:XML Schema符合XML语法结构。
DOM、SAX等XML API很容易解析出XML Schema⽂档中的内容。
XML Schema对名称空间⽀持得⾮常好。
XML Schema⽐XML DTD⽀持更多的数据类型,并⽀持⽤户⾃定义新的数据类型。
XML Schema定义约束的能⼒⾮常强⼤,可以对XML实例⽂档作出细致的语义限制。
XML Schema不能像DTD⼀样定义实体,⽐DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
DTD(Document Type Definition),全称为⽂档类型定义。
XML⽂件使⽤ DOCTYPE 声明语句来指明它所遵循的DTD⽂件,DOCTYPE声明语句有两种形式:⼀、当引⽤的⽂件在本地时,采⽤如下⽅式:<!DOCTYPE ⽂档根结点 SYSTEM "DTD⽂件的URL">例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。
在xml⽂件中⼿写⼀下。
⼆、当引⽤的⽂件是⼀个公共的⽂件时,采⽤如下⽅式:<!DOCTYPE ⽂档根结点 PUBLIC "DTD名称" "DTD⽂件的URL">DTD语法:元素定义、属性定义、实体定义。
声明⼀个XML元素——<!ELEMENT 元素名称元素类型>元素类型可以是元素内容、或类型<!ELEMENT >在元素内容中也可以使⽤+、*、?等符号表⽰元素出现的次数:+: ⼀次或多次 (书+): 0次或⼀次 (书?)*: 0次或多次 (书*)xml⽂档中的标签属性需通过ATTLIST为其设置属性语法格式:<!ATTLIST 元素名属性名1 属性值类型设置说明属性名2 属性值类型设置说明……>设置说明:#REQUIRED:必须设置该属性#IMPLIED:可以设置也可以不设置#FIXED:说明该属性的取值固定为⼀个值,在 XML ⽂件中不能为该属性设置其它值。
Schema 教程 XML Schema 简介 XSD 教程 XSD 为何使用 XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解: HTML / XHTML XML 以及 XML 命名空间 对 DTD 的基本了解如果您希望首先学习这些项目,请在 首页 访问这些教程。
什么是 XML Schema?XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XML Schema: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。
理由如下: XML Schema 可针对未来的需求进行扩展 XML Schema 更完善,功能更强大 XML Schema 基于 XML 编写 XML Schema 支持数据类型 XML Schema 支持命名空间XML Schema 是 W3C 标准XML Schema 在 2001 年 5 月 2 日成为 W3C 标准。
您可以在我们的《W3C 教程》中获得更多有关 XML Schema 标准的信息。
为什么要使用 XML Schema?XML Schema 比 DTD 更强大。
XML Schema 支持数据类型XML Schema 最重要的能力之一就是对数据类型的支持。
通过对数据类型的支持: 可更容易地描述允许的文档内容 可更容易地验证数据的正确性 可更容易地与来自数据库的数据一并工作 可更容易地定义数据约束(data facets) 可更容易地定义数据模型(或称数据格式) 可更容易地在不同的数据类型间转换数据编者注:数据约束,或称 facets,是 XML Schema 原型中的一个术语,中文可译为“面”,用来约束数 据类型的容许值。
xml约束详解XML(Extensible Markup Language)即扩展标记语言,是一种用于存储和传输数据的标准格式。
XML约束是XML语言中非常重要的一部分,它规定了XML文档中元素的结构和内容,保证了XML文档的正确性和规范性。
下面,我们来详细了解一下XML约束。
一、XML约束的作用XML约束用于定义XML文档中元素的结构和内容约束规则。
它通过定义DTD(Document Type Definition)、XML Schema等方式来限制XML文档中元素的使用方式、元素之间的关系以及元素的属性等。
XML约束的作用主要体现在以下几个方面:1.保证XML文档的正确性和规范性:XML约束可以检查XML文档的语法、结构和内容是否符合要求,保证XML文档的正确性和规范性。
2.提高XML文档的可读性和可维护性:使用XML约束可以使XML文档更易阅读和理解,也更容易维护和更新。
3.方便XML文档的共享和交换:XML约束提供了一种标准的数据交换格式,可以方便地实现XML数据的共享和交换。
XML约束主要分为DTD和XML Schema两种,它们分别具有不同的特点和使用场景。
1.DTDDTD约束有以下特点:(1)DTD语法简单:DTD使用的语法比较简单,易于掌握和使用。
(2)不支持数据类型:DTD不支持数据类型,无法限制元素或属性的数据类型。
(3)不支持命名空间:DTD不支持命名空间,对于复杂的XML文档结构,使用DTD可能会导致一些约束问题。
2.XML SchemaXML Schema是一种更为严格的约束方式,它是一种XML文档定义语言,用于定义XML 文档中元素、属性、数据类型和约束规则等。
它是目前被广泛应用的XML约束方式之一,比较完善和强大。
(1)支持数据类型:XML Schema支持数据类型,并可以定义自定义数据类型。
(2)支持命名空间:XML Schema支持命名空间,可以很好地处理复杂的XML文档结构。
Schema的基本语法XSDL(XML Schema定义语言)由元素、属性、命名空间和XML文档种的其他节点构成的。
一、XSD中的元素XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。
1、schema根元素语法如下:<xsd:schema xmlns:xsd=“/2001/XMLSchema”>…</xsd:schema>在XSD中必须定义一个且只能定义一个schema根元素。
根元素中包括模式的约束、XML 模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些属性。
2、元素语法如下:<xsd:element name=”user” type=”xsd:string” />XSD中的元素是利用element标识符来声明的。
其中name属性是元素的名字,type属性是元素值的类型,在这里可以是XML Schema中内置的数据类型或其他类型。
例子:<xsd:schema xmlns:xsd=“/2001/XMLSchema”><x sd:element name=”user” type=”xsd:string” /></xsd:schema>以上文档对应的有效XML文档如下:<?xml version=”1.0”?><user>string</user>在元素的定义中还有2个属性:minOccurs和maxOccurs。
其中minOccurs定义了该元素在父元素中出现的最少次数(默认为1,值为大于等于0的整数),maxOccurs定义了该元素在父元素中出现的最多次数(默认为1,值为大于等于0的整数)。
在maxOccurs中可以把值设置为unbounded,表示对元素出现的最多次数没有限制。
例子:<xsd:schema xmlns:xsd=/2001/XMLSchema><xsd:element name=”user” type=”xsd:string” minOccurs=”0” maxOccurs=”unbounded” /></xsd:schema>表示为元素user的类型为string,出现的次数最少为0(也就是可选),最多不限制。
xml格式的国际标准XML(可扩展标记语言)是一种用于描述数据的标记语言,是一种可读性强且人类和机器都可理解的格式。
由于其灵活性和可扩展性,XML已成为国际标准,并广泛应用于信息交换和数据存储领域。
以下是与XML相关的国际标准的一些参考内容:1. XML 1.0规范(基础规范):本规范定义了XML的语法和基本结构,规定了XML文档中元素、属性、实体、注释和处理指令的使用方法,以及DTD(文档类型定义)的规范。
XML 1.0规范由W3C(万维网联盟)制定,并于1998年成为国际标准。
2. XML 1.1规范(扩展规范):XML 1.1规范是对XML 1.0规范的扩展,引入了一些新的特性和功能,如更宽松的命名规则、更完善的字符处理机制等。
该规范于2004年发布,主要用于解决XML 1.0规范在某些特定场景下的限制。
3. XML Schema规范:XML Schema是一种用于定义XML文档结构和约束的语言。
该规范定义了XML Schema文档的结构和语义,包括数据类型、元素、属性、限制和继承关系等。
XML Schema规范由W3C制定,并于2001年成为国际标准。
4. XPath规范:XPath是一种用于在XML文档中定位节点的语言。
XPath规范定义了一组语法规则和函数,用于指定节点的匹配条件和路径表达式。
XPath规范由W3C制定,并于1999年成为国际标准。
5. XSLT规范:XSLT(可扩展样式表语言转换)是一种用于将XML文档转换为其他格式的语言。
XSLT规范定义了一组模板和规则,用于指定XML文档的转换过程和输出结果的生成方式。
XSLT规范由W3C制定,并于1999年成为国际标准。
6. XML Namespaces规范:XML Namespaces规范定义了一种机制,用于解决XML文档中元素和属性名称的冲突问题。
该机制通过为元素和属性添加命名空间前缀,实现了不同命名空间下元素和属性的区分。
XSD工程是一种用于处理XML文档的工具,它可以将XML文档转换为XSD(XML Schema Definition)文件,以便于对XML文档进行验证和约束。
XSD工程可以用于创建XML文档模板、验证XML文档的一致性和格式、以及自动化处理XML文档。
下面是一些关于XSD工程的用法:1. 创建XML文档模板:XSD工程可以创建XML文档模板,其中包含所需的元素、属性和格式规则。
用户可以使用XSD工程提供的工具和界面来定义模板的结构和属性,以便根据模板生成符合要求的XML文档。
2. 验证XML文档的一致性和格式:XSD工程提供了强大的验证功能,可以确保XML文档的一致性和格式符合XSD规范。
用户可以使用XSD工程提供的验证器来检查XML文档的合法性,并在发现不符合规范的地方进行修正。
3. 自动化处理XML文档:XSD工程提供了自动化处理XML文档的功能,例如将XML文档转换为其他格式、对XML文档进行批量处理等。
用户可以使用XSD工程提供的工具和插件,根据需要对XML文档进行自动化处理,从而提高工作效率。
4. 与其他工具集成:XSD工程可以与其他工具集成,例如与数据库管理系统(DBMS)连接,将XML文档存储在数据库中。
用户可以使用XSD工程提供的API和接口,与其他工具进行交互和集成,从而实现更高效的数据交换和处理。
使用XSD工程时,需要注意以下几点:1. 熟悉XML语法和XSD规范:在使用XSD工程之前,需要了解XML语法和XSD规范的基本概念和规则。
这有助于更好地理解XSD工程的用法和功能。
2. 选择合适的工具:不同的XSD工程工具具有不同的功能和特点,用户需要根据自己的需求选择合适的工具。
3. 创建XSD文件:使用XSD工程创建XSD文件时,需要定义XML文档的结构和属性,以确保生成的XML文档符合要求。
4. 验证XML文档:使用XSD工程验证XML文档时,需要确保XML文档的结构和属性符合XSD规范。
DTD详解1.目前有两种xml文档定义的语义约束(1)Dtd document type definition(2)xml schema2.xml语义约束web.xml<serlvet><servlet-name></servlet-name><servlet-class></servlet-class></servlet><servlet-mapping><servlet-name></servlet-name><url-pattern></url-pattern></servlet-mapping>(1)Dtd约束包括那几个方面1、定义xml的根元素、内容和结构2、定义xml文档中可以接受那些元素3、定义xml文档里每个元素接受的合法内容,包括是否为空,是可以是文本,可以接受那些子元素,子元素出现的顺序和子元素出现次数等。
4、定义xml文档中每个元素能接受那些属性5、定义xml文档中每个属性的类型,能接受那些值,以及元素对属性的约束等。
6、定义属性的固定值和默认值7、定义xml文档或dtd中可以使用的实体。
(2)Dtd有作用1、Dtd采用了非xml的语法描述语义约束,可以提供如下功能2、通过使用dtd可以让每个xml文件带有一个有关其自身的格式描述3、不同的公司、组织可一致地使用某个标准的dtd来交换数据4、应用程序也可以使用某个标准的dtd验证所介绍的xml文档是否符合语义约束5、开发者也可以使用dtd来验证所创建的xml文档。
3.引入dtd的方式(1)内部dtd语义约束与xml文档的内容放在同一个xml文档中。
内部dtd紧跟在xml声明和处理指令之后,以<!DOCTYPE 开始,以]>结束。
其语法格式如下<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE 根元素名[元素描述]>xml文档主体部分(2)外部dtd<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE 根元素名 SYSTEM "外部的DTD的URL地址">(3)公用dtd<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE 根元素名 PUBLIC "DTD的标识名" "公用的DTD的URL地址">4.定义一个元素<!ELEMENT 元素名(子元素,)><!ELEMENT 元素名(#PCDA TA)>5.DTD的文档结构如下:第一行是DTD声明部分该声明与xml文档的生命语法格式相同0到多个注释部分,DTD注释与xml文档的注释完全相同0到多个<!ELEMENT…..>定义每个它就是一个xml元素0到多个<!ATTLIST…..>定义每个它就是一个xml元素的属性0到多个<!ENTITY…..>定义每个它就是一个实体0到多个<!NOTATION…..>定义每个它定义一个符号彼此之间完全独立,无须相互嵌套。
xsd文件在线转换在许多软件开发项目中,XML(eXtensible Markup Language)是一种常用的数据交换格式。
为了确保XML文档的有效性和一致性,通常使用XSD(XML Schema Definition)文件来定义XML的结构和约束。
然而,当需要将不符合规范的XML数据转换为符合规范的XML数据时,我们可以使用在线工具来进行XSD文件的在线转换。
本文将介绍XSD文件在线转换的背景和应用,以及一些常见的在线工具。
背景在软件开发中,XML作为一种广泛使用的数据格式,被广泛应用于数据的存储和交换。
为了确保XML数据的有效性和一致性,XSD文件被引入来定义XML的结构和约束。
XSD文件使用XML语法来描述XML数据的组成、顺序和数据类型。
在线转换的需求尽管XSD文件的定义对于确保XML数据的有效性和一致性至关重要,但有时候我们需要将不符合规范的XML数据转换为符合规范的XML数据。
这可能是因为我们的系统需要接收符合规范的XML数据,或者因为我们需要将现有的XML数据转换为其他系统可以接受的格式。
在这种情况下,我们可以使用在线工具来进行XSD文件的在线转换。
常见的在线工具以下是一些常见的在线工具,可以用于XSD文件的在线转换:1. XML Validation: XML Validation是一个功能强大的在线工具,可以验证XML数据是否符合指定的XSD文件。
它提供了一个简单易用的界面,用户只需上传XSD文件和XML数据,即可进行验证。
2. Altova XMLSpy: Altova XMLSpy是一个专业级的XML编辑器和开发工具。
它不仅提供了强大的XSD文件验证功能,还支持对XML数据进行转换和转换为其他格式。
3. Oxygen XML Editor: Oxygen XML Editor是另一个功能丰富的XML编辑器和开发工具。
它支持XSD文件的验证和转换,并提供了许多其他高级功能,如XPath查询和XSLT转换。
xdc约束文件摘要:1.引言2.xdc 约束文件的定义和作用3.xdc 约束文件的结构和内容4.xdc 约束文件的编写方法5.xdc 约束文件的应用案例6.结论正文:1.引言在现代软件开发过程中,约束文件是一种重要的文档,用于定义和描述软件系统的功能、性能、可靠性等要求。
xdc 约束文件是一种面向对象的设计约束文件,主要用于描述软件系统的需求和设计约束,以指导软件开发过程。
本文将对xdc 约束文件的定义、结构、内容、编写方法和应用案例进行详细介绍。
2.xdc 约束文件的定义和作用xdc 约束文件是一种基于XMI(XML Metadata Interchange)格式的约束文件,用于描述面向对象软件系统的需求和设计约束。
xdc 约束文件的主要作用有以下几点:(1)定义软件系统的功能需求和性能指标。
(2)描述软件系统的设计约束,如继承、关联、聚合等关系。
(3)指导软件开发过程,确保开发人员遵循统一的设计规范。
(4)方便软件系统的维护和升级。
3.xdc 约束文件的结构和内容xdc 约束文件的结构分为两部分:头部和主体。
(1)头部:包括文件名、作者、日期、约束文件的版本号等信息。
(2)主体:包括以下几个部分:a.需求部分:描述软件系统的功能需求和性能指标,包括功能需求、性能需求、可靠性需求等。
b.设计约束部分:描述软件系统的设计约束,包括类之间的继承关系、关联关系、聚合关系等。
c.实现约束部分:描述软件系统的实现约束,包括编程语言、开发环境、编码规范等。
d.测试约束部分:描述软件系统的测试约束,包括测试环境、测试用例、测试方法等。
4.xdc 约束文件的编写方法xdc 约束文件的编写方法如下:(1)首先,确定软件系统的需求和设计约束,包括功能需求、性能需求、设计约束、实现约束和测试约束等。
(2)其次,选择合适的xdc 约束文件模板,根据约束文件的结构,编写需求部分、设计约束部分、实现约束部分和测试约束部分。
XML文件格式的特点XML(eXtensible Markup Language)是一种被广泛应用于数据交换和存储的文件格式。
它的特点包括以下几个方面:1.可扩展性:XML是一种可扩展的标记语言,用户可以根据自己的需求定义自己的标记,通过这种方式适应不同的应用领域和需求。
2.可读性:XML采用了纯文本的格式,因此可以被人类和计算机轻松阅读。
4.自描述:XML文件包含了数据本身的描述信息,包括元素、属性和命名空间等。
这种自描述性使得数据的含义和结构可以被理解和使用。
5.平台无关性:XML是一种独立于平台和操作系统的文件格式,因此可以在不同的操作系统和设备上进行交换和存储,方便了数据的共享和互通。
6. 可扩展样式表:XML可以使用XSL(eXtensible Stylesheet Language)来定义样式表,使得数据的展示和呈现更加灵活和美观。
7. 可性:XML文件可以使用XPath(XML Path Language)来进行查询和,这样可以方便对大规模XML文件进行数据提取和分析。
8. 可解析性:XML文件可以使用各种编程语言和解析器进行解析和操作,包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等。
9. 扩展性:XML格式可以通过Schema(XML Schema Definition,XSD)进行验证和约束。
通过定义Schema,可以规定XML文件的结构和数据类型等约束,使得数据的合法性和一致性得以保证。
10. 与Web技术的兼容性:XML广泛应用于各种Web技术中,例如SOAP(Simple Object Access Protocol)、Web Services、RSS(Really Simple Syndication)等。
XML与Web技术的结合使得数据的交换和传输更加方便和可靠。
ISSN 1000-9825, CODEN RUXUEW E-mail: jos@Journal of Software, Vol.20, No.11, November 2009, pp.2977−2987 doi: 10.3724/SP.J.1001.2009.03422 Tel/Fax: +86-10-62562563© by Institute of Software, the Chinese Academy of Sciences. All rights reserved.XML结构完整性约束下的路径表达式的最小化∗张剑妹1,2, 陶世群1+, 梁吉业11(山西大学计算机与信息技术学院,山西太原 030006)2(长治学院,山西长治 046011)Minimization of Path Expression Under Structural Integrity Constraints for XMLZHANG Jian-Mei1,2, TAO Shi-Qun1+, LIANG Ji-Ye11(School of Computer and Information Technology, Shanxi University, Taiyuan 030006, China)2(Changzhi University, Changzhi 046011, China)+ Corresponding author: E-mail: jmzhang@, Zhang JM, Tao SQ, Liang JY. Minimization of path expression under structural integrity constraints forXML. Journal of Software, 2009,20(11):2977−2987. /1000-9825/3422.htmAbstract: A system of structural integrity constraints for XML (XSICs) is introduced, which specifies fivestructural relationships between different paths or nodes in XML documents, including path implication, pathcooccurrence, path mutual-exclusion, obligatory inclusion and exclusive inclusion. This paper defines the syntaxand semantics of these XSICs, and studies their core role in XML query optimization. Based on the concept ofsub-path, this paper proposes an algorithm for minimizing path expression in the presence of XSICs. By using thepath implication closure as a tool, the algorithm cannot only effectively eliminate redundant nodes or predicates, butalso identify invalid path expressions. Experimental results show the effectiveness and efficiency of the proposedminimization algorithm.Key words: path expression; structural integrity constraint for XML; path implication closure; sub-path;minimization摘要: 引入了一个XML结构完整性约束体系.这个体系描述了XML文档中节点或路径之间的5种结构关系,包括路径蕴涵、路径同现、路径互斥、必需性包含和排他性包含.给出了这些结构完整性约束的语法和语义定义,并研究了它们在XML查询优化中的作用.基于子路径的概念,提出了有结构完整性约束的路径表达式的最小化算法.该算法以路径蕴涵闭包为工具,不仅可以删除路径表达式的冗余,还可以识别无效路径表达式.实验结果表明了该算法的正确性和有效性.关键词: 路径表达式;XML结构完整性约束;路径蕴涵闭包;子路径;最小化中图法分类号: TP311文献标识码: A∗ Supported by the National Natural Science Foundation of China under Grant No.70471003 (国家自然科学基金); the ResearchFoundation for the Doctoral Program of the Ministry of Education of China under Grant No.20050108004 (国家教育部高等学校博士学科点专项科研基金)Received 2007-11-06; Revised 2008-01-29, 2008-04-30; Accepted 2008-07-092978 Journal of Software软件学报 V ol.20, No.11, November 2009随着可扩展标记语言XML迅速成为Web上数据表示和数据交换的标准,XML数据查询变得越来越重要.为此,学者们提出了多种XML查询语言,例如Xpath,Xquery,XML-QL.这些语言的共同特点是利用路径表达式来导航XML文档的查询.XML文档被看成节点标签的树,包含{/,//,[]}的路径表达式也可以表示成树形结构,这种树形结构称为树模式.路径表达式查询是寻找其树模式在XML文档树中的全部匹配,匹配操作的效率极大地依赖于树模式的大小[1],因此,路径表达式的最小化是一个极其重要的查询优化策略.路径表达式最小化的实质是删除表达式中的冗余节点类型或谓词,通常有两种冗余:固有的冗余和依赖于文档结构的冗余.前者可以通过树模式分枝之间的包含测试来删除;要有效地删除后者,通常需要有一种表示文档结构的模式机制的支撑.目前,常用的XML文档模式是DTD[2]和XML Schema[3],它们规定了文档中允许出现的元素、属性及其嵌套关系,但不能处理路径之间复杂的结构关系,如在一个文档中从一个节点出发的路径要求(或排斥)另一个路径.文献[1,4]虽然提出了有结构约束的路径表达式的最小化算法,但其约束仅限于孩子约束、后代约束和子类型约束,没有考虑节点或路径之间复杂的结构关系,而这种结构关系为路径表达式的最小化提供了更多机会.本文考虑XML结构完整性约束下的路径表达式的最小化,主要工作如下:(1) 引入了XML结构完整性约束的概念,并定义了排他性包含、必需性包含、路径蕴涵、路径互斥和路径同现的5种结构完整性约束的语法和语义;(2) 提出了子路径的概念,并给出一个路径蕴涵闭包的计算算法;(3) 基于子路径的概念,给出了有结构完整性约束情况下的路径表达式的最小化算法;(4) 进行了一系列实验以验证最小化算法的正确性和有效性.1 背景知识1.1 XML文档XML文档通常被看成节点标签的树,假定存在3个互不相交的集合:E是元素类型集合,A是属性名集合,单元素集{S}表示文本,XML文档树的形式化定义[5]如下:定义1. 一个XML文档树T被定义为一个六元组T=(V,lab,ele,att,val,root),其中:①V是节点的有限集.②lab是一个从V到E∪A∪{S}的映射.每个v∈V,若lab(v)∈E,则v是一个元素;若lab(v)∈A,则v是一个属性;若lab(v)=S,则v是一个文本节点.③ele(或att)是一个从V到V*的部分映射.每个v∈V,若lab(v)∈E,则ele(v)(或att(v))是一个元素和文本节点序列(或属性集).每个v′∈ele(v)(或v′∈att(v)),v′称为v的子元素(或属性)且有一个从v到v′的边.④val是一个从V到字符串的部分映射.每个v∈V,若lab(v)∈A或lab(v)=S,则val(v)是一个字符串.⑤root是文档树中唯一的根节点.图1是一个XML文档树.为了表示简单,图中忽略了文本值.本文所有的例子都建立在该文档上.我们对属性和元素采用相同的处理方法,因此不严格区分属性和元素,下文的节点类型泛指元素类型或属性名.Fig.1 An example of XML document tree图1 XML文档树示例张剑妹 等:XML 结构完整性约束下的路径表达式的最小化29791.2 路径表达式及其相关概念本文的路径表达式指XPath 片断XP {/,//,[]}上的表达式,其语法定义如下:::||.|/|//|/|//|[], P e P P P P P P P P e E A ε=∈∪, 其中,“ε”表示空路径,“.”表示当前上下文节点,“/”和“//”分别表示直接包含(父-子)关系和间接包含(祖先-后代)关系,由“[”和“]”括起来的表达式是谓词.图2给出了一些路径表达式的例子.路径表达式中不可能出现冗余的内容谓词,因此,本文不考虑带内容谓词的路径表达式的最小化.不包含“[”和“]”的路径表达式称为线性路径表达式,下文用P ∈LP 表示P 是线性路径表达式.定义2. ∀P ,Q ∈LP ,设P =c 1e 1c 2e 2…c n e n ,1122...m m Q c e c e c e ′′′′′′=,若n ≥m ,c i =i c ′且e i =i e ′(i =1,…,m ),则Q 是P 的路径前缀,记为Q P ≺;当n =m 时,称P 等于Q ,记为P =Q .路径表达式可以表示成树模式,如图3所示.其中:单线边称为孩子边,表示直接包含关系;双线边称为后代边,表示间接包含关系;与路径表达式最后一个节点类型(谓词除外)相对应的节点称为选择节点,用星号标识选择节点;其他分枝与谓词相对应.树模式中,每个从根到叶的路径对应一个线性路径表达式,从根到选择节点对应的线性路径表达式称为选择路径,其他线性路径表达式称为条件路径[6].如Q 2的选择路径是“/papers /paper /title ”,条件路径是“/papers /paper //author /name ”.一个路径表达式只有1个选择路径,可有若干个条件路径.Fig.2 Examples of path expression图2 路径表达式举例 Fig.3 Tree pattern of Q 3 图3 Q 3的树模式 路径表达式的计算是寻找其树模式在文档树中的全部匹配.匹配的形式化定义如下:定义3. 给定树模式Q 和文档树T ,N q 和N t 分别表示Q 和T 的节点集,Q 在T 上的匹配是一个映射f :N q →N t ,该映射满足如下条件:① 保持节点类型,即∀v ∈N q ,若lab (v )=e ,则lab (f (v ))=e .② 保持边关系,即∀u ,v ∈N q ,若(u ,v )是孩子边,则f (v )是f (u )的孩子;若(u ,v )是后代边,则f (v )是 f (u )的后代. 文中用到的其他符号及其意义如下:|P |表示P 中节点类型的个数;nodes (P )表示P 的节点类型集;last (P )表示P 的最后一个节点类型;设u 是文档T 中的一个节点,u [P ]表示从u 开始沿着P 所指定的路径访问到的节点集.1.3 子路径定义4. ∀P ,Q ∈LP ,N p 和N q 分别表示P 和Q 的树模式的节点集,Q 是P 的子路径,记为Q ≤P ,当且仅当存在一个满足如下条件的映射f :N q ∪{root }→N p ∪{root }:① 保持节点类型,即∀v ∈N q ,若lab (v )=e ,则lab (f (v ))=e .② 保持边关系,即∀u ,v ∈N q ∪{root },若(u ,v )是孩子边,则在P 中f (v )是f (u )的孩子节点;若(u ,v )是后代边,则在P 中f (v )是f (u )的后代节点.例如,线性路径表达式“//paper //section ”是“/papers /paper //section //paragraph ”的一个子路径.显然,任何路径表达式P 及其路径前缀都是其自身的子路径,ε是任何路径的路径前缀和子路径.1.4 路径表达式的包含用Q (T )表示路径表达式Q 在文档树T 中的查询结果,路径表达式的包含与等价的定义如下:定义5. 如果对任何XML 文档T 都有Q 1(T )⊆Q 2(T )成立,则Q 2包含Q 1,记作Q 1⊆Q 2.定义6. 如果Q 1⊆Q 2且Q 2⊆Q 1,则Q 1和Q 2等价,记作Q 1≡Q 2.Q 1=/papers /paper [authors /author /name ]/subtitle Q 2=/papers /paper [.//author /name ]/titleQ 3=/papers /paper [publisher /name ][.//author /name ]//sectionQ 4=/papers /paper [type /conpaper ]//authorQ 5=/papers /paper [.//section ][.//paragraph ]/titleQ 6=/papers /paper [conference ][type /jourpaper ]/title2980Journal of Software 软件学报 V ol.20, No.11, November 2009子路径和包含既有区别又有联系.例如“//paper //section ”是“/papers /paper //section /paragraph ”的子路径,但其查询结果不相交.任意两个线性路径表达式P 和Q ,若Q ≤P 且last (P )=last (Q ),则P ⊆Q ;反之亦然.2 XML 文档的结构完整性约束描述元素或路径之间结构关系的完整性约束称为XML 结构完整性约束(简称为XSICs).XSICs 分为两类:基于路径的XSICs 和基于元素的XSICs.2.1 基于路径的XSICs基于路径的XSICs 描述了XML 文档树中路径之间的蕴涵、互斥和同现关系(简称路径约束),定义如下: 定义7. 给定文档树T ,∀C ,P ,Q ∈LP ,u ,v ,v ′∈V ,则,① 若∀u ∀v (u ∈root [C ]∧v ∈u [P ]→∃v ′(v ′∈u [Q ])),则称P 蕴涵Q ,记作C (P →Q ),T 满足C (P →Q ),记作T |=C (P →Q ).② 若∀u ∀v (u ∈root [C ]∧v ∈u [P ]→∃v ′(v ′∈u [Q ]))且∀u ∀v (u ∈root [C ]∧v ∈u [Q ]→∃v ′(v ′∈u [P ])),则称P 与Q 互斥, 记作()C P Q ∨,T 满足()C P Q ∨,记作|()T C P Q =∨.③ 若C (P →Q )∧C (Q →P ),则称P 与Q 同现,记作C (P ↔Q ),T 满足C (P ↔Q ),记作T |=C (P ↔Q ).其中:• 路径C 为上下文路径,它指定路径约束关系在哪个文档子树成立.规定当C =ε时,特定的路径约束关系在整个文档树上成立,且规定上下文路径ε可以被缺省;• P 和Q 分别称为约束的左部路径(left hand path,简称LHP)和右部路径(right hand path,简称RHP);C 是P 和Q 的公共前缀;当|P |=|Q |=|C |+1时,路径蕴涵、互斥和同现表示兄弟节点之间的蕴涵、互斥和同现. 除非特别声明,在路径约束C (P °Q )({,,}∈→↔∨ )中,P 和Q 都是以C 为路径前缀的表达式.为书写简单, 在约束实例中通常将P 和Q 简写为相对于C 的相对路径.例如,表1中的ϕ1−ϕ7是图1所示的XML 文档满足的路径约束,ϕ1是/papers /paper (/papers /paper /title →/papers /paper //author /name )的缩写形式,其他约束与此类似.Table 1 XSICs for the papers document表1 Papers 文档的XSICs通俗地讲,路径蕴涵C (P →Q )表示在C 所确定的文档子树上,如果P 出现,则Q 一定出现;路径同现是双向的 路径蕴涵;路径互斥()C P Q ∨表示在C 所确定的文档子树上,P 与Q 不能同时出现.根据其语义,路径互斥()C P Q ∨可表示为C ((P →¬Q )∧(Q →¬P )),其中,¬P 表示P 不存在. 给定一个线性路径表达式集B 和一个线性路径表达式P ,P ∝B 当且仅当存在一个线性路径表达式Q 使得Q ∈B 且P ≤Q ;¬P ∝B 当且仅当存在一个线性路径表达式Q 使得¬Q ∈B 且Q ≤P .2.2 基于元素的XSICs2.2.1 排他性包含和必需性包含的语法与语义基于元素的XSICs 描述节点之间的蕴涵、互斥、同现和结构包含关系.如前所述,节点之间的蕴涵、互斥和同现是路径约束的特例,因此,这里只定义节点之间的结构包含关系.根据其在查询优化中的不同作用,将节点之间的结构包含分为排他性包含和必需性包含(简称为元素包含约束),定义如下:张剑妹 等:XML 结构完整性约束下的路径表达式的最小化2981定义8. 给定文档树T ,∀P ,Q ∈LP ,e i ∈E ,e j ∈E ∪A ,u ,v ,v 1,v 2∈V ,则, ① 若∀u (lab (u )=e i →∃v (lab (v )=e j ∧v ∈u [P ])),则称e i 必需包含e j ,记作e i ⇒e j ,T 满足e i ⇒e j ,记作T |=e i ⇒e j . ② 若∀u (lab (u )=e i ∧∃v 1∃v 2(v 1∈u [P ]∧v 2∈u [Q ]∧lab (v 1)=lab (v 2)=e j )→P =Q ),则称e i 排他包含e j ,记作i j e e ,T 满足i j e e ,记作|i j T e e = .换言之,e i ⇒e j 是指任何一个类型为e i 的节点(e i 节点)必须有e j 后代;i j e e 表示若一个e i 节点有一个e j 后 代,则从e i 节点到e j 节点的访问路径是唯一的.如表1中的ϕ8~ϕ13是图1的XML 文档满足的元素包含约束.定理1. 设E 是元素类型集,A 是属性名集,∀e i ,e j ∈E ,∀e k ∈E ∪A ,若e i ⇒e j 且e j ⇒e k ,则e i ⇒e k .这个定理叙述了必需性包含的传递性,其正确性是显然的.2.2.2 约束chase 技术在最小化过程中,用必需性包含删除表达式中的冗余叶节点,用排他性包含缩短线性路径表达式.此外,元 素包含约束还可以转换成等价的路径蕴涵约束,根据其语义,e i ⇒e j 等价于//e i →e i //e j ,i j e e 等价于//e i //e j → //e i c i +1e i +1…c j e j .其中,//e i c i +1e i +1…c j e j 是以“//”开头的中间不含“//”的线性路径表达式.在关系数据库中,通常采用chase 技术改写查询,使其包含完整性约束的作用[7].为了相同的目的,改进的chase 技术被应用到XML 路径表达式最小化中[1,4,8].本文采用chase 技术改写路径约束集,使其集成元素包含约束的作用.由于应用环境不同,不能照搬原有的chase 技术.令P =c 1e 1c 2e 2…c k e k ,Ω为元素包含约束集,Σ为路径约束集,约束chase 技术如下:(1) 利用定理1计算必需性包含闭包cls (Ω).(2) 检查Σ中的每个路径表达式P (约束的LHP 和RHP),若()i j e e cls Ω∈ 且e i ,e j ∈nodes (P )(i <j ),则在Σ中增 加约束c 1e 1…c i e i //e j …c k e k →P ;若e i ⇒e x ∈cls (Ω)且e i ∈nodes (P )∧e x ∉nodes (P )(i =1,2…k ),则在Σ中增加约束P → c 1e 1c 2e 2…c i e i //e x ;若e k −1⇒e k ∈cls (Ω)且e k −1,e k ∈nodes (P ),则在Σ中增加约束c 1e 1c 2e 2…c k −1e k −1→P .(3) 重复步骤(2),直到Σ不发生变化为止.2.3 路径蕴涵闭包路径蕴涵和路径同现用来识别路径表达式中的冗余谓词,如在没有完整性约束时,Q 2为最小查询,若已知/papers /paper (title →.//author /name ),则条件路径“/papers /paper //author /name ”是冗余的,该查询被最小化为“/papers /paper /title ”.查询结果为空的路径表达式为无效路径表达式,路径互斥用来识别无效路径表达式.本文以路径蕴涵闭包作为查询最小化和无效路径表达式识别的主要工具.下面给出路径蕴涵的推理规则:规则1. C (P →Q ),C C ′≺⇒C ′(P →Q ).规则2. C (P →Q ),C ′⊆C ⇒C ′(P →Q ).规则3. ∀P ,Q ∈LP ,Q ≤P ⇒P →Q .规则4. C (P →Q ),C (Q →S )⇒C (P →S ).规则5. C (P →Q ),C (Q →¬S )⇒C (P →¬S ).规则6. C (P →¬Q ),C (S →Q )⇒C (P →¬S ).规则7. C (P →¬Q ),C ≤C ′⇒C ′(P →¬Q ).规则1~规则7是正确的和完备的.规则的正确性可以根据路径约束的语义得到证明.规则的完备性可以通过如下步骤得到证明:给定约束ϕ:C (P →Q )(或C (P →¬Q )),首先计算P 的路径蕴涵闭包B ,然后构造一个文档树T ,使B 中除Q (或¬Q )以外的路径都出现在T 中.限于篇幅,本文不给出详细证明过程.定义9. 给定约束Σ和C ,P ∈LP ,P 关于Σ和C 的路径蕴涵闭包是在Σ和C 下P 所蕴涵的全部路径表达式的最小集合,记为(,)C P Σ+,即(,)C P Σ+={X |C (P →X )能够使用规则1~规则7从Σ推出,其中,X ∈{Q ,¬Q }.设Ω是元素包含约束集,Σ是改写并chase 后的路径约束集,计算路径蕴涵闭包的算法如下:算法1. ClosureComp (Σ,C ,P ).输入:非空约束集Σ,C ,P ∈LP .输出:(,).C P Σ+2982Journal of Software 软件学报 V ol.20, No.11, November 2009B ={P }; /*以下代码对B 进行初始化*/if (e i ∈nodes (P ) && e i ⇒e x ∈Σ) if e i =last (P ) then B ={P //e x }; else B =B ∪{c 1e 1c 2e 2…c i e i //e x };repeat checking each X ∈B until all path expressions in B are checked /*以下代码计算B */for each ϕ:C ′(P ′→Q ′)∈Σif (X ==S ) then /*X ==S 表示X 是形如S 的线性路径表达式*/if (C C ′≺) thenif (P ′≤S && Q S ′≤/) then B =B ∪{Q ′}; /*规则1,规则3,规则4*/else if (C ′≤S && last (C ′)∉nodes (C )−last (C ) && P ′≤S ) thenreplace the prefix C ′ of Q ′ with lC S C ′; /*lC S C ′是S 上从第1个节点类型到last (C')的子路径*/if (Q S ′≤/) then B =B ∪{Q ′}; /*规则2,规则3,规则4*/if (X ==¬S ) then /*X ==¬S 表示X 是形如¬S 的线性路径表达式*/if (C C ′≺ && S ≤Q ′) then B =B ∪{¬P ′}; /*规则1,规则3,规则6*/else if (C ′≤S && last (C ′)∉nodes (C )−last (C )) thenreplace the prefix C ′ of P ′ and Q ′ with ;lC SC ′ if (S ≤Q ′) then B =B ∪{¬P ′} /*规则2,规则3,规则6*/for each ϕ:C ′(P ′→¬Q ′)∈Σif (X ==S ) then /*规则3,规则5,规则7*/if (C ′≤C && P ′≤S ) then B =B ∪{¬Q ′};else if (C ′≤S && P ′≤S ) then B =B ∪{¬Q ′}; tag ¬Q ′ with ;lC S C ′for each P ∈B /*以下代码删除B 中的冗余路径表达式*/if (Q ∈B && Q ≤P ) then B =B −{Q }for each ¬P ∈Bif (¬Q ∈B && P ≤Q ) then B =B −{¬Q }return B该算法通过判断两个线性路径表达式的子路径关系来检查B 中的路径是否蕴涵Σ中路径蕴涵的RHP,最多执行O (|B |×|Σ|)次检查.在不出现递归的情况下,子路径判断的时间复杂度为两条线性路径长度之和(记为l ).此外,最坏情况下,|B |等于|Σ|.因此,该算法的复杂度为O (l ×|Σ|2).3 路径表达式的最小化如前所述,路径表达式中有两类冗余.本文使用子路径识别和删除路径表达式中固有的冗余,使用路径蕴涵闭包识别和删除依赖于文档结构的冗余.3.1 利用子路径识别冗余条件定理2. 给定路径表达式查询Q ,令P i 是Q 的任意条件路径,P j 是Q 的选择路径或另一条件路径,Q −P i 表示删除条件路径P i 后得到的路径表达式查询,若P i ≤P j ,则Q −P i ≡Q .证明:若P i ≤P j ,根据子路径和匹配的定义可知,P j 在文档T 中的每个匹配都包含一个P i 在T 中的匹配.因此,条件路径P i 是冗余的,故Q −P i ≡Q . □该定理说明了如何利用子路径识别冗余条件路径.此外,必需性包含使一些隐含的子路径关系显现出来.例如,无约束时,查询Q 5是最小查询;注意到“/papers /paper //paragraph ”是“/papers /paper //section /paragraph ”的子路径,若已知section ⇒paragraph ,则Q 5的条件路径“/papers /paper //paragraph ”是冗余的.为了识别这类冗余,首先判断一个条件路径P 1删除最后一个节点类型后是否是另一条件路径P 2的子路径;若结果为真,则再判断P 2中的节点类型是否必需包含这个被删除节点类型.算法如下:张剑妹 等:XML 结构完整性约束下的路径表达式的最小化2983算法2. IsSubPathOb (P 1,P 2).输入:两个不同的线性路径表达式P 1,P 2.输出:false 或true. m =|P 1|; n =|P 2|;if (m >n +1) then return false;else if (112m P P −≤) then /*11m P −为P 1截取最后一个节点类型后形成的路径*/ if ((e 1(m −1),e 1m )∈Cedge (P 1)) thenif (e 2m ′∈nodes (P 2) && e 2m ′⇒e 1m ) then return true; /*e 2m ′是P 2中与P 1中的e 1(m −1)相匹配的节点类型*/ else for each e 2i ∈nodes (P 2)(i =m ′ to n )if (e 2i ⇒e 1m ) then return true;return false3.2 利用路径约束识别冗余条件和无效路径表达式定理3. 给定一个路径约束集Σ,令P i 是路径表达式查询Q 的任意条件路径,P j 是Q 的选择路径或另一条件 路径,C 为P i 和P j 的最长公共路径前缀,若P i ∝(,)j C P Σ+,则Q −P i ≡Q .证明:由P i ∝(,)j C P Σ+得P i ∈(,)j C P Σ+或者(,)i j C P P Σ+′∈且P i i P′≤;根据定义9和规则3、规则4可知P j →P i 成立, 即在C 确定的文档子树上,P j 出现时P i 必出现,因此P i 是冗余的,故Q −P i ≡Q 成立. □定理3说明如何利用路径蕴涵闭包识别冗余条件路径.此外,路径蕴涵闭包还可用来识别无效路径表达式. 定理4. 给定一个路径约束集Σ,令P i 和P j 是路径表达式查询Q 的任意条件路径或选择路径,C 为P i 和P j 的最长公共路径前缀,若¬P i ∝(,)j C P Σ+(或¬P j ∝(,)i C P Σ+),则Q 是无效路径表达式.证明:由¬P i ∝(,)j C P Σ+得¬P i ∈(,)j C P Σ+或者(,)i j C P P Σ+′¬∈且 i i P P ′≤;根据定义9和规则3、规则6可得P j →¬P i , 即在C 确定的文档子树上,P j 出现时P i 必不出现,也即这两个条件路径是不相容的,故Q 是无效路径表达式. □3.3 路径表达式最小化算法算法由3部分组成:分解、最小化和重构.分解算法将查询分解成选择路径和条件路径,最小化算法删除查询中的冗余,重构算法将非冗余条件路径按原来结构关系连接到选择路径上.下文着重描述最小化算法.算法首先利用子路径删除冗余条件路径,然后使用必需性包含递归地删除非冗余条件路径的冗余叶节点,最后利用路径蕴涵闭包删除冗余条件路径.给定查询Q ,令P s 为选择路径,P [i ](i =1,…,m )为条件路径,m 为Q 中的条件路径数,C 为Q 中最高分支点的路径,PCnt 为未删除的条件路径数,算法如下:算法3. Min XPath (P s ,P []).输入:选择路径P s 和条件路径P [i ],非空约束集Σ.输出:选择路径P s 和非冗余的条件路径P [j ]./*第1阶段:使用子路径删除冗余条件*/PCnt =m ;for each condition path P [i ] /*函数IsSubPath (P i ,P j )判断P i 是否P j 的子路径,算法略*/if (IsSubPath (P [i ],P s )||IsSubPathOb (P [i ],P s )) then P [i ]=ε; PCnt −1;if (PCnt >1) thenfor each non-empty condition path P [i ]for each non-empty condition path P [j ]if (P [i ]≠P [j ] && (IsSubPath (P [i ],P [j ])||IsSubPathOb (P [i ],P [j ]))) then P [i ]=ε; PCnt −1;/*第2阶段:使用必需性包含删除非冗余条件路径的冗余叶节点*/if (PCnt >=1) then2984 Journal of Software软件学报 V ol.20, No.11, November 2009for each non-empty condition path P[i]DelRedNode(P[i]); /*DelRedNode(P[i])删除P[i]中的冗余叶节点,算法略*/if (|P[i]|==|C|) then P[i]=ε ; PCnt−1;/*第3阶段:使用路径蕴涵闭包删除冗余条件*/if (PCnt>=1) thenB=ClosureComp(Σ,C,P s);for each non-empty condition path P[i]if (¬P[i]∝B) then return “The query result is empty”;if (P[i]∝B) then P[i]=ε; PCnt−1;if (PCnt>1) thenfor each non-empty condition path P[i]B=ClosureComp(Σ,C,P[i]);for each non-empty condition path P[j]if (P[i]≠P[j] && ¬P[j]∝B) then return “The query result is empty”;if (P[i]≠P[j] && P[j]∝B) then P[j]=ε; PCnt−1该算法的复杂度由第3阶段的双重循环决定.算法首先计算一个非冗余条件路径的路径蕴涵闭包,需花费O(l×|Σ|2)时间;然后,算法检查其他非冗余条件路径是否属于该路径蕴涵闭包,最多执行m×|Σ|次检查,每次检查需O(l)时间,共花费O(m×l×|Σ|)时间;通常|Σ|≥m,故每次循环花费O(l×|Σ|2)时间;最坏情况下,非冗余条件路径数为m,即最多执行m次循环,令n为查询的大小,则l的最大平均长度为2n/m.因此,算法的复杂度为O(n|Σ|2).4 实验设计和性能分析实验的硬件环境为奔腾IV 2.4GHz,256M RAM,40G硬盘,单CPU的PC机,操作系统为Windows XP,所有代码用VC6.0编写,用微软的MSXML4.0 DOM解析器解析并装入文档,用DOM API进行数据查询.实验数据集有:人工数据集Papers(见图1)和经典测试数据集XMark.Papers文档由我们设计的文档生成器根据其DTD自动生成,大小为65.2MB,共2 000 035个节点,其中1 245 905个元素节点,65 639个属性节点,688 491个文本节点;XMark文档由xmlgen[9]选择 1.0的缩放因子生成,大小为113MB.根据文档的结构特征和应用需求,分别为这两个文档设计了XSICs(见表1和表2).约束被存储在随机文件中,最小化时,被预先读入内存.图2和图4分别给出了Papers文档和XMark文档的查询,需要说明,尽管有些查询在实际应用中出现的几率较小,但由于其代表了不同的冗余类型,最小化算法必须考虑到这些情况的出现.Table 2XSICs for the XMark document表2 XMark文档的XSICsConstraint type ConstraintsPath constraints δ1: /site/closed_auctions/closed_auction(seller→price) δ2: /site/closed_auctions/closed_auction(seller→buyer) δ3: /site/open_auctions/open_auction(bidder→seller) δ4: /site/open_auctions/open_auction(bidder→quantity) δ5: /site/open_auctions/open_auction(reserve→initial) δ6: /site/people/person(address→emailaddress)δ7: /site/people/person(address→name)Element inclusion constraints δ8: open_auction⇒sellerδ9: closed_auction⇒seller δ10: closed_auction⇒buyerδ11: bidder⇒dateδ12: address⇒cityδ13: address⇒streetQ7=//open_auctions/open_auction[bidder/date] [quantity]/sellerQ8=/site//closed_auction[buyer]/sellerQ9=//people/person[phone][homepage]/nameQ10=/site/people/person[address][address/province] /nameQ11=//open_auction[initial][reserve]/typeQ12=/site//closed_auction[buyer][seller]Fig.4 Queries for the XMark document 图4 XMark文档的查询张剑妹 等:XML 结构完整性约束下的路径表达式的最小化2985用本文的最小化算法优化查询,得到最小化算法的执行时间(MinTime)和最小化前后的查询响应时间(OrgQry time/MinQry time),统计最小化后的时间收益.对每个查询反复执行6次,取其平均时间得到表3和表4的实验结果.其中,时间缩短量(time red)=OrgQry time −(MinQry time +MinTime).从实验结果可以看出:对于没有冗余的查询,最小化算法会带来一些附加时间,但附加时间远远小于其查询时间,如查询Q 4和Q 9;对于无效路径表达式,最小化算法在很短的时间内给出无查询结果的判断,从而大幅度地提高了查询效率,如查询Q 6,最小化算法用约1.5ms 的时间给出无查询结果的判断,若直接查询文档,则需32ms 左右的时间得到0个查询结果;对有冗余的查询,最小化算法均不同程度地缩短了其查询响应时间,且缩短的时间远远大于最小化时间.图5和图6直观地显示了最小化后的时间收益.从图中可以看出,最小化后查询响应时间比原查询时间缩短了10%~20%,缩短的查询响应时间是最小化时间的10倍~15倍,可见,本文的最小化算法是有效的.由表3和表4可以看出,不同查询的最小化时间相差较大,下面就查询Q 1~Q 6来分析引起这种差异的主要原因.最小化时间最短的是查询Q 2,最小化时间在1ms 以上的是查询Q 5和Q 6.原因是Q 2只有1个较短条件路径,该条件路径在最小化的第1阶段即被删除,没有进行路径蕴涵闭包的计算;而Q 5和Q 6直到最小化的最后条件路径也没有被全部删除,在整个过程多次进行路径蕴涵闭包的计算;Q 1,Q 3和Q 4仅计算选择路径的路径蕴涵闭包.由此可见,引起最小化时间变化的主要原因是路径蕴涵闭包的计算.Table 3 Experimental results on the papers document表3 Papers 文档的实验结果Original queriesMinimal queries OrgQry time (ms)MinTime (ms)MinQry time (ms) Time red (ms)1Q 2/papers /paper /title 0.185 34.216 27.474 6.557 Q 3/papers /paper [publisher ]//section 0.625 35.276 27.330 7.321 Q 4Q 4 0.508 33.201 − − Q 5/papers /paper [.//section ]/title 1.062 34.216 26.882 6.272 Q 6 The query result is empty 1.446 31.969 − −Table 4 Experimental results on the XMark document表4 XMark 文档的实验结果Original queries Minimal queries OrgQry time (ms) MinTime (ms) MinQry time (ms) Time red (ms) Q 7 //open _auctions /open _auction [bidder ]/seller 0.808 85.377 74.764 9.805 Q 8 /site //closed _auction /seller 0.421 70.870 61.385 9.064 Q 9 Q 9 0.893 86.643 − −Q 10/site /people /person [address /province ]/name 0.632 88.815 76.863 11.329 Q 11 //open _auction [reserve ]/type 0.851 78.087 70.332 6.904 Q 12 /site //closed _auction 0.506 65.010 51.929 12.575Fig.5 Response time of original queries andminimal queries图5 原查询与最小查询的响应时间 Fig.6 Comparison of minimization time and time reduction 图6 最小化时间与节省时间的对比5 相关研究与分析比较路径表达式最小化的本质是查询包含,查询包含的主要技术是同态技术[10],但同态是查询包含的充分但非必要条件.为此,文献[11]提出了条件同态和隐含条件同态(hidden conditioned homomorphism)技术,基于这种技123578101112T i m e (m s ) 806040200Q 1 Q 2 Q 3 Q 5 Q 7 Q 8 Q 10 Q 11 Q 12T i m e (m s )2986 Journal of Software软件学报 V ol.20, No.11, November 2009术提出了更完备的包含测试算法.最先专门研究路径表达式最小化问题的是文献[1,12].基于同态的概念,文献[12]研究了包含{/,*,[]}的路径表达式的最小化,并得出复杂度为多项式的结论;文献[1]研究了不含通配符的树模式的最小化,并提出了多项式的算法.文献[4]把模拟的概念引入到最小化研究中,在与文献[1]相同的表达式上提出了更优的最小化算法.文献[8]对文献[1,4]的路径表达式进行了扩展,使其包含descendant-or-self轴,并针对父亲、孩子、后代和子类型约束提出了相应的最小化算法.文献[13]研究了包含通配符的树模式的最小化问题,并声明表达式的最小树模式可以从其子模式中找到,证明了这是一个NP完全问题.同时,在对表达式进行一定限制后提出了多项式的最小化算法.与前面的研究不同,文献[14]引入一个layer axis消除路径表达式中非冗余的通配符步,从而缩短了有通配符的表达式.文献[15]提出了两条路径缩短策略:缩短路径法和补路径法,其基本思想是用与查询等价的相对路径或互补路径取代原查询.文献[16]研究了路径蕴涵、互斥和同现3种结构约束及其逻辑蕴涵和可满足性,其约束是用简单路径定义的.文献[6]提出了使用DTD中隐含的结构约束优化XPath查询的方法,这种方法将不确定的路径步转换为确定路径步,增大了查询规模.文献[17]也研究了如何利用模式中隐含的约束最小化路径表达式,但其算法并不增加查询规模,为有模式的路径表达式优化提供了有效的解决方法.本文考虑与文献[1,4]相同的表达式的最小化.然而,文献[1,4]的约束仅限于孩子、后代和子类型约束;XSICs 是这些约束的扩展:必需性包含包括了孩子和后代约束,子类型约束是路径蕴涵的特殊情况.当没有完整性约束时,本文的算法通过测试线性路径表达式之间的子路径来删除表达式中的固有冗余(见算法3的第1阶段删除If条件中的IsSubPathOb()函数),其复杂度为O(n2);而文献[1,4]的复杂度分别为O(n4)和O(n2).在有孩子和后代约束的情况下,只需执行算法3的前两个阶段,复杂度为O(n2|Σ|),文献[1,4]的算法复杂度分别为O(n6)和O(n2).本文的算法复杂度是在条件路径数(谓词数)m等于查询大小n的假设下得到的,事实上,m远远小于n.因此,在第1种情况下,本文的算法优于文献[4]的算法;在第2种情况下,本文的算法也并不比文献[4]的算法差.另外,本文的算法将查询分解成线性路径表达式,通过测试线性路径表达式之间的包含关系来删除冗余条件路径,从而降低了包含测试的难度,使算法易于扩展到带有通配符的路径表达式.可见,本文的最小化算法是可行的.6 结论路径表达式的最小化是XML查询优化的一个关键问题.基于子路径的概念,本文提出了有XSICs的路径表达式的最小化算法.与其他最小化算法不同,本文的算法以路径蕴涵闭包为主要工具,不仅能够有效地删除路径表达式中的冗余谓词和节点类型,而且可以识别无效路径表达式.算法的基本思想是,将路径表达式分解成若干线性路径表达式,通过测试线性路径表达式之间的包含关系删除冗余条件路径.根据文献[18]的研究成果,有通配符的线性路径表达式的包含是PTIME问题.如何扩展该算法,使其能够处理包含通配符的路径表达式,是我们将要解决的一个问题.XSICs可被看成是对DTD的扩展,如何从DTD中获得其隐含的全部结构完整性约束,并用XSICs扩展所获得的约束以得到DTD中所有路径表达式的路径蕴涵闭包,将是今后要研究的一个重要课题.References:[1] Amer-Yahia S, Cho S, Lakshmanan LVS, Srivastava D. Minimization of tree pattern queries. In: Aref WG, ed. Proc. of the 2001ACM SIGMOD Int’l Conf. on Management of Data. Santa Barbara: ACM Press, 2001. 497−508.[2] W3C. Extensible markup language (XML) 1.0. 3rd ed., W3C Recommendation, 2004. /TR/2004/REC-xml-20040204[3] W3C. XML schema part 1: Structures. 2nd ed., W3C Recommendation, 2004. http:// /TR/xmlschema-1[4] Ramanan P. Efficient algorithms for minimizing tree pattern queries. In: Franklin MJ, Moon B, Ailamaki A, eds. Proc. of the 2002ACM SIGMOD Int’l Conf. on Management of Data. Madison: ACM Press, 2002. 299−309.[5] Buneman P, Davidson S, Fan WF, Hara C, Tan WC. Reasoning about keys for XML. Information Systems, 2003,28(8):1037−1063.。
java schemaset方法Java中的SchemaSet方法是用于管理XML Schema的集合的一种工具。
XML Schema是一种用于定义XML文档结构和约束的语言,它定义了文档中元素、属性、数据类型和关系的规则。
SchemaSet方法提供了一种便捷的方式来管理和操作XML Schema集合,使开发人员可以轻松地使用和处理XML文档。
在Java中,可以使用javax.xml.validation.SchemaFactory类的newInstance方法来创建一个SchemaFactory实例,然后通过该实例的newSchema方法将XML Schema文件加载为一个Schema对象。
接下来,可以使用Schema对象的newValidator 方法创建一个Validator对象,用于验证XML文档是否符合XML Schema的规则。
SchemaSet方法可以将多个Schema对象组合成一个SchemaSet对象,并提供了一系列方法来管理和操作这个SchemaSet对象。
可以使用SchemaSet对象的add方法将一个Schema对象添加到SchemaSet中。
例如:SchemaSet schemaSet = new SchemaSet();Schema schema = schemaFactory.newSchema(schemaFile); schemaSet.add(schema);然后,可以使用SchemaSet对象的remove方法将一个Schema对象从SchemaSet中移除。
例如:schemaSet.remove(schema);SchemaSet对象还提供了一系列方法来获取SchemaSet中包含的Schema对象的信息。
例如,可以使用SchemaSet对象的size方法获取SchemaSet中包含的Schema对象的数量:int size = schemaSet.size();可以使用SchemaSet对象的contains方法判断SchemaSet中是否包含指定的Schema对象:boolean contains = schemaSet.contains(schema);可以使用SchemaSet对象的iterator方法获取一个Iterator对象,用于遍历SchemaSet中的Schema对象:Iterator<Schema> iterator = schemaSet.iterator();while (iterator.hasNext()) {Schema schema = iterator.next();// do something with schema}SchemaSet对象还提供了一些其他的方法,如clear方法用于清空SchemaSet中的所有Schema对象,isEmpty方法用于判断SchemaSet是否为空。
xmlschema实例XML Schema 实例XML Schema 是一种用于定义 XML 文档结构、数据类型和约束的语言。
通过使用 XML Schema,可以确保 XML 文档的有效性和一致性,从而提高数据交换的可靠性和可靠性。
本文将介绍 XML Schema 实例的基本概念、语法和应用。
一、XML Schema 实例的概念XML Schema 实例是一个 XML 文档,它遵循特定的 XML Schema 定义。
它描述了 XML 文档的结构、元素和属性的数据类型以及它们之间的关系。
通过使用 XML Schema 实例,可以对 XML 文档进行验证,以确保其符合特定的规则和要求。
二、XML Schema 实例的语法XML Schema 实例遵循 XML 的语法规则,并使用特定的命名空间和元素来定义 XML 文档的结构和约束。
以下是 XML Schema 实例的基本语法要素:1. 命名空间:XML Schema 实例使用命名空间来区分不同的 XML Schema 定义。
命名空间通过 XML 文档的属性 xmlns:xsi 和 xmlns 来声明。
2. 元素:XML Schema 实例使用元素来定义 XML 文档的结构。
元素可以包含其他元素、属性和数据类型约束。
元素使用 xs:element元素来声明,并使用 name 属性指定元素的名称。
3. 属性:XML Schema 实例使用属性来定义元素的特性和约束。
属性使用 xs:attribute 元素来声明,并使用 name 属性指定属性的名称和类型。
4. 数据类型:XML Schema 实例使用数据类型来定义元素和属性的值的类型和约束。
数据类型可以是基本类型(如字符串、整数、日期等)或自定义类型。
数据类型使用 xs:simpleType 元素来声明。
5. 约束:XML Schema 实例使用约束来限制元素和属性的值的范围和格式。
约束使用 xs:restriction 元素来声明,并使用 base 属性指定所约束的数据类型。
在JMeter 中,XML Schema 断言用于验证响应数据是否符合特定的XML Schema 规范。
XML Schema 是一种描述XML 文档结构和内容的语言,它可以定义元素、属性、数据类型等,并规定了这些元素和属性的约束条件。
因此,使用XML Schema 断言可以验证响应数据是否符合所定义的格式和规范,以确保数据的准确性和可靠性。
要使用XML Schema 断言,你需要执行以下步骤:1.添加XML Schema 断言到测试计划中:在测试计划中,右键单击需要添加XML Schema 断言的HTTP 请求,然后选择“断言” -> “响应断言” -> “XML Schema”。
2.配置XML Schema 文件路径:在XML Schema 断言的“XML 校验元素”字段中输入XML Schema 文件的路径。
你可以使用本地文件系统路径或URL 形式的路径。
3.配置校验级别:在XML Schema 断言的“校验级别”字段中选择校验级别。
可选项包括:•完整性:在XML 文档的任何位置都验证整个文档。
•模式:在XML 文档中仅验证与模式匹配的部分。
•只检查语法:仅检查XML 文档的语法是否正确。
4.配置失败条件:在XML Schema 断言的“失败条件”字段中选择失败条件。
可选项包括:•断言失败:如果响应数据不符合XML Schema 规范,则断言失败。
•断言成功:如果响应数据符合XML Schema 规范,则断言成功。
5.运行测试计划:运行测试计划,并查看XML Schema 断言的结果。
如果响应数据符合XML Schema 规范,则断言成功,否则断言失败。
xsd 原理XSD(XML Schema Definition)是一种用于定义XML文档结构和数据类型的语言。
它是一种基于XML的规范,用于描述XML文档的结构和内容约束。
XSD的原理是通过定义元素和属性的结构、数据类型和约束条件来验证XML文档的有效性。
XSD的核心原理是定义XML文档的结构。
它使用元素和属性来描述XML文档的组成部分,通过定义它们的名称、类型和出现次数等属性,规定了XML文档的结构。
元素可以包含子元素,而属性是元素的附加信息。
通过定义元素和属性之间的关系,XSD可以确保XML 文档的结构是合法的。
XSD还可以定义元素和属性的数据类型。
它支持多种数据类型,包括字符串、数字、日期、布尔值等。
通过指定元素和属性的数据类型,XSD可以验证XML文档中的数据是否符合预期的格式。
例如,可以定义一个元素的数据类型为整数,那么在XML文档中该元素的值必须是一个整数,否则将被视为无效。
另一个重要的原理是XSD的约束条件。
XSD可以定义元素和属性的约束条件,以限制它们的取值范围或满足特定的条件。
例如,可以定义一个元素的取值范围在1到100之间,或者定义一个属性的取值必须是特定的枚举值。
通过定义这些约束条件,XSD可以确保XML 文档的数据满足特定的要求。
XSD的工作原理可以简单概括为以下几个步骤:1. 定义命名空间:XSD使用命名空间来避免元素和属性名称的冲突。
通过定义命名空间,可以将XSD与XML文档进行关联。
2. 定义元素和属性:XSD使用元素和属性来描述XML文档的结构。
通过定义它们的名称、类型和其他属性,可以规定XML文档的组成部分。
3. 定义数据类型:XSD支持多种数据类型,包括字符串、数字、日期、布尔值等。
通过指定元素和属性的数据类型,可以验证XML文档中的数据是否符合预期的格式。
4. 定义约束条件:XSD可以定义元素和属性的约束条件,以限制它们的取值范围或满足特定的条件。
通过定义这些约束条件,可以确保XML文档的数据满足特定的要求。
序
XML Schema
XML Schema 也是一种用于定义和描述 XML文档结构与内容的模式语言,其出现是为了克服 DTD的局限性
XML Schema VS DTD:
XML Schema符合XML语法结构。
DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
XML Schema对名称空间支持得非常好。
XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。
一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema。
编写了一个XMLSchema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
Schema入门案例 book.xsd文件
<?xml version="1.0"encoding="UTF-8" ?>
<xs:schemaxmlns:xs="/2001/XMLSchema"
targetNamespace=""
elementFormDefault="qualified">
<xs:elementname='书架' >
<xs:complexType>
<xs:sequencemaxOccurs='unbounded' >
<xs:elementname='书' >
<xs:complexType>
<xs:sequence>
<xs:elementname='书名' type='xs:string'/>
<xs:elementname='作者'type='xs:string' />
<xs:elementname='售价'type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"encoding="UTF-8"?>
<itcast:书架 xmlns:itcast=""
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation=“book.xsd">
<itcast:书>
<itcast:书名>JavaScript网页开发</itcast:书名>
<itcast:作者>redarmy</itcast:作者>
<itcast:售价>28.00元</itcast:售价>
</itcast:书>
</itcast:书架>
名称空间的概念
在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。
在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。
如:
<csdn:书架 xmlns:csdn=“”>
<itcast:书>……</itcast:书>
</csdn:书架>
此处使用csdn来指向声明的名称,以便于后面对名称空间的引用。
注意:名称空间的名字语法容易让人混淆,尽管以 http://开始,那个 URL并不指向一个包含模式定义的文件。
事实上,这个URL:根本没有指向任何文件,只是一个分配的名字。
使用名称空间引入Schema
为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:
<itcast:书架xmlns:itcast=""
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation=“book.xsd">
schemaLocation此属性有两个值。
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的XML schema的位置,两者之间用空格分隔。
注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。
使用默认名称空间
基本格式:
xmlns="URI"
举例:
<书架xmlns="/xmlbook/schema"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation=“book.xsd">
<书>
<书名>JavaScript网页开发</书名>
<作者>redarmy</作者>
<售价>28.00元</售价>
</书>
<书架>
使用名称空间引入多个XMLSchema文档
文件清单:xmlbook.xml
<?xml version="1.0"encoding="UTF-8"?>
<书架 xmlns="/xmlbook/schema"
xmlns:demo="/demo/schema"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xmlbook/schema /xmlbook.xsd
/demo/schema/demo.xsd">
<书>
<书名>JavaScript网页开发</书名>
<作者>redarmy</作者>
<售价 demo:币种=”人民币”>28.00元</售价>
</书>
</书架>
不使用名称空间引入XMLSchema文档
文件清单:xmlbook.xml
<?xml version="1.0"encoding="UTF-8"?>
<书架 xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlbook.xsd">
<书>
<书名>JavaScript网页开发</书名>
<作者>redarmy</作者>
<售价>28.00元</售价>
</书>
</书架>
在XML Schema文档中声明名称空间
<xs:schemaxmlns:xs="/2001/XMLSchema"
targetNamespace=""
elementFormDefault="qualified">
<xs:schema>
targetNamespace元素用于指定schema文档中声明的元素属于哪个名称空间。
elementFormDefault元素用于指定,该schema文档中声明的根元素及其所有子元素都属于targetNamespace所指定的名称空间。