3.11.4 XML文書の操作

XML文書の操作を実行する場合に使用するメソッドと,そのメソッドの発行順序の例を説明します。

これらの操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。

それぞれの操作に使用するメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。

<この項の構成>
(1) XML文書の作成
(2) XML文書の更新

(1) XML文書の作成

XMLプロパティマッピング機能およびXMLインデクスデータ作成機能を使用してXML文書を作成する場合の,メソッドと,そのメソッドの発行順序について説明します。

なお,XMLプロパティマッピングに必要な定義ファイル類およびXMLインデクスデータを作成するために必要なフィルタリング定義ファイルは,あらかじめ作成しておきます。それぞれの定義ファイルについては,マニュアル「DocumentBroker Version 3 システム導入・運用ガイド」を参照してください。

  1. CdbrXmlTranslatorFactoryクラスを初期化します。
    CdbrXmlTranslatorFactory::Initializeメソッドをコールします。
  2. CdbrXmlTranslatorオブジェクトを作成します。
    CdbrXmlTranslatorFactory::CreateTranslatorメソッドをコールします。
  3. XMLプロパティマッピング機能を使用して,DMA生成用構造体(SDBR_DMAINFO構造体)を作成します。同時に,XMLインデクスデータ作成機能を使用して,インデクスデータをファイルに出力します。
    CdbrXmlTranslator::GetDmaInfoListメソッドをコールします。
    なお,インデクスデータだけを出力する場合は,CdbrXmlTranslator::GetIndexDataメソッドをコールします。
  4. 文書空間に接続して,トランザクションを開始します。
    CdbrSession::ConnectメソッドおよびCdbrSession::Beginメソッドをコールします。
  5. 手順3.で作成したDMA生成用構造体を引数に指定して,CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトを作成します。
    CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドをコールします。
  6. 手順3.でインデクスデータを出力したファイルを引数に指定して,CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトの全文検索インデクスを作成します。
    CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドをコールします。

コールシーケンスの例を次に示します。なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetDmaInfoListメソッドの引数に指定するファイルパスは「"file:///c:¥temp¥xmlcontent.xml"」,「"file:///c:¥temp¥NorParamFile.txt"」および「"file:///c:¥temp¥index.txt"」のように指定してください。CreateIndexメソッドの引数に指定するファイルパスは,「"file:///c:¥temp¥index.txt"」のように指定してください。

XML文書を作成するコールシーケンスの例

CdbrSession              Session;
CdbrVersionableDocument  VerDoc;
CdbrXmlTranslatorFactory XmlTransFactory
CdbrXmlTranslator        XmlTrans;
//CdbrXmlTranslatorFactoryオブジェクトを初期化する
XmlTransFactory.Initialize(pDocSpaceId,
                          pXmsFileName, &pMessage);
//CdbrXmlTranslatorオブジェクトを作成する
XmlTransFactory.CreateTranslator(&XmlTrans);
//XMLファイルからDMAオブジェクト生成用の構造体
//(SDBR_DMAINFO構造体)と
//インデクスデータ出力ファイルを作成する
XmlTrans.GetDmaInfoList("file:///tmp/xmlcontent.xml",
 DBR_XMLPARSE_NO_EXTERNAL_ENTITIES, pMappingId,
 DBR_INDEXTYPE_STRUCTURED, "file:///tmp/NorParamFile.txt",
 "file:///tmp/index.txt", &DmaInfoList, &pMessage);
//セッションを接続してトランザクションを開始する
Session.Connect(pDocSpaceId, pUserId, pPassword);
Session.Begin();
//SDBR_DMAINFO構造体を使用して文書を作成する
VerDoc.CreateObject(&Session, pDmaInfoList->lCount,
pDmaInfoList->pItem, pXmlFile, "text::xml", &pOIID);
//インデクスデータ出力ファイルを使用して全文検索インデクスを作成する
VerDoc.CreateIndex("file:///tmp/index.txt");
Session.Commit();
//セッションを切断する
Session.Disconnect();

(2) XML文書の更新

XML文書の更新時に,XMLプロパティマッピング機能およびXMLインデクスデータ作成機能を使用して,プロパティの更新と全文検索インデクスの再作成をする場合の,メソッドと,そのメソッドの発行順序について説明します。

