级别: 初级
Kevin Williams, 首席 XML 设计师, Equient(Veridian 的一个部门)
2001 年 7 月 01 日
本专栏讨论了表示数据时如何使用 XLink 指针使 XML 文档变得更紧凑、更灵活。样本代码显示了带有或不带 XLink 指针的发票示例,加上一个将 XLinks 用于可按 URL 寻址的数据库的示例。
近来,W3C 将一个称为 XLink
的规范升级到“推荐”状态。在本专栏中,将研究 XLink
以及如何使用它来简化数据的表示和传输。
究竟什么是 XLink 呢?
引用 W3C XLink 规范:“XML 链接语言(XLink)... 允许在 XML
文档中插入元素以创建并描述资源之间的链接。”然后,规范宣称使用
XLink 定义的链接类似于 HTML
超级链接,从而导致许多程序员得出这就是该规范的唯一目的结论。但是,还有另一种方法可以使用
XLink 来获取巨大利益:显示数据资源之间的关系。
操作中的 XLink
设想一个典型的订单跟踪应用程序,假定对于大型制造公司。描述订单的
XML
文档通常将包含下达订单的顾客信息、订单状态和订单上带有数量和价格的独立行项。文档用户可能想以不同的方法使用它。在财务部,请求订单数据的人员可能只
对需要让顾客付款的总价感兴趣
-
而发票上独立行项的详细信息(除数量和价格外)却是不相关的。相反,顾客要求订单时(也许为了在线查看),他们可能想查看更多信息,例如,行项上一个部件
的可读名称。将带有全部详细信息的整个文档传送给每个顾客并不一定会有意义:理想的做法是仅传送订单的基本框架(对于仅对基本内容感兴趣的顾客),它带有
指向更详细信息的指针。XLink
提供了完成该任务的出色方法。
完整的订单文档有些类似于“清单 1”。
清单 1. 完整的发票文档(带有嵌入式的顾客和部件信息)
<?xml version="1.0"?> <order> <orderDate>7/23/2001</orderDate> <shipDate>7/26/2001</shipDate> <customer> <customerID>18273</customerID> <customerName>Fred Q. Customer</customerName> <billingAddress> <address1>100 Main St.</address1> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </billingAddress> <shippingAddress> <address1>800 Corporate Dr.</address1> <address2>Suite 314</address2> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </shippingAddress> </customer> <lineItem> <part> <partID>W-127</partID> <partName>Widget</partName> <partSize>2-inch</partSize> <partColor>Blue</partColor> </part> <quantity>17</quantity> <unitPrice>0.20</unitPrice> </lineItem> <lineItem> <part> <partID>S-387</partID> <partName>Sprocket</partName> <partSize>1-inch</partSize> <partColor>Red</partColor> </part> <quantity>31</quantity> <unitPrice>0.40</unitPrice> </lineItem> </order>
|
不仅“清单
1”中的完整发票包含顾客可能不需要(或正好要废弃)的信息,而且,如果使用本地的
XML
存储数据,该文档还会产生问题:如果在每个文档中嵌入每个部件的详细信息,重复的部件信息会浪费大量磁盘空间。但是,假设此时正在从关系数据库中按需要取
出信息。存储这种信息类型的数据库的典型设计将包含三个主控表:定义制造商所有顾客的“顾客”表、描述制造商销售的所有部件的“部件”表和与这两个表相关
的“订单”表,它显示哪一个顾客订购了哪一种部件、订购时间和数量。这提示我们如何将该文档分成几个可控制的部分。
因此,“清单 2”使用 XLink 结构引用正好包含
customer
和
part
元素的文档来替换这些元素。结果文档将有些类似于“清单 2、3、4 和
5”。
清单 2. 带有 XLink 简单链接的已修改发票文档
<?xml version="1.0"?> <order xmlns:xlink="http://www.w3.org/1999/xlink"> <orderDate>7/23/2001</orderDate> <shipDate>7/26/2001</shipDate> <customer xlink:href="customers/18273.xml">18273</part> <lineItem> <part xlink:href="parts/W-127.xml">W-127</part> <quantity>17</quantity> <unitPrice>0.20</unitPrice> </lineItem> <lineItem> <part xlink:href="parts/S-387.xml">S-387</part> <quantity>31</quantity> <unitPrice>0.40</unitPrice> </lineItem> </order>
|
清单 3. customers/18273.xml
<?xml version="1.0"?> <customer> <customerID<18273</customerID> <customerName>Fred Q. Customer</customerName> <billingAddress> <address1>100 Main St.</address1> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </billingAddress> <shippingAddress> <address1>800 Corporate Dr.</address1> <address2>Suite 314</address2> <city>Anywhere</city> <state>AZ</state> <zip>12345</zip> </shippingAddress> </customer>
|
清单 4. parts/W-127.xml
<?xml version="1.0"?> <part> <partID>W-127</partID> <partName>Widget</partName> <partSize>2-inch</partSize> <partColor>Blue</partColor> </part>
|
清单 5. parts/S-387.xml
<?xml version="1.0"?> <part> <partID>S-387</partID> <partName>Sprocket</partName> <partSize>1-inch</partSize> <partColor>Red</partColor> </part>
|
您大概可以看出用该方法构造信息结构的明显优势。如果财务部仅仅想给顾客
18273
发送帐单(该标识在财务软件中),则只需要检索订单文档以获取所需信息。可以在一个比嵌入了所有额外信息的原始文档小得多的文档中找到该信息。可以设置应
用程序,这样在线检索该发票的顾客会看到自动显示的信息(在初始呈递时,呈递该页面的样式表单可以获取顾客和部件的详细信息),或者详细信息作为超级链接
出现,以供顾客遍历。带有超级链接的结构化文档更加灵活和强大;顾客只检索到相关部分。
您可能想知道这个策略对系统有什么好处。毕竟,可能会在需要时使用在处理过程中生成的
XML 文档在关系数据库中存储数据,而不是在本地 XML
数据库中存储。可以用几种方式利用该方法。如果顾客信息和部件信息的变更率相对较低,则创建或更改顾客和部件时,可以生成
XML
文档来表示它们,这样就确保了该数据的请求不需要代价巨大的附加数据库调用。它还允许创建顾客和部件目录,而完全不需要访问关系数据库。如果正在使用可按
URL 寻址的关系数据库 - 大多数关系型数据库已经或者将很快提供该功能
-
可以创建一个允许在处理过程中检取信息的访问器(例如,一个存储过程),如“
清单 6”中的假想示例。
结束语
本专栏演示了如何使用 XLink
的基本功能来简化文档结构和降低网络传输的开销。它仅讨论使用简单链接的方法;XLink
还提供了扩展的链接功能,可以用它将许多资源关联在一起(例如,可以创建一个
XLink 链接库,在顾客与订单之间建立关系)。随着 XML
和相关帮助器技术的不断成熟,在确定如何实现信息系统时,程序员将拥有更大的灵活性,允许协调解决方案以最大限度地满足顾客的需要。
参考资料
关于作者
|
|
|
Kevin Williams 是 Equient 的首席 XML 设计师,Equient 是 Veridian
专门从事信息管理系统的 XML 设计的一个部门。他还与人合著了几本关于
XML 的书籍,由 Wrox Press 出版。可通过
kevin@realworldxml.com
与他联系以获取说明。在他的网站
www.realworldxml.com
上可以找到任意的 XML
想法、技巧、窍门和个人的激昂演说。您知道,是给孩子们看的!
|