9 DICOM構成ドキュメントの作成

管理者は、独自の構成ドキュメントの作成など、いくつかのリポジトリ管理タスクを実行できます。

注:

DICOMのOracle Multimediaサポートは、Oracle Database 12cリリース2 (12.2)では非推奨になりました。将来のリリースではサポートされなくなる可能性があります。できるだけ早く、非推奨となった機能の使用を停止することをお薦めします。

この章では、構成ドキュメントの特性について説明し、特定の組織または企業に固有の構成ドキュメントを記述する手順を示します。

注:

この章では、XML要素の属性名を固定幅フォントで示します。

Oracle Multimedia DICOMでは、特殊文字で構成されるプライベート属性定義者名を含むDICOMファイルの処理をサポートしています。これらの特殊文字を使用してプライベート属性定義者を参照するDICOMメタデータ・タグを参照できるようにするために、Oracle Multimedia DICOMでは、DICOM構成ドキュメントで使用される値ロケータの構文を拡張してこれらの定義者の式を使用できるようにしています。DICOM値ロケータ・タイプは、DICOM属性またはDICOMコンテンツ内の子コンポーネントを特定します。参照情報については、「DICOM値ロケータの一般形式」を参照してください。

管理者は、DICOM値ロケータを匿名ドキュメント、制約ドキュメントおよびマッピング・ドキュメントとともに使用できます。匿名ドキュメント、制約ドキュメントおよびマッピング・ドキュメントでのDICOM値ロケータの使用の詳細は、それぞれ「匿名ドキュメントでのDICOM値ロケータの使用」「制約ドキュメント内でのDICOM値ロケータの使用」および「マッピング・ドキュメントでのDICOM値ロケータの使用」を参照してください。構成ドキュメントの挿入、更新および削除の詳細は、「DICOMの管理の概要」を参照してください。このようなプロセスの例は「DICOMリポジトリの管理」を参照してください。

この章では、次の内容を説明します。

関連項目:

  • DICOM標準規格で定義されているDICOMコンテンツのデータ構造およびエンコーディングの定義の詳細は、http://medical.nema.org/

9.1 構成ドキュメントの特性

インストールが完了すると、Oracle Multimedia DICOMデータ・モデル・リポジトリには、次のデフォルトの構成ドキュメント・セットが含まれます。

  • 匿名(ordcman.xml)

  • 制約(ordcmct.xmlordcmcmd.xmlordcmcmc.xml)

  • マッピング(ordcmmp.xml)

  • 標準ディクショナリ(ordcmsd.xml)

  • プライベート・ディクショナリ(ordcmpv.xml)

  • プリファレンス(ordcmpf.xml)

  • UID定義(ordcmui.xml)

注:

また、ユーザーは、setProperties()メソッドがコールされたときに組込みのDICOMコンテンツから抽出され、ORDDicomオブジェクトのXMLメタデータ属性に格納されるDICOM属性を指定するオプションのストアド・タグ・リスト・ドキュメントをインストールできます。

各構成ドキュメントの簡単な定義については「リポジトリ内の構成ドキュメント」を参照してください。

各タイプの構成ドキュメントには固有の一連の特性があります。特性については、次の各項で簡単に説明します。

9.1.1 匿名ドキュメントの特性

匿名ドキュメントには次の特性があります。

  • 他のタイプのドキュメントが匿名ドキュメントに依存することはありません。

  • 匿名ドキュメント間には、依存性がありません。

  • 匿名ドキュメントは、標準ディクショナリ・ドキュメントおよびプライベート・ディクショナリ・ドキュメントに依存します。

  • リポジトリ内に保持できる匿名ドキュメントの数に上限はありません。

  • 匿名ドキュメントに対する変更は、isAnonymous( )メソッドおよびmakeAnonymous( )メソッドの結果に影響します。

9.1.2 制約ドキュメントの特性

制約ドキュメントには次の特性があります。

  • 他のタイプのドキュメントが制約ドキュメントに依存することはありません。

  • 制約ドキュメント間には、依存性がある場合があります。

  • 制約ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。

  • リポジトリ内に保持できる制約ドキュメントの数に上限はありません。

  • 後から挿入する制約ドキュメントは、先に挿入した制約ドキュメントに依存するように記述できます。たとえば、インストール済の制約ドキュメントを例に取ると、ordcmct.xmlordcmcmd.xmlに依存し、これらのドキュメントは両方ともordcmcmc.xmlに依存します。

  • isConformanceValid( )メソッドは、指定された制約ルールおよびDICOMコンテンツに依存します。(制約ドキュメントに定義された)制約ルールが変更されると、DICOMコンテンツに対して異なる検証が行われる可能性があります。

  • プリファレンス・ドキュメントのプリファレンス・パラメータEXP_IF_NULL_ATTR_IN_CONSTRAINTは、制約ルールで指定された属性にNULL値が見つかったときに例外を発生させるかどうかを指定するために使用できます。このプリファレンス・パラメータがtrueに設定されている場合、isConformanceValid( )メソッドで例外が発生します。それ以外の場合は、検出された条件がfalseに評価されます。

9.1.3 マッピング・ドキュメントの特性

マッピング・ドキュメントには次の特性があります。

  • 他のタイプのドキュメントがマッピング・ドキュメントに依存することはありません。

  • マッピング・ドキュメント間には、依存性がありません。

  • マッピング・ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。

  • リポジトリ内に保持できるマッピング・ドキュメントの数に上限はありません。

  • マッピング・ドキュメントがextractMetadata( )メソッドのパラメータとして使用されている場合、マッピング・ドキュメントに対する変更は、extractMetadata( )メソッドの結果に影響します。

  • マッピング・ドキュメントで<NAMESPACE>要素内にメタデータ名前空間の値が指定されている場合は、そのメタデータ名前空間の値に対応するXMLスキーマがOracle XML DBに登録されている必要があります。

    関連項目:

    XMLスキーマの登録の詳細は、『Oracle XML DB開発者ガイド』を参照してください

    extractMetadata( )メソッドが正しく動作するようにするには、マッピング・ドキュメントの構造が、<NAMESPACE>要素の値に対応するXMLスキーマと整合している必要があります。

  • 抽出されたメタデータのスキーマは、次の条件が両方とも満たされる場合にのみ検証されます。

    • マッピング・ドキュメントで<NAMESPACE>要素の値が指定されている。

    • プリファレンス・ドキュメント内のプリファレンス・パラメータVALIDATE_METADATAの値がtrueである。

9.1.4 プリファレンス・ドキュメントの特性

プリファレンス・ドキュメントには次の特性があります。

  • リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のプリファレンス・ドキュメントを保持できます。インストール済のOracle定義のプリファレンス・ドキュメント(ordcmpf.xml)には、Oracle固定のプリファレンス・パラメータ名と値のリストが含まれています。ユーザー定義のプリファレンス・ドキュメントでは、Oracle定義のプリファレンス・ドキュメントに設定されているデフォルトのプリファレンス・パラメータ値を更新できます。

  • プリファレンス・ドキュメント内のプリファレンス・パラメータ値を変更すると、DICOMのメソッド、関数およびプロシージャの動作が変わります。具体的には、Oracle定義のプリファレンス・ドキュメントに定義されたデフォルト値が、ユーザー定義のプリファレンス・ドキュメントに定義されたプリファレンス・パラメータ値によってオーバーライドされます。

9.1.5 プライベート・ディクショナリ・ドキュメントの特性

プライベート・ディクショナリ・ドキュメントには次の特性があります。

  • 1つのプライベート・ディクショナリ・ドキュメント(ordcmpv.xml)が、Oracleによってインストールされます。

  • リポジトリ内に保持できるプライベート・ディクショナリ・ドキュメントの数に上限はありません。

9.1.6 標準ディクショナリ・ドキュメントの特性

標準ディクショナリ・ドキュメントには次の特性があります。

  • 1つの標準ディクショナリ・ドキュメント(ordcmsd.xml)が、Oracleによってインストールされます。

  • 標準ディクショナリ・ドキュメントへの変更は、DICOM標準規格を更新する目的のみに制限する必要があります。

  • リポジトリ内に保持できる標準ディクショナリ・ドキュメントの数に上限はありません。

9.1.7 ストアド・タグ・リスト・ドキュメントの特性

ストアド・タグ・リスト・ドキュメントには次の特性があります。

  • リポジトリ内に存在できるストアド・タグ・リスト・ドキュメントは1つのみです。

  • ストアド・タグ・リスト・ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。

  • プリファレンス・パラメータMANDATE_ATTR_TAGS_IN_STLは、制約ドキュメントおよびマッピング・ドキュメントで使用されているすべてのタグがストアド・タグ・リスト・ドキュメントにリストされている必要があるというルールを強制します。プリファレンス・ドキュメントのMANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの値は、デフォルトでfalseです。このプリファレンス・パラメータがtrueに設定されている場合は、前述のルールが適用されます。それ以外は適用されません。

9.1.8 UID定義ドキュメントの特性

UID定義ドキュメントには次の特性があります。

  • リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のUID定義ドキュメントを保持できます。インストール済のOracle定義のUID定義ドキュメント(ordcmui.xml)には、DICOM標準規格のPart 6に記述されているUID定義が含まれています。

  • ユーザー定義のUID定義ドキュメントに対する変更は、DICOM標準規格の更新または新しいUID値の追加を行う目的のみに制限する必要があります。

注:

既存のUID値は変更しないでください。

9.2 構成ドキュメントの記述方法

管理者は、特定のアプリケーションまたは組織に対応する1つ以上の構成ドキュメントを記述できます。次の各項では、構成ドキュメントの作成方法をタイプ別に説明します。

9.2.1 匿名ドキュメントの作成

匿名ドキュメントでは、匿名化する一連の属性と、それらの属性を匿名化するために実行するアクションを指定します。ORDDicomオブジェクトの匿名ドキュメントは、isAnonymous( )メソッドおよびmakeAnonymous( )メソッドによって、個人を特定する情報を削除または置換した新しいオブジェクトを作成する場合に使用されます。

XMLスキーマordcman.xsdには、匿名ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

デフォルトの匿名ドキュメント(ordcman.xml)には、DICOM標準規格のPart 15「Basic Application Level Confidentiality Profile」に定義された属性のサブセットが記述されています。これらの属性は、DICOMコンテンツでは削除されるか、"anonymous"という文字列に置換されます。また、デフォルトの匿名ドキュメントでは、未定義の標準属性、およびプライベート属性がDICOMコンテンツからすべて削除されます。

各匿名ドキュメントの<ANONYMITY_ACTION>要素には、1つのaction属性が含まれます。action属性の値は、匿名ドキュメントに含まれる単一の属性または一連の属性に適用できます。グローバル・アクションは、一連の属性(すべてのプライベート属性など)に適用されます。

次の表は、action属性の有効な値について説明しています。

表9-1 action属性の値

説明

none

アクションは実行されません。結果のDICOMコンテンツには、指定された属性または一連の属性の値が変更されずにそのまま表示されます。

remove

デフォルト値。指定された属性または一連の属性が結果のDICOMコンテンツから削除されます。

注意: 一部の画像アプリケーションには、特定の属性(SOP_INSTANCE_UIDSOP_CLASS_UIDなど)に依存するものもあります。このような場合は、removeアクションのかわりにreplaceアクションを使用して、適切な値を指定してください。

replace

結果のDICOMコンテンツに含まれる属性値は、指定した値で置換されます。指定する置換値は、データ・ディクショナリの<VR>要素で定義されたタグのデータ型と一致する文字列表現であることが必要です。

注意: このアクション値は、グローバル・アクションには指定できません。

たとえば、

標準タグ00100022はPatient ID(患者ID)を表し、データ・ディクショナリでの<VR>値はCS (CODE_STRING)です。データ型CSは、xs:token of length 16としてXMLスキーマordcmrdt.xsdに定義されています。置換値は、この定義に準拠する文字列表現であることが必要です。

標準タグ00081160はReferenced Frame Number(参照先フレーム番号)を表し、<VR>値はIS (INTEGER_STRING)です。データ型ISは、xs:integerとしてXMLスキーマordcmrdt.xsdに定義されています。置換値は、この定義に準拠する文字列表現であることが必要です。

匿名ドキュメント内の属性は、標準属性でもプライベート属性でもかまいません。標準属性またはプライベート属性は、定義済の場合も未定義の場合もあります。定義済の標準属性は、DICOM標準規格、およびデータ・モデル・リポジトリ内の標準ディクショナリで定義されています。定義済のプライベート属性は、特定の組織によって定義された固有の属性です。Oracle Multimediaで既知の定義済のプライベート属性は、データ・モデル・リポジトリ内のプライベート・ディクショナリで定義されています。未定義の属性は、データ・モデル・リポジトリ内の標準ディクショナリまたはプライベート・ディクショナリのいずれにも定義されていません。

<INDIVIDUAL_ATTRIBUTE>要素には、定義済の標準属性またはプライベート属性を匿名化するために実行するアクションを定義します。プライベート属性の場合は、<PRIVATE_ATTRIBUTES>要素で定義されたグローバル・アクションより、この要素に指定されたアクションが常に優先されます。また、未定義の標準属性またはプライベート属性を<INDIVIDUAL_ATTRIBUTE>要素の値として匿名ドキュメントに指定することはできません。

次の表では、匿名ドキュメントのグローバル・アクションを定義する要素を説明します。

表9-2 グローバル・アクションの要素

要素 説明

<PRIVATE_ATTRIBUTES>

定義済および未定義のすべてのプライベート属性に対して実行するアクションを指定します。

注意: <INDIVIDUAL_ATTRIBUTE>要素で定義したプライベート属性に対するアクションは、<PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションよりも常に優先されます。

<UNDEFINED_STANDARD_ATTRIBUTES>

データ・モデル・リポジトリ内の標準ディクショナリで定義されていないすべての標準属性に対して実行するアクションを指定します。

DICOM属性タグには、グループ番号および要素番号が含まれます。

標準属性タグは偶数のグループ番号で識別されます。

<UNDEFINED_PRIVATE_ATRIBUTES>

データ・モデル・リポジトリ内のプライベート・ディクショナリで定義されていないすべてのプライベート属性に対して実行するアクションを指定します。

注意: この要素で定義したアクション値は、<PRIVATE_ATTRIBUTES >要素で定義したアクション値よりも優先されます。

<ATTRIBUTE_TAG>要素の有効な値の例は、0010001000100010(DICOM)10871100(PRIVATE ORG)などです。

注:

プライベート属性の定義者名として現在使用できるのは、次の値のみです。

  • 大文字と小文字: A-Z

  • 数字: 0-9

  • 文字: 「.」(ドット)、「 」(スペース)、「/」(スラッシュ)

次の各項では、匿名ドキュメントの作成方法の例を示します。

9.2.1.1 標準属性の匿名化

この項では、指定した値で1つの標準属性を置換し、この属性を結果のDICOMコンテンツで匿名化する方法を示します。例9-1は、標準属性Patient's Nameのコード・セグメントを示しています。これらのアクションを定義するXML文は、太字で強調表示しています。

次のコード・セグメントは、<ATTRIBUTE_TAG>の値00100010をデータ・モデル・リポジトリの標準ディクショナリで定義する方法を示しています。定義者名が<ATTRIBUTE_TAG>値に指定されていない場合は、デフォルト値の"DICOM"が使用されます。00100010タグの値は、結果のDICOMコンテンツでは値"anonymous"で置換されます。

標準属性タグ00100010は、標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>00100010</TAG>
   <NAME>Patient's Name</NAME>
   <VR>PN</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示したタグ定義では、<VR>要素で定義されているように、データ型がPNの標準属性Patient's Nameを示しています。<VR>要素は、DICOM標準規格のPart 5で定義されているように、標準データ型の指定に使用される値表現の要素です。データ型PNは、XMLスキーマordcmrdt.xsdに定義されています。属性Patient's Nameを置換する値は、<VR>要素で定義された値の文字列表現であることが必要です。

例9-1 標準属性の匿名化

<INDIVIDUAL_ATTRIBUTE>
   <ATTRIBUTE_TAG>00100010</ATTRIBUTE_TAG>
   <DESCRIPTION>Patient's Name </DESCRIPTION>
   <ANONYMITY_ACTION action="replace">anonymous</ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>
9.2.1.2 未定義の標準属性の匿名化

