プライマリ・コンテンツに移動
Oracle® Database開発ガイド
12c リリース1 (12.1)
B71295-06
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

22 識別コード・パッケージの使用

識別コード・パッケージは、電子製品コード(EPC)などOracle Databaseの各種製品コードや識別コード間の格納、取出し、エンコード、デコード、および翻訳を行うツールや手法を提供する、Oracle Databaseの機能です。また、データ型、メタデータ表およびビュー、およびEPC標準RFIDタグまたは新型RFIDタグをユーザー表に格納するためのPL/SQLパッケージも提供します。

識別コード・パッケージによって、Oracle Databaseは、EPCコード体系の認識、効率的な記憶域およびコンポーネント・レベルのEPCデータの取得、EPCglobal Tag Data Translation 1.0(TDT)標準に準拠することが可能になります。TDT標準は、各種EPC RFIDタグ表現間のデコード、エンコード、および翻訳の方法について定義したものです。

このパッケージはまた、EPC標準には含まれていない既存のコード体系をアプリケーションで使用するための拡張可能なフレームワークを提供します。このフレームワークにより、Oracle Databaseは古いシステムにも、今後EPC標準に含まれる可能性のある、進化する識別コードにも対応可能となります。

また、識別コード・パッケージでは、最初にエンコード・カテゴリを登録してエンコード・タイプを登録し、次にエンコード・タイプに関連付けられた新しいコンポーネントを登録して、開発者は独自の識別コードを作成できます。

内容は次のとおりです。

22.1 識別の概念

データベース・オブジェクトMGD_IDが定義され、独自に作成した既存の識別コードとEPC標準の識別コードの使用が可能になりました。EPCの概念の概要は、22.7項を参照してください。MGD_IDオブジェクトは、特定のカテゴリが属するベース・コード・オブジェクトとして、または、EPCカテゴリ、NASAカテゴリなど数多くのカテゴリのRFIDタグの型としての役割を果します。各カテゴリには、タグ表現構造およびそのコンポーネントを定義する一連のタグ・スキームまたは文書が存在します。EPCカテゴリにおいて、様々なエンコーディングのタイプ(EPC標準バージョン1.1で定義)を表すコード体系(SGTIN-64、SGTIN-96、GID-96など)の定義に必要なメタデータは、デフォルトではデータベースにロードされます。ユーザーは、図22-1で示すように独自のカテゴリとスキームのエンコーディングの定義が可能であり、データベースにもロードできます。

図22-1 RFIDコード・カテゴリおよびそのスキーム

図22-1の説明は次にあります。
「図22-1 RFIDコード・カテゴリおよびそのスキーム」の説明

MGD_IDオブジェクトには、2つの属性、category_id、および名前/値ペアのコンポーネントで構成されるリストが含まれます。MGD_IDオブジェクトが格納されると、オブジェクトの作成時にタグ表現をこれらのコンポーネントの名前/値ペアに解析する必要があります。

EPC標準バージョン1.1は、既存で既知のコード体系に依存しない汎用識別子(GID)タイプを1つ、EAN.UCC仕様に基づくDomain Identifierのタイプを5つ定義します。さらに、米国防総省(USDOD)の識別タイプも定義します。EAN.UCCに基づく識別タイプは、serialized global trade identification number(SGTIN)、serial shipping container code(SSCC)、serialized global location number(SGLN)、global returnable asset identifier(GRAI)、およびglobal individual asset identifier(GIAI)の5つです。

ビットレベルのエンコーディングを1つ持つGID以外の識別タイプはすべて、長さが64ビットか96ビットかによって、それぞれ2つのエンコーディングがあります。合計すると、EPCタグには13種類の異なる標準エンコーディングが存在することになります。また、タグURIおよび純粋な識別表現などバイナリ以外の表現でのエンコーディングも可能です。

各EPCエンコーディングには、独自の構造と編成があります。表22-1を参照してください。EPCエンコーディング構造フィールド名は、識別コード・パッケージAPIのparameter_listパラメータの名前/値ペアに関連しています。たとえば、SGTIN-64では、構造フィールド名はFilter Value、Company Prefix Index、Item Reference、およびSerial Numberです。

表22-1 EPCエンコーディングの一般的な構造

エンコーディング名 ヘッダー長(ビット) フィールド名(parameter_listの名前/値ペア)およびフィールド長(ビット)

GID-96

8

General Manager Number (8)、Object Class (24)、Serial Number (36)

SGTIN-64

2

Filter Value (3)、Company Prefix Index (14)、Item Reference (20)、Serial Number (25)

SGTIN-96

8

Filter Value (3)、Partition (3)、Company Prefix (20-40)、Item Reference (24-4)、Serial Number (38)

SSCC-64

8

Filter Value (3)、Company Prefix Index (14)、Serial Reference (39)

SSCC-96

8

Filter Value (3)、Partition (3)、Company Prefix (20-40)、Serial Reference (38-18)、Unallocated (24)

SGLN-64

8

Filter Value (3)、Company Prefix Index (14)、Location Reference (20)、Serial Number (19)

SGLN-96

8

Filter Value (3)、Partition (3)、Company Prefix (20-40)、Location Reference (21-1)、Serial Number (41)

GRAI-64

8

Filter Value (3)、Company Prefix Index (14)、Asset Type (20)、Serial Number (19)

GRAI-96

8

Filter Value (3)、Partition (3)、Company Prefix (20-40)、Asset Type (24-4)、Serial Number (38)

GIAI-64

8

Filter Value (3)、Company Prefix Index (14)、Individual Asset Reference (39)

GIAI-96

8

Filter Value (3)、Partition (3)、Company Prefix (20-40)、Individual Asset Reference (62-42)

USDOD-64

8

Filter Value (2)、Government Managed Identifier (30)、Serial Number (24)

USDOD-96

8

Filter Value (4)、Government Managed Identifier (48)、Serial Number (36)


EPCglobalは11個のタグ・スキーム(GID-96、SGTIN-64、SGTIN-96など)を定義しています。これらのスキームにはそれぞれ多くの表現がありますが、現在最も頻繁に使用されているのはBINARY、TAG_URI、およびPURE_IDENTITYです。たとえば、SGTIN-64の情報は次のように表現できます。

BINARY: 1001100000000000001000001110110001000010000011111110011000110010
PURE_IDENTITY:  urn:epc:id:sgtin:0037000.030241.1041970
TAG_URI: urn:epc:tag:sgtin-64:3.0037000.030241.1041970
LEGACY: gtin=00037000302414;serial=1041970
ONS_HOSTNAME: 030241.0037000.sgtin.id.example.com

これらの表現にはタグに関するすべての情報が含まれているものがありますが(BINARYおよびTAG_URI)、他の表現には一部の情報のみが含まれています(PURE_IDENTITY)。そのため、タグをTAG_URIからPURE_IDENTITY表現へ翻訳することはできますが、フィルタ値などの詳細情報がないかぎり、逆への翻訳は実行できません。

EPCglobalは、様々なEPC RFIDタグ表現間のデコード、エンコードおよび翻訳を定義したTag Data Translation 1.0(TDT)標準をリリースしました。デコーディングは、ある表現をフィールド/値ペアに解析することを意味し、エンコーディングはこれらのフィールドから表現を再構成することを意味します。翻訳とは、ある表現をデコーディングし、すぐに別の表現にエンコーディングすることを意味します。TDTはそれぞれがスキームを表す一連のXMLファイルを使用してこの情報を定義します。たとえば、SGTIN-64スキームは、バイナリと純粋な識別など様々なSGTIN-64表現間でのデコード、エンコードおよび翻訳を定義します。EPCglobal TDTスキーマの詳細は、EPCglobal Tag Data Translationの仕様を参照してください。

TDT仕様の主な機能は、同じXMLスキーマを使用してすべてのEPCスキームを定義できることです。この方法により、RFIDアプリケーションがパーサー、エンコーダ、およびトランスレータの記述に使用するEPCメタデータを定義する標準的な方法が作成されます。TDT仕様に従ってアプリケーションを記述した場合、そのアプリケーションから一連のEPCタグ・スキームの更新と、メタデータに従ったアクションの変更が可能である必要があります。

Oracle Databaseメタデータ構造はTDT標準と類似していますが、同一なものではありません。EPCglobal TDT仕様に合せるには、Oracle RFIDパッケージですべてのTDT互換スキームを取り込み、定義された汎用のOracle Databaseメタデータにシームレスに翻訳できる必要があります。詳細は、表22-4EPC_TO_ORACLE関数を参照してください。

