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 グラフのデータは順序付けされていないため、長期的にはこれに依存しません。