この項では、アクション値removeを使用して、結果のDICOMコンテンツから未定義の標準属性をすべて削除する方法を示します。例9-2に、このアクションを定義するXML文を示します。

例9-2 すべての未定義の標準属性の削除

<UNDEFINED_STANDARD_ATTRIBUTES action="remove" />
9.2.1.3 選択されたプライベート属性の匿名化

この項では、指定した値で1つのプライベート属性を置換し、この属性を結果のDICOMコンテンツで匿名化する方法を示します。例9-3は、プライベート属性10871100(PRIVATE ORG)のコード・セグメントを示しています。これらのアクションを定義するXML文は、太字で強調表示しています。

例9-3で、定義者名PRIVATE ORGを指定した<ATTRIBUTE_TAG>値10871100は、データ・モデル・リポジトリ内のプライベート・ディクショナリに定義されている必要があります。プライベート属性10871100(PRIVATE ORG)の値は、結果のDICOMコンテンツでは指定した値で置換されます。

プライベート属性タグ10871100は、プライベート・ディクショナリで次のように定義されます。

<PRIVATE_ATTRIBUTE_DEFINITION>
  <TAG>10871100</TAG>
  <NAME>Media Type</NAME>
  <DEFINER>PRIVATE ORG</DEFINER>
  <VR>CS</VR>
  <VM>1</VM>
</PRIVATE_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示したタグ定義では、<VR>要素で定義されているように、データ型がCSで、名前がMedia Typeのプライベート属性10871100(PRIVATE ORG)を示しています。データ型CSは、xs:token of length 16としてXMLスキーマordcmrdt.xsdに定義されています。置換値は、<VR>要素で定義された値に準拠する文字列表現であることが必要です。

例9-3 プライベート属性の匿名化

<INDIVIDUAL_ATTRIBUTE>
   <ATTRIBUTE_TAG>10871100(PRIVATE ORG)</ATTRIBUTE_TAG>
   <DESCRIPTION>Media Type </DESCRIPTION>
   <ANONYMITY_ACTION action="replace"> replaced</ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>
9.2.1.4 すべてのプライベート属性の匿名化

この項に示す例では、いくつかのプライベート属性を削除したり、指定した値で置換することによって、それらの属性を結果のDICOMコンテンツで匿名化する方法を示します。

注:

次のガイドラインに留意してください。

  • <INDIVIDUAL_ATTRIBUTE>要素で定義した特定のプライベート属性に対するアクション値は、<PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションよりも常に優先されます。

  • <UNDEFINED_PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションは、<PRIVATE_ATTRIBUTE>要素で定義したグローバル・アクションよりも優先されます。

例9-4では、アクション値removeを使用して、結果のDICOMコンテンツでプライベート属性をすべて削除するコード・セグメントを示します。

同様に、例9-5では、アクション値removeを使用して、結果のDICOMコンテンツから未定義のプライベート属性をすべて削除するコード・セグメントを示します。また、このコード・セグメントでは、アクション値replaceを使用して、結果のDICOMコンテンツに含まれる定義済のプライベート属性10871100(PRIVATE ORG)のタグ値を"anonymous"で置換します。これらのアクションを定義するXML文は、太字で強調表示しています。

例9-6では、アクション値noneを使用して、定義済のすべてのプライベート属性を結果のDICOMコンテンツに含めるコード・セグメントを示します。また、このコード・セグメントでは、アクション値removeを使用して、結果のDICOMコンテンツから未定義のプライベート属性をすべて削除します。

例9-7では、アクション値removeを使用して、結果のDICOMコンテンツから定義済のすべてのプライベート属性を削除するコード・セグメントを示します。また、このコード・セグメントでは、アクション値noneを使用して、すべての未定義のプライベート属性を結果のDICOMコンテンツに含めます。

例9-4 すべてのプライベート属性の削除

<PRIVATE_ATTRIBUTES action="remove"></PRIVATE_ATTRIBUTES>
<UNDEFINED_PRIVATE_ATTRIBUTES action="remove" />

例9-5 すべての未定義プライベート属性の削除

<PRIVATE_ATTRIBUTES action="remove"></PRIVATE_ATTRIBUTES>
<INDIVIDUAL_ATTRIBUTE>
    <ATTRIBUTE_TAG>10871100(PRIVATE ORG)</ATTRIBUTE_TAG>
    <DESCRIPTION>Media Type </DESCRIPTION>
     <ANONYMITY_ACTION action="replace"> anonymous</ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>

例9-6 定義済プライベート属性の包含および未定義プライベート属性の削除

<PRIVATE_ATTRIBUTES action="none"></PRIVATE_ATTRIBUTES>
<UNDEFINED_PRIVATE_ATTRIBUTES action="remove" /> 

例9-7 定義済プライベート属性の削除および未定義プライベート属性の包含

<PRIVATE_ATTRIBUTES action="remove"></PRIVATE_ATTRIBUTES>
<UNDEFINED_PRIVATE_ATTRIBUTES action="none" /> 
9.2.1.5 匿名ドキュメントでのDICOM値ロケータの使用

この項では、DICOM値ロケータを使用して匿名ドキュメントの属性を指定する方法を示します。例9-8では、DICOM値ロケータとともに属性Person Nameを指定し、結果のDICOMコンテンツで属性を匿名にする方法を示します。この属性は、属性コンテンツ・シーケンス(データ型SQ)の子属性です。このアクションを実行するXML文は、太字で強調表示しています。

標準属性タグ0040A730および0040A123は、標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A730</TAG>
   <NAME>Content Sequence</NAME>
   <VR>SQ</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>
<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A123</TAG>
   <NAME>Person Name</NAME>
   <VR>PN</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

例9-9では、匿名ドキュメントでワイルドカード文字とともにDICOM値ロケータを使用して、結果のDICOMコンテンツにおいて、複数の値を持つ属性を削除する方法を示します。DICOM値ロケータが使用されているXML文は太字で強調表示しています。

標準属性タグ00081050は標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>00081050</TAG>
   <NAME>Performing Physician's Name</NAME>
   <VR>PN</VR>
   <VM>1-n</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示すタグ定義で、<VM>要素は、この属性が複数の値を持てることを示しています。DICOM値ロケータでワイルドカード文字を使用すると、この属性のすべての値が匿名になります。

注:

TAG_FIELDコンポーネントを持つDICOM値ロケータは、匿名ドキュメントではサポートされません。

DICOM値ロケータ・タイプの詳細は、「DICOM値ロケータの一般形式」を参照してください。

例9-8 匿名ドキュメント内の単純なDICOM値ロケータ

<INDIVIDUAL_ATTRIBUTE>
  <ATTRIBUTE_TAG>0040A730[1].0040A123</ATTRIBUTE_TAG>
  <DESCRIPTION> Person Name </DESCRIPTION>
  <ANONYMITY_ACTION action="replace">anonymous</ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>

例9-9 匿名ドキュメント内の、ワイルドカード文字を使用したDICOM値ロケータ

<INDIVIDUAL_ATTRIBUTE>
  <ATTRIBUTE_TAG>00081050[*]</ATTRIBUTE_TAG>
  <DESCRIPTION> Performaing physician's name </DESCRIPTION>
  <ANONYMITY_ACTION action="remove"></ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>

9.2.2 制約ドキュメントの作成

制約ドキュメントでは、1つ以上の制約ルールを定義します。XMLスキーマordcmct.xsdには、制約ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

デフォルトの制約ドキュメント(ordcmct.xmlordcmcmd.xmlordcmcmc.xml)では、DICOM標準規格およびその他の全組織的なガイドラインに従って、DICOMコンテンツの準拠を検証するルールがXMLで表現されています。(これらの構成ドキュメントの詳細は、「DICOM構成ドキュメント」を参照してください。)

実行時に、ユーザーは、コール可能な1つ以上の制約ルールにDICOMコンテンツが準拠しているかを検証するために、PL/SQLまたはJavaファンクションをコールできます。各コール可能な制約ルールは、(<GLOBAL_RULE>要素を使用して)グローバル・ルールとして定義されます。グローバル・ルールは、DICOMコンテンツで満たされる必要のある要件を定義した制約ルールです。

制約ルールは、(<PREDICATE>要素を使用して)複数の個別の制約条件で構成できます。制約条件はDICOMコンテンツの条件を定義します。条件には、論理文、値を比較するリレーショナル文、ブール型を戻すファンクション・コール評価、または他の条件定義への参照を指定できます。条件定義は再帰的です。たとえば、条件を論理文として使用する場合、条件には他の2つの条件の論理ORが含まれます。その他の各条件には、同様にリレーショナル条件を指定できます。

条件は、DICOMコンテンツ内の個々の属性または一連の属性に対して動作します。条件の中では、<ATTRIBUTE_TAG>要素で属性を指定します。属性は、DICOM標準規格によって定義されるか、DICOMコンテンツを作成する民間組織または企業によって定義されます。属性は、単純なDICOM値ロケータまたはより複雑なDICOM値ロケータを使用して指定できます。また、マクロ置換文字列も使用できます(「DICOM値ロケータの一般形式」を参照してください)。

複雑な制約ルールは、制約のマクロを使用すると定義しやすくなります。各制約マクロは、(<GLOBAL_MACRO>要素を使用して)グローバル・マクロとして定義できます。制約マクロで条件を定義するときの構文の記述方法は、制約ルールと同じです。制約マクロが制約ルールと異なる点は、制約ルールでは条件オペランドに固定値を含みますが、制約マクロではマクロ・パラメータを含めることができるという点です。制約マクロのマクロ・パラメータは、(<INVOKE_MACRO>要素を使用して)マクロがコールされたときに、パラメータ値と置換されます。制約マクロは再帰的に使用することもできます。たとえば、制約マクロAがあり、そのマクロがそれ自体をコールする場合や、制約マクロAをコールする他の制約マクロを制約マクロAがコールする場合、制約マクロAは再帰的になります。再帰的な制約マクロは、階層構造や再帰構造になったDICOMコンテンツ(DICOM構造化レポートのコンテンツなど)の検証要件を指定する場合に便利です。

制約定義は、複数の制約ドキュメント・ファイルに分割して、各制約ファイルで1つ以上の制約ルールまたは制約マクロを定義することができます。グローバル・ルールおよびグローバル・マクロは、内部および外部の他のグローバル・ルールおよびグローバル・マクロを参照できます。内部ルールおよび内部マクロは、同じ制約ファイル内に定義します。外部ルールおよび外部マクロは、それらのルールおよびマクロが定義された他の制約ドキュメント・ファイルからインポートします。一連の外部制約ルールまたは外部制約マクロを制約ファイル内で参照する前に、(それぞれ<EXTERNAL_RULE_INCLUDE>要素または<EXTERNAL_MACRO_INCLUDE>要素を使用して)それらのルールまたはマクロをファイルに指定する必要があります。さらに、DICOM管理者は、参照元制約ファイルを挿入する前に参照先制約ドキュメント・ファイルをリポジトリに挿入する必要があります。

XML制約スキーマordcmct.xsdでは、<ACTION>要素を使用して、準拠の検証メッセージを条件、制約ルールまたは制約マクロに関連付けます。条件に関連付けられた<ACTION>要素に指定された条件に対して条件を評価する場合は、ビューorddcm_conformance_vld_msgsを問い合せて、準拠検証後のメッセージを確認できます。(詳細は「orddcm_conformance_vld_msgs」を参照してください。)

次の各項では、様々な制約ドキュメントの作成方法の例を示します。

注:

次の各項では、DICOM標準規格の表を参照しています。これらの表の詳細はDICOM標準規格を参照してください(次の米国電機工業会(NEMA)のWebサイトにあります)。

http://medical.nema.org/

9.2.2.1 単純な制約ルールの定義

この項では、SOP共通モジュールで必要とされる2つの条件をチェックする単純な制約ルールの作成方法を示します(SOP共通モジュールは、DICOM標準規格のPS 3.3のTable C.12-1に定義されています)。

次の表に、DICOM標準規格のSOP共通モジュールに定義されているSOP Class UIDの条件およびSOP Instance UIDの条件を示します。

属性名 タグ 属性の説明

SOPクラスUID

(0008,0016)

1

SOPクラスを一意に識別します。詳細は、C.12.1.1.1を参照してください。PS 3.4も参照してください。

SOPインスタンスUID

(0008,0018)

1

SOPインスタンスを一意に識別します。詳細は、C.12.1.1.1を参照してください。PS 3.4も参照してください。

前述の表の2つのエントリは、属性SOP Class UID (0008,0016)およびSOP Instance UID (0008,0018)が存在する必要があり、空にすることができないことを示しています。

例9-10のコード・セグメントは、属性SOP Class UID (0008,0016)が空でないかどうかをチェックする条件を示しています。

例9-11のコード・セグメントは、属性SOP Instance UID (0008,0018)が空でないかどうかをチェックする条件を示しています。

これら両方の属性が空でないかどうかをチェックすることは、例9-10例9-11に示した2つの条件を論理AND演算するのと同じことです。この演算が実行されるようにするには、前述の2つの条件を論理AND演算する別の条件を定義します。例9-12に、これら2つの条件に対する論理AND演算を含む条件を示します。

論理AND関係を持つ条件を定義するための簡単な方法は、例9-12に示す外側の条件を省略することです。したがって、制約ドキュメントordcmcmd.xmlの制約ルール全体を使用すると、グローバル・ルールSOPCommonModuleは、例9-13に示すように定義できます。

各グローバル・ルールには、一意の名前を指定する必要があります。さらに、各グローバル・ルールにオプションの<DESCRIPTION>要素を含め、ルールの説明を記述できます。

例9-13のコード・セグメントは、ブール関数または論理関係を表す条件を定義する方法を示しています。リレーショナルな関係を表現する条件も、同様に定義できます。

例9-14は、グローバル・ルール内に2つの条件の例を示したコードの一部です。これらの条件により、検証するDICOMコンテンツがグローバル・ルールの属性を含まない場合にエラーが発生しないことが保証されます。例3-1は、(患者モジュールに対する)このグローバル・ルールの完全なコード・セグメントを示しています。

例9-14の最初の条件は、属性Patient's Sex (0010, 0040)が空でないという条件をテストします。この条件により、準拠の検証中にこの条件がtrueを返した場合にのみ、属性Patient's Sex (0010, 0040)を参照するその後のすべての条件がテストされるようになります。そのため、2番目の条件がテストされるのは、検証するDICOMコンテンツが属性Patient's Sex (0010, 0040)を含み、かつその値が空でない場合のみです。したがって、DICOMコンテンツが属性Patient's Sex (0010, 0040)を含まない場合は、エラーが発生しません。

リレーショナル関係を表す条件の別の例については、「再帰的な制約マクロの定義」を参照してください。

例9-10 SOPクラスUIDを対象とする1つの条件に対応する条件

    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080016</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>

例9-11 SOPインスタンスUIDを対象とする1つの条件に対応する条件

   <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080018</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>

例9-12 2つの条件に対応する条件

 <PREDICATE>
    <LOGICAL operator="and">
     <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080016</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080018</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
   </LOGICAL>
</PREDICATE>

例9-13 2つのブール型関数に対するグローバル・ルール

  <GLOBAL_RULE name="SOPCommonModule">
    <DESCRIPTION>
      A subset of SOP Common Module defined in DICOM standard
    </DESCRIPTION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080016</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080018</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
  </GLOBAL_RULE>

例9-14 患者の性別に対する2つの条件に対応するグローバル・ルール

<GLOBAL_RULE name="PatientModule">
.
.
.
   <PREDICATE>
     <BOOLEAN_FUNC operator="notEmpty">
       <ATTRIBUTE_TAG>00100040</ATTRIBUTE_TAG>
     </BOOLEAN_FUNC>
   </PREDICATE>
   <PREDICATE>
     <DESCRIPTION>Patient's Sex</DESCRIPTION>
     <RELATIONAL operator="in">
       <ATTRIBUTE_TAG>00100040</ATTRIBUTE_TAG>
       <STRING_VALUE>M</STRING_VALUE>
       <STRING_VALUE>F</STRING_VALUE>
       <STRING_VALUE>O</STRING_VALUE>
     </RELATIONAL>
   </PREDICATE>
.
.
.
</GLOBAL_RULE>
9.2.2.2 他の制約ルールのインポートによる制約ルールの定義

