10 DICOM構成ドキュメントの作成
管理者は、独自の構成ドキュメントの作成など、いくつかのリポジトリ管理タスクを実行できます。
この章では、構成ドキュメントの特性について説明し、特定の組織または企業に固有の構成ドキュメントを記述する手順を示します。
注意:
この章では、XML要素の属性名を固定幅フォントで示します。
Oracle Multimedia DICOMでは、特殊文字で構成されるプライベート属性定義者名を含むDICOMファイルの処理がサポートされています。これらの特殊文字を使用するプライベート属性定義者を参照するDICOMメタデータ・タグを参照できるようにするために、Oracle Multimedia DICOMでは、DICOM構成ドキュメントで使用される値ロケータの構文を拡張することで、これらの定義者を表現できるようになっています。DICOM値ロケータ型は、DICOMコンテンツ内のDICOM属性またはそれらの子コンポーネントを識別します。リファレンス情報については、DICOM値ロケータの一般的な書式を参照してください。
管理者は、匿名ドキュメント、制約ドキュメントおよびマッピング・ドキュメント内でDICOM値ロケータを使用できます。DICOM値ロケータはMid-Tier Java APIでも使用されます。匿名ドキュメント、制約ドキュメントおよびマッピング・ドキュメントでのDICOM値ロケータの使用の詳細は、匿名ドキュメントでのDICOM値ロケータの使用、制約ドキュメントでのDICOM値ロケータの使用およびマッピング・ドキュメントでのDICOM値ロケータの使用をそれぞれ参照してください。構成ドキュメントの挿入、更新およびの削除の詳細は、DICOMの管理の概要を参照してください。これらのプロセスの例は、DICOMリポジトリの管理を参照してください。
この章では、次の内容を説明します。
関連項目:
-
中間層でDICOM値ロケータをサポートするJavaクラスに関するリファレンス情報は、Oracle Multimedia Mid-Tier Java APIリファレンスを参照してください。
-
DICOM標準規格で定義されているDICOMコンテンツのデータ構造およびエンコーディングの定義の詳細は、
http://medical.nema.org/
を参照してください。
10.1 構成ドキュメントの特性
インストールが完了すると、Oracle Multimedia DICOMデータ・モデル・リポジトリには、次のデフォルトの構成ドキュメント・セットが含まれます。
-
匿名(
ordcman.xml
) -
制約(
ordcmct.xml
、ordcmcmd.xml
、ordcmcmc.xml
) -
マッピング(
ordcmmp.xml
) -
標準ディクショナリ(
ordcmsd.xml
) -
プライベート・ディクショナリ(
ordcmpv.xml
) -
プリファレンス(
ordcmpf.xml
) -
UID定義(
ordcmui.xml
)
注意:
さらに、ユーザーは次の操作を実行できます。
-
setProperties()メソッドのコール時に、埋込みDICOMコンテンツから抽出され、ORDDicomオブジェクトのXMLメタデータ属性に格納されるDICOM属性を指定する、オプションの格納タグ・リスト・ドキュメントをインストールする。
-
DICOM画像およびメタデータのバックアップ記憶域メカニズムとしてOracle Databaseを使用するように構成されたDICOMプロトコル・アダプタ・インスタンスの動作を管理するDICOMプロトコル・ドキュメントを構成する。
各構成ドキュメントの簡単な定義については、リポジトリ内の構成ドキュメントを参照してください。
10.1.2 制約ドキュメントの特性
-
他のタイプのドキュメントが制約ドキュメントに依存することはありません。
-
制約ドキュメント間には、依存性がある場合があります。
-
制約ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。
-
リポジトリ内に保持できる制約ドキュメントの数に上限はありません。
-
後から挿入する制約ドキュメントは、先に挿入した制約ドキュメントに依存するように記述できます。たとえば、インストール済の制約ドキュメントを例に取ると、
ordcmct.xml
はordcmcmd.xml
に依存し、これらのドキュメントは両方ともordcmcmc.xml
に依存します。 -
isConformanceValid( )メソッドは、指定された制約ルールおよびDICOMコンテンツに依存します。(制約ドキュメントに定義された)制約ルールが変更されると、DICOMコンテンツに対して異なる検証が行われる可能性があります。
-
プリファレンス・ドキュメントのプリファレンス・パラメータEXP_IF_NULL_ATTR_IN_CONSTRAINTを使用して、制約ルールで指定された属性にnull値が見つかったときに例外を発生させるかどうかを指定できます。このプリファレンス・パラメータが
true
に設定されている場合、isConformanceValid( )メソッドで例外が発生します。それ以外の場合は、検出された条件がfalse
と評価されます。
10.1.3 DICOMプロトコル・ドキュメントの特性
-
他のタイプのドキュメントがDICOMプロトコル・ドキュメントに依存することはありません。
-
DICOMプロトコル・ドキュメント間には依存関係がありません。
-
リポジトリ内に保持できるDICOMプロトコル・ドキュメントの数に上限はありません。
-
各DICOMプロトコル・ドキュメントに1つ以上の記憶域構成要素(
<storage>
タグ)が含まれている必要があります。この要素は繰り返し使用できます。この要素を使用すると、DICOM画像とメタデータの格納に使用するOracle Database内の表を指定できます。 -
各DICOMプロトコル・ドキュメントは
ordcmdp.xsd
スキーマに準拠している必要があります。
10.1.4 マッピング・ドキュメントの特性
-
他のタイプのドキュメントがマッピング・ドキュメントに依存することはありません。
-
マッピング・ドキュメント間には、依存性がありません。
-
マッピング・ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。
-
リポジトリ内に保持できるマッピング・ドキュメントの数に上限はありません。
-
マッピング・ドキュメントがextractMetadata( )メソッドのパラメータとして使用されている場合、マッピング・ドキュメントに対する変更は、extractMetadata( )メソッドの結果に影響します。
-
マッピング・ドキュメントの<NAMESPACE>要素でメタデータの名前空間値が指定されている場合、そのメタデータの名前空間値に対応するXMLスキーマがOracle XML DBに登録されている必要があります。
関連項目:
XMLスキーマの登録の詳細は、Oracle XML DB開発者ガイドを参照してください。
extractMetadata( )メソッドが正しく動作するようにするには、マッピング・ドキュメントの構造と、<NAMESPACE>要素の値に対応するXMLスキーマが一貫している必要があります。
-
次の条件が両方とも満たされる場合にのみ、抽出されたメタデータのスキーマ検証が行われます。
-
マッピング・ドキュメントの<NAMESPACE>要素に値が指定されている。
-
プリファレンス・ドキュメントのプリファレンス・パラメータVALIDATE_METADATAの値が
true
である。
-
10.1.5 プリファレンス・ドキュメントの特性
-
リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のプリファレンス・ドキュメントを保持できます。インストール済のOracle定義のプリファレンス・ドキュメント(
ordcmpf.xml
)には、Oracle固定のプリファレンス・パラメータ名と値のリストが含まれています。ユーザー定義のプリファレンス・ドキュメントでは、Oracle定義のプリファレンス・ドキュメントに設定されているデフォルトのプリファレンス・パラメータ値を更新できます。 -
プリファレンス・ドキュメント内のプリファレンス・パラメータ値を変更すると、DICOMメソッド、ファンクションおよびプロシージャの動作が変わります。具体的には、Oracle定義のプリファレンス・ドキュメントに定義されたデフォルト値が、ユーザー定義のプリファレンス・ドキュメントに定義されたプリファレンス・パラメータ値によってオーバーライドされます。
10.1.8 格納タグ・リスト・ドキュメントの特性
-
リポジトリで保持できる格納タグ・リスト・ドキュメントは1つのみです。
-
格納タグ・リスト・ドキュメントは、標準ディクショナリ・ドキュメント、プライベート・ディクショナリ・ドキュメントおよびプリファレンス・ドキュメントに依存します。
-
プリファレンス・パラメータMANDATE_ATTR_TAGS_IN_STLを使用すると、制約ドキュメントおよびマッピング・ドキュメントで使用されるすべてのタグが格納タグ・リスト・ドキュメントにリストされるというルールが適用されます。プリファレンス・ドキュメントのMANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータのデフォルト値は
false
です。このプリファレンス・パラメータがtrue
に設定されている場合は、ルールが適用されます。それ以外の場合は適用されません。
10.2 構成ドキュメントの記述方法
10.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
属性の有効な値を示します。
表10-1 action属性の値
値 | 説明 |
---|---|
|
アクションは実行されません。結果のDICOMコンテンツには、指定された属性または一連の属性の値が変更されずにそのまま表示されます。 |
|
デフォルト値です。指定された属性または一連の属性が結果のDICOMコンテンツから削除されます。 注意: 一部の画像アプリケーションには、特定の属性( |
|
結果のDICOMコンテンツに含まれる属性値は、指定した値で置換されます。指定する置換値は、データ・ディクショナリの<VR>要素で定義されたタグのデータ型と一致する文字列表現であることが必要です。 注意: このアクション値は、グローバル・アクションには指定できません。 次に例を示します。 標準タグ 標準タグ |
匿名ドキュメント内の属性は、標準属性でもプライベート属性でもかまいません。標準属性またはプライベート属性は、定義済の場合も未定義の場合もあります。定義済の標準属性は、DICOM標準規格、およびデータ・モデル・リポジトリ内の標準ディクショナリで定義されています。定義済のプライベート属性は、特定の組織によって定義された固有の属性です。Oracle Multimediaで既知の定義済のプライベート属性は、データ・モデル・リポジトリ内のプライベート・ディクショナリで定義されています。未定義の属性は、データ・モデル・リポジトリ内の標準ディクショナリまたはプライベート・ディクショナリのいずれにも定義されていません。
<INDIVIDUAL_ATTRIBUTE>要素には、定義済の標準属性またはプライベート属性を匿名化するために実行するアクションを定義します。プライベート属性の場合は、<PRIVATE_ATTRIBUTES>要素で定義されたグローバル・アクションより、この要素に指定されたアクションが常に優先されます。また、未定義の標準属性またはプライベート属性を<INDIVIDUAL_ATTRIBUTE>要素の値として匿名ドキュメントに指定することはできません。
次の表に、グローバル・アクションを定義する匿名ドキュメント内の要素を示します。
表10-2 グローバル・アクションの要素
要素 | 説明 |
---|---|
<PRIVATE_ATTRIBUTES> |
定義済および未定義のすべてのプライベート属性に対して実行するアクションを指定します。 注意: <INDIVIDUAL_ATTRIBUTE>要素で定義したプライベート属性に対するアクションは、<PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションよりも常に優先されます。 |
<UNDEFINED_STANDARD_ATTRIBUTES> |
データ・モデル・リポジトリ内の標準ディクショナリで定義されていないすべての標準属性に対して実行するアクションを指定します。 DICOM属性タグには、グループ番号および要素番号が含まれます。 標準属性タグは偶数のグループ番号で識別されます。 |
<UNDEFINED_PRIVATE_ATRIBUTES> |
データ・モデル・リポジトリ内のプライベート・ディクショナリで定義されていないすべてのプライベート属性に対して実行するアクションを指定します。 注意: この要素で定義したアクション値は、<PRIVATE_ATTRIBUTES >要素で定義したアクション値よりも優先されます。 |
<ATTRIBUTE_TAG>要素の有効な値の例は、00100010
、00100010(DICOM)
、10871100(PRIVATE ORG)
などです。
注意:
プライベート属性の定義者名として現在使用できるのは、次の値のみです。
-
大文字と小文字:
A-Z
-
数字:
0-9
-
文字:
'.'
(ドット)、' '
(スペース)、'/'
(フォワード・スラッシュ)
次の各項では、匿名ドキュメントの作成方法の例を示します。
10.2.1.1 標準属性の匿名化
この項では、単一の標準属性を指定した値で置換し、作成されるDICOMコンテンツでこの属性を匿名化する方法を示します。例10-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>
前述のコード・セグメントで示したタグ定義は、データ型PN
(<VR>要素で定義)の標準属性Patient's Name
を表しています。<VR>要素は、DICOM標準規格のPart 5で定義されている標準データ型の指定に使用される値表現の要素です。データ型PN
は、XMLスキーマordcmrdt.xsd
に定義されています。属性Patient's Name
を置換する値は、<VR>要素で定義された値の文字列表現であることが必要です。
例10-1 標準属性の匿名化
<INDIVIDUAL_ATTRIBUTE> <ATTRIBUTE_TAG>00100010</ATTRIBUTE_TAG> <DESCRIPTION>Patient's Name </DESCRIPTION> <ANONYMITY_ACTION action="replace">anonymous</ANONYMITY_ACTION> </INDIVIDUAL_ATTRIBUTE>
10.2.1.2 未定義の標準属性の匿名化
この項では、アクション値remove
を使用して、作成されるDICOMコンテンツから未定義の標準属性をすべて削除する方法を示します。例10-2は、このアクションが定義されているXML文を示しています。
例10-2 すべての未定義の標準属性の削除
<UNDEFINED_STANDARD_ATTRIBUTES action="remove" />
10.2.1.3 選択したプライベート属性の匿名化
この項では、単一のプライベート属性を指定した値で置換し、作成されるDICOMコンテンツでこの属性を匿名化する方法を示します。例10-3は、プライベート属性10871100(PRIVATE ORG)
のコード・セグメントを示しています。これらのアクションを定義するXML文は、太字で強調表示しています。
例10-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>
前述のコード・セグメントで示したタグ定義は、データ型がCS
(<VR>要素で定義)で名前がMedia Type
のプライベート属性10871100(PRIVATE ORG)
を表しています。データ型CS
は、xs:token of length 16
としてXMLスキーマordcmrdt.xsd
に定義されています。置換値は、<VR>要素で定義された値に準拠する文字列表現であることが必要です。
例10-3 プライベート属性の匿名化
<INDIVIDUAL_ATTRIBUTE> <ATTRIBUTE_TAG>10871100(PRIVATE ORG)</ATTRIBUTE_TAG> <DESCRIPTION>Media Type </DESCRIPTION> <ANONYMITY_ACTION action="replace"> replaced</ANONYMITY_ACTION> </INDIVIDUAL_ATTRIBUTE>
10.2.1.4 すべてのプライベート属性の匿名化
この項では、複数のプライベート属性を削除したり、指定した値で置換したりすることによって、作成されるDICOMコンテンツでそれらの属性を匿名化する方法を示します。
注意:
次のガイドラインに留意してください。
-
<INDIVIDUAL_ATTRIBUTE>要素で定義した特定のプライベート属性に対するアクション値は、<PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションよりも常に優先されます。
-
<UNDEFINED_PRIVATE_ATTRIBUTES>要素で定義したグローバル・アクションは、<PRIVATE_ATTRIBUTE>要素で定義したグローバル・アクションよりも優先されます。
例10-4は、アクション値remove
を使用して、作成されるDICOMコンテンツですべてのプライベート属性を削除するコード・セグメントを示しています。
同様に、例10-5は、アクション値remove
を使用して、作成されるDICOMコンテンツからすべての未定義のプライベート属性を削除するコード・セグメントを示しています。また、このコード・セグメントは、アクション値replace
を使用して、作成されるDICOMコンテンツで定義済のプライベート属性のタグ値10871100(PRIVATE ORG)
をストリング"anonymous"
で置換します。これらのアクションを定義するXML文は、太字で強調表示しています。
例10-6は、アクション値none
を使用して、作成されるDICOMコンテンツに定義済のプライベート属性をすべて含めるコード・セグメントを示しています。また、このコード・セグメントは、アクション値remove
を使用して、作成されるDICOMコンテンツから未定義のプライベート属性をすべて削除します。
例10-7は、アクション値remove
を使用して、作成されるDICOMコンテンツから定義済のプライベート属性をすべて削除するコード・セグメントを示しています。また、このコード・セグメントは、アクション値none
を使用して、作成されるDICOMコンテンツに未定義のプライベート属性をすべて含めます。
例10-4 すべてのプライベート属性の削除
<PRIVATE_ATTRIBUTES action="remove"></PRIVATE_ATTRIBUTES> <UNDEFINED_PRIVATE_ATTRIBUTES action="remove" />
例10-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>
例10-6 定義済のプライベート属性の追加と未定義のプライベート属性の削除
<PRIVATE_ATTRIBUTES action="none"></PRIVATE_ATTRIBUTES> <UNDEFINED_PRIVATE_ATTRIBUTES action="remove" />
例10-7 定義済のプライベート属性の削除と未定義のプライベート属性の追加
<PRIVATE_ATTRIBUTES action="remove"></PRIVATE_ATTRIBUTES> <UNDEFINED_PRIVATE_ATTRIBUTES action="none" />
10.2.1.5 匿名ドキュメントでのDICOM値ロケータの使用
この項では、DICOM値ロケータを使用して、匿名ドキュメントで属性を指定する方法を示します。例10-8は、DICOM値ロケータで属性Person Name
を指定して、作成されるDICOMコンテンツでこの属性を匿名化する方法を示しています。この属性は、属性Content Sequence(データ型は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>
例10-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値ロケータにワイルドカード文字を使用すると、この属性のすべての値が確実に匿名化されます。
注意:
DICOM値ロケータでのTAG_FIELDコンポーネントの使用は、匿名ドキュメントではサポートされていません。
DICOM値ロケータ・タイプの詳細は、DICOM値ロケータの一般的な書式を参照してください。
例10-8 匿名ドキュメント内の単純なDICOM値ロケータ
<INDIVIDUAL_ATTRIBUTE>
<ATTRIBUTE_TAG>0040A730[1].0040A123</ATTRIBUTE_TAG>
<DESCRIPTION> Person Name </DESCRIPTION>
<ANONYMITY_ACTION action="replace">anonymous</ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>
例10-9 匿名ドキュメント内のワイルドカード文字を含むDICOM値ロケータ
<INDIVIDUAL_ATTRIBUTE>
<ATTRIBUTE_TAG>00081050[*]</ATTRIBUTE_TAG>
<DESCRIPTION> Performaing physician's name </DESCRIPTION>
<ANONYMITY_ACTION action="remove"></ANONYMITY_ACTION>
</INDIVIDUAL_ATTRIBUTE>
10.2.2 制約ドキュメントの作成
制約ドキュメントは、1つ以上の制約ルールを定義します。XMLスキーマordcmct.xsd
には、制約ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、DICOM XMLスキーマを参照してください。)
デフォルトの制約ドキュメント(ordcmct.xml
、ordcmcmd.xml
、 ordcmcmc.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を起動する他の制約のマクロを起動する場合に、再帰的となります。再帰的制約マクロは、階層構造または再帰的構造の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標準規格を参照してください。この標準規格は、次の場所にあるNational Electrical Manufacturers Association (NEMA)のWebサイトで閲覧できます。
10.2.2.1 単純な制約ルールの定義
この項では、SOP共通モジュールで必要とされる2つの条件をチェックする単純な制約ルールの作成方法を示します(SOP共通モジュールはDICOM標準規格のPS 3.3のTable C.12-1に定義されています)。
次の表に、DICOM標準規格のSOP共通モジュールに定義されているSOP Class UIDの条件およびSOP Instance UIDの条件を示します。
属性名 | タグ | タイプ | 属性の説明 |
---|---|---|---|
SOP Class UID |
(0008,0016) |
1 |
SOPクラスを一意に識別します。詳細は、C.12.1.1.1を参照してください。PS 3.4も参照してください。 |
SOP Instance UID |
(0008,0018) |
1 |
SOPインスタンスを一意に識別します。詳細は、C.12.1.1.1を参照してください。PS 3.4も参照してください。 |
前述の表の2つのエントリは、属性SOP Class UID (0008,0016)
およびSOP Instance UID (0008,0018)
が存在する必要があり、空にすることができないことを示しています。
例10-10のコード・セグメントは、属性SOP Class UID (0008,0016)
が空でないかどうかを確認する条件を示しています。
例10-11のコード・セグメントは、属性SOP Instance UID (0008,0018)
が空でないかどうかを確認する条件を示しています。
これら両方の属性が空でないかどうかを確認することは、例10-10および例10-11で示した2つの条件に対して論理AND演算を行うのと同じことです。この演算を実行するための既定の方法は、前述の2つの条件に対して論理AND演算を実行する別の条件を定義することです。例10-12は、これら2つの条件の論理AND演算子を含む条件を示しています。
論理AND関係を含む条件をより簡単に定義する方法として、例10-12に示した外側の条件を省略することもできます。この方法に基づいて、制約ドキュメントordcmcmd.xml
の制約ルールをそのまま使用して、グローバル・ルールSOPCommonModule
を例10-13のように定義できます。
各グローバル・ルールには、一意の名前を指定する必要があります。さらに、各グローバル・ルールにオプションの<DESCRIPTION>要素を含め、ルールの説明を記述できます。
例10-13のコード・セグメントは、ブール・ファンクションまたは論理関係を表す条件を定義する方法を示しています。リレーショナルな関係を表現する条件も、同様に定義できます。
例10-14は、グローバル・ルール内の2つのサンプル条件を示すコード・セグメントの部分です。これらの条件により、検証するDICOMコンテンツにグローバル・ルールの属性が含まれていなくても、エラーが発生しなくなります。この(Patient Moduleに対する)グローバル・ルールの完全なコード・セグメントは、例3-1に示されています。
例10-14の最初の条件は、属性Patient's Sex (0010, 0040)
が空でないという条件をテストします。この条件により、準拠検証の実行時に、属性Patient's Sex (0010, 0040)
を参照する以降のすべての条件が、この条件がtrueを戻した場合にのみテストされるようになります。したがって、2番目の述語がテストされるのは、検証するDICOMコンテンツに属性Patient's Sex (0010, 0040)
が含まれており、かつその値が空でない場合のみです。このため、DICOMコンテンツに属性Patient's Sex (0010, 0040)
が含まれていなくても、エラーは発生しません。
リレーショナル関係を表す条件のその他の例は、再帰的制約マクロの定義を参照してください。
例10-10 SOP Class UIDの1つの状態に関する条件
<PREDICATE> <BOOLEAN_FUNC operator="notEmpty"> <ATTRIBUTE_TAG>00080016</ATTRIBUTE_TAG> </BOOLEAN_FUNC> </PREDICATE>
例10-11 SOP Instance UIDの1つ状態に関する条件
<PREDICATE> <BOOLEAN_FUNC operator="notEmpty"> <ATTRIBUTE_TAG>00080018</ATTRIBUTE_TAG> </BOOLEAN_FUNC> </PREDICATE>
例10-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>
例10-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>
例10-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>
10.2.2.2 他の制約ルールのインポートによる制約ルールの定義
この項では、他の外部制約ルールを参照することで、制約ルールを階層構造で作成する方法を示します。また、外部の制約ルールを参照する方法も示します。
制約ドキュメントordcmct.xml
には、グローバル・ルールOracleOrdObject
が定義されています。この制約ルールは、SOPCommonModule
、GeneralSeriesModule
およびGeneralStudyModule
の3つの制約ルールの論理AND関係として定義されています。例10-15は、これら3つの制約ルールの論理AND関係を含むグローバル・ルールを示しています。
これら3つの制約ルールは、制約ドキュメントordcmcmd.xml
に定義されており、DICOM制約ドキュメントordcmct.xml
にインポートされます。例10-16は、これらの制約ルールを表す外部ルールを示しています。
したがって、グローバル・ルールOracleOrdObject
は、単純な制約ルールの定義で定義されているグローバル・ルールSOPCommonModule
を参照します。グローバル・ルールSOPCommonModule
は、他の制約ルールからも参照できます。このように、制約ドキュメントはモジュール化したり構造化して記述できます。
例10-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>
例10-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>
10.2.2.3 制約マクロの定義および参照
この項では、あるDICOM属性がコード・シーケンス属性であるかどうかを確認する制約マクロを作成する方法を示します。制約マクロは、コード・シーケンス・マクロ(DICOM標準規格のPS 3.3のTable 8.8-1で定義)で必要とされる最初の2つの条件に従って、この確認操作を実行します。
次の表に、DICOM標準規格のコード・シーケンス・マクロに定義されているCode ValueとCoding Scheme Designatorの条件を示します。
属性名 | タグ | タイプ | 属性の説明 |
---|---|---|---|
Code Value |
(0008,0100) |
1C |
第8.1項を参照してください。シーケンス項目が存在する場合は必須。 |
Coding Scheme Designator |
(0008,0102) |
1C |
第8.2項を参照してください。シーケンス項目が存在する場合は必須。 |
前述の表の2つのエントリは、必須の子属性Code Value (0008,0100)
およびCoding Scheme Designator (0008,0102)
を空にすることができないことを示しています。
例10-17は、属性Code Value (0008,0100)
およびCoding Scheme Designator (0008,0102)
が空でないかどうかをチェックするグローバル・マクロ定義(デフォルトの制約ドキュメントordcmcmc.xml
から抜粋)を示しています。
制約マクロに含まれる条件には、パラメータを持つオペランドが含まれます。これらのパラメータは、<PARAMETER_DECLARATION>要素で定義する必要があります。これらのオペランドでパラメータを参照する場合は、${ }
のように、ドル記号を付けた括弧でパラメータを囲む必要があります。前述のコード・セグメントでは、パラメータCodeAttr
がチェック対象のコード・シーケンスを表します。したがって、パラメータCodeAttr
のコード値が空でないかどうかをチェックすることは、パラメータ${CodeAttr}.00080100
が空でないかどうかをチェックするのと同じことです。
制約マクロは、マクロ・パラメータに異なる値を設定した、1つ以上の制約ルールからコールされることがあります。制約マクロをコールするには、マクロ名と、そのマクロの全パラメータの名前/値ペアを指定する必要があります。
例10-18は、グローバル・ルールGeneralSeriesModule
の定義を示しています(デフォルトの制約ドキュメントordcmcmd.xml
から抜粋)。このルールは制約マクロCodeSequenceMacro
をコールします。このマクロがコールされるコード文を太字で強調表示しています。
制約マクロCodeSequenceMacro
は別の制約ファイルで定義されているため、制約ドキュメントordcmcmd.xml
の先頭で、次のようにインポートしています。
<EXTERNAL_MACRO_INCLUDE name="CodeSequenceMacro"> Defines a code sequence macro</EXTERNAL_MACRO_INCLUDE>
DICOMコンテンツが制約ルールGeneralSeriesModule
に準拠しているかどうかのチェックをユーザーが行うと、そのDICOMコンテンツは制約マクロCodeSequenceMacro
に対してチェックされます。ここでパラメータCodeAttr
は00400260
に置換されます。具体的には、<ATTRIBUTE_TAG>要素をチェックする条件である${CodeAttr}.00080100 not empty
が、00400260.00080100 not empty
になります。また、<ATTRIBUTE_TAG>要素${CodeAttr}.00080102 not empty
は、00400260.00080102 not empty
になります。
パラメータCodeAttr
を00400260
に置換した制約マクロCodeSequenceMacro
がDICOMコンテンツに対してfalse
と評価される場合は、ビューorddcm_conformance_vld_msgsに、DICOMコンテンツに対するメッセージ"missing attribute 00400260.00080100 or 00400260.00080102"
が表示されます。これらの準拠の検証メッセージを使用して、DICOMコンテンツに含まれる、制約ルールに準拠していない特定の属性に関する情報を確認できます。
これらのメッセージの詳細は、orddcm_conformance_vld_msgsビューを参照してください。
例10-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>
例10-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>
10.2.2.4 再帰的制約マクロの定義
この項では、SR Document Content Module (DICOM標準規格のPS 3.3のSection C.17.3で定義)で必須となっている属性のサブセットをチェックする2つの例を示します。
次の表は、Table C.17-6のDocument Relationship Macroの属性で定義されているContent Sequence属性とRelationship Type属性を示しています。また、Table C.17-5のDocument Content Macroの属性で定義されているValue Type属性も示しています。
属性名 | タグ | タイプ | 属性の説明 |
---|---|---|---|
Content Sequence |
(0040,A730) |
1C |
包含するソース・コンテンツ項目との関係のターゲットであるコンテンツを含む、再帰的にネストされている可能性のある項目のシーケンス。 このシーケンスには1つ以上の項目を含むことができます。 包含するコンテンツ項目に関係が存在する場合は必須です。 注意:
詳細はC.17.3.2.4を参照してください。 |
Relationship Type |
(0040,A010) |
1 |
(包含する)ソース・コンテンツ項目とターゲット・コンテンツ項目間の関係のタイプ。 IODでは、関係に対する追加の制約が指定されています(列挙値のリストを含む)。 定義済の用語:
詳細はC.17.3.2.4を参照してください。 |
Value Type |
(0040,A040) |
1 |
このコンテンツ項目内でエンコードされている値の型。 定義済の用語:
詳しくは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プリファレンス・パラメータの定義を参照してください。
例10-19のコード・セグメントは、自分自身をコールする単一の制約マクロを使用した再帰処理の例です。例10-20のコード・セグメントは、2つの異なる制約マクロ間の再帰処理の例です。最初のマクロが2番目のマクロをコールし、その後、2番目のマクロが最初のマクロをコールします。
注意:
この項の例はインストール・ソフトウェアには付属していません。
単一の制約マクロによる再帰処理
例10-19は、再帰的なグローバル制約マクロDocumentContentMacro
を定義しています。このマクロは、グローバル制約ルールDocumentContentModule
によってコールされます。このマクロを定義するコード文と、このマクロをコールするコード文を、太字で強調表示しています。
準拠検証の実行時には、<ACTION>要素の${RUNTIME_TAG}
タグがDICOM値ロケータに置換されます。この値ロケータには、対応するDICOMコンテンツ内の属性が、<ACTION>要素のwhen
属性で指定された条件を満たしているかどうかの評価の対象になる値ロケータが指定されます。最初のアクションでは、末尾がタグ0040A040
であるDICOM値ロケータのうち、DICOMコンテンツ内の対応する属性が空でないもののリストを含むメッセージが作成されます。2番目のアクションでは、末尾がタグ0040A040
であるDICOM値ロケータのうち、DICOMコンテンツ内の対応する属性がCONTAINER
と一致しないもののリストを含むメッセージが作成されます。
例10-19では、再帰的制約マクロが、そのマクロに対して定義されたパラメータの名前と値のペアを指定して自分自身をコールするときに、再帰処理が発生します。
マクロDocumentContentMacro
の定義では、最初の条件によって、属性${tag}.0040A010
が空でないかどうかのチェックが行われます。2番目の条件では、リレーショナル演算子を使用して、この属性の値が有効であるかどうかのチェックが行われます。3番目の条件では、属性${tag}.0040A040
が空でないかどうかのチェックが行われます。4番目の条件では、${tag}.0040A040
の値がCONTAINER
であるかどうかのチェックが行われます。これに当てはまる場合は、コンテンツ・シーケンス${tag}.0040A730[*]
に対して、マクロDocumentContentMacro
がコールされます。コード[*]
はワイルドカード文字であり、マクロによるチェック対象となる制約ドキュメント内の番号付きの一連の属性を表します。
2つの制約マクロによる再帰処理
例10-20は、DocumentContentMacroA
およびDocumentContentMacroB
という2つの再帰的なグローバル制約マクロを定義しています。これらのマクロを定義するコード文と、これらのマクロをコールするコード文を、太字で強調表示しています。
例10-20では、DocumentContentMacroB
がDocumentContentMacroA
をコールし、その後、DocumentContentMacroA
がDocumentContentMacroB
をコールするときに、再帰処理が発生します。
例10-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>
例10-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>
10.2.2.5 制約ドキュメントでのDICOM値ロケータの使用
この項では、制約ドキュメントでDICOM値ロケータを使用して属性を指定する方法を示します。DICOM値ロケータは、プライベート属性とその定義者を含む条件を指定するために使用できます。DICOM値ロケータには、制約ドキュメントがリポジトリにロードされたときに置換するマクロを含めることができます。
有効なマクロ置換文字列の例の一部を次のリストに示します。
-
サブロケータの完全なシリーズ
-
タグ(特殊なワイルドカード・タグ
"."
を含む) -
定義者名(
DICOM
、デフォルト名または民間定義者の名前) -
項目番号(正の整数またはワイルドカード文字
'*'
)
詳細なリファレンス情報については、DICOM値ロケータの一般的な書式を参照してください。
例10-21は、グローバル制約マクロ内でDICOM値ロケータを使用して属性Content Sequence
を指定し、実行時に結果のログを作成する方法を示しています。(この例では例10-19の一部のコードが使用されています。)DICOM値ロケータは太字で強調表示しています。
標準属性タグ0040A010
、0040A040
および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値ロケータでワイルドカード文字を使用すると、この属性のすべての項目を確実にチェックできるようになります。
例10-22は、グローバル・ルールでDICOM値ロケータを使用して、すべてのRelationship Type
属性を指定する方法を示しています。DICOM値ロケータは太字で強調表示しています。
例10-22では、すべての0040A010
属性に対するDICOM値ロケータに特殊なワイルドカード・タグ"."
が含まれており、この条件によってDICOMコンテンツ内のすべてのリレーショナル型属性をチェックするリレーショナル演算子が実行されることを示しています。
注意:
DICOM値ロケータで特殊なワイルドカード・タグ"."
使用する場合は、次の制限事項が適用されます。
-
1つの条件オペランドでのみ使用できます。
-
再帰的制約マクロ内では使用できず、再帰的制約マクロをコールするためにも使用できません。
DICOM値ロケータ・タイプの詳細は、DICOM値ロケータの一般的な書式を参照してください。
例10-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>
例10-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>
10.2.3 DICOMプロトコル・ドキュメントの作成
DICOMプロトコル・ドキュメントは、DICOM画像およびメタデータのバックアップ記憶域メカニズムとしてOracle Databaseを使用するように構成されたDICOMプロトコル・アダプタ・インスタンスの動作を定義します。DICOMプロトコルXML構成ドキュメント(ordcmdp.xml
など)は、ordcmdp.xsd
スキーマに従っている必要があります。(このスキーマの詳細はDICOM XMLスキーマを参照してください。)このドキュメントには、1つの要素、つまり記憶域構成要素(<storage>
タグ)が含まれており、これは繰り返し使用できます。この要素を使用すると、DICOM画像とメタデータの格納に使用するOracle Database内の表を指定できます。
次の表に、<storage>
タグでサポートされているXML属性を示します。
属性 | 説明 |
---|---|
|
必須。DICOM画像およびメタデータが格納される表のスキーマ修飾名を指定します。 |
|
必須。DICOM画像のSOPインスタンスUID(0008,0018)が格納される記憶域表( |
<storage>
タグ内には、DICOM画像、メタデータおよび導出されたデータ(プレビュー画像など)を格納するために使用する列(この列を含む表は、表を含む<storage>
タグのtable
属性で識別されます)を指定するサブ要素を追加できます。サポートされるオプション・タグは次のとおりです。
タグ | 説明 |
---|---|
|
元のDICOM画像を(SecureFiles BLOBまたはORDDicomオブジェクトとして)格納する場所を指定します。このタグの |
|
DICOM画像のメタデータのXML表現を(XMLTypeとして)格納する場所を指定します。このタグの |
|
DICOM画像のプレビュー・バージョン(JPEG、TIFなど)を格納する場所を指定します。このタグの |
|
指定されたDICOMタグに対応するDICOM画像から抽出された属性値を格納する場所を指定します。このタグの |
例10-23は、DICOMプロトコル構成ドキュメントの例を示しています。
例10-23では、DICOM画像が、ORDDicom
型として、表dcm_user.dcm_table
の列dicomobj
に格納されます。DICOM属性は、それぞれのタグ番号に従って、表dcm_user.attr_table
の列に格納されます。DICOM画像のプレビューは、様々な処理オプションに従って、表dcm_user.img_table
の列に格納されます。(処理オプションの詳細はDICOMの処理およびサポートされる形式を参照してください。)これらの表は、構成ドキュメントを使用する前に、データベース内に作成しておく必要があります。
注意:
構成ドキュメントを使用するには、指定されたドキュメントを参照するDICOMプロトコル・アダプタのインスタンスをデプロイする必要があります。
また、次のコード・セグメントで示すように、BLOB
型の列にDICOM画像を格納するように構成し、メタデータの格納用に別の列を指定することもできます。
<STORAGE table='dcm_user.dcm_table' id_col="dicomID"> <DICOM column="dicomblob" type="BLOB"/> </STORAGE> <STORAGE table='dcm_user.meta_table' id_col="metaID"> <METADATA column="meta"/> </STORAGE>
Oracle DatabaseのDICOMプロトコルに対するサポートの詳細は、DICOMプロトコルのサポートを参照してください。
例10-23 DICOMプロトコル構成ドキュメントの例
<DICOM_PROTOCOL xmlns="http://xmlns.oracle.com/ord/dicom/protocol_1_0" xmlns:dt="http://xmlns.oracle.com/ord/dicom/datatype_1_0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/ord/dicom/protocol_1_0 http://xmlns.oracle.com/ord/dicom/protocol_1_0"> <DOCUMENT_HEADER> <dt:DOCUMENT_CHANGE_LOG> <dt:DOCUMENT_MODIFIER>Anonymous user</dt:DOCUMENT_MODIFIER> <dt:DOCUMENT_MODIFICATION_DATE>2011-09-08</dt:DOCUMENT_MODIFICATION_DATE> <dt:DOCUMENT_VERSION>1.0</dt:DOCUMENT_VERSION> <dt:MODIFICATION_COMMENT>DICOM protocol doc for orddicom</dt:MODIFICATION_COMMENT> </dt:DOCUMENT_CHANGE_LOG> </DOCUMENT_HEADER> <STORAGE table='dcm_user.dcm_table' id_col="dicomID"> <DICOM column="dicomobj" type="ORDDicom"/> </STORAGE> <STORAGE table='dcm_user.attr_table' id_col="attrID"> <ATTRIBUTE column='"DICOM_00020002"' tag="00020002"/> <ATTRIBUTE column='"DICOM_00020003"' tag="00020003"/> <ATTRIBUTE column='"DICOM_00020010"' tag="00020010"/> <ATTRIBUTE column='"DICOM_00080016"' tag="00080016"/> <ATTRIBUTE column='"DICOM_00080018"' tag="00080018"/> <ATTRIBUTE column='"DICOM_00080020"' tag="00080020"/> <ATTRIBUTE column='"DICOM_00080030"' tag="00080030"/> <ATTRIBUTE column='"DICOM_00080050"' tag="00080050"/> <ATTRIBUTE column='"DICOM_00080056"' tag="00080056"/> <ATTRIBUTE column='"DICOM_00080060"' tag="00080060"/> <ATTRIBUTE column='"DICOM_00080061"' tag="00080061"/> <ATTRIBUTE column='"DICOM_00080064"' tag="00080064"/> <ATTRIBUTE column='"DICOM_00080068"' tag="00080068"/> <ATTRIBUTE column='"DICOM_00080070"' tag="00080070"/> <ATTRIBUTE column='"DICOM_00080080"' tag="00080080"/> <ATTRIBUTE column='"DICOM_00080081"' tag="00080081"/> <ATTRIBUTE column='"DICOM_00080090"' tag="00080090"/> <ATTRIBUTE column='"DICOM_00080096"' tag="00080096"/> <ATTRIBUTE column='"DICOM_00081030"' tag="00081030"/> <ATTRIBUTE column='"DICOM_00081050"' tag="00081050"/> <ATTRIBUTE column='"DICOM_00100010"' tag="00100010"/> <ATTRIBUTE column='"DICOM_00100020"' tag="00100020"/> <ATTRIBUTE column='"DICOM_00100030"' tag="00100030"/> <ATTRIBUTE column='"DICOM_00100040"' tag="00100040"/> <ATTRIBUTE column='"DICOM_0020000D"' tag="0020000D"/> <ATTRIBUTE column='"DICOM_0020000E"' tag="0020000E"/> <ATTRIBUTE column='"DICOM_00200010"' tag="00200010"/> <ATTRIBUTE column='"DICOM_00200011"' tag="00200011"/> <ATTRIBUTE column='"DICOM_00200012"' tag="00200012"/> <ATTRIBUTE column='"DICOM_00200013"' tag="00200013"/> </STORAGE> <STORAGE table='dcm_user.img_table' id_col="imageID"> <PREVIEW column="imageobj" options="fileformat=jpeg scale=0.5"/> <PREVIEW column="imageblob" options="fileformat=jpeg"/> </STORAGE> </DICOM_PROTOCOL>
10.2.4 マッピング・ドキュメントとメタデータXMLスキーマの作成
マッピング・ドキュメントは、DICOM属性がXMLドキュメントにどのようにマップされているかを定義します。メタデータXML文書は、XMLスキーマで制約を加えることも、XMLスキーマの制約を指定せずに整形式XML文書にすることも可能です。
XMLスキーマordcmmp.xsd
には、マッピング・ドキュメントに制約を加えるXMLスキーマが定義されています。(このスキーマの詳細は、DICOM XMLスキーマを参照してください。)
次の各項では、マッピング・ドキュメントとメタデータXMLスキーマの構造について説明します。また、マッピング・ドキュメントとそれに対応するメタデータ・スキーマの作成方法のコード例も示します。
10.2.4.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パスをそれぞれ定義します。
10.2.4.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>要素の属性
writeTag
、writeName
、writeDefiner
およびwriteRawValue
を"true"
に設定する場合は、マッピング・ドキュメントの<MAPPED_PATH>要素で記述した各要素に対応する属性tag
、name
、definer
およびrawValue
をXMLスキーマで定義する必要があります。 -
マッピング・ドキュメントで<MAPPED_PATH>要素の属性
occurs
を、暗黙的または明示的に"false"
に設定する場合は、その要素のXMLスキーマ定義で属性minOccurs
を"0"
に設定する必要があります。 -
マッピング・ドキュメントで<MAPPED_PATH>要素の属性
notEmpty
を"false"
に設定する場合は、その要素のXMLスキーマ定義で属性xsi:nillable
を"true"
に設定する必要があります。"そうでない場合は、<MAPPED_PATH>要素で定義された要素に空の値を許可する必要があります。
10.2.4.3 スキーマ制約を指定しないメタデータのマッピング・ドキュメントの作成
この項では、XMLスキーマ制約を指定しないマッピング・ドキュメントおよび整形式メタデータXMLドキュメントを作成する方法を説明します。整形式メタデータXMLドキュメントのみを必要とするアプリケーションの場合は、抽出されたメタデータがXMLスキーマに準拠している必要はないため、マッピング・ドキュメントに空の<NAMESPACE>要素を含めることができます。
この項では、マッピング・ドキュメントのコード例に続いて、生成されるメタデータXMLドキュメントのコード例も示します。マッピング・ドキュメントおよびそれに関連するXMLドキュメントの両方で実行される主なアクションの部分を示すために、該当するXML文を太字で強調表示しています。太字で表示した各XML文の説明は、例の後にあります。
例10-24は、空の<NAMESPACE>要素を含むサンプルのマッピング・ドキュメントを示しています。また、抽出されるメタデータXML文書を定義するために、<MAPPED_PATH>要素のoccurs
、notEmpty
、writeTag
、writeDefiner
およびwriteName
の各属性に指定する値も示しています。これらの属性が指定されていない場合は、デフォルト値の"false"
が属性に設定されます。
例10-25は、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPED
に設定して抽出されたXMLメタデータのメタデータXMLドキュメントを示しています。
-
マッピング・ドキュメントでは、<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>要素のwriteTag
、writeName
およびwriteDefiner
属性が"true"
に設定されています。抽出されたXML文書では、<STUDY>要素の下の子要素<ID>に、対応するdefiner
、tag
およびname
属性が含まれています。 -
マッピング・ドキュメントでは、タグが
00081080
のDICOM属性に対する<MAPPED_PATH>要素で、occurs
要素にデフォルト値("false"
)が使用されています。このDICOM属性はDICOMコンテンツ内に存在しないため、抽出されたXML文書には要素<ADMITTING_DIAGNOSES_DESCRIPTION>がありません。
このメソッド、およびextractOptionパラメータに使用できる値のリファレンス情報は、extractMetadata( )を参照してください。
例10-24 スキーマ制約を指定しないメタデータのマッピング・ドキュメントの例
<?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>
例10-25 スキーマ制約を指定しないメタデータに対して生成される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>
10.2.4.4 スキーマ制約とマップ済セクションのみを指定したメタデータのマッピング・ドキュメントの作成
この項では、XMLスキーマ制約を指定したマッピング・ドキュメントおよびメタデータXMLドキュメントを、アンマップ・セクションを除外して作成する方法を説明します。この例は、XMLメタデータのマップ済セクションと、XMLスキーマ制約を指定したメタデータXMLドキュメントで定義されているDICOM属性のみを必要とするアプリケーションに使用できます。
この項では、マッピング・ドキュメント、XMLスキーマ、およびスキーマで制約された生成後のメタデータXMLドキュメントのコード例も示します。マッピング・ドキュメントおよびそれに関連するXMLドキュメントの両方で実行される主なアクションの部分を示すために、該当するXML文を太字で強調表示しています。太字で表示した各XML文の説明は、例の後にあります。
ORDDicomオブジェクトのextractMetadata( )メソッドでは、extractOptionパラメータの値に基づいて、全部または一部のメタデータをXMLドキュメントに抽出できます。
このメソッド、およびextractOptionパラメータに使用できる値のリファレンス情報は、extractMetadata( )を参照してください。
例10-26は、メタデータXMLドキュメントをXMLスキーマで制約できるように、メタデータXMLドキュメントの名前空間を指定するマッピング・ドキュメントの例を示しています。
-
<NAMESPACE>要素に値が含まれている。
-
<UNMAPPED_ELEM>要素と<MAPPED_ELEM>要素が空であるため、マップ済のパスは<ROOT_ELEM_TAG>要素に対する相対パスになる。
例10-26のマッピング・ドキュメントのXMLスキーマは、例10-27で定義されています。
例10-26および関連付けられたXMLスキーマ(例10-27)では、次の要素とデータ型が定義されています。
-
メタデータのXMLスキーマの名前空間宣言には、マッピング・ドキュメントの<NAMESPACE>要素と同じ値が含まれます。
-
マッピング・ドキュメントの<MAPPED_PATH>要素のうち、
notEmpty
属性が明示的に"false"
に設定されているもの(タグ00100030
)と、デフォルト値を使用して暗黙的にfalseに設定されているもの(タグ00800030
)については、XMLスキーマで定義された対応する要素(<BIRTH_DATE>要素と<TIME>要素)で、nillable
属性の値が"true"
に設定されています。 -
マッピング・ドキュメントの<MAPPED_PATH>要素のうち、
occurs
属性の値が明示的に"false"
に設定されているもの(タグ00100040
)と、デフォルト値を使用して暗黙的にfalseに設定されているもの(タグ00800030
)については、XMLスキーマで定義された対応する要素(<SEX>要素および<TIME>要素)で、属性minOccurs
の値が"0"
に設定されている必要があります。 -
XMLスキーマで定義されたデータ型と、スキーマ
ordcmmddt.xsd
でOracleによって定義されているデータ型の間には互換性が存在する必要があります。例2では、"PERSON_NAME"
データ型の定義がスキーマordcmmddt.xsd
からコピーされている一方で、"ID_TYPE"
データ型は、<STUDY>要素の下の<ID>要素に、tag
、definer
および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: スキーマ定義に準拠しているメタデータを抽出できません
例10-28は、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPED
に設定して抽出されたXMLメタデータのメタデータXMLドキュメントを示しています。
例10-26 スキーマ制約とマップ済セクションのみを指定したメタデータのマッピング・ドキュメントの例
<?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>
例10-27 スキーマ制約とマップ済セクションを指定したメタデータの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>
例10-28 スキーマ制約とマップ済セクションを指定したメタデータの生成された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>
10.2.4.5 スキーマ制約を指定したメタデータのマッピング・ドキュメントの作成
この項では、XMLスキーマ制約を指定したマッピング・ドキュメントおよびメタデータXMLドキュメントを、アンマップ・セクションを含めて作成する方法を説明します。
この項では、マッピング・ドキュメント、XMLスキーマ、およびスキーマで制約された生成後のメタデータXMLドキュメントのコード例も示します。マッピング・ドキュメントおよびそれに関連するXMLドキュメントの両方で実行される主なアクションの部分を示すために、該当するXML文を太字で強調表示しています。太字で表示した各XML文の説明は、例の後にあります。
例10-29は、マップ済セクションにシーケンス型属性を含むサンプルのマッピング・ドキュメントを示しています。
-
<UNMAPPED_ELEM>要素と<MAPPED_ELEM>要素が空ではない。
-
タグ
00081084
に対する<MAPPED_PATH>要素があり、DICOMシーケンス・タイプが指定されている。
例10-30のXMLスキーマのコード・セグメントは、抽出されたメタデータXMLドキュメントにマッピングされていないセクションが含まれるように、例10-29のマッピング・ドキュメントのマッピングされていないルート要素を定義する方法を示しています。このコード・セグメントは、Oracle定義のデータ型をスキーマordcmmddt.xsd
から使用する方法も示しています。
例10-29および関連付けられたXMLスキーマ(例10-30)では、次のアクションが発生します。
-
このXMLスキーマでは、スキーマ制約とマップ済セクションのみを指定したメタデータのマッピング・ドキュメントの作成のように独自のデータ型を定義するのではなく、次のXMLコード・セグメントに示すように、スキーマ
ordcmmddt.xsd
をアプリケーション固有のXSDファイルにコピーし、名前空間宣言を変更することで、Oracle定義のデータ型を使用しています。<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を使用して、Oracle XML DBにグローバルXMLスキーマとして登録されています。
"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ドキュメントにはマップ済セクションのみが含まれます。
例10-31は、extractMetadata( )メソッドのextractOptionパラメータ値をMAPPED
に設定して抽出されたXMLメタデータのメタデータXMLドキュメントを示しています。
例10-32は、extractMetadata( )メソッドのextractOptionパラメータ値をALL
に設定して抽出されたXMLメタデータのメタデータXMLドキュメントを示しています。
例10-29 スキーマ制約を指定したメタデータのマッピング・ドキュメントの例
<?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>
例10-30 スキーマ制約を指定したメタデータの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>
例10-31 スキーマ制約を指定したメタデータの生成された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>
例10-32 スキーマ制約を指定したメタデータの生成された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>
10.2.4.6 マッピング・ドキュメントでのDICOM値ロケータの使用
この項では、マッピング・ドキュメントでDICOM値ロケータを使用して属性を指定する方法を示します。例10-33は、マッピング・ドキュメントでDICOM値ロケータを使用して、Patient's Name
属性のunibyteエンコーディングを使用した姓フィールドを指定する方法を示しています。このアクションを実行するXML文は、太字で強調表示しています。
extractMetadata( )メソッドに例10-33で示したコードが含まれるマッピング・ドキュメントを使用すると、属性00100010
の姓フィールドに対応する値がタグ<FAMILY_NAME>に設定されたXMLドキュメントが生成されます。
例10-34は、マッピング・ドキュメントでDICOM値ロケータを使用して、シーケンス属性内に埋め込まれた属性を指定する方法を示しています。
extractMetadata( )メソッドに例10-34で示したコードが含まれるマッピング・ドキュメントを使用すると、属性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メタデータ・ドキュメント内に個別に取得できます。
例10-35は、マッピング・ドキュメントでDICOM値ロケータを使用して、複数の値を含む属性の単一の値を指定する方法を示しています。
extractMetadata( )メソッドに例10-35で示したコードが含まれるマッピング・ドキュメントを使用すると、属性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値ロケータの一般的な書式を参照してください。
例10-33 マッピング・ドキュメント内のUnibyteエンコーディングを使用した属性に対するDICOM値ロケータ
<MAPPED_PATH>
<ATTRIBUTE_TAG>00100010#UnibyteFamily</ATTRIBUTE_TAG>
<PATH>FAMILY_NAME</PATH>
</MAPPED_PATH>
例10-34 マッピング・ドキュメント内の埋込みシーケンス属性に対するDICOM値ロケータ
<MAPPED_PATH> <ATTRIBUTE_TAG>0040A730[2].0040A010</ATTRIBUTE_TAG> <PATH>RELATIONSHIP</PATH> </MAPPED_PATH>
例10-35 マッピング・ドキュメント内の単一の属性値に対するDICOM値ロケータ
<MAPPED_PATH> <ATTRIBUTE_TAG>00080008[3]</ATTRIBUTE_TAG> <PATH>IMAGE_TYPE</PATH> </MAPPED_PATH>
10.2.5 プリファレンス・ドキュメントの作成
プリファレンス・ドキュメントは、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定義のプリファレンス・パラメータの値を変更できます。
次の各項では、プリファレンス・ドキュメントでプリファレンス・パラメータの値を定義する方法の例を示します。
10.2.5.1 BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータの定義
BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータは、DICOM Part 10ファイルのコピーを行うときに、Oracle Multimedia DICOMが、無効な属性とその値をDICOMコンテンツのバイナリ出力に含めるか、またはスキップするかを指定するために使用されます。無効な属性とは、指定されたDICOM標準規格に準拠していない属性です。例10-36は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータBINARY_SKIP_INVALID_ATTR
が指定されています。
<VALUE>要素は、BINARY_SKIP_INVALID_ATTRプリファレンス・パラメータの値(デフォルトはfalse
)を表しています。
このプリファレンス・パラメータの値がfalse
の場合は、無効な属性とその値が対応する出力に含まれます。このプリファレンス・パラメータの値がtrue
に設定されている場合は、属性値が長さ0
で出力に含まれます。
例10-36 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>
10.2.5.2 CONFORMANCE_LEVELプリファレンス・パラメータの定義
CONFORMANCE_LEVELプリファレンス・パラメータは、DICOMコンテンツを処理するときに、Oracle Multimedia DICOMが無視または報告するエラーおよび例外のタイプを指定するために使用されます。例10-37は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータCONFORMANCE_LEVEL
が指定されています。
<VALUE>要素は、CONFORMANCE_LEVELパラメータの値(デフォルトはignoreException
)の値を表します。その他の有効な値は、leastConform
およびmostConform
です。
デフォルト値ignoreException
は、すべてのファンクションに対し、プリファレンス・パラメータIGNORED_EXP_LISTで指定された例外のタイプを無視するように指示します。
値leastConform
は、DICOMコンテンツの処理を最大化するために、すべてのファンクションに対し、エラーおよび例外を無視するように指示します。
値がmostConform
に設定されている場合は、DICOM標準規格に準拠していないDICOMコンテンツが検出されると、すべてのファンクションが例外をスローします。(DICOM標準規格で許可されている下位互換性維持のための処理は、この動作の対象にはなりません。)
例10-37 CONFORMANCE_LEVELプリファレンス・パラメータの定義
<PREFERENCE_DEF> <PARAMETER>CONFORMANCE_LEVEL</PARAMETER> <DESCRIPTION> Ignore selected exceptions. </DESCRIPTION> <VALUE>ignoreException</VALUE> </PREFERENCE_DEF>
10.2.5.3 EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータの定義
EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータは、準拠検証の実行中に欠落している属性やnullの属性値が検出された場合に、Oracle Multimedia DICOMが例外をスローするかどうかを指定するために使用されます。例10-38は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータEXP_IF_NULL_ATTR_IN_CONSTRAINT
が指定されています。
<VALUE>要素は、EXP_IF_NULL_ATTR_IN_CONSTRAINTプリファレンス・パラメータの値(デフォルトはtrue
)を表しています。
属性に対するnotEmptyブール型ファンクション条件が前に指定されていない制約条件では、このプリファレンス・パラメータの値がtrue
の場合、次のいずれかの状態の最初の出現時に例外がスローされます。
-
属性が欠落している。
-
属性にNULL値が設定されている。
詳細は、例10-14を参照してください。
値がfalse
に設定されている場合は、例外がスローされません。
このプリファレンス・パラメータは、メソッドisConformanceValid( )の結果に影響します。詳細は、isConformanceValid( )メソッドを参照してください。
例10-38 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>
10.2.5.4 IGNORED_EXP_LISTプリファレンス・パラメータの定義
IGNORED_EXP_LISTプリファレンス・パラメータは、DICOMコンテンツの処理時にOracle Multimedia DICOMが無視する例外のタイプを指定するために使用されます。このプリファレンス・パラメータは、CONFORMANCE_LEVELプリファレンス・パラメータの値がignoreException
に設定されている場合のみ有効です。例10-39は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータIGNORED_EXP_LIST
が指定されています。
<VALUE>要素は、IGNORED_EXP_LISTプリファレンス・パラメータの値(無視する1つ以上の例外のリスト)を表しています。
例10-39 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>
10.2.5.5 MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの定義
MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータは、制約ドキュメントとマッピング・ドキュメントで使用されるすべてのタグを格納タグ・リスト・ドキュメントにリストする必要があるというルールを、Oracle Multimedia DICOMが適用するかどうかを指定するために使用されます。例10-40は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータMANDATE_ATTR_TAGS_IN_STL
が指定されています。
<VALUE>要素は、MANDATE_ATTR_TAGS_IN_STLプリファレンス・パラメータの値(デフォルトはfalse
)を表しています。
このプリファレンス・パラメータの値によって、制約ドキュメントとマッピング・ドキュメントで使用されるすべてのタグを格納タグ・リスト・ドキュメントにリストするというルールを適用するかどうかが決定されます。このプリファレンス・パラメータの値がtrue
に設定されている場合は、ルールが適用されます。値がfalse
の場合は、ルールが適用されません。
ただし、既存の格納タグ・リスト・ドキュメントがルールに従っていない場合は、その格納タグ・リスト・ドキュメントが更新されるまで、このプリファレンス・パラメータの値をtrue
に設定できません。また、このプリファレンス・パラメータの値がtrue
の場合は、格納タグ・リスト・ドキュメントにリストされているタグを使用している制約ドキュメントとマッピング・ドキュメントのみリポジトリに挿入できます。
例10-40 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>
10.2.5.6 MAX_RECURSION_DEPTHプリファレンス・パラメータの定義
MAX_RECURSION_DEPTHプリファレンス・パラメータは、準拠検証の実行中に、再帰的制約マクロを評価するためにOracle Multimedia DICOMが使用する再帰処理の最大レベルを指定するために使用されます。例10-41は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータMAX_RECURSION_DEPTH
が指定されています。
<VALUE>要素は、MAX_RECURSION_DEPTHプリファレンス・パラメータの値を表しています。有効な値は、1
から32767
までの整数です。デフォルトは16
です。再帰処理レベルがこのパラメータの値を超えると、例外がスローされます。
再帰的制約マクロの詳細は、再帰的制約マクロの定義を参照してください。
例10-41 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>
10.2.5.7 SPECIFIC_CHARACTER_SETプリファレンス・パラメータの定義
SPECIFIC_CHARACTER_SETプリファレンス・パラメータは、標準属性Specific Character Setが指定されていない場合に、特定のデータ要素(値表現がSH、LO、ST、LT、PNおよびUTのもの)をデコードするためにOracle Multimedia DICOMが使用するキャラクタ・セットを指定するために使用されます。例10-42は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<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 (Short String)、LO (Long String)、ST (Short Text)、LT (Long Text)、PN (Person Name)およびUT (Unlimited Text)であるデータ要素をデコードする方法を決定します。DICOM標準規格では、標準属性Specific Character Set
が指定されていない場合に、デフォルトのキャラクタ・セットであるISO-IR 6
またはASCII
を使用してデコードすることが必須となっています。このプリファレンス・パラメータを使用すると、前述の場合に、DICOM標準規格のデフォルトのキャラクタ・セット以外のキャラクタ・セットをアプリケーションで指定できます。
例10-42 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>
10.2.5.8 SQ_WRITE_LENプリファレンス・パラメータの定義
SQ_WRITE_LENプリファレンス・パラメータは、メソッドwriteMetadata( )がDICOMシーケンス(SQ)型をエンコードする方法を指定するために使用されます。例10-43は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータSQ_WRITE_LEN
が指定されています。
<VALUE>要素は、SQ_WRITE_LENプリファレンス・パラメータの値(デフォルトはtrue
)を表しています。
このプリファレンス・パラメータの値は、DICOMシーケンス(SQ)型がメソッドwriteMetadata( )によってエンコードされる方法を指定します。詳細は、writeMetadata( )メソッドを参照してください。
このプリファレンス・パラメータの値がtrue
である場合、SQ型は、明示的な長さを使用して、項目デリミタまたはシーケンス・デリミタなしでエンコードされます。このデフォルトの動作を使用する場合は、DICOMビューアがシーケンス属性をスキップできます。
値がfalse
に設定されている場合、SQ型は可変(未定義)長でエンコードされ、シーケンス・デリミタで終了します。このオプションを使用すると、SQ型について未定義長のみサポートしている以前のDICOMビューアおよびDICOMアプリケーションとの下位互換性を維持できます。
例10-43 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>
10.2.5.9 VALIDATE_METADATAプリファレンス・パラメータの定義
VALIDATE_METADATAプリファレンス・パラメータは、DICOMファンクションおよびプロシージャで使用されるXMLドキュメントを検証するかどうかを指定するために使用します。例10-44は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<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( )メソッドをコールすると、エラーが発生します。
例10-44 VALIDATE_METADATAプリファレンス・パラメータの定義
<PREFERENCE_DEF> <PARAMETER>VALIDATE_METADATA</PARAMETER> <DESCRIPTION> Do not validate XML metadata documents. </DESCRIPTION> <VALUE>false</VALUE> </PREFERENCE_DEF>
10.2.5.10 XML_SKIP_ATTRプリファレンス・パラメータの定義
XML_SKIP_ATTRプリファレンス・パラメータは、XMLにエンコードする際の省略の基準となるDICOM属性のサイズ制限を指定するために使用します。例10-45は、プリファレンス・ドキュメントでこのプリファレンス・パラメータを定義する方法を示しています。
<PARAMETER>要素で、Oracle定義のプリファレンス・パラメータXML_SKIP_ATTR
が指定されています。
<VALUE>要素は、XML_SKIP_ATTRプリファレンス・パラメータの値を表しています。有効な値は、128
から2
32-1
までの整数です。デフォルトは512
です。
このプリファレンス・パラメータの値は、XMLにエンコードする際の省略の基準となるDICOM属性のサイズ制限を指定するために使用します。DICOMコンテンツ内でのサイズ(バイト単位)がこのプリファレンス・パラメータの値よりも大きいDICOM属性は省略されます。SQ型の属性が省略される場合は、子項目も省略されます。
また、このプリファレンス・パラメータの値は、次の事項に影響を与えます。
-
メソッドextractMetadata( )によって生成されるメタデータ。詳細は、extractMetadata( )メソッドを参照してください。
-
setProperties()メソッドの動作。詳細は、setProperties( )メソッドを参照してください。
例10-45 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>
10.2.6 プライベート・ディクショナリ・ドキュメントの作成
プライベート・ディクショナリ・ドキュメントは、モダリティ・メーカーまたは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スキーマを参照してください。)
次の各項では、プライベート・ディクショナリ・ドキュメントの作成方法の例を示します。
10.2.6.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で修飾された名前を関連付けることをお薦めします。
-
タグ/定義者ペアの値は、プライベート・ディクショナリ・ドキュメント内で一意であることが必要です。
単純属性タグを使用したプライベート属性の定義
例10-46では、単純属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。
例10-46の<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>型を参照してください。)
ワイルドカード属性タグを使用したプライベート属性の定義
例10-47では、ワイルドカード属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。
例10-47のプライベート属性定義には、ワイルドカード・タグ0119XX00
と定義者名PRIVATE_ORG
が含まれています。
範囲属性タグを使用したプライベート属性の定義
例10-48では、範囲属性タグでプライベート属性を定義する方法を示します。このアクションを定義するXML文は、太字で強調表示しています。
例10-48のプライベート属性定義には、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
)と一致しています。
例10-46 単純属性タグを使用したプライベート属性の定義
<PRIVATE_ATTRIBUTE_DEFINITION> <TAG>FFFF1001</TAG> <NAME>locator macro tag</NAME> <DEFINER>ORACLE</DEFINER> <VR>SQ</VR> <VM>1</VM> </PRIVATE_ATTRIBUTE_DEFINITION>
例10-47 ワイルドカード属性タグを使用したプライベート属性の定義
<PRIVATE_ATTRIBUTE_DEFINITION> <TAG>0119XX00</TAG> <NAME>PRIVATE TAG1</NAME> <DEFINER>PRIVATE_ORG</DEFINER> <VR>IS</VR> <VM>1</VM> </PRIVATE_ATTRIBUTE_DEFINITION>
例10-48 範囲属性タグを使用したプライベート属性の定義
<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>
10.2.6.2 属性定義者の定義
属性定義者とは、プライベート属性を定義する組織の定義者名とUIDを指します。
<ATTRIBUTE_DEFINERS>要素は、プライベート・ディクショナリ・ドキュメント内で使用されるすべてのプライベート定義者名と定義者UIDを表すオプションの要素です。
注意:
定義者名"DICOM"
およびUID "1.2.840.10008.1"
は、DICOM標準規格の属性を表すものとしてOracleで予約されています。これらをプライベート・ディクショナリで使用しないでください。
<ATTRIBUTE_DEFINERS>要素は、ATTR_DEFINERS_T型です。この型は、XMLスキーマordcmrdt.xsd
で定義されています。
例10-49は、プライベート属性を定義する組織の定義者名およびUIDを定義する方法を示しています。
例10-49の接頭辞dt
は、<ATTR_DEFINER>要素が定義されている名前空間http://xmlns.oracle.com/ord/dicom/datatype_1_0
にマップされています。<dt:NAME>要素の値は、プライベート組織の名前を表します。<dt:UID>要素の値は、プライベート組織のUIDを表します。
例10-49 属性定義者の定義
<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>
10.2.6.3 プライベート属性の廃止
プライベート・ディクショナリ・ドキュメントに含まれるプライベート属性が不要になった場合は、廃止にすることができます。例10-50は、プライベート属性を廃止として定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-50の<RETIRED>要素に設定されている値true
は、属性が廃止されていることを示しており、DICOM標準規格で使用されているRET
値に対応しています。メタデータをDICOMコンテンツから抽出できるようにするために、廃止する属性については、<VR>要素と<VM>要素の値を指定することをお薦めします。
例10-50 プライベート属性の廃止としての定義
<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>
10.2.7 標準ディクショナリ・ドキュメントの作成
標準ディクショナリ・ドキュメントは、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標準規格の新しいリリース内容、または追加項目が反映されます。
次の各項では、標準ディクショナリ・ドキュメントの作成方法の例を示します。
10.2.7.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で予約されています。
単純属性タグを使用した標準属性の定義
例10-51は、単純属性タグで標準属性を定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-51の<TAG>要素は、DICOM標準規格で定義されている属性タグの16進値00080008
を表しています。この属性タグの値は、グループ番号の後に要素番号を続けた形で構成されます。<NAME>要素は、DICOM標準規格で定義されている属性タグの名前を表します。<VR>要素は、DICOM標準規格で定義されている属性タグの値表現を表します。<VM>要素は、DICOM標準規格で定義されている属性タグの値の多重度を表します。(Oracle Multimedia DICOMでサポートされる値表現および値多重度のデータ型については、XMLスキーマordcmrdt.xsd
に記述されている<VR_T>型および<VM_T>型を参照してください。)
ワイルドカード属性タグを使用した標準属性の定義
例10-52は、ワイルドカード属性タグで標準属性を定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-52の標準属性の定義には、ワイルドカード・タグ60xx0010
が含まれています。
例10-51 単純属性タグを使用した標準属性の定義
<STANDARD_ATTRIBUTE_DEFINITION> <TAG>00080008</TAG> <NAME>Image Type</NAME> <VR>CS</VR> <VM>1-n</VM> </STANDARD_ATTRIBUTE_DEFINITION>
例10-52 ワイルドカード属性タグを使用した標準属性の定義
<STANDARD_ATTRIBUTE_DEFINITION>
<TAG>60xx0010</TAG>
<NAME>Overlay Rows</NAME>
<VR>US</VR>
<VM>1</VM>
</STANDARD_ATTRIBUTE_DEFINITION>
10.2.7.2 標準属性の廃止
標準ディクショナリ・ドキュメントに含まれる標準属性がDICOM標準規格で使用されなくなると、その属性は廃止になります。例10-53は、標準属性を廃止として定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-53の<RETIRED>要素に設定された値true
は、属性が廃止されていることを示しており、DICOM標準規格で使用されているRET
値に対応しています。メタデータをDICOMコンテンツから抽出できるようにするために、廃止する属性については、<VR>要素と<VM>要素の値を指定することをお薦めします。
例10-53 標準属性の廃止としての定義
<STANDARD_ATTRIBUTE_DEFINITION>
<TAG>00080010</TAG>
<NAME>Recognition Code</NAME>
<VR>CS</VR>
<VM>1</VM>
<RETIRED>true</RETIRED>
</STANDARD_ATTRIBUTE_DEFINITION>
10.2.8 格納タグ・リスト・ドキュメントの作成
格納タグ・リスト・ドキュメントは、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属性抽出時の記憶域の改善を参照してください。
10.2.9 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_DEF>要素を使用して各UID定義を定義します。
注意:
次の追加のガイドラインに留意してください。
-
リポジトリ内には、最大2つ(Oracle定義およびユーザー定義を1つずつ)のUID定義ドキュメントを保持できます。
-
ユーザー定義のUID定義ドキュメントに対する変更は、DICOM標準規格の更新または新しいUID値の追加を行う目的のみに制限する必要があります。独自に定義された一意識別子を作成する方法については、DICOM標準規格のPart 5を参照してください。
-
DICOM標準規格で定義されている既存のUIDを変更できるのは、DICOM標準規格で行われた更新を適用する場合のみです。
次の各項では、UID定義ドキュメントでUID定義を作成する方法の例を示します。
10.2.9.1 UID定義の定義
例10-54は、記憶域クラスのUID定義を定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-54の<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コンテンツにピクセル・データが含まれることを示しています。
例10-54 記憶域クラスの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>
10.2.9.2 UID定義の廃止
例10-55は、転送構文のUID定義を廃止として定義する方法を示しています。このアクションを定義するXML文は、太字で強調表示しています。
例10-55の<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型の転送構文に対応しています。isCompressed
、isEVR
(明示的なVR)およびisLE
(リトル・エンディアン)の各属性値は、DICOM標準規格のPart 5に記述されている転送構文の定義から導出されたものです。retired
属性の値"true"
は、このUID定義が廃止されていることを示しています。
例10-55 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>