WEB开发网
开发学院数据库DB2 DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的... 阅读

DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 2 部分:向 DB2 数据库中添加 XML 数据指南

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 这种方法的缺点是每个应用程序的每个插入语句都需要使用 XMLVALIDATE 函数并涉及正确的 XML 模式标识(这是在一个模式注册时分配的),换句话说,DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 2 部分:向 DB2 数据库中添加 XML 数据指南(5)

这种方法的缺点是每个应用程序的每个插入语句都需要使用 XMLVALIDATE 函数并涉及正确的 XML 模式标识(这是在一个模式注册时分配的)。换句话说,用这个方法来保证数据质量是分散的责任而且没有集中控制。不过,DB2 有几个功能可以在允许的 XML 数据上添加更多的集中控制。

你可以定义检查约束来保证 XML 文档在它们未能通过 XMLVALIDATE 函数正确验证的情况下被拒绝。在图 13 中的第一个检查约束只有在使用 XMLVALIDATE 函数根据在 DB2 中注册的某个 XML 模式验证成功后才允许插入 XML 文档。验证失败的插入将被拒绝。第二个检查约束更强大,因为它只允许已经通过了被 IN 子句中列出的模式验证过的文档插入。如果在数据库中注册的仅有的 XML 模式是 matthias.fpml41、 matthias.fpml43、 matthias.fpml50 的话,这两种验证是等价的。


清单 5. 检查约束拒绝未验证文档
 alter table trades add constraint chkvalidated1 
   check (tradedoc is validated) 
 
 alter table trades add constraint chkvalidated2 
   check (tradedoc is validated according to xmlschema id 
           IN (matthias.fpml41, matthias.fpml43, matthias.fpml50)

检查约束他们自己不会执行或触发模式验证。他们只检查是否一个被插入(或更新)的文档已经被正确的验证过。

提示:不过,你可以使用 BEFORE 触发器来自动强制进行文档验证(图 14)。为了避免两次验证,我们推荐你在插入语句中显式的进行验证,或使用一个触发器,但不要同时用。


清单 6. BEFORE 触发器强制进行文档验证
create trigger tr1 before insert on trades 
 referencing new as n 
 for each row mode db2sql 
 begin atomic 
 set (n.tradedoc) = xmlvalidate(n.tradedoc according to 
                     xmlschema id matthias.fpml43 ); 
 end

如果你已经在你的数据库中根据不同的模式验证了不同的文档,你可能碰到这样的情形,当你想找到用于验证一个文档的模式;或者,你希望找到一个确定模式来验证的所有文档。标量函数 XMLXSROBJECTID 可以为你做这些。你用一个 XML 文档(或者其中任意一个片段)作为一个数据被返回用于验证这个文档的 XML 模式的 ID 。有了这个 ID,你可以在 DB2 的 XML 模式库(XSR)找到 XML 模式。考虑下面的情况:


清单 7. 使用 XMLXSROBJECTID 函数
select xmlxsrobjectid(tradedoc) 
 from trades 
 where xmlexists...; 
 
 select T.tradedoc 
 from trades T, syscat.xsrobjects X 
 where xmlxsrobjectid(T.tradedoc) = X.objectid 
 and X.objectname = 'fpml43';

更多关于管理的个 XML 模式的文档的信息,请参见参考资源部分。

上一页  1 2 3 4 5 

Tags:DB 最佳 实践

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接