この項では、他の外部制約ルールを参照することで階層的な制約ルールを作成する方法を示します。この項では、外部制約ルールを参照する方法も示します。

制約ドキュメントordcmct.xmlには、グローバル・ルールOracleOrdObjectが定義されています。この制約ルールは、3つの制約ルールSOPCommonModuleGeneralSeriesModuleGeneralStudyModuleの論理AND関係として定義されています。例9-15に、これら3つの制約ルールの論理AND関係を持つグローバル・ルールを示します。

これら3つの制約ルールは制約ドキュメントordcmcmd.xmlに定義されており、DICOM制約ドキュメントordcmct.xmlにインポートされます。例9-16に、これらの制約ルールに対する外部ルールを示します。

したがって、グローバル・ルールOracleOrdObjectは、「単純な制約ルールの定義」で定義されたグローバル・ルールSOPCommonModuleを参照します。グローバル・ルールSOPCommonModuleは、他の制約ルールからも参照できます。このように、制約ドキュメントはモジュール化したり構造化して記述できます。

例9-15 論理関係に対するグローバル・ルール

 <GLOBAL_RULE name="OracleOrdObject">
  <PREDICATE>
    <GLOBAL_RULE_REF>SOPCommonModule</GLOBAL_RULE_REF>
  </PREDICATE>
  <PREDICATE>
    <GLOBAL_RULE_REF>GeneralSeriesModule</GLOBAL_RULE_REF>
  </PREDICATE>
  <PREDICATE>
    <GLOBAL_RULE_REF>GeneralStudyModule</GLOBAL_RULE_REF>
  </PREDICATE>  
 </GLOBAL_RULE>

例9-16 3つの制約ルールに対する外部ルール

 <EXTERNAL_RULE_INCLUDE name="GeneralStudyModule">
   A subset of General Study Module defined in DICOM standard
 </EXTERNAL_RULE_INCLUDE>   
 <EXTERNAL_RULE_INCLUDE name="GeneralSeriesModule">
   A subset of General Series Module defined in DICOM standard
 </EXTERNAL_RULE_INCLUDE> 
 <EXTERNAL_RULE_INCLUDE  name="SOPCommonModule">
   A subset of SOP Common Module defined in DICOM standard
 </EXTERNAL_RULE_INCLUDE>
9.2.2.3 制約マクロの定義および参照

この項では、DICOM属性がコード・シーケンス属性であるかどうかをチェックする制約マクロを作成する方法を示します。制約マクロは、DICOM標準規格のPS 3.3のTable 8.8-1で定義されるコード・シーケンス・マクロに必要な最初の2つの条件に従ってこのチェック操作を実行します。

次の表に、DICOM標準規格のコード・シーケンス・マクロに定義されているCode ValueとCoding Scheme Designatorの条件を示します。

属性名 タグ 属性の説明

コードの値

(0008,0100)

1C

第8.1項を参照してください。シーケンス項目が存在する場合は必須。

コード体系指定子

(0008,0102)

1C

第8.2項を参照してください。シーケンス項目が存在する場合は必須。

前述の表の2つのエントリは、必須の子属性Code Value (0008,0100)およびCoding Scheme Designator (0008,0102)を空にすることができないことを示しています。

例9-17に、属性Code Value (0008,0100)およびCoding Scheme Designator (0008,0102)が空でないかどうかをチェックする(デフォルトの制約ドキュメントordcmcmc.xmlからの)グローバル・マクロ定義を示します。

制約マクロに含まれる条件には、パラメータを持つオペランドが含まれます。これらのパラメータは、<PARAMETER_DECLARATION>要素で定義する必要があります。これらのオペランドでパラメータを参照する場合は、${ }のように、ドル記号を付けた括弧でパラメータを囲む必要があります。前述のコード・セグメントでは、パラメータCodeAttrがチェック対象のコード・シーケンスを表します。したがって、パラメータCodeAttrのコード値が空でないかどうかをチェックすることは、パラメータ${CodeAttr}.00080100が空でないかどうかをチェックするのと同じことです。

制約マクロは、マクロ・パラメータに異なる値を設定した、1つ以上の制約ルールからコールされることがあります。制約マクロをコールするには、マクロ名と、そのマクロの全パラメータの名前/値ペアを指定する必要があります。

例9-18に、制約マクロCodeSequenceMacroをコールする(デフォルトの制約ドキュメントordcmcmd.xmlからの)グローバル・ルールGeneralSeriesModuleの定義を示します。このマクロをコールするコード文は太字で強調表示しています。

制約マクロCodeSequenceMacroは別の制約ファイルで定義されているため、制約ドキュメントordcmcmd.xmlの先頭で、次のようにインポートしています。

<EXTERNAL_MACRO_INCLUDE name="CodeSequenceMacro">
Defines a code sequence macro</EXTERNAL_MACRO_INCLUDE>

DICOMコンテンツが制約ルールGeneralSeriesModuleに従っているかどうかをユーザーがチェックするとき、DICOMコンテンツは制約マクロCodeSequenceMacroに対してチェックされます。このとき、パラメータCodeAttr00400260に置換されます。具体的には、<ATTRIBUTE_TAG>要素${CodeAttr}.00080100 not emptyをチェックする条件が00400260.00080100 not emptyになります。さらに、<ATTRIBUTE_TAG>要素${CodeAttr}.00080102 not empty00400260.00080102 not emptyになります。

パラメータCodeAttr00400260に置換した制約マクロCodeSequenceMacroがDICOMコンテンツでfalseと評価される場合は、ビューorddcm_conformance_vld_msgsに、DICOMコンテンツに対するメッセージ「missing attribute 00400260.00080100 or 00400260.00080102」が含まれます。これらの準拠の検証メッセージを使用して、DICOMコンテンツに含まれる、制約ルールに準拠していない特定の属性に関する情報を確認できます。

これらのメッセージの詳細は、orddcm_conformance_vld_msgsビューを参照してください。

例9-17 条件に対するグローバル・マクロ

  <GLOBAL_MACRO name="CodeSequenceMacro">
   <DESCRIPTION>
     A subset of Code Sequence Macro defined in DICOM standard
   </DESCRIPTION>
  <PARAMETER_DECLARATION>CodeAttr</PARAMETER_DECLARATION>
  <PREDICATE>
   <DESCRIPTION>Code value must not be empty</DESCRIPTION>
   <BOOLEAN_FUNC operator="notEmpty">
    <ATTRIBUTE_TAG>${CodeAttr}.00080100</ATTRIBUTE_TAG>
   </BOOLEAN_FUNC>
  </PREDICATE>
  <PREDICATE>
   <DESCRIPTION>Coding scheme designator must not be empty</DESCRIPTION>
   <BOOLEAN_FUNC operator="notEmpty">
    <ATTRIBUTE_TAG>${CodeAttr}.00080102</ATTRIBUTE_TAG>
   </BOOLEAN_FUNC>
  </PREDICATE>
 </GLOBAL_MACRO>

例9-18 制約マクロを持つグローバル・ルール

<GLOBAL_RULE name="GeneralSeriesModule">
    <DESCRIPTION>
      A subset of General Series Module defined in DICOM standard
    </DESCRIPTION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>00080060</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
      <ACTION action="warning" when="false">
        missing attribute 00080060 
      </ACTION>
    </PREDICATE>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>0020000E</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
      <ACTION action="warning" when="false">
        missing attribute 0020000E 
      </ACTION>
    </PREDICATE>
    <PREDICATE>
      <LOGICAL operator="derive">
        <PREDICATE>
          <BOOLEAN_FUNC operator="notEmpty">
            <ATTRIBUTE_TAG>00400260</ATTRIBUTE_TAG>
          </BOOLEAN_FUNC>
        </PREDICATE>
        <PREDICATE>
          <INVOKE_MACRO>
            <MACRO_NAME>CodeSequenceMacro</MACRO_NAME>
            <PARAMETER>
              <NAME>CodeAttr</NAME>
              <VALUE>00400260</VALUE>
            </PARAMETER>
          </INVOKE_MACRO>
          <ACTION action="warning" when="false">
            missing attribute 00400260.00080100 or 00400260.00080102 
          </ACTION>
        </PREDICATE>
      </LOGICAL>
    </PREDICATE>
    <ACTION action="warning" when="false">
      GeneralSeriesModule is not satisfied
    </ACTION>
  </GLOBAL_RULE>  
9.2.2.4 再帰的な制約マクロの定義

この項では、DICOM標準規格のPS 3.3のSection C.17.3で定義されているSRドキュメント・コンテンツ・モジュールに必要な属性のサブセットをチェックする例を2つ示します。

次の表に、Table C.17-6のドキュメント関係マクロ属性で定義されているコンテンツ・シーケンスおよび関係タイプの属性を示します。この表には、値タイプ属性も示しています(この属性もTable C.17-5のドキュメント・コンテンツ・マクロ属性で定義されています)。

属性名 タグ 属性の説明

コンテンツ・シーケンス

(0040,A730)

1C

外側のソース・コンテンツ項目との関係のターゲットであるコンテンツを保持する項目を再帰的にネストできるシーケンス。

このシーケンスには1つ以上の項目を含めることができます。

外側のコンテンツ項目が関係を持つ場合に必要です。

注:

  1. この属性が存在しない場合、外側の項目はリーフです。

  2. このシーケンス内での項目の順序は、表示上の意味を持っています。

詳細は、C.17.3.2.4を参照してください。

関係のタイプ

(0040,A010)

1

(外側の)ソース・コンテンツ項目とターゲット・コンテンツ項目の間の関係のタイプ。

IODは、(列挙値のリストを含め)関係に対する追加の制約を指定します。

定義されている条件:

  • CONTAINS
  • HAS PROPERTIES
  • HAS OBS CONTEXT
  • HAS ACQ CONTEXT
  • INFERRED FROM
  • SELECTED FROM
  • HAS CONCEPT MOD

詳細は、C.17.3.2.4を参照してください。

値の型

(0040,A040)

1

このコンテンツ項目内でエンコードされる値の型。

定義されている条件:

  • TEXT
  • NUM
  • CODE
  • DATETIME
  • DATE
  • TIME
  • UIDREF
  • PNAME
  • COMPOSITE
  • IMAGE
  • WAVEFORM
  • SCOORD
  • TCOORD
  • CONTAINER

詳細は、C.17.3.2.1を参照してください。

たとえば、属性Content Sequence (0040,A730)は、再帰的にコンテンツ項目をネストすることにより、コンテンツ・ツリーの階層構造(DICOM標準規格のPS 3.3のSection C.17.3.1)を提供します。親(ソース)コンテンツ項目は、それぞれの子(ターゲット)のコンテンツ項目に対する明示的な関係を持ちます。この関係は、属性Relationship Type (0040,A010)に保持されます(DICOM標準規格のPS 3.3のSection C.17.3.2.4)。

無限ループを回避し、評価する階層構造のレベル数を制御するには、プリファレンス・ドキュメントでプリファレンス・パラメータMAX_RECURSION_DEPTHを使用して制約マクロの再帰レベルの数を指定します。プリファレンス・ドキュメントでのこのプリファレンス・パラメータの定義の詳細は、「MAX_RECURSION_DEPTHプリファレンス・パラメータの定義」を参照してください。

例9-19のコード・セグメントは、1つの制約マクロがそれ自体をコールする再帰の例です。例9-20のコード・セグメントは、2つの制約マクロの間での再帰の例です。この例では、最初のマクロが2番目のマクロをコールすると、2番目のマクロが最初のマクロをコールします。

注:

この項の例はインストール・ソフトウェアに付属していません。

1つの制約マクロによる再帰

例9-19では、再帰的なグローバル制約マクロDocumentContentMacroを定義しています。このマクロは、グローバル制約ルールDocumentContentModuleによってコールされます。このマクロを定義およびコールしているコード文は太字で強調表示しています。

準拠の検証中には、<ACTION>要素のwhen属性で指定された条件をDICOMコンテンツの対応する属性が満たすと評価されたDICOM値ロケータによって、<ACTION>要素の${RUNTIME_TAG}タグが置換されます。最初のアクションでは、DICOMコンテンツ内の対応する属性が空でない、すべてタグ0040A040で終わるDICOM値ロケータのリストを含むメッセージが作成されます。2番目のアクションでは、DICOMコンテンツ内の対応する属性がCONTAINERに一致しない、すべてタグ0040A040で終わるDICOM値ロケータのリストを含むメッセージが作成されます。

例9-19では、再帰的な制約マクロが、そのマクロに定義されたパラメータの名前/値ペアを指定してそのマクロ自体をコールするときに再帰が発生します。

マクロDocumentContentMacroの定義では、最初の条件で、属性${tag}.0040A010が空でないかどうかをチェックします。2番目の条件では、関係演算を使用して、この属性の値が有効であるかどうかをチェックします。3番目の条件では、属性${tag}.0040A040が空でないかどうかをチェックします。4番目の条件では、${tag}.0040A040の値がCONTAINERであるかどうかをチェックします。その場合は、${tag}.0040A730[*]のコンテンツ・シーケンスに対してマクロDocumentContentMacroがコールされます。コード[*]は、マクロによってチェックされる制約ドキュメント内の番号付きの一連の属性を表すワイルドカード文字です。

2つの制約マクロによる再帰

例9-20では、2つの再帰的なグローバル制約マクロDocumentContentMacroAおよびDocumentContentMacroBを定義しています。このマクロを定義およびコールしているコード文は太字で強調表示しています。

例9-20では、DocumentContentMacroBDocumentContentMacroAをコールした後、DocumentContentMacroADocumentContentMacroBをコールするときに再帰が発生します。

例9-19 再帰がある1つの制約マクロ

<GLOBAL_MACRO name="DocumentContentMacro">
    <PARAMETER_DECLARATION>tag</PARAMETER_DECLARATION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <RELATIONAL operator="in">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
        <STRING_VALUE>CONTAINS</STRING_VALUE>
        <STRING_VALUE>HAS PROPERTIES</STRING_VALUE>
        <STRING_VALUE>HAS OBS CONTEXT</STRING_VALUE>
        <STRING_VALUE>HAS ACQ CONTEXT</STRING_VALUE>
        <STRING_VALUE>INFERRED FROM</STRING_VALUE>
        <STRING_VALUE>SELECTED FROM</STRING_VALUE>
        <STRING_VALUE>HAS CONCEPT MOD</STRING_VALUE>
      </RELATIONAL>
    </PREDICATE>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${tag}.0040A040</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
      <ACTION action="log" when="true">${RUNTIME_TAG} is not empty</ACTION>
    </PREDICATE>
    <PREDICATE>
      <LOGICAL operator="derive">
        <PREDICATE>
          <RELATIONAL operator="eq">
            <ATTRIBUTE_TAG>${tag}.0040A040</ATTRIBUTE_TAG>
            <STRING_VALUE>CONTAINER</STRING_VALUE>
          </RELATIONAL>
           <ACTION action="log" when="false">${RUNTIME_TAG} value is not
             CONTAINER</ACTION>
        </PREDICATE>
        <PREDICATE>
          <INVOKE_MACRO>
            <MACRO_NAME>DocumentContentMacro</MACRO_NAME>
            <PARAMETER>
              <NAME>tag</NAME>
              <VALUE>${tag}.0040A730[*]</VALUE>
            </PARAMETER>
          </INVOKE_MACRO>
        </PREDICATE>
      </LOGICAL>
    </PREDICATE>
  </GLOBAL_MACRO>
<GLOBAL_RULE name="DocumentContentModule">
    <PREDICATE>
      <INVOKE_MACRO>
        <MACRO_NAME>DocumentContentMacro</MACRO_NAME>
        <PARAMETER>
          <NAME>tag</NAME>
          <VALUE>0040A730[*]</VALUE>
        </PARAMETER>
      </INVOKE_MACRO>
    </PREDICATE>
  </GLOBAL_RULE>

