pureXML 是 DB2 V9 引入的里程碑式特性,徹底革新了 XML 數據的存儲與管理方式。在 pureXML 之前,DB2 處理 XML 主要有兩種方案:將 XML 作為整體存入大對象(CLOB/BLOB),或將 XML 分解映射到關係表。前者難以支持細粒度查詢,後者處理複雜且易導致數據失真。pureXML 原生保留 XML 階層結構,在提升訪問細粒度的同時,消除了關係化映射的複雜度與性能開銷。此外,它支持 XML 元素/屬性索引、標準 XQuery 和 SQL/XML 查詢、Schema 管理驗證演進,並提供完善的 API 與管理工具。
隨著軟件系統廣泛應用,基於組件的開發方法(CBD)成為降低成本、縮短週期、提高質量的關鍵。CBD 包含組件開發與組件裝配兩大環節。高效存儲、組織、管理、檢索組件的通用組件庫至關重要。構建高效組件庫需解決兩大核心問題:組件描述模型與組件檢索機制。
面向刻面技術從多維度刻畫組件本質特徵。每個刻面代表一個描述視角(如功能、接口、實現、環境、領域等),刻面間正交互補,構成刻面樹;每個刻面下的術語按繼承關係形成術語樹。這種模型具有極強伸縮性,支持細分、聚合與裁剪,滿足不同應用類型需求。

面向刻面的組件數據模型天然適合 XML 描述。組件檢索轉化為使用 SQL/XML 或 XQuery 查詢滿足條件的 XML 文檔/節點/子樹,檢索條件可用 XPath 組合表達,不同鬆弛程度通過 XPath 強度實現。開發者無需建立多表關係模型,也無需在 XML 結構變更時重新映射,極大簡化開發維護。
組件分為原子邏輯(基本業務操作)與組合邏輯(組合原子邏輯完成複雜業務)。描述刻面包括:功能、接口、實現、編目。組件屬性包含編碼、引用、實體名稱。以下為組件 XML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="https://www.w3.org/2009/09/componentBase"
compID="101" reference="separate"
entity="com.xicrm.business.XiJoinInStringListSeparator">
<function>concate two strings with given separator</function>
<interface>
<input type="Java.lang.String" meaning="string #1"/>
<input type="Java.lang.String" meaning="string #2"/>
<input type="Java.lang.String" meaning="separator"/>
<output type="Java.lang.String" meaning="string concated"/>
</interface>
<implement type="atomicLogic"/>
<catalog name="generic">
<detail>string Operater</detail>
</catalog>
</component>
通過 XML Schema 定義元素/屬性名稱、類型、出現次數、順序,保證數據有效性完整性。註冊 Schema 後,只有符合結構的 XML 才能入庫。
db2start
db2 create db CompBase using codeset utf-8 territory CN
db2 connect to CompBase
db2 "create table component (id int, info XML)"
註冊 XML Schema,使用 XMLVALIDATE 和 XMLPARSE 進行帶驗證的插入操作,確保入庫數據有效完整。批量入庫可使用 Load/Import 工具。
使用 SQL/XML 或 XQuery 根據功能、編目、接口參數等條件檢索組件。示例查詢功能為「用給定分隔符連接兩個字符串」的組件:
SELECT temp.entity, temp.reference
FROM component C,
XMLTABLE('declare namespace cs="https://www.w3.org/2009/09/componentBase";
$info/component' PASSING C.info AS "info"
columns entity varchar(200) path './@entity',
reference varchar(200) path './@reference') as temp
WHERE XMLEXISTS('$info/*:component[*:function="concate two strings with given separator"]'
PASSING C.info AS "info")
XQuery 同樣可返回所需信息,支持構造便於框架處理的結構。