Top > OOoBasic > Generic > RDF

RDF Edit

ODF 1.2 以降では ODF ドキュメントに RDF ファイルを同梱できます。RDF のサポートは OOo 3.3 現在では ODT (Writer) ドキュメントでのみサポートされています。 ドキュメントの内容と関係のないファイルを ODF ファイル内に入れておこうとしても、ドキュメントの上書き時に消えてしまいます。しかし、RDF ファイルは勝手に消されることはありません(もしかするとバグです)。

RDF ファイルは ODF ドキュメント中の要素に対するメタデータのために利用できます。たとえば、css.text.InContentMetadata は Writer ドキュメントのテキスト中に挿入できるメタデータ専用のテキストコンテンツです。また、様々な要素に対してメタデータを設定できます。

OOo 3.3 現在は RDF に保存されているメタデータを編集する UI は一切提供されていません。拡張機能やマクロが利用するものとなっています。

Ref: http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/RDF_metadata

URI Edit

RDF 中の要素の指定などに .rdf.URI サービスがエクスポートしている .rdf.XURI インターフェースが利用されます。 次のようにしてインスタンス化します。

oURI = com.sun.star.rdf.URI.create("hoge")

namespace を指定して作成する createNS メソッドもあります。また、定義済みのものを作成する createKnown メソッドは .rdf.URIs の定数を指定します。

Literal Edit

文字列を指定するときに利用します。

oLiteral = com.sun.star.rdf.Literal.create("contents")

RDF ファイルを作成する Edit

新しい RDF ファイルを作成して graph を保存できるようにします。ドキュメントオブジェクトの .rdf.XDocumentMetadataAccess インターフェースのメソッドを利用します。

.rdf.XURI addMetadataFile(string FileName, [].rdf.XURI Types)

FileName はドキュメントファイル内でのファイル名で、一般的には directory_name/file_name.rdf などとします。固有になるようにしてください。Types には作成する graph のタイプを指定します。

BASE_TYPE = "http://mytools.text/sidenotes/v1.0"
TYPE_NAME = "SidenotesSettings"
FILE_NAME = "mytools_text_sidenotes/settings.rdf"

type_name = BASE_TYPE + "/" + TYPE_NAME
type_uri = com.sun.star.rdf.URI.create(type_name)

graph_name = doc.addMetadataFile(FILE_NAME, Array(type_uri,))
repo = doc.getRDFRepository()
named_graph = repo.getGraph(graph_name)

このようにして情報 statement を追加していくグラフが取得できます。

ステートメントの挿入 Edit

グラフにステートメントを追加します。

.rdf.XNamedGraph addStatement(
    [in] XResource Subject, [in] XURI Predicate, [in] XNode Object)

ドキュメントのコンテンツを Subject に指定するときには XMetadatable インターフェースをサポートしているオブジェクトを指定できます。Predicate には適当なものを指定します。Object は大抵 .rdf.Literal を指定します。

NAMESPACE = "sidenotes:"

subject_uri = com.sun.star.rdf.URI.createNS(NAMESPACE, "Data")
value_uri = com.sun.star.rdf.URI.createKnown(_
     com.sun.star.rdf.URIs.RDF_VALUE)
object_literal = com.sun.star.rdf.Literal.create("123")

named_graph.addStatement(subject_uri, _
               value_uri,  object_literal)

RDF ファイルの削除 Edit

graph_names = doc.getMetadataGraphsWithType(type_uri)
If UBound(graph_names) > 0 Then
  graph_name = graph_names(0)
  doc.removeMetadataFile(graph_name)
End If

RDF データの読み込み Edit

graph_names = doc.getMetadataGraphsWithType(type_uri)
If UBound(graph_names) > 0 Then
  graph_name = graph_names(0)
  named_graph = repo.getGraph(graph_name)
  
  enume = named_graph.getStatements(Null value_uri, Null)
  While enume.hasMoreElements()
    statement = enume.nextElement()
    ' ...
  WEnd
End If

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes