倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

単純化のプロセス

RELAX NG スキーマ定義は妥当性検証を行う前に必ず、単純化 (simplification) というプロセスによって助長だが(プログラム等で)扱いやすい形に変形されます。 この変形の手順の概要は以下のようになっています(正式にはRELAX NG の仕様書を参照のこと):

  1. アノテーション
  2. 空白
  3. @datatype 属性
  4. <value> 要素の @type 属性
  5. @href 属性
  6. <externalRef> 要素
  7. <include> 要素
  8. <element>, <attribute> 要素の @name 属性
  9. @ns 属性
  10. QName
  11. <div> 要素
  12. 子要素の個数
  13. <mixed> 要素
  14. <optional> 要素
  15. <zeroOrMore> 要素
  16. 制限
  17. @combine 属性
  18. <grammar> 要素
  19. <define>, <ref> 要素
  20. <notAllowed> 要素
  21. <empty> 要素

このプロセスの結果、以下の要素が削除されます:

  • <optional>
  • <zeroOrMore>
  • <mixed>
  • <div>
  • <parentRef>
  • <externalRef>
  • <include>

残りの要素を独断と偏見で分類すると次のようになります:

カテゴリー 要素
XML ノード element, attribute, text, empty
論理構造 oneOrMore, choice, group, interleave
文法構造 grammar, start, define, ref, notAllowed
value, data, param, list
名前 name, anyName, nsName, except