综合摘要
XML for Analysis 是一种基于简单对象访问协议 (Simple Object Access Protocol, SOAP) 的 XML API,按照设计,专门用于对在 Web 上工作的客户端应用程序和数据提供程序之间的数据访问交互进行标准化处理。
当前,在传统数据访问技术(如 OLE DB 和 ODBC)条件下,客户端计算机上必须安装与数据提供程序服务器紧密耦合在一起的客户端组件,才能使应用程序能够访问来自数据提供程序的数据。紧密耦合的客户端组件可以基于以下内容建立相关性:特定的硬件平台、特定的操作系统、特定的接口模型、特定的编程语言以及客户端和服务器组件版本的特定匹配。
对安装客户端组件的要求和与紧密耦合结构相关的相关性不适合 Internet 环境,因为该环境是松散结合的、无状态的、跨平台的且与语言无关。要提供对 Web 应用程序的可靠数据访问,Internet、移动设备和跨平台的桌面系统需要一种标准方法,该方法并不要求将组件下载到客户端上。
可扩展标记语言 (XML) 是一种通用的且可以随处访问的语言。如果您不必调用专用的客户端组件接口就可以在不借助客户端组件的情况下调用方法并通过 XML HTTP 消息传递数据,会怎么样?如果应用程序开发人员可以在不考虑与服务器组件或应用程序的紧密耦合的情况下构建客户端组件,会怎么样? 如果利用任何编程语言编写的且可运行在任何平台上的应用程序都可以从 Web 上的任何位置访问数据,而不必考虑具体的平台支持,甚至不用考虑特定的提供程序版本,则情况会怎样呢?本规范将通过 XML for Analysis 回答这些问题。
XML for Analysis 扩展了 OLE DB 的概念,它提供了对 Web 上所有标准数据源的标准化通用数据访问,而无需对提供 COM 接口的客户端组件进行部署。XML for Analysis 专门为 Web 进行了优化,因为它极大地减少了到服务器的往复并且专门针对使用无状态的客户端请求,从而极大地提高了数据源的可伸缩性和强壮性。
本规范定义了两种方法:Discover 和 Execute,这两种方法使用并发送 XML,以发现并控制无状态数据。
本规范建立在 HTTP、XML 和 SOAP 等开放式 Internet 标准之上,不受任何具体语言或技术的限制。本规范中也讨论了 OLE DB,使已经熟悉 OLE DB 的应用程序开发人员可以了解 XML for Analysis 的映射和实现方法。这些涉及的内容还为本规范扩展出来的 OLE DB 定义提供背景信息。
读者
本规范的目标读者是应用程序开发人员,并认为他们已熟悉以下内容:
XML 知识
SOAP 知识
理解联机分析处理 (OLAP) 和数据挖掘
具有使用 OLE DB 和 OLE DB for OLAP 的经验
有关这些知识面的详细信息,请参见附录 E。
设计目的
本规范的主要目的包括:
为远程数据访问提供程序(可通用于 Internet 或 Intranet,提供多维数据)提供标准数据访问 API
优化无状态结构,不要求 Web 客户端组件,往返调用最少
支持使用任何工具、编程语言、技术、硬件平台或设备的、与技术无关的实现过程
建立在开放式 Internet 标准(如 SOAP、XML 和 HTTP)之上
利用并重复使用成功的 OLE DB 设计概念,使 OLE DB for OLAP 应用程序和 OLE DB 提供程序可轻松采用 XML for Analysis
高效使用标准数据源(如关系型 OLAP 和数据挖掘)
设计摘要
设计以基于 XML 通信的 API 为中心,该 API 称为 XML for Analysis,它定义两种通常可访问的方法:Discover 和 Execute。由于 XML 考虑到松散耦合的客户端和服务器结构,所以两种方法都以 XML 格式处理传入和传出的信息。该 API 为 Internet 进行了优化,在 Internet 中,对服务器的往返调用在时间上和资源上都是成本昂贵的,而且对数据的有状态连接将限制服务器上的用户连接数。
Discover 用于从 Web 服务获取信息和元数据。该信息可以包括一系列可用数据源和有关特定数据源的提供程序的数据。属性用于定义并描述获取哪些数据。客户端应用程序可能需要多种类型的信息,而 Discover 使您可以通过常规方式来指定这些信息。属性的这种通用接口及使用允许扩展,而不必重写现有函数。
Execute 用于针对特定的 XML for Analysis 数据源执行多维表达式 (MDX) 或其它提供程序特定的命令。下图例展示了 n 层应用程序的一种可能的实现过程。
在获得驻留 Web 服务的服务器的 URL 之后,客户端将使用 SOAP 和 HTTP 协议向服务器发出 Discover 和 Execute 调用。服务器将 XML for Analysis 提供程序实例化,用于处理 Discover 和 Execute 调用。XML for Analysis 提供程序提取数据,将其打包到 XML 中,然后将所请求的数据作为 XML 发送到客户端。
Discover 和 Execute 方法使用户可以确定在特定服务器上可以查询的内容,并据此提交要执行的命令。下例演示了 Internet 应用程序或 Web 服务如何使用这些方法。
第一部分 - XML for Analysis
XML for Analysis 简介
XML for Analysis 指定基于 SOAP 的 XML 通信 API,它支持在任何平台上使用任何语言在客户端和服务器之间进行分析数据交换。
方法
以下方法为 XML 应用程序访问服务器上的基本信息提供了一种标准方式。由于这些方法是使用 SOAP 协议调用的,所以它们以 XML 格式接受输入并发送输出。默认情况下,这些方法是无状态的,所以服务器上下文将在任何命令结束时终止。有关如何发出有状态调用的信息,请参见 XML for Analysis 中对有状态的支持。
简化接口模型具有两种方法。Discover 方法获取信息,而 Execute 方法将操作请求发送到服务器。这些方法的 XML 名称空间为 "urn:schemas-microsoft-com:xml-analysis".
在每次方法调用中,连接信息都通过连接属性提供。
Discover
Discover 方法可以用于检索信息,如服务器上的可用数据源列表或有关特定数据源的详细信息。利用 Discover 方法检索到的数据取决于传递给它的参数值。
名称空间 urn:schemas-microsoft-com:xml-analysis
SOAP 操作 "urn:schemas-microsoft-com:xml-analysis:Discover"
语法Discover (
[in] RequestType As EnumString,
[in] Restrictions As Restrictions,
[in] Properties As Properties,
[out] Result As Rowset)
参数
RequestType [in]
该参数是必需的,它由 RequestTypes 枚举值组成,决定要返回的信息的类型。Discover 方法使用 RequestTypes 枚举决定 Result 参数中所返回行集的结构和内容。Restrictions 参数的格式以及生成的 XML 结果集也取决于在该参数中指定的值。可以对该枚举进行扩展,以支持提供程序特定的枚举字符串。
每个 RequestTypes 枚举值都与一个返回行集相对应。有关行集定义,请参见 XML for Analysis 行集。需要对以下明确命名的 RequestTypes 枚举值进行支持。
枚举值
说明
DISCOVER_DATASOURCES
返回服务器或 Web 服务上可用的 XML for Analysis 数据源列表。(有关其发布方法的示例,请参见 XML for Analysis 实现过程分步说明。)
DISCOVER_PROPERTIES
返回有关所请求属性的信息和值的列表,这些被请求的属性受指定的数据源(提供程序)支持。
DISCOVER_SCHEMA_ROWSETS
返回所有受支持的 RequestTypes 枚举值(包括在这里列出的值)的名称、值和其它信息,以及任何其它提供程序特定的枚举值。
DISCOVER_ENUMERATORS
返回特定数据源提供程序所支持的名称、数据类型和枚举器的枚举值的列表。
DISCOVER_KEYWORDS
返回包含提供程序所保留关键字列表的行集。
DISCOVER_LITERALS
返回数据源提供程序所支持的直接量的信息。
Schema Rowset Constant
在给定与 OLE DB 所定义的架构行集名称之一相对应的常量(如 MDSCHEMA_CUBES)的情况下,返回 XML 格式的 OLE DB 架构行集。注意:提供程序也可能通过提供其它提供程序特定的架构行集来扩展 OLEDB。表格数据提供程序 (TDP) 和多维数据提供程序 (MDP) 应支持的架构行集列在 DISCOVER_SCHEMA_ROWSETS 行集一节中。
Restrictions [in]
该参数属于 Restrictions 数据类型,它使用户可以限制 Result 中返回的数据。Result 列是由 RequestType 参数中指定的行集定义的。某些 Result 列可以用于筛选所返回的行。有关这些列以及可以被限制的列的信息,请参见 XML for Analysis 行集中的行集表。要获取提供程序特定的架构行集的限制信息,请使用 DISCOVER_SCHEMA_ROWSETS 请求类型。
该参数必须包含在内,但可以为空。
Properties [in]
该参数属于 Properties 数据类型,它由 XML for Analysis 属性的集合构成。每个属性都可以使用户控制 Discover 方法的某一方面,如指定结果集、超时的返回格式,以及指定数据格式的区域设置。
要获取可用属性及其值,可以用 Discover 方法并使用 DISCOVER_PROPERTIES 请求类型。标准 XML for Analysis 属性的详细信息将在 XML for Analysis 属性中介绍。
列在 Properties 参数中的属性没有顺序要求。该参数必须包含在内,但可以为空。
Result [out]
该参数是必需的,它包含提供程序作为 Rowset 对象返回的结果集。
结果集的列和内容由在 RequestType 和 Restrictions 参数中指定的值决定。所返回结果集的列布局也由在 RequestType 中指定的值决定。有关与各 RequestType 值相对应的行集布局的详细信息,请参见 XML for Analysis 行集。
有关 Rowset 数据类型的详细信息,请参见 XML for Analysis 中使用的数据类型。
示例
在下面的示例中,客户端发出 XML Discover 调用,向 FoodMart 2000 目录请求多维数据集列表:
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<RequestType>MDSCHEMA_CUBES</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>
FoodMart 2000
</CATALOG_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>
Provider=MSOLAP;Data Source=local;
</DataSourceInfo>
<Catalog>
Foodmart 2000
</Catalog>
<Format>
Tabular
</Format>
</PropertyList>
</Properties>
</Discover>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
提供程序把以下结果返回到客户端:
<?xml version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<DiscoverResponse xmlns="urn:schemas-microsoft-com:xml-analysis">
<return>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- 结果的 XML 架构定义出现在这里 -->
...
</xsd:schema>
<row>
<CATALOG_NAME>FoodMart 2000</CATALOG_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
...
</row>
<row>
<CATALOG_NAME>FoodMart 2000</CATALOG_NAME>
<CUBE_NAME>Warehouse</CUBE_NAME>
...
</row>
...
</root>
</return>
</DiscoverResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Execute
Execute 方法用于向服务器发出操作请求。其中包括涉及数据传输的请求,如检索或更新服务器上的数据。
名称空间 urn:schemas-microsoft-com:xml-analysis
SOAP 操作 "urn:schemas-microsoft-com:xml-analysis:Execute"
语法Execute (
[in] Command As Command,
[in] Properties As Properties,
[out] Result As Resultset)
参数
Command [in]
该参数是必需的,它属于 Command 数据类型,由要执行的提供程序特定的语句组成。XML for Analysis 多维提供程序必须支持 mdXML 语言,但也可以根据需要支持其它命令。
Properties [in]
该参数属于 Properties 数据类型,它由 XML for Analysis 属性的集合组成。每个属性都允许用户控制 Execute 方法的某一方面,如定义连接所要求的信息、指定结果集的返回格式或指定数据格式的区域设置。
要获取可用属性及其值,可以用 Discover 方法并使用 DISCOVER_PROPERTIES 请求类型。标准 XML for Analysis 属性的详细信息将在 XML for Analysis 属性中介绍。
列在 Properties 参数中的属性没有顺序要求。该参数必须包含在内,但可以为空。
Result [out]
该参数包含提供程序所返回的 Resultset 结果。Command 参数和 Properties 参数中的值将定义结果集的形状。如果没有传递任何形状定义属性,XML for Analysis 提供程序将使用默认形状。
本规范所定义的两种结果集格式为表格式 (Tabular) 和多维式 (Multidimensional),符合客户端通过 Format 属性指定的格式。OLAP 数据使用多维格式(虽然也可以使用表格格式)。提供程序可能还支持其它行集类型,了解这些特殊类型的客户端可以对它们进行请求。
示例
以下是一个 Execute 方法调用的示例,其 <Statement> 设置为 OLAP MDX SELECT 语句:
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<Command>
<Statement>
select [Measures].members on Columns from Sales
</Statement>
<Command>
<Properties>
<PropertyList>
<DataSourceInfo>
Provider=Essbase;Data Source=local;
</DataSourceInfo>
<Catalog>Foodmart 2000</Catalog>
<Format>Multidimensional</Format>
<AxisFormat>ClusterFormat</AxisFormat>
</PropertyList>
</Properties>
</Execute>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这是对前述方法调用的简要响应:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:
SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:ExecuteResponse
xmlns:m="urn:schemas-microsoft-com:xml-analysis">
<m:return SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xars="urn:schemas-microsoft-com:xars">
...<!—数据的架构出现在这里。-- >
</xsd:schema>
... <!—MDDataSet 格式的数据出现在这里。-- >
</root>
</m:return>
</m:ExecuteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML for Analysis 中使用的数据类型
以下按字母顺序排列的列表对 XML for Analysis 数据类型进行了说明并对使用标准 XML 数据类型的数据类型进行了标注。有关 XML 架构类型的详细信息,请参见 http://www.w3.org/TR/xmlschema-2/。
Boolean
Boolean 型使用标准 XML 布尔型数据类型。
XML 布尔型数据类型用 1 表示 True(真),用 0 表示 False(假)。
Decimal
本文所述的 Decimal 型使用标准 XML 十进制数据类型。
Integer
本文所述的 Integer 型是指标准 XML 整数数据类型。
EnumString
EnumString 数据类型为给定的枚举器 (enum) 定义一组已命名常量。EnumString 使用标准 XML 字符串数据类型。每个已命名常量的具体值都是用枚举器定义指定的。
MDDataSet
MDDataSet 格式是 Execute 方法的 Result 参数可以返回的格式之一。该格式用于多维数据。用 XML 表示 OLAP 数据要求针对 OLAP 的行集(或数据集),本文对其进行了说明。MDDataSet 数据类型的 XML 名称空间为 "urn:schemas-microsoft-com:xml-analysis:mddataset".
有关 OLE DB for OLAP 数据集结构的基本信息,请参见 MDDataset 数据类型到 OLE DB 的映射。有关 MDDataSet 的完整 XML 架构定义 (XSD) 的示例,请参见附录 D。
本规范为 OLAP 结果定义以下 XML 结构。MDDataSet 由三个主要部分组成:
OLAPInfo:定义结果的结构,列出并说明将使用的坐标轴和单元格
Axes:包含在 OLAPInfo 结构中定义的坐标轴的数据
CellData:包含在 OLAPInfo 结构中定义的单元格的数据
提供程序只要不更改这里所定义架构的行为和含义,就可以在结构中添加其它批注。这种开放式内容架构模型允许从其它名称空间添加新元素和特性,但不允许更改所定义的元素和特性的语义。
OLAPInfo
为了定义结构,<OlapInfo> 首先使用 <AxesInfo> 元素(注意是复数形式 Axes)来定义坐标轴。坐标轴由一组 <AxisInfo> 元素(注意是单数形式 Axis)组成,这些元素的别名是序列化的,如 name="Axis0"。然后,维层次结构连同其属性定义一起列出。在随后的示例中,标准成员属性用 <HierarchyInfo> 元素进行表示,包括 UName、Caption、LName 和 LNum,以及非标准 DisplayInfo 元素。对于 Store 层次结构,附加的(非标准)带空格字符的成员属性用 [Store].[Store SQFT] 进行说明。
<OlapInfo>
<AxesInfo>
<AxisInfo name="Axis0">
<HierarchyInfo name="Measures">
<UName name="[Measures].[MEMBER_UNIQUE_NAME]"></UName>
<Caption name="[Measures].[MEMBER_CAPTION]"></Caption>
<LName name="[Measures].[LEVEL_UNIQUE_NAME]"></LName>
<LNum name="[Measures].[LEVEL_NUMBER]"></LNum>
<DisplayInfo name="[Measures].[DISPLAY_INFO]"></DisplayInfo>
</HierarchyInfo>
</AxisInfo>
<AxisInfo name="Axis1">
<HierarchyInfo name="Store">
<UName name="[Store].[MEMBER_UNIQUE_NAME]"></UName>
<Caption name="[Store].[MEMBER_CAPTION]"></Caption>
<LName name="[Store].[LEVEL_UNIQUE_NAME]"></LName>
<LNum name="[Store].[LEVEL_NUMBER]"></LNum>
<DisplayInfo name="[Store].[DISPLAY_INFO]"></DisplayInfo>
<Store_x0020_SQFT name="[Store].[Store Name].[Store SQFT]">
</Store_x0020_SQFT>
</HierarchyInfo>
<HierarchyInfo name="Time">
<UName name="[Time].[MEMBER_UNIQUE_NAME]"></UName>
<Caption name="[Time].[MEMBER_CAPTION]"></Caption>
<LName name="[Time].[LEVEL_UNIQUE_NAME]"></LName>
<LNum name="[Time].[LEVEL_NUMBER]"></LNum>
<DisplayInfo name="[Time].[DISPLAY_INFO]"></DisplayInfo>
</HierarchyInfo>
</AxisInfo>
OLAPInfo 结构定义的最后一项内容是单元格的属性(列定义)。这使单元格可以包含其它属性。本示例中的属性为 Value、FmtValue 和自定义的属性 FormatString。
<OlapInfo>
...
<CellInfo>
<Value name="VALUE"></Value>
<FmtValue name="FORMATTED_VALUE"></FmtValue>
<FormatString name="FORMAT_STRING"></FormatString>
</CellInfo>
HierarchyInfo 标准元素
以下标准元素是 <HierarchyInfo> 元素所要求的元素。MDSCHEMA 引用是指 OLE DB for OLAP 架构定义。
元素
说明
UName
来自 OLE DB 坐标轴行集的 MEMBER_UNIQUE_NAME 属性
Caption
来自 OLE DB 坐标轴行集的 MEMBER_CAPTION 属性
LName
来自 OLE DB 坐标轴行集的 LEVEL_UNIQUE_NAME 属性
LNum
来自 OLE DB 坐标轴行集的 LEVEL_NUMBER 属性
CellInfo 标准元素
以下是 <CellInfo> 元素的标准元素。特定查询是否能够返回这些标准元素则取决于查询本身。
元素
说明
Value
来自 OLE DB 单元格属性的 VALUE 属性
FmtValue
来自 OLE DB 单元格属性的 FORMATTED_VALUE 属性
ForeColor
来自 OLE DB 单元格属性的 FORE_COLOR 属性
BackColor
来自 OLE DB 单元格属性的 BACK_COLOR 属性
在 CellInfo 和 AxisInfo 中使用默认值
提供程序可以选择性地为 AxisInfo 或 CellInfo 部分中的单个成员或单元格属性指定默认值。如果同一属性总是具有或常常具有相同的值,可减小结果的大小。
可以选择性地将 <Default> 元素指定为某个成员属性元素或单元格属性元素的子元素,用以表示该属性的默认值。例如,如果提供程序要为 Store SQFT 指定默认值,可以这样来指定:
<Store_x0020_SQFT name="Store SQFT">
<Default>5000</Default>
</Store_x0020_SQFT>
这样,如果结果中没有某个成员属性或单元格属性,则表示该成员属性或单元格属性的值为所声明的默认值。在以下结果中,完全没有 <Store_x0020_SQFT> 元素的输出,则 <Store_x0020_SQFT> 的值为 5000(以上所定义的默认值):
<Member Hierarchy="Store">
<UName>[Store].[CA]</UName>
<Caption>CA</Caption>
<LName>[Store].[State]</LName>
<LNum>2</LNum>
</Member>
如果元素存在,但没有值,这表示空字符串结果 (""),如下例所示:
<Store_x0020_SQFT />
通常,如果属性为 NULL,将被忽略。但如果已经为属性定义了默认值,则如要为属性指定 NULL 值,应使用 XML 架构规范中的空特性,如下所示:
<Store_x0020_SQFT xsi:null='true' />
Axes
在 Axes 下,Axis 项将从零开始,按照它们在数据集中的顺序列出。AxisFormat 属性设置决定各 Axis 元素的格式。所有 XML for Analysis 提供程序都必须支持属性 AxisFormat 的以下值:
ClusterFormat
TupleFormat
CustomFormat
提供程序可以选择性地支持将 CustomFormat 值作为单独的格式。如果客户端请求 CustomFormat,提供程序可以根据判断选择返回 TupleFormat 和 ClusterFormat 格式之一。虽然提供程序必须支持上述全部三种值,但客户端可以请求其需要的格式;所以客户端可以选择不使用所有这三种可用的格式。
为什么会有不同的格式?
AxisFormat 属性的 TupleFormat 和 ClusterFormat 设置提供两种不同的表示元组的方法。MDDataset 定义赋予提供程序两种指定元组的方法:将其指定为多维元组或将其指定为笛卡尔乘积。这使客户端应用程序可以在简单性和降低空间要求之间进行选择。
坐标轴表示一个元组集,该集中的所有元组都具有相同的维数。可以用不同的方法表示该集,不同的方法有不同的优点。例如,下面的四元组集可以表示为二维元组集合或两个一维集的笛卡尔乘积。
1999
1999
2000
2000
Actual
Budget
Actual
Budget
下面的行将四元组集表示为二维元组集合:
{ ( 1999, Actual), ( 1999, Budget), ( 2000, Actual), ( 2000, Budget) }
下面的行将四元组集表示为两个一维集的笛卡尔乘积:
{ 1999, 2000 } x {Actual, Budget}
两种表示方法各具优缺点。二维元组易于客户端工具使用。一维集的笛卡尔乘积占用的空间较小,并且保留了集的多维本质。
下表列出了可以用于定义和描述坐标轴结构和成员的操作。
操作
说明
Member
表示维层次结构成员的坐标轴的最小单位
Tuple
来自不同维层次结构的成员向量
Members
来自同一维层次结构的成员对象集
Tuples
具有相同维数的元组对象集合
Union
集联合
CrossProduct
集的笛卡尔乘积
根据前面的示例,这些操作将把二维元组和一维集的笛卡尔乘积转换为如下形式。
二维元组
Tuples (
Tuple( Member(1999), Member(Actual) ),
Tuple( Member(1999), Member(Budget) ),
Tuple( Member(2000), Member(Actual) ),
Tuple( Member(2000), Member(Budget) )
)
一维集的笛卡尔乘积
CrossProduct (
Members (Member(1999), Member(2000) ),
Members (Member(Actual), Member(Budget)
)
这些操作的 XML 表示法遵循这些规则(其中 member_properties 值是指在相应的 AxisInfo 部分所定义的成员属性列表):
member : <Member> member_properties </Member>
tuple : <Tuple> member_list </Tuple>
set : <Members> member_list </Members>
set : <Tuples> tuple_list </Tuples>
set : <CrossProduct> set_list </CrossProduct>
set : <Union> set_list </Union>
member_list : member [ member ... ]
tuple_list : tuple [ tuple ... ]
set_list : set [ set ... ]
如上所示,使用不同的操作,相同的集可以有不同的表示方法。客户端可以使用 AxisFormat 属性请求具体的表示方法。
TupleFormat
在 TupleFormat 中,坐标轴表示为元组集。下列操作必须按指定的顺序使用:
<Axis>
<Tuples>
<Tuple>
<Member Hierarchy="name">
另外,<Member> 元素必须具有指定成员层次结构名称的 Hierarchy 特性。
下例说明 TupleFormat。
1999
1999
2000
Actual
Budget
Budget
<Axes>
<Axis name="Axis0">
<Tuples>
<Tuple>
<Member Hierarchy="Time">
<UName>[Time].[1999]</UName>
? </Member>
<Member Hierarchy="Category">
<UName>[Scenario].[Actual]</UName>
? </Member>
</Tuple>
<Tuple>
<Member Hierarchy="Time">
<UName>[Time].[1999]</UName>
? </Member>
<Member Hierarchy="Category">
<UName>[Scenario].[Budget]</UName>
? </Member>
</Tuple>
<Tuple>
<Member Hierarchy="Time">
<UName>[Time].[2000]</UName>
? </Member>
<Member Hierarchy="Category">
<UName>[Scenario].[Budget]</UName>
? </Member>
</Tuple>
</Tuples>
</Axis>
...
</Axes>
ClusterFormat
在 ClusterFormat 中,坐标轴表示为一组群集。每个群集都表示一个来自不同维层次结构成员的交叉乘积。提供程序将定义自己特定的群集算法。以下操作必须按指定的顺序使用:
<Axis>
<CrossProduct Size="size">
<Members Hierarchy="name">
<Member>
要将对象表示为群集,<CrossProduct> 元素必须具有 Size 特性,该特性表示 CrossProduct 中单个 Member 集乘积生成的元组数。而 <Members> 元素必须具有 Hierarchy 特性,该特性指定集中所有成员的维层次结构的名称。
交叉乘积可能包含来自单个维层次结构的成员。
以下示例对两个群集进行了说明:
1999
1999
2000
2000
2001
Actual
Budget
Actual
Budget
Budget
cluster 1
cluster 2
<Axes>
<Axis name="Axis0">
<CrossProduct Size = "4">
<Members Hierarchy="Time">
<Member>
<UName>[Time].[1999]</UName>
? </Member>
<Member>
<UName>[Time].[2000]</UName>
? </Member>
</Members>
<Members Hierarchy="Category">
<Member>
<UName>[Scenario].[Actual]</UName>
? </Member>
<Member>
<UName>[Scenario].[Budget]</UName>
? </Member>
</Members>
</CrossProduct>
<CrossProduct Size = "1">
<Members Hierarchy="Time">
<Member>
<UName>[Time].[2001]</UName>
? </Member>
</Members>
<Members Hierarchy="Category">
<Member>
<UName>[Scenario].[Budget]</UName>
? </Member>
</Members>
</CrossProduct>
</Axis>
?</Axes>
CustomFormat
CustomFormat 允许提供程序以任何以上各节中所定义的操作的有效组合来生成坐标轴,但有如下限制:
只有 <Union>、<CrossProduct>、<Members> 和 <Tuples> 元素才能作为坐标轴的第一个子项出现。
<Tuple> 元素下的 <Member> 元素必须包含 Hierarchy 特性,表示成员所属层次结构的名称。
<Members> 元素必须包含 Hierarchy 特性,表示集中所有成员的层次结构名称。
CustomFormat 最大限度地加强了提供程序的灵活性和功能,从而最优表示坐标轴。
本节是一个示例,演示提供程序将为 CustomFormat 选择返回的内容。
WA
WA
CA
CA
Umbrella(雨伞)
Umbrella(雨伞)
Sunglasses(太阳眼镜)
Sunglasses(太阳眼镜)
Actual
Budget
Actual
Budget
提供程序可以选择为 CustomFormat 结果生成以下表示法。在此例中,元组集与成员集交叉相乘。
CrossProduct(
Tuples (
Tuple ( Member(WA), Member(Umbrella) ),
Tuple ( Member(CA), Member(Sunglasses) ) ),
Members ( Member(Actual), Member(Budget) )
)
上面的理论公式可以用 XML 表示成如下形式:
<Axis name="Axis0">
<CrossProduct>
<Tuples>
<Tuple>
<Member Hierarchy="Store">
<UName>[Store].[WA]</UName>
...
</Member>
<Member Hierarchy="Product">
<UName>[Product].[Umbrella]</UName>
...
</Member>
</Tuple>
<Tuple>
<Member Hierarchy="Store">
<UName>[Store].[CA]</UName>
...
</Member>
<Member Hierarchy="Product">
<UName>[Product].[Sunglasses]</UName>
...
</Member>
</Tuple>
</Tuples>
<Members Hierarchy="Category">
<Member>
<UName>[Category].[Actual]</UName>
...
</Member>
<Member>
<UName>[Category].[Budget]</UName>
...
</Member>
</Members>
</CrossProduct>
</Axis>
CellData
Axes 部分之后是 CellData 部分,其中包含每个单元格的属性值。强制的 CellOrdinal 特性表示单元格的序数。对于 n 个单元格,CellOrdinal 的编号为从 0 到 n-1。如果所有单元格属性都为默认值(如果没有指定默认值,则默认值为 NULL),可没有单元格元素。注意,<Value> 元素的类型必须在 CellData 部分指定,而对于其它标准属性,由于其类型在架构中定义,所以无需指定类型。
<CellData>
<Cell CellOrdinal="0">
<Value xsi:type="xsd:double">16890</Value>
<FmtValue>16,890.00</FmtValue>
<FormatString>Standard</FormatString>
</Cell>
<Cell CellOrdinal="1">
<Value xsi:type="xsd:int">50</Value>
<FmtValue>50</FmtValue>
<FormatString>Standard</FormatString>
</Cell>
<Cell CellOrdinal="2">
<Value xsi:type="xsd:double">36175.2</Value>
<FmtValue>$36,175.20</FmtValue>
<FormatString>Currency</FormatString>
</Cell>
</CellData>
单元格的坐标轴引用可以根据 CellOrdinal 计算。从概念上说,单元格在数据集中的编号就如同该数据集为 p 维数组一样,其中 p 为坐标轴数。各单元格是按以行为主的顺序安排的。下图是计算单元格序号的公式。
我们将把上述公式应用于下表中显示的结果集。该查询要求在列上有四个值,而在行上有两个州和四个季度的交叉相乘。在以下数据集结果中,显示在框中的数据集结果部分的 CellOrdinal 属性为集 {9, 10, 11, 13, 14, 15, 17, 18, 19}。这是因为单元格是以行为主的顺序排列的,其开始位置为左上角单元格的零 CellOrdinal。
接着,我们将把上述公式应用于单元格 {CA, Q3, Store Cost}。坐标轴 k=0 具有 Uk=4 个成员,而坐标轴 k=1 具有 Uk=8 个元组。P 为查询中的坐标轴总数,在这里等于 2。S0 为 i=0 到 1 的初始和。对于 i=0,{Store Cost} 在坐标轴 0 上的元组序数为 1。对于 i = 1,{CA, Q3} 的元组序数为 2。
对于 i=0,Ei = 1,所以,对于 i = 0,和为 1 * 1 = 1,而对于 i=1,和为 2(元组序数)* 4(Ei 的值,按 1 * 4 计算),或 8,这样,和为 1 + 8 = 9,为该单元格的序数。
上述数据集的完整 XML 输出显示在附录 D中。
Command
Command 数据类型是一种 XML 文档类型。在本版本的 XML for Analysis 规范中,Command 数据类型仅由 <Statement> 标记组成,属于类型字符串,包含命令语句的文本。例如,带有 MDX 语句的 <Statement> 元素可以是如下的样子:
<Statement>
SELECT Measures.MEMBERS on columns from Sales
</Statement>
在以后版本的规范中,Command 数据类型的 XML 文档将超出本文档中定义的单个 <Statement> 元素。
XML for Analysis 规范要求多维提供程序支持 mdXML 语言。mdXML 语言将以 MDX 为基础;目前 mdXML 仅由 <Statement> 元素组成。对于多维提供程序,<Statement> 元素必须包含 MDX 语言语句。mdXML 以后的增强版本将会在现有 <Statement> 元素之外添加另一些元素。<Statement> 元素将继续支持把 MDX 语句作为类型字符串,即使对它进行了扩展,也会使其支持其它 XML 元素。
除了 mdXML 以后的增强版本外,MDX 语言本身是可扩展的,这样,提供程序可以对该语言进行扩展,以支持其它在基本语言集中没有提供的功能。有关 mdXML 的详细信息,请参见 MDX 和 mdXML 间的关系一节。
Properties
Properties 数据类型表示 XML for Analysis 属性的集合。各属性都由 XML 元素定义,而属性值则为 XML 元素所包含的数据。XML 元素的名称与属性的名称相对应。
各提供程序可以扩展属性集,但提供程序特定的属性名称必须是格式严谨的 XML 标记。
示例:
<PropertyList>
<DataSourceInfo>
Provider=MSOLAP;Data Source=local;
</DataSourceInfo>
<Catalog>
Foodmart 2000
</Catalog>
<Format>
Multidimensional
</Format>
</PropertyList>
Restrictions
Restrictions 数据类型表示在执行 Discover 方法的过程中,所要应用的限制的集合。Restriction 名称指定被限制的行集列的名称。Restriction 值定义列的数据。
各提供程序都可以添加新的架构行集,但要使列可以被限制,其名称必须符合 XML 格式完好性约束。
以下示例将对 MDSCHEMA_CUBES 架构行集中的列名称进行限制:
<RestrictionList>
<CATALOG_NAME>
FoodMart 2000
</CATALOG_NAME>
...
</RestrictionList>
需要时,可以用多个值对列进行限制。每个值都用 <Value> 元素表示。示例:
<RestrictionList>
<LiteralName>
<Value>DBLITERAL_QUOTE_PREFIX</Value>
<Value>DBLITERAL_QUOTE_SUFFIX</Value>
<Value>DBLITERAL_ESCAPE_UNDERSCORE_PREFIX</Value>
<Value>DBLITERAL_ESCAPE_UNDERSCORE_SUFFIX</Value>
</LiteralName>
...
</RestrictionList>
Resultset
Resultset 数据类型是一种自我说明型的 XML 结果集。它将包含的数据类型是由 XML for Analysis Format 属性表示的。
在默认情况下,XML 架构是与结果集一起返回的。可以使用 Content 属性来改变这种情况,如 XML for Analysis 属性中所述。
Rowset
在行集中嵌入的 XML 架构定义 Rowset 返回数据类型的具体结构。XML for Analysis 行集的一般结构类似于通过 FOR XML RAW 子句获取的 Microsoft® SQL Server™ 2000 行集的格式,但它是以元素为中心的,而不是以特性为中心,并且允许使用层次结构数据。
XML 不允许将特定的字符当作元素和特性的名称。XML for Analysis 支持按 SQL Server 2000 中的定义进行编码来解决这一 XML 约束。对于包含无效 XML 名称字符(根据 XML 1.0 规范)的列名称,将使用相应的十六进制值对无效的 Unicode 字符进行编码。这些值转义表示为 _xHHHH_,其中 HHHH 表示字符的四位十六进制 UCS-2 代码,高位在前。例如,名称“Order Details”的编码为 Order_x0020_Details,其中的空格字符被相应的十六进制代码替代。
编码会使可扩展样式语言 (XSL) 转换变得困难。为了支持对实际上未进行编码的列名称进行快速查找,可以将 sql:field 特性添加到 XML 行集架构中,每个特性占一列。该特性处于 "urn:schemas-microsoft-com:xml-sql" 名称空间中。
示例:
<xsd:element name="Order_x0020_Details" type="string" sql:field="Order Details" />
对于平面数据,XML for Analysis 行集格式的样子如下例所示。列名称(特定于查询)在架构中定义为元素名称。各行由一对 <row> 标记包围起来:
对于层次结构数据(或嵌套行集),如由进行数据挖掘的 OLE DB 查询返回的数据,XML for Analysis 行集格式的样子如下例所示。行的结构没有改变,但数据特定的架构将定义包含嵌套数据的元素子类型。在此例中,嵌套元素是 <NODE_DISTRIBUTION>.
String
String 类型与标准 XML 字符串数据类型相对应。
UnsignedInt
UnsignedInt 数据类型与 XML 无符号整数架构类型相对应。
XML for Analysis 行集
Discover 方法的 Result 参数中返回的信息的结构是根据本节中所详述的行集列布局确定的。
以下行集中所述的所有列都是必需的,并且这些列必须按显示的顺序返回。但是,可以将其它列(不需要这些列的客户端应忽略它们)添加在末尾,对于不适用的信息,某些列可以包含空数据。
以下各节将对各行集进行说明。各节都包含一个表,其中提供有关各列的以下信息。
列标题
内容
列名称
输出行集中列的名称。
类型
列的数据类型的说明。有关 XML for Analysis 支持的数据类型的详细信息,请参见 XML for Analysis 中使用的数据类型。
说明
列用途的简要说明。
限制
表示是否可以用列来限制返回的行集(方法是通过包含 Discover 方法的 Restrictions 参数)。“是”表示将列用作 Restrictions 项来按此字段筛选结果。
是否可以为空
表示是否必须返回数据或当列不适用时是否允许空字符串。“是”表示允许为空,并且数据是可选的。“否”则表示数据是必需的。
DISCOVER_DATASOURCES 行集
当使用 RequestType 参数中的 DISCOVER_DATASOURCES 枚举值调用 Discover 方法时,该方法将在 Result 参数中返回 DISCOVER_DATASOURCES 行集。这种请求类型将从应用程序 Web 服务器的 URL 返回一个已发布数据源的列表(以一种实现特定的方式),使客户端可以选择要连接的数据源。
列名称
类型
说明
限制
是否可以为空
DataSourceName
string
数据源的名称,如 FoodMart 2000。
是
否
DataSourceDescription
string
数据源的说明,由发布者输入。
否
是
URL
string
显示为该数据源调用 XML for Analysis 方法的位置的唯一路径。
是
是
DataSourceInfo
string
包含连接到数据源所要求的所有其它信息的字符串。该字符串可以包含提供程序的 Initial Catalog 属性或其它信息。
示例: "Provider=MSOLAP;Data Source=Local;"
否
是
ProviderName
string
数据源之后的提供程序的名称。
示例: "MSDASQL"
是
是
列名称
(续)
类型
(续)
说明
(续)
限制
(续)
是否可以为空
(续)
ProviderType
array
提供程序所支持的数据类型。可以包括以下类型中的一个或多个。在本表之后包括一个示例。
TDP:表格数据提供程序。
MDP:多维数据提供程序。
DMP:数据挖掘提供程序。DMP 提供程序实现 OLE DB for Data Mining 规范。
是
否
列名称
(续)
类型
(续)
说明
(续)
限制
(续)
是否可以为空
(续)
AuthenticationMode
EnumString
有关数据源使用的安全模式类型的规范。其值可以为以下之一:
Unauthenticated:不必发送用户 ID 或密码。
Authenticated:连接要求的信息中必须包含用户 ID 和密码。
Integrated:数据源使用基础安全性来决定授权,如 Microsoft Internet Information Services (IIS) 提供的集成安全性。
是
否
提供程序支持的每个类型在 ProviderType 数组中都有对应的元素。例如,支持 TDP、MDP 和 DMP 的提供程序将生成以下数组:
<ProviderType><MDP/><TDP/><DMP/></ProviderType>
DISCOVER_PROPERTIES 行集
当使用 RequestType 参数中的 DISCOVER_PROPERTIES 枚举值调用 Discover 方法时,该方法将在 Result 参数中返回 DISCOVER_PROPERTIES 行集。这种请求类型将返回有关 XML for Analysis 提供程序支持的标准属性和提供程序特定属性的信息。提供程序不支持的属性不列在返回结果集中。
列名称
类型
说明
限制
是否可以为空
PropertyName
string
属性的名称。
是,当作数组对待
否
PropertyDescription
string
对该属性的说明,说明文字可以本地化。
否
是
PropertyType
string
属性的 XML 数据类型。
否
是
PropertyAccessType
EnumString
属性的访问方式。该值可以为 Read、Write 或 ReadWrite。
否
否
IsRequired
boolean
要求属性则为真,不要求则为假。
否
是
Value
string
属性的当前值。
否
是
DISCOVER_SCHEMA_ROWSETS 行集
当使用 RequestType 参数中的 DISCOVER_SCHEMA_ROWSETS 枚举值调用 Discover 方法时,它将在 Result 参数中返回 DISCOVER_SCHEMA_ROWSETS 行集。这种请求类型将检索提供程序支持的所有 RequestTypes 枚举值的列表。
列名称
类型
说明
限制
是否可以为空
SchemaName
string
架构/请求的名称。它将在 RequestTypes 枚举中返回值,包括提供程序支持的所有其它类型。提供程序将为其它类型定义行集结构。
是
否
Restrictions
array
提供程序支持的限制数组。示例在本表后面。
否
是
Description
string
对架构的说明,可以本地化。
否
是
对于支持对 DBSCHEMA_MEMBERS 架构行集实行三种限制的提供程序来说,限制数组中返回的结果可能类似于以下示例。元素是指架构中的列名称。
<Restrictions>
<RestrictionList>
<CATALOG_NAME type="string" />
<SCHEMA_NAME type="string" />
<CUBE_NAME type="string" />
</RestrictionList>
</Restrictions>
下表给出了 XML for Analysis 表格数据提供程序和多维数据提供程序所要求的 OLE DB 架构行集。在一些情况下,架构行集中的某些列( 是 OLE DB for OLAP 提供程序所要求的列)对于 XML for Analysis 提供程序来说,是可选的。在下表中,这些可选的架构行集都用星号 (*) 标示出来;可选列的详细信息列在本表的后面。
OLE DB 架构行集
要求的提供程序
说明
DBSCHEMA_CATALOGS
TDP、MDP、DMP
可用于提供程序服务器实例的目录
DBSCHEMA_COLUMNS
TDP、DMP
对表的列的枚举
DBSCHEMA_PROVIDER_TYPES
TDP、DMP
对提供程序支持的基本数据类型的枚举
DBSCHEMA_TABLES
TDP、DMP
对目录中表的枚举
DBSCHEMA_TABLES_INFO
TDP、DMP
对目录中表的枚举
MDSCHEMA_ACTIONS
MDP
对可用操作的枚举
MDSCHEMA_CUBES
MDP
对目录中多维数据集的枚举
MDSCHEMA_DIMENSIONS
MDP
对所有多维数据集维的枚举
MDSCHEMA_FUNCTIONS*
MDP
对提供程序支持的 MDX 函数的枚举
MDSCHEMA_HIERARCHIES*
MDP
对所有维中层次结构的枚举
MDSCHEMA_MEASURES
MDP
对所有多维数据集中值的枚举
MDSCHEMA_MEMBERS*
MDP
对所有多维数据集的所有维中的所有成员的枚举
MDSCHEMA_PROPERTIES*
MDP
对可用于单元格和成员的用户定义的属性的枚举
MDSCHEMA_SETS
MDP
对目录中可用集的枚举。
上表中用星号 (*) 标记的架构行集具有这样一些列:这些列虽然对于 OLE DB for OLAP 提供程序来说是必需的,但对于 XML for Analysis 提供程序来说,则是可选的。这些可选列列在下表中。
OLE DB 架构行集
OLE DB 要求的但对于
XML for Analysis 提供程序来说为可选的列
MDSCHEMA_FUNCTIONS
ORIGIN、INTERFACE_NAME
MDSCHEMA_HIERARCHIES
STRUCTURE
MDSCHEMA_MEMBERS
LEVEL_UNIQUE_NAME、LEVEL_NUMBER、PARENT_LEVEL
MDSCHEMA_PROPERTIES
LEVEL_UNIQUE_NAME
XML for Analysis MDP 提供程序并不要求 OLE DB for OLAP 的 MDSCHEMA_LEVELS 架构行集,虽然提供程序可以有选择地支持它。这样,引用其它架构行集中级别的列也就变成可选的了,如上所述。这是因为,不同的多维提供程序在使用术语“级别”时,其意义是不同的(某些提供程序从上到下进行编号,而另一些则从下到上进行编号)。在本规范以后的版本中,将会添加更多各级别的架构行集。
DISCOVER_ENUMERATORS 行集
当 使用 RequestType 参数中的 DISCOVER_ENUMERATORS 枚举值调用Discover 方法时,它将在 Result 参数中返回 DISCOVER_ENUMERATORS 行集。这种请求类型将查询提供程序支持的枚举器,包括数据类型和值。通过支持这种请求,提供程序将发布它可以识别的所有枚举常量。
每个枚举器都有多个元素,各元素都对应枚举中的一个值。表示这种情况的行集都是平面的,对于属于同一枚举的各元素,枚举器的名称可能会重复。
列名称
类型
说明
限制
是否可以为空
EnumName
string
包含一系列值的枚举器的名称。
是,当作数组对待
否
EnumDescription
string
对枚举器的说明,可以本地化。
否
是
EnumType
string
枚举值的数据类型。
否
否
ElementName
string
枚举器集中一个值元素的名称。
示例:TDP
否
否
ElementDescription
string
对元素的说明(可选),可以本地化。
否
是
ElementValue
string
元素的值。
示例:01
否
是
DISCOVER_KEYWORDS 行集
当使用 RequestType 参数中的 DISCOVER_KEYWORDS 枚举值调用 Discover 方法时,它将在 Result 参数中返回 DISCOVER_KEYWORDS 行集。这种请求类型将列出提供程序保留的关键字。
每个返回的关键字都是 DISCOVER_KEYWORDS 行集中的一行。
列名称
类型
说明
限制
是否可以为空
Keyword
string
提供程序所保留的所有关键字的列表。
示例:AND
是,当作数组对待
否
DISCOVER_LITERALS 行集
当使用 RequestType 参数中的 DISCOVER_LITERALS 枚举值调用 Discover 方法时,它将在 Result 参数中返回 DISCOVER_LITERALS 行集。这种请求类型将向提供程序查询有关支持的直接量的信息,包括数据类型和值。
每个返回的直接量都是 DISCOVER_LITERALS 行集中的一行。
列名称
类型
说明
限制
是否可以为空
LiteralName
string
行中描述的直接量的名称。
示例:DBLITERAL_LIKE_PERCENT
是,当作数组对待
否
LiteralValue
string
包含实际的直接量值。
例如,如果 LiteralName 为 DBLITERAL_LIKE_PERCENT,并在 LIKE 子句中使用百分号字符 (%) 匹配零个或多个字符,该列的值将为“%”。
否
否
LiteralInvalidChars
string
直接量中的无效字符。
例如,如果表名称不能包含数字字符,则此字符串应为“0123456789”。
否
是
LiteralInvalidStartingChars
string
不能作为直接量第一个字符的字符。如果直接量的第一个字符可以是任何有效字符,则此字符串应为空。
否
是
LiteralMaxLength
integer
直接量的最大字符数。如果没有最大字符数限制或最大字符数限制未知,其值为 –1。
否
是
XML for Analysis 属性
本节将对 XML for Analysis 要求的属性进行说明。
列
内容
Name
属性的名称。
Type
属性的数据类型。有关本规范中数据类型的详细信息,请参见 XML for Analysis 中使用的数据类型。
R/W
属性的读/写行为。
默认值
属性的默认值。
用法
可以使用属性的方法(如果适用,还包括 RequestType)。
说明
属性行为的基本说明。
下表显示了每项属性的具体信息。
名称
类型
R/W
默认值
用法
说明
AxisFormat
Enumeration
W
Execute 方法
客户端要求通过以下方式之一将 MDDataSet 轴格式化:TupleFormat、ClusterFormat、CustomFormat。
BeginRange *
int
W
-1
Execute 方法
对应于 CellOrdinal 的整数值,用于将命令返回的 MDDataSet 限制为特定范围的单元格。与 EndRange 属性结合使用。如果未指定,则在行集中返回所有单元格。 值 -1 表示未指定。
名称
(续)
类型
(续)
R/W
默认值
(续)
用法
(续)
说明
(续)
Catalog
string
R/W
空字符串
Discover 方法
Execute 方法
指定要进行连接的初始目录或数据库。
Content
EnumString
W
SchemaData
Discover 方法
Execute 方法
一种枚举器,用于指定结果集中返回的数据的类型。
None:允许校验命令的结构,但不执行命令。类似于使用 Prepare 来检查语法,等等。
Schema:包含与所请求的查询相关的 XML 架构(用于指明列信息等)。
Data:仅包含所请求的数据。
SchemaData:返回架构信息和数据。
DataSourceInfo
string
R/W
空字符串
Discover 方法
Execute 方法
包含提供程序特定信息的字符串,在访问数据源时需要。
名称
(续)
类型
(续)
R/W
默认值
(续)
用法
(续)
说明
(续)
EndRange *
int
W
-1
Execute 方法
对应于 CellOrdinal 的整数值,用于将命令返回的 MDDataSet 限制为特定范围的单元格。与 BeginRange 属性结合使用。如果未指定,则在行集中返回所有单元格。 值 -1 表示未指定。
Format
EnumString
W
对于 Discover 方法为 Tabular;对于 Execute 方法为 Multidimensional
Discover 方法
Execute 方法
用于确定返回结果集格式的枚举器。这些值包括:
Tabular:平面行集或分层行集。与 SQL 中的 XML RAW 格式类似。对于 OLE DB for Data Mining 命令,Format 属性应设置为 Tabular。
Multidimensional:指明结果集将使用 MDDataSet 格式(仅对于 Execute 方法)。
名称
(续)
类型
(续)
R/W
默认值
(续)
用法
(续)
说明
(续)
LocaleIdentifier
unsignedInt
R/W
无
Discover 方法
Execute 方法
它用于读取或设置此请求的数字区域设定标识符。默认值与提供程序相关。
要获得完整的十六进制语言标识符列表,请在 MSDN® Library 中搜索“Language Identifiers”,其地址为 http://www.msdn.microsoft.com(英文)。
MDXSupport
EnumString
R
Core
Discover 方法
说明 MDX 支持级别的枚举。在初始版本中,Core 是枚举中唯一的值。在以后的版本中,将为此枚举定义其它值。
Password
string
W
空字符串
Discover 方法
Execute 方法
客户端可以用来提供连接所需的任何密码信息的字符串。
ProviderName
string
R
空字符串
Discover 方法
XML for Analysis 提供程序的名称。
ProviderVersion
string
R
空字符串
Discover 方法
XML for Analysis 提供程序(实现)的版本号。版本值应该是 4 部分格式,每个部分以小数点分隔。
名称
(续)
类型
(续)
R/W
默认值
(续)
用法
(续)
说明
(续)
StateSupport
EnumString
R
无
Discover 方法
用于指定提供程序中状态支持级别的属性。有关 XML for Analysis 中的状态的信息,请参见 XML for Analysis 中对有状态的支持。枚举值至少包括:
None - 不支持会话或有状态操作。
Sessions - 提供程序支持会话。
Timeout
UnsignedInt
R/W
未定义
Discover 方法
Execute 方法
以秒为单位的数字超时值,用于指定等待连接成功的时间量。
UserName
string
R/W
空字符串
Discover 方法
Execute 方法
包含连接所需的用户名的字符串。
* 单元格坐标的范围值从 0(零)开始。–1 表示未定义,或者某个范围中的所有值。
下表包含范围值对及其行为的示例。通常,以下条件必须为真才能返回结果集:BeginRange <= EndRange。如果 BeginRange > EndRange,则该范围无效且不会返回结果。
BeginRange
EndRange
行为
-1
-1
所有单元格或行。这是默认行为。
0
-1
从第一个(即第 0 个)开始到未定义(即数据集末端)的所有单元格或行。
15
-1
返回从单元格 15 到数据集末端的单元格或行。
-1
0
作为范围中第一项的第一个单元格未定义(或为全部),并且末项是第 0 个元素。
15
50
返回范围为 OLAP 单元格 15 到 50(包含这两个单元格)。BeginRange <= EndRange。
2
1
由于范围无效(开始值大于结束值),将不会返回单元格。BeginRange > EndRange。
XML for Analysis 中的错误处理
错误的类型不同,处理的方式也不同。可能发生以下类型的错误:
执行方法调用失败
执行方法调用成功,但带有错误或警告
执行方法调用成功,但结果集中包含错误
执行方法调用失败是通过 SOAP Fault 消息来报告的。当发生这种情况时,不会返回“结果”。如果方法在完成时带有错误或警告,这些错误和警告将随“结果”一起返回给客户端。
MDDataSet 错误示例
与“结果”中单元格或数据相关的错误嵌在结果集的适当位置中。XML for Analysis 中使用的数据类型中的“MDDataSet”包含了 MDDataSet 数据类型。 下面是 MDDataSet 中包含错误时结果的示例:
<CellData>
...
<Cell CellOrdinal="10">
<Value>
<Error>
<ErrorCode>2148497527</ErrorCode>
<Description>Security Error.</Description>
</Error>
</Value>
</Cell>
</CellData>
SOAP 错误示例
与此规范相关的 SOAP 错误代码以“XMLForAnalysis”开头,后面是一个句点和十六进制的 HR 结果代码。例如,错误代码“0x80000005”将格式化为“XMLForAnalysis.0x80000005”。
有关 SOAP 错误格式的详细信息,请参见 http://www.w3.org/TR/SOAP/#_Ref477795996(英文)。
下表显示了 SOAP 响应的“详细信息”部分所包含的 XML for Analysis 错误代码信息。各列为 SOAP 错误的详细信息部分中错误的特性。
列名称
类型
说明
是否可以为空
ErrorCode
UnsignedInt
指明方法成败与否的返回代码。注意:十六进制值必须转换为 Unsignedint 值。
否
Description
String
生成错误的组件所返回的错误文本和说明。
是
Source
String
生成错误的组件的名称。
是
HelpFile
String
说明错误的帮助文件或主题的路径或 URL。
是
下面是一个失败的方法调用的 SOAP 错误示例:
<?xml version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Fault>
<faultcode>XMLAnalysisError.0x80000005</faultcode>
<faultstring>XML for Analysis 提供程序遇到错误</faultstring>
<faultactor>XML for Analysis Provider</faultactor>
<detail>
<faultstring>
<Error
ErrorCode="2147483653"
Description="出现意外的错误。"
Source="XML for Analysis Provider"
HelpFile=""
/>
</faultstring>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Envelope>
XML for Analysis 中对有状态的支持
默认情况下,XML for Analysis 是无状态的。(无状态是这样一种情况,即服务器在完成方法调用后不记住客户端的标识或上下文)。为了支持有状态(即服务器在两次方法调用之间保留客户端标识和上下文的情况),为提供程序提供了对会话的支持。对于一系列应一起执行的语句,会话非常有用。示例之一就是创建将在后继查询中使用的已计算成员。
提供程序对会话的支持是可选的。客户端可以通过用 Discover 方法检查 XML for Analysis 属性 StateSupport 的值来测试支持。使状态发生的最小值为 Sessions。有关 StateSupport 属性的详细信息,请参见 XML for Analysis 属性。
通常,会话遵从 OLE DB 规范所规定的行为,如下所示:
会话定义事务和命令上下文的范围。
多个命令可以在单个会话的上下文中执行。
对 XML for Analysis 上下文中事务的支持是通过用 Execute 方法发送的提供程序特定命令来处理的。
XML for Analysis 定义了一种支持 Web 环境中的状态(会话)的方法,其模式与分布式创作和版本控制 (Distributed Authoring and Versioning, DAV) 协议使用的方法类似,以实现在松散耦合环境中的锁定。在提供程序可以出于各种原因(如超时或连接错误)使会话过期这一方面,此规范与 DAV 相似。这也意味着 Web 服务必须识别并准备好处理已中断且必须重新开始的各组命令。
SOAP 规范建议使用 SOAP 标头在 SOAP 消息的顶部构建新协议。下表列出了 XML for Analysis 为初始化、维护和关闭会话而定义的 SOAP 标头元素和特性。
SOAP 标头
说明
BeginSession
请求提供程序创建新会话。提供程序应通过构造新会话并返回该会话 ID 作为 SOAP 响应中 Session 标头的一部分来进行响应。
SessionID
值区域包含会话 ID。在会话的其余部分中,每次方法调用都必须使用此 ID。提供程序在 SOAP 响应中发送此标记,并且客户端也必须在每个 Session 标头元素中发送此特性。
Session
对于每个要在会话中发生的方法调用,必须使用此标头,并且必须在标头的值区域中包括会话 ID。
EndSession
要终止会话,请使用此标头。值区域中必须包括会话 ID。
下面的示例显示了支持会话的方法:
要开始会话,可将 SOAP 中的 BeginSession 标头添加到来自客户端的出站 XML for Analysis 方法调用中。值区域最初为空白,因为此时尚不知道会话 ID。<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<XA:BeginSession
xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
xsi:type="xsd:int"
mustUnderstand="1"/>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
...<!-- 此处是 Discover 或 Execute 调用。-->
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
来自提供程序的 SOAP 响应消息使用 XML for Analysis 标头标记 <SessionID> 在返回标头区域中包括会话 ID 。<SOAP-ENV:Header>
<XA:Session
xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
SessionID="581"/>
</SOAP-ENV:Header>
对于会话中的每次方法调用,必须添加 Session 标头,它包含提供程序返回的会话 ID。<SOAP-ENV:Header>
<XA:Session
xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
mustUnderstand="1"
SessionID="581"/>
</SOAP-ENV:Header>
当会话完成后,将使用 <EndSession> 标记,它包含相关会话 ID 的值。<SOAP-ENV:Header>
<XA:EndSession
xmlns:XA="urn:schemas-microsoft-com:xml-analysis"
xsi:type="xsd:int"
mustUnderstand="1"
SessionID="581"/>
</SOAP-ENV:Header>
会话 ID 并不保证会话仍然有效。如果会话过期(例如会话超时或连接丢失),提供程序可以选择结束或回退该会话的操作。这样,客户端对会话 ID 的所有后继方法调用都将失败,并报告表示会话无效的错误。客户端将处理此情况并且必须准备从头开始重新发送会话方法调用。
将 XML for Analysis 用于数据挖掘
XML for Analysis 的 Execute 方法支持数据挖掘命令的执行。数据挖掘命令支持与提供程序相关。如果结果以 MDDataSet 或 Tabular 形式返回,也可以通过 Execute 接口来支持数据挖掘命令。要支持 Tabular 结果,至少需要数据挖掘提供程序。
例如,通过 XML for Analysis API 访问 OLE DB for Data Mining 信息与从关系数据源获得数据存在很大的差异。OLE DB for Data Mining 命令的结果是平面行集或分层排列的平面行集。对于 OLE DB for Data Mining 命令,Format 属性应设置为 Tabular。
XML for Analysis 提供程序并不一定支持 OLE DB for Data Mining 特定的命令。支持 OLE DB for Data Mining 的提供程序将通过将 ProviderType 中的数组元素之一设置为 DMP 来标识它们自己。
第二部分 – 附录
本节包括其它主题和相关信息,以帮助您理解和实现此规范。
附录 A:实现注意事项
本附录讨论实现的注意事项。
XML for Analysis 实现过程分步说明
为了更好地说明如何使用 XML for Analysis API,本部分提供了一个简单的客户端/服务器交互的分步说明。它包括实现如何获得数据源列表。
该分步说明中的步骤将详细说明客户端如何与服务器进行通信,以获得一个数据源列表并使用其中一个数据源来运行 OLAP 查询。
下面的批注指示哪些步骤表示规范,哪些步骤是实现的示例:
(I) 该步骤是实现的示例。
(S) 所显示的步骤是按此规范的规定实现的一个项目。
查找一个 XML for Analysis 服务
(I) 客户端应用程序发现一个支持 Web 服务的服务器 URL。通过浏览通用描述、发现和集成 (Universal Description, Discovery, and Integration, UDDI) 业务登记表即可找到该 URL。
(I) 客户端向该 URL 发送请求,以查明它是否支持 XML for Analysis Web 服务(如使用发现协议 (Discorery Protocol, DISCO))。
(I) DISCO 返回 XML for Analysis Web 服务的 WSDL 文件的 URL(如 XMLAnalysis.wsdl)。
(I) 客户端发送对 WSDL 文件的请求。
(I) Web 服务器发回 XMLAnalysis.wsdl,它定义支持的方法:Discover 和 Execute。
(I) 客户端通过 WSDL 确认客户端和服务器都使用相同的方法。
(I) WSDL 文件包含应该用于 XML for Analysis Web 服务的 URL(如 XMLAnalysis.asp)。
下面是服务可能为 XML for Analysis 返回的 WSDL 的示例:
<?xml version='1.0' encoding='UTF-8' ?>
<!-- 由 Microsoft SOAP Toolkit WSDL File Generator(版本 1.1)于 02/08/01 生成 -->
<definitions name ='MSXmlAnalysis' targetNamespace =
'http://schemas.microsoft.com/xmla/MSXmlAnalysis/wsdl'
xmlns:wsdlns='http://schemas.microsoft.com/xmla/MSXmlAnalysis/wsdl'
xmlns:typens='http://schemas.microsoft.com/xmla/MSXmlAnalysis/type'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2000/10/XMLSchema'
xmlns:stk='http://schemas.microsoft.com/soap-toolkit/wsdl-extension'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<types>
<schema targetNamespace='urn:schemas-microsoft-com:xml-analysis'
xmlns='http://www.w3.org/2000/10/XMLSchema'>
</schema>
</types>
<message name='XmlAnalysis.Execute'>
<part name='Command' type='xsd:xmldom'/>
<part name='Properties' type='xsd:xmldom'/>
</message>
<message name='XmlAnalysis.ExecuteResponse'>
<part name='return' type='xsd:xmldom'/>
</message>
<message name='XmlAnalysis.Discover'>
<part name='RequestType' type='xsd:string'/>
<part name='Restrictions' type='xsd:xmldom'/>
<part name='Properties' type='xsd:xmldom'/>
</message>
<message name='XmlAnalysis.DiscoverResponse'>
<part name='return' type='xsd:xmldom'/>
</message>
<portType name='XmlAnalysisSoapPort'>
<operation name='Execute' parameterOrder='Command Properties'>
<input message='wsdlns:XmlAnalysis.Execute' />
<output message='wsdlns:XmlAnalysis.ExecuteResponse' />
</operation>
<operation name='Discover' parameterOrder='RequestType Restrictions
Properties'>
<input message='wsdlns:XmlAnalysis.Discover' />
<output message='wsdlns:XmlAnalysis.DiscoverResponse' />
</operation>
</portType>
<binding name='XmlAnalysisSoapBinding' type='wsdlns:XmlAnalysisSoapPort' >
<stk:binding preferredEncoding='UTF-8'/>
<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http' />
<operation name='Execute' >
<soap:operation soapAction='urn:schemas-microsoft-com:xml-analysis:Execute' />
<input>
<soap:body use='encoded' namespace='urn:schemas-microsoft-com:xml-analysis'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
</input>
<output>
<soap:body use='encoded' namespace='urn:schemas-microsoft-com:xml-analysis'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
</output>
</operation>
<operation name='Discover' >
<soap:operation soapAction='urn:schemas-microsoft-com:xml-analysis:Discover' />
<input>
<soap:body use='encoded' namespace='urn:schemas-microsoft-com:xml-analysis'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
</input>
<output>
<soap:body use='encoded' namespace='urn:schemas-microsoft-com:xml-analysis'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
</output>
</operation>
</binding>
<service name='MSXmlAnalysis' >
<port name='XmlAnalysisSoapPort' binding='wsdlns:XmlAnalysisSoapBinding' >
<soap:address location='http://localhost/xmla/msxisapi.dll' />
</port>
</service>
</definitions>
获取数据源
(S) 客户端查找 OLAP 数据源,方法是使用从上面获得的 URL 和方法信息发送 RequestType DISCOVER_DATASOURCES 的 Discover 调用。在 Restrictions 参数中,它为 ProviderType 指定 MDP(多维数据)。
(I) 已发布数据源的列表在服务器上是一个 XML 文件,它由应用程序管理员来维护。XMLAnalysis.asp 检索 XML 文档,并将它发送到客户端应用程序。
(I) 客户端分析行集,并选择要使用的数据源。如果为数据源列出的 URL 与初始 Discover 方法所使用的第一个 URL 不同,那么要使后面所有的 Discover 和 Execute 调用可以处理该数据源中的数据,必须使用第二个数据源特定的 URL。
使用数据源
(S) 客户机将 Discover 命令发送到所选的 OLAP 数据源。要获得所有可用多维数据集列表,请使用 RequestType MDSCHEMA_CUBES。限制包括用于搜索 FoodMart 2000 的数据库的名称。连接提供程序所需的信息包含在 Properties 参数中。
下面是为此调用从客户端发送的 XML 的示例:SOAPAction: "urn:schemas-microsoft-com:xml-analysis:Discover"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<RequestType>MDSCHEMA_CUBES</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>
FoodMart 2000
</CATALOG_NAME>
</RestrictionList>
</Restrictions>
<Properties>
<PropertyList>
<DataSourceInfo>
Provider=MSOLAP;Data Source=local;
</DataSourceInfo>
<Catalog>
Foodmart 2000
</Catalog>
</PropertyList>
</Properties>
</Discover>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(I) XML for Analysis 提供程序处理该请求并将它发送到 OLAP 数据源。当收到可用的多维数据集数据后,提供程序将它打包成 XML 并将它发送回提出请求的客户端应用程序。
下面是从服务器发回的带有数据的 XML 示例:<?xml version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<DiscoverResponse xmlns="urn:schemas-microsoft-com:xml-analysis">
<return>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- 结果的 XML 架构定义出现在这里 -->
...
</xsd:schema>
<row>
<CATALOG_NAME>FoodMart 2000</CATALOG_NAME>
<CUBE_NAME>Sales</CUBE_NAME>
...
</row>
<row>
<CATALOG_NAME>FoodMart 2000</CATALOG_NAME>
<CUBE_NAME>Warehouse</CUBE_NAME>
...
</row>
...
</root>
</return>
</DiscoverResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(S) 客户端选择一个多维数据集,然后发送一个包含 <Statement> 元素的 Execute,而 <Statement> 元素包含一个 MDX SELECT 语句:“Select Measures.Members on Columns from Sales”。连接信息再次在 Properties 参数中提供。SOAPAction: "urn:schemas-microsoft-com:xml-analysis:Execute"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<Execute xmlns="urn:schemas-microsoft-com:xml-analysis"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<Command>
<Statement>
select [Measures].members on Columns from Sales
</Statement>
</Command>
<Properties>
<PropertyList>
<DataSourceInfo>
Provider=MSOLAP;Data Source=local;
</DataSourceInfo>
<Catalog>
Foodmart 2000
</Catalog>
<Format>
Multidimensional
</Format>
<AxisFormat>
TupleFormat
</AxisFormat>
</PropertyList>
</Properties>
</Execute>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(I) XML for Analysis 提供程序分析请求并将它发送到要填充的数据源。
(I) 返回数据集后,提供程序将它打包成 XML,并将它发送回提出请求的客户端应用程序,如以下示例所示:<?xml version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ExecuteResponse xmlns="urn:schemas-microsoft-com:xml-analysis">
<return>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- 结果的 XML 架构定义出现在这里 -->
...
</xsd:schema>
<OlapInfo>
<!— 此处是维信息 -->
</OlapInfo>
<Axes>
<!— 此处是 MDDataSet 结果坐标轴的轴信息 -->
</Axes>
<CellData>
<!— 此处是单元格数据值和属性 -->
</CellData>
</root>
</return>
</ExecuteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(I) 客户端接收结果集,并执行用户所要求的所有其它任务。例如,客户端应用程序可以将结果集格式化为 XSL,并且将数据显示为用户可在 Web 页上浏览的表。客户端应用程序也可以将结果集写入本地缓存,以尽量减少用户刷新所显示数据时的往返次数。
XML for Analysis 和非 Web 应用程序
XML for Analysis API 是为 Web 应用程序优化的。但是,这并不妨碍面向局域网的应用程序利用此方法。以下应用程序就可以利用这一基于 XML 的 API:
要求在客户端和服务器之间具有技术灵活性的客户端/服务器应用程序
以多个操作系统为目标的客户端/服务器应用程序
不需要有效状态即可增加服务器容量的客户端
附录 B:SOAP 速查词汇表
简单对象访问协议 (SOAP) 是一种使用 XML 以可扩展方式来表示数据和命令的行业标准。鉴于 SOAP 是此规范不可分割的一部分,本部分将提供背景信息并定义 SOAP 术语。
Web 服务
从广泛的意义来说,Web 服务是这样一种应用程序:它作为可与其它使用 Internet 标准的 Web 服务进行集成的服务来提供。它是可通过 URL 寻址的资源,并且可以按编程的方式将信息返回给需要使用该信息的客户端。
Web 服务具有黑箱功能,无需专门处理某一服务的实现方式即可重复使用此功能。Web 服务提供了定义完善的接口,这些接口称为合同,用于描述所提供的服务。Web 服务可以使用 SOAP 来指定其消息的格式。
SOAP
SOAP 是一种用于在分散的分布式环境中交换信息的轻量协议。作为一种基于 XML 的协议,它由三个部分构成:
定义架构(用于说明消息的内容及处理方式)的信封
一组编码规则,用于表达应用程序定义的数据类型的实例
表示远程过程调用和响应的约定
下面是一个 SOAP 请求示例:
相应的数据响应可能如下所示:
Web 服务描述语言 (Web Services Description Language, WSDL)
随着通信协议和消息格式在 Web 社区中的标准化,以结构化方式来描述通信的可能性和重要性也在日益增加。Web 服务描述语言 (WSDL) 通过定义 XML 语法将网络服务描述成具有消息交换功能的通信端点的集合,从而满足了这种需要。WSDL 服务定义为分布式系统提供了文档,并且可以用作应用程序通信中所涉及的详细信息的自动化方法。
WSDL 文档将服务定义为网络端点或网络端口的集合。在 WSDL 中,端点和消息的抽象定义已从它们的具体网络部署或数据格式绑定中分离出来。这样就可以重复使用抽象定义:
消息 - 对所交换数据的抽象描述
端口类型 - 操作的抽象集合
一种特定端口类型的具体协议和数据格式规范构成了一个可重复使用的绑定。一个端口是通过将一个网络地址和一个可重复使用的绑定相关联来定义的;一个端口集合定义一种服务。
要获得 WSDL 完整信息的链接,请参见附录 E。
附录 C: 从 XML for Analysis 到 OLE DB 的映射
由于 XML for Analysis 是根据 OLE DB 中的定义来构建的,您可以通过参考所述领域的 OLE DB 规范来获得详细信息。
函数映射
下表将 OLE DB 和 OLE DB for OLAP 映射到等价的 XML for Analysis 操作。由于有些操作不适用,所以并非所有 OLE DB 函数都具有 XML for Analysis 映射。例如,以导航方法(它们用于处理已收到的行集)为目标的方法将不适用,因为客户端将处理此操作。
OLE DB 接口和命令
XML 实现
IColumnsInfo::GetColumnInfo
Execute 方法:
Properties:
Content = Schema
ICommandPrepare::Prepare
Execute 方法:
Properties:
Content = None
(以便仅验证命令)
ICommandProperties::GetProperties
Discover 方法:
RequestType:
DISCOVER_PROPERTIES
ICommandProperties::SetProperties
Execute 方法:
Properties:
<指定要更新的属性>
注意:属性必须具有读/写权限。
ICommandText::SetCommandText
Execute 方法:
Command 参数。
IDBInfo::GetKeywords
Discover 方法:
RequestType:
DISCOVER_KEYWORDS
IDBInfo::GetLiteralInfo
Discover 方法:
RequestType:
DISCOVER_LITERALS
OLE DB 接口和命令
(续)
XML 实现(续)
IDBProperties::GetProperties
Discover 方法:
RequestType:
DISCOVER_PROPERTIES
IDBProperties::GetPropertyInfo
Discover 方法:
RequestType:
DISCOVER_PROPERTIES
IDBProperties::SetProperties
Execute 方法:
Properties:
<指定要更新的属性>
注意:属性必须具有读/写权限。
IGetDataSource::GetDataSource
Discover 方法:
RequestType:
DISCOVER_DATASOURCES
IMDDataset::FreeAxisInfo
IMDDataset::GetAxisRowset
IMDDataset::GetCellData
IMDDataset::GetSpecification
(非直接映射。)
要获得行集的元数据结构(如行和列信息),请使用 Discover 方法:
Properties:
Content = Schema
IMDRangeRowset::GetRangeRowset
(非直接映射。)
Execute 方法:
Commands:
<提供程序特定的查询语句>
Properties:
BeginRange = <整数值>
EndRange = <整数值>
ISessionProperties::GetProperties
Discover 方法:
RequestType:
DISCOVER_PROPERTIES
(会话是隐含的)
ISessionProperties::SetProperties
Execute 方法:
Properties:
<指定要更新的属性>
注意:属性必须具有读/写权限。
属性映射
下表列出了一些常用的 OLE DB 属性及其等价的 XML for Analysis 属性。
OLE DB 属性
XML 实现
DBPROP_INIT_PROVIDERSTRING
( DBPROPSET_DBINIT 属性集)
DataSourceInfo 属性
DBPROP_COMMANDTIMEOUT
DBPROP_INIT_TIMEOUT
DBPROP_INIT_GENERALTIMEOUT
( DBPROPSET_DBINIT 属性集)
Timeout 属性
RequestTypes 映射
下表显示了 RequestTypes 枚举值到 OLE DB 的映射。
OLE DB 映射
XML for Analysis 请求类型
不适用
DISCOVER_DATASOURCES
IDBProperties::GetPropertyInfo 和
IDBProperties::GetProperties 函数
DISCOVER_PROPERTIES
IDBSchemaRowset::GetSchemas
DISCOVER_SCHEMA_ROWSETS
不适用
DISCOVER_ENUMERATORS
IDBInfo::GetKeywords
DISCOVER_KEYWORDS
IDBInfo::GetLiteralInfo
DISCOVER_LITERALS
OLE DB 架构行集名称和定义在 OLE DB 规范的“附录 B:架构行集”中列出。
<架构行集常量>
OLE DB 到 XML 的数据类型映射
为便于参考,下表将 OLE DB 数据类型映射到已发布的 XML 架构类型。
有关 XML 架构类型的详细信息和定义,请参见 http://www.w3.org/TR/xmlschema-2/(英文)。要查看 XML 架构结构,请参见 W3C 的 Web 站点。
OLE DB 类型
XML 架构类型
DBTYPE_I1
byte
DBTYPE_I2
short
DBTYPE_I4
int
DBTYPE_I8
long
DBTYPE_UI1
unsignedByte
DBTYPE_UI2
unsignedShort
DBTYPE_UI4
unsignedInt
DBTYPE_UI8
unsignedLong
DBTYPE_R4
float
DBTYPE_R8
double
DBTYPE_BOOL
boolean
DBTYPE_CY
decimal
DBTYPE_ERROR
string
DBTYPE_DECIMAL
decimal
DBTYPE_NUMERIC
decimal
DBTYPE_DATE
date
DBTYPE_DBTIMESTAMP
time
DBTYPE_GUID
string
DBTYPE_BYTES
binary
DBTYPE_STR
string
DBTYPE_WSTR
string
DBTYPE_BSTR
string
DBTYPE_VARIANT
string
MDDataSet 数据类型到 OLE DB 的映射
下面是 MDDataset 的 XML for Analysis 数据类型到 OLE DB 的映射以及其它参考信息。
OLE DB 实现
XML for Analysis 实现
OLE DB for OLAP 数据集类型
通过 IMDDataset 接口访问
MDDataset 数据类型
MDX 和 mdXML 间的关系
多维表达式 (Multidimensional Expressions, MDX) 是 OLE DB for OLAP 规范中定义的多维表达式语言。mdXML 语言是 MDX 语言的 XML 封装版本。作为此规范的最初版本,mdXML 的唯一 XML 元素是 <Statement> 元素。对于多维提供程序,该元素包括一个 MDX 语言语句(本规范的前面部分已进行了说明)。在将来的版本中,mdXML 将得到扩展,以包括其它元素和功能。对 mdXML 的扩展将以 MDX 语言为基础,通过 <Statement> 元素可继续在 XML for Analysis 中使用该语言。
MDX 语言本身是可以扩展的,因此提供程序可以将扩展添加到该语言中,以支持基本语言集中未提供的其它功能。此规范的将来版本将定义一种基于 MDX 的 mdXML 语言。
MDX 语言规范是 OLE DB for OLAP 规范的一部分,它可以在附录 E 中有关 OLE DB for OLAP 的部分找到。
附录 D:MDDataSet 示例
下面是一个 MDDataSet 答复结果集(其中 AxisFormat=TupleFormat)的完整示例。首先提供的是 XSD 部分,其后是 MDDataSet 结果。
MDDataSet 查询结果显示如下。
附录 E:对所引用技术和标准的链接
本部分提供本规范中所引用技术的详细信息的链接。各项技术以字母顺序排列。
DAV
有关分布式创作和版本控制 (Distributed Authoring and Versioning, DAV) 的信息: http://msdn.microsoft.com/library/periodic/period99/DAV.HTM http://msdn.microsoft.com/library/periodic/period99/DAV.HTM(英文)
有关规范的信息,请参见 IETF WEBDAV Working Group Web 站点:
http://www.ics.uci.edu/pub/ietf/webdav/(英文)
.NET
有关 .NET 架构的信息:
http://msdn.microsoft.com/net/(英文)
OLE DB 规范
有关 OLE DB 和 Microsoft 数据访问组件 (Microsoft Data Access Components, MDAC) 的信息:
http://www.microsoft.com/Data/oledb/default.htm(英文)
规范和数据访问软件开发包 (Data Access Software Development Kit, SDK) 下载:
http://msdn.microsoft.com/library/psdk/dasdk/mdac3sc7.htm(英文)
OLE DB for Data Mining
http://www.microsoft.com/data/oledb/dm.htm(英文)
OLE DB for OLAP
有关 OLE DB for OLAP 的信息,以及 OLE DB for OLAP 规范的下载:
http://www.microsoft.com/data/oledb/olap/default.htm(英文)
WSDL
有关 Web 服务描述语言 (Web Services Description Language, WSDL) — SDL 的替代语言 — 的信息:
http://msdn.microsoft.com/xml/general/wsdl.asp(英文)
SOAP
有关 SOAP 协议的 Microsoft 信息:
http://msdn.microsoft.com/xml/general/soaptemplate.asp(英文)
针对 SOAP 的 World Wide Web Consortium (W3C) 规范:
http://www.w3.org/TR/SOAP/(英文)
Microsoft SQL Server
有关 SQL Server 2000 XML RAW 行集格式的详细信息,请在 SQL Server 在线丛书中搜索“XML, RAW”。
有关 XML 编码的详细信息,请在 SQL Server 在线丛书中搜索“XML 编码”。
UDDI
通用描述、发现和集成 (Universal Description, Discovery and Integration, UDDI) 的 Web 站点(其中包括白皮书和技术规范):
XML
可扩展标记语言 (Extensible Markup Language, XML):
如需 Microsoft 站点中有关 XML 的信息,请导航到: