MarkLogic ColumnXMLやJSONの登録と検索
はじめに
本稿では、MarkLogicに格納できるデータを紹介し、実際にクエリコンソール上で挿入と検索を行う例をご紹介します。
MarkLogicに格納できるデータ
MarkLogicはXMLデータベースとしてスタートしましたが、現在のバージョン11では以下のようなデータを格納することができます。
- XML
- JSON
- テキストファイル
- バイナリ
- Triple
今回は、このうちXMLデータとJSONデータの2つに焦点を当ててご紹介します。
XMLとJSON
XML (Extensible Markup Language)とはタグ付け言語の略です。テキストベースとデータ交換用フォーマットの1つであり、HTMLのようなタグでデータを囲んだマークアップ言語の1つです。
この<birth>2000</birth>
全体を要素、2000
というデータは要素値といいます。また<name id="01">Yamada</name>
要素の中にあるidのことを属性、"01"のことを属性値と言います。タグに何らかの接頭辞(例えば、<test:name>
のtest
)がついているものがあります。これは名前空間といいます。
JSON (JavaScript Object Notation) もテキストベースのデータ交換用フォーマットの1つです。表記法はJavaScriptのオブジェクト記法に依っています。
XMLの要素<birth>2000</birth>
に対応するのは、JSONのオブジェクト"birth": 2000
です。先頭部分にオブジェクト名があり、コロンで連携した先に値が入ります。
JSONはマークアップ言語ではないことから、XMLに比べて軽量な構造を持つと言えます。また一般的には、JSONデータからXMLデータに変換することもできます。一方で名前空間や属性に直接対応するものがないため、XMLデータからJSONデータへの変換の際には注意が必要です。
データの挿入と検索
データの挿入と検索を確かめるために、クエリコンソールを使ってクエリを実行してみます。MarkLogic端末に向けてWebブラウザからポート8000番にアクセスします。MarkLogicがインストールされた端末で実行する場合は、http://localhost:8000
をWebブラウザのURLに指定します。アカウント情報を求められますが、MarkLogicをインストールする時に作った管理者アカウントで構いません。
①XMLデータをXQueryで挿入する。
先に例を挙げた「会員id=01、2000年生まれの大阪在住Yamadaさん」を挿入するクエリを作成します。挿入するためにはxdmp:document-insert関数を用います。クエリコンソールのDatabaseをデフォルトで存在する「Documents」、Query Typeを「XQuery」として中部のテキストフィールドに貼り付けて実行します。この時オプションとしてコレクションを設定していますが、後ほど検索をするときに説明します。
②JSONデータをJavaScriptで挿入する。
次に「会員id=01、2000年生まれの東京在住Tanakaさん」のデータを挿入します。
MarkLogicではXQueryと等価なJavaScriptでのプログラミングも可能です。JavaScriptはJSONとの親和性が高いので、今度はJavaScriptで挿入クエリを書いてみます。
ここでは、XMLで属性値だったid
を新たなオブジェクトとしています。クエリコンソールのQuery Typeを「JavaScript」として中部のテキストフィールドに貼り付けて実行します。
最後にMarkLogicの検索関数cts:searchを用いて検索を行った例を示します。
顧客データのうち、生年が2000年のものを返す。
今回のデータでは「顧客データ」という検索範囲を示すためには、挿入先URIの「/customer/」を検索条件に用います。このとき用いる検索条件関数はcts:directory-queryです。次に生年はcollectionにある「/my/additional/collection/birth_2000」を用いることとします。これにはcts:collection-queryを用います。2つの検索条件はAND条件なので、cts:and-queryで1つにします。
クエリコンソールのQuery Typeを「XQuery」として以下のクエリを貼り付けて実行してみたら、画面の下部に挿入した2個のデータが出ることを確認します。
顧客データのうち、名前がYamadaのものを返す。
名前に関してはcollectionを設定していないため、データの中身のname要素まで見に行くことになります。このときに用いるcts:element-value-queryは、要素名またはオブジェクト名と値を指定して完全一致するかを検索条件とする関数です。
同じように、クエリコンソールに貼り付けて実行してみます。今度はYamadaさんのデータのみが出たのことが確認できます。
まとめ
本稿の内容をまとめます。
- XMLとJSONの違いを簡単に説明しました。MarkLogicはどちらも格納し、かつ1つのクエリで両方を得ることもできます。
- MarkLogicに対するクエリのうち、XQueryとJavaScriptを紹介しました。
- MarkLogicに対する検索は、ドキュメントURI・collection・要素値などに基づいて行うことができます。