#JSON, XML が苦手な方へ#
多くのモダンデータストアはJSON かXML ベースのWeb API を通じて利用されます。すでに長く使われてスタンダートとして安定しているフォーマットです。 ただし、カスタム業務システムや帳票・BI などの各種ツールでは、RDB を基本としたデータソース・フォーマットにしか対応していないというケースが多いのではないでしょうか? 今後も使っていくシステムではあるけれど、改修を行うのにもコストがかかるし、エンジニアもJSON の修得には時間が。そんなとき頼りになるCData のJDBC, ODBC, ADO.NET ドライバーですが、生憎自分が使いたいWeb API のドライバーが製品化されていない。 そこでCData JSON Driver、CData XML Driver を使って、JSON およびXML フォーマットで提供されているWeb API に対してカスタムスキーマを設定することでデータドライバーとして利用することができます。
スキーマ設定はちょっと上級者向けですが、組織内で一人がスキーマ定義を行えば、同じスキーマファイルを利用して、組織・コミュニティ全員がWeb API をテーブル型のデータとして開発環境および、BI, 帳票ツール、Excel から使えるようになります。
#使いたいJSON, XML データのモデル化#
正しくJSON またはXML をデータベースとして読むためには、「テーブル」として表示させたい各エンドポイントに対してスキーマを定義します。 初めてテーブル名を決めます。次にパースしたいJSON/XML エレメント毎に名前をふっていきます。 そして「テーブル」のユニークなプライマリーキーとなるエレメントを定義し、繰り返しとなるエレメントを定義して「行」に均し、パースするリソースの位置を定義します。
##JSONの例##
{
"person": [
{
"id": 1754,
"name": "Joe Smith",
"address": {"street": "9th Street", "city": "New York", "state": "NY"},
"children": ["John", "Sarah", "Elizabeth"],
"birthday": "1960-01-01"
},
{
"id": 1755,
"name": "Jane Doe",
"address": {"street": "8th Avenue", "city": "New York", "state": "NY"},
"children": ["Adam", "Bailey"],
"birthday": "1960-07-01"
},
...
]
}
このJSON を下のようにスキーマ定義します:
<rsb:info title="Person" desc="Parse a document into rows.">
<!-- Column definitions -->
<attr name="ID" xs:type="int" key="true" other:xPath="id" />
<attr name="Name" xs:type="string" other:xPath="name" />
<attr name="Address_Street" xs:type="string" other:xPath="address/street" />
<attr name="Address_City" xs:type="string" other:xPath="address/city" />
<attr name="Address_State" xs:type="datetime" other:xPath="address/state" />
<attr name="Child1" xs:type="string" other:xPath="children[0]" />
<attr name="Child2" xs:type="string" other:xPath="children[1]" />
<attr name="Child3" xs:type="string" other:xPath="children[2]" />
</rsb:info>
<rsb:set attr="RepeatElement" value="/json/person/" />
<rsb:set attr="uri" value="PersonData.json" />
#Read / Write 処理の設定#
スキーマのカラム定義を作成したら、次はスキーマに様々なスクリプトを書き込むことで、必要なSQL クエリ(SELECT, INSERT, UPDATE, DELETE) が使えるようにしましょう。
処理 | SQL | スキーマメソッド |
---|---|---|
Read | SELECT | GET |
Create | INSERT | POST |
Update | UPDATE | MERGE |
Delete | DELETE | DELETE |
<rsb:script method="GET">
<rsb:call op="jsonproviderGet">
<rsb:push />
</rsb:call>
</rsb:script>
<rsb:script method="POST">
<rsb:call op="jsonproviderGet">
<rsb:push />
</rsb:call>
</rsb:script>
<rsb:script method="MERGE">
<rsb:call op="jsonproviderGet">
<rsb:push />
</rsb:call>
</rsb:script>
<rsb:script method="DELETE">
<rsb:call op="jsonproviderGet">
<rsb:push />
</rsb:call>
</rsb:script>
これで、定義したスキーマにおいて、指定されたURI でデータを処理できるように設定ができました。さらに複雑なクエリ(ソートや、グルーピングなど)は 製品ヘルプの"Modeling XML Data" 項を参照してください。