TIBCO EBX® は、大量のレコードの処理や主キーによる識別など、リレーショナルデータベーステーブルの機能をサポートしています。
テーブルには、集約リストでは提供されない多くの利点があります。リレーショナル機能以外に、テーブルが提供するいくつかの機能は次のとおりです。
フィルターと検索
並べ替え、ビュー、および階層
作成、変更、および削除のための特定の権限
個々のレコードレベルでの動的およびコンテキスト権限
詳細な比較とマージ
レコードレベルで継承する機能 (データセットの継承を参照)
パフォーマンスとメモリの最適化
maxOccurs> 1 のエレメントであるテーブルエレメントは、次のアノテーションを追加することで宣言されます。
<xs:annotation> <xs:appinfo> <osd:table> <primaryKeys>/pathToField1 /pathToField...n</primaryKeys> </osd:table> </xs:appinfo> </xs:annotation>
データモデルにエンティティ名が明示的に設定されていない場合、デフォルトのエンティティ名がテーブルに関連付けられます。テーブルの名前は、デフォルトのエンティティ名として使用されます。エンティティ名を使用すると、WSDL 操作のサフィックスと SQL リクエストのエイリアスを定義することで、パスの代わりに一意の名前を使用して、SQL 要求とデータサービス操作でテーブルを参照できます。詳細については、エンティティマッピングを参照してください。
エレメント | 説明 | 必須 |
---|---|---|
| テーブルの主キーフィールドを指定します。 主キーの各フィールドは、テーブルのルートエレメントのすぐ下から始まる絶対 XPath 表記で示す必要があります。主キーに複数のフィールドがある場合、リストはスペースで区切られます。 注意:タイプ | はい |
| レコードのエンドユーザー表示を定義します。複数のバリアントを指定できます。
注意エンドユーザーの表示は並べ替え可能である必要があるため、静的式では並べ替え可能な検索戦略を使用するフィールドのみが許可されます。 注意:ユーザーインターフェイスを表示するときのタグの優先度は次のとおりです。
注意:レコードラベルを表示する場合、関連するデータセットで定義されたアクセス権限は適用されません。 | いいえ |
| データセットのレコードフォームをカスタマイズするための特定のコンポーネントを定義します。このコンポーネントは、 JavaBean は、属性
| いいえ |
以下は、製品カタログの例です。
<xs:element name="Products" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> <osd:label>Product Table </osd:label> <osd:description>List of products in Catalog </osd:description> </xs:documentation> </xs:annotation> <xs:complexType> <xs:annotation> <xs:appinfo> <osd:table> <primaryKeys>./productRange /productCode</primaryKeys> <index name="indexProductCode">/productCode</index> </osd:table> </xs:appinfo> </xs:annotation> <xs:sequence> <xs:element name="productRange" type="xs:string"/><!-- key --> <xs:element name="productCode" type="xs:string"/><!-- key --> <xs:element name="productLabel" type="xs:string"/> <xs:element name="productDescription" type="xs:string"/> <xs:element name="productWeight" type="xs:int"/> <xs:element name="productType" type="xs:string"/> <xs:element name="productCreationDate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Catalogs" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> <osd:label>Catalog Table</osd:label> <osd:description>List of catalogs</osd:description> </xs:documentation> </xs:annotation> <xs:complexType> <xs:annotation> <xs:appinfo> <osd:table> <primaryKeys>/catalogId</primaryKeys> </osd:table> </xs:appinfo> </xs:annotation> <xs:sequence> <xs:element name="catalogId" type="xs:string"/><!-- key --> <xs:element name="catalogLabel" type="xs:string"/> <xs:element name="catalogDescription" type="xs:string"/> <xs:element name="catalogType" type="xs:string"/> <xs:element name="catalogPublicationDate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element>
次のプロパティは、データセットの継承のコンテキストでのみ有効です。
エレメント | 説明 | 必須 |
---|---|---|
| レコードの削除時に、非表示モードの子レコードも削除するかどうかを指定します。 有効な値は、 | いいえ。デフォルトは |
| ルートレコードの作成を許可するかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは |
| 子データセットでレコードを上書きできるかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは |
| 子データセットでレコードを非表示にできるかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは |
| レコードの複製を許可するかどうかを指定します。式は、以下の構文に従う必要があります。 | いいえ。デフォルトは |
| レコードの削除を許可するかどうかを指定します。式は、以下の構文に従う必要があります。 | いいえ。デフォルトは |
may...
式は、アクションがいつ可能かを指定しますが、アクションの最終的な可用性はユーザーのアクセス権限にも依存します。式の構文は次のとおりです。
expression ::= always | never | <condition>*
condition ::= [root:yes | root:no]
「always」:操作は「常に」可能です (ただし、ユーザー権限によって制限される場合があります)。
「never」:操作は不可能です。
「root:yes」:レコードがルートインスタンスにある場合、操作は可能です。
「root:no」:レコードがルートインスタンスにある場合、操作はできません。
レコードで特定の条件が定義されていない場合は、デフォルトが使用されます。
xs:annotation/appinfo/osd:table
の下のエレメント defaultView/toolbars
を使用して、ユーザーインターフェイスに表示するツールバーを定義することができます。ツールバーを使用すると、テーブルビュー、階層ビュー、またはレコードフォームを表示するときに表示するボタンとメニューをカスタマイズできます。
次の表は、defaultView/toolbars
で定義できるエレメントを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| デフォルトのテーブルビューの上で使用するツールバーを定義します。 | いいえ |
| デフォルトのテーブルビューの各行で使用するツールバーを定義します。 | いいえ |
| レコードフォームで使用するツールバーを定義します。 | いいえ |
| テーブルのデフォルトの階層ビューで使用するツールバーを定義します。 | いいえ |
以下は、製品カタログで使用されるカスタムツールバーの例です。
<xs:element name="Products" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation> <osd:label>Product Table </osd:label> <osd:description>List of products in Catalog </osd:description> </xs:documentation> </xs:annotation> <xs:complexType> <xs:annotation> <xs:appinfo> <osd:table> <primaryKeys>./productRange /productCode</primaryKeys> <defaultView> <toolbars> <tabularViewTop>toolbar_name_for_tabularViewTop</tabularViewTop> <tabularViewRow>toolbar_name_for_tabularViewRow</tabularViewRow> <recordTop>toolbar_name_for_recordTop</recordTop> <hierarchyViewTop>toolbar_name_for_hierarchyViewTop</hierarchyViewTop> </toolbars> </defaultView> </osd:table> </xs:appinfo> </xs:annotation> ... </xs:complexType> </xs:element>
ツールバーが存在しないか、特定の場所で使用できない場合、対応する場所のユーザーインターフェイスにツールバーは表示されません。
EBX® は、テーブルの構造にレコードメタデータを自動的に追加します。メタデータノードを使用すると、レコードに関する次の情報を取得できます。
作成者
作成時刻
最終変更者
最終変更時刻
レコードの一意の識別子 (UUID)。このメタデータは技術的なものであり、カスタムテーブルビュー、構造化検索ツール、およびクイック検索では使用できません。
レコードの定義モード。このメタデータは技術的なものであり、カスタムテーブルビュー、構造化検索ツール、クイック検索では使用できません。
レコードメタデータの使用例としては、特定の日付以降に特定のユーザーによって作成されたすべてのレコードを表示または取得することがあります。次のことが可能です。
ユーザーインターフェイスのビジネスユーザーの場合
検索条件の一部としてメタデータフィールドを使用して、クイック検索機能を使用してレコードを検索します。
必要なメタデータフィールドを含むテーブルビューを定義します。
API を介して、XPath または SQL を使用してクエリを実行します。
メタデータに関しては、次の点に注意してください。
メタデータは、予約名 ebx-metadata を持つグループの下で定義されます。結果として、テーブルのルートの直下に同じ名前のグループが含まれている場合、メタデータはテーブルで使用できません。テーブルがこの予約名でグループを定義している場合、データモデルのコンパイル時に警告が表示されます。
メタデータは読み取り専用です。
テーブルのコンテンツを XML または CSV ファイルにエクスポートする場合、メタデータは含まれません。
デフォルトでは、API を使用してデータモデルをインストロスペクトする場合、メタデータフィールドは含まれません。専用の API を使用して明示的に含めることができます。
テーブルへの参照は、拡張ファセット osd:tableRef
を使用して定義されます。
osd:tableRef
宣言を保持するノードは、タイプ xs:string
にする必要があります。
インスタンス化時に、ノードの任意の値は、主キー構文を使用してターゲットテーブル内のレコードを識別します。
この拡張ファセットは、値がターゲットテーブルのレコードを参照する列挙としても解釈されます。
エレメント | 説明 | 必須 |
---|---|---|
| ターゲットテーブルを指定する XPath 式。 | はい |
| ターゲットテーブルを含むデータセットの参照。 | データスペースエレメントが定義されている場合のみ。それ以外の場合、デフォルトは現在のデータセットです。 |
| コンテナデータセットを含むデータスペースの参照。 | いいえ。デフォルトは現在のデータスペースまたはスナップショットです。 |
| 現在のレコードで選択された外部キーと可能なキーのソートされたリストを表示するためのカスタム表示。パターンベースの式、またはニーズが非常に具体的な場合は JavaBean の 2 つのバリアントを指定できます。
同じ外部キーエレメントで両方のバリアントを定義することはできません。 注意:レコードラベルを表示する場合、関連するデータセットで定義されたアクセス権限は適用されません。 | いいえ。 |
| ターゲットテーブルのレコードをフィルタリングする追加の制約を指定します。2 種類のフィルターを使用できます。
注意属性 以下も参照してください。 | いいえ |
|
特定の重大度レベルは、ネストされた エラー管理ポリシーは、ネストされた ローカライズされた各メッセージバリアントは、ネストされた | いいえ |
リポジトリに存在しないコンテナへの外部キーを持つデータセットを作成できます。ただし、このデータセットのコンテンツは、コンテナが作成されるまで利用できません。コンテナの作成後、データセットを使用可能にするには、データモデルを更新する必要があります。まだ存在しないコンテナを参照するデータセットを作成する場合、次の制限が適用されます。
データセットレベルで定義されたトリガーは実行されません。
テーブルに含まれていないフィールドのデフォルト値は初期化されません。
アーカイブのインポート中に、存在しないコンテナを参照するデータセットを作成することはできません。
以下の例では、「Products」テーブルの外部キーを「Catalogs」テーブルのレコードに指定しています。
<xs:element name="catalog_ref" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:otherFacets> <osd:tableRef> <tablePath>/root/Catalogs</tablePath> <display> <pattern xml:lang="en-US">Catalog: ${./catalogId}</pattern> <pattern xml:lang="fr-FR">Catalogue : ${./catalogId}</pattern> </display> <validation> <severity>error</severity> <blocksCommit>onInsertUpdateOrDelete</blocksCommit> <message>A default error message</message> <message xml:lang="en-US">A localized error message</message> <message xml:lang="fr-FR">Un message d'erreur localisé</message> </validation> </osd:tableRef> </osd:otherFacets> </xs:appinfo> </xs:annotation> </xs:element>
関連付けは、データモデルの既存の関係を抽象化し、ユーザーインターフェイスとデータサービスで関連付けされたオブジェクトをモデル主導で簡単に統合できるようにします。
いくつかのタイプの関連付けがサポートされています。
「外部キーによる」関連付けは、既存の外部キーフィールドの逆の関係を指定します。
「リンクテーブルを介した」関連付けは、中間リンクテーブルに基づいて関係を指定します (このようなテーブルは「結合テーブル」と呼ばれることがよくあります)。このリンクテーブルは、2 つの外部キーを定義する必要があります。1 つは「ソース」テーブル (関連付けエレメントを保持するテーブル) を参照し、もう 1 つは「ターゲット」テーブルを参照します。
「XPath 述語による」関連付けは、XPath 述語に基づく関係を指定します。
関連付けの場合、次のことも可能です。
追加の XPath フィルターを指定して、関連するオブジェクトをフィルター処理します。
表形式のビューを構成して、関連するテーブルに表示する必要のあるフィールドを定義します。
関連するオブジェクトをフォームにレンダリングする方法を定義します。
データサービスの「Select」操作で関連オブジェクトを非表示/表示します。データサービスでのフィールドの非表示を参照してください。
必要な関連オブジェクトの最小数と最大数を指定します。
関連するオブジェクトを制限するために XPath 述語を使用して検証制約を追加します。
関連付けは、xs:annotation/appInfo
の下の XML スキーマエレメント osd:association
を使用してデータモデルで定義されます。
制限事項
関連付けは、タイプ xs:string の単純なエレメントにする必要があります。
関連付けは、テーブル内でのみ定義できます。
XML スキーマのインスタンスからは対応するノードが存在しないため、「公式」カーディナリティ制約 (minOccurs="0" maxOccurs="0"
) が必要です。言い換えると、関連付けには値がなく、XML および XML スキーマに関する限り「仮想」エレメントと見なされます。
次の表は、xs:annotation/appInfo/osd:association
で定義できるエレメントを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| 外部キーの逆の関係である関連付けのプロパティを定義します。 エレメント エレメント 以下も参照してください。 | 関連付けが外部キーの逆の関係である場合は「はい」、それ以外の場合は「いいえ」。 |
| リンクテーブルを介した関連付けのプロパティを定義します。 エレメント 重要:関連付けで使用するためには、リンクテーブルは、自動インクリメントのフィールドで構成される主キーや、関連付けのソースまたはターゲットテーブルへの外部キーを定義する必要があります。 エレメント エレメント | 関連付けがリンクテーブル上にある場合は「はい」、それ以外の場合は「いいえ」。 |
| XPath 述語に基づく関連付けのプロパティを定義します。
例: 述部へのパス ( 関連付けがソーステーブルのフィールドに依存する場合、XPath 式の述語には、 EBX® XPath でサポートされている構文を参照してください。 注意検証検索 XPath 関数は、XPath リンクでは禁止されています。 | 関連付けが XPath 述語に基づいている場合は「はい」、それ以外の場合は「いいえ」。 |
|
XPath フィルターを定義する場合は、ソーステーブルとターゲットテーブルのフィールドのみを使用できます。つまり、リンクテーブルを介した関連付けである場合、XPath フィルターでリンクテーブルのフィールドを使用することはできません。 作成時のエラーメッセージ:ユーザーインターフェイスで、ユーザーがフィルターに準拠していない新しい関連付けられたレコードを送信すると、レコードの作成がブロックされます。エラーメッセージは、エレメント 注意検証検索 XPath 関数は、関連付けフィルターでは禁止されています。 | いいえ |
| 注意:非推奨。このプロパティは、プロパティ 関連するオブジェクトをフィルタリングするための XPath 述語を定義します。 | いいえ |
| 関連するレコードの形式をカスタマイズするための特定のコンポーネントを定義します。このコンポーネントは、 JavaBean は、属性
| いいえ |
別のデータセットを参照することができます。そのためには、関連付けのタイプに応じて、エレメント tableRefInverse
、linkTable
、または xpathLink
のいずれかで次のプロパティを定義する必要があります。
エレメント | 説明 | 必須 |
---|---|---|
| 関連付けで使用されるフィールドを含むデータモデルを定義します。 データモデルは、埋め込みデータモデルとモジュールにパッケージ化されたデータモデルを参照できる特定の URN を使用して定義されます。 EBX® でサポートされている特定の URN の詳細については、 | はい |
| 関連付けで使用されるデータセットを定義します。このデータセットは、エレメント | はい |
| 関連付けで使用されるデータセットを含むデータスペースを定義します。 | いいえ |
重要
データセットを作成するときに、リポジトリにまだ存在しないコンテナへの関連付けを定義するデータセットを作成できます。ただし、このデータセットのコンテンツは、作成後すぐには利用できません。不在のコンテナが作成された後、データセットを使用可能にするためにデータモデルの更新が必要です。まだ存在しないコンテナを参照するデータセットを作成する場合、次の制限が適用されます。
データセットレベルで定義されたトリガーは実行されません。
テーブル外のフィールドのデフォルト値は初期化されません。
アーカイブのインポート中に、存在しないコンテナを参照するデータセットを作成することはできません。
別のデータセットへの関連付けの一貫性は、運用段階でチェックされます。関連付けが特定のデータセットのコンテキストで一貫していない場合、次のようになります。
許可の観点からは非表示と見なされます。つまり、関連付けはユーザーインターフェイスとデータサービスで非表示になります。
コンテナデータセット、テーブル、またはレコードの検証から除外されます。
関連付けの結果を計算する既存の API で例外が発生します。
AssociationLink.getAssociationResult
と AssociationLink.getTargetTable
を参照してください。
xs:annotation/appinfo
の下のエレメント osd:defaultView/displayMode
を使用して、関連付けられたオブジェクトをフォームにレンダリングする方法を定義できます。
可能な値は次のとおりです。
inline
は、関連付けられたレコードがデータモデル内の関連付けの同じ位置にあるフォームでレンダリングされることを指定します。
tab
は、関連するレコードを特定のタブに表示することを指定します。
link
は、関連するレコードをモーダルウィンドウでレンダリングすることを指定します。
このプロパティが定義されていない場合、デフォルトでは、関連付けられたレコードは inline
でレンダリングされます。
次の例では、関連付けられたオブジェクトを次の形式で inline
でレンダリングするように指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> <osd:defaultView> <displayMode>inline</displayMode> </osd:defaultView> </xs:appinfo> </xs:annotation> </xs:element>
次の例では、関連付けられたオブジェクトを特定のタブにレンダリングすることを指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> <osd:defaultView> <displayMode>tab</displayMode> </osd:defaultView> </xs:appinfo> </xs:annotation> </xs:element>
xs:annotation/appinfo
の下のエレメント osd:defaultView/toolbars
を使用して、ユーザーインターフェイスに表示するツールバーを定義することができます。ツールバーを使用すると、関連付けの表形式のビューを表示するときに表示するボタンとメニューをカスタマイズできます。
次の表は、osd:defaultView/toolbars
で定義できるエレメントを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| この関連付けのデフォルトのテーブルビューで使用するツールバーを定義します。 | いいえ |
| この関連付けのデフォルトビューの各行に使用するツールバーを定義します。 | いいえ |
次の例は、カタログとその製品の間の以前の関連付けのツールバーを使用する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> <osd:defaultView> <toolbars> <tabularViewTop>toolbar_name_for_tabularViewTop</tabularViewTop> <tabularViewRow>toolbar_name_for_tabularViewRow</tabularViewRow> </toolbars> </osd:defaultView> </xs:appinfo> </xs:annotation> </xs:element>
関連付けのターゲットテーブルを含むデータモデルで定義されたツールバーのみを使用できます。つまり、関連付けのターゲットテーブルが別のデータモデルで定義されている場合、このデータモデルで定義されているツールバーのみを参照でき、関連付けを保持しているツールバーでは参照できません。
特定の表形式のビューを指定して、ターゲットテーブルに表示する必要のあるフィールドを定義できます。表形式のビューが定義されていない場合、付与されたアクセス権限に従って、ユーザーが表示できるすべての列が表示されます。表形式のビューは、xs:annotation/appinfo
の下のエレメント osd:defaultView/tabularView
を使用して定義されます。
次の表は、osd:defaultView/tabularView
で定義できるエレメントを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| 表示するターゲットテーブルのフィールドを定義します。指定するパスは、ターゲットテーブルから絶対パスである必要があり、既存のフィールドを参照する必要があります。表示するフィールドを指定するために、いくつかの | いいえ |
| 関連するオブジェクトの並べ替えに使用できるフィールドを定義します。いくつかの エレメント エレメント | いいえ |
次の例は、カタログとその製品の間の以前の関連付けから表形式のビューを定義する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> <osd:defaultView> <tabularView> <column>/productRange</column> <column>/productCode</column> <column>/productLabel</column> <column>/productDescription</column> <sort> <nodePath>/productLabel</nodePath> <isAscending>true</isAscending> </sort> </tabularView> </osd:defaultView> </xs:appinfo> </xs:annotation> </xs:element>
ユーザーインターフェイスでは、次のアクションを実行できます。
作成:関連付けのターゲットテーブルにオブジェクトを直接作成できます。新しいオブジェクトが作成されると、そのオブジェクトは現在のレコードに自動的に関連付けられます。
複製:関連付けのターゲットテーブル内のオブジェクトを複製できます。新しいオブジェクトが作成されると、そのオブジェクトは現在のレコードに自動的に関連付けられます。
関連付け:既存のオブジェクトを現在のレコードに関連付けます。リンクテーブルを介した関連付けの場合、リンクテーブル内のレコードが自動的に作成され、現在のレコードと既存のオブジェクトの間のリンクが実体化されます。
移動:選択したオブジェクトを現在のレコードとは異なるレコードに関連付けます。リンクテーブルを介した関連付けの場合、前のリンクレコードが自動的に削除され、リンクテーブルに新しいレコードが自動的に作成されて、選択したオブジェクトとその新しい親レコードの間のリンクが実体化されます。
削除:関連付けのターゲットテーブルで選択された関連付けられたオブジェクトを削除します。
切断:現在のレコードと選択された関連オブジェクトの間のセマンティックリンクを切断します。リンクテーブルを介した関連付けの場合、リンクテーブル内のレコードは自動的に削除され、現在のレコードと関連付けられたオブジェクトの間のリンクが解除されます。
関連付けと切断のアクションは、XPath 述語 (エレメント xpathLink) を使用して関連付けが定義されている場合は使用できません。
表形式または階層形式の公開ビューを指定して、ユーザーインターフェイスを介してアクションを実行するときにオブジェクトを表示する方法を定義できます。公開されたビューは、xs:annotation/appinfo
の下のエレメント osd:defaultView/associationViews
を使用して定義されます。
次の表は、osd:defaultView/associationViews
で定義できるエレメントを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| 現在のレコードに関連付けるターゲットテーブルのオブジェクトを表示するときに使用する公開ビューを定義します。指定されたビューは、関連付けのターゲットテーブルで公開および作成する必要があります。 | いいえ |
| 関連するオブジェクトを現在のテーブルの別のレコードに移動するときに使用する公開ビューを定義します。指定されたビューは、現在のテーブルで公開および作成する必要があります。 | いいえ |
次の例は、カタログとその製品の間の以前の関連付けからビューを定義する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> <osd:defaultView> <associationViews> <viewForAssociateAction>view_name_for_catalogs</viewForAssociateAction> <viewForMoveAction>view_name_for_products</viewForMoveAction> </associationViews> </osd:defaultView> </xs:appinfo> </xs:annotation> </xs:element>
一部のコントロールは、関連付けられたオブジェクトを制限するために、関連付けに対して定義できます。これらのコントロールは、エレメント osd:association
の下で定義されます。
次の表は、xs:annotation/appInfo/osd:association で定義できるコントロールを示しています。
エレメント | 説明 | 必須 |
---|---|---|
| この関連付けに必要な関連付けられたオブジェクトの最小数を指定します。この最小数は、エレメント | いいえ。デフォルトでは最小値は制限されていません。 |
| この関連付けに許可される関連付けられたオブジェクトの最大数を指定します。この最大数はエレメント | いいえ。デフォルトでは最大値は制限されていません。 |
| 関連するレコードを制限するための XPath 述語を定義します。XPath 述語を定義する場合は、ソーステーブルとターゲットテーブルのフィールドのみを使用できます。つまり、リンクテーブルを介した関連付けである場合、XPath 述語でリンクテーブルのフィールドを使用することはできません。 関連するデータセットでは、関連するレコードが指定された制約に準拠していない場合、検証時に指定された重大度の検証メッセージが追加され、エンドユーザーに表示されます。 | いいえ |
| 検証メッセージは、エレメント 重大度が指定されていない場合、デフォルトでは、重大度 ローカライズされた検証メッセージは、エレメント | いいえ |
データサービスの選択
操作で、関連付けられたオブジェクトを非表示にする必要があるかどうかを定義できます。このために、xs:annotation/xs:appinfo
の下のプロパティ osd:defaultView/hiddenInDataServices
を関連付けに設定できます。プロパティを「true」に設定すると、データサービスの選択
操作で関連するオブジェクトが非表示になります。このプロパティが定義されていない場合、デフォルトでは、関連付けられたオブジェクトがデータサービスの選択
操作に表示されます。
たとえば、前述した例で定義された製品カタログデータモデルは、製品がカタログに属することを指定します (「Products」テーブルの外部キーによって明示的に定義されます)。「Catalogs」テーブルに外部キーの逆である次の関連付けが含まれていない限り、逆の関係 (カタログに特定の製品がある) は XML スキーマで簡単に表現できません。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
リンクテーブルを介した関連付けの場合、前述した例を検討して、いくつかの更新を行うことができます。たとえば、「Products」テーブルの外部キーを削除し、製品とカタログの関係を、2 つの外部キー (「Products」テーブル (「productRef」という名前) と 「Catalogs」テーブル (「catalogRef」という名前) を参照) で構成される主キーを持つリンクテーブル (「Catalogs_Products」という名前) によって再定義します。次の例は、この新しい関係からリンクテーブルを介して関連付けを定義する方法を示しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <linkTable> <table>/root/Catalogs_Products</table> <fieldToSource>./catalogRef</fieldToSource> <fieldToTarget>./productRef</fieldToTarget> </linkTable> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
次の例は、別のデータセットの外部キーを参照する関連付けを示しています。この例では、「Products」テーブルと「Catalogs」テーブルは同じデータセットにありません。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <schemaLocation>urn:ebx:module:aModuleName:/WEB-INF/ebx/schema/products.xsd</schemaLocation> <dataSet>Products</dataSet> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
次の例では、「Technology」タイプの製品のみを関連付ける XPath フィルターを定義しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> <filter> <predicate>./productType = 'Technology'</predicate> <checkOnAssociatedRecordCreation> <message>A default message</message> <message xml:lang="en-US">A localized message</message> <message xml:lang="fr-FR">Un message localisé</message> </checkOnAssociatedRecordCreation> </filter> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
次の例では、カタログに必要な製品の最小数を指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> <minOccurs> <value>1</value> <validation> <severity>warning</severity> <message xml:lang="en-US">One product should at least be associated to this catalog.</message> <message xml:lang="fr-FR">Un produit doit au moins être associé à ce catalogue.</message> </validation> </minOccurs> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
次の例では、カタログに最大 10 個の製品を含める必要があることを指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:association> <tableRefInverse> <fieldToSource>/root/Products/catalog_ref</fieldToSource> </tableRefInverse> <maxOccurs> <value>10</value> <validation> <severity>warning</severity> <message xml:lang="en-US">Too much products for this catalog.</message> <message xml:lang="fr-FR">Ce catalogue a trop de produits.</message> </validation> </maxOccurs> </osd:association> </xs:appinfo> </xs:annotation> </xs:element>
リンクされたフィールドは、メインテーブルのフィールドを既存の関係上の別のテーブルのいくつかのフィールドと集約することにより、マルチテーブルビューをシミュレートする機能を提供します。これにより、関係を使用して他のレコードから参照されるレコードの一部のフィールドをモデル駆動型で簡単に統合できます。
次の関係を横断的に対応 (トラバース) できます。
重要:これらの関係は「単一値の関係」である必要があります。つまり、関係を定義するテーブルのレコードは、関係のターゲットテーブル内の 1 つのレコードのみを参照する必要があります。
詳細
外部キーフィールドで maxOccurs が 1 に等しいと定義されている場合、外部キーは単一値の関係と見なされます。
参照される外部キーフィールドがターゲットテーブルの一意の主キーフィールドである場合、またはこの外部キーフィールドに一意性制約が定義されている場合、外部キーによる関連付けは単一値の関係と見なされます。
リンクされたフィールドは、ターゲットフィールドからいくつかのプロパティ (外部キー制約、列挙、値のラベル付け、検索戦略、検索モード、フォーマット設定) を継承します。
minOccurs = 0 および maxOccurs = 0 のエレメントであるリンクフィールドは、次のアノテーションを追加することで宣言されます。
<xs:element name="catalog_ref_label" minOccurs="0" maxOccurs="0" type="xs:string"> <xs:annotation> <xs:appinfo> <osd:function linkedField="../catalog_ref/catalogLabel"/> </xs:appinfo> </xs:annotation> </xs:element>
エレメント osd:function で定義された属性 linkedField は、コンテナテーブルの単一値の関係を参照するステップと、関係のターゲットテーブルのフィールドへのステップで構成されるパスを定義します。
重要
パスが絶対パス (「/」で始まる) の場合、コンテナテーブルノードから解決されます。
パスが相対パスの場合、現在のフィールドから解決されます。
前述した例で定義された製品カタログデータモデルのコンテキストでは、フィールド catalog_ref_label が Products テーブルに追加されます。最初のステップ catalog_ref は、製品がカタログに属していることを示す外部キーを参照します。最後のステップ catalogLabel は、参照されたカタログのラベルを参照します。このフィールドは、外部キー制約のターゲットテーブルである Catalog テーブルに属しています。
制限事項
現在、リンクされたフィールドでは、単一値の関係の 1 つのレベルのみをターゲットにできます。結果は次のようになります。
単一値の関係は、別のリンクされたフィールドで定義することはできません。
リンクされたフィールドは、別のリンクされたフィールドをターゲットにすることはできません。
リンクされたフィールドは、プロパティ minOccurs および maxOccurs (=0) を定義する必要があります。
リンクされたフィールドは、ターゲットフィールドの 1 つと互換性のあるデータ型を定義する必要があります。
リンクされたフィールドをコンテナテーブルの主キーの一部にすることはできません。
リンクされたフィールドは、端末フィールドをターゲットにする必要があります。
リンクされたフィールドは、集約リストまたは集約リストの下のフィールドをターゲットにすることはできません。
リンクされたフィールドは、リンクされたフィールドでもある単一値の関係を参照することはできません。
リンクされたフィールドには制約を定義しないでください。リンクされたフィールドで制約が宣言されている場合、警告メッセージがスローされ、宣言された制約は無視されます。
リンクされたフィールドの場合、プロパティ osd:disableValidation
は常に true
と見なされ、上書きできません。