* 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 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 |