XML和Windows CE 3.0
2000 年 11 月
摘要:Windows CE 3.0 操作系统通过提供可扩展标记语言 (XML)
功能的子集,扩展了开发人员可用的选项范围。本文描述了集成在 Windows CE 中的 XML 的特性,以及在基于 Windows CE 的平台上使用 XML
与在基于 Windows 的桌面计算机上使用 XML 之间的区别。
简介
Windows? CE 3.0 操作系统通过提供可扩展标记语言 (XML)
功能的子集,扩展了开发人员可用的选项范围。本文描述了集成在 Windows CE 中的 XML 的特性,以及在基于 Windows CE 的平台上使用 XML
与在基于 Windows 的桌面计算机上使用 XML 之间的区别。有关 XML 的基本信息,请参阅 MSDN Online XML 开发人员中心(英文)和
MSDN Online Web Workshop(英文),以及 MSDN Online Library (英文)中的 Microsoft XML SDK 版本
2.5 文档。(注意:在本文中,MSXML 指 Microsoft 提供的 XML 分析器,XML 指标记语言。)
可扩展标记语言
XML
是一种元标记语言,它为描述结构化数据提供了一种格式,并使开发人员可在任何应用程序中按照标准、统一的方式来描述和传递丰富多彩的结构化数据。XML
便于更精确的声明内容,并提供了更准确的跨平台搜索结果。另外,XML 使新一代基于 Web 的应用程序能够查看和操作数据。
XML 的强大和美好源于它使用户界面与结构化数据保持相互独立。超文本标记语言 (HTML) 的标记可将文字显示为粗体或斜体,而
XML 仅为标记结构化数据提供了一个框架。XML 标记可指明与标记关联的数据是零售价、销售税、书名、降雨量或所需的任何其他数据。当 XML 标记被广泛应用于
Intranet 和 Internet 时,搜索和操作数据(无论此数据在什么应用程序中)的能力将得到提高。一旦应用程序找到了 XML
数据,该应用程序就可以通过网络传递该数据,在 Web 浏览器(例如 Microsoft? Internet
Explorer)中以各种方式显示该数据,或者将该数据传递给其他应用程序作进一步的处理和查看。
XML 提供了一种数据标准,可在从简单到复杂的各种情况下对内容、语义和架构进行编码。它可用于标记以下内容:
普通文档
结构化记录,例如约会记录或订单
带有数据和方法的对象,例如 Java 对象或 ActiveX? 控件的持久形式
数据记录,例如查询的结果集
有关 Web 站点的元内容,例如频道定义格式 (CDF)
图形化表示形式,例如应用程序的用户界面
标准架构实体和类型
Web 上的信息和人之间的所有链接
一旦数据到达客户端桌面,即可在多个视图中对其进行操作、编辑和显示,而无须返回服务器。由于较低的计算和带宽负载,服务器现在的可伸缩性更佳。而且,因为数据是以
XML 格式进行交换的,所以很容易从不同的来源合并数据。
有关 XML 及其使用的详细信息,请参阅为什么使用 XML(英文)。
Web 服务和 XML
与目前的组件技术不同,Web 服务不使用特定于对象模型的协议,例如分布式组件对象模型
(DCOM)、远程方法调用 (RMI) 或 Internet Inter-ORB 协议
(IIOP),这些协议都要求客户机端和提供服务的计算机都具有特定的同类基础结构。与特定的组件技术紧密结合的实施方案在可控环境中是完全可以接受的,但在 Web
上却变得不切实际。当一个集成业务进程中参与者发生变化时,当技术随着时间的推移而改变时,很难保证所有的参与者都使用一个统一的基础结构。Web
服务采用了不同的方式:它们使用普遍存在的 Web 协议和数据格式进行通信,例如超文本传输协议 (HTTP) 和 XML。支持这些 Web 标准的任何系统都能支持
Web 服务。
此外,Web 服务合约是根据 Web 服务接受和生成的消息,而不是根据如何实现服务,来描述所提供的服务的。通过专注于消息,Web
服务模型与所使用的语言、平台和对象模型无关。使用任何编程语言、对象模型和平台的完整特性集,均可实现 Web 服务。
对于定义标准且可扩展的语言以表示命令和有类型数据,XML 是一种显而易见的选择。尽管 XML
可以用来定义用其他技术来表示命令和有类型数据的规则(例如,编码为查询字符串),但 XML 是专门为描述数据而设计的标准元语言。
XML 也是 Web 服务合约所启用的技术。服务合约语言 (SCL) 是记录 Web 服务合约的 XML 语法。因为 SCL
是基于 XML 的,所以开发人员和开发工具都很容易创建和解释此合约。
有关 Microsoft Web 服务的详细信息,请参阅可编程 Web:Web 服务为 Microsoft .NET
框架提供构造块(英文)。
用于 Windows CE 的 XML
Microsoft Windows CE
3.0 支持 MSXML 2.0 功能的子集。特别是,Windows CE 不支持以下功能:
对属性使用简单数据类型
在元素上附加“id”数据类型
通过元素名称指定数据类型
数据岛
数据绑定
MIME 类型查看器
向后兼容 Microsoft Internet Explorer 4.0 所支持的 Microsoft XML 文档对象模型
(DOM)
Windows CE 也提供了有限的 XML 安全性。
Windows CE 中支持的某些 MSXML 2.0 特性为:
通过架构、名称空间和数据类型支持,来进行 XML 验证。
通过文档对象模型 (DOM) 支持,来创建和管理复杂文档和数据的能力。
通过可扩展样式表语言 (XSL) 支持,来进行 Web 浏览器格式化。
通过使用 ServerXMLHTTP 特性,来实现自动处理文档请求和分析功能。
Windows CE 也支持在 XSL
脚本块中实例化组件对象模型 (COM) 对象的能力,这是 MSXML 2.5 的特性。
验证数据
用于 Windows CE 的 MSXML 支持 XML
架构的技术预览版。此 XML 架构支持是 Worldwide Web Consortium (W3C) XML 数据提交的子集,其功能非常接近 W3C
文档内容描述 (DCD) 提交。
请考虑以下 XML 文件:
<CONTACTS>
<CONTACT>
<NAME>Stephanie
Smith</NAME>
<BIRTHDATE>1971-07-01</BIRTHDATE>
<EMAIL>ssmith@abcdef.com</EMAIL>
<PHONE>(425) 111-1111</PHONE>
</CONTACT>
<CONTACT>
<NAME> Bill
Williams</NAME>
<BIRTHDATE>1968-09-17</BIRTHDATE>
<EMAIL>billw@abcdef.com</EMAIL>
<PHONE>(425) 111-1111</PHONE>
</CONTACT>
<CONTACT>
<NAME>Christopher
Jones</NAME>
<BIRTHDATE>1999-09-08</BIRTHDATE>
<EMAIL>cjones@abcdef.com</EMAIL>
<PHONE>(425) 111-1111</PHONE>
</CONTACT>
</CONTACTS>
由于用于 Windows CE 的 MSXML 中支持的新 XML
架构,可以通过在以下根元素上声明名称空间,对照架构来验证上面的数据:
<CONTACTS xmlns="x-schema:contactSchema.xml">
将架构 contactSchema.xml
设置为文档的默认名称空间。如果需要,可在文档中声明其他的名称空间。但如果没有指定名称空间,则应用默认的名称空间。
下面是以上 XML 文档的完整架构:
<Schema
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType
name="NAME" content="textOnly"/>
<ElementType
name="BIRTHDATE"
content="textOnly"
dt:type="date"/>
<ElementType name="EMAIL"
content="textOnly"/>
<ElementType name="PHONE"
content="textOnly"/>
<ElementType name="CONTACT"
content="eltOnly">
<element
type="NAME"/>
<element
type="BIRTHDATE"/>
<element
type="EMAIL"/>
<element
type="PHONE"/>
</ElementType>
<ElementType
name="CONTACTS"
content="eltOnly"
order="many">
<element
type="CONTACT"/>
</ElementType>
</Schema>
属性:
xmlns='urn:schemas-microsoft-com:xml-data'
将 XML 文档的默认名称空间设置为架构的名称空间。这意味着该架构必须符合 XML
架构的语法。同样,属性:
xmlns:dt='urn:schemas-microsoft-com:datatypes'
声明了数据类型名称空间。这意味着该数据类型现在可以在整个架构中声明。(注意:type
属性上的 dt 前缀用于规定 BIRTHDATE 值的类型。)
文档管理
DOM 是与平台和语言都无关的接口,它允许脚本访问和更新文档的内容、结构和类型。DOM
包括一个用于合并对象标准集合(表示 HTML 和 XML 文档)的模型,以及一个对这些对象进行访问和操作的接口。遵从 W3C DOM 的建议,Windows
CE 上的 Microsoft XML 分析器具有完全的 DOM 支持。另外,它也具有 Microsoft
扩展,用于访问有类型数据和名称空间信息、按节点类型创建节点,等等。下面的脚本将加载包含联系人信息的 XML 文档,并用 XSL 模式匹配来显示名为“Bill
Williams”的联系人的电话号码:
function showPhone()
{
var root =
Contacts.documentElement;
var selectedElems =
root.selectNodes("CONTACT[NAME='Bill Williams']");
var
billElem = selectedElems.item(0);
var phone =
billElem.childNodes.item(3).nodeTypedValue;
alert("Bill
Williams 的电话号码是 " + phone);
}
selectNodes 方法使用 XSL 模式匹配来检索节点列表。在这种情况下,脚本查找所有包含 NAME 元素值为“Bill
Williams”的 CONTACT 元素。因为只有一个元素符合此模式,所以 selectNodes 返回仅包括一个节点的列表。
为显示格式化复杂数据
Windows CE 上的 MSXML 也提供对 XSL
的支持,允许对 XML 数据采用更复杂的显示格式。例如,上一个联系人信息可以简单的表格格式显示。第一项任务是创建 XSL 样式表:
<xsl:stylesheet xmlns:xsl="uri:xsl">
<xsl:template match="/">
<H3>联系人</H3>
<TABLE BORDER="1"
CELLPADDING="1" CELLSPACING="0">
<TR>
<TD
BGCOLOR="#C0C0C0">姓名</TD>
<TD
BGCOLOR="#C0C0C0">电话</TD>
<TD BGCOLOR="#C0C0C0">电子邮件</TD>
</TR>
<xsl:for-each
select="CONTACTS/CONTACT"
order-by="EMAIL">
<TR>
<TD><I><xsl:value-of
select="NAME"/></I></TD>
<TD><xsl:value-of
select="PHONE"/></TD>
<TD><xsl:value-of
select="EMAIL"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>
这个样式表将创建一个表格,并用选定的 XML 元素的值来填充这个表格。该样式表还将信息按电子邮件名称进行排序(使用
xsl:for-each 元素上的 order-by 属性)。注意:联系人信息的显示顺序与原 XML 文档的顺序不同。
此样式表可通过 XML 对象模型应用到 XML 文档上。XML 对象模型是一系列应用程序编程接口 (API),允许与 XML
结构树的元素进行交互。IXMLDOMNode 上的 transformNode 方法在 XSL 树中传递,并使用该树将 XML
节点转换为输出字符串。在下例中,该字符串将是一个插入当前文档的 HTML 字符串:
function showContacts()
{
document.write(Contacts.transformNode(ContactsSS.documentElement);
}
上面的脚本在浏览器中显示:

ServerXMLHTTP
使用 ServerXMLHTTP 对象,XML
树本身可作为对象进行发布。在以下脚本中,创建了一个 ServerXMLHTTP 对象,并且此对象将一个名为“template”的 XML
树发布到服务器位置:
var httpOb = new
ActiveXObject("Microsoft.ServerXMLHTTP");
httpOb.Open("POST","http://myServer/postContact.asp", false);
var
contact =
template.XMLDocument.documentElement;
contact.childNodes.item(0).text =
contactName.value;
contact.childNodes.item(1).text =
contactPhone.value;
contact.childNodes.item(2).text =
contactEmail.value;
httpOb.send(template.XMLDocument);
ServerXMLHTTP 对象及其属性和方法在 XML 参考 IXMLHttpRequest
接口(英文)中进行了概述。
通过 XSL 实例化 COM 对象
Windows CE 支持通过 XSL
脚本接口实例化 COM 对象(例如 ActiveX 控件)。以下脚本演示了假想的 COM 对象“MyCorp”的实例化:
<xsl:script>function TestCOMObject()
{
var Obj1 = new ActiveXObject("MyCorp.MyComponent");
var y = Obj1.Process(); // 创建新的 COM
对象,并用它来处理其他进程。
return y;
}
</xsl:script>
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐
jill.jiang@amteam.org | 021-51096826-112 |
在线联系