カラム定義
カラムの基本属性は、カラム名、データ型、カラムが主キーかどうか、およびXPath です。connector は、XPath を使って階層構造データのノードを取得します。
スキーマファイルのapi:info ブロックにカラム属性をマークアップします。以下の例で示すように、other:xPath プロパティにXPath を設定することができます。
<api:info title="people" desc="People and their vehicles." xmlns:other="xmlns:other="http://apiscript.com/ns?v1">
<!-- You can modify the name, type, and column size here. -->
<attr name="personal.age" xs:type="integer" readonly="false" other:xPath="/json/people/personal/age" />
<attr name="personal.gender" xs:type="string" readonly="false" other:xPath="/json/people/personal/gender" />
<attr name="personal.name.first" xs:type="string" readonly="false" other:xPath="/json/people/personal/name/first" />
<attr name="personal.name.last" xs:type="string" readonly="false" other:xPath="/json/people/personal/name/last" />
<attr name="source" xs:type="string" readonly="false" other:xPath="/json/people/source" />
<attr name="vehicles" xs:type="string" readonly="false" other:xPath="/json/people/vehicles" />
</api:info>
次のセクションでは、XPath を使用してカラムと行を抽出する方法について詳しく説明します。完全なスキーマでカラム定義を見るには、スキーマのカスタマイズ を参照してください。
カラムXPath の定義
other:xPath プロパティは、JSON からカラム値を取得するXPath を指定するために使われます。 XPath は絶対パスです。絶対パスは'/' で始まり、JSON にネストされたデータへのフルXPath を含みます。
<attr name="ID" xs:type="int" key="true" other:xPath="/value/ID" />
インデックスされたXPath 値は、同じ名前の複数のエレメントが同じレベルにネストされている場合、JSON ドキュメント内のエレメントを指定するために使われます。インデックスはゼロベースです。
<attr name=Employee1 xs:type="string" other:xPath="value[0]"/>
<attr name=Employee2 xs:type="string" other:xPath="value[1]"/>
Notes:
- XPath およびカラム名(XPath の生成に使われた場合)は、大文字・小文字の区別があります。
- JSONPath の外に指定されたパスは、最後にプッシュされた行を除いて(その場合は見つかったすべてのパスがプッシュされます)、行(JSONPath)が見つかる前に見つかった場合にのみ取得されます。これは、各行がストリーミング方式でプッシュされているためです。
行XPath の定義
行XPath(JSONPath)は、同じ階層で繰り返すエレメントへのパスを指定します。これはconnector が行に分割するオブジェクト配列です。DataModel をFlattenedDocuments またはRelational に設定すると、複数のJSONPath をセミコロン区切りのリストで指定できます。これらのデータモデリングストラテジーのガイドについては、階層データの解析 を参照してください。
接続文字列でJSONPath を定義するか、JSONPath を個々のスキーマの属性として定義できます。api:set キーワードを使用して、スキーマの行のXPath を定義します。DataModel をFlattenedDocuments またはRelational に設定すると、複数のXPath をセミコロン区切りのリストで指定できます。
<api:set attr="JSONPath" value="$.people;$.people.vehicles;$.people.vehicles.maintenance"/>
ワイルドカードのJSONPath はすべてのJSONPaths が同じ階層にあるが異なる名前を含む場合には有効です。
<api:set attr="JSONPath" value="$.feed.*" />
カラム値形式を定義
other:valueFormat プロパティを"aggregate" に設定して、カラムを集計として識別することができます。
- aggregate オプションは、指定されたXPath において見出される集計を返します。例えば、次を考えてみましょう:
{ "repeat": { "name": "TestAggregate", "myobjcol1": { "myobjcol1": "myData1", "myobjcol2": "myData2", "myobjcol3": "myData3" } } }
次の例では、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": "myData1", "myobjcol2": "myData2", "myobjcol3": "myData3" }
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 に追加するリクエストを生成します。