フィールドからのタグ表現の再構築、つまり、タグ・データの事前定義済の表現へのエンコーディングは、MGD_ID.format関数を使用して簡単に実行できます。同様に、タグ表現のMGD_IDオブジェクトへのデコーディングおよびこれらのオブジェクトのタグ表現へのエンコーディングも、MGDID.translate関数を使用して簡単に実行できます。詳細は、表22-3FORMATメンバー関数およびTRANSLATE静的関数を参照してください。

EPCglobal TDT標準は強力で拡張性も高いため、Oracle RFID標準メタデータはTDT仕様と密接に関連しています。実際のOracle Database TDT XMLスキーマは、22.8項を参照してください。開発者は、このOracle Database TDT XMLスキーマを参照し、独自のタグ構造を定義できます。

図22-2に、Oracle Database Tag Data Translationマークアップ言語スキーマ図を示します。

図22-2 Oracle Database Tag Data Translationマークアップ言語スキーマ図

図22-2の説明は次にあります。
「図22-2 Oracle Database Tag Data Translationマークアップ言語スキーマ図」の説明

タグ・データ翻訳XMLのトップレベル要素は「スキーム」です。それぞれのスキームは、様々なタグ・エンコーディング表現またはレベルを定義します。SGTIN-64およびGID-96は、タグ・コード体系の例です。また、BINARYまたはPURE_IDENTITYは、これらのスキーム内のレベルの例です。各レベルには、様々な表現のフィールドへの解析方法を定義した一連のオプション、および追加の作業が必要なフィールドからの値の導出方法を定義したルールがあります。ルールには、外部表参照または解析された他のフィールドとの連結などがあります。詳細は、EPCglobalのタグ翻訳仕様を参照してください。

22.2 識別コード・パッケージの概要

識別コード・パッケージは、現在のRFIDタグとサポートされるエンコーディング・タイプのEPCビット・エンコーディングの標準ファミリ、および現在のEPC標準には含まれていない進化するタグ・エンコーディングの両方をサポートする、拡張可能なフレームワークを提供します。

識別コード・パッケージは次のADTを定義します。

  • MGD_ID: 次の項目を定義します(詳細は、表22-2MGD_ID ADTを参照してください)。

    • category_idおよびcomponentsの2つの属性。

    • RFIDタグを表現する識別コード・タイプ・オブジェクトを構成するための4つのMGD_IDコンストラクタ関数。

    • これらのADTを操作する一連のメンバー・サブプログラム。

    22.3項は、これらのADTとメンバー・ファンクションの使用方法について説明しています。

    22.4項および22.5項は、このようなADTと一連のユーティリティ・サブプログラムの参照情報について説明しています。参照情報の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

  • MGD_ID_COMPONENT - コンポーネント名を識別するcomp_nameと、コンポーネント値を識別するcomp_valueの2つの属性を定義します。

  • MGD_ID_COMPONENT_VARRAY: MGD_IDCOMPONENT型の要素を最大128個格納できる配列型を定義します。この配列型は、コンポーネントのリストがある識別コード・タイプ・オブジェクトを作成するための2つのコンストラクタ関数で使用します。

識別コード・パッケージは、事前定義済のEPC_ENCODING_CATEGORY encoding_category属性定義とサポートされるエンコーディング・タイプのビット・エンコーディング構造を提供することで、EPC仕様バージョン1.1をサポートします。この情報は、提供されるエンコーディング・メタデータ・ビューMGD_USR_ID_CATEGORYMGD_USR_ID_SCHEME、読取り専用ビューMGD_ID_CATEGORYMGD_ID_SCHEME、およびその基礎となる表MGD_ID_CATEGORY_TABMGD_ID_SCHEME_TABMGD_ID_XML_VALIDATORでメタ情報として格納されます。詳細は、次の項およびファイルを参照してください。

  • 22.7項は、EPC仕様バージョン1.1の製品コードおよびコード体系ファミリについて説明しています。

  • 22.6項では、識別コード・メタデータ表とビュー、および様々なRFIDタグを解釈するために識別コード・パッケージによってメタデータがどのように使用されるかについて説明しています。

  • mgdmeta.sqlファイルは、EPC_ENCODING_CATEGORYカテゴリおよびそれぞれの特定のコード体系のメタ表データを示します。

何千ものRFIDタグをユーザー表のMGD_ID列型の列に格納した後に、この列に索引を作成することで、問合せのパフォーマンスが向上します。詳細は、次の項を参照してください。

  • 22.3.2項は、MGD_ID ADTのメンバー・ファンクションを使用したファンクション索引またはビットマップ・ファンクション索引の作成について説明しています。

識別コード・パッケージは様々なユーティリティ・サブプログラムから構成されるユーティリティ・パッケージを提供します。詳細は、次の項を参照してください。

  • 22.4項および22.5項は、各メンバー・サブプログラムについて説明しています。プロキシ情報の設定および削除には、プロキシ・ユーティリティを使用します。メタデータ・ユーティリティは、カテゴリIDの取得、カテゴリのタグ・スキームのリフレッシュ、カテゴリのタグ・スキームの削除、およびタグ・スキームの検証に使用できます。変換ユーティリティは、標準のEPCglobal Tag Data Translation(TDT)のOracle Database TDTファイルへの翻訳に使用します。

識別コード・パッケージは拡張可能であり、新規または進化するRFIDタグ固有の識別コード・タイプを独自に作成できます。エンコーディング・タイプに応じて、識別コード・タイプ、catagory_id属性値、およびコンポーネント構造が定義可能です。詳細は、次の項を参照してください。

  • 22.3.4.1項では、独自の識別コードの作成方法について説明しています。その手順では、まずエンコーディング・カテゴリを登録し、その後にエンコーディング・カテゴリに関連するスキームを登録します。

  • 22.6項は、識別コード・メタ表とビューの構造、およびメタデータ表とビューにメタ情報を格納して情報を登録する方法について説明しています。

22.3 識別コード・パッケージの使用

内容は次のとおりです。

22.3.1 MGD_ID ADTを使用したOracle DatabaseへのRFIDタグの格納

内容は次のとおりです。

22.3.1.1 MGD_ID列型を使用した表の作成と、列へのEPCタグ・エンコーディングの格納

RFIDタグを表現する列型としてMGD_IDを使用し、表を作成できます。次に例を示します。

例1.MGD_ID列型の使用

CREATE TABLE Warehouse_info (
             Code          MGD_ID,
             Arrival_time  TIMESTAMP, 
             Location      VARCHAR2(256);
             ...); 

SQL*Plusコマンド:

describe warehouse_info;

結果:

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
CODE                                      NOT NULL MGDSYS.MGD_ID
ARRIVAL_TIME                                       TIMESTAMP(6)
LOCATION                                           VARCHAR2(256)

22.3.1.2 RFIDタグを表現するMGD_IDオブジェクトの構成

MGD_IDオブジェクトを構成するには、複数の方法があります。

22.3.1.2.1 MGD_IDオブジェクト(SGTIN-64)の構成、およびカテゴリIDとコンポーネントのリストの受渡し

RFIDタグがEPC標準に準拠している場合、そのカテゴリIDとコンポーネントのリストを使用してMGD_IDオブジェクトを作成できます。次に例を示します。

call DBMS_MGD_ID_UTL.set_proxy('example.com', '80');
call DBMS_MGD_ID_UTL.refresh_category('1');
select MGD_ID ('1', 
               MGD_ID_COMPONENT_VARRAY(
               MGD_ID_COMPONENT('companyprefix','0037000'),
               MGD_ID_COMPONENT('itemref','030241'),
               MGD_ID_COMPONENT('serial','1041970'),
               MGD_ID_COMPONENT('schemes','SGTIN-64')
              )
             ) from DUAL;
call DBMS_MGD_ID_UTL.remove_proxy();

@constructor11.sql
.
.
.
MGD_ID ('1', MGD_ID_COMPONENT_VARRAY
        (MGD_ID_COMPONENT('companyprefix', '0037000'),
        MGD_ID_COMPONENT('itemref', '030241'), 
        MGD_ID_COMPONENT('serial', '1041970'),
        MGD_ID_COMPONENT('schemes', 'SGTIN-64')))
.
.
.
22.3.1.2.2 MGD_IDオブジェクト(SGTIN-64)の構成、およびカテゴリID、タグ識別子と追加の必須パラメータのリストの受渡し