例9-20 再帰がある2つの制約マクロ

  <GLOBAL_MACRO name="DocumentContentMacroA">
    <PARAMETER_DECLARATION>attr</PARAMETER_DECLARATION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${attr}.0040A040</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <LOGICAL operator="derive">
        <PREDICATE>
          <RELATIONAL operator="eq">
            <ATTRIBUTE_TAG>${attr}.0040A040</ATTRIBUTE_TAG>
            <STRING_VALUE>CONTAINER</STRING_VALUE>
           </RELATIONAL>
        </PREDICATE>
        <PREDICATE>
          <INVOKE_MACRO>
            <MACRO_NAME>DocumentContentMacroB</MACRO_NAME>
            <PARAMETER>
              <NAME>tag</NAME>
              <VALUE>${attr}.0040A730[*]</VALUE>
            </PARAMETER>
          </INVOKE_MACRO>
        </PREDICATE>
      </LOGICAL>
    </PREDICATE>
  </GLOBAL_MACRO>
 
  <GLOBAL_MACRO name="DocumentContentMacroB">
    <PARAMETER_DECLARATION>tag</PARAMETER_DECLARATION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <RELATIONAL operator="in">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
        <STRING_VALUE>CONTAINS</STRING_VALUE>
        <STRING_VALUE>HAS PROPERTIES</STRING_VALUE>
        <STRING_VALUE>HAS OBS CONTEXT</STRING_VALUE>
        <STRING_VALUE>HAS ACQ CONTEXT</STRING_VALUE>
        <STRING_VALUE>INFERRED FROM</STRING_VALUE>
        <STRING_VALUE>SELECTED FROM</STRING_VALUE>
        <STRING_VALUE>HAS CONCEPT MOD</STRING_VALUE>
      </RELATIONAL>
    </PREDICATE>
    <PREDICATE>
      <INVOKE_MACRO>
        <MACRO_NAME>DocumentContentMacroA</MACRO_NAME>
        <PARAMETER>
          <NAME>attr</NAME>
          <VALUE>${tag}</VALUE>
        </PARAMETER>
      </INVOKE_MACRO>
    </PREDICATE>
  </GLOBAL_MACRO>
9.2.2.5 制約ドキュメント内でのDICOM値ロケータの使用

この項では、DICOM値ロケータを使用して制約ドキュメント内の属性を指定する方法を示します。DICOM値ロケータを使用すると、プライベート属性とその定義者を含む条件を指定できます。DICOM値ロケータには、制約ドキュメントがリポジトリにロードされるときの置換用のマクロを含めることができます。

次のリストに、有効なマクロ置換文字列の例を示します。

  • 完全な一連のサブロケータ

  • タグ(特別なワイルドカード・タグ「.」を含む)

  • 定義者名(DICOM、デフォルトの名前またはプライベート定義者の名前)

  • 項目番号(正の整数またはワイルドカード文字「*」)

詳細は、「DICOM値ロケータの一般形式」を参照してください。

例9-21に、グローバル制約マクロのDICOM値ロケータを使用して属性Content Sequenceを指定し、実行時に結果のログを作成する方法を示します。(この例では例9-19のコードの一部を使用しています。)DICOM値ロケータは太字で強調表示しています。

標準の属性タグ0040A0100040A040および0040A730は、標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A010</TAG>
   <NAME>Relationship Type</NAME>
   <VR>CS</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>
<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A040</TAG>
   <NAME>Value Type</NAME>
   <VR>CS</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>
<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A730</TAG>
   <NAME>Content Sequence</NAME>
   <VR>SQ</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示したタグの定義では、タグ0040A730の<VR>要素が、このタグがシーケンス・タグであり、DICOMコンテンツ内の対応する属性に複数のシーケンス項目を入れられることを示しています。DICOM値ロケータでワイルドカード文字を使用すると、この属性のすべての項目がチェックされるようになります。

例9-22に、グローバル・ルールでDICOM値ロケータによってすべてのRelationship Type属性を指定する方法を示します。DICOM値ロケータは太字で強調表示しています。

例9-22では、すべての0040A010属性のDICOM値ロケータが特別なワイルドカード・タグ「.」を含んでおり、条件で、DICOMコンテンツ内のすべてのRelational型属性をチェックする関係演算を実行することを示しています。

注:

DICOM値ロケータで特別なワイルドカード・タグ「.」を使用する場合は、次の制限が適用されます。

  • 1つの条件のオペランドのみで使用できます。

  • 再帰的な制約マクロの中では使用できません。再帰的な制約マクロをコールすることもできません。

DICOM値ロケータ・タイプの詳細は、「DICOM値ロケータの一般形式」を参照してください。

例9-21 制約マクロでワイルドカード文字を使用したDICOM値ロケータ

<GLOBAL_MACRO name="DocumentContentMacro">
    <PARAMETER_DECLARATION>tag</PARAMETER_DECLARATION>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
    </PREDICATE>
    <PREDICATE>
      <RELATIONAL operator="in">
        <ATTRIBUTE_TAG>${tag}.0040A010</ATTRIBUTE_TAG>
        <STRING_VALUE>CONTAINS</STRING_VALUE>
        <STRING_VALUE>HAS PROPERTIES</STRING_VALUE>
        <STRING_VALUE>HAS OBS CONTEXT</STRING_VALUE>
        <STRING_VALUE>HAS ACQ CONTEXT</STRING_VALUE>
        <STRING_VALUE>INFERRED FROM</STRING_VALUE>
        <STRING_VALUE>SELECTED FROM</STRING_VALUE>
        <STRING_VALUE>HAS CONCEPT MOD</STRING_VALUE>
      </RELATIONAL>
    </PREDICATE>
    <PREDICATE>
      <BOOLEAN_FUNC operator="notEmpty">
        <ATTRIBUTE_TAG>${tag}.0040A040</ATTRIBUTE_TAG>
      </BOOLEAN_FUNC>
      <ACTION action="log" when="true">${RUNTIME_TAG} is not empty</ACTION>
    </PREDICATE>
    <PREDICATE>
      <LOGICAL operator="derive">
        <PREDICATE>
          <RELATIONAL operator="eq">
            <ATTRIBUTE_TAG>${tag}.0040A040</ATTRIBUTE_TAG>
            <STRING_VALUE>CONTAINER</STRING_VALUE>
          </RELATIONAL>
           <ACTION action="log" when="false">${RUNTIME_TAG} value is not
             CONTAINER</ACTION>
        </PREDICATE>
        <PREDICATE>
          <INVOKE_MACRO>
            <MACRO_NAME>DocumentContentMacro</MACRO_NAME>
            <PARAMETER>
              <NAME>tag</NAME>
              <VALUE>${tag}.0040A730[*]</VALUE>
            </PARAMETER>
          </INVOKE_MACRO>
        </PREDICATE>
      </LOGICAL>
    </PREDICATE>
  </GLOBAL_MACRO>
<GLOBAL_RULE name="DocumentContentModule">
    <PREDICATE>
      <INVOKE_MACRO>
        <MACRO_NAME>DocumentContentMacro</MACRO_NAME>
        <PARAMETER>
          <NAME>tag</NAME>
          <VALUE>0040A730[*]</VALUE>
        </PARAMETER>
      </INVOKE_MACRO>
    </PREDICATE>
  </GLOBAL_RULE>

例9-22 グローバル・ルールで特別なワイルドカード・タグを使用したDICOM値ロケータ

<GLOBAL_RULE name="MagicTagTest">
    <PREDICATE>
       <RELATIONAL operator="in">
        <ATTRIBUTE_TAG>..0040A010</ATTRIBUTE_TAG>
        <STRING_VALUE>CONTAINS</STRING_VALUE>
        <STRING_VALUE>HAS PROPERTIES</STRING_VALUE>
        <STRING_VALUE>HAS OBS CONTEXT</STRING_VALUE>
        <STRING_VALUE>HAS ACQ CONTEXT</STRING_VALUE>
        <STRING_VALUE>INFERRED FROM</STRING_VALUE>
        <STRING_VALUE>HAS CONCEPT MOD</STRING_VALUE>
      </RELATIONAL>
      <ACTION action="log" when="false">${RUNTIME_TAG} does not contain required
        values</ACTION>
    </PREDICATE>
  </GLOBAL_RULE>
 

9.2.3 マッピング・ドキュメントとメタデータXMLスキーマの作成

マッピング・ドキュメントでは、DICOM属性をXML文書にマップする方法を定義します。メタデータXML文書は、XMLスキーマで制約を加えることも、XMLスキーマの制約を指定せずに整形式XML文書にすることも可能です。

XMLスキーマordcmmp.xsdには、マッピング・ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

次の各項では、マッピング・ドキュメントおよびメタデータXMLスキーマの構造について説明します。次の各項では、マッピング・ドキュメントおよびそれに対応するメタデータ・スキーマの作成方法のコード例も示します。

9.2.3.1 マッピング・ドキュメントの構造

各マッピング・ドキュメントには、次に示すように、ルート要素および名前空間宣言を含める必要があります。

<XML_MAPPING_DOCUMENT xmlns="http://xmlns.oracle.com/ord/dicom/mapping_1_0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/ord/dicom/mapping_1_0
http://xmlns.oracle.com/ord/dicom/mapping_1_0"> 

次に、マッピング・ドキュメントの残りの要素を、出現する順に示します。

  • <dt:DOCUMENT_HEADER>: この要素はオプションです。XML文書の更新レコードを保持するために使用します。この要素を指定する場合は、次の名前空間宣言をルート要素に追加してください。

    namespace: xmlns:dt=http://xmlns.oracle.com/ord/dicom/datatype_1_0"
    
  • <NAMESPACE>: メタデータXML文書の名前空間を指定する必須要素です。この名前空間は、対応するメタデータ・スキーマのターゲットの名前空間と一致している必要があります。この要素が空の場合、抽出されたメタデータXMLはスキーマの制約を受けません。

  • <ROOT_ELEM_TAG>: メタデータXML文書のルート要素名を指定する必須要素です。

  • <UNMAPPED_ELEM>: すべてのアンマップ属性の親要素である要素へのXMLパスを指定する要素です。このXMLパスは、メタデータXMLの(<ROOT_ELEM_TAG>要素で指定する)ルート要素に対する相対パスです。この要素を省略または空にした場合は、メタデータXML文書のルート要素がアンマップ属性の親要素になります。アンマップ属性の詳細は、「DICOMコンテンツからのメタデータの抽出」を参照してください。

  • <MAPPED_ELEM>: すべてのマップ済属性の親要素である要素へのXMLパスを指定する要素です。このXMLパスは、メタデータXMLの(<ROOT_ELEM_TAG>要素で指定する)ルート要素に対する相対パスです。この要素を省略または空にした場合は、メタデータXML文書のルート要素がマップ済属性の親要素になります。マップ済属性の詳細は、「DICOMコンテンツからのメタデータの抽出」を参照してください。

  • <MAPPED_PATH>: マップ済属性へのXMLパスを指定する要素です。このXMLパスは、<MAPPED_ELEM>要素で定義されたマップ済属性の親要素に対する相対パスです。すべてのマップ済属性へのXMLパスを指定するには、この要素をマッピング・ドキュメント内で複数回使用します。各<MAPPED_PATH>要素が出現する順番は、メタデータXML文書内でマップ済属性が出現する順番に対応します。<MAPPED_PATH>要素内では、<ATTRIBUTE_TAG>要素と<PATH>要素を使用して、各マップ済属性のタグとXMLパスをそれぞれ定義します。

9.2.3.2 メタデータXMLスキーマの構造

DICOMメタデータを抽出してXML文書にエンコーディングする処理では、DICOM属性をXML文書にエンコーディングするためにマッピング・ドキュメントが使用され、エンコーディング済のメタデータXML文書を検証するためにXMLスキーマが使用されます。DICOMメタデータをスキーマ妥当性のあるXML文書に抽出するには、メタデータXML文書用のマッピング・ドキュメントとXMLスキーマ定義が同期している必要があります。

特定のアプリケーションに固有のメタデータXML文書に対して、XMLスキーマを作成する際の一般的なルールは次のとおりです。

  • XMLスキーマの要素は、マップされた要素のXMLパスと同じ順番で定義する必要があります。

  • XMLスキーマでは、スキーマordcmmddt.xsdにOracleで定義されたデータ型と互換性があるか、またはOracle定義のデータ型より制約が緩いデータ型を使用する必要があります。

  • アンマップDICOM属性をXML文書に抽出する場合は、アンマップ属性の親要素が(スキーマordcmmddt.xsdと同様に)DATASET_T型として定義されている必要があります。

  • マッピング・ドキュメントで<MAPPED_PATH>要素の属性writeTagwriteNamewriteDefinerおよびwriteRawValue"true"に設定する場合は、マッピング・ドキュメントの<MAPPED_PATH>要素で記述した各要素に対応する属性tagnamedefinerおよびrawValueをXMLスキーマで定義する必要があります。

  • マッピング・ドキュメントで<MAPPED_PATH>要素の属性occursを、暗黙的または明示的に"false"に設定する場合は、その要素のXMLスキーマ定義で属性minOccurs"0"に設定する必要があります。

  • マッピング・ドキュメントで<MAPPED_PATH>要素の属性notEmpty"false"に設定する場合は、その要素のXMLスキーマ定義で属性xsi:nillable"true"に設定する必要があります。"そうでない場合は、<MAPPED_PATH>要素で定義された要素に空の値を許可する必要があります。

9.2.3.3 スキーマ制約を指定しないメタデータ用のマッピング・ドキュメントの作成

この項では、XMLスキーマ制約を指定しないマッピング・ドキュメントおよび整形式メタデータXML文書を作成する方法を説明します。整形式メタデータXML文書のみを必要とするアプリケーションの場合は、抽出されたメタデータがXMLスキーマに準拠している必要はないため、マッピング・ドキュメントに空の<NAMESPACE>要素を含めることができます。

また、この項ではマッピング・ドキュメントのコード例も示し、その後に結果のメタデータXML文書のコード例を示します。該当するXML文は太字で強調表示して、マッピング・ドキュメントおよび関連XML文書の両方で主なアクションが実行される箇所を示しています。太字で表示した各XML文の説明は、例の後にあります。

例9-23に、空の<NAMESPACE>要素を持つサンプル・マッピング・ドキュメントを示します。また、抽出されるメタデータXML文書を定義するために、<MAPPED_PATH>要素のoccursnotEmptywriteTagwriteDefinerおよびwriteNameの各属性に指定する値も示しています。これらの属性が指定されていない場合は、デフォルト値の"false"が属性に設定されます。

例9-24に、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPEDに設定してXMLメタデータを抽出した結果のメタデータXML文書を示します。

例9-23および例9-24では、次のアクションが実行されます。

  • マッピング・ドキュメントでは、<NAMESPACE>要素が空です。そのため、抽出されたXML文書はXMLスキーマの制約を受けず、結果のXML文書にはデフォルトの名前空間宣言が含まれません。

  • マッピング・ドキュメントの<ROOT_ELEM_TAG>要素は、抽出されたXML文書の(<DICOM_OBJECT>要素で示されている)ルート要素タグと一致します。

  • マッピング・ドキュメントでは、タグが00100040のDICOM属性に対する<MAPPED_PATH>要素のnotEmpty属性値に"false"が指定されています。DICOMコンテンツのこのDICOM属性は空であるため、抽出されたXML文書では、<BIRTH_DATE>要素のxsi:nil属性の値に"true"が設定されています。

  • マッピング・ドキュメントでは、タグが00200010のDICOM属性に対する<MAPPED_PATH>要素のwriteTagwriteNameおよびwriteDefiner属性が"true"に設定されています。抽出されたXML文書では、<STUDY>要素の下の子要素<ID>に、対応するdefinertagおよびname属性が含まれています。

  • マッピング・ドキュメントでは、タグが00081080のDICOM属性に対する<MAPPED_PATH>要素で、occurs要素にデフォルト値("false")が使用されています。このDICOM属性はDICOMコンテンツ内に存在しないため、抽出されたXML文書には要素<ADMITTING_DIAGNOSES_DESCRIPTION>がありません。

extractMetadata( )メソッド、およびextractOptionパラメータに使用できる値のリファレンス情報は、extractMetadata( )を参照してください。

例9-23 スキーマ制約を指定しないメタデータ用のサンプル・マッピング・ドキュメント

