【问题标题】:What is the relationship between RELAX NG and Schematron wrt DocBook?RELAX NG 和 Schematron wrt DocBook 之间有什么关系?
【发布时间】:2021-03-04 04:13:02
【问题描述】:

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

DocBook 5.2: The Definitive Guide, section 1.1. A Short DocBook History 声明

从 DocBook V5.0 开始,DocBook 是由 RELAX NG 和 Schematron 定义的专有 XML 词汇表。

根据Wikipedia on RELAX NG,它是“XML 模式语言——RELAX NG 模式指定 XML 文档的结构和内容模式”。

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

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

  • RELAX NG 用于定义用于创建 XML 文档的词汇表(这是一种用标签(?)表示的领域特定语言;在 DocBook 的情况下是语义标记语言)

  • Schematron 用于根据关联的 XML 模式验证 XML 文档(例如,我猜是使用 jing 吗?)

我假设基于DocBook wikipedia

[DocBook v5.x] 由带有集成 Schematron 规则的 RELAX NG 模式正式定义

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


可能缺少一些基本的东西:找到问题RelaxNG vs XML schema,但我真的认为有人用 RELAX NG 创建 XML 模式,所以这个问题对我来说没有意义,即使在阅读了答案之后......


相关

【问题讨论】:

  • 感谢您的编辑和回答!我也刚刚重新阅读了 DocBook 书的第 1 章(有问题的链接),发现“一些额外的约束用 Schematron 规则表达。”这行可以回答我的问题,但是 Tony 的下面的答案甚至显示了示例,也很感谢详细的解释。

标签: xml docbook schematron relaxng


【解决方案1】:

这是来自 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 中的断言做同样的事情。)

【讨论】:

    猜你喜欢
    • 2019-11-14
    • 2013-10-30
    • 2015-01-02
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2017-09-15
    相关资源
    最近更新 更多