2004-02-17 [長年日記]
λ. Rena (3)
パーサのテストケースを書くために、RDF/XMLとNTriplesで書いた二つのファイルを読み込んで、両者のモデルが等しいことを確かめたい。が、Blank Nodes の対応をとるのが結構面倒くさいのだ。何かいい方法はないものか。
……最大のbisimulationを同値関係として使ってしまうか。ちょっと強すぎるかも知れないけど、どうせテストなんだから細かいことは気にしない、ウヒヒ。とはいっても一からコード書くのは面倒だな。せっかく、hyperset.rbを書いたのだから、以下のようにして集合に落として、集合の等しさに問題を還元しよう。よし、うまくいった。
- eval(model) = { <f(model, s.subject), s.predicate, f(model, s.object)> | s∈model }
- f(model,n) = { <true, s.predicate, f(model, s.object)> | s∈model, s.subject=n } ∪ { <false, s.predicate, f(model, s.subject)> | s∈model, s.object=n } (if n is a blank node)
- f(model,n) = n (otherwise)
- <a,b,c> = {{a}, {a,b}, {a,b,c}}
λ. 読書
- 『 ふしぎ遊戯 4』
- 『 ふしぎ遊戯 5』
- 『 ふしぎ遊戯 6』
- 渡瀬 悠宇 [著]
Jenaも集合の等しさでModelの等しさを決めています.というか,ModelってTripleの集合なので,それが一番シンプルな手法だとおもうのでつ.
あ、いや、ModelをTripleの集合として扱うのは当然で、僕が考えた方法で重要なのは、Blank Node の等しさを、<br>* そのBlank Nodeを主語とするTripleの集合<br>* そのBlank Nodeを目的語とするTripleの集合<br>がそれぞれ等しい事によって決める点です。<br><br>もちろん、Tripleの等しさは主語,述語,目的語がそれぞれ等しいことによって決めるので、普通にやるとBlank Nodeの等しさとTripleの等しさの定義が循環してしまうのですが、この問題は超集合論を使って解決してます。<br><br>それほどオリジナリティのある方法ではないと思うけど、Jenaが全く同じことを既にやっていたらちょっとショックなのだ。