<?xml version="1.0" encoding="UTF-8"?>
<XML_MAPPING_DOCUMENT 
    xmlns="http://xmlns.oracle.com/ord/dicom/mapping_1_0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.oracle.com/ord/dicom/mapping_1_0
        http://xmlns.oracle.com/ord/dicom/mapping_1_0">
  <NAMESPACE></NAMESPACE>
  <ROOT_ELEM_TAG>DICOM_OBJECT</ROOT_ELEM_TAG>
  <UNMAPPED_ELEM>OTHER_ATTRIBUTES</UNMAPPED_ELEM>
  <MAPPED_ELEM>KEY_ATTRIBUTES</MAPPED_ELEM>
    
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100010</ATTRIBUTE_TAG>
    <PATH>PATIENT/NAME</PATH>
  </MAPPED_PATH>
    
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100020</ATTRIBUTE_TAG>
    <PATH>PATIENT/ID</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH occurs="true" notEmpty="false">
    <ATTRIBUTE_TAG>00100030</ATTRIBUTE_TAG>
    <PATH>PATIENT/BIRTH_DATE</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH occurs="false" notEmpty="false">
    <ATTRIBUTE_TAG>00100040</ATTRIBUTE_TAG>
    <PATH>PATIENT/SEX</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH writeTag="true" writeDefiner="true" writeName="true">
    <ATTRIBUTE_TAG>00200010</ATTRIBUTE_TAG>
    <PATH>STUDY/ID</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH>
    <ATTRIBUTE_TAG>00080030</ATTRIBUTE_TAG>
    <PATH>STUDY/TIME</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH>
    <ATTRIBUTE_TAG>00081080</ATTRIBUTE_TAG>
    <PATH>STUDY/ADMITTING_DIAGNOSES_DESCRIPTION</PATH>
  </MAPPED_PATH>
 
</XML_MAPPING_DOCUMENT>
 

例9-24 スキーマ制約を指定しないメタデータ用の結果のXML文書

<?xml version="1.0" encoding="DEC-MCS"?>
<DICOM_OBJECT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <KEY_ATTRIBUTES>
    <PATIENT>
      <NAME>
        <NAME type="unibyte">
          <FAMILY>CANCIO   2HR A-02-013</FAMILY>
        </NAME>
        <VALUE>CANCIO   2HR A-02-013</VALUE>
      </NAME>
      <ID>ISRSCT610b</ID>
      <BIRTH_DATE xsi:nil="true"/>
      <SEX xsi:nil="true"/>
    </PATIENT>
    <STUDY>
      <ID definer="DICOM" tag="00200010" name="Study ID">352</ID>
      <TIME>18:48:41.000000</TIME>
    </STUDY>
  </KEY_ATTRIBUTES>
</DICOM_OBJECT>
9.2.3.4 スキーマ制約とマップ済セクションのみを指定したメタデータ用マッピング・ドキュメントの作成

この項では、アンマップ属性を破棄し、XMLスキーマ制約を指定してマッピング・ドキュメントおよびメタデータXML文書を作成する方法を説明します。この例は、XMLメタデータのマップ済セクション、およびXMLスキーマ制約を指定したメタデータXML文書で定義されているDICOM属性のみを必要とするアプリケーションに使用できます。

この項では、マッピング・ドキュメント、XMLスキーマ、およびそのスキーマで制約されたメタデータXML文書の結果のコード例も示します。該当するXML文は太字で強調表示して、マッピング・ドキュメントおよび関連XML文書の両方で主なアクションが実行される箇所を示しています。太字で表示した各XML文の説明は、例の後にあります。

ORDDicomオブジェクトのextractMetadata( )メソッドでは、extractOptionパラメータの値に基づいて、全部または一部のメタデータをXML文書に抽出できます。

extractMetadata( )メソッド、およびextractOptionパラメータに使用できる値のリファレンス情報は、extractMetadata( )を参照してください。

例9-25に、メタデータXML文書の名前空間を指定し、メタデータ・ドキュメントをXMLスキーマで制約できるようにするサンプル・マッピング・ドキュメントを示します。

例9-25のマッピング・ドキュメントは、例9-23のマッピング・ドキュメントと次の点で異なります。

  • <NAMESPACE>要素に値が含まれている。

  • <UNMAPPED_ELEM>要素と<MAPPED_ELEM>要素が空であるため、マップ済のパスは<ROOT_ELEM_TAG>要素に対する相対パスになる。

例9-25のマッピング・ドキュメントのXMLスキーマは、例9-26で定義されています。

例9-25および関連XMLスキーマ(例9-26内)では、次の要素とデータ型が定義されています。

  • メタデータのXMLスキーマの名前空間宣言には、マッピング・ドキュメントの<NAMESPACE>要素と同じ値が含まれます。

  • タグ00100030について明示的に、または00800030についてデフォルト値を使用して暗黙的にnotEmpty属性の値がfalseに設定されたマッピング・ドキュメント内の<MAPPED_PATH>の場合、<BIRTH_DATE>要素および<TIME>要素と同様に、XMLスキーマで定義された対応する要素のnillable属性の値がtrueに設定されます。

  • タグ00100040について明示的に、または00800030についてデフォルト値を使用して暗黙的にoccurs属性の値がfalseに設定されたマッピング・ドキュメント内の<MAPPED_PATH>の場合、<SEX>要素および<TIME>要素と同様に、XMLスキーマで定義された対応する要素の属性minOccursの値が0に設定されている必要があります。

  • XMLスキーマで定義するデータ型には、スキーマordcmmddt.xsdでOracleによって定義されたデータ型との互換性が必要です。例2では、PERSON_NAMEデータ型定義がスキーマordcmmddt.xsdからコピーされますが、ID_TYPEデータ型が定義されており、<STUDY>要素の下にある<ID>要素がtagdefinerおよびname属性を持つことができます。ID_TYPEデータ型は、Oracleによって定義されたSH_ATTR_Tデータ型と互換性があります。<SEX>要素はxs:stringデータ型を使用するように定義されます。このデータ型は、Oracleによって定義されたデータ型CSと互換性があります。

  • マッピング・ドキュメントの<UNMAPPED_ELEM>要素は空になっており、メタデータXMLのルート要素<DICOM_OBJECT>は"DATASET_T"型として定義されていません。このスキーマ制約を使用した場合に、妥当なメタデータXML文書に含めることができるのは、マップ済セクションのみです。したがって、extractOptionパラメータの値にALLまたはSTANDARDを指定してアプリケーションでメタデータを抽出しようとすると、次のエラーが戻されます。

    ORA-53259: スキーマ定義に準拠しているメタデータを抽出できません

例9-27に、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPEDに設定してXMLメタデータを抽出した結果のメタデータXML文書を示します。

例9-25 スキーマ制約とマップ済セクションのみを指定したメタデータ用のサンプル・マッピング・ドキュメント

<?xml version="1.0" encoding="UTF-8"?>
<XML_MAPPING_DOCUMENT 
    xmlns="http://xmlns.oracle.com/ord/dicom/mapping_1_0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.oracle.com/ord/dicom/mapping_1_0
        http://xmlns.oracle.com/ord/dicom/mapping_1_0">
  <NAMESPACE>http://www.mycompany.com/dicom/example2</NAMESPACE>
  <ROOT_ELEM_TAG>DICOM_OBJECT</ROOT_ELEM_TAG>
  <UNMAPPED_ELEM></UNMAPPED_ELEM>
  <MAPPED_ELEM></MAPPED_ELEM>
    
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100010</ATTRIBUTE_TAG>
    <PATH>PATIENT/NAME</PATH>
  </MAPPED_PATH>
    
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100020</ATTRIBUTE_TAG>
    <PATH>PATIENT/ID</PATH>
  </MAPPED_PATH>
  <MAPPED_PATH occurs="true" notEmpty="false">
    <ATTRIBUTE_TAG>00100030</ATTRIBUTE_TAG>
    <PATH>PATIENT/BIRTH_DATE</PATH>
  </MAPPED_PATH>
  
  <MAPPED_PATH occurs="false" notEmpty="false">
    <ATTRIBUTE_TAG>00100040</ATTRIBUTE_TAG>
    <PATH>PATIENT/SEX</PATH>
  </MAPPED_PATH>
  
  <MAPPED_PATH writeTag="true" writeDefiner="true" writeName="true">
    <ATTRIBUTE_TAG>00200010</ATTRIBUTE_TAG>
    <PATH>STUDY/ID</PATH>
  </MAPPED_PATH>
  
  <MAPPED_PATH>
    <ATTRIBUTE_TAG>00080030</ATTRIBUTE_TAG>
    <PATH>STUDY/TIME</PATH>
  </MAPPED_PATH>
 
   <MAPPED_PATH>
    <ATTRIBUTE_TAG>00081080</ATTRIBUTE_TAG>
    <PATH>STUDY/ADMITTING_DIAGNOSES_DESCRIPTION</PATH>
  </MAPPED_PATH>
 
</XML_MAPPING_DOCUMENT>

例9-26 スキーマ制約およびマップ済セクションを指定したメタデータ用のサンプルXMLスキーマ

<?xml version="1.0" encoding="UTF-8"?>
 <xs:schema 
    xmlns="http://www.mycompany.com/dicom/example2" 
    xmlns:xdb="http://xmlns.oracle.com/xdb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.mycompany.com/dicom/example2" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
   <xs:element name="DICOM_OBJECT">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="PATIENT">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NAME" type="PERSON_NAME"/>
              <xs:element name="ID" type="xs:string"/>
              <xs:element name="BIRTH_DATE"  type="xs:date" nillable="true"/>
              <xs:element name="SEX"  type="xs:string" minOccurs="0"
                  nillable="true"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="STUDY">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" type = "ID_TYPE" minOccurs="0"
                  nillable="true"/>
              <xs:element name="TIME"  type="xs:time" minOccurs="0"
                  nillable="true"/>
              <xs:element name="ADMITTING_DIAGNOSES_DESCRIPTION"  type="xs:string"
                  minOccurs="0" nillable="true"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PERSON_NAME">
    <xs:sequence>
      <xs:element name="NAME">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="FAMILY" type="xs:string" minOccurs="0"
                nillable="true"/>
            <xs:element name="GIVEN" type="xs:string" minOccurs="0"
                nillable="true"/>
            <xs:element name="MIDDLE" type="xs:string" minOccurs="0"
                nillable="true"/>
            <xs:element name="PREFIX" type="xs:string" minOccurs="0"
                nillable="true"/>
            <xs:element name="SUFFIX" type="xs:string" minOccurs="0"
                nillable="true"/>
          </xs:sequence>
          <xs:attribute name="type" default="unibyte">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="unibyte"/>
                <xs:enumeration value="ideographic"/>
                <xs:enumeration value="phonetic"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="VALUE" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:maxLength value="64"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
   </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ID_TYPE">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="tag" type="xs:string"/>
        <xs:attribute name="definer" type="xs:string"/>
        <xs:attribute name="name" type="xs:string"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

例9-27 スキーマ制約およびマップ済セクションを指定したメタデータ用の結果のXML文書

<?xml version="1.0" encoding="DEC-MCS"?>
<DICOM_OBJECT xmlns="http://www.mycompany.com/dicom/example2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mycompany.com/dicom/example2
  http://www.mycompany.com/dicom/example2">
  <PATIENT>
    <NAME>
      <NAME type="unibyte">
        <FAMILY>CANCIO   2HR A-02-013</FAMILY>
      </NAME>
      <VALUE>CANCIO   2HR A-02-013</VALUE>
    </NAME>
    <ID>ISRSCT610b</ID>
    <BIRTH_DATE xsi:nil="true"/>
    <SEX xsi:nil="true"/>
  </PATIENT>
  <STUDY>
    <ID definer="DICOM" tag="00200010" name="Study ID">352</ID>
    <TIME>18:48:41.000000</TIME>
  </STUDY>
</DICOM_OBJECT>
9.2.3.5 スキーマ制約を指定したメタデータ用のマッピング・ドキュメントの作成

この項では、アンマップ属性を含む、XMLスキーマ制約を指定したマッピング・ドキュメントおよびメタデータXML文書を作成する方法を説明します。

この項では、マッピング・ドキュメント、XMLスキーマ、およびそのスキーマで制約されたメタデータXML文書の結果のコード例も示します。該当するXML文は太字で強調表示して、マッピング・ドキュメントおよび関連XML文書の両方で主なアクションが実行される箇所を示しています。太字で表示した各XML文の説明は、例の後にあります。

例9-28に、マップ済セクションにシーケンス・タイプの属性を含めるサンプル・マッピング・ドキュメントを示します。

例9-28のマッピング・ドキュメントは、例9-25のマッピング・ドキュメントと次の点で異なります。

  • <UNMAPPED_ELEM>要素と<MAPPED_ELEM>要素が空ではない。

  • タグ00081084に対する<MAPPED_PATH>要素があり、DICOMシーケンス・タイプが指定されている。

例9-29のXMLスキーマ・コード・セグメントは、例9-28のマッピング・ドキュメントのアンマップ・ルート要素を定義して、抽出されたメタデータXML文書にアンマップ・セクションを含める方法を示しています。このコード・セグメントは、Oracle定義のデータ型をスキーマordcmmddt.xsdから使用する方法も示しています。

例9-28および関連XMLスキーマ(例9-29内)では、次のアクションが実行されます。

  • このXMLスキーマでは、「スキーマ制約とマップ済セクションのみを指定したメタデータ用マッピング・ドキュメントの作成」のように独自のデータ型を定義するのではなく、スキーマordcmmddt.xsdをアプリケーション固有のXSDファイルにコピーしてOracle定義のデータ型を使用し、このXMLコード・セグメントで名前空間宣言を変更しています。

    <xs:schema 
    xmlns="http://www.mycompany.com/dicom/example3" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xdb="http://xmlns.oracle.com/xdb" 
    targetNamespace="http://www.mycompany.com/dicom/example3"
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
    

    このデータ型のXMLスキーマは、次の名前空間URLを使用してグローバルXMLスキーマとしてOracle XML DBに登録されています。

    "http://www.mycompany.com/dicom/datatype_3"
    

    したがって、この登録済の名前空間URLは、メタデータXMLスキーマに含まれます。

    グローバルおよびローカルXMLスキーマの登録の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

  • Oracle定義のデータ型はXMLスキーマに含まれるため、<NAME>、<ADMITTING_DIAGNOSES_CODE_SEQUENCE>および<OTHER_ATTRIBUTES>の各要素で示すように、データ型を直接参照できます。

  • <OTHER_ATTRIBUTES>要素は、extractMetadata( )メソッドのextractOptionパラメータ値としてALLまたはSTANDARDが渡された場合に、アンマップのすべてのDICOM属性をこの要素の下に含めることができるように、"DATASET_T"型として定義されています。minOccurs属性が0に定義されているため、extractMetadata( )メソッドに値MAPPEDが渡されると、抽出されたXML文書にはマップ済セクションのみが含まれます。

例9-30に、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPEDに設定してXMLメタデータを抽出した結果のメタデータXML文書を示します。

例9-31に、extractMetadata( )メソッドのextractOptionパラメータ値をALLに設定してXMLメタデータを抽出した結果のメタデータXML文書を示します。

例9-28 スキーマ制約を指定したメタデータ用のサンプル・マッピング・ドキュメント

<?xml version="1.0" encoding="UTF-8"?>
<XML_MAPPING_DOCUMENT 
    xmlns="http://xmlns.oracle.com/ord/dicom/mapping_1_0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.oracle.com/ord/dicom/mapping_1_0
        http://xmlns.oracle.com/ord/dicom/mapping_1_0">
  <NAMESPACE>http://www.mycompany.com/dicom/example3</NAMESPACE>
  <ROOT_ELEM_TAG>DICOM_OBJECT</ROOT_ELEM_TAG>
  <UNMAPPED_ELEM>OTHER_ATTRIBUTES</UNMAPPED_ELEM>
  <MAPPED_ELEM>KEY_ATTRIBUTES</MAPPED_ELEM>
 
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100010</ATTRIBUTE_TAG>
    <PATH>PATIENT/NAME</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH occurs="true" notEmpty="true">
    <ATTRIBUTE_TAG>00100020</ATTRIBUTE_TAG>
    <PATH>PATIENT/ID</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH occurs="true" notEmpty="false">
<ATTRIBUTE_TAG>00100030</ATTRIBUTE_TAG>
    <PATH>PATIENT/BIRTH_DATE</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH occurs="false" notEmpty="false">
    <ATTRIBUTE_TAG>00100040</ATTRIBUTE_TAG>
    <PATH>PATIENT/SEX</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH writeTag="true" writeDefiner="true" writeName="true">
    <ATTRIBUTE_TAG>00200010</ATTRIBUTE_TAG>
    <PATH>STUDY/ID</PATH>
  </MAPPED_PATH>
 
  <MAPPED_PATH>
    <ATTRIBUTE_TAG>00081084</ATTRIBUTE_TAG>
    <PATH>
      STUDY/ADMITTING_DIAGNOSES_CODE_SEQUENCE
    </PATH>
  </MAPPED_PATH>
 
