N-TriplesのUnicode表現(\uxxxx)をデコードする

DBpediaをN-Triples形式で取得したらrdfs:labelプロパティの値として言語指定@enでUnicodeが含まれていた。その表現方法は現時点で未決定(下記リンク2のIssues参照)であるが、少なくとも取得ファイルでは\uで始まるエスケープ表現を用いていた。これはN3形式の踏襲で、すなわちそれは、Python Stringsを土台としている。そして更にJSONのStrings表現とも共通しているが、条件として表現対象の文字がBasic Multilingual Plane(0000からFFFF)に含まれている場合に限られる。その他の場合、Python StringsやJSONでは、\uxxxxを繰り返すのに対し(例、U+1D11Eは”\uD834\uDD1E”)、N3やN-Triplesでは\U(大文字のU)から始まる表現(\U00xxxxxx)を採用している。
さて、このようなエスケープ表現を含む文字列をデコードする方法だが、今回はjavaを用いたので、JenaとSesameについて調査した。その結果、Jenaは明示的にエスケープ表現を含む文字列をデコードするメソッドは公開されていないようだ。Sesameについてはとても簡単で、そのものズバリ、unescapeStringメソッドがNTriplesUtilクラスに用意されている。もちろん、RDFデータを読み書きする限りでは、エスケープ表現を含む文字列をそのまま独立して扱うことは稀だろうけれど、今回のように、rdfs:labelプロパティの値だけを抽出したデータを対象として処理するときには便利。因みに、JenaとSesameを比較しているページがあったので参考としてリンクを張っておく。

  1. DBpedia Downloads
  2. N-Triples (1)
  3. N-Triples (2)
  4. Notation 3
  5. Python strings
  6. JSON
  7. Jena
  8. Sesame
  9. unescapeString
  10. Jena vs Sesame