イメージ・ファイルには、イメージのコンテンツ、イメージ・ラスターおよびイメージ・メタデータの情報が含まれます。一般的に、データに関するデータをメタデータと呼びます。この場合、メタデータは実際のイメージの追加情報で、イメージとともにイメージ・ファイルに格納されています。
イメージ・ファイルには数種類のメタデータを格納できます。各メタデータは、種類ごとに異なる役割を果たします。1つは、イメージを技術的に記述するテクニカル・メタデータです。たとえば、テクニカル・メタデータには、イメージの高さや幅(ピクセル単位)または格納に使用する圧縮タイプなどのイメージの属性を含めることができます。もう1つの種類であるコンテンツ・メタデータには、イメージの標題、撮影者の名前および撮影日時を記述できます。
メタデータは、様々なメカニズムでイメージ・ファイルに格納されます。デジタル・カメラおよびスキャナは、作成するイメージに、自動的にメタデータを挿入します。Adobe Photoshopなどデジタル写真処理アプリケーションを使用すると、イメージとともに格納するメタデータを追加または編集できます。写真処理アプリケーションおよびニュースの取材アプリケーション、イメージの保存時、一般ユーザー・レベルにおいても、デジタル・イメージへのメタデータの追加は日常的な操作になっています。
イメージ・データと同じファイルに格納すると、メタデータはカプセル化されます。カプセル化により、両方の型のデータを共有し、1つのデータとして安全に交換できます。イメージ・ファイル・フォーマットに格納されたメタデータを埋込みメタデータと呼びます。
多数のイメージ・ファイル・フォーマットの場合、Oracle Multimediaが抽出および管理できるメタデータ属性は限られます。これらの属性には、height、width、contentLength、fileFormat、contentFormat、compressionFormatおよびmimeTypeがあります。少数のイメージ・ファイル・フォーマットの場合、Oracle Multimediaは多数のメタデータ属性を抽出できます。このメタデータは、スキーマ・ベースのXML文書で表されます。これらのXML文書は、データベースへの格納、索引付け、検索および更新が可能です。また、Oracle Databaseの標準的なメカニズムを使用してアプリケーションからも利用可能にできます。
また、Oracle Multimediaは、ユーザーが指定するメタデータを少数のイメージ・データ・ファイルに書き込んだり、組み込むことができます。メタデータは、アプリケーションによりスキーマ・ベースのXML文書として提供されます。Oracle Multimediaは、XML文書を処理し、イメージ・ファイルにメタデータを書き込みます。
Oracle Multimediaは、GIF、TIFFおよびJPEGファイル・フォーマットに対し、メタデータの抽出および埋込みをサポートしています。Oracle Multimediaがサポートするイメージ・ファイル・フォーマットの詳細は、『Oracle Multimediaリファレンス』を参照してください。
イメージ・メタデータ・フォーマットとは、イメージ・メタデータをイメージ・ファイルに格納するための標準的なプロトコルおよび技術です。次の項では、Oracle Multimediaがサポートする埋込みイメージ・メタデータ・フォーマットについて説明します。
EXIF
IPTC-IIM
XMP
Exchangeable Image File Format(EXIF)は、デジタル・スチール・カメラのイメージ・ファイルを格納するための規格です。デジタル・カメラで作成されたイメージとそのメタデータを格納する方法として、日本電子工業振興協会(JEIDA)が規格化したフォーマットです。EXIFイメージ・メタデータはTIFFおよびJPEGフォーマット・イメージとして格納できます。Oracle Multimediaは、TIFFおよびJPEGファイル・フォーマットからEXIFメタデータを抽出できます。
International Press Telecommunications Council-Information Interchange Model(IPTC-IIM)バージョン4は、国際新聞通信委員会と米国新聞協会が共同で規格化したフォーマットです。このメタデータ規格は、ニュースの取材、報道および出版業務に特化した情報の取得を目的にしています。この規格の情報レコードは、一般的にIPTCタグと呼ばれます。
イメージ・ファイル・フォーマットでの埋込みIPTCタグの使用は、イメージ編集に使用されるAdobe Photoshopツールによって広まりました。IPTCメタデータはTIFFおよびJPEGフォーマット・イメージとして格納できます。Oracle Multimediaは、TIFFおよびJPEGファイル・フォーマットからのIPTCメタデータの抽出をサポートしています。
Extensible Metadata Platform(XMP)は、Adobeが様々なアプリケーションでメタデータを作成、処理および交換するために規格化したメタデータ・フォーマットです。XMPは、データ・モデリングにResource Description Framework(RDF)技術を使用します。XMPでは、データ・モデルのシリアル化(バイト・ストリームへの変換)およびイメージ・ファイルへの埋込み方法も定義されています。Oracle Multimediaでは、GIF、TIFFおよびJPEGファイル・フォーマットからXMPメタデータを抽出できます。また、Oracle Multimediaでは、GIF、TIFFおよびJPEGファイル・フォーマットへのXMPデータ・パケットの書込みも可能です。
XMPの詳細は、次のAdobe Systems IncorporatedのWebサイトを参照してください。
PDFの詳細は、World Wide Web Consortiumの次のURLで「Resource Description Framework」を参照してください。
バイナリ・イメージ・ファイルから抽出されたメタデータは、次に、簡単に格納、索引付け、問合せ、更新および表示できる形に変換されます。Oracle Multimediaでは、イメージ・メタデータはXML文書で戻されます。これらのXML文書は、Oracle Multimediaがデータベースに登録するXMLスキーマに基づいています。各型のイメージ・メタデータは、個別のXMLスキーマと対応しています。これらのXMLスキーマは、ORDImageオブジェクト型のメタデータ・メソッドで使用されます。Oracle MultimediaがサポートするXMLスキーマの詳細は、『Oracle Multimediaリファレンス』を参照してください。
XML文書は、データベース内のXMLType列に格納できます。これらのドキュメントは、Oracle XML DBで提供される標準ベースの様々なXML技術によって簡単に検索および処理できます。(詳細は、『Oracle XML DB開発者ガイド』を参照してください。)
次に、photos
表を使用したメタデータの抽出および埋込みの例を示します。photos
表は、フォト・アルバム・サンプル・アプリケーションで定義されています。フォト・アルバム・サンプル・アプリケーションの実装は、PHOTO_ALBUM
という名前のPL/SQLパッケージに定義されています。Oracle Multimedia PL/SQL Web Toolkitフォト・アルバム・サンプル・アプリケーションの詳細は、3.1項を参照してください。
photo
表には、1つのイメージに対して、原寸の写真と縮小イメージの2つのインスタンスが格納されます。この表には、異なるイメージ・メタデータ・ドキュメントを4つまで格納できます。これらのドキュメントは、ORDImage、EXIF、IPTCおよびXMPメタデータ・フォーマットのイメージ・メタデータを表し、それぞれ、metaORDImage
、metaEXIF
、metaIPTC
およびmetaXMP
という名前の列に格納されます。メタデータ列はXMLType
型で、Oracle Multimediaが提供するそれぞれのメタデータXMLスキーマにバインドされています。
メタデータを抽出または書き込むには、格納するための表と列が必要です。次に示すPL/SQLコードの一部は、photos
表を作成します。この表は、各型のイメージ・メタデータを格納する4つのXMLTYPE列(metaORDImage
、metaEXIF
、metaIPTC
およびmetaXMP
)と元のイメージおよび縮小イメージを格納する2つのORDIMAGE列(image
およびthumb
)で構成されます。各メタデータ列は、対応するメタデータのスキーマにバインドされます。たとえば、metaEXIF
列はhttp://xmlns.oracle.com/ord/meta/exif
に格納されているXMLスキーマにバインドされ、XML要素exifMetadata
として定義されます。
イメージ・メタデータ列の定義およびXMLスキーマへのバインドを示す部分は、太字で強調表示しています。
-- -- Create the PHOTOS table -- CREATE TABLE photos( id NUMBER PRIMARY KEY, description VARCHAR2(40) NOT NULL, metaORDImage XMLTYPE, metaEXIF XMLTYPE, metaIPTC XMLTYPE, metaXMP XMLTYPE, image ORDSYS.ORDIMAGE, thumb ORDSYS.ORDIMAGE ) -- -- store full-size images and thumbnail images as SecureFile LOBs -- LOB(image.source.localdata) STORE AS SECUREFILE LOB(thumb.source.localdata) STORE AS SECUREFILE -- and bind the XMLType columns to the interMedia metadata schemas XMLType COLUMN metaORDImage XMLSCHEMA "http://xmlns.oracle.com/ord/meta/ordimage" ELEMENT "ordImageAttributes" XMLType COLUMN metaEXIF XMLSCHEMA "http://xmlns.oracle.com/ord/meta/exif" ELEMENT "exifMetadata" XMLType COLUMN metaIPTC XMLSCHEMA "http://xmlns.oracle.com/ord/meta/iptc" ELEMENT "iptcMetadata" XMLType COLUMN metaXMP XMLSCHEMA "http://xmlns.oracle.com/ord/meta/xmp" ELEMENT "xmpMetadata";
次のPL/SQLプロシージャを使用して、イメージからメタデータを抽出し、作成したphotos
表の指定した列に格納します。このプロシージャでは、XML文書の配列を戻すgetMetadata( )メソッドが使用されています。メタデータの型は、各ドキュメントのルート要素から判断されます。ドキュメントは、UPDATE文によって、photos
表の対応する列に格納されます。
getMetadata( )メソッドをコールする部分は、太字で強調表示しています。
--
-- fetch the metadata and sort the results
--
PROCEDURE extractMetadata(inID IN INTEGER)
IS
img ORDSYS.ORDIMAGE;
metav XMLSequenceType;
meta_root VARCHAR2(40);
xmlORD XMLType;
xmlXMP XMLType;
xmlEXIF XMLType;
xmlIPTC XMLType;
BEGIN
-- select the image
SELECT image
INTO img
FROM PHOTOS
WHERE id = inID;
-- extract all the metadata
metav := img.getMetadata( 'ALL' );
-- process the result array to discover what types of metadata were
returned
FOR i IN 1..metav.count() LOOP
meta_root := metav(i).getRootElement();
CASE meta_root
WHEN 'ordImageAttributes' THEN xmlORD := metav(i);
WHEN 'xmpMetadata' THEN xmlXMP := metav(i);
WHEN 'iptcMetadata' THEN xmlIPTC := metav(i);
WHEN 'exifMetadata' THEN xmlEXIF := metav(i);
ELSE NULL;
END CASE;
END LOOP;
-- Update metadata columns
--
UPDATE photos
SET metaORDImage = xmlORD,
metaEXIF = xmlEXIF,
metaIPTC = xmlIPTC,
metaXMP = xmlXMP
WHERE id = inID;
END extractMetadata;
次のPL/SQLプロシージャで、putMetadata( )メソッドを示します。このプロシージャには、6つの引数を指定できます。entry_id
引数は、photos
表の更新対象イメージを指定します。その他の引数(title
、creator
、date
、description
およびcopyright
)は、XMPパケットにフォーマットされ、ターゲット・イメージに埋め込まれる文字列です。
この例では、XMPメタデータ用のOracle Multimedia XMLスキーマに基づいたXML文書インスタンスを作成します。(このスキーマは、Oracle XML DBに事前登録されています。)(詳細は、『Oracle XML DB開発者ガイド』を参照してください。)XMPメタデータのスキーマは、単一のグローバル要素(<xmpMetadata>
)を定義します。<xmpMetadata>要素には、整形式のRDFドキュメントが1つ含まれます。RDFドキュメントには、rdf
ネームスペースから導出された単一の<RDF>
要素が含まれます。このRDFドキュメントは、Dublin Core Schemaで定義されている要素で構成されています。
メタデータ・ドキュメントは、putMetadata( )メソッドをコールすることによってイメージ・ファイルに埋め込まれます。新規イメージおよび新規メタデータは、UPDATE文によってphotos
表に再度格納されます。
putMetadata( )メソッドをコールする部分は、太字で強調表示しています。
--
-- write the metadata to the image
--
PROCEDURE write_metadata( entry_id IN VARCHAR2,
title IN VARCHAR2,
creator IN VARCHAR2,
date IN VARCHAR2,
description IN VARCHAR2,
copyright IN VARCHAR2 )
IS
img ORDSYS.ORDImage;
xmp XMLType;
buf VARCHAR2(5000);
BEGIN
-- select the image
SELECT image
INTO img
FROM PHOTOS
WHERE id = entry_id FOR UPDATE;
-- Create the XMP packet it must be schema valid
-- to "http://xmlns.oracle.com/ord/meta/xmp"
-- and contain an <RDF> element. This example uses
-- the Dublin Core schema.
/* An example XML instance document
<xmpMetadata xmlns="http://xmlns.oracle.com/ord/meta/xmp"
xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/xmp
http://xmlns.oracle.com/ord/meta/xmp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>A Winter Day</dc:title>
<dc:creator>Frosty S. Man</dc:creator>
<dc:date>21-Dec-2004</dc:date>
<dc:description>a sleigh ride</dc:description>
<dc:copyright>North Pole Inc.</dc:copyright>
</rdf:Description>
</rdf:RDF>
</xmpMetadata>
*/
buf := '<xmpMetadata xmlns="http://xmlns.oracle.com/ord/meta/xmp"
xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/xmp
http://xmlns.oracle.com/ord/meta/xmp"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description about="" xmlns:dc="http://purl.org/dc/elements/1.1/">';
IF title IS NOT NULL THEN
buf := buf || '<dc:title>' || htf.escape_sc(title) || '</dc:title>';
END IF;
IF creator IS NOT NULL THEN
buf := buf || '<dc:creator>' || htf.escape_sc(creator)
|| '</dc:creator>';
END IF;
IF date IS NOT NULL THEN
buf := buf || '<dc:date>' || htf.escape_sc(date)
|| '</dc:date>';
END IF;
IF description IS NOT NULL THEN
buf := buf || '<dc:description>' || htf.escape_sc(description)
|| '</dc:description>';
END IF;
IF copyright IS NOT NULL THEN
buf := buf || '<dc:copyright>' || htf.escape_sc(copyright)
|| '</dc:copyright>';
END IF;
buf := buf || '
</rdf:Description>
</rdf:RDF>
</xmpMetadata>';
-- create the XML document
xmp := XMLType.createXML(buf, 'http://xmlns.oracle.com/ord/meta/xmp');
-- write the metadata
img.putMetadata( xmp, 'XMP' );
-- update the image
UPDATE photos
SET image = img,
metaXMP = xmp
WHERE id = entry_id;
END write_Metadata;
イメージ・メタデータの操作に関する規格および技術の詳細は、次のWebサイトを参照してください。
Dublin Core:Dublin Core要素の標準スキーマ
Extensible Metadata Platform
Resource Description Framework(RDF Primerを参照)
Oracle Multimediaは、医用デジタル画像と通信(DICOM)機能によって単体のDICOMオブジェクトを認識し、患者、研究など一連のものおよび設備に関連する属性を抽出できます。DICOMオブジェクトを認識するということは、指定したバイナリ・データが単体のDICOMオブジェクトを表すかどうかをOracle Multimediaで判断できることを意味します。その場合は、Oracle MultimediaはそのDICOMオブジェクトからDICOMメタデータを抽出できます。データは、ORDImageオブジェクトのコンテンツとして、またはBLOB、BFILEに直接格納できます。
DICOMオブジェクトは、様々な型のデータを格納できるオブジェクトです。患者のカルテ、波形図、イメージ、3D断面図、ビデオ映像、動的3D図などがその例です。単体のDICOMオブジェクトには、DICOM規格に準拠したファイル・ヘッダーが必要です。
現在のリリースでは、新しいORDDicomオブジェクト型が追加されました。また、アプリケーションでは、Oracle Multimedia Java APIおよびPL/SQL APIを使用して、DICOMオブジェクトを格納、管理および操作できるようになりました。これらの新しいOracle Multimedia DICOM機能拡張の詳細は、『Oracle Multimedia DICOM開発者ガイド』および『Oracle Multimedia DICOM Java API Reference』を参照してください。
Oracle Database 10gリリース2でOracle MultimediaがサポートするDICOMメソッド、暗号化規則、イメージ・フォーマットおよび例外の詳細は、『Oracle Multimediaリファレンス』を参照してください。
Oracle Multimediaでは、DICMイメージ・ファイル・フォーマットのメタデータを抽出できます。DICMとは、Oracle Multimediaで使用する医用デジタル画像と通信フォーマットの名称です。Oracle Multimediaがサポートするイメージ・ファイル・フォーマットの詳細は、『Oracle Multimediaリファレンス』を参照してください。
次に示す、DICOMメタデータ抽出の例では、後述するサンプルPL/SQLコードで定義されているmedicalImages
表を使用します。
medicalImages
表には、1つのイメージに対して、原寸の写真と縮小イメージの2つのインスタンスが格納されます。また、この表には、単一のイメージ・メタデータ・ドキュメントを格納できます。このドキュメントは、metadata
という名前の列に格納され、DICMメタデータ・フォーマットから抽出されたDICOMイメージ・メタデータを表します。metadata
列はXMLType
型で、Oracle Multimediaが提供するそれぞれのメタデータXMLスキーマにバインドされています。
DICOMメタデータを抽出するには、格納するための表と列が必要です。次に示すPL/SQLコードの一部は、medicalImages
表を作成します。この表は、DICOMイメージ・メタデータを格納する1つのXMLTYPE列(metadata
)と元のイメージおよび縮小イメージを格納する2つのORDIMAGE列(image
およびthumb
)で構成されます。metadata
列はhttp://xmlns.oracle.com/ord/meta/dicomImage
に格納されているXMLスキーマにバインドされ、XML要素DICOM_IMAGE
として定義されます。
イメージのmetadata
列の定義およびXMLスキーマへのバインドを示す部分は、太字で強調表示しています。
create table medicalImages( id number primary key, description VARCHAR2(40), metadata XMLType, image ORDSYS.ORDIMAGE, thumb ORDSYS.ORDIMAGE ) -- -- store full-size images and thumbnail images as SecureFile LOBs -- LOB(image.source.localdata) STORE AS SECUREFILE LOB(thumb.source.localdata) STORE AS SECUREFILE -- and bind the XMLType columns to the interMedia metadata columns XMLType column metadata XMLSCHEMA "http://xmlns.oracle.com/ord/meta/dicomImage" ELEMENT "DICOM_IMAGE";
次のPL/SQLプロシージャを使用して、イメージからDICOMメタデータを抽出し、作成したmedicalImages
表の指定した列に格納します。プロシージャでは、XML文書を戻すgetDicomMetadata( )メソッドが使用されています。ドキュメントは、UPDATE文によって、medicalImages
表の対応する列に格納されます。
getDicomMetadata( )メソッドをコールする部分は、太字で強調表示しています。
--
PROCEDURE extractDicomMetadata(inID INTEGER)
IS
local_image ORDSYS.ORDIMAGE;
local_id INTEGER;
dicom_metadata XMLType := NULL;
BEGIN
SELECT image INTO local_image FROM medicalImages WHERE id = inID;
-- extract DICOM metadata
dicom_metadata := local_image.getDicomMetadata('imageGeneral');
IF (dicom_metadata IS NULL) THEN
DBMS_OUTPUT.PUT_LINE('metadata is NULL');
ELSE
UPDATE medicalImages SET metadata = dicom_metadata where id = inID;
END IF;
-- let us print the namespace of the XML document containing the
-- dicom metadata that we just extracted
DBMS_OUTPUT.PUT_LINE('namespace: ' || dicom_metadata.getNamespace());
END extractDicomMetadata;
--