なお,XMLプロパティマッピングに必要な定義ファイル類およびXMLインデクスデータを作成するために必要なフィルタリング定義ファイルは,あらかじめ作成しておきます。それぞれの定義ファイルについては,マニュアル「DocumentBroker Version 3 システム導入・運用ガイド」を参照してください。

  1. CdbrXmlTranslatorFactoryクラスを初期化します。
    CdbrXmlTranslatorFactory::Initializeメソッドをコールします。
  2. CdbrXmlTranslatorオブジェクトを作成します。
    CdbrXmlTranslatorFactory::CreateTranslatorメソッドをコールします。
  3. XMLプロパティマッピング機能を使用して,更新するXMLファイルからDMA生成用構造体(SDBR_DMAINFO構造体)を作成します。同時に,XMLインデクスデータ作成機能を使用して,インデクスデータをファイルに出力します。
    CdbrXmlTranslator::GetDmaInfoListメソッドをコールします。
    なお,インデクスデータだけを出力する場合は,CdbrXmlTranslator::GetIndexDataメソッドをコールします。
  4. 文書空間に接続して,トランザクションを開始します。
    CdbrSession::ConnectメソッドおよびCdbrSession::Beginメソッドをコールします。
  5. 更新するXML文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  6. XML文書のコンテントを更新します。
    更新するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールします。
    なお,ここでXML文書のコンテントとして登録するXMLファイルと,手順3.でXMLインデクスデータを作成する時に使用したXMLファイルの内容は,同じにものにしてください。
  7. XML文書の全文検索インデクスを更新します。このとき,手順3.で作成したインデクスデータ出力ファイルをメソッドの引数に指定します。
    更新するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,CreateIndexメソッドをコールします。
  8. XML文書のプロパティを更新します。このとき,手順3.で作成したDMAオブジェクト生成用構造体(SDBR_DMAINFO構造体)のメンバである,SDBR_PROPLIST構造体をメソッドの引数に指定します。
    更新するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,PutPropertyValuesメソッドをコールします。

コールシーケンスの例を次に示します。なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetDmaInfoListメソッドの引数に指定するファイルパスは「"file:///c:¥temp¥xmlcontent.xml"」,「"file:///c:¥temp¥NorParamFile.txt"」および「"file:///c:¥temp¥index.txt"」のように指定してください。UpdateContentメソッドの引数に指定するファイルパスは,「"file:///c:¥temp¥xmlcontent.xml"」のように指定してください。CreateIndexメソッドの引数に指定するファイルパスは,「"file:///c:¥temp¥index.txt"」のように指定してください。

XML文書を更新するコールシーケンスの例

CdbrSession              Session;
CdbrVersionableDocument  VerDoc;
CdbrXmlTranslatorFactory XmlTransFactory
CdbrXmlTranslator        XmlTrans;
//CdbrXmlTranslatorFactoryオブジェクトを初期化する
XmlTransFactory.Initialize(pDocSpaceId, pXmsFileName,
                          &pMessage);
//CdbrXmlTranslatorオブジェクトを作成する
XmlTransFactory.CreateTranslator(&XmlTrans);
//XMLファイルからDMAオブジェクト生成用の構造体
//(SDBR_DMAINFO構造体)と
//構造指定検索用全文検索インデクスを生成する。
XmlTrans.GetDmaInfoList("file:///tmp/xmlcontent.xml",
 DBR_XMLPARSE_NO_EXTERNAL_ENTITIES, pMappingId,
 DBR_INDEXTYPE_STRUCTURED, "file:///tmp/NorParamFile.txt",
 "file:///tmp/index.txt", &DmaInfoList, &pMessage);
// セッションを接続してトランザクションを開始する
Session.Connect(pDocSpaceId, pUserId, pPassword);
Session.Begin();
//XML文書に接続する
VerDoc.SetOIID(&Session,pOIID);
//XML文書のコンテントを更新する
VerDoc.UpdateContent("file:///tmp/xmlcontent.xml",
                     DBR_NOT_CREATE_INDEX);
//XML文書の全文検索インデクスを更新する
VerDoc.CreateIndex("file:///tmp/index.txt");
//XML文書のプロパティを更新する
SDBR_PROPLIST* pPropList;
pPropList=&DmaInfoList.pItem[0].Proplist;
VerDoc.PutPropertyValues(pPropList);
Session.Commit();
//セッションの切断
Session.Disconnect();