MGD_IDオブジェクトの作成に追加の必須パラメータのリストが存在する場合、このコンストラクタを使用します。次に例を示します。

call DBMS_MGD_ID_UTL.set_proxy('example.com', '80');
call DBMS_MGD_ID_UTL.refresh_category('1');
select MGD_ID('1', 
              'urn:epc:id:sgtin:0037000.030241.1041970', 
              'filter=3;scheme=SGTIN-64') from DUAL;
call DBMS_MGD_ID_UTL.remove_proxy();


@constructor22.sql
.
.
.
MGD_ID('1', MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('filter', '3'), 
       MGD_ID_COMPONENT('schemes', 'SGTIN-64'), 
       MGD_ID_COMPONENT('companyprefixlength', '7'), 
       MGD_ID_COMPONENT('companyprefix', '0037000'), 
       MGD_ID_COMPONENT('scheme', 'SGTIN-64'), 
       MGD_ID_COMPONENT('serial', '1041970'), 
       MGD_ID_COMPONENT('itemref', '030241')))
.
.
.
22.3.1.2.3 MGD_IDオブジェクト(SGTIN-64)の構成、およびカテゴリ名、カテゴリ・バージョン(NULLの場合、最新のバージョンを使用)とコンポーネントのリストの受渡し

カテゴリIDとコンポーネントのリストとともにカテゴリ・バージョンを指定する必要がある場合、このコンストラクタを使用します。次に例を示します。

call DBMS_MGD_ID_UTL.set_proxy('example.com', '80');
call DBMS_MGD_ID_UTL.refresh_category
  (DBMS_MGD_ID_UTL.get_category_id('EPC', NULL));
select MGD_ID('EPC', NULL, 
              MGD_ID_COMPONENT_VARRAY(
              MGD_ID_COMPONENT('companyprefix','0037000'),
              MGD_ID_COMPONENT('itemref','030241'),
              MGD_ID_COMPONENT('serial','1041970'),
              MGD_ID_COMPONENT('schemes','SGTIN-64')
             )
            ) from DUAL;
call DBMS_MGD_ID_UTL.remove_proxy();

@constructor33.sql
.
.
.
MGD_ID('1', MGD_ID_COMPONENT_VARRAY
             (MGD_ID_COMPONENT('companyprefix', '0037000'),
              MGD_ID_COMPONENT('itemref', '030241'), 
              MGD_ID_COMPONENT('serial', '1041970'),
              MGD_ID_COMPONENT('schemes', 'SGTIN-64')
             )
       )
.
.
.
22.3.1.2.4 MGD_IDオブジェクト(SGTIN-64)の構成、およびカテゴリ名、カテゴリ・バージョン、タグ識別子と追加の必須パラメータのリストの受渡し

カテゴリ・バージョンと追加のパラメータのリストが必要な場合、このコンストラクタを使用します。

call DBMS_MGD_ID_UTL.set_proxy('example.com', '80');
call DBMS_MGD_ID_UTL.refresh_category
  (DBMS_MGD_ID_UTL.get_category_id('EPC', NULL));
select MGD_ID('EPC', NULL,
              'urn:epc:id:sgtin:0037000.030241.1041970', 
              'filter=3;scheme=SGTIN-64') from DUAL;
call DBMS_MGD_ID_UTL.remove_proxy();

@constructor44.sql
.
.
.
MGD_ID('1', MGD_ID_COMPONENT_VARRAY
       (MGD_ID_COMPONENT('filter', '3'),
        MGD_ID_COMPONENT('schemes', 'SGTIN-64'), 
        MGD_ID_COMPONENT('companyprefixlength', '7'), 
        MGD_ID_COMPONENT('companyprefix', '0037000'), 
        MGD_ID_COMPONENT('scheme', 'SGTIN-64'), 
        MGD_ID_COMPONENT('serial', '1041970'), 
        MGD_ID_COMPONENT('itemref', '030241')
       )
      )
.
.
.

22.3.1.3 データベース表へのMGD_IDオブジェクトの挿入

次の例は、表に各MGD_IDオブジェクトと追加の列値を挿入し、WAREHOUSE_INFO表を移入する方法を示しています。

call DBMS_MGD_ID_UTL.set_proxy('example.com', '80');

call DBMS_MGD_ID_UTL.refresh_category
  (DBMS_MGD_ID_UTL.get_category_id('EPC', NULL));

INSERT INTO WAREHOUSE_INFO (code, arrival_time, location)
   values (MGDSYS.MGD_ID ('EPC',
                          NULL,
                          'urn:epc:id:sgtin:0037000.030241.1041970',
                          null
                         ),
           SYSDATE,
           'SHELF_123');

INSERT INTO WAREHOUSE_INFO (code, arrival_time, location)
  values (MGDSYS.MGD_ID ('EPC',
                         NULL,
                         'urn:epc:id:sgtin:0037000.053021.1012353',
                         null
                        ),
          SYSDATE,
          'SHELF_456');
INSERT INTO WAREHOUSE_INFO (code, arrival_time, location)
  values (MGDSYS.MGD_ID ('EPC',
                         NULL,
                         'urn:epc:id:sgtin:0037000.020140.10174832',
                         null
                        ),
          SYSDATE,
          'SHELF_1034');

COMMITT;
call DBMS_MGD_ID_UTL.remove_proxy();

22.3.1.4 MGD_ID列型の問合せ

MGD_ID列型を問い合せるには、3つの方法があります。

  • MGD_ID列型を問い合せます。アイテム参照が030241であるすべてのアイテムを検索します。

    SELECT location, wi.code.get_component('itemref') as itemref, 
                     wi.code.get_component('serial') as serial 
    FROM warehouse_info wi WHERE wi.code.get_component('itemref') = '030241';
    
    LOCATION       |ITEMREF   |SERIAL
    ---------------|----------|----------
    SHELF_123      |030241    |1041970
    
  • MGD_ID ADTのメンバー関数を使用して問い合せます。表内のすべてのRFIDタグの純粋な識別表現を選択します。

    SELECT wi.code.format(null,'PURE_IDENTITY')
       as PURE_IDENTITY FROM warehouse_info wi;
    
    PURE_IDENTITY
    -------------------------------------------------------------------------------
    urn:epc:id:sgtin:0037000.030241.1041970
    urn:epc:id:gid:0037000.053021.1012353
    urn:epc:id:sgtin:0037000.020140.10174832
    

    詳細は、22.3.3.1項を参照してください。メンバー・ファンクションのリストは表22-3を参照してください。

22.3.2 MGD_ID列型のメンバー・ファンクションを使用したファンクション索引の構築

get_componentメンバー関数またはそのバリエーションの簡易関数を使用するファンクション索引を作成し、RFIDタグの特定のコンポーネントの問合せのパフォーマンスを改善できます。次に例を示します。

CREATE INDEX warehouseinfo_idx2
  on warehouse_info(code.get_component('itemref'));

また、get_componentメンバー関数またはそのバリエーションの簡易関数を使用するビットマップ・ファンクション索引を作成し、RFIDタグの特定のコンポーネントの問合せのパフォーマンスも改善できます。次に例を示します。

CREATE BITMAP INDEX warehouseinfo_idx3
  on warehouse_info(code.get_component('serial'));

22.3.3 MGD_ID ADTファンクションの使用

MGD_ID ADTには、次のADTで動作するメンバー・サブプログラムが含まれます。詳細は、表22-2MGD_ID_COMPONENTMGD_ID_COMPONENT_VARRAYおよびMGD_ID ADTの参照情報を参照してください。MGD_ID ADTの定義およびそのメンバー・サブプログラムについては、mgdtyp.sqlファイルを参照してください。

内容は次のとおりです。

22.3.3.1 MGD_IDオブジェクトとget_componentファンクションの使用

get_component関数の定義は、次のとおりです。

MEMBER FUNCTION get_component(component_name IN VARCHAR2)
   RETURN VARCHAR2 DETERMINISTIC,

識別コードの各コンポーネントには名前が付けられています。この名前は、コード・タイプを登録する際に定義されます。識別コード・タイプの登録方法の詳細は、22.3.4項を参照してください。

get_component関数は、コンポーネントの名前であるcomponent_nameをパラメータとして取り、識別コードを解析するためにメタデータ表内に登録されたメタデータを使用し、component_nameの名前とコンポーネントを戻します。

