以下に2つの応用例を示します。
異なる構造のXMLデータを1つの表に格納する
異なる構造のXMLデータを1つのXMLグループとする
以下の図に示すように、XMLグループの考え方を使用することで異なる構造のXMLデータを1つの表に格納できます。これにより、利用者は複数の構造のXMLデータを扱う場合でもXMLデータの構造ごとに表を用意せず、1つの表ですべての構造のXMLデータを扱うことができます。
以下の図は、「受注伝票」と「発注伝票」という異なる構造のXMLデータを、「伝票スキーマ.伝票表」という1つの表に格納することを意味します。
図1.12 1つの表への異なる構造のXMLデータの格納
異なる構造のXMLデータを1つの表に格納する場合、その種別ごとにXMLグループを定義します。図の例では、「受注伝票」用のXMLグループ、「発注伝票」用のXMLグループを定義します。また、XMLグループと対応づけるための情報を格納する列を表に用意し、XMLデータを格納する際に格納するXMLデータが属するXMLグループを示す情報をあわせて格納します。これにより、「受注伝票」は「受注伝票」用のXMLグループとして、「発注伝票」は「発注伝票」用のXMLグループとして扱うことができます。XMLデータを検索する場合は、XMLグループを指定することで、該当するXMLグループのXMLデータだけを検索対象とできます。
以下に異なる構造のXMLデータとXMLグループの関係を示します。
図1.13 異なる構造のXMLデータとXMLグループ
この図では、受注伝票用に「受注伝票GR」、発注伝票用に「発注伝票GR」というXMLグループを定義しています。また、XMLグループとの対応関係をあらわす列として、「種別」列を用意しており、その情報は、「1」の場合「受注伝票GR」に、「2」の場合「発注伝票GR」に対応します。したがって、XMLデータを格納する場合は、XMLデータとあわせて「種別」列に対して「受注伝票GR」ならば「1」を、「発注伝票GR」ならば「2」を格納します。
以下に、図の具体的な定義例を示します。
XMLデータを検索する場合は、以下に示すようにCONTAINS関数で対象とするXMLグループの名前と検索条件を指定します。
CONTAINS関数については、“第5章 アプリケーションからの利用”、“第6章 XML検索式”および“付録B CONTAINS関数の記述形式”を参照してください。
CONTAINS (伝票,XML(受注伝票GR,'/[受注伝票/伝票番号="E001000"]')) > 0
↑
XMLグループの名前
XMLグループでは、XMLデータの構造の一部を検索対象として定義します。ここで、XMLグループで定義した検索パスが一致していれば、別の構造をもつXMLデータ文書でも、同じXMLグループを使用してXMLデータを格納できます。この機能を利用すると、たとえば、共通ヘッダ部分をもつXMLデータで本体が異なるXMLデータを格納して共通ヘッダ部分だけを検索対象とする業務を構築できます。
以下にデータベースに格納するXMLデータとXMLグループの関係を示します。
図1.14 XMLグループと格納するXMLデータ
図のXMLグループαは、XMLデータAとXMLデータBとの共通部分の検索パスを定義しています。これにより、XMLデータAとXMLデータBはその構造が異なりますが、同一のXMLグループαを使用できます。XMLデータの検索では、XMLデータAとXMLデータBがそれぞれ構造は異なりますが、検索の対象となります。
なお、図のXMLデータCは、XMLデータA、XMLデータBと共通部分がないため、別のXMLグループβを用意します。XMLデータA、XMLデータBとは同じ検索対象となりません。