将保单存储在DB2中
PHP应用程序将传入的XML文档直接存储在数据库中,而不需要解析它(见清单3)。DB2的pureXML支持将隐式地解析传入的XML,并将其存储在一个类DOM的分层结构中。现在,可以在XQuery语句中使用XPath之类的XML导航技术(就像在DOM中使用的那样)来查询XML。DB29还提供了在该层次结构中的任何节点上索引的能力。
公开XML文档上的服务
新的保单存储在DB29中以后,保险代理可以查询该保单,以决定是否接受这个保险。用于获得关于新保单报告的查询通过Web服务公开给客户机应用程序。
这个例子中的Web服务是用PHP编写的,它为调用实现服务的业务和转换逻辑的DB2存储过程提供了一个简洁的接口。每个DB2存储过程由一个SQL/XML查询组成,它过滤和转换存储在数据库中的XML保单,以创建一个输出XML文档。然后,该PHPWeb服务将XML文档返回给客户机。
我们来分析每个存储过程,看看那些有效地组成Web服务实现的查询。
列出所有新客户保险的DB2查询。包含该查询的存储过程是listAllNewCustomers(见清单4)。该查询搜索ACORD表的INFO列中的所有保单文档。在每个XML文档中,DB2进一步向下分析,以便只返回PolicyStatus/@tc属性的代码值被设为12(也就是建议的值)的那些文档。查询输出是一个XML文档,它有一个根节点newpolicylist,该节点包含一系列的用于每个新保单的TXLife子节点(见图4)。
图4.返回新保单列表的SQL/XML查询
注意这个查询第一次如何使用DB2XQuery函数db2-fn:xmlcolumn来导航关系模式,以定位到XML列DB2ADMIN.ACORD.INFO。当它到达XML列时,它进一步使用XPath在XML模式中导航到适当的节点(类似于使用PHP、JavaScript或其他语言导航DOM)。
列出有风险客户的提议保险的DB2查询。该查询只列出有风险的新客户(也就是说,他们对于某个医疗问题的回答是yes)。该查询包含在一个名为listAtRiskNewCustomers的存储过程中(见清单5)。注意:WHERE子句同时检查答案和保单状态。
评估有风险新客户的风险度的DB2查询。对于以上列表中的每个保单,在保单的健康风险区域只能列出回答为yes的问题。该查询还返回policytype,以显示该保单值多少钱,以便评估风险。包含该查询的存储过程(见清单6)是getRiskQuestions(guid)。注意:您需要一个支持XML类型的DB2驱动程序版本。否则,在每个存储过程中都需要使用XMLSerialize来从XMLQuery中串行化XML值。请参阅developerWorks文章“结合使用DB2原生XML与PHP”以获得更详细的信息。
用于getnewpolicyinfoWeb服务的PHP代码是一个瘦包装器,它检查所需保单报告的类型,并调用适当的存储过程。然后,将存储过程所返回的值发送回客户机(见清单7)。注意用PHP创建Web服务是多么简单。最后三行将该功能公开为一个Web服务。在任何客户机中,包括在PHP应用程序中,都可以调用Web服务,如清单8所示。
结束语
在过去几年中,各应用程序层的XML支持都已成熟,这导致一种强大的开发环境的出现,这种开发环境可以改变企业应用的设计方式。XML使开发人员可以为业务文档定义规则和结构,还可以在内存中将文档实例化为分层对象,开发人员可以在任何层使用标准API对这种对象进行导航、修改和串行化。Ajax使基于Web的客户机脚本可以调用DOMAPI,还可以对中间层进行远程过程调用。PHP为处理XML和Web服务提供了最简单的方法之一,因此非常适合基于XML的应用程序开发。XML演变的最后一链是数据库层。DB29使数据库层能操纵XML。因此这个演变周期宣告结束。













