Xml RELAX NG和Schematron wrt DocBook之间的关系是什么?
我很确定这个问题需要改进,但我无法用一句话更好地表达我的困惑: 声明 从DocBookV5.0开始,DocBook是一个专门使用RELAXNG和Schematron定义的XML词汇表 根据,它是一种“XML模式语言——RELAXNG模式指定XML文档的结构和内容模式” “是一种基于规则的验证语言,用于断言XML树中是否存在模式。它是一种用XML表示的结构化架构语言。” 这两种语言都是模式语言,但是Xml RELAX NG和Schematron wrt DocBook之间的关系是什么?,xml,docbook,schematron,relaxng,Xml,Docbook,Schematron,Relaxng,我很确定这个问题需要改进,但我无法用一句话更好地表达我的困惑: 声明 从DocBookV5.0开始,DocBook是一个专门使用RELAXNG和Schematron定义的XML词汇表 根据,它是一种“XML模式语言——RELAXNG模式指定XML文档的结构和内容模式” “是一种基于规则的验证语言,用于断言XML树中是否存在模式。它是一种用XML表示的结构化架构语言。” 这两种语言都是模式语言,但是 RELAX NG用于定义用于创建XML文档的词汇表(这是一种用标记(?)表示的特定于领域的语言;
- RELAX NG用于定义用于创建XML文档的词汇表(这是一种用标记(?)表示的特定于领域的语言;DocBook是一种语义标记语言)
- Schematron用于根据XML文档关联的XML模式验证XML文档(例如,我想使用?)
可能遗漏了一些基本的东西:找到了问题,但我真的认为可以使用RELAX NG创建XML模式,因此即使在阅读了答案之后,这个问题对我来说也没有意义…以下是精简语法RELAX NG模式的两个小摘录:
db.seglistitem
RNG模式在最外层的[
和]
之间有一些嵌入式Schematron
db.seglistitem
RNG模式定义了seglistitem
元素的结构。据我所知,RNG在定义共同约束方面比任何其他XML模式语言都要好,但它不能做所有事情
Schematron可以在文档中的任何位置对出现的模式(或模式的出现,取决于您的视角)进行断言,因为您可以在测试中放置任何XPath。此Schematron正在查看文档,以检查同级segtile
元素的数量是否与当前seglistitem
的seg
元素的数量匹配。对于像RNG这样定义文档允许的结构的语言来说,这有点超出了范围,但是您也会发现仅使用Schematron定义允许的结构既冗长又麻烦
像这样结合使用RNG和Schematron,可以利用它们各自的优势。(您也可以对XSD 1.1中的断言执行相同的操作。)感谢您的编辑和回答!我还重新阅读了DocBook手册(有问题的链接)的第1章,找到了“一些附加约束用Schematron规则表示”这句话,这句话本来可以回答我的问题,但Tony下面的回答甚至给出了一些示例,我们也非常感谢您的详细解释。
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+ }