4 DICOMプロトコルのサポート
この章では、Oracle Multimedia DICOMのDICOMプロトコルに対するサポートについて説明します。
この章では、次の内容を説明します。
次の表には、このマニュアルの他の部分にあるDICOMプロトコルに関する追加情報へのリンクが含まれています。
表4-1 このマニュアルにある詳細なDICOMプロトコル・ドキュメントのロードマップ
| 内容: | 参照先: |
|---|---|
|
Oracle DatabaseでのDICOMプロトコルのサポートの概要 |
|
|
DICOMプロトコル・ドキュメントの特性に関する情報 |
|
|
DICOMプロトコル・ドキュメントの作成方法に関する情報 |
|
|
DICOMデータ・モデル・リポジトリへのDICOMプロトコル・ドキュメントの挿入方法に関する情報 |
|
|
DICOMリポジトリへのDICOMプロトコル・ドキュメントの挿入の例 |
|
|
DICOMプロトコル・ドキュメントのためのDICOM XMLスキーマに関する情報 |
Oracle DICOMプロトコル・アダプタ・スイートのDICOM準拠文の詳細は、Oracle Technology NetworkのWebサイトでOracle Multimediaを参照してください。
注意:
この章は、WebLogic Serverにアプリケーションをデプロイするプロセスについて読者がよく理解していることを前提としています。
WebLogic Application Serverへのアプリケーション・デプロイメントに関する完全なドキュメントについては、Oracle Fusion Middlewareオンライン・ドキュメント・ライブラリでOracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイを参照してください。
4.1 Oracle DatabaseでのDICOMプロトコルのサポートの概要
DICOM標準規格は、医用画像領域で使用される画像ファイル形式とネットワーク・プロトコルの両方を指定します。Picture Archiving and Communication Systems (PACS)は、DICOMネットワーク・プロトコルを使用して、DICOM形式で医用画像を保存および転送するよう設計されています。CTスキャナやMR機器などの医用画像デバイスは、1つ以上のPACSと通信して画像を格納します。次に、健康管理の専門家が、DICOMビューア・アプリケーションを使用して、PACSに問い合せて関連する患者情報および画像を取得し、確認します。
以前のバージョンのOracle Multimedia DICOMは、画像ファイル形式のみをサポートしていました。Oracle Database 12cリリース1 (12.1)以降では、Oracle Multimedia DICOMにDICOMネットワーク・プロトコルのサポートが追加されました。このサポートにより、Oracle DatabaseはPACSに元々格納された画像の取得および管理を実行できます。また、Oracle Databaseで格納および管理される画像をDICOMビューアで表示できます。
DICOMプロトコル・サポートを使用することで、ユーザーはPACSからOracle DatabaseにDICOM画像をインポートし、Oracle Databaseに格納されているDICOM画像をDICOMビューア経由で問い合せ、Oracle DatabaseからPACSにDICOM画像を取得し、画像に関連付けられているメタデータを抽出し、元のDICOM画像に関連付けられたプレビュー画像を生成できます。DICOM画像、メタデータおよびプレビュー画像はOracle Databaseに格納して管理できます。
4.2 Oracle DICOMプロトコル・アダプタ・スイートの内容
DICOMプロトコル・アダプタ・スイートには、PACS、ビューアおよび他のDICOMクライアントとの通信アダプタとして使用できる3つのOracle WebLogicアプリケーションが含まれています。WebLogicアプリケーションはOracle Databaseと対話して、DICOMクライアントとの通信に基づいてOracle Databaseとの間で画像の格納、問合せおよび取得の操作を実行します。
これらのアプリケーションは、WebLogic Application Serverの中間層で実行されます。ユーザーは、DICOMプロトコル・アダプタ・スイートのコンポートのすべてと一部のいずれをWebLogic Serverにデプロイするかを選択できます。
表4-2に、これらのアプリケーション・コンポーネントのリストを示し、簡単に説明します。
表4-2 DICOMプロトコル・アダプタ・スイートのコンポーネント
次の各項では、このスイートのコンポーネントについて詳しく説明します。
4.2.1 Oracle DICOMプロトコル・アダプタ
DICOMプロトコル・アダプタは、Oracle WebLogic ServerのResourceAdapterとしてデプロイされます。アダプタでは、次のDICOMプロトコル・ロールがサポートされます。
-
C-ECHO SCP
-
C-FIND SCP
-
C-MOVE SCP
-
C-STORE SCP
-
C-STORE SCU
図4-1は、DICOMプロトコル・アダプタが他のDICOMクライアント(DICOMビューアやPACSなど)およびOracle Databaseと対話する方法を示しています。
具体的に言うと、図4-1は、PACSが画像をDICOMプロトコル・アダプタにプッシュしてOracle Databaseに挿入する方法を示しています。また、DICOMビューアがDICOMプロトコル・アダプタを通じてOracle DatabaseのDICOM画像を問い合せて取得する方法を示しています。
DICOMネットワーク・プロトコル・メッセージの処理
DICOMプロトコル・アダプタは、DICOMネットワーク・プロトコル(DICOM標準規格で指定されている)の一連のメッセージ処理操作をサポートしています。表4-3では、Oracle Databaseに格納されているDICOM画像コンテンツを問い合せて取得するためにDICOMクライアントがDICOMプロトコル・アダプタに対して発行できるDICOMコマンドについて説明します。
表4-3 DICOMプロトコル・アダプタのメッセージ処理コマンド
| DICOMコマンド | 説明 |
|---|---|
|
|
DICOMプロトコル・アダプタとDICOMクライアントの間の接続を決定します。アダプタは、 |
|
|
DICOMプロトコル・アダプタを問い合せ、 |
|
|
DICOMプロトコル・アダプタに画像を転送します。アダプタは |
|
|
DICOMプロトコル・アダプタを問い合せ、指定した問合せに一致する画像メタデータを取得します。問合せではワイルドカードがサポートされます。 |
4.2.2 Oracle DICOMクローラ
DICOMクローラは、DICOMプロトコルを使用して定期的にPACSのセットを問い合せて新しいDICOM画像またはDICOMメタデータをOracle Databaseにインポートする、DICOMプロトコル・アダプタ・スイートのスケジュール・サービスです。これは、Oracle WebLogic ServerにResourceAdapterアプリケーションとしてデプロイされます。
ユーザーは、PACSに対してDICOM C-FINDリクエストを定期的に発行して、ユーザー指定の検索基準に基づく特定のDICOM画像を識別するように、DICOMクローラを構成できます。DICOMクローラは該当する画像を識別すると、DICOMプロトコル・アダプタにこれらの画像を転送するために、PACSにC-MOVEリクエストを発行します。次に、アダプタは画像または画像のメタデータをOracle Databaseにチェックインします。
図4-2は、DICOMクローラ、PACSおよびDICOMプロトコル・アダプタ間でのメッセージの交換方法を示しています。
4.2.3 Oracle DICOM WADOプロキシ
DICOM WADOプロキシは、画像メタデータがOracle Database内に、画像がPACSに存在する場合にWADO形式のURLを通じてDICOM画像を取得するサービスです。
WADOプロキシは、Oracle WebLogic ServerにJAX-RSサーブレット・アプリケーションとしてデプロイされます。このプロキシは、特定のPACSから特定のDICOM画像を取得する操作に対応するHTTP GETリクエストをリスニングします。PACSのアプリケーション・エンティティ(AE)タイトルと画像の一意のSOPインスタンスUIDは、両方ともWADO URLの一部としてエンコードされます。
プロキシは、このようなWADOリクエストを受信すると、対応するPACSにC-MOVEリクエストを発行して画像を取得します。プロキシは、発行したC-MOVEに対応するDICOM画像データを含むC-STOREリクエストをPACSから受信した後に、WADOリクエストを発行したHTTPクライアントにDICOM画像データを渡します。
図4-3は、WADOクライアントからのWADOリクエストの処理に必要なメッセージのセットが様々なコンポーネント間でどのように交換されるかを示しています。また、PACSから取得されたDICOM画像の挿入時に、このタイプのWADO URLが生成される方法も示しています。
4.3 Oracle DICOMプロトコル・アダプタ・スイートのデプロイ
この項では、DICOMプロトコル・アダプタ・スイートをインストールしてデプロイする方法について説明します。これらの手順を試行する前に、Oracle WebLogic Serverがインストールされて実行されていることを確認します。
この手順に記載されているファイルは次のディレクトリから見つけることができます。
<ORACLE_HOME>/ord/jlib
プロセス全体には次の手順が含まれます。
- Oracle DICOMプロトコル・アダプタ・スイートの実行に必要なJavaクラスおよびJavaライブラリが含まれる
OrdDicomLibrary.earアーカイブ・ファイルをインストールしてデプロイします(アーカイブ・ファイルのデプロイを参照)。 - 標準または拡張デプロイメントのいずれであるかに応じてインストールする個々のコンポーネントを選択して、
OrdDicomLibrary.earアーカイブ・ファイルを構成します(標準デプロイメントの実行または拡張デプロイメントの実行を参照)。 - Oracle DICOMプロトコル・アダプタ・スイートの各コンポーネントのファイルが含まれる
OrdDicomAdapter.earアーカイブ・ファイルをインストールしてデプロイします。
この項は、次のトピックで構成されています。
4.3.1 アーカイブ・ファイルのデプロイ
-
OrdDicomLibrary.earこのアーカイブには、アダプタの実行に必要なすべてのJavaクラスと他のJavaライブラリが含まれます。
-
OrdDicomAdapter.earこのアーカイブは、
OrdDicomLibrary.earアーカイブ・ファイルを参照し、Oracle DICOMプロトコル・アダプタの3つのコンポーネントの基本的なデプロイメント構成の提供に必要なXMLディスクリプタおよび構成ファイルが含まれます。
WebLogic ServerにOrdDicomLibrary.earアーカイブをデプロイするには、次のようなコマンドを発行してweblogic.Deployerツールを使用します。
java weblogic.Deployer -upload -name OrdDICOM -source OrdDicomLibrary.ear -targets [target_name] -adminurl [weblogic_admin_url] -user [weblogic_user] -deploy -library
Oracle DICOMプロトコル・アダプタ・スイートの個々のコンポーネントをデプロイするには、Java jarツールを使用してOrdDicomAdapter.earアーカイブのコンテンツを抽出します。次に、Oracle DICOMプロトコル・アダプタの構成、Oracle DICOMクローラの構成およびOracle DICOM WADOプロキシの構成の説明に従って、デプロイの前にXML構成ファイルを変更します。
アーカイブがoracle-dicomというディレクトリに抽出された場合、ディレクトリのファイル構造は次のようになります。
oracle-dicom/META-INF/MANIFEST.MF oracle-dicom/META-INF/application.xml oracle-dicom/META-INF/weblogic-application.xml oracle-dicom/APP-INF/lib/dicom-net_adapter.jar oracle-dicom/APP-INF/lib/dicom-net_adapter.rar oracle-dicom/APP-INF/lib/dicom-net_crawler.jar oracle-dicom/APP-INF/lib/dicom-net_crawler.rar oracle-dicom/APP-INF/lib/dicom-net_wado.war oracle-dicom/APP-INF/classes/ordim_adapter_config.xml oracle-dicom/APP-INF/classes/ordim_crawler_config.xml oracle-dicom/APP-INF/classes/ordim_wado_config.xml
oracle-dicom/APP-INF/classes/ディレクトリのXMLファイルは、Oracle DICOMプロトコル・アダプタ・スイートの各コンポーネントの構成に使用されるファイルです。
oracle-dicom/APP-INF/lib/ディレクトリのアーカイブ・ファイルは、Oracle DICOMプロトコル・アダプタを構成するモジュールに対応します。
oracle-dicom/META-INF/ディレクトリのXMLファイルは、アプリケーションで使用されるすべてのモジュールおよびリソースを記述したWebLogicデプロイメント・ディスクリプタに対応します。
4.3.2 標準デプロイメントの実行
注意:
Oracle DICOMプロトコル・アダプタをデプロイする前に、まず、OrdDicomLibrary.earライブラリをWebLogic Serverにデプロイし、Oracle DatabaseのDICOMプロトコル・サポートを構成する必要があります。
詳細は、アーカイブ・ファイルのデプロイおよびOracle DatabaseのDICOMプロトコルのサポートの構成を参照してください。
Oracle DICOMプロトコル・アダプタ・スイートの各コンポーネントの単一インスタンスをデプロイするには、oracle-dicom/APP-INF/classes/ディレクトリのXMLファイルを編集します。
Oracle DICOMプロトコル・アダプタの構成の説明に従って構成ファイルを変更した後、次のようなコマンドを発行して、アプリケーションをWebLogic Serverにデプロイします。
java weblogic.Deployer -upload -name OracleDicomAdapterSuite -source 'oracle-dicom' -targets [weblogic_server] -adminurl [weblogic_admin_url] -user [weblogic_user] -deploy
この例では、OrdDicomAdapter.earアーカイブをoracle-dicomという名前のディレクトリに抽出すると想定しています。
このコマンドによって、Oracle DICOMプロトコル・アダプタ・スイートの3つのコンポーネントがWebLogic Serverにデプロイされ、それらが起動されます。
4.3.3 拡張デプロイメントの実行
Oracle DICOMプロトコル・アダプタの各コンポーネントは、1つのエンタープライズ・アーカイブにまとめられていますが、すべてのコンポーネントを一度にデプロイする必要はありません。たとえば、特定のコンポーネントの複数のインスタンスをデプロイできます。また、特定のコンポーネントの単一インスタンスをデプロイしない選択もできます。
META-INF/application.xmlファイルは、デプロイ時に有効化されるモジュールを記述します。例4-1は、このXMLファイルの例を示しています。
例4-1では、Oracle DICOMプロトコル・アダプタ・スイートの3つのコンポーネントのすべてが有効化されます。これらのコンポーネントのいずれかを無効化するには、削除するコンポーネントに対応するモジュール参照を削除(またはコメント・アウト)します。
DICOMプロトコル・アダプタ・コンポーネントとDICOMクローラ・コンポーネントはいずれも、次に示す2つ以上のモジュール定義が必要です。
-
*.rarこのアーカイブは、コンポーネントのResourceAdapterアーカイブです(各コンポーネントに1つ必要です)。
-
*.jarこのアーカイブは、コンポーネントのMessageDrivenBean (MDB)アーカイブです(各コンポーネントに1つ以上必要です)。
DICOM WADOプロキシ・コンポーネントのインスタンスごとに1つのモジュール定義が必要です(*.warアーカイブ)。
デフォルトでは、次のリストに示すとおり、Oracle DICOMプロトコル・アダプタ構成ファイルが、各MDBアーカイブに対して1つと、WADOプロキシ・アーカイブに対して1つ作成されます。
-
dicom-net_adapter.jarとordim_adapter_config.xml -
dicom-net_crawler.jarとordim_crawler_config.xml -
dicom-new_wado.warとordim_wado_config.xml
Oracle DICOMプロトコル・アダプタ・スイートの3つのコンポーネントのいずれかについて、複数のインスタンスをデプロイするには、次の手順を実行します。
- 適切なMDB (
*.jar)アーカイブまたはWADO (*.war)アーカイブのコピーを作成します。 - コンポーネント・アーカイブ・ファイルの変更の説明に従って、アーカイブのコピーを変更します。
- 変更したアーカイブを、
APP-INF/lib/ディレクトリの元のアーカイブと一緒に配置します。 - 手順2で変更した新しいXML構成ファイルを
APP-INF/classes/ディレクトリに配置します。 - 新しいアーカイブの
META-INF/application.xmlファイルに<module>エントリを追加します。 - weblogic.Deployerツールを使用してコンポーネントをデプロイします(標準デプロイメントの実行を参照 )。
例4-1 拡張デプロイメント用のXMLファイルの例
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">
<!-- Oracle DICOM Protocol Adapter -->
<module>
<connector>/APP-INF/lib/dicom-net_adapter.rar</connector>
</module>
<module>
<ejb>/APP-INF/lib/dicom-net_adapter.jar</ejb>
</module>
<!-- Oracle DICOM Crawler -->
<module>
<connector>/APP-INF/lib/dicom-net_crawler.rar</connector>
</module>
<module>
<ejb>/APP-INF/lib/dicom-net_crawler.jar</ejb>
</module>
<!-- Oracle DICOM WADO Proxy -->
<module>
<web>
<web-uri>/APP-INF/lib/dicom-net_wado.war</web-uri>
<context-root>dicom-net</context-root>
</web>
</module>
</application>
4.3.4 コンポーネント・アーカイブ・ファイルの変更
この項では、各Oracle DICOMプロトコル・アダプタ・コンポーネントに必要な変更を加える方法を、次の各項で説明します。
4.3.4.1 DICOMアダプタ・アーカイブ・ファイルの変更
DICOMアダプタの.jarアーカイブを変更するには、MDBの名前を変更し、XML構成ファイルの名前を更新する必要があります。これらの変更を行うには、アーカイブのMETA-INF/ejb-jar.xmlファイルを編集し、次のコード・セグメントで太字のイタリック体で示されているパラメータ値を変更します。
<message-driven>
<display-name>DICOM_ADAPTER</display-name>
<ejb-name>DICOM_ ADAPTER</ejb-name>
[...]
</message-driven>
<container-transaction>
<method>
<ejb-name>DICOM_ ADAPTER</ejb-name>
[...]
</method>
[...]
</container-transaction>
<activation-config-property>
<activation-config-property-name>adapterConfig</activation-config-property-name>
<activation-config-property-value>ordim_adapter_config.xml</activation-config-property-value>
</activation-config-property>
さらに、アーカイブのMETA-INF/weblogic-ejb-jar.xmlファイルを編集し、次のコード・セグメントで太字のイタリック体で示されているパラメータ値を変更します。
<weblogic-enterprise-bean>
<ejb-name>DICOM_ ADAPTER</ejb-name>
[...]
</ weblogic-enterprise-bean>4.3.4.2 DICOMクローラ・アーカイブ・ファイルの変更
*.jarアーカイブを変更してOracle DICOMクローラの新しいインスタンスを作成するには、MDBの名前を変更し、XML構成ファイルの名前を更新する必要があります。これらの変更を行うには、アーカイブのMETA-INF/ejb-jar.xmlファイルを編集し、次のコード・セグメントで太字のイタリック体で示されているパラメータ値を変更します。
<message-driven>
<display-name>DICOM_CRAWLER</display-name>
<ejb-name>DICOM_CRAWLER</ejb-name>
[...]
</message-driven>
<container-transaction>
<method>
<ejb-name>DICOM_CRAWLER</ejb-name>
[...]
</method>
[...]
</container-transaction>
<activation-config-property>
<activation-config-property-name>crawlerConfig</activation-config-property-name>
<activation-config-property-value>ordim_crawler_config.xml</activation-config-property-value>
</activation-config-property>
さらに、アーカイブのMETA-INF/weblogic-ejb-jar.xmlファイルを編集し、次のコード・セグメントで太字のイタリック体で示されているパラメータ値を変更します。
<weblogic-enterprise-bean>
<ejb-name>DICOM_CRAWLER</ejb-name>
[...]
</ weblogic-enterprise-bean>4.3.4.3 DICOM WADOプロキシ・アーカイブ・ファイルの変更
WADO .warアーカイブを変更してWADOプロキシの新しいインスタンスを作成するには、サーブレットの名前を変更し、XML構成ファイルの名前を更新する必要があります。これらの変更を行うには、アーカイブのWEB-INF/web.xmlファイルを編集し、次のコード・セグメントで太字のイタリック体で示されているパラメータ値を変更します。
<context-param>
<param-name>wadoConfig</param-name>
<param-value>ordim_wado_config.xml</param-value>
</context-param>
<servlet>
<display-name>JAX-RS Servlet</display-name>
<servlet-name>jersey</servlet-name>
[..]
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>4.4 Oracle DICOMプロトコル・アダプタの構成
この項では、Oracle DICOMプロトコル・アダプタ・スイートのコンポーネントを構成する方法を、次の各項で説明します。
4.4.1 Oracle DICOMプロトコル・アダプタの構成
DICOMプロトコル・アダプタは、スキーマordim_adapter_config.xsdに準拠するXMLファイルを作成することで構成されます。このXSDファイルは、APP-INF/lib/dicom-net.jarにあるOrdDicomLibrary.earアーカイブに付属しています。
例4-2は、スキーマordim_adapter_config.xsdを示しています。太字で強調表示されているXML include文は、例4-3にリストされている共通のデータ型定義のスキーマordim_common.xsdをコールします。
作成されるXMLファイルには、構成可能な要素<adapter>、<database>および<DICOM>が含まれています。
<adapter>要素について
<adapter>要素は、DICOMプロトコル・アダプタのDICOMホスト情報の識別に使用されます。
次の表は、<adapter>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
ホストのDICOM AEタイトルを指定します。 |
|
|
ホストが受信DICOMアソシエーションをリスニングするポート番号、および受信接続にSSL/TLSを使用するかどうかを指定するブール値を指定します。 |
|
|
SSL/TLS接続に使用するキーストアの場所、および(オプションで)指定されたキーストアをロック解除するパスワードを指定します。ここでパスワードが指定されない場合、Oracle DICOMプロトコル・アダプタのリソース・アダプタに関連付けられたデフォルトのWebLogic Serverセキュリティ・レルムの資格証明マップを通じて取得されます。 |
次のコード・セグメントでは、<adapter>要素の例を示します。
<adapter>
<title>DATABASE</title>
<bind port="11112" useSSL="false"/>
<SSL keystore="keystore.jks" password="pass"/>
</adapter><database>要素について
<database>要素は、Oracle Databaseサーバーに接続してDICOM画像とメタデータの格納を構成する方法の特定に使用されます。
次の表は、<database>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
次の接続詳細を指定します。
|
|
|
Oracle DICOMプロトコル・アダプタを介してDICOM画像を保存する際に、DICOM画像およびメタデータの格納に使用する構成を定義するDICOMプロトコル・ドキュメントの名前を指定します。 |
次のコード・セグメントは、<database>要素の例を示します。
<database>
<connection>
<url location=" jdbc:oracle:oci8:@//hostname:1521/orcl"/>
<schema name="user" password="pass"/>
</connection>
<configuration name="AdapterConfig1.xml"/>
</database><DICOM>要素について
<DICOM>要素は、AEタイトルとIPアドレス/ポートのマッピングなど、DICOM固有の構成の指定に使用されます。
次の表は、<DICOM>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
アダプタの接続を許可するDICOMクライアントのセットを次のように指定します。
|
次のコード・セグメントは、<DICOM>要素の例を示します。
<DICOM>
<hosts>
<host title="TESTPACS" address="testpacs.hostname" port="11112"/>
<host title="WADO" address="127.0.0.1" port="12347" useSSL="false"/>
</hosts>
</DICOM>共通データ型定義スキーマについて
スキーマordim_adapter_config.xsdは、例4-2の太字で強調されているXML include文で別のスキーマordim_common.xsdをコールします。
<xs:include schemaLocation="ordim_common.xsd"/>
注意:
DICOMクローラとDICOM WADOプロキシのスキーマは、共通スキーマordim_common.xsdもコールします。強調と一貫性保持のため、このXML include文は例4-2のみでなく例4-4および例4-5でも強調表示されています。
例4-3は、スキーマordim_common.xsdを示しています。このスキーマには、Oracle DICOMプロトコル・アダプタ・スイート内のコンポーネントのデータ型定義が格納されています。
例4-2 ordim_adapter_config.xsdスキーマ
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="ordim_common.xsd"/>
<xs:complexType name="dicom_ucm_metadata_pairing_t">
<xs:attribute name="tag" type="dicom_tag_t" use="required"/>
<xs:attribute name="field" type="ucm_field_t" use="required"/>
</xs:complexType>
<xs:complexType name="ucm_property_t">
<xs:attribute name="name" type="ucm_field_t" use="required"/>
<xs:attribute name="value" type="ucm_field_value_t" use="required"/>
</xs:complexType>
<xs:complexType name="dicom_ucm_metadata_map_t">
<xs:sequence>
<xs:element name="entry" type="dicom_ucm_metadata_pairing_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_tag_set_t">
<xs:sequence>
<xs:element name="tag" type="dicom_tag_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ucm_properties_map_t">
<xs:sequence>
<xs:element name="property" type="ucm_property_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ucm_config_t">
<xs:sequence>
<xs:element name="connection" type="ucm_connection_info_t"/>
<xs:element name="properties" type="ucm_properties_map_t"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_config_t">
<xs:sequence>
<xs:element name="hosts" type="dicom_host_config_t"/>
<xs:element name="wado" minOccurs="0">
<xs:complexType>
<xs:attribute name="baseURL" type="url_t" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="selectedTags" type="dicom_tag_set_t"/>
<xs:element name="tagMap" type="dicom_ucm_metadata_map_t"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ordim_adapter_config_t">
<xs:sequence>
<xs:element name="adapter" type="dicom_local_host_t"/>
<xs:element name="UCM" type="ucm_config_t"/>
<xs:element name="DICOM" type="dicom_config_t"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ordim_ucm_adapter_config" type="ordim_adapter_config_t"/>
</xs:schema>
例4-3 ordim_common.xsdスキーマ
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="empty_t"/>
<xs:simpleType name="boolean_t">
<xs:restriction base="xs:boolean"/>
</xs:simpleType>
<xs:simpleType name="string_t">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="nonempty_string_t">
<xs:restriction base="string_t">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="integer_t">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="ae_title_t">
<xs:restriction base="nonempty_string_t">
<xs:pattern value="[ ]*(.*[^ ])[ ]*"/>
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="hostname_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="network_port_t">
<xs:restriction base="integer_t">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="65535"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ssl_option_t">
<xs:restriction base="boolean_t"/>
</xs:simpleType>
<xs:simpleType name="dicom_tag_t">
<xs:restriction base="string_t">
<xs:pattern value="[0-9a-fA-F]*"/>
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="url_t">
<xs:restriction base="nonempty_string_t">
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ucm_username_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="ucm_password_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="database_username_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="database_password_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="database_repos_doc_name_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="ucm_field_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="ucm_field_value_t">
<xs:restriction base="string_t"/>
</xs:simpleType>
<xs:simpleType name="keystore_t">
<xs:restriction base="nonempty_string_t"/>
</xs:simpleType>
<xs:simpleType name="keystore_password_t">
<xs:restriction base="string_t"/>
</xs:simpleType>
<xs:complexType name="network_bind_address_t">
<xs:attribute name="address" type="hostname_t"/>
<xs:attribute name="port" type="network_port_t" use="required"/>
<xs:attribute name="useSSL" type="ssl_option_t"/>
</xs:complexType>
<xs:complexType name="network_remote_address_t">
<xs:attribute name="address" type="hostname_t" use="required"/>
<xs:attribute name="port" type="network_port_t" use="required"/>
</xs:complexType>
<xs:complexType name="dicom_simple_host_t">
<xs:attribute name="title" type="ae_title_t" use="required"/>
</xs:complexType>
<xs:complexType name="ssl_config_t">
<xs:attribute name="keystore" type="keystore_t" use="required"/>
<xs:attribute name="password" type="keystore_password_t"/>
</xs:complexType>
<xs:complexType name="dicom_local_client_t">
<xs:sequence>
<xs:element name="title" type="ae_title_t"/>
<xs:element name="SSL" type="ssl_config_t" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_local_host_t">
<xs:sequence>
<xs:element name="title" type="ae_title_t"/>
<xs:element name="bind" type="network_bind_address_t"/>
<xs:element name="SSL" type="ssl_config_t" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_remote_host_t">
<xs:complexContent>
<xs:extension base="network_remote_address_t">
<xs:attribute name="title" type="ae_title_t" use="required"/>
<xs:attribute name="useSSL" type="ssl_option_t"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ucm_login_info_t">
<xs:attribute name="username" type="ucm_username_t" use="required"/>
<xs:attribute name="password" type="ucm_password_t" use="required"/>
</xs:complexType>
<xs:complexType name="database_login_info_t">
<xs:attribute name="name" type="database_username_t" use="required"/>
<xs:attribute name="password" type="database_password_t" use="required"/>
</xs:complexType>
<xs:complexType name="url_location_t">
<xs:attribute name="location" type="url_t" use="required"/>
</xs:complexType>
<xs:complexType name="ucm_connection_info_t">
<xs:sequence>
<xs:element name="url" type="url_location_t"/>
<xs:element name="login" type="ucm_login_info_t" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="database_connection_info_t">
<xs:sequence>
<xs:element name="url" type="url_location_t"/>
<xs:element name="schema" type="database_login_info_t" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_host_config_t">
<xs:sequence>
<xs:element name="host" type="dicom_remote_host_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>4.4.2 Oracle DICOMクローラの構成
Oracle DICOMクローラは、スキーマordim_crawler_config.xsdに準拠するXMLファイルを作成することで構成されます。このXSDファイルは、APP-INF/lib/dicom-net.jarにあるOrdDicomLibrary.earアーカイブに付属しています。
例4-4は、スキーマordim_crawler_config.xsdを示しています。太字で強調表示されているXML include文は、例4-3にリストされている共通のデータ型定義のスキーマordim_common.xsdをコールします。
このスキーマには、構成可能な要素<crawler>、<jobs>、<hosts>および<datasets>が含まれています。
<crawler>要素について
<crawler>要素はDICOMクローラのDICOMホスト構成を指定します。
次の表で、<crawler>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
クローラのDICOM AEタイトルを指定します。 |
次のコード・セグメントは、<crawler>要素の例を示します。
<crawler>
<title>DB_CRAWLER</title>
</crawler><jobs>要素について
<jobs>要素は単一のクローラ・ジョブを表します。
次の表は、<jobs>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
検索するDICOMクライアントのAEタイトルを指定します。 |
|
|
DICOM画像の送信先になるDICOMホストのAEタイトルを指定します。 |
|
|
ジョブ実行間の遅延間隔と時間単位を指定します。 |
|
|
ジョブ起動中に実行する問合せのリスト(実行順)を指定します。各問合せは、ある問合せの出力が次の問合せの基本データ・セットとなるように連鎖されます。 |
|
|
単一の問合せを表し、データ・セットの名前および使用するDICOM検索ルートを指定します。 |
次のコード・セグメントは、<jobs>要素の例を示します。
<jobs>
<job>
<target title=" PACS "/>
<dest title="DATABASE"/>
<period duration="15" timeUnit="s"/>
<search>
<query searchRoot="study" dataset="Q1"/>
<query searchRoot="study" dataset="Q2"/>
<query searchRoot="study" dataset="Q3"/>
</search>
</job>
</jobs><hosts>要素について
<hosts>要素はクローラからの接続が許可されるDICOMクライアントのセットを指定します。
次の表は、<hosts>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
Oracle DICOMクローラから接続できるリモートDICOMクライアントのタイトル、IPアドレスおよびポートを指定します。 |
次のコード・セグメントは、<hosts>要素の例を示します。
<hosts>
<host title="DATABASE" address="localhost" port="12345"/>
<host title="PACS " address="pacs.hostname" port="11112"/>
</hosts><datasets>要素について
<datasets>要素は、クローラ・ジョブの問合せの一部として使用する一連のDICOMデータ・セットを指定します。各データ・セットには、ジョブのqueryタグで参照できる名前が割り当てられます。
次の表は、<datasets>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
単一のデータ・セットを指定します。 |
|
|
DICOMタグとそれに対応する値を、タグと値のペアで指定します。 |
次のコード・セグメントは、<datasets>要素の例を示します。
<datasets>
<dataset name="Q1">
<value tag="00080052">STUDY</value>
<value tag="0020000D">*</value>
</dataset>
<dataset name="Q2">
<value tag="00080052">SERIES</value>
<value tag="0020000E">*</value>
</dataset>
<dataset name="Q3">
<value tag="00080052">IMAGE</value>
<value tag="00080018">*</value>
</dataset>
</datasets>例4-4 ordim_crawler_config.xsdスキーマ
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="ordim_common.xsd"/>
<xs:simpleType name="dicom_value_t">
<xs:restriction base="string_t"/>
</xs:simpleType>
<xs:complexType name="dicom_tag_value_t">
<xs:simpleContent>
<xs:extension base="dicom_value_t">
<xs:attribute name="tag" type="dicom_tag_t" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="dicom_dataset_t">
<xs:sequence>
<xs:element name="value" type="dicom_tag_value_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="named_dicom_dataset_t">
<xs:complexContent>
<xs:extension base="dicom_dataset_t">
<xs:attribute name="name" type="nonempty_string_t" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="dicom_search_root_t">
<xs:restriction base="string_t">
<xs:enumeration value="patient"/>
<xs:enumeration value="study"/>
<xs:enumeration value="no_root"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="time_unit_t">
<xs:restriction base="string_t">
<xs:enumeration value="ms"/>
<xs:enumeration value="s"/>
<xs:enumeration value="h"/>
<xs:enumeration value="m"/>
<xs:enumeration value="d"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="dicom_query_t">
<xs:attribute name="searchRoot" type="dicom_search_root_t"/>
<xs:attribute name="dataset" type="nonempty_string_t"/>
</xs:complexType>
<xs:complexType name="dicom_query_list_t">
<xs:sequence>
<xs:element name="query" type="dicom_query_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="crawler_period_t">
<xs:attribute name="start" type="nonempty_string_t"/>
<xs:attribute name="duration" type="integer_t" use="required"/>
<xs:attribute name="timeUnit" type="time_unit_t"/>
</xs:complexType>
<xs:complexType name="crawler_job_t">
<xs:sequence>
<xs:element name="target" type="dicom_simple_host_t"/>
<xs:element name="dest" type="dicom_simple_host_t"/>
<xs:element name="period" type="crawler_period_t"/>
<xs:element name="search" type="dicom_query_list_t"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="crawler_job_list_t">
<xs:sequence>
<xs:element name="job" type="crawler_job_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dicom_dataset_set_t">
<xs:sequence>
<xs:element name="dataset" type="named_dicom_dataset_t" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ordim_crawler_config_t">
<xs:sequence>
<xs:element name="crawler" type="dicom_local_client_t"/>
<xs:element name="jobs" type="crawler_job_list_t"/>
<xs:element name="hosts" type="dicom_host_config_t"/>
<xs:element name="datasets" type="dicom_dataset_set_t"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ordim_crawler_config" type="ordim_crawler_config_t"/>
</xs:schema>
4.4.3 Oracle DICOM WADOプロキシの構成
Oracle DICOM WADOプロキシは、スキーマordim_wado_config.xsdに準拠するXMLファイルを作成することで構成されます。このXSDファイルは、APP-INF/lib/dicom-net.jarにあるOrdDicomLibrary.earアーカイブに付属しています。
例4-5は、スキーマordim_wado_config.xsdを示しています。太字で強調表示されているXML include文は、例4-3にリストされている共通のデータ型定義のスキーマordim_common.xsdをコールします。
このスキーマには、構成可能な要素<wado>および<hosts>が含まれています。
<wado>要素について
<wado>要素は、Oracle DICOM WADOプロキシのDICOMホスト情報の識別に使用されます。
次の表は、<wado>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
プロキシのDICOMホスト情報を識別します。 |
|
|
ホストのDICOM AEタイトルを指定します。 |
|
|
ホストが着信DICOMアソシエーションをリスニングするポート番号を指定します。 |
次のコード・セグメントは、<wado>要素の例を示します。
<wado useSSL="false">
<title>WADO</title>
<bind port="12347"/>
</wado><hosts>要素について
<hosts>要素はプロキシからの接続が許可されるDICOMクライアントのセットを指定します。
次の表は、<hosts>要素の詳細を説明します。
| 要素 | 説明 |
|---|---|
|
|
Oracle DICOMプロキシから接続できるリモートDICOMクライアントのAEタイトル、IPアドレスおよびポートを指定します。 |
次のコード・セグメントは、<hosts>要素の例を示します。
<hosts>
<host title="DATABASE" address="localhost" port="12345"/>
<host title="PACS " address="pacs.hostname" port="11112"/>
</hosts>例4-5 ordim_wado_config.xsdスキーマ
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="ordim_common.xsd"/>
<xs:complexType name="ordim_wado_config_t">
<xs:sequence>
<xs:element name="wado" type="dicom_local_host_t"/>
<xs:element name="hosts" type="dicom_host_config_t"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ordim_wado_config" type="ordim_wado_config_t"/>
</xs:schema>
4.5 Oracle DatabaseでのDICOMプロトコルのサポートの構成
Oracle Multimedia DICOMプロトコル・サポートに、DICOMデータ・モデルの構成ドキュメント・タイプDICOM_PROTOCOLが追加されています。管理者はこのドキュメント・タイプを使用して、DICOM画像およびメタデータをOracle Databaseの1つ以上の表に格納するDICOMプロトコル・アダプタ・インスタンスの動作を管理できます。DICOMプロトコル・ドキュメントは、表や列の名前など、DICOM画像およびメタデータの格納場所を制御し、ユーザーによる構成が可能なパラメータの名前付きコンテナです。Oracle Databaseに接続するように構成されるOracle DICOMプロトコル・アダプタの各インスタンスで、Oracle Databaseとの間でDICOM画像およびメタデータの格納、検索、問合せおよび取得を行うには、関連するDICOMプロトコル・ドキュメントが必要です。
DICOMプロトコル・アダプタ・インスタンスで画像またはメタデータの格納に使用される表はすべて、次の要件を満たす必要があります。
-
この表にはSOPインスタンスUID (
0008,0018)列が含まれている必要があります。 -
値表現(VR)が
DAのDICOM属性にマップされる表の列は、DATE型である必要があります。 -
VRが
DA以外のDICOM属性にマップされる表の列は、VARCHAR2型である必要があります。
SOPインスタンスUID列を表の主キーとして指定することをお薦めします。
管理者はORD_DICOM_ADMINデータ・モデル・リポジトリ・インタフェースを使用して、DICOMプロトコル・ドキュメントをOracle Multimedia DICOMデータ・モデルの一部として管理できます。たとえば、新しいDICOMプロトコル・ドキュメントをデータ・モデルに挿入するには、プロシージャORD_DICOM_ADMIN.insertDocumentをコールし、docTypeパラメータの値としてDICOM_PROTOCOLを指定します。
<storage>タグの使用可能な要素および属性の詳細は、DICOMプロトコル・ドキュメント・スキーマ(ordcmdp.xsd)を参照してください。
関連項目:
-
DICOMデータ・モデルの管理に使用できるOracle Multimedia DICOMのファンクションとプロシージャの詳細は、ORD_DICOM_ADMINパッケージのリファレンスを参照してください。
-
DICOMプロトコル・ドキュメントをリポジトリに挿入する方法の詳細は、DICOMプロトコル・ドキュメントの挿入を参照してください。
-
DICOMプロトコル・ドキュメントの作成方法の詳細は、DICOMプロトコル・ドキュメントの作成を参照してください。
-
DICOMプロトコル・ドキュメントのリポジトリへの挿入に必要な手順については、サンプル・セッション5: DICOMプロトコル・ドキュメントの挿入を参照してください。
4.6 DICOMプロトコル・アダプタを使用した画像のバージョン管理
DICOMプロトコル・アダプタは、画像のバージョン管理をサポートしています。このため、同じSOPインスタンスUIDを持つ複数の画像がDICOMプロトコル・アダプタに送信された場合、重複したイメージを破棄するのではなく、複数のバージョンの画像が保持されます。
バージョン管理は、DICOMプロトコル・ドキュメントで定義された各表のユーザー指定のバージョン列で有効化されます。バージョン列の名前は表ごとに異なる可能性がありますが、構成内のすべての表でバージョン列を指定する必要があります。
画像がOracle Databaseに格納されるときに、厳密な昇順シーケンスによって画像にバージョン番号が割り当てます。このため、各画像は対応するSOPインスタンスUIDとバージョン番号のペアにより一意に識別されます。画像を取得するとき、Oracle Databaseはバージョン番号が最も大きい画像を返します。
次の例では、バージョン管理を使用するデプロイメント向けのサンプルのDICOMプロトコル・ドキュメントを示しています。
<?xml version="1.0"?>
<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">
<STORAGE table='test.dicom_orcl_meta' id_col="sop_instance_uid" ver_col="meta_ver">
<ATTRIBUTE column='"STUDY_INSTANCE_UID"' tag="0020000D"/>
<ATTRIBUTE column='"SERIES_INSTANCE_UID"' tag="0020000E"/>
</STORAGE>
<STORAGE table='test.dicom_orcl_dcm' id_col="sop_instance_uid" ver_col="dicom_ver">
<DICOM column="blob_data" type="BLOB" retain="true"/>
</STORAGE>
</DICOM_PROTOCOL>4.7 DICOMプロトコル・アダプタによるDICOMデータからのプライベート属性の抽出
DICOMプロトコル・アダプタでは、グループ番号とタグ名に基づくプライベート属性タグの抽出をサポートしています。この機能を使用する場合、タグの要素番号を認識している必要はありません。
この機能を使用するには、次の手順を実行します。
関連項目:
-
プライベート・ディクショナリ・ドキュメントの作成の詳細は、プライベート・ディクショナリ・ドキュメントの作成を参照してください。
-
プライベート・ディクショナリ・ドキュメントをリポジトリに挿入する方法については、リポジトリへのドキュメントの挿入を参照してください。
-
DICOMプロトコル・ドキュメントの詳細は、DICOMプロトコル・ドキュメントの作成を参照してください。
4.8 BLOB記憶域のためのDICOMメタデータ抽出の改善
BLOBに格納されているDICOM画像からDICOMメタデータを抽出する際のパフォーマンスを向上させるには、メタデータの抽出時に使用するマッピング・ドキュメントを指定します。マッピング・ドキュメントは、抽出対象の属性を指定します。マッピング・ドキュメントをこのように使用すると、ORDDicomの記憶域で使用する格納タグ・リスト・ドキュメントを挿入する場合と同様にパフォーマンスが向上します。
次の例は、マッピング・ドキュメントを指定するデプロイメントのDICOMプロトコル・ドキュメントの例を示しています。
<?xml version="1.0"?>
<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">
<ADMIN_DOC doc_type='MAPPING' doc_name="ordcmmp.xml" doc_option="STANDARD"/>
<STORAGE table='test.dicom_orcl_meta' id_col="sop_instance_uid">
<ATTRIBUTE column='"STUDY_INSTANCE_UID"' tag="0020000D"/>
<ATTRIBUTE column='"SERIES_INSTANCE_UID"' tag="0020000E"/>
</STORAGE>
<STORAGE table='test.dicom_orcl_dcm' id_col="sop_instance_uid">
<DICOM column="blob_data" type="BLOB"/>
</STORAGE>
</DICOM_PROTOCOL>
関連項目:
-
マッピング・ドキュメントの詳細は、マッピング・ドキュメントとメタデータXMLスキーマの作成についてを参照してください。
-
格納タグ・リスト・ドキュメントの詳細は、格納タグ・リスト・ドキュメントの作成を参照してください。


