在这个协作的世界中,一个人可能处理来自多个其他团体的文档,而不同的团体可能希望以不同的方式表示他们的数据元素。此外,他们还可能在一个文档中引用不同团体创建的同名元素。如何区分相同名字的不同定义呢?XML Schema 使用名称空间区分这些定义。
清单1:
-
<
element
name
=
'InvoiceNo'
type
=
'positive-integer'
/>
-
<
element
name
=
'ProductID'
type
=
'ProductCode'
/>
-
-
<
simpleType
name
=
'ProductCode'
base
=
'string'
>
-
<
pattern
value
=
'[A-Z]{1}d{6}'
/>
-
</
simpleType
>
<element name='InvoiceNo' type='positive-integer'/>
<element name='ProductID' type='ProductCode'/>
<simpleType name='ProductCode' base='string'>
<pattern value='[A-Z]{1}d{6}'/>
</simpleType>
一个给定的 XML Schema 定义了一组新名字,如元素名、类型名、属性名、属性组名,这些名字的定义和声明都写在模式中。 清单1 定义的名字包括 InvoiceNo 、 ProductID 和 ProductCode 。
1、目标名称空间
我们说模式中定义的名字属于它的 目标名称空间。名称空间本身有一个固定但没有限制的名字,必须符合 URL 语法。比如,对于 清单1 中模式片段,您可以把名称空间的名字设为: http://www.SampleStore.com/Account
。
名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL http://www.SampleStore.com/Account
根本没有指向任何文件,只是一个分配的名字。
2、源名称空间
模式中的定义和声明可能引用属于其他名称空间的名字。在本文中,我们称这些名称空间为 源名称空间。每个模式都有一个目标名称空间,但可能有多个源名称空间。名称空间的名字可能相当长,但在 XML 文档中通过 xmlns 声明可使用简写形式。
清单 2:目标名称空间和源名称空间
-
-
<
xsd
:schema
targetNamespace
=
'http://www.SampleStore.com/Account'
-
xmlns:xsd
=
'http://www.w3.org/1999/XMLSchema'
-
xmlns:ACC
=
'http://www.SampleStore.com/Account'
>
-
<
xsd
:element
name
=
'InvoiceNo'
type
=
'xsd
:positive-integer'
/>
-
<
xsd
:element
name
=
'ProductID'
type
=
'ACC:ProductCode'
/>
-
-
<
xsd
:simpleType
name
=
'ProductCode'
base
=
'xsd
:string'
>
-
<
xsd
:pattern
value
=
'[A-Z]{1}d{6}'
/>
-
</
xsd
:simpleType
>
-
</
xsd
:schema
>
<!--XML Schema fragment in file schema1.xsd
-->
<xsd
:schema targetNamespace='http://www.SampleStore.com/Account'
xmlns:xsd
='http://www.w3.org/1999/XMLSchema'
xmlns:ACC= 'http://www.SampleStore.com/Account'>
<xsd
:element name='InvoiceNo' type='xsd
:positive-integer'/>
<xsd
:element name='ProductID' type='ACC:ProductCode'/>
<xsd
:simpleType name='ProductCode' base='xsd
:string'>
<xsd
:pattern value='[A-Z]{1}d{6}'/>
</xsd
:simpleType>
</xsd
:schema>
目标名称空间 targetNamespace 的名字是 http://www.SampleStore.com/Account
,其中包含的名字有 InvoiceNo 、ProductID 和 ProductCode 。
schema 、 element 、 simpleType 、 pattern 、 string 和 positive-integer这些名字属于源名称空间http://www.w3.org/1999/XMLSchema
,通过 xmlns 声明缩写为 xsd
。
别名 xsd
没有任何特殊的地方,我们可以选择任何其他的名字。在本文后面的部分为了方便和简化起见,我们使用 xsd
代表名称空间 http://www.w3.org/1999/XMLSchema
,在一些代码片段中省略了限定符 xsd
。
在这个例子中, targetNamespace 偶尔也作为一个源名称空间,因为要使用名字 ProductCode 定义其他的名字。
3、模式的位置和使用默认名称空间
对于整个“模式的模式”, http://www.w3.org/1999/XMLSchema
,不需要指定位置,因为它的位置是人所共知的。
对于源名称空间 http://www.SampleStore.com/Account
,也不需要指定位置,因为它恰好是该文件中定义的目标名称空间。
为了更好地理解如何指定模式的位置和使用默认名称空间,看一看 清单 3中扩展的例子。
清单 3:多个源名称空间,导入一个名称空间
-
-
<
schema
targetNamespace
=
'http://www.SampleStore.com/Account'
-
xmlns
=
'http://www.w3.org/1999/XMLSchema'
-
xmlns:ACC
=
'http://www.SampleStore.com/Account'
-
xmlns:PART
=
'http://www.PartnerStore.com/PartsCatalog'
>
-
<
import
namespace
=
'http://www.PartnerStore.com/PartsCatalog'
schemaLocation
=
'http://www.ProductStandards.org/repository/alpha.xsd
'
/>
-
-
<
element
name
=
'InvoiceNo'
type
=
'positive-integer'
/>
-
<
element
name
=
'ProductID'
type
=
'ACC:ProductCode'
/>
-
-
<
simpleType
name
=
'ProductCode'
base
=
'string'
>
-
<
pattern
value
=
'[A-Z]{1}d{6}'
/>
-
</
simpleType
>
-
-
<
element
name
=
'stickyGlue'
type
=
'PART:SuperGlueType'
/>
-
</
schema
>
<!--XML Schema fragment in file schema1.xsd
-->
<schema targetNamespace='http://www.SampleStore.com/Account'
xmlns='http://www.w3.org/1999/XMLSchema'
xmlns:ACC= 'http://www.SampleStore.com/Account'
xmlns:PART= 'http://www.PartnerStore.com/PartsCatalog'>
<import namespace='http://www.PartnerStore.com/PartsCatalog' schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd
'/>
<element name='InvoiceNo' type='positive-integer'/>
<element name='ProductID' type='ACC:ProductCode'/>
<simpleType name='ProductCode' base='string'>
<pattern value='[A-Z]{1}d{6}'/>
</simpleType>
<element name='stickyGlue' type='PART:SuperGlueType'/>
</schema>
清单 3中多了一个名称空间引用: http://www.PartnerStore.com/PartsCatalog
。这个名称空间不同于 targetNamespace 和标准名称空间。因此必须使用 import 声明元素引入,该元素的 schemaLocation 属性指明包含模式的文件位置。
默认的名称空间是 http://www.w3.org/1999/XMLSchema
,它的 xmlns 声明没有名字。每个非限定的名字如 schema 和 element ,都属于默认名称空间 http://www.w3.org/1999/XMLSchema
。如果模式从一个名称空间中引用了多个名字,将其指定为默认名字空间更方便。
一个 XML 实例文档可能引用多个名称空间的元素名,这些名称空间定义在不同模式中。为了引用和简化名称空间的名字,同样要使用
xmlns 声明。我们使用 XML Schema 实例名称空间的 schemaLocation
属性指定文件的位置。要注意,该属性不同于上一个例子中 xsd
名称空间的同名属性 schemaLocation 。
清单 4:使用来自多个模式的多个名称空间的名字
-
<?
xml
version
=
"1.0"
?>
-
<
ACC:rootElement
xmlns:ACC
=
'http://www.SampleStore.com/Account'
-
xmlns:PART
=
'http://www.PartnerStore.com/PartsCatalog'
-
xmlns:xsi
=
'http://www.w3.org/1999/XMLSchema-instance'
-
xsi:schemaLocation
='http://www.PartnerStore.com/PartsCatalog http://www.ProductStandards.org/repository/alpha.xsd
-
http://www.SampleStore.com/Account http://www.SampleStore.com/repository/schema1.xsd
'>
-
<
ACC:InvoiceNo
>
123456789
</
ACC:InvoiceNo
>
-
</
ACC:rootElement
>
分享到:
相关推荐
XML Schema中命名空间的使用是非常重要的,命名空间可以使我们能够从不同的词汇表中区分定义以及声明。目标命名空间使我们能够区分在XML Schema语言词汇表中的元素声明和在一个其他的假定的化学语言词汇表中的元素...
在Java中,XML Schema的验证可以使用javax.xml.validation包,提供了独立于模式语言的验证服务接口。该包提供了三个类来验证文档:SchemaFactory、Schema和Validator。 在实际应用中,XML Schema可以用于: 1. ...
- **在应用程序中使用 XML Schema**:XML Schema 可以用于验证 XML 数据的有效性,确保其符合预期的结构和格式要求。 #### 四、XML Schema 标准 - **XML Schema 是 W3C 标准**:XML Schema 在 2001 年成为了万维网...
【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...
这可以通过编程语言中的XML解析库或XML工具实现,例如Java的JAXB,.NET框架的XmlSchema类等。 10. **学习资源**:"XMLSchema.chm"这样的帮助文档通常会详细解释XML Schema的语法、用法和示例,对于初学者来说是非常...
2. **命名空间**:XML Schema支持命名空间,这使得在同一文档中可以使用相同的名字而不引起冲突。通过使用`xmlns`属性,我们可以为元素和类型指定独特的命名空间前缀。 3. **约束和验证**:XML Schema提供了一套...
在本实验"西工大服务计算实验2-1_XML Schema"中,你的任务是编写一个程序,生成符合特定XML Schema定义的XML文档。这涉及到对XML Schema的理解、XML文档的创建以及编程技术的应用。 首先,我们需要理解XML Schema的...
模式文档通常以`.xsd`为扩展名,根元素是`<xs:schema>`,并需要声明`http://www.w3.org/2001/XMLSchema`名称空间。名称空间的使用使得XML Schema可以识别和处理具有相同名称但来自不同源的元素。 **引用模式文档** ...
6. **支持命名空间**:XML Schema 与 XML 命名空间兼容,允许在同一个文档中使用来自不同源的元素和属性,避免命名冲突。 7. **可扩展性**:由于 XML Schema 本身就是 XML,所以可以轻松地在其他 Schema 中重用或...
1. **命名空间**:XML Schema支持命名空间,使得可以在同一文档中定义多个独立的XML模式,避免了元素和属性名的冲突。 2. **数据类型**:XML Schema提供了丰富的内置数据类型,如字符串、整数、浮点数、日期等,还...
在阅读《XmlSchema_manual》这份参考手册时,你会了解到如何编写XML Schema文档,包括基本的元素和属性声明、数据类型定义、模式组合和约束设定等内容。手册还将详细介绍如何在实际应用中验证XML文档是否符合Schema...
XML Schema支持命名空间,允许在不同的组织和领域中重用元素和属性,同时它引入了数据类型系统,可以对XML元素和属性进行类型约束,如整数、日期、浮点数等。 以下是XML Schema的一些核心概念和特性: 1. **元素...
3. **命名空间支持**:XML Schema支持命名空间,这使得在不同的组织或项目中可以使用相同的元素和属性名称而不会产生冲突。 4. **复杂类型定义**:除了基本数据类型,XML Schema还支持创建复杂的元素结构,如组合...
在这个教程中,我们将深入探讨XML Schema的核心概念、优势以及如何在实际应用中使用。 1. XML Schema简介 XML Schema的主要目标是定义XML文档的合法结构,包括元素、属性、子元素的关系、顺序、数量、空值规则、...
XML Schema 内置类型是 XML 文档中使用的基本数据类型,它们可以分为基础类型和派生类型两类。基础类型是解析系统直接支持的原始类型,而派生类型是对基础类型或其他内置派生类型加以限制生成的。 基础类型 1. ...
XML 和 XML 名称空间 A basic understanding of DTD 对DTD有基本的了解 如果你想先学这些内容,请看我们主页上的的学习教程 -------------------------------------------------------------------------------...
名称空间在XML中起到了避免元素名冲突的作用,通过前缀(如`xs:`)来引用定义的名称空间。 在XML Schema中,可以定义自定义的复杂类型(complex type)和简单类型(simple type)。复杂类型可以包含其他元素和属性...
属性是附加在元素上的额外信息,XSD中使用`<attribute>`元素定义属性的名称和类型。此外,还可以使用`<attributeGroup>`来组合多个属性。 #### 七、XSD限定/Facets Facets是数据类型的一种限制条件,用于进一步...
2. **命名空间支持**:XML Schema支持命名空间,允许在同一个文档中定义多个不冲突的词汇表,从而解决了XML元素和属性名称的冲突问题。 3. **复杂类型的定义**:除了基本数据类型外,XML Schema还支持定义复杂类型...