get_component関数はSQL問合せで使用できます。たとえば、itemrefという名前のコンポーネントのコーディング済アイテムの現在の場所の検索、つまり、03024のアイテムを参照するすべてのアイテムを検索するとします。コード・タグがitemrefを1つのコンポーネントとしてエンコーディングしているため、次のSQL問合せを使用できます。

SELECT location,
       w.code.get_component('itemref') as itemref,
       w.code.get_component('serial')  as serial
FROM   warehouse_info w
       WHERE  w.code.get_component('itemref')  = '030241';

LOCATION       |ITEMREF   |SERIAL
---------------|----------|----------
SHELF_123      |030241    |1041970

他のメンバー関数のリストは、表22-3を参照してください。

22.3.3.2 標準的な表現からのタグ・データの解析

RFIDリーダーは、タグに格納されているビット列を読み取ります。タグ・データと、リーダーID、タイムスタンプなどのその他の情報は、まずエッジ・サーバーで処理および正規化され、事前にフィルタリングされます。その後、多くのアプリケーション・シナリオでは、情報は永続的に格納され後で取得される必要があります。表22-1で示したように、Oracle DatabaseではEPC標準で定義されたコード表現体系が事前に登録されているため、様々なEPCタグのコード構造表現を理解します。これにより、Oracle DatabaseはすべてのEPCコード体系を理解し、様々なタグ表現をフィールドに解析できます。ユーザーは、他のエンコーディング・テクノロジを使用した識別コードの独自のコーディング構造を登録することもできます。このように、システムは拡張可能です。

22.1項で示したとおり、それぞれのEPCglobalタグ・スキーム(GID-96、SGTIN-64、SGTIN-96など)には様々な表現があります。最も頻繁に使用されるのは、BINARYTAG_URIおよびPURE_IDENTITYです。

これらの表現にはタグに関するすべての情報が含まれているものがありますが(BINARYおよびTAG_URI)、他の表現には一部の情報のみが含まれています(PURE_IDENTITY)。そのため、タグをTAG_URIからPURE_IDENTITY表現へ翻訳することはできますが、フィルタ値などの詳細情報がないかぎり、逆への翻訳(PURE_IDENTITYからTAG_URIへ)は実行できません。

MGD_IDコンストラクタの1つは、カテゴリ名(EPCなど)、カテゴリ・バージョン、タグ識別子(EPCの場合、以前記述した表現に含まれる識別子である必要があります)、およびタグ表現の解析に必要な追加のパラメータ・リストの4つのフィールドを使用します。たとえば、次のコードはBINARY表現からMGD_IDオブジェクトを作成します。

SELECT MGD_ID 
   ('EPC',
    null,
    '1001100000000000001000001110110001000010000011111110011000110010',
    null
   )
   AS NEW_RFID_CODE FROM DUAL;

NEW_RFID_CODE(CATEGORY_ID, COMPONENTS(NAME, VALUE))
--------------------------------------------------------------------------------
MGD_ID ('1', 
        MGD_ID_COMPONENT_VARRAY(MGD_ID_COMPONENT('filter', '3'), 
        MGD_ID_COMPONENT('schemes', 'SGTIN-64'), 
        MGD_ID_COMPONENT('companyprefixlength', '7'), 
        MGD_ID_COMPONENT('companyprefix', '0037000'), 
        MGD_ID_COMPONENT('companyprefixindex', '1'), 
        MGD_ID_COMPONENT('serial', '1041970'), 
        MGD_ID_COMPONENT('itemref', '030241')
       )
      )

たとえば、次のようにフィルタ値を追加し、タグのTAG_URI表現からコールが実行された場合、同一のオブジェクトが作成されます。

SELECT MGD_ID ('EPC',
                null,
                'urn:epc:tag:sgtin-64:3.0037000.030241.1041970',
                null
              )
  as NEW_RFID_CODE FROM DUAL;

