カラム定義
カラムの基本属性は、カラム名、データ型、カラムが主キーかどうか、およびXPath です。本製品 は、XPath を使って階層構造データのノードを取得します。
スキーマファイルのapi:info ブロックにカラム属性をマークアップします。以下の例で示すように、other:xPath プロパティにXPath を設定します。また、desc プロパティを使用して各属性の説明を提供することもできます。
<api:info title="Persons" desc="Parse the OData Persons feed.">
<attr name="ID" xs:type="int" key="true" readonly="false" other:xPath="content/properties/ID" desc="The ID associated with an individual person." />
<attr name="EmployeeID" xs:type="int" readonly="true" other:xPath="content/properties/EmployeeID" desc="The employee ID associated with the person." />
<attr name="Name" xs:type="string" readonly="false" other:xPath="content/properties/Name" desc="The name of the person." />
<attr name="TotalExpense" xs:type="double" readonly="true" other:xPath="content/properties/TotalExpense" desc="The total experience associated with the person." />
<attr name="HireDate" xs:type="datetime" readonly="true" other:xPath="content/properties/HireDate" desc="The hire date of the person." />
<attr name="Salary" xs:type="int" readonly="true" other:xPath="content/properties/Salary" desc="The salary of the person." />
</api:info>
次のセクションでは、XPath を使用してカラムと行を抽出する方法について詳しく説明します。完全なスキーマでカラム定義を見るには、スキーマのカスタマイズ を参照してください。
カラムXPath の定義
other:xPath プロパティは、カラム値を取得するXPath を指定するために使われます。
絶対パスは'/' で始まり、ネストされたデータへのフルXPath を含みます。
<attr name="ID" xs:type="int" key="true" other:xPath="/feed/entry/content/properties/ID" desc="The ID associated with the person." />
インデックスされたXPath 値は、同じ名前の複数のエレメントが同じレベルにネストされている場合、ドキュメント内のエレメントを指定するために使われます。インデックスはゼロベースです。
<api:info>
<attr name=PhoneNumber1 xs:type="string" other:xPath="Person/PhoneNumber[0]" desc="The person's phone number." />
<attr name=PhoneNumber2 xs:type="string" other:xPath="Person/PhoneNumber[1]" desc="The person's phone number." />
</api:info>
Notes:
- XPath およびカラム名(XPath の生成に使われた場合)は、大文字・小文字の区別があります。
- XPath の外に指定されたパスは、最後にプッシュされた行を除いて(その場合は見つかったすべてのパスがプッシュされます)、行(XPath )が見つかる前に見つかった場合にのみ取得されます。これは、各行がストリーミング方式でプッシュされているためです。
行XPath の定義
行XPath は、同じ階層で繰り返すエレメントへのパスを指定します。これは本製品 が行に分割するオブジェクト配列です。DataModel をFlattenedDocuments またはRelational に設定すると、複数のXPath をセミコロン区切りのリストで指定できます。これらのデータモデリングストラテジーのガイドについては、階層データの解析 を参照してください。
接続文字列でXPath プロパティを定義するか、行XPath を個々のスキーマの属性として定義できます。api:set キーワードを使用して、スキーマの行のXPath を定義します。DataModel をFlattenedDocuments またはRelational に設定すると、複数のXPath をセミコロン区切りのリストで指定できます。
<api:set attr="XPath" value="/root/people;/root/people/vehicles;/root/people/vehicles/maintenance" />
ワイルドカードのXPath はすべてのXPath が同じ階層にあるが異なる名前を含む場合には有効です。
<api:set attr="XPath" value="/feed/*" />
カラム値形式を定義
other:valueFormat プロパティを"aggregate" に設定して、カラムを集計として識別することができます。
- aggregate オプションは、指定されたXPath において見出される集計を返します。例えば、次を考えてみましょう:
<repeat> <name>TestAggregate</name> <myobjcol1> <object1>myData</object1> <object1>myData1</object1> <object2>myData2</object2> </myobjcol1> </repeat>
次の例では、myobjcol1 エレメントをMyObjCol1 という名前のカラムに抽出します。<api:info> <attr name="MyObjCol1" xs:type="string" other:xPath="myobjcol1" other:valueFormat="aggregate" desc="An object column." /> </api:info> <api:set attr="XPath" value="/repeat"/>
カラム値は次のようになります。<myobjcol1> <object1>myData</object1> <object1>myData1</object1> <object2>myData2</object2> </myobjcol1>
SELECT 抽出条件のクエリパラメータへのマッピング
一部のAPI では、クエリパラメータを指定することでリクエスト結果をフィルタリングできます。このパラメータがWHERE 句にマップされている場合は、other:filter プロパティを使用してこのマッピングをプログラムできます。
- other:filter は、<parameter name>:<operator list> のセミコロン区切りリストです。<parameter name> はクエリパラメータの名前、<operator list> はマッピングに使用される演算子のカンマ区切りのリストです。有効な演算子は<、<=、=、>、>=、およびLIKE です。
以下は、2つのクエリパラメータ'modifiedSince' および'modifiedBefore' の例です。'modifiedAt' カラムに基づいて結果をフィルタ処理します。
<attr name="ModifiedAt" xs:type="datetime" readonly="false" other:xPath="content/properties/modifiedAt" other:filter="modifiedBefore:<;modifiedSince:>,>=,=" desc="Datetime when last modified." />
この例では、次のクエリステートメントを使用します。
SELECT * FROM <table> WHERE modifedAt < '<datetime>'そして、クエリパラメータ'&modifiedBefore=<url encoded datetime>' をURL に追加するリクエストを生成します。