カラム定義
カラムの基本属性は、カラム名、データ型、カラムが主キーかどうか、およびXPath です。本製品 は、XPath を使って階層構造データのノードを取得します。
スキーマファイルのapi:info ブロックにカラム属性をマークアップします。以下の例で示すように、other:xPath プロパティにXPath を設定します。
<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" />
<attr name="EmployeeID" xs:type="int" readonly="true" other:xPath="content/properties/EmployeeID" />
<attr name="Name" xs:type="string" readonly="false" other:xPath="content/properties/Name" />
<attr name="TotalExpense" xs:type="double" readonly="true" other:xPath="content/properties/TotalExpense" />
<attr name="HireDate" xs:type="datetime" readonly="true" other:xPath="content/properties/HireDate" />
<attr name="Salary" xs:type="int" readonly="true" other:xPath="content/properties/Salary" />
</api:info>
次のセクションでは、XPath を使用してカラムと行を抽出する方法について詳しく説明します。完全なスキーマでカラム定義を見るには、スキーマのカスタマイズ を参照してください。
カラムXPath の定義
other:xPath プロパティは、カラム値を取得するXPath を指定するために使われます。
絶対パスは'/' で始まり、ネストされたデータへのフルXPath を含みます。
<attr name="ID" xs:type="int" key="true" other:xPath="/feed/entry/content/properties/ID" />
インデックスされたXPath 値は、同じ名前の複数の要素が同じレベルにネストされている場合、XML ドキュメント内の要素を指定するために使われます。インデックスはゼロベースです。
<api:info>
<attr name=PhoneNumber1 xs:type="string" other:xPath="Person/PhoneNumber[0]"/>
<attr name=PhoneNumber2 xs:type="string" other:xPath="Person/PhoneNumber[1]"/>
</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 において見出されるXML 集計を返します。例えば、次を考えてみましょう:
<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"/> </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:>,>=,=" />
この例では、次のクエリステートメントを使用します。
SELECT * FROM <table> WHERE modifedAt < '<datetime>'そして、クエリパラメータ'&modifiedBefore=<url encoded datetime>' をURL に追加するリクエストを生成します。