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."
所以两者都是模式语言,但是
RELAX NG用于定义词汇表(这是一种用标签(?)表示的领域特定语言;语义标记语言DocBook 的情况)用于创建 XML 文档
Schematron 用于根据关联的 XML 模式验证 XML 文档(例如使用 jing
,我猜?)
我假设基于 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 模式,所以这个问题没有意义我,即使看完了答案...
相关
- Schematron
- (github) SchXslt [ʃˈɛksl̩t] – An XSLT-based Schematron processor
- https://github.com/topics/schematron
- Schematron: validating XML using XSLT
- (计算器溢出)Validating XML with Schematron
- (计算器溢出)command line validator supporting relax ng Schemas with embedded iso Schematron
- (计算器溢出)How to check that attributes are unique with RelaxNG?
- (氧气文档)Embedding Schematron Rules in XML Schema or RELAX NG
这些是来自 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
元素的数量是否与当前 seglistitem
的 seg
元素的数量相匹配。对于定义文档的允许结构的语言(如 RNG)来说,这有点超出范围,但您还会发现仅使用 Schematron 来定义允许的结构是冗长和繁琐的。
像这样结合使用 RNG 和 Schematron,可以发挥各自的优势。 (您也可以对 XSD 1.1 中的断言做同样的事情。)
我很确定这个问题需要改进,但无法用一句话更好地表达我的困惑:
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."
所以两者都是模式语言,但是
RELAX NG用于定义词汇表(这是一种用标签(?)表示的领域特定语言;语义标记语言DocBook 的情况)用于创建 XML 文档
Schematron 用于根据关联的 XML 模式验证 XML 文档(例如使用
jing
,我猜?)
我假设基于 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 模式,所以这个问题没有意义我,即使看完了答案...
相关
- Schematron
- (github) SchXslt [ʃˈɛksl̩t] – An XSLT-based Schematron processor
- https://github.com/topics/schematron
- Schematron: validating XML using XSLT
- (计算器溢出)Validating XML with Schematron
- (计算器溢出)command line validator supporting relax ng Schemas with embedded iso Schematron
- (计算器溢出)How to check that attributes are unique with RelaxNG?
- (氧气文档)Embedding Schematron Rules in XML Schema or RELAX NG
这些是来自 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
元素的数量是否与当前 seglistitem
的 seg
元素的数量相匹配。对于定义文档的允许结构的语言(如 RNG)来说,这有点超出范围,但您还会发现仅使用 Schematron 来定义允许的结构是冗长和繁琐的。
像这样结合使用 RNG 和 Schematron,可以发挥各自的优势。 (您也可以对 XSD 1.1 中的断言做同样的事情。)