NEW_RFID_CODE(CATEGORY_ID, COMPONENTS(NAME, VALUE))
--------------------------------------------------------------------------------
MGD_ID ('1', 
        MGD_ID_COMPONENT_VARRAY (
         ( MGD_ID_COMPONENT('filter', '3'), 
           MGD_ID_COMPONENT('schemes', 'SGTIN-64'), 
           MGD_ID_COMPONENT('companyprefixlength', '7'), 
           MGD_ID_COMPONENT('companyprefix', '0037000'), 
           MGD_ID_COMPONENT('serial', '1041970'), 
           MGD_ID_COMPONENT('itemref', '030241')
         )
       )

22.3.3.3 フィールドからのタグ表現の再構成

識別コード・パッケージのその他の便利な機能として、タグ・データを事前定義済の表現にエンコーディングできます。たとえば、倉庫からある在庫を小売業者に送る前に、どの在庫を小売業者に送るかを記述した請求書を送る必要があるとします。請求書は、倉庫から送る純粋な識別URIのリストとなります。WAREHOUSE_INFO表のすべての在庫を送る場合、次の例では必要なURIを構成します。

SELECT wi.code.format (null,'PURE_IDENTITY') 
  as PURE_IDENTITY FROM warehouse_info wi;

PURE_IDENTITY
--------------------------------------------------------------------------------
urn:epc:id:sgtin:0037000.030241.1041970
urn:epc:id:gid:0037000.053021.1012353
urn:epc:id:sgtin:0037000.020140.10174832

22.3.3.4 タグ表現間の翻訳

識別コード・パッケージは、タグ表現をMGD_IDオブジェクトにデコードし、これらのオブジェクトをタグ表現にエンコードできます。MGD_ID.translate関数を使用して、この2つの手順を1つにまとめることができます。静的な翻訳により、RFIDタグを1つの表現から別の表現に変換できます。次に例を示します。

SELECT MGD_ID.translate ('EPC',
                         null,
                         'urn:epc:id:sgtin:0037000.030241.1041970',
                         'filter=3;scheme=SGTIN-64',
                         'BINARY'
                        )
  as BINARY FROM DUAL;

BINARY
--------------------------------------------------------------------------------
1001100000000000001000001110110001000010000011111110011000110010

この例では、バイナリ表現には純粋な識別表現より多くの情報が含まれます。特に、バイナリ表現にはフィルタ値も含まれます。この場合、SGTIN-64とSGTIN-96の区別にスキーム値も指定する必要があります。そのため、翻訳コールを正常に実行するためには、ファンクション・コールにおいて欠落したフィルタのパラメータ情報を提供し、スキーム名を指定する必要があります。

22.3.4 識別コードのカテゴリの定義と既存のカテゴリへのコード体系の追加

内容は次のとおりです。

22.3.4.1 識別コードのカテゴリの作成

EPCglobal TDT標準は強力で拡張性も高いため、Oracle Database RFID標準メタデータはTDT仕様と密接に関連しています。そのため、識別コード・パッケージは拡張可能であり、汎用的なメタデータを使用して独自のカテゴリとタグ構造を作成できます。識別コードのカテゴリを作成するには、DBMS_MGD_ID_UTIL.create_category関数を使用します。

たとえば、CONTRACTOR_TAGEMPLOYEE_TAGの2つの型のタグがあるMGD_SAMPLE_CATEGORYというカテゴリを作成するとします。このカテゴリと2つのメタデータ・スキームを使用する会社では、正社員と契約社員に異なるアクセス権限を付与する必要がある場合があります。そのため、セキュリティ・ソフトウェアはRFIDリーダーにおいて2つの権限の違いを迅速に識別できる必要があります。次のスクリプトはMGD_SAMPLE_CATEGORYというカテゴリをカテゴリ・バージョン1.0で作成します。組織名はOracle、URIはhttp://www.oracle.com/mgd/sampleとなります。22.3.4.2項の例を参照してください。

22.3.4.2 新規作成したカテゴリへの2つのメタデータ・スキームの追加

続いて、次のようなCONTRACTOR_TAGメタデータ・スキームを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<TagDataTranslation version="0.04" date="2005-04-18T16:05:00Z" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
                    xmlns="oracle.mgd.idcode">
 <scheme name="CONTRACTOR_TAG" optionKey="1" xmlns="">
  <level type="URI" prefixMatch="mycompany.contractor.">
   <option optionKey="1" pattern="mycompany.contractor.([0-9]*).([0-9]*)" 
           grammar="''mycompany.contractor.'' contractorID ''.'' divisionID">
    <field seq="1" characterSet="[0-9]*" name="contractorID"/>
    <field seq="2" characterSet="[0-9]*" name="divisionID"/>
   </option>
  </level>
  <level type="BINARY" prefixMatch="11">
   <option optionKey="1" pattern="11([01]{7})([01]{6})" 
           grammar="''11'' contractorID divisionID ">
    <field seq="1" characterSet="[01]*" name="contractorID"/>
    <field seq="2" characterSet="[01]*" name="divisionID"/>
   </option>
  </level>
 </scheme>
</TagDataTranslation>

CONTRACTOR_TAGスキームには、2つのエンコーディング・レベル、つまり2つのタグ表現方法が含まれます。最初のレベルはURI、2つ目のレベルはBINARYです。URI表現は、接頭辞「mycompany.contractor.」で始まり、ピリオドで区切られた2つの数値フィールドが続きます。2つのフィールドの名前はcontractorIDdivisionIDです。オプション・タグのパターン・フィールドはタグURI表現の解析構造を定義します。grammarフィールドはURI表現の再構成方法を定義します。BINARY表現も同じ方法で理解できます。この表現は接頭辞「01」で始まり、同じ2つのフィールドcontractorIDdivisionIDが続きます。ここでは、それぞれバイナリ形式となります。このXMLメタデータ構造を指定すると、contractorタグはURI表現およびBINARY表現からデコードされ、結果のフィールドをこれらの表現のいずれかに再度エンコードできます。

EMPLOYEE_TAGスキームも同様に定義され、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<TagDataTranslation version="0.04" date="2005-04-18T16:05:00Z" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
                    xmlns="oracle.mgd.idcode">
 <scheme name="EMPLOYEE_TAG" optionKey="1" xmlns="">
  <level type="URI" prefixMatch="mycompany.employee.">
   <option optionKey="1" pattern="mycompany.employee.([0-9]*).([0-9]*)" 
           grammar="''mycompany.employee.'' employeeID ''.'' divisionID">
    <field seq="1" characterSet="[0-9]*" name="employeeID"/>
    <field seq="2" characterSet="[0-9]*" name="divisionID"/>
   </option>
  </level>
  <level type="BINARY" prefixMatch="01">
   <option optionKey="1" pattern="01([01]{7})([01]{6})" 
           grammar="''01'' employeeID divisionID ">
    <field seq="1" characterSet="[01]*" name="employeeID"/>
    <field seq="2" characterSet="[01]*" name="divisionID"/>
   </option>
  </level>
 </scheme>
</TagDataTranslation>;

前に作成したカテゴリIDにこれらのスキームを追加するには、DBMS_MGD_ID_UTIL.add_scheme関数を使用します。

次のスクリプトは、MGD_SAMPLE_CATEGORYカテゴリの作成、contractorスキームとemployeeスキームのMGD_SAMPLE_CATEGORYカテゴリへの追加、MGD_SAMPLE_CATEGORYスキームの検証、contractorスキームとemployeeスキームのタグ翻訳のテストを実行します。その後、contractorスキームを削除し、contractorスキームのタグ翻訳をテストします。削除したcontractorスキームについては、予期した例外が戻されることを確認します。employeeスキームの翻訳をテストし、予期した値が返されることを確認してからMGD_SAMPLE_CATEGORYカテゴリを削除します。

--contents of add_scheme2.sql
SET LINESIZE 160
CALL DBMS_MGD_ID_UTL.set_proxy('example.com', '80');
---------------------------------------------------------------------
---CREATE CATEGORY, ADD_SCHEME, REMOVE_SCHEME, REMOVE_CATEGORY-------
---------------------------------------------------------------------
DECLARE
  amt          NUMBER;
  buf          VARCHAR2(32767);
  pos          NUMBER;
  tdt_xml      CLOB;
  validate_tdtxml VARCHAR2(1042);
  category_id  VARCHAR2(256);
BEGIN
  -- remove the testing category if it exists
  DBMS_MGD_ID_UTL.remove_category('MGD_SAMPLE_CATEGORY', '1.0');
  -- create the testing category 'MGD_SAMPLE_CATEGORY', version 1.0
  category_id := DBMS_MGD_ID_UTL.CREATE_CATEGORY('MGD_SAMPLE_CATEGORY', '1.0', 'Oracle', 
'http://www.oracle.com/mgd/sample');
  -- add contractor scheme to the category
  DBMS_LOB.CREATETEMPORARY(tdt_xml, true);
  DBMS_LOB.OPEN(tdt_xml, DBMS_LOB.LOB_READWRITE);
 
  buf := '<?xml version="1.0" encoding="UTF-8"?>
<TagDataTranslation version="0.04" date="2005-04-18T16:05:00Z" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
                    xmlns="oracle.mgd.idcode">
 <scheme name="CONTRACTOR_TAG" optionKey="1" xmlns="">
  <level type="URI" prefixMatch="mycompany.contractor.">
   <option optionKey="1" pattern="mycompany.contractor.([0-9]*).([0-9]*)" 
           grammar="''mycompany.contractor.'' contractorID ''.'' divisionID">
    <field seq="1" characterSet="[0-9]*" name="contractorID"/>
    <field seq="2" characterSet="[0-9]*" name="divisionID"/>
   </option>
  </level>
  <level type="BINARY" prefixMatch="11">
   <option optionKey="1" pattern="11([01]{7})([01]{6})" 
           grammar="''11'' contractorID divisionID ">
    <field seq="1" characterSet="[01]*" name="contractorID"/>
    <field seq="2" characterSet="[01]*" name="divisionID"/>
   </option>
  </level>
 </scheme>
</TagDataTranslation>';

  amt := length(buf);
  pos := 1;
  DBMS_LOB.WRITE(tdt_xml, amt, pos, buf);
  DBMS_LOB.CLOSE(tdt_xml);

  DBMS_MGD_ID_UTL.ADD_SCHEME(category_id, tdt_xml);

  -- add employee scheme to the category
  DBMS_LOB.CREATETEMPORARY(tdt_xml, true);
  DBMS_LOB.OPEN(tdt_xml, DBMS_LOB.LOB_READWRITE);
 
  buf := '<?xml version="1.0" encoding="UTF-8"?>
<TagDataTranslation version="0.04" date="2005-04-18T16:05:00Z" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
                    xmlns="oracle.mgd.idcode">
 <scheme name="EMPLOYEE_TAG" optionKey="1" xmlns="">
  <level type="URI" prefixMatch="mycompany.employee.">
   <option optionKey="1" pattern="mycompany.employee.([0-9]*).([0-9]*)" 
           grammar="''mycompany.employee.'' employeeID ''.'' divisionID">
    <field seq="1" characterSet="[0-9]*" name="employeeID"/>
    <field seq="2" characterSet="[0-9]*" name="divisionID"/>
   </option>
  </level>
  <level type="BINARY" prefixMatch="01">
   <option optionKey="1" pattern="01([01]{7})([01]{6})" 
           grammar="''01'' employeeID divisionID ">
    <field seq="1" characterSet="[01]*" name="employeeID"/>
    <field seq="2" characterSet="[01]*" name="divisionID"/>
   </option>
  </level>
 </scheme>
</TagDataTranslation>';

  amt := length(buf);
  pos := 1;
  DBMS_LOB.WRITE(tdt_xml, amt, pos, buf);
  DBMS_LOB.CLOSE(tdt_xml);
  DBMS_MGD_ID_UTL.ADD_SCHEME(category_id, tdt_xml);

  -- validate the scheme
  dbms_output.put_line('Validate the MGD_SAMPLE_CATEGORY Scheme');
  validate_tdtxml := DBMS_MGD_ID_UTL.validate_scheme(tdt_xml);
  dbms_output.put_line(validate_tdtxml);
  dbms_output.put_line('Length of scheme xml is: '||DBMS_LOB.GETLENGTH(tdt_xml));

  -- test tag translation of contractor scheme
  dbms_output.put_line(
    mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                     'mycompany.contractor.123.45', 
                     NULL, 'BINARY'));

  dbms_output.put_line(
    mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                     '111111011101101',
                     NULL, 'URI'));

  -- test tag translation of employee scheme
  dbms_output.put_line(
    mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                     'mycompany.employee.123.45', 
                     NULL, 'BINARY'));

  dbms_output.put_line(
    mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                     '011111011101101',
                     NULL, 'URI'));

  DBMS_MGD_ID_UTL.REMOVE_SCHEME(category_id, 'CONTRACTOR_TAG');

  -- Test tag translation of contractor scheme. Doesn't work any more.
  BEGIN
    dbms_output.put_line(
      mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                       'mycompany.contractor.123.45', 
                       NULL, 'BINARY'));

    dbms_output.put_line(
      mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                       '111111011101101',
                       NULL, 'URI'));
  EXCEPTION 
    WHEN others THEN
      dbms_output.put_line('Contractor tag translation failed: '||SQLERRM);
  END;

  -- Test tag translation of employee scheme. Still works.
  BEGIN
    dbms_output.put_line(
      mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                       'mycompany.employee.123.45', 
                       NULL, 'BINARY'));
    dbms_output.put_line(
      mgd_id.translate('MGD_SAMPLE_CATEGORY', NULL, 
                       '011111011101101',
                       NULL, 'URI'));
  EXCEPTION 
    WHEN others THEN
      dbms_output.put_line('Employee tag translation failed: '||SQLERRM);
  END;

  -- remove the testing category, which also removes all the associated schemes
  DBMS_MGD_ID_UTL.remove_category('MGD_SAMPLE_CATEGORY', '1.0');