</XML_MAPPING_DOCUMENT>
 

例9-29 スキーマ制約を指定したメタデータ用のサンプルXMLスキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.mycompany.com/dicom/example3" 
           xmlns:xdb="http://xmlns.oracle.com/xdb" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://www.mycompany.com/dicom/example3" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
  <xs:include schemaLocation="http://www.mycompany.com/dicom/datatype_3"/>
  <xs:element name="DICOM_OBJECT">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="KEY_ATTRIBUTES">
          <xs:complexType>
            <xs:sequence>
             <xs:element name="PATIENT">
               <xs:complexType>
                 <xs:sequence>
                   <xs:element name="NAME" type="PN">
                   </xs:element>
                   <xs:element name="ID" type="xs:string">
                   </xs:element>
                   <xs:element name="BIRTH_DATE" type="xs:date" nillable="true">
                   </xs:element>
                   <xs:element name="SEX" type="xs:string" minOccurs="0"
                       nillable="true">
                   </xs:element>
                 </xs:sequence>
               </xs:complexType>
             </xs:element>
             <xs:element name="STUDY">
               <xs:complexType>
                 <xs:sequence>
                   <xs:element name="ID" type="SH_ATTR_T" minOccurs="0"
                       nillable="true"/>
                   <xs:element name="ADMITTING_DIAGNOSES_CODE_SEQUENCE" type="SQ"
                       nillable="true" minOccurs="0"/>
                 </xs:sequence>
               </xs:complexType>
             </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        </xs:element>
        <xs:element name="OTHER_ATTRIBUTES" type="DATASET_T" minOccurs="0"
            maxOccurs="unbounded">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

例9-30 スキーマ制約を指定したメタデータの場合の結果のXML文書(MAPPED)

<?xml version="1.0" encoding="DEC-MCS"?>
<DICOM_OBJECT xmlns="http://www.mycompany.com/dicom/example3"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.mycompany.com/dicom/example3
   http://www.mycompany.com/dicom/example3">
  <KEY_ATTRIBUTES>
    <PATIENT>
      <NAME>
        <NAME type="unibyte">
          <FAMILY>CANCIO   2HR A-02-013</FAMILY>
        </NAME>
        <VALUE>CANCIO   2HR A-02-013</VALUE>
      </NAME>
      <ID>ISRSCT610b</ID>
      <BIRTH_DATE xsi:nil="true"/>
      <SEX xsi:nil="true"/>
    </PATIENT>
    <STUDY>
      <ID definer="DICOM" tag="00200010" name="Study ID">352</ID>
      <ADMITTING_DIAGNOSES_CODE_SEQUENCE>
        <ITEM>
          <SHORT_STRING tag="00080100" definer="DICOM" name="Code Value"
             offset="692" length="0"/>
          <SHORT_STRING tag="00080102" definer="DICOM" name="Coding Scheme
             Designator" offset="700" length="0"/>
          <SHORT_STRING tag="00080103" definer="DICOM" name="Coding Scheme
             Version" offset="708" length="0"/>
          <LONG_STRING tag="00080104" definer="DICOM" name="Code Meaning"
             offset="716" length="0"/>
          <CODE_STRING tag="00080105" definer="DICOM" name="Mapping Resource"
             offset="724" length="0"/>
          <DATE_TIME tag="00080106" definer="DICOM" name="Context Group Version"
             offset="732" length="0" xsi:nil="true" rawValue=""
               byteOrderLE="true"/>
          <DATE_TIME tag="00080107" definer="DICOM" name="Context Group Local
               Version" offset="740" length="0" xsi:nil="true" rawValue=""
               byteOrderLE="true"/>
          <CODE_STRING tag="0008010B" definer="DICOM" name="Context Group
               Extension Flag" offset="748" length="0"/>
          <UNIQUE_ID tag="0008010D" definer="DICOM" name="Context Group Extension
               Creator UID" offset="756" length="0" xsi:nil="true" rawValue=""
               byteOrderLE="true"/>
          <CODE_STRING tag="0008010F" definer="DICOM" name="Context Identifier"
               offset="764" length="0"/>
        </ITEM>
      </ADMITTING_DIAGNOSES_CODE_SEQUENCE>
    </STUDY>
  </KEY_ATTRIBUTES>
</DICOM_OBJECT>

例9-31 スキーマ制約を指定したメタデータの場合の結果のXML文書(ALL)

<?xml version="1.0" encoding="DEC-MCS"?>
<DICOM_OBJECT xmlns="http://www.mycompany.com/dicom/example3"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.mycompany.com/dicom/example3
   http://www.mycompany.com/dicom/example3">
  <KEY_ATTRIBUTES>
    <PATIENT>
      <NAME>
        <NAME type="unibyte">
          <FAMILY>CANCIO   2HR A-02-013</FAMILY>
        </NAME>
        <VALUE>CANCIO   2HR A-02-013</VALUE>
      </NAME>
      <ID>ISRSCT610b</ID>
      <BIRTH_DATE xsi:nil="true"/>
      <SEX xsi:nil="true"/>
    </PATIENT>
    <STUDY>
      <ID definer="DICOM" tag="00200010" name="Study ID">352</ID>
      <ADMITTING_DIAGNOSES_CODE_SEQUENCE>
        <ITEM>
          <SHORT_STRING tag="00080100" definer="DICOM" name="Code Value"
             offset="692" length="0"/>
          <SHORT_STRING tag="00080102" definer="DICOM" name="Coding Scheme
             Designator" offset="700" length="0"/>
          <SHORT_STRING tag="00080103" definer="DICOM" name="Coding Scheme
             Version" offset="708" length="0"/>
          <LONG_STRING tag="00080104" definer="DICOM" name="Code Meaning"
             offset="716" length="0"/>
          <CODE_STRING tag="00080105" definer="DICOM" name="Mapping Resource"
             offset="724" length="0"/>
          <DATE_TIME tag="00080106" definer="DICOM" name="Context Group Version"
             offset="732" length="0" xsi:nil="true" rawValue=""
             byteOrderLE="true"/>
          <DATE_TIME tag="00080107" definer="DICOM" name="Context Group Local
             Version" offset="740" length="0" xsi:nil="true" rawValue=""
             byteOrderLE="true"/>
          <CODE_STRING tag="0008010B" definer="DICOM" name="Context Group
             Extension Flag" offset="748" length="0"/>
          <UNIQUE_ID tag="0008010D" definer="DICOM" name="Context Group Extension
             Creator UID" offset="756" length="0" xsi:nil="true" rawValue=""
             byteOrderLE="true"/>
          <CODE_STRING tag="0008010F" definer="DICOM" name="Context Identifier"
             offset="764" length="0"/>
        </ITEM>
      </ADMITTING_DIAGNOSES_CODE_SEQUENCE>
    </STUDY>
  </KEY_ATTRIBUTES>
  <OTHER_ATTRIBUTES>
    <OTHER_BYTE tag="00020001" definer="DICOM" name="File Meta Information
       Version" offset="156" length="2">AQA=
 
</OTHER_BYTE>
    <UNIQUE_ID tag="00020002" definer="DICOM" name="Media Storage SOP Class UID"
       offset="166" length="26">1.2.840.10008.5.1.4.1.1.2</UNIQUE_ID>
    <UNIQUE_ID tag="00020003" definer="DICOM" name="Media Storage SOP Instance
       UID" offset="200" length="54">1.2.392.200036.91</UNIQUE_ID>
    <UNIQUE_ID tag="00020010" definer="DICOM" name="Transfer Syntax UID"
       offset="262" length="18">1.2.840.10008.1.2</UNIQUE_ID>
    <UNIQUE_ID tag="00020012" definer="DICOM" name="Implementation Class UID"
       offset="288" length="16">1.2.804.114118.3</UNIQUE_ID>
<APPLICATION_ENTITY tag="00020016" definer="DICOM" name="Source Application Entity
    Title" offset="326" length="0" xsi:nil="true" rawValue="" byteOrderLE="true"/>
    <CODE_STRING tag="00080008" definer="DICOM" name="Image Type" offset="334"
       length="22">ORIGINAL</CODE_STRING>
    <CODE_STRING tag="00080008" definer="DICOM" name="Image Type" offset="334"
       length="22">PRIMARY</CODE_STRING>
    <CODE_STRING tag="00080008" definer="DICOM" name="Image Type" offset="334"
       length="22">AXIAL</CODE_STRING>
    <UNIQUE_ID tag="00080016" definer="DICOM" name="SOP Class UID" offset="364"
       length="26">1.2.840.10008.5.1.4.1.1.2</UNIQUE_ID>
    <UNIQUE_ID tag="00080018" definer="DICOM" name="SOP Instance UID" offset="398"
       length="54">1.2.392.200036.91</UNIQUE_ID>
    <DATE tag="00080020" definer="DICOM" name="Study Date" offset="460"
   length="8">2004-02-23</DATE>
    <DATE tag="00080022" definer="DICOM" name="Acquisition Date" offset="476"
   length="8">2004-02-23</DATE>
    <DATE tag="00080023" definer="DICOM" name="Content Date" offset="492"
   length="8">2004-02-23</DATE>
    <TIME tag="00080030" definer="DICOM" name="Study Time" offset="508"
   length="14">18:48:41.000000</TIME>
    <TIME tag="00080032" definer="DICOM" name="Acquisition Time" offset="530"
   length="14">18:50:52.100000</TIME>
    <TIME tag="00080033" definer="DICOM" name="Content Time" offset="552"
   length="14">18:50:52.725000</TIME>
    <SHORT_STRING tag="00080050" definer="DICOM" name="Accession Number"
   offset="574" length="4">352</SHORT_STRING>
    <CODE_STRING tag="00080060" definer="DICOM" name="Modality" offset="586"
   length="2">CT</CODE_STRING>
.
.
.
 
    <SHORT_STRING tag="00400253" definer="DICOM" name="Performed Procedure Step
      ID" offset="1742" length="4">351</SHORT_STRING>
    <OTHER_WORD tag="7FE00010" definer="DICOM" name="Pixel Data" offset="1766"
      length="524288" truncated="true" xsi:nil="true" endian="little"/>
  </OTHER_ATTRIBUTES>
</DICOM_OBJECT>
9.2.3.6 マッピング・ドキュメントでのDICOM値ロケータの使用

この項では、DICOM値ロケータを使用して、マッピング・ドキュメント内の属性を指定する方法を示します。例9-32に、DICOM値ロケータを使用して、マッピング・ドキュメントでユニバイト・エンコーディングによってPatient's Name属性の姓フィールドを指定する方法を示します。このアクションを実行するXML文は、太字で強調表示しています。

例9-32に示したコードを含むマッピング・ドキュメントをextractMetadata( )メソッドで使用すると、属性00100010の姓フィールドに対応する値を持つタグ<FAMILY_NAME>が含まれるXML文書が生成されます。

例9-33に、DICOM値ロケータを使用して、マッピング・ドキュメントのシーケンス属性内に埋め込む属性を指定する方法を示します。

例9-33に示したコードを含むマッピング・ドキュメントをextractMetadata( )メソッドで使用すると、属性0040A010の値に対応する値を持つタグ<RELATIONSHIP>が含まれるXML文書が生成されます。属性0040A010は、シーケンス属性0040A730の2番目の項目に埋め込まれます。

標準属性タグ0040A730および0040A010は、標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A730</TAG>
   <NAME>Content Sequence</NAME>
   <VR>SQ</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>0040A010</TAG>
   <NAME>Relationship Type</NAME>
   <VR>CS</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示すタグ定義で、<VR>要素は、属性0040A730がシーケンス・タイプの属性であることを示しています。DICOM値ロケータを使用して、シーケンス・タイプ属性内に埋め込まれている任意の属性を個別に結果のXMLメタデータ文書に抽出できます。

例9-34に、DICOM値ロケータを使用してマッピング・ドキュメント内の複数の値を含む属性の単一の値を指定する方法を示します。

extractMetadata( )メソッドで例9-34に示したコードを含むマッピング・ドキュメントを使用すると、属性00080008の3番目の値に対応する値を持つタグ<IMAGE_TYPE>を含むXML文書が生成されます。

標準属性タグ00080008は標準ディクショナリで次のように定義されています。

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>00080008</TAG>
   <NAME>Image Type</NAME>
   <VR>CS</VR>
   <VM>1-n</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

前記のコード・セグメントに示したタグの定義で、<VM>要素は、属性に複数の値を含めることができることを示しています。00080008[3]などの項目番号を持つDICOM値ロケータを使用すると、特定の(3番目)値が取得されるようになります。

DICOM値ロケータ・タイプの詳細は、「DICOM値ロケータの一般形式」を参照してください。

例9-32 マッピング・ドキュメント内の、ユニバイト・エンコーディングを使用した属性のDICOM値ロケータ

<MAPPED_PATH>
    <ATTRIBUTE_TAG>00100010#UnibyteFamily</ATTRIBUTE_TAG>
    <PATH>FAMILY_NAME</PATH>
</MAPPED_PATH>

例9-33 マッピング・ドキュメント内の埋込みシーケンス属性のDICOM値ロケータ

<MAPPED_PATH>
    <ATTRIBUTE_TAG>0040A730[2].0040A010</ATTRIBUTE_TAG>
    <PATH>RELATIONSHIP</PATH>
</MAPPED_PATH>

例9-34 マッピング・ドキュメント内の単一属性値のDICOM値ロケータ

<MAPPED_PATH>
    <ATTRIBUTE_TAG>00080008[3]</ATTRIBUTE_TAG>
    <PATH>IMAGE_TYPE</PATH>
</MAPPED_PATH>

9.2.4 プリファレンス・ドキュメントの作成

プリファレンス・ドキュメントは、Oracle Multimedia DICOMの実行時の動作を定義する一連のプリファレンス・パラメータが記述されたXML文書です。

XML文書ordcmpf.xsdには、プリファレンス・ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。プリファレンス・パラメータおよびパラメータの有効な値の詳細は、<xs: annotation>要素に含まれているテキストを参照してください。)

デフォルトのプリファレンス・ドキュメントordcmpf.xmlには、Oracle Multimedia DICOMを実行する際のプリファレンス・パラメータのデフォルト値が含まれています。(この構成ドキュメントの詳細は、「DICOM構成ドキュメント」を参照してください。)

プリファレンス・ドキュメント内では、<PREFERENCE_DEF>要素を使用して各プリファレンス・パラメータとその値を定義しています。

注:

次の追加のガイドラインに留意してください。

  • リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のプリファレンス・ドキュメントを保持できます。

  • プリファレンス・ドキュメント内のプリファレンス・パラメータ値を変更すると、DICOMのメソッド、関数およびプロシージャの動作が変わります。具体的には、Oracle定義のプリファレンス・ドキュメントordcmpf.xmlに定義されたデフォルト値が、ユーザー定義のプリファレンス・ドキュメントに定義されたプリファレンス・パラメータの値によってオーバーライドされます。

  • すべてのプリファレンス・パラメータ名およびパラメータに関連付けられた値は、Oracleによって定義済です。ユーザー定義のプリファレンス・ドキュメントを使用して、Oracle定義のプリファレンス・パラメータの値を変更できます。

次の各項では、プリファレンス・ドキュメントでプリファレンス・パラメータ値を定義する方法を例示します。

9.2.4.1 BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータの定義

BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータは、DICOM Part 10ファイルをコピーするときに、Oracle Multimedia DICOMがDICOMコンテンツのバイナリ出力に無効な属性とその値を含めるかスキップするかを指定するために使用します。無効な属性とは、規定のDICOM標準規格に準拠していない属性のことです。例9-35に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータBINARY_SKIP_INVALID_ATTRを指定します。

<VALUE>要素はBINARY_SKIP_INVALID_ATTRプリファレンス・パラメータの値を表します。この値は、デフォルトでfalseになります。

このプリファレンス・パラメータの値がfalseの場合、無効な属性とその値が、対応する出力に含められます。このプリファレンス・パラメータの値がtrueに設定されている場合、属性の値が、長さ0で出力に含められます。

