Reactive Programming と XML Validation

最近にわかにReactive(Incremental?) Programmingが流行っているきがする

Reactive Ruby : RubyでReactive Programmingしてみた

最近、実用的なコードばかり書いているので、もっと役に立たないコードを書くべきだと思い、 Reactive Rubyというライブラリを作ってみました。
(略)
で、何に使えるの?

何に使えるんでしょうね?

最近読んだ論文から「こんな活用例あるよー」とコメントしたが,実は論文のなかみを真面目に読んでいなかったので読んでみた

Consistently Updating XML Documents using Incremental Constraint Check Queries

1. Introduction

XML Documentが更新されるときに,DTDスキーマで規定される制約との整合性が保たれているかどうかをチェックしたい.
DB2などのDBMSに付属しているものもあるけど,それはRDBマッピングされることを前提としている.RDBの整合性チェックを借りているだけ
Native XMLでの整合性チェックをIncremental(Reactive?)にしたい

2. Modeling

XML Schemaの紹介(ここはまだ定式化の部分なので提案はない)

3. XML Query Update language

XQuery に UPDATE を拡張したものらしい, というか,XQueryてこんなんだっけ

  • FOR $binding IN XPath-expr
  • LET $binding IN := XPath-expr
  • WHERE predicate

ちなみに,UPDATEの例はこれ....あいかわらず割り算やっているように見える.

 FOR $p in document(“juicers.xml”)/juicer,
     $c in $p/cost[1] 
     UPDATE $p {
         DELETE $c
     }
 }

4. XML Consistency Constraints

挿入したり削除したり名前変更したりするときに検査すべき条件とか
たとえば,削除したときは要素数の最低個数をチェックしろ,とか

5. Application Of Constraint rules for update cases

実装.削除したときの整合性のチェックは次の2つの関数を用いて行う

  • getChildMinOccur($document, $parentName ,$childName )
  • isDeletable($child, $childPath, $minOccur)

(原文の関数名は違う.わかりやすい名前に変更)

さっきのupdate式に埋め込むと:

 FOR $p in document(“juicers.xml”)/juicer,
   $c in $p/cost[1]
   LET $constraint =
      getChildMinOccur(“juicers.xsd”,“juicer”,“cost”)
      UPDATE $p { 
          WHERE isDeletable($c,$p/cost,$constraint)
          UPDATE $p {
             DELETE $c
          }
      }

6. Safe update Queries Generation

上のような検査式を自動生成する方法.ここが面白いはずなんだけど参考文献見ろで半ページで終わっている.SAXEていうシステムで使っているらしいけど検索してもすぐにはでない.SAXとは関係ない?

7. Performance

次の2つをinsert delete rename replace 別で対決

  • (提案手法)スキーマチェックをするupdate Queryにかかる時間 + そのQuery を生成する時間
  • (従来手法)ナイーブなupdateにかかる時間 + フルValidationにかかる時間

結果は....提案手法の大敗!ちなみにQuery生成の時間を取り除いても負け

そのあと書かれている敗者の弁がどうも読み取れない

this does not mean that a safe Update-XQuery is inefficient.
....
the safe Update-XQuery is a one step process where updates
are only performed once the updates are deemed safe so that
all the attempts for invalid updates will be prevented.
....
The execution of non-safe Update-XQuery ...
may need to iterate several times between attempting updates
and then verifying if the updates leave the XML document in a consistent
state.

(訳)
こっ,これは決してsafe update(提案手法)が役にたたないのではなくて,
safe update は,ひとたびupdateが安全だとみなされれば,
updateが行われて,安全でないすべてのupdateは防止される.
一方non-safe なupdate(従来手法)はupdateの間に何度も繰り返して,
それからupdateの内容が整合性を保っているかをチェックするのだっ.

多分訳がぐだぐだなのだろう.多分.