END;
/
SHOW ERRORS;
call DBMS_MGD_ID_UTL.remove_proxy();

@add_scheme3.sql
.
.
.
Validate the MGD_SAMPLE_CATEGORY Scheme
EMPLOYEE_TAG;URI,BINARY;divisionID,employeeID
Length of scheme xml is: 933
111111011101101
mycompany.contractor.123.45
011111011101101
mycompany.employee.123.45
Contractor tag translation failed: ORA-55203: Tag data translation level not found
ORA-06512: at "MGDSYS.DBMS_MGD_ID_UTL", line 54
ORA-06512: at "MGDSYS.MGD_ID", line 242
ORA-29532: Java call terminated by uncaught Java
exception: oracle.mgd.idcode.exceptions.TDTLevelNotFound: Matching level not
found for any configured scheme
011111011101101
mycompany.employee.123.45
.
.
.

22.4 識別コード・パッケージ・タイプ

表22-2は識別コード・パッケージADTを示します。

表22-2 識別コード・パッケージADT

ADT名 説明

MGD_ID_COMPONENT ADT

コンポーネントを定義する名前/値ペア属性を指定するデータ型です。

MGD_ID_COMPONENT_VARRAY ADT

データ型を指定します。最大128個のコンポーネントのリストを名前/値属性ペアで指定するデータ型で、識別コード・タイプ・オブジェクトを作成するための2つのコンストラクタ関数で使用されます。

MGD_ID ADT

この識別コードとコンポーネントのリストのコード・カテゴリのカテゴリ識別子を指定する識別コード・タイプを表します。


表22-3MGD_ID ADTのサブプログラムを示します。

MGD_ID ADTで定義されたサブプログラムに渡されるすべての値と名前は、特に記載のないかぎり、大/小文字を区別しません。大/小文字を保持するには、値を二重引用符で囲みます。

表22-3 MGD_ID ADTサブプログラム

サブプログラム 説明

MGD_IDコンストラクタ関数

識別コード・タイプ・オブジェクトMGD_IDを作成し、それ自体を戻します。

FORMATメンバー関数

MGD_IDコンポーネントを指定した場合の識別コードの表現を戻します。

GET_COMPONENTメンバー関数

MGD_IDコンポーネントの値を戻します。

TO_STRINGメンバー関数

category_idパラメータ値とコンポーネントの名前/値属性ペアを連結します。

TRANSLATE静的関数

識別コードの1つのMGD_ID表現を別のMGD_ID表現に翻訳します。


22.5 DBMS_MGD_ID_UTLパッケージ

表22-4DBMS_MGD_ID_UTLパッケージのユーティリティ・プログラムを示します。

MGD_ID ADTで定義されたサブプログラムに渡されるすべての値と名前は、特に記載のないかぎり、大/小文字を区別しません。大/小文字を保持するには、値を二重引用符で囲みます。

表22-4 DBMS_MGD_ID_UTLパッケージ・ユーティリティ・サブプログラム

サブプログラム 説明

ADD_SCHEMEプロシージャ

既存のカテゴリにタグ・データ翻訳スキームを追加します。

CREATE_CATEGORY関数

カテゴリまたはカテゴリのバージョンを作成します。

EPC_TO_ORACLE関数

EPCglobal Tag Data Translation(TDT)XMLをOracle Database Tag Data Translation XMLに変換します。

GET_CATEGORY_ID関数

カテゴリ名とカテゴリ・バージョンを指定した場合、カテゴリIDを戻します。

GET_COMPONENTS関数

指定したスキームのすべての関連するコンポーネント名をセミコロン(;)で区切って戻します。

GET_ENCODINGS関数

指定したスキームのエンコーディング(フォーマット)のリストをセミコロン(;)で区切って戻します。

GET_JAVA_LOGGING_LEVEL関数

現在のJavaのトレース・ロギング・レベルを表す整数を戻します。

GET_PLSQL_LOGGING_LEVEL関数

現在のPL/SQLのトレース・ロギング・レベルを表す整数を戻します。

GET_SCHEME_NAMES関数

指定したカテゴリのスキーム名のリストをセミコロン(;)で区切って戻します。

GET_TDT_XML関数

指定したスキームのOracle Database Tag Data Translation XMLを戻します。

GET_VALIDATOR関数

Oracle Database Tag Data Translationスキーマを戻します。

REFRESH_CATEGORY関数

指定したカテゴリのJavaスタックに関するメタデータ情報をリフレッシュします。

REMOVE_CATEORY関数

関連するすべてのTDT XMLを含むカテゴリを削除します。

REMOVE_PROXYプロシージャ

プロキシ・サーバーのホストとポートの設定を解除します。

REMOVE_SCHEMEプロシージャ

カテゴリのタグ・スキームを削除します。

SET_JAVA_LOGGING_LEVELプロシージャ

Javaのロギング・レベルを設定します。

SET_PLSQL_LOGGING_LEVELプロシージャ

PL/SQLのトレース・ロギング・レベルを設定します。

SET_PROXYプロシージャ

インターネット・アクセス用に、プロキシ・サーバーのホストとポートを設定します。

VALIDATE_SCHEME関数

入力タグ・データ翻訳XMLをOracle Database Tag Data Translationスキーマで検証します。


22.6 識別コード・メタデータ表およびビュー

この項では、識別コード・メタデータ表とビュー、および様々なRFIDタグを解釈するために識別コード・パッケージによってメタデータがどのように使用されるかについて説明します。これらのメタ表ビュー、およびトリガーの作成は、識別コード・パッケージのインストール時に自動的に実行されます。

エンコーディング・メタデータ・ビューはエンコーディング・カテゴリとスキームの格納に使用します。アプリケーション開発者は、自身の識別コードのメタ情報をこれらのビューに挿入できます。MGD_ID ADTは、エンコーディングのメタデータがメタ表に格納されているかぎり、そのエンコーディングを解釈するように設計されています。アプリケーション開発者がEPC仕様バージョン1.1で定義されたエンコーディングのみを使用する場合、EPC仕様バージョン1.1で指定された製品コードは事前定義済のため、メタ表について考慮する必要はありません。

エンコーディング・メタデータ・ビューには次の2種類があります。

  • user_mgd_id_categoryでは、セッション・ユーザーが定義したエンコーディング・カテゴリ情報が格納されます。

  • user_mgd_id_schemeでは、セッション・ユーザーが定義したエンコーディング・タイプ情報が格納されます。

システムで事前定義済のエンコーディング・メタデータとユーザー定義のメタデータを確認するために、次の読取り専用ビューを問い合せることができます。

  • mgd_id_categoryでは、システムまたはセッション・ユーザーが定義したエンコーディング・カテゴリ情報を問い合せることができます。

  • mgd_id_schemeでは、システムまたはセッション・ユーザーが定義したエンコーディング・タイプ情報を問い合せることができます。

前述のビューの基礎となるメタデータ表は、次のとおりです。

  • mgd_id_xml_validator

  • mgd_id_category_tab

  • mgd_id_scheme_tab

識別コード・パッケージのシステム・ユーザー以外は、この表を操作できません。ユーザーは、メタデータ表を直接使用できません。ユーザーは、読取り専用ビューとDBMS_MGD_ID_UTLパッケージに記述されたメタデータ関数を使用する必要があります。


参照:

DBMS_MGD_ID_UTLパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

メタデータ・ビュー定義

