1

Java で XMI から OWL (シリアル化された XML/RDF) に変換する必要があるため、基本的にこれは XML から XML への変換であり、ほとんどの場合、正規表現で遊んで、replaceAll を必要なものに使用できますが、それは非常に厄介な方法のようです。それ。後で簡単にカスタマイズできるように、何を提案しますか (私の OWL モデルは将来少し変更される可能性があります)。

私のアイデアは、XMI を (私の OWL モデルに従って) 作成されたクラス階層に読み込み、テンプレート エンジンを使用してそれを OWL (XML) として出力することでした。簡単にカスタマイズできる簡単な方法を知っていますか?

4

5 に答える 5

4

XSL Transformationsはこの種の作業に最適です。実際、この作業のために設計されています :-)

XSLT から始めるには、zvon リファレンスとそのチュートリアルをご覧ください。

于 2010-01-09T10:21:05.607 に答える
2

XSLT を使用して、XML を XML に変換できます。

このOReillyの記事は、始めるのに適した場所です。

于 2010-01-09T10:21:10.380 に答える
1

XMI は、OWL への直接変換にはあまり適したフォーマットではありません - XMI には、同じ意味を持つ多くの異なる構造があります ( @stereotype="foo"stereotype/@name="foo"、およびstereotype/@xmi:id="{id of the foo stereotype}"すべて同じことを意味します) - XMI が最初である 2 段階のプロセスを使用することを強くお勧めします。そのような参照が解決され、OWL にマッピングしたくない情報が削除される標準形式に変換されます。

XSLT キーの機能と要素は、慣れていなくても役立つでしょう。XSLT1 で実行することもできますが (他に利用できるものがなかったときに実行しました)、Saxonなどの XSLT2 プロセッサで作業すると、変換がはるかに簡潔になります。XSLT に関する質問をするのに最適な場所は、Mulberry リストです。

GUI を介してこれを行う sourceforge のツールがありましたが、見つけられないようです。私の中間変換は、以前の雇用主が所有しています。コード生成または XMI から XML への変換には、XSLT を直接使用し、2 段階のアプローチを使用します。

于 2010-01-09T11:00:20.970 に答える
0

XSLT は、XML ノードのツリーを処理するために設計されています。XML ノード (RDF/XML および RDF/XML-Abbrev) の「ツリー」である RDF シリアル化がありますが、基礎となる RDF データ モデルはグラフです。

結果の RDF グラフもツリーではない場合、参照をトラバースするために XSLT で汚いことをしなければならず、パフォーマンス/保守性/健全性が損なわれる可能性があります。OWL フォーマットを変更してから非 RDF XML に変換する場合は、この点に注意してください。

簡単な (ツリー) 例は次のとおりです。

## Foo has two types
@prefix e: <uri://example#>.
e:Foo a e:Bar.
e:Foo a e:Baz. # Second statement about e:Foo

非 RDF XML に戻す変換の場合、最も基本的な RDF/XML 形式を使用すると、最上位rdf:RDF要素のすぐ下に RDF ステートメントのリストが表示されます。これらを変換するには、ステートメントのリスト全体を何度も検索する必要があります。

<rdf:RDF xmlns:e="uri://example#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="uri://example#Foo">
    <rdf:type rdf:resource="uri://example#Baz"/>
  </rdf:Description>
  <rdf:Description rdf:about="uri://example#Foo">
    <rdf:type rdf:resource="uri://example#Bar"/>
  </rdf:Description>
</rdf:RDF>

RDF/XML-Abbrev 形式の方が読みやすいかもしれませんが、RDF のデータ モデルは順序付けられておらず、1 つのグラフに多数の同等の (ただし、XSLT とは互換性のない) XML 形式がある可能性があるため、XSLT で処理するのは簡単ではありません。上記の例は、次のいずれかとしてシリアル化できます。

<!-- Bar is the containing element -->
<rdf:RDF xmlns:e="uri://example#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <e:Bar rdf:about="uri://example#Foo">
    <rdf:type rdf:resource="uri://example#Baz"/>
  </e:Bar>
</rdf:RDF>

<!-- Baz is the containing element -->
<rdf:RDF xmlns:e="uri://example#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <e:Baz rdf:about="uri://example#Foo">
    <rdf:type rdf:resource="uri://example#Bar"/>
  </e:Bar>
</rdf:RDF>

シリアライゼーション用の標準形式を作成するという Pete Kirkham の提案は、XSLT を作成する際に役立ちます。ほとんどの場合、まったく同じ入力が与えられると、RDF ライブラリーはステートメントを毎回同じフォーマットにシリアライズしますが、RDF グラフのデータは順序付けされていないため、長期的にはこれに依存しません。

于 2010-01-09T17:15:05.227 に答える
0

XSLT が仕事のためのツールであるという rsp と cb160 に同意します。

UNIX プラットフォームを使用している場合は、xsltprocを使用してコマンド ラインで変換をテストすることを検討できます。私の経験では、XSL に慣れていない場合でも、開発時間を大幅に短縮できます。

于 2010-01-09T10:26:26.773 に答える