RELAX NG 和 Schematron wrt DocBook 之间有什么关系?

What is the relationship between RELAX NG and Schematron wrt DocBook?

我很确定这个问题需要改进,但无法用一句话更好地表达我的困惑:

DocBook 5.2: The Definitive Guide, section 1.1. A Short DocBook History 表示

Starting with DocBook V5.0, DocBook is exclusively an XML vocabulary defined with RELAX NG and Schematron.

根据 Wikipedia on RELAX NG,它是“XML 的模式语言——RELAX NG 模式为 XML 的结构和内容指定模式文件".

Schematron on the other hand " 是一种基于规则的验证语言,用于断言 XML 树中是否存在模式。它是一种结构模式语言,用 XML."

所以两者都是模式语言,但是

我假设基于 DocBook wikipedia

[DocBook v5.x] is formally defined by a RELAX NG schema with integrated Schematron rules

他们之间有关系。此外,这是否意味着 RELAX NG XML 模式不够灵活,无法包含使用它来验证文档的所有规则?


可能遗漏了一些基本的东西:找到了问题 RelaxNG vs XML schema,但我真的认为人们使用 RELAX NG 创建了 XML 模式,所以这个问题没有意义我,即使看完了答案...


相关

这些是来自 http://www.oasis-open.org/docbook/xml/5.0b5/rng/docbook.rnc:

的紧凑语法 RELAX NG 模式的两个小摘录
    element segmentedlist {
      db.segmentedlist.attlist,
      db.segmentedlist.info,
      db.segtitle+,
      db.seglistitem+
    }
  db.seglistitem =
    
    ## A list item in a segmented list
    [
      s:pattern [
        name = "Cardinality of segments and titles"
        "\x{a}" ~
        "          "
        s:rule [
          context = "db:seglistitem"
          "\x{a}" ~
          "            "
          s:assert [
            test = "count(db:seg) = count(../db:segtitle)"
            "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist"
          ]
          "\x{a}" ~
          "          "
        ]
        "\x{a}" ~
        "        "
      ]
    ]
    element seglistitem { db.seglistitem.attlist, db.seg+ }

db.seglistitem RNG 模式在最外层的 [] 之间嵌入了一些 Schematron。

db.seglistitem RNG 模式定义了seglistitem 元素的结构。 RNG 比我所知道的任何其他 XML 模式语言更擅长定义共同约束,但它不能做所有事情。

Schematron 可以断言文档中任何位置出现的模式(或模式的出现,取决于您的观点),因为您可以将任何 XPath 放入测试中。此 Schematron 正在查看整个文档,以检查同级 segtitle 元素的数量是否与当前 seglistitemseg 元素的数量相匹配。对于定义文档的允许结构的语言(如 RNG)来说,这有点超出范围,但您还会发现仅使用 Schematron 来定义允许的结构是冗长和繁琐的。

像这样结合使用 RNG 和 Schematron,可以发挥各自的优势。 (您也可以对 XSD 1.1 中的断言做同样的事情。)