表22-5表22-6表22-7および表22-8は、mgdview.sqlファイルで定義したとおり、それぞれMGD_ID_CATEGORYUSER_ID_CATEGORYMGD_ID_SCHMEおよびUSER_MGD_ID_SCHMEのメタデータ・ビュー定義を示します。

表22-5 MGD_ID_CATEGORYメタデータ・ビューの定義と説明

列名 データ型 説明

CATEGORY_ID

NUMBER(4)

カテゴリ識別子

CATEGORY_NAME

VARCHAR2(256)

カテゴリ名

AGENCY

VARCHAR2(256)

カテゴリを定義した組織

VERSION

VARCHAR2(256)

カテゴリ・バージョン

URI

VARCHAR2(256)

カテゴリを示すURI


表22-6 USER_MGD_ID_CATEGORYメタデータ・ビューの定義と説明

列名 データ型 説明

CATEGORY_ID

NUMBER(4)

カテゴリ識別子

CATEGORY_NAME

VARCHAR2(256)

カテゴリ名

AGENCY

VARCHAR2(256)

カテゴリを定義した組織

VERSION

VARCHAR2(256)

カテゴリ・バージョン

URI

VARCHAR2(256)

カテゴリを示すURI


表22-7 MGD_ID_SCHEMEメタデータ・ビューの定義と説明

列名 データ型 説明

CATEGORY_ID

NUMBER(4)

カテゴリ識別子

TYPE_NAME

VARCHAR2(256)

SGTIN-96、GID-96などのコード体系名

TDT_XML

CLOB

このコード体系のタグ・データ翻訳XML

ENCODINGS

VARCHAR2(256)

カンマで区切られたエンコーディング。たとえば、SGTIN-96の場合はLEGACY, TAG_ENCODING, PURE_IDENTITY, BINARY

COMPONENTS

VARCHAR2(1024)

各レベルから抽出し組み合せた関連コンポーネント名。それぞれカンマで区切られます。たとえば、GID-96の場合はobjectclass, generalmanager, serial。


表22-8 USER_MGD_ID_SCHEMEメタデータ・ビューの定義と説明

列名 データ型 説明

CATEGORY_ID

NUMBER(4)

カテゴリ識別子

TYPE_NAME

VARCHAR2(256)

SGTIN-96、GID-96などのコード体系名

TDT_XML

CLOB

このコード体系のタグ・データ翻訳XML

ENCODINGS

VARCHAR2(256)

カンマで区切られたエンコーディング。たとえば、SGTIN-96の場合はLEGACY, TAG_ENCODING, PURE_IDENTITY, BINARY

COMPONENTS

VARCHAR2(1024)

各レベルから抽出し組み合せた関連コンポーネント名。それぞれカンマで区切られます。たとえば、GID-96の場合はobjectclass, generalmanager, serial。


22.7 電子製品コード(EPC)の概念

内容は次のとおりです。

22.7.1 RFIDテクノロジとEPCバージョン1.1コード体系

Radio Frequency Identification(RFID)テクノロジは、直列処理が不要となり、重要なサプライ・チェーン・トランザクションの自動化が可能であるため、供給業者、卸売業者、製造業者、小売業者の間で進化を続けています。電子製品コード(EPC)とは、RFIDタグやその他の手段によりオブジェクトを識別する世界共通の識別スキームであり、新たな基準として幅広い支持を集めています。在庫管理の改善と、サプライ・チェーンの可視性を高めることで、企業における倉庫と配送のコストが削減できます。

標準化されたEPC識別子は、様々な業界のニーズに応えるよう設計されたメタコード体系です。その結果、EPCはすべてのEPC準拠タグで一意となるような一連のコード体系および手段を表すようになりました。EPCバージョン1.1には、次の固有のコード体系が含まれます。

  • 一般ID(GID)

  • EAN.UCC Global Trade Item Number(GTIN)のシリアル化バージョン

  • EAN.UCC Serial Shipping Container Code(SSCC)

  • EAN.UCC Global Location Number(GLN)

  • EAN.UCC Global Returnable Asset Identifier(GRAI)

  • EAN.UCC Global Individual Asset Identifier(GIAI)

RFIDアプリケーションは、大量のEPCデータをデータベースに格納する必要があります。EPCデータを効率的に使用するには、データベース側でEPCデータの異なるコード体系を認識する必要もあります。

EPCは新たな基準です。そのため、様々な業界で使用されている番号付けのスキームをすべて網羅しておらず、EPCバージョン1.0からEPCバージョン1.1への変更からも明らかであるように、EPC自体が現在も進化しています。

識別コード・パッケージにより、Oracle DatabaseでEPCコード体系を認識できるようになります。これにより、Oracle DatabaseにおいてEPCデータの効率的な記憶域およびコンポーネント・レベルの取得が可能になるのみではなく、EPCデータのエンコーディングとデコーディング、およびビット・エンコーディングとURIエンコーディング間の変換をサポートする機能を持つようになります。

識別コード・パッケージは、開発者がEPC標準に含まれていない自分のコード体系を定義する拡張可能なフレームワークを提供します。この拡張機能により、Oracle Databaseは進化する将来のEPC標準にも対応可能となります。

この章では、EPCを含む様々な製品コードのOracle Databaseでの格納、取得、エンコーディングおよびデコーディングの要件について説明し、識別コード・パッケージ・ソリューションがデータ型、メタデータ表およびPL/SQLパッケージを提供することで、これらの要件をどのように満たしているかについて説明します。

22.7.2 製品コードの概念と現在の使用

この項では、次の製品コードについて説明します。

22.7.2.1 電子製品コード(EPC)

電子製品コード(tm)(EPC(tm))は、Radio Frequency Identification(RFID)タグおよびその他の手段を使用して物理オブジェクトを世界的に識別するための識別スキームです。標準のEPCデータは、個別のオブジェクトを一意に識別するEPC(またはEPC識別子)およびEPCタグを効果的かつ効率的に読み取る必要がある場合はオプションのフィルタ値で構成されています。この標準のデータに加え、EPCタグの特定のクラスでは、ユーザー定義データも使用できます。

EPC識別子は、既存のコード体系(可能な場合)の対処と、必要に応じたスキームの定義により、様々な業界のニーズをサポートするために設計されたメタコード体系です。これらのコード体系は、特定の業界または業界グループのドメインでオブジェクト識別子を提供していることを示すため、ドメインIDと呼ばれます。これにより、EPCは一連のコード体系(または「ネームスペース」)を表し、すべてのEPC準拠タグで一意の手段となります。

EPCglobal EPC Data Standards Version 1.1では、EPCの抽象的な内容と、RFIDタグ、インターネットURIおよびその他の表現の形式における具体的な認識を定義します。EPCバージョン1.1では、特定のコード体系には、汎用識別子(GID)、EAN.UCC Global Trade Item Number(GTIN®)のシリアル化バージョン、EAN.UCC Serial Shipping Container Code(SSCC®)、EAN.UCC Global Location Number(GLN®)、EAN.UCC Global Returnable Asset Identifier(GRAI®)、EAN.UCC Global Individual Asset Identifier(GIAI®)が含まれます。

22.7.2.1.1 EPCの純粋な識別

EPCの純粋な識別とは、特定の物理エンティティまたは論理エンティティに関連付けられた識別であり、RFタグ、バーコードおよびデータベース・フィールドなどの特定のエンコーディング媒体に依存しません。そのため、純粋な識別は、エンティティを識別するために使用される抽象的な名前または数値です。純粋な識別は、特定のエンティティを一意に識別するために必要な情報のみで構成されます。

22.7.2.1.2 EPCエンコーディング

EPCエンコーディングは、純粋なエンコーディングと、フィルタ値などの詳細情報を、特定の構文(通常は特定のサイズの値フィールドで構成される)に変換するものです。指定した純粋な識別には、バーコード・エンコーディング、様々なタグ・エンコーディング、および様々なURIエンコーディングなどの多数のエンコーディングが含まれている可能性があります。エンコーディングには、識別以外の追加データ(一部のエンコーディングで使用されるフィルタ値)などが含まれている場合もあり、保持する追加データはコード体系により指定します。

たとえば、EAN.UCCシステムで定義されたSerial Shipping Container Code(SSCC)形式は純粋な識別の例です。EPC-SSCC 96ビット形式にエンコーディングされたSSCCはエンコーディングの一例です。

22.7.2.1.3 EPCタグのビットレベルのエンコーディング

