Top > OOoBasic > Generic > RDF

* RDF [#e1e8bf40]
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

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

 oURI = com.sun.star.rdf.URI.create("hoge")
namespace を指定して作成する createNS メソッドもあります。また、定義済みのものを作成する createKnown メソッドは .rdf.URIs の定数を指定します。

** Literal [#o2f8ee31]
文字列を指定するときに利用します。

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


** RDF ファイルを作成する [#x94e1c4c]
新しい 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 を追加していくグラフが取得できます。

** ステートメントの挿入 [#kba696b3]
グラフにステートメントを追加します。

 .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 ファイルの削除 [#q9a220d9]
 graph_names = doc.getMetadataGraphsWithType(type_uri)
 If UBound(graph_names) > 0 Then
   graph_name = graph_names(0)
   doc.removeMetadataFile(graph_name)
 End If
** RDF データの読み込み [#m8046f32]
 graph_names = doc.getMetadataGraphsWithType(type_uri)
 If Len(graph_names) > 0 Then
 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