`
junherry
  • 浏览: 95985 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml模式:了解数据类型

阅读更多

XML 模式:了解数据类型
作者:Rahul Srivastava

了解在 XML 模式 1.0 版中支持的数据类型以及如何使用它们

 

为本文提供的下载
· Oracle XML 开发人员工具包

W3C XML 模式数据类型规范为验证元素内容和属性值定义了许多数据类型。这些数据类型可以只用于验证元素的标量内容,而不验证非标量或混合内容。通常将 <opening> 和 </closing> 元素标记之间包含的文本以及属性的值称为标量数据,但它也可以是标量数据的列表。这些数据类型计划用于 XML 模式定义和其他与 XML 相关的文档。

最初,文档类型定义 (DTD) 是验证 XML 实例的唯一语法。但 DTD 仅具有几种数据类型,用以确保通过熟悉的 PCDATA、CDATA 等对 XML 中的标量数据进行粗略验证。相比而言,XML 模式通过提供 44 种内置数据类型克服了这一局限。可以进一步定制这些数据类型中的每一种来确保标量数据的精细验证。例如,可以定制内置数据类型字符串来成功验证字符串,确保它们的长度为 4。

在本文中,您将了解:

  • 支持的数据类型的值空间、词法空间和规范词法表示之间的差别
  • XML 模式中支持的数据类型,它们的类别,以及它们彼此的关系
  • 使用约束、列表和联合结构从内置数据类型创建新的数据类型
  • 用于限制数据类型的各种约束面
  • 如何使用 Oracle XDK 通过编程的方式创建和使用 XML 模式数据类型。

数据类型基础

在我们钻研各种数据类型、它们的用法和它们之间的关系之前,我们需要先了解数据类型的一般性概念。虽然 XML 模式规范说明了有关数据类型的下列基本概念,但这些概念并非 XML 模式所特有。相反,它们是一般性的数学概念。我们来更详细地介绍一下它们。

值空间和词法空间

值空间包含了给定数据类型的最大值集合。数据类型的值空间中的每一个值都由该数据类型的词法空间中的一个或多个文字来表示。词法空间是数据类型的有效文字的集合。

打个比方说:在英语(实际上在所有语言)中,我们有很多单词具有相同的意义。值可以看作是单词的意义,而相应的文字可以看作是具有相同意义的不同单词。

例如:100.0、200.0 等是数据类型 float 的值空间中的值。值 100.0 可以使用多种文字(如 10.0E+1、1.0E2、1.0E+2 等)来表示。同样,值 200.0 也可以用多种文字(如 2.0E2、2.0E+2 等)来表示。float 的值空间中的每个值的所有这些文字都属于数据类型 float 的词法空间。(请参见图 1。)

 

图 1
图 1:值空间中的值可以与词法空间中的多个文字对应。

规范词法表示

规范词法表示是数据类型的有效文字集中的一组文字,因而规范词法表示中的文字与值空间中的值之间存在一对一的映射关系。(参见图 2 和图 3。)

 

图 2
图 2:词法空间中的多个文字仅与规范词法表示中的一个文字对应。

 

图 3
图 3:从值空间到规范词法表示始终存在一对一的映射关系。

规范表示在 XML 模式中没有任何用途,但在使用 XML 模式数据类型的其他规范中非常有用。例如,XQuery/XPath 数据模型使用 XML 模式类型以及规范词法表示来序列化一个值。因此,当序列化一个值(如 100.0)时,将使用相应的规范词法表示 — 在这种情况下为 1.0E2。

XML 模式中的数据类型

现在我们了解了关于数据类型的一般性的基本概念,下面我们来深入介绍 XML 模式中提供的数据类型。一般而言,XML 模式中的数据类型可以分为 ur-Typebuilt-inuser-derived(参见下面的表 1),并且它们彼此关联(如图 4 所示)。

ur-Type anyType
anySimpleType
Built-in (Atomic) Primitive
Derived
User-Derived Restriction
List
Union
表 1:XML 模式数据类型分类

 

图 1
图 4:XML 模式支持的
数据类型之间的关系

现在,我们来更详细地介绍一下主要的类别 — ur-Type、built-in 和 user-derived。

ur-Type

ur-Type 类别表示在 XML 模式数据类型中存在整个类型系统层次结构的一个基或根。XML 模式中的任何数据类型都将 ur-Type 作为其父亲或祖先。ur-Type 的角色类似于 Java 中的 java.lang.Object,后者是 Java 中所有内置和用户定义类的基类。类似地,ur-type 是 XML 模式中的所有数据类型的基。anyTypeanySimpleType 是在 XML 模式中提供的两种 ur-type。

anyType

anyType 数据类型是一种具体的 ur-Type,根据上下文,它可以作为复杂类型(非标量数据,即元素)或作为简单类型(标量数据)来使用。例如,下面是一个使用 anyType 数据类型的 XML 模式:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" type="anyType" />

</schema>

下面是使用标量数据的相应有效实例:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex2.xsd"
xmlns="http://mydatatypes.edu">USD</Currency>

下面是相应的使用非标量数据的有效实例:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex2.xsd"
xmlns="http://mydatatypes.edu">
          
<dollars>100</dollars>
  
</Currency>

anySimpleType

anySimpleType 数据类型也是一种具体的 ur-Type,并且是所有内置数据类型的父亲和所有用户派生标量数据类型的祖先。它不同于 anyType,这是因为它只可以存放任意标量数据类型对应的标量数据,而 anyType 可以存放标量和非标量数据。例如,下面是使用一个 anySimpleType 数据类型的 XML 模式:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" type="anySimpleType" />

</schema>

下面是使用标量数据的相应有效实例:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex3.xsd"
xmlns="http://mydatatypes.edu">USD</Currency>

下面是相应的使用非标量数据的无效实例:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex3.xsd"
xmlns="http://mydatatypes.edu">
          
<dollars>100</dollars>
  
</Currency>

事实上,如果您不为元素声明指定任何类型,那么它的类型默认为 anyType;如果您不为属性声明指定任何类型,那么它的类型默认为 anySimpleType。在下面的例子中,元素 Currency 的类型默认为 anyType,属性 MoreCurrency 的类型默认为 anySimpleType

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" />
<attribute name="MoreCurrency" />

</schema>

内置数据类型

在 W3C XML 模式数据类型规范中定义的内置数据类型必须被所有遵循 W3C XML 模式规范的分析器所支持。有两种类别的内置数据类型:primitivederived。两者之间的差别与用户关系不大,但我们还是要在此介绍它们,以演示数据类型创建的机制和实用工具。(在此查看 W3C 的内置数据类型继承图。)

内置的基本数据类型

基本数据类型是不可分的。它们的定义不依赖其他数据类型;它们是独立存在的。例如,decimal 是一种严格定义的数学概念,它的定义不能依赖其他任何数据类型。XML 模式数据类型规范支持 19 种内置基本数据类型:

string
boolean
decimal
float
double
duration
dateTime
time
date
gYearMonth
gYear
gMonthDay
gDay
gMonth
hexBinary
base64Binary
anyURI
QName
NOTATION

有关详细信息,请查看 XML 模式第 2 部分的 3.2 节

内置的派生数据类型

相比而言,由于派生数据类型是从内置基本数据类型中派生的,因此是可分的 — 换句话说,派生数据类型的定义依赖于其他数据类型。例如,integer 是一种严格定义的数学概念,它可以使用 decimal 并限制不使用小数点来定义。XML 模式数据类型支持 25 种内置派生数据类型:

normalizedString
token
language
NMTOKEN
NMTOKENS
Name
NCName
ID
IDREF
IDREFS
ENTITY
ENTITIES
integer
nonPositiveInteger
negativeInteger
long
int
short
byte
nonNegativeInteger
unsignedLong
unsignedInt
unsignedShort
unsignedByte
positiveInteger

有关详细信息,请查看 XML 模式规范第 2 部分的 3.3 节

用户派生的数据类型

用户派生的数据类型是用户在 XML 模式定义中指定的、并通过 restrictionlistunion 创建的数据类型。XML 模式结构 <simpleType> 用来创建用户派生的数据类型。这种数据类型可以有具体的名称(如果用户要重用它)或者可以是匿名的(如果它只使用一次)。

因为规范目前将 listunion 归为用户派生的数据类型,所以还存在一些混乱。为清晰起见,应将它们归为用户定义的数据类型。这种混乱在 XML 模式的下一个版本中有望得到解决。

通过 Restriction 创建的用户派生数据类型

每种内置数据类型都有一组允许的约束面,可以使用它们来约束或限制这种数据类型,从而创建属于用户派生数据类型的一种新数据类型。约束面是可用在数据类型上来约束其“值空间”的一种可选属性。约束“值空间”会最终约束“词法空间”。请记住,只能限制而无法扩展数据类型的值空间。XML 模式结构 <restriction> 用于通过用允许的约束面限制现有数据类型来创建用户派生数据类型。例如,长度为 3 的字符串可以表示为:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency">
<simpleType>
<restriction base="string">
<length value="3" />
</restriction>
</simpleType>
</element>

</schema>

在上面的例子中,用约束面 length 定义了一种匿名的用户派生数据类型 — 基数据类型为 string。可以用命名的用户派生数据类型来写相同的例子,以实现可重用性:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
xmlns:tns="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" type="tns:currency_type" />

<element name="MoreCurrency" type="tns:currency_type" />

<simpleType name="currency_type">
<restriction base="string">
<length value="3" />
</restriction>
</simpleType>

</schema>

下面是 XML 模式中的 12 种约束面,可以使用它们来从其他可用内置数据类型创建用户派生数据类型。不过这些约束面可能根据基数据类型而改变:

length
minLength
maxLength
pattern
enumeration
whiteSpace
maxInclusive
maxExclusive
minExclusive
minInclusive
totalDigits
fractionDigits

用户定义的列表数据类型

在 XML 模式中,列表 是用空白(空格、制表符、回车符、换行符)分隔的一系列相似项,其中列表中的所有项都具有相同的数据类型。它与 Java 中的数组类似,后者是自描述的。

XML 模式结构 <list> 用来创建列表数据类型。例如,可以用以下方式创建一个 float 列表:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency">
<simpleType>
<list itemType="float" />
</simpleType>
</element>

</schema>

列表不一定始终是内置数据类型,它也可以是用户派生数据类型的列表。例如,基于 float 的用户派生数据类型(其值限制在 10.0 到 20.0 之间)的列表可以表示为:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency">
<simpleType>
<list>
<simpleType>
<restriction base="float">
<minInclusive value="10.0" />
<maxInclusive value="20.0" />
</restriction>
</simpleType>
</list>
</simpleType>
</element>

</schema>

要重用上面定义的列表数据类型,我们必须按如下方式命名列表数据类型:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
xmlns:tns="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" type="tns:listOfFloat" />
  
<simpleType name="listOfFloat">
<list>
<simpleType>
<restriction base="float">
<minInclusive value="10.0" />
<maxInclusive value="20.0" />
</restriction>
</simpleType>
</list>
</simpleType>

</schema>

遵循上述模式的有效实例可以包含范围在 10.0 和 20.0 之间的 float 数据类型的列表,两者都包含:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex5.xsd"
xmlns="http://mydatatypes.edu">10.0  	12.4    
15.0</Currency>

在上面的例子中,限制列表中的项仅能具有 10.0 到 20.0 之间的值,但对列表中的项数没有限制。如果我们想将列表中的项数限制在比如说 3 个,那么我们可以采用以下方式:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
xmlns:tns="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency">
<simpleType>
<restriction base="tns:listOfFloat">
<length value="3" />
</restriction>
</simpleType>
</element>
  
<simpleType name="listOfFloat">
<list>
<simpleType>
<restriction base="float">
<minInclusive value="10.0" />
<maxInclusive value="20.0" />
</restriction>
</simpleType>
</list>
</simpleType>

</schema>

下面我们使用一个约束面 — length — 来限制上面例子中列表的项数。对于从 list 数据类型中派生的数据类型而言,无论 list 的各个 itemType 的数据类型是什么,只允许使用以下这些约束面:

Length
MinLength
MaxLength
Pattern
Enumeration
WhiteSpace

用户派生的联合数据类型

联合数据类型是通过联合一个或多个其他数据类型创建的。XML 模式结构 <union> 用来创建联合数据类型。例如,intfloat 数据类型的联合可以表示为:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency">
<simpleType>
<union memberTypes="int float" />
</simpleType>
</element>

</schema>

当在实例中验证货币的值时,它首先对照数据类型 int 进行匹配。如果它不是有效的 int,那么它将对照数据类型 float 进行匹配。如果它也不是一个有效的 float,那么将出现错误。正如您所看到的那样,声明 memberTypes 的顺序确实很重要,但这只是从数据类型验证器的角度来看。从用户的角度来看,memberTypes 的顺序是根本就不重要。

list 类似,union 可以是基本数据类型和用户派生的数据类型。例如,基于 intfloat 的用户派生数据类型的联合可以表示如下:

<?xml version="1.0" encoding="US-ASCII"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mydatatypes.edu"
xmlns:tns="http://mydatatypes.edu"
elementFormDefault="qualified">
attributeFormDefault="unqualified">

<element name="Currency" type="tns:UnionOfIntFloat" />

<simpleType name="UnionOfIntFloat">
<union>
<simpleType>
<restriction base="int">
<minInclusive value="10" />
<maxInclusive value="20" />
</restriction>
</simpleType>

<simpleType>
<restriction base="float">
<minInclusive value="30.0" />
<maxInclusive value="40.0" />
</restriction>
</simpleType>
</union>
</simpleType>

</schema>

遵循上述模式的有效实例可以包含范围介于 10 和 20 之间的单个 int 或范围在 30.0 和 40.0 之间的单个 float,两者都包含:

<Currency xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mydatatypes.edu ex7.xsd"
xmlns="http://mydatatypes.edu">35.0</Currency>

当限制联合数据类型时,无论各个 memberTypes 的数据类型是什么,只允许使用以下约束面:

Pattern
Enumeration

可以混合和匹配 list、union 和 atomic 数据类型,并使用约束来根据特定需求定义数据类型。有关约束面的更多详细信息,请参见 XML 模式第 2 部分的 4.1.5 节以及 XML 模式第 0 部分的附录 B

数据类型命名空间

我们迄今为止看到的数据类型是与 XML 模式命名空间 http://www.w3.org/2001/XMLSchema 关联的,后者还具有其他 XML 模式结构(如 complexType、complexContent、group 等)。

由于编写 W3C XML 模式数据类型规范的目的不仅是专门在 XML 模式定义语言内部使用,而且还可以被其他与 XML 相关的语言使用,因此它提供了 http://www.w3.org/2001/XMLSchema — http://www.w3.org/2001/XMLSchema-datatypes — 的一个子集命名空间,该命名空间只包含了简化在其他语言中使用 XML 模式数据类型所需的数据类型、约束面等。

这种分离的优点影响了 XML 模式数据类型验证器的实施,即独立实施 XML 模式数据类型是可能的,而不是实施整个 XML 模式结构加上 XML 模式数据类型规范。

使用 Oracle XDK

除了根据 XML 模式语法验证 XML 实例外,Oracle XML 开发工具包 (XDK) 还提供了 API 来以编程的方式使用内置数据类型,使用约束面来限制它们,并根据模式来验证值。例如:

import oracle.xml.parser.schema.*;
. . .

XSDSimpleType st = XSDSimpleType.getPrimitiveType(XSDSimpleType.iSTRING);
try {
//set a constraining facet on the simpleType
st.setFacet(XSDSimpleType.LENGTH, "5");
}
catch(XSDException ex1) {
System.out.println("[ERROR] Facet not supported.
"+ex1.getMessage());
}

try {
//validate value
st.validateValue("hello");
System.out.println("[SUCCESS] The value is valid.");
}
catch(XSDException ex2) {
System.out.println("[ERROR] Invalid Value."+ex2.getMessage());

创建 string 类型的匿名数据类型,并限制它仅成功验证长度为 5 的字符串。您可以使用 XDK 模式 API 来通过编程的方式创建数据类型并限制它们。有关更多详细信息,请查看 XDK javadoc。

结论

现在您了解了 XML 模式中的数据类型以及它们的用途,这样转到定义复杂元素内容的其他 XML 模式结构上将更容易。

原文链接:http://www.oracle.com/technology/global/cn/pub/articles/srivastava_datatypes.html

分享到:
评论

相关推荐

    C# XML入门经典

    XML技术是近年来最热门的话题,并且已经广泛应用于编程领域中。 本书主要讲述了XML技术在C#中的应用,同时还介绍了XML的相关技术,如XPath、XSLT和XML Schema等。... 附录A 模式数据类型参考  附录B XSL支持

    XML高级编程pdf

    4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM ...

    XML 高级编程(高清版)

    4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM ...

    XML高级编程 (Extensible Markup Language)

    4.3.3 XML模式建议 4.4 小结 第5章 文档对象模型 5.1 什么是文档对象模型 5.1.1 XML文档结构 5.1.2 为何使用DOM 5.1.3 DOM规范 5.1.4 现实世界中的DOM 5.1.5 特殊的XML DOM实例— HTML DOM 5.2 使用DOM ...

    XML高级编程

    4.3.3 XML模式建议 109 4.4 小结 110 第5章 文档对象模型 111 5.1 什么是文档对象模型 111 5.1.1 XML文档结构 111 5.1.2 为何使用DOM 113 5.1.3 DOM规范 115 5.1.4 现实世界中的DOM 116 5.1.5 特殊的XML DOM实例— ...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML完全支持UTF-8编码和前64k个字符实体(译注:如果你不明白这句译文,可能你需要了解一下Unicode编码)。 它无法做些什么 TinyXML不解析不使用DTDs(文档类型定义)或者XSLs(可扩展样式表语言)。有其它...

    1.ASP.NET.2.0.XML.高级编程(第3版) [1/3]

    \r\n 5.1.5 使用内嵌模式验证XML \r\n 5.1.6 使用DTD \r\n 5.1.7 使用Visual Studio 2005创建XML模式 \r\n 5.1.8 .NET模式对象模型(SOM) \r\n 5.1.9 通过程序从XML文件推断XSD模式 \r\n ……\r\n第7章 用XSLT...

    excess:使XML模式更像Python

    另外, excess将使程序员可以使用标准Python数据类型,同时也可以从其XML等效内容中无缝地对其进行转换,并且还支持将对象序列化为其他数据序列化格式,例如JSON或YAML。 相关工具还包括: 尽管每种功能都很有用...

    大数据导论(1)——“大数据”相关概念、5V特征、数据类型.pdf

    因此,为了了解数据的细节,不能将数据简单按照⾮结构化数据或结构化数据进⾏处理,需要特殊 的存储(化解为结构化数据/⽤XML格式来组织并保存到CLOB字段中)和处理技术。半结构化数据包含相关标记,⽤来分隔语义...

    大数据多租户的概念-大数据是什么?带你1分钟了解大数据的概念!.pdf

    现在的数据类型不再只是格式化数据,更多的是半结构化或者⾮结构化数据,如 XML、邮件、博客、即时消息、视频、照⽚、点击流、 ⽇ 志⽂件等。企业需要整合、存储和分析来⾃复杂的传统和⾮传统信息源的数据,包括...

    DWR.xml配置文件说明书(含源码)

    因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...

    node-xmlexact:XmlExact简化了从JavaScript对象创建复杂XML文档的过程,而不会产生XML吸收

    典型的XML文档要求您了解许多过于复杂的标准(XML,XSD,WSDL,XPath等)以及本应为您提供帮助的工具,这些细节困扰您,迫使您花费更多的时间来使XML解析器/生成器,而不是真正地完成将数据与XML相互转换的工作。...

    java面试题

    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...

    LINQ 实战 1/11

    作为.NET上连接编程语言和数据库、内存对象、XML等各种类型数据之间的桥梁,LINQ引入了一种处理数据的全新理念,将查询无缝集成至开发语言之上。本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三...

    ActionScript开发人员指南中文版

    actionScript 3.0开发人员指南中文版,总共67章,955页。学习actionScript不错的书籍。 目录: 目录 ...数据类型支持 第章:SQL错误详细消息、ID和参数 第章:Adobe图形汇编语言(AGAL) AGAL字节码格式

    XQuery权威指南(简码·扫描版)

    此外,她还编写了广受好评的《Definitive XML Schema》(Prentice Hall出版社)(译者注:中文名《XML模式权威教程》)一书。最近Priscilla担任Datypic(www.datypic.com)的常务董事,在那里她专注于XML和面向服务...

Global site tag (gtag.js) - Google Analytics