タグのEPCエンコーディングはビット文字列であり、階層化された可変長のヘッダーとそれに続く一連の数値フィールドから構成されます。数値フィールドは、ヘッダー値によってその全体の長さ、構造、機能が完全に決定されます。

22.7.2.1.4 EPC識別URI

EPC識別URIは、統一資源識別子(URI)としての純粋な識別の表現です。

22.7.2.1.5 EPCタグのURIエンコーディング

EPCタグのURIエンコーディングは、urn:epc:tag:sgtin-64:3.0652642.800031.400など、特定のEPCタグのビットレベル・エンコーディングを表現したものです。

22.7.2.1.6 EPCエンコーディング・プロシージャ

EPCエンコーディング・プロシージャは、様々な情報からEPCタグのビットレベル・エンコーディングを生成します。

22.7.2.1.7 EPCデコーディング・プロシージャ

EPCデコーディング・プロシージャは、EPCタグのビットレベル・エンコーディングをEAN.UCCコードに変換します。

22.7.2.2 Global Trade Identification Number (GTIN)およびSerializable Global Trade Identification Number (SGTIN)

Global Trade Identification Number(GTIN)は、EAN.UCCシステム内で、世界規模で取引品目を一意に識別する場合に使用します。Serialized Global Trade Identification Number(SGTIN)はEPC標準バージョン1.1での識別型です。General EAN.UCC Specifications(GenSpec5.0)で定義されているEAN.UCC GTINコードに基づいています。GTINは特定の製品やSKUなど、特定のオブジェクトのクラスを識別します。GTINと一意のシリアル番号を組み合せたものはシリアル化GTIN(SGTIN)と呼ばれます。

22.7.2.3 Serial Shipping Container Code (SSCC)

Serial Shipping Container Code(SSCC)はGeneral EAN.UCC Specifications(GenSpec5.0)で定義されています。EAN.UCCシステム内の物流単位の一意の識別にはSSCCを使用します。SSCCは個別のオブジェクトへの割当てを想定しています。

22.7.2.4 Global Location Number (GLN)およびSerializable Global Location Number (SGLN)

Global Location Number(GLN)はGeneral EAN.UCC Specifications(GenSpec5.0)で定義されています。GLNは、ドックのドアや倉庫のスロットなどの個別の一意の物理的位置、または倉庫全体などの物理的位置の集合を表現できます。また、GLNは業務(発注など)を行う組織のような論理的エンティティも表現できます。GLNと一意のシリアル番号を組み合せたものはシリアル化GLN(SGLN)と呼ばれます。ただし、EAN.UCCコミュニティがGLN拡張の適切な方法を決定するまでは、シリアル番号フィールドは予約済となり使用できません。

22.7.2.5 Global Returnable Asset Identifier (GRAI)

特定の値の輸送装置または再利用可能なパッケージを、リターナブル資産といいます。Global Returnable Asset Identifier(GRAI)は、リターナブル資産を一意に識別するためにGeneral EAN.UCC Specifications(GenSpec5.0)で定義されています。

22.7.2.6 Global Individual Asset Identifier (GIAI)

Global Individual Asset Identifier(GIAI)はGeneral EAN.UCC Specifications(GenSpec5.0)で定義されています。GTINとは異なり、GIAIは個別のオブジェクトへの割当てを想定しています。Global Individual Asset Identifier(GIAI)は、会社の固定在庫の一部であるエンティティを一意に識別します。GIAIは、組織のすべての固定資産を識別します。

22.7.2.7 RFID EPCネットワーク

RFID EPCネットワークは、資産を識別、追跡および検索します。物理オブジェクトは、一意のRFIDが有効となっているEPCで識別します。

22.8 Oracle Database Tag Data Translationスキーマ

Oracle Database Tag Data TranslationスキーマはEPCglobal TDTスキーマに類似していますが、同一なものではありません。Oracle Database TDTの内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="oracle.mgd.idcode" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:tdt="oracle.mgd.idcode" elementFormDefault="qualified" 
       attributeFormDefault="unqualified" version="1.0">

 <xsd:simpleType name="InputFormatList">
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="BINARY"/>
   <xsd:enumeration value="STRING"/>
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="LevelTypeList">
  <xsd:restriction base="xsd:string">
  </xsd:restriction>
 </xsd:simpleType>
 <xsd:simpleType name="SchemeNameList">
  <xsd:restriction base="xsd:string">
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="ModeList">
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="EXTRACT"/>
   <xsd:enumeration value="FORMAT"/>
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="CompactionMethodList">
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="32-bit"/>
   <xsd:enumeration value="16-bit"/>
   <xsd:enumeration value="8-bit"/>
   <xsd:enumeration value="7-bit"/>
   <xsd:enumeration value="6-bit"/>
   <xsd:enumeration value="5-bit"/>
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:simpleType name="PadDirectionList">
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="LEFT"/>
   <xsd:enumeration value="RIGHT"/>
  </xsd:restriction>
 </xsd:simpleType>

 <xsd:complexType name="Field">
  <xsd:attribute name="seq" type="xsd:integer" use="required"/>
  <xsd:attribute name="name" type="xsd:string" use="required"/>
  <xsd:attribute name="bitLength" type="xsd:integer"/>
  <xsd:attribute name="characterSet" type="xsd:string" use="required"/>
  <xsd:attribute name="compaction" type="tdt:CompactionMethodList"/>
  <xsd:attribute name="compression" type="xsd:string"/>
  <xsd:attribute name="padChar" type="xsd:string"/>
  <xsd:attribute name="padDir" type="tdt:PadDirectionList"/>
  <xsd:attribute name="decimalMinimum" type="xsd:long"/>
  <xsd:attribute name="decimalMaximum" type="xsd:long"/>
  <xsd:attribute name="length" type="xsd:integer"/>
 </xsd:complexType>

 <xsd:complexType name="Option">
  <xsd:sequence>
   <xsd:element name="field" type="tdt:Field" maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute name="optionKey" type="xsd:string" use="required"/>
  <xsd:attribute name="pattern" type="xsd:string"/>
  <xsd:attribute name="grammar" type="xsd:string" use="required"/>
 </xsd:complexType>

 <xsd:complexType name="Rule">
  <xsd:attribute name="type" type="tdt:ModeList" use="required"/>
  <xsd:attribute name="inputFormat" type="tdt:InputFormatList" use="required"/>
  <xsd:attribute name="seq" type="xsd:integer" use="required"/>
  <xsd:attribute name="newFieldName" type="xsd:string" use="required"/>
  <xsd:attribute name="characterSet" type="xsd:string" use="required"/>
  <xsd:attribute name="padChar" type="xsd:string"/>
  <xsd:attribute name="padDir" type="tdt:PadDirectionList"/>
  <xsd:attribute name="decimalMinimum" type="xsd:long"/>
  <xsd:attribute name="decimalMaximum" type="xsd:long"/>
  <xsd:attribute name="length" type="xsd:string"/>
  <xsd:attribute name="function" type="xsd:string" use="required"/>
  <xsd:attribute name="tableURI" type="xsd:string"/>
  <xsd:attribute name="tableParams" type="xsd:string"/>
  <xsd:attribute name="tableXPath" type="xsd:string"/>
  <xsd:attribute name="tableSQL" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="Level">
  <xsd:sequence>
   <xsd:element name="option" type="tdt:Option" minOccurs="1" 
     maxOccurs="unbounded"/>
   <xsd:element name="rule" type="tdt:Rule" minOccurs="0" 
     maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute name="type" type="tdt:LevelTypeList" use="required"/>
  <xsd:attribute name="prefixMatch" type="xsd:string"/>
  <xsd:attribute name="requiredParsingParameters" type="xsd:string"/>
  <xsd:attribute name="requiredFormattingParameters" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="Scheme">
  <xsd:sequence>
   <xsd:element name="level" type="tdt:Level" minOccurs="4" maxOccurs="5"/>
  </xsd:sequence>
  <xsd:attribute name="name" type="tdt:SchemeNameList" use="required"/>
  <xsd:attribute name="optionKey" type="xsd:string" use="required"/>
 </xsd:complexType>
 <xsd:complexType name="TagDataTranslation">
  <xsd:sequence>
   <xsd:element name="scheme" type="tdt:Scheme" maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute name="version" type="xsd:string" use="required"/>
  <xsd:attribute name="date" type="xsd:dateTime" use="required"/>
 </xsd:complexType>
 <xsd:element name="TagDataTranslation" type="tdt:TagDataTranslation"/>
</xsd:schema>