semanticEntity複合タイプは、エンティティとそのすべての属性を定義します。
<semanticEntity key="?" displayName="?" isActive="?">
<definition>?</definition>
<description>?</description>
<attributes>
<semanticAttribute name="?" displayName="?" datatype="?"
isDimension="?" isKeyColumn="?" description="?">
<property key="?">?</property>
</semanticAttribute>
</attributes>
<metrics>
<metric name="?" displayName="?" datatype="?" description="?">
<definition>?</definition>
<property key="?">?</ns:property>
</metric>
</metrics>
<groups>
<group key="?" displayName="?">
<semanticAttributeKey name="?"/>
<property key="?">?</property>
</group>
</groups>
<property key="?">?</property>
</semanticEntity>
| 要素または属性の名前 | 説明 |
|---|---|
| key | 必須です。エンティティの作成時に提供するエンティティの一意識別子。たとえば、キーSalesでエンティティを作成できます。キー名はNCName書式である必要があります。 |
| displayName | オプションです。Studioなどのフロントエンド・アプリケーションで使用できる表示名を定義します。表示名にはNCName以外の書式を使用できます。 |
| isActive | 必須です。このエンティティがアクティブ(true)か非アクティブ(false)かを指定するブール値。非アクティブ・エンティティのdefinitionは、put操作の一部やEQL問合せとして評価されず、その定義は問合せに連結されません。そのため、非アクティブ・ステータスを使用して、無効または不完全なEQL定義でエンティティを(後で修正できるように)保存したり、後で(アクティブにする時点で)使用するためにエンティティを保存したりすることができます。他のEQL問合せがエンティティを参照する場合、そのエンティティをアクティブにする必要があります。エンティティを保存する場合、isActiveを明示的に設定する必要があります。 |
| definition | 必須です。エンティティを定義するEQL文。このEQL文は、その中に含まれるEQL式に基づいてレコードの仮想コレクションを作成(またはフィルタ処理)する必要があります。エンティティのEQL定義は、セミコロンで区切られた1つ以上のDEFINE文から構成されます。この定義は、名前付きの状態を参照できます。
この定義には、エンティティの名前(key属性)に一致するDEFINE文を含める必要があります。たとえば、SalesエンティティのDEFINE文は次のようになります。
<definition> DEFINE Sales AS SELECT FactSales_SalesAmount AS SalesAmount, DimReseller_ProductLine AS ProductLine, DimSalesTerritory_SalesTerritoryCountry AS SalesTerritoryCountry, DimDate_FiscalYear AS FiscalYear, FactSales_SalesOrderNumber AS SaleOrderNumber </definition> |
| description | オプションです。エンティティに関する説明テキストを提供します。 |
| attributes | オプションです。エンティティ内の属性のリストを表します。attributes要素には、ゼロ個以上のsemanticAttribute要素を含めることができます。詳細は、後述の項を参照してください。 |
| metrics | オプションです。1つ以上の推奨メトリック要素のリストを提供します。metrics要素には、ゼロ個以上のmetric要素を含めることができます。詳細は、後述の項を参照してください。 |
| groups | オプションです。1つ以上のエンティティ属性グループを作成できます。詳細は、後述の項を参照してください。 |
| property | オプションです。これはsemanticEntity全体のproperty要素であることに注意してください。エンティティ全体の文字列メタデータ・グローバル・プロパティを指定できます。キー名はNCName書式である必要があります。 |
attributes要素には、1つ以上のsemanticAttribute要素を含めることができます。エンティティ内の各属性は、definitionに含まれるEQL文で指定された属性に対応する必要があります。各semanticAttribute要素は、エンティティのメンバー属性を定義します。
<semanticAttribute name="?" displayName="?" datatype="?" isDimension="?" isKeyColumn="?" description="?"> <property key="?">?</property> </semanticAttribute>
<attributes>
<semanticAttribute name="SalesAmount" displayName="Sales Amount" datatype="mdex:double"
isDimension="false" isKeyColumn="true" description="sales info">
<property key="locale">EN</property>
</semanticAttribute>
...
</attributes>
<metrics>
<metric name="?" displayName="?" datatype="?" description="?">
<definition>?</definition>
<property key="?">?</property>
</metric>
</metrics>
各メトリックには、SUM(X)またはAVG(Y)などの集約関数を1つ以上含める必要があります(ここで、XおよびYは、エンティティに定義される属性になります)。
<metrics>
<metric name="TotalSales" displayName="Total Sale" datatype="mdex:double">
<definition>sum(SalesAmount)</definition>
<property key="currency">$</property>
</metric>
</metrics>
エンティティ属性グループ(ビュー属性グループとも呼ばれる)は、(semanticAttribute要素を介して設定された)エンティティ属性のセットで構成されます。
エンティティ属性グループでは、グループに関連付けられるプロパティのセット(キー/値ペア)も使用できます。これらのプロパティでは、フロントエンド・アプリケーション(Studioなど)で使用できるグループのメタデータも提供できます。たとえば、注文制御にこのメタデータを指定できます(結果のソートに使用する属性の指定など)。
<groups>
<group key="?" displayName="?">
<semanticAttributeKey name="?">
<property key="?">?</property>
</group>
</groups>
<semanticEntity key="Product" displayName="Product" isActive = "true">
<definition>
DEFINE Product AS SELECT productId AS productId, description AS description, price AS price
</definition>
<attributes>
<semanticAttribute name="productId" datatype="mdex:string"
isDimension="true" isKeyColumn="true">
</semanticAttribute>
<semanticAttribute name="description" datatype="mdex:string"
isDimension="true" isKeyColumn="false">
</semanticAttribute>
<semanticAttribute name="price" datatype="mdex:double"
isDimension="true" isKeyColumn="false">
<property key="currency">$</property>
</semanticAttribute>
</attributes>
<metrics/>
<groups>
<group key="ProdDescription" displayName="ProductId and Description Group">
<semanticAttributeKey name="productId"/>
<semanticAttributeKey name="description"/>
<property key="sortBy">productId</property>
</group>
</groups>
<property key="SalesArea">North America</property>
</semanticEntity>
このグループには、2つのエンティティ属性("productId"と"description")がメンバーとして存在します。また、メタデータ・プロパティ("sortBy")もあり、その値を使用して"productId"属性で結果をソートできます。
前に説明したエンティティ定義の各部分をまとめるために、次の使用例について考えます。
販売トランザクションのリストをロードする場合は、顧客、製品およびサプライヤに関する情報もロードします。それぞれのエンティティを作成できます。SalesAmount、ProductLineおよびFiscalYearの各属性から導出されるレコードの仮想セットとしてSalesエンティティを作成する例を考えます。
Salesエンティティを定義するときは、そのメトリックも提供して、ビジネス・アナリストがこのエンティティに対してEQLで問合せを発行できるようにします。これらのメトリックは、SalesAmountの合計として定義されるTotalSales、またはSalesAmountの平均として定義されるAvgSalesになります。
<semanticEntity key="Sales" displayName="Sales Transactions" isActive="true">
<definition>
DEFINE Sales AS
SELECT FactSales_SalesAmount AS SalesAmount,
DimReseller_ProductLine AS ProductLine,
DimSalesTerritory_SalesTerritoryCountry AS SalesTerritoryCountry,
DimDate_FiscalYear AS FiscalYear,
FactSales_SalesOrderNumber AS SaleOrderNumber
</definition>
<description>Sales transaction information</description>
<attributes>
<semanticAttribute name="SalesAmount" displayName="Sales Amount"
datatype="mdex:double" isDimension="false" isKeyColumn="true">
<property key="locale">EN</property>
</semanticAttribute>
<semanticAttribute name="ProductLine" displayName="Product Line"
datatype="mdex:string" isDimension="true" isKeyColumn="false">
</semanticAttribute>
<semanticAttribute name="SalesTerritoryCountry" displayName="Sales Territory Country"
datatype="mdex:string" isDimension="true" isKeyColumn="false">
</semanticAttribute>
<semanticAttribute name="FiscalYear" displayName="Year" datatype="mdex:int"
isDimension="true" isKeyColumn="false">
</semanticAttribute>
<semanticAttribute name="SaleOrderNumber" displayName="Sale Order Number"
datatype="mdex:string" isDimension="false" isKeyColumn="false">
</semanticAttribute>
</attributes>
<metrics>
<metric name="TotalSales" displayName="Total Sale" datatype="mdex:double">
<definition>sum(SalesAmount)</definition>
<property key="currency">$</property>
</metric>
<metric name="AvgSales" displayName="Average Sale" datatype="mdex:double">
<definition>avg(SalesAmount)</definition>
</metric>
</metrics>
<groups/>
<property key="SalesArea">North America</property>
</semanticEntity>
エンティティは、キャッシュが再入力されるたびに再検証されます。無効なエンティティを使用するEQL問合せではエラーが発生し、エンティティのisValidフラグがfalseに設定されます。Endeca Serverでは、提供されたDefinitionおよびMetricsでのみ検証が行われることに注意してください。