例9-35 BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>BINARY_SKIP_INVALID_ATTR</PARAMETER>
    <DESCRIPTION>
      Do not skip the value of attributes that do not conform to the 
      DICOM specification when making a copy of a DICOM Part 10 file.
    </DESCRIPTION>
    <VALUE>false</VALUE>
  </PREFERENCE_DEF>
9.2.4.2 CONFORMANCE_LEVELプリファレンス・パラメータの定義

CONFORMANCE_LEVELプリファレンス・パラメータは、DICOMコンテンツを処理するときにOracle Multimedia DICOMが無視またはレポートするエラーと例外のタイプを指定するために使用します。例9-36に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータCONFORMANCE_LEVELを指定します。

<VALUE>要素はCONFORMANCE_LEVELパラメータの値を表します。この値は、デフォルトでignoreExceptionになります。その他の有効な値はleastConformおよびmostConformです。

デフォルト値ignoreExceptionは、プリファレンス・パラメータIGNORED_EXP_LISTで指定されたタイプの例外を無視するようにすべての関数に指示します。

leastConformは、エラーおよび例外を無視してDICOMコンテンツを最大限に処理するようにすべての関数に指示します。

値がmostConformに設定されている場合は、いずれの関数も、DICOM標準規格に準拠していないDICOMコンテンツを検出したときに例外をスローします。(この動作は、DICOM標準規格で許容されている下位互換性の場合を含みません。)

例9-36 CONFORMANCE_LEVELプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>CONFORMANCE_LEVEL</PARAMETER>
    <DESCRIPTION>
      Ignore selected exceptions.
    </DESCRIPTION>
    <VALUE>ignoreException</VALUE>
  </PREFERENCE_DEF>
9.2.4.3 EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータの定義

EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータは、準拠の検証中に属性の欠落またはNULLの属性値が見つかったときにOracle Multimedia DICOMが例外をスローするかどうかを指定するために使用します。例9-37に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータEXP_IF_NULL_ATTR_IN_CONSTRAINTを指定します。

<VALUE>要素は、EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータの値を表します。この値は、デフォルトでtrueになります。

属性に対するnotEmptyブール型関数条件が前に付かない制約条件では、このプリファレンス・パラメータの値がtrueの場合に、次のいずれかの条件が最初に満たされると例外がスローされます。

  • 属性が欠落している。

  • 属性の値がNULLである。

詳細は、例9-14を参照してください。

値がfalseに設定されている場合、例外はスローされません。

このプリファレンス・パラメータはメソッドisConformanceValid( )の結果に影響します。詳細は、isConformanceValid( )メソッドを参照してください。

例9-37 EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>EXP_IF_NULL_ATTR_IN_CONSTRAINT</PARAMETER>
    <DESCRIPTION>
      Throw an exception if a missing attribute or a null 
      attribute value is encountered during conformance 
      validation.
    </DESCRIPTION>
    <VALUE>true</VALUE>
  </PREFERENCE_DEF>
9.2.4.4 IGNORED_EXP_LISTプリファレンス・パラメータの定義

IGNORED_EXP_LISTプリファレンス・パラメータは、DICOMコンテンツを処理するときにOracle Multimedia DICOMが無視する例外のタイプを指定するために使用します。このプリファレンス・パラメータは、CONFORMANCE_LEVELプリファレンス・パラメータの値がignoreExceptionに設定されている場合にのみ有効です。例9-38に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータIGNORED_EXP_LISTを指定します。

<VALUE>要素はIGNORED_EXP_LISTプリファレンス・パラメータの値を表します。この値には、無視する1つ以上の例外をリストします。

例9-38 IGNORED_EXP_LISTプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>IGNORED_EXP_LIST</PARAMETER>
    <DESCRIPTION>
      Do not throw exceptions if: mandatory attributes are missing
      from the DICOM content (MISSING_ATTR), the DICOM file magic number
      "DICM" is missing (MISSING_MAGIC), an attribute has an invalid value
      representation value (INVALID_VR), an attribute has an incorrect
      value multiplicity (INVALID_VM), or a DICOM Part 10 file contains
      invalid data (PARSE_ERR).
    </DESCRIPTION>
    <VALUE>MISSING_ATTR MISSING_MAGIC INVALID_VR INVALID_VM PARSE_ERR</VALUE>
  </PREFERENCE_DEF>
9.2.4.5 MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの定義

MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータは、Oracle Multimedia DICOMが、制約ドキュメントおよびマッピング・ドキュメントによって使用されているすべてのタグがストアド・タグ・リスト・ドキュメントにリストされている必要があるというルールを適用するかどうかを指定するために使用します。例9-39に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータMANDATE_ATTR_TAGS_IN_STLを指定します。

<VALUE>要素はMANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの値を表します。この値は、デフォルトでfalseになります。

このプリファレンス・パラメータの値は、制約ドキュメントおよびマッピング・ドキュメントによって使用されているすべてのタグがストアド・タグ・リスト・ドキュメントにリストされている必要があるというルールを適用するかどうかを決定します。このプリファレンス・パラメータの値がtrueに設定されている場合は、ルールが適用されます。値がfalseの場合、ルールは適用されません。

ただし、既存のストアド・タグ・リスト・ドキュメントがこのルールを満たしていない場合は、ストアド・タグ・リスト・ドキュメントが更新されるまで、このプリファレンス・パラメータの値をtrueに設定できません。また、このプリファレンス・パラメータの値がtrueの場合は、ストアド・タグ・リスト・ドキュメントにリストされたタグを使用する制約ドキュメントおよびマッピング・ドキュメントのみをリポジトリに挿入できます。

例9-39 MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>MANDATE_ATTR_TAGS_IN_STL</PARAMETER>
    <DESCRIPTION>
      All tags in the constraint and mapping docs must be listed in the 
      STORED_TAG_LIST document.
    </DESCRIPTION>
    <VALUE>true</VALUE>
  </PREFERENCE_DEF>
9.2.4.6 MAX_RECURSION_DEPTHプリファレンス・パラメータの定義

MAX_RECURSION_DEPTHプリファレンス・パラメータは、準拠検証中に再帰的な制約マクロを評価するためにOracle Multimedia DICOMが使用する再帰の最大レベルを指定するために使用します。例9-40に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータMAX_RECURSION_DEPTHを指定します。

<VALUE>要素はMAX_RECURSION_DEPTHプリファレンス・パラメータの値を表します。有効な値は、1から32767の整数です。デフォルトは16です。再帰レベルがこのパラメータの値を超えると、例外がスローされます。

再帰的な制約マクロの詳細は、「再帰的な制約マクロの定義」を参照してください。

例9-40 MAX_RECURSION_DEPTHプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>MAX_RECURSION_DEPTH</PARAMETER>
    <DESCRIPTION>
      The maximum level of recursion when evaluating a recursive constraint 
      during conformation validation.
    </DESCRIPTION>
    <VALUE>16</VALUE>
  </PREFERENCE_DEF>
9.2.4.7 SPECIFIC_CHARACTER_SETプリファレンス・パラメータの定義

SPECIFIC_CHARACTER_SETプリファレンス・パラメータは、標準属性固有の文字セットが指定されていない場合に特定のデータ要素(値表現がSH、LO、ST、LT、PNおよびUTのもの)をデコードするためにOracle Multimedia DICOMが使用する文字セットを指定するために使用します。例9-41に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータSPECIFIC_CHARACTER_SETを指定します。

<VALUE>要素はSPECIFIC_CHARACTER_SETプリファレンス・パラメータの値を表します。有効な値は次の文字セットです。

  • ASCII (デフォルト値)

  • ISO_IR 100

  • ISO_IR 101

  • ISO_IR 109

  • ISO_IR 110

  • ISO_IR 144

  • ISO_IR 127

  • ISO_IR 126

  • ISO_IR 138

  • ISO_IR 148

  • ISO_IR 13

  • ISO IR 166

  • ISO_IR 192

  • GB18030

このプリファレンス・パラメータの値は、標準属性Specific Character Set (0008,0005)が指定されていない場合にSH (短い文字列)、LO (長い文字列)、ST (短いテキスト)、LT (長いテキスト)、PN (人名)およびUT (無制限のテキスト)の値表現を持つデータ要素をデコードする方法を指定します。DICOM標準規格では、標準属性Specific Character Setが指定されていない場合にデコードにデフォルトの文字セットISO-IR 6またはASCIIを使用するように求めています。このプリファレンス・パラメータを使用すると、アプリケーションで、次の場合にDICOM標準規格のデフォルトの文字セット以外の文字セットを指定できます。

例9-41 SPECIFIC_CHARACTER_SETプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>SPECIFIC_CHARACTER_SET</PARAMETER>
    <DESCRIPTION>
      Use the ASCII character set to decode data elements SH (Short String), 
      LO (Long String), ST (Short Text), LT (Long Text), PN (Person Name), 
      and UT (Unlimited Text) when the Specific Character Set Attribute is
      missing.
    </DESCRIPTION>
    <VALUE>ASCII</VALUE>
  </PREFERENCE_DEF>
9.2.4.8 SQ_WRITE_LENプリファレンス・パラメータの定義

SQ_WRITE_LENプリファレンス・パラメータは、メソッドwriteMetadata( )によるDICOMシーケンス(SQ)タイプのエンコード方法を指定するために使用します。例9-42に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータSQ_WRITE_LENを指定します。

<VALUE>要素はSQ_WRITE_LENプリファレンス・パラメータの値を表します。この値は、デフォルトでtrueになります。

このプリファレンス・パラメータの値は、メソッドwriteMetadata( )によるDICOMシーケンス(SQ)タイプのエンコード方法を指定します。詳細は、writeMetadata( )メソッドを参照してください。

このプリファレンス・パラメータの値がtrueである場合、SQタイプは、明示的な長さを使用し、項目またはシーケンス・デリミタなしでエンコードされます。このデフォルト動作によって、DICOMビューアはシーケンス属性をスキップできます。

値がfalseに設定されている場合、SQタイプは、可変長(長さは未定義)でエンコードされ、シーケンス・デリミタで終了します。このオプションを使用すると、以前のDICOMビューアや、SQタイプの場合に未定義の長さしかサポートしないDICOMアプリケーションとの下位互換性を確保できます。

例9-42 SQ_WRITE_LENプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>SQ_WRITE_LEN</PARAMETER>
    <DESCRIPTION>
      All sequence types are encoded in XML with an explicit length and 
      without sequence delimiters.
    </DESCRIPTION>
    <VALUE>true</VALUE>
  </PREFERENCE_DEF>
9.2.4.9 VALIDATE_METADATAプリファレンス・パラメータの定義

VALIDATE_METADATAプリファレンス・パラメータは、DICOM関数およびプロシージャで使用するXML文書を検証するかどうかを指定するために使用します。例9-43に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータVALIDATE_METADATAを指定します。

<VALUE>要素はプリファレンス・パラメータVALIDATE_METADATAの値を表します。この値は、デフォルトでfalseになります。

このプリファレンス・パラメータの値は、DICOM関数およびプロシージャで使用するXML文書を検証するかどうかを決定します。DICOMの関数およびプロシージャで使用するXML文書はいずれも、メソッドextractMetadata( )によって生成されたものを除き、OracleのデフォルトDICOMメタデータ・スキーマと照合して検証されます。メソッドextractMetadata( )によって生成されたXML文書は、指定されたマッピング・ドキュメントで名前空間が定義されているXMLスキーマと照合して検証されます。詳細は、extractMetadata( )メソッドおよび「マッピング・ドキュメントの特性」を参照してください。

このプリファレンス・パラメータの値がfalseの場合、XML文書は検証されません。

値がtrueに設定されている場合は、XML文書が、Oracle XML DBに登録されているXMLスキーマと照合して検証されます。ただし、マッピング・ドキュメント内のメタデータ名前空間が現行ユーザーから使用できない場合にこの値をtrueに設定してextractMetadata( )メソッドをコールすると、エラーが発生します。

例9-43 VALIDATE_METADATAプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>VALIDATE_METADATA</PARAMETER>
    <DESCRIPTION>
      Do not validate XML metadata documents.
    </DESCRIPTION>
    <VALUE>false</VALUE>
 </PREFERENCE_DEF>
9.2.4.10 XML_SKIP_ATTRプリファレンス・パラメータの定義

XML_SKIP_ATTRプリファレンス・パラメータは、XMLにエンコードするときに省略するDICOM属性のサイズ制限を指定するために使用します。例9-44に、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示します。

<PARAMETER>要素は、Oracle定義のプリファレンス・パラメータXML_SKIP_ATTRを指定します。

<VALUE>要素はXML_SKIP_ATTRプリファレンス・パラメータの値を表します。有効な値は、128から232-1の整数です。デフォルトは512です。

このプリファレンス・パラメータの値は、XMLにエンコードするときに省略するDICOM属性のサイズ制限を指定するために使用します。DICOMコンテンツ内でのサイズ(バイト単位)がこのプリファレンス・パラメータの値より大きいDICOM属性を省略します。タイプSQの属性を省略する場合は、その子項目も省略されます。

また、このプリファレンス・パラメータの値は次のものに影響します。

  • メソッドextractMetadata( )によって生成されるメタデータ。詳細は、extractMetadata( )メソッドを参照してください。

  • setProperties()メソッドの動作。詳細は、setProperties( )メソッドを参照してください。

例9-44 XML_SKIP_ATTRプリファレンス・パラメータの定義

  <PREFERENCE_DEF>
    <PARAMETER>XML_SKIP_ATTR</PARAMETER>
    <DESCRIPTION>
      When encoding DICOM attributes into XML, omit the DICOM attributes
      with sizes larger than 512 bytes.
    </DESCRIPTION>
    <VALUE>512</VALUE>
  </PREFERENCE_DEF>

9.2.5 プライベート・ディクショナリ・ドキュメントの作成

プライベート・ディクショナリ・ドキュメントは、DICOM標準規格委員会以外のモダリティ・メーカーまたは組織で定義された属性が記述されているXML文書です。

プライベート組織またはモダリティ・メーカーは、それぞれの組織に特有の属性を各DICOMコンテンツに含めることができます。これらのプライベート属性は、プライベート・ディクショナリ・ドキュメントに定義してデータ・モデル・リポジトリに格納し、DICOMコンテンツ内のプライベート属性に関連付けられたメタデータをOracle Multimediaで処理できるようにする必要があります。

XMLスキーマordcmpv.xsdには、プライベート・ディクショナリ・ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

デフォルトのプライベート・ディクショナリ・ドキュメントordcmpv.xmlには、Oracleで定義されたプライベート属性が記述されています。(この構成ドキュメントの詳細は、「DICOM構成ドキュメント」を参照してください。)

XMLスキーマordcmrdt.xsdは、DICOM標準規格のデータ型およびそれらのデータ型に対するOracleによる拡張を定義し、これらのデータ型が他のすべてのDICOM XMLスキーマで使用されます。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

次の各項では、プライベート・ディクショナリ・ドキュメントの作成方法の例を示します。

9.2.5.1 プライベート属性の定義

プライベート・ディクショナリでプライベート属性を定義する際には、単純タグ、ワイルドカード・タグおよび範囲タグの3種類の属性タグを使用できます。属性タグの値は、グループ番号の後に要素番号を付けて構成します。

単純属性タグは、グループ番号の後に要素番号が続く形で構成される4バイトの16進数です(例: 10871100)。

ワイルドカード属性タグは、一連の16進数を表します。ワイルドカード属性タグも、グループ番号の後に要素番号が続く形で構成されており、値の一部が文字xまたはXで置き換えられています(例: 1087xx00)。

範囲属性タグは、16進数の範囲を表します。範囲属性タグは、値の範囲を定義する2つの単純属性タグで構成されます。範囲の始まりの値は、範囲の終わりの値より小さい値である必要があります。

プライベート・ディクショナリ・ドキュメント内の各プライベート属性は、<PRIVATE_ATTRIBUTE_DEFINITION>要素で表現されます。

注:

