トップ «前の日記(2004-02-16) 最新 次の日記(2004-02-19)» 月表示 編集

日々の流転


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}}
本日のツッコミ(全2件) [ツッコミを入れる]
ψ chiko (2004-02-18 16:39)

Jenaも集合の等しさでModelの等しさを決めています.というか,ModelってTripleの集合なので,それが一番シンプルな手法だとおもうのでつ.

ψ さかい (2004-02-18 17:56)

あ、いや、ModelをTripleの集合として扱うのは当然で、僕が考えた方法で重要なのは、Blank Node の等しさを、<br>* そのBlank Nodeを主語とするTripleの集合<br>* そのBlank Nodeを目的語とするTripleの集合<br>がそれぞれ等しい事によって決める点です。<br><br>もちろん、Tripleの等しさは主語,述語,目的語がそれぞれ等しいことによって決めるので、普通にやるとBlank Nodeの等しさとTripleの等しさの定義が循環してしまうのですが、この問題は超集合論を使って解決してます。<br><br>それほどオリジナリティのある方法ではないと思うけど、Jenaが全く同じことを既にやっていたらちょっとショックなのだ。