次の追加のガイドラインに留意してください。

  • 範囲属性タグ内では、ワイルドカード属性タグを使用しないでください。

  • 定義者名DICOMおよびUID 1.2.840.10008.1は、DICOM標準規格の属性を表すものとしてOracleで予約されています。これらをプライベート・ディクショナリで使用しないでください。

  • DICOMコンテンツ内のすべてのDICOMプライベート属性には、UIDで修飾された名前を関連付けることをお薦めします。

  • タグ/定義者ペアの値は、プライベート・ディクショナリ・ドキュメント内で一意であることが必要です。

単純属性タグを使用したプライベート属性の定義

例9-45では、単純属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-45の<TAG>要素は、属性タグの16進値FFFF1001を表しています。<NAME>要素は、タグを定義する組織の名前ORACLEを表します。<VR>要素は、属性タグの値表現を表します。<VR>要素は、VR_T型としてXMLスキーマordcmrdt.xsdに定義されています。<VR>要素の値は、<VR_T>型の値としてXMLスキーマordcmrdt.xsdにリストされている値のいずれかであることが必要です。<VM>要素は、属性タグの値の多重度を表します。<VM>要素は、VM_T型としてXMLスキーマordcmrdt.xsdに定義されています。<VM>要素の値は、VM_T型の値としてXMLスキーマordcmrdt.xsdにリストされている値のいずれかであることが必要です。(Oracle Multimedia DICOMでサポートされる値表現および値多重度のデータ型については、XMLスキーマordcmrdt.xsdに記述されている<VR_T>型および<VM_T>型を参照してください。)

ワイルドカード属性タグを使用したプライベート属性の定義

例9-46では、ワイルドカード属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-46のプライベート属性定義には、ワイルドカード・タグ0119XX00と定義者名PRIVATE_ORGが含まれています。

範囲属性タグを使用したプライベート属性の定義

例9-47では、範囲属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-47のプライベート属性定義には、A0110010からA01AAA10までのすべてのタグ範囲を指定する範囲タグが含まれています。定義者名1.2.840.423はUID値です。

注:

プライベート・ディクショナリ・ドキュメント内の他のタグ/定義者ペアの属性定義と一致する属性の定義はできません。

次のXMLコード・セグメントに、プライベート・ディクショナリで使用できない属性定義の例を示します。

<PRIVATE_ATTRIBUTE_DEFINITION>
  <TAG>0119XX00</TAG>
  <NAME>private tag</NAME>
  <DEFINER>PRIVATE_ORG</DEFINER>
.
.
.
 </PRIVATE_ATTRIBUTE_DEFINITION>
 
<PRIVATE_ATTRIBUTE_DEFINITION>
  <TAG>01191100</TAG>
  <NAME>private tag</NAME>
  <DEFINER>PRIVATE_ORG</DEFINER>
.
.
.
 </PRIVATE_ATTRIBUTE_DEFINITION>

前記のコード・セグメントでは、タグ/定義者ペア(01191100, PRIVATE_ORG)がタグ/定義者ペア(0119XX00, PRIVATE_ORG)と一致しています。

例9-45 単純属性タグによるプライベート属性の定義

<PRIVATE_ATTRIBUTE_DEFINITION>
  <TAG>FFFF1001</TAG>
  <NAME>locator macro tag</NAME>
  <DEFINER>ORACLE</DEFINER>
  <VR>SQ</VR>
  <VM>1</VM>
 </PRIVATE_ATTRIBUTE_DEFINITION>

例9-46 ワイルドカード属性タグによるプライベート属性の定義

<PRIVATE_ATTRIBUTE_DEFINITION>
   <TAG>0119XX00</TAG>
   <NAME>PRIVATE TAG1</NAME>
   <DEFINER>PRIVATE_ORG</DEFINER>
   <VR>IS</VR>
   <VM>1</VM>
</PRIVATE_ATTRIBUTE_DEFINITION>

例9-47 範囲属性タグによるプライベート属性の定義

<PRIVATE_ATTRIBUTE_DEFINITION>
   <TAG_RANGE>
      <dt:STARTING_TAG>A0110010</dt:STARTING_TAG>
      <dt:ENDING_TAG>A01AAA10</dt:ENDING_TAG>
    </TAG_RANGE>
   <NAME>Private Tag</NAME>
   <DEFINER>1.2.840.423</DEFINER>
   <VR>ST</VR>
   <VM>1</VM>
</PRIVATE_ATTRIBUTE_DEFINITION>
9.2.5.2 属性定義者の定義

属性定義者とは、プライベート属性を定義する組織の定義者名とUIDを指します。

<ATTRIBUTE_DEFINERS>要素は、プライベート・ディクショナリ・ドキュメント内で使用されるすべてのプライベート定義者名と定義者UIDを表すオプションの要素です。

注:

定義者名DICOMおよびUID 1.2.840.10008.1は、DICOM標準規格の属性を表すものとしてOracleで予約されています。これらをプライベート・ディクショナリで使用しないでください。

<ATTRIBUTE_DEFINERS>要素は、ATTR_DEFINERS_T型です。この型は、XMLスキーマordcmrdt.xsdで定義されています。

例9-48に、プライベート属性を定義する組織の定義者名とUIDの定義方法を示します。

例9-48の接頭辞dtは、<ATTR_DEFINER>要素が定義されている名前空間http://xmlns.oracle.com/ord/dicom/datatype_1_0にマップされています。<dt:NAME>要素の値は、プライベート組織の名前を表します。<dt:UID>要素の値は、プライベート組織のUIDを表します。

例9-48 属性定義者の定義

<ATTRIBUTE_DEFINERS>
  <dt:ATTR_DEFINER>
   <dt:NAME>1.2.1234.12345.123456.2.0</dt:NAME>
   <dt:UID>1.2.1234.12345.123456.2.0</dt:UID>
  </dt:ATTR_DEFINER>
  <dt:ATTR_DEFINER>
   <dt:NAME>PRIVATE ORG</dt:NAME>
   <dt:UID>1.2.123.1234</dt:UID>
  </dt:ATTR_DEFINER>
 </ATTRIBUTE_DEFINERS>
9.2.5.3 プライベート属性の廃止

プライベート・ディクショナリ・ドキュメントに含まれるプライベート属性が不要になった場合は、廃止にすることができます。例9-49に、プライベート属性を廃止として定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-49では、<RETIRED>要素の値trueが、この属性が廃止されたことを示しています。この値は、DICOM標準規格で使用されるRET値に対応しています。メタデータをDICOMコンテンツから抽出できるようにするために、廃止した属性の<VR>要素および<VM>要素の値を指定することをお薦めします。

例9-49 廃止としてのプライベート属性の定義

<PRIVATE_ATTRIBUTE_DEFINITION>
   <TAG>01191100</TAG>
   <NAME>locator macro tag</NAME>
   <DEFINER>PRIVATE_ORG</DEFINER>
   <VR>SQ</VR>
   <VM>1</VM>
   <RETIRED>true</RETIRED>
</PRIVATE_ATTRIBUTE_DEFINITION>

9.2.6 標準ディクショナリ・ドキュメントの作成

標準ディクショナリ・ドキュメントは、DICOM標準規格で定義されているデータ・ディクショナリのXML表現です。

XMLスキーマordcmsd.xsdには、標準ディクショナリ・ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。スキーマ要素の詳細は、<xs: annotation>要素に含まれているテキストを参照してください。)

デフォルトの標準ディクショナリ・ドキュメントordcmsd.xmlは、DICOM標準規格のPart 6に定義されているデータ・ディクショナリのXML表現です。(この構成ドキュメントの詳細は、「DICOM構成ドキュメント」を参照してください。)

XMLスキーマordcmrdt.xsdは、DICOM標準規格のデータ型およびそれらのデータ型に対するOracleによる拡張を定義し、これらのデータ型が他のすべてのDICOM XMLスキーマで使用されます。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

注:

標準ディクショナリ・ドキュメントには、DICOM標準規格委員会以外のモダリティ・メーカーや組織で定義された属性など、標準規格以外の属性を含めないでください。

新しい標準ディクショナリ・ドキュメントは、DICOM管理者向けのインストール手順とともに、Oracle Technology Networkを通じてOracleからリリースされます。この新しい標準ディクショナリ・ドキュメントには、DICOM標準規格の新しいリリース内容、または追加項目が反映されます。

次の各項では、標準ディクショナリ・ドキュメントの作成方法の例を示します。

9.2.6.1 標準属性の定義

標準ディクショナリで標準属性を定義する際には、単純タグおよびワイルドカード・タグの2種類の属性タグを使用できます。属性タグの値は、グループ番号の後に要素番号を付けて構成します。

単純属性タグは、グループ番号の後に要素番号が続く形で構成される4バイトの16進数です(例: 10871100)。

ワイルドカード属性タグは、一連の16進数を表します。ワイルドカード属性タグも、グループ番号の後に要素番号が続く形で構成されており、値の一部が文字xまたはXで置き換えられています(例: 1087xx00)。

標準ディクショナリ・ドキュメント内の各標準属性は、<STANDARD_ATTRIBUTE_DEFINITION>要素で表現されます。XML文書に記述された各標準属性は、DICOM標準規格のPart 6に定義されている関連タグに対応しています。

注:

定義者名DICOMおよびUID 1.2.840.10008.1は、DICOM標準規格の属性を表すものとしてOracleで予約されています。

単純属性タグを使用した標準属性の定義

例9-50では、単純属性タグで標準属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-50の<TAG>要素は、DICOM標準規格で定義されている属性タグの16進値00080008を表しています。この属性タグの値は、グループ番号の後に要素番号を続けた形で構成されます。<NAME>要素は、DICOM標準規格で定義されている属性タグの名前を表します。<VR>要素は、DICOM標準規格で定義されている属性タグの値表現を表します。<VM>要素は、DICOM標準規格で定義されている属性タグの値の多重度を表します。(Oracle Multimedia DICOMでサポートされる値表現および値多重度のデータ型については、XMLスキーマordcmrdt.xsdに記述されている<VR_T>型および<VM_T>型を参照してください。)

ワイルドカード属性タグを使用した標準属性の定義

例9-51では、ワイルドカード属性タグで標準属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-51の標準属性の定義には、ワイルドカード・タグ60xx0010が含まれています。

例9-50 単純属性タグによる標準属性の定義

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>00080008</TAG>
   <NAME>Image Type</NAME>
   <VR>CS</VR>
   <VM>1-n</VM>
</STANDARD_ATTRIBUTE_DEFINITION>

例9-51 ワイルドカード属性タグを使用した標準属性の定義

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>60xx0010</TAG>
   <NAME>Overlay Rows</NAME>
   <VR>US</VR>
   <VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>
9.2.6.2 標準属性の廃止

標準ディクショナリ・ドキュメントに含まれる標準属性がDICOM標準規格で使用されなくなると、その属性は廃止になります。例9-52では、廃止になった標準属性の定義を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-52では、<RETIRED>要素の値trueが、この属性が廃止されたことを示しています。この値は、DICOM標準規格で使用されるRET値に対応しています。メタデータをDICOMコンテンツから抽出できるようにするために、廃止した属性の<VR>要素および<VM>要素の値を指定することをお薦めします。

例9-52 廃止としての標準属性の定義

<STANDARD_ATTRIBUTE_DEFINITION>
   <TAG>00080010</TAG>
   <NAME>Recognition Code</NAME>
   <VR>CS</VR>
   <VM>1</VM>
   <RETIRED>true</RETIRED>
</STANDARD_ATTRIBUTE_DEFINITION>

9.2.7 ストアド・タグ・リスト・ドキュメントの作成

ストアド・タグ・リスト・ドキュメントは、setProperties( )メソッドがコールされたときに埋込みDICOMコンテンツから抽出されてORDDicomオブジェクトのXMLメタデータ属性に格納されるDICOM属性を指定します。XMLスキーマordcmstl.xsdは、ストアド・タグ・リスト・ドキュメントを制約するXMLスキーマを定義します。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。)

一般に、ストアド・タグ・リスト・ドキュメントは、マッピング・ドキュメントおよび制約ドキュメントで使用される属性タグを含みます。ストアド・タグ・リスト・ドキュメント内の各属性タグの値は<ATTRIBUTE_TAG>要素によって定義されます。

ストアド・タグ・リスト・ドキュメントの作成にはgenerateTagListDocument( )ファンクションを使用することをお薦めします。たとえば、次のコード・セグメントに示すように、ストアド・タグ・リストにはいくつかのタグを含めることができます。

<ATTRIBUTE_TAG>00080008[3]</ATTRIBUTE_TAG>
<ATTRIBUTE_TAG>00081155(DICOM)</ATTRIBUTE_TAG>
<ATTRIBUTE_TAG>00082112.00081150</ATTRIBUTE_TAG>
<ATTRIBUTE_TAG>00082112.0040A170.00080104</ATTRIBUTE_TAG>
<ATTRIBUTE_TAG>0040A730.0040A123[1]#PersonName</ATTRIBUTE_TAG>
<ATTRIBUTE_TAG>0040A730[2].0040A160</ATTRIBUTE_TAG>

ストアド・タグ・リスト・ドキュメントを生成してリポジトリに挿入する例については、「サンプル・セッション4: ストアド・タグ・リスト・ドキュメントの挿入」を参照してください。ストアド・タグ・リストを使用してDICOMコンテンツから特定の属性を抽出する処理の詳細は、「タスク10: DICOM属性抽出時の記憶域の改善」を参照してください。

9.2.8 UID定義ドキュメントの作成

UID定義ドキュメントは、DICOM標準規格で定義されている一意識別子(UID)のXML表現です。Oracle Multimedia DICOMでは、UID定義を使用してDICOMコンテンツが解析されます。

XMLスキーマordcmui.xsdには、UID定義ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、「DICOM XMLスキーマ」を参照してください。スキーマで使用される属性の詳細は、<xs: annotation>要素に含まれているテキストを参照してください。)

デフォルトのUID定義ドキュメント(ordcmui.xml)には、DICOM標準規格のPart 6に記述されているUIDが含まれています。

UID定義ドキュメント内では、各UID定義を定義するために<UID_DEF>要素が使用されます。

注:

次の追加のガイドラインに留意してください。

  • リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のUID定義ドキュメントを保持できます。

  • ユーザー定義のUID定義ドキュメントに対する変更は、DICOM標準規格の更新または新しいUID値の追加を行う目的のみに制限する必要があります。独自に定義された一意識別子の作成については、DICOM標準規格のPart 5を参照してください。

  • DICOM標準規格で定義されている既存のUIDは、DICOM標準規格の更新を含むようにのみ変更できます。

次の各項では、UID定義ドキュメントのUID定義を作成する方法の例を示します。

9.2.8.1 UID定義の定義

例9-53に、記憶域クラスのUID定義を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-53の<UID>要素の値1.2.840.10008.5.1.4.1.1.2は、DICOM標準規格で定義されているUID値を表しています。<NAME>要素の値CT Image Storageは、DICOM標準規格で定義されているUID名を表しています。<UID_DEF>要素のclassification属性の値"storageClass"は、DICOM標準規格で定義されているUID型のSOPクラスに対応しています。contentType属性の値"image"は、DICOMコンテンツにピクセル・データが含まれることを示しています。

例9-53 記憶域クラスのUID定義の定義

 <UID_DEF classification="storageClass" contentType="image">
    <UID>1.2.840.10008.5.1.4.1.1.2</UID>
    <NAME>CT Image Storage</NAME>
  </UID_DEF>
9.2.8.2 UID定義の廃止

例9-54に、転送構文のUID定義を廃止として定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。

例9-54の<UID>要素の値1.2.840.10008.1.2.4.52は、DICOM標準規格で定義されているUID値を表しています。<NAME>要素の値JPEG Extended (Process 3 and 5) (Retired)は、DICOM標準規格で定義されているUID名を表しています。classification属性の値"transferSyntax"は、DICOM標準規格で定義されているUID型の転送構文に対応しています。isCompressedisEVR(明示的なVR)およびisLE(リトル・エンディアン)の各属性値は、DICOM標準規格のPart 5に記述されている転送構文の定義から導出されたものです。retired属性の値"true"は、このUID定義が廃止されていることを示しています。

例9-54 廃止としてのUID定義の定義

 <UID_DEF classification="transferSyntax" isCompressed="true" isEVR="true"
          isLE="true" retired="true">
    <UID>1.2.840.10008.1.2.4.52</UID>
    <NAME>JPEG Extended (Process 3 and 5) (Retired)</NAME>
  </UID_DEF>