问题标签 [schematron]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
schematron - 实施 schematron 规则
我是 schematron 的新手,我有以下问题。这是来自 xhtml 文件的片段:
我想创建一个规则来检查是否有provision
then header/div@class=desig/span@class=num
required 和 glossary
requires dl
。我一直在尝试这样但它不起作用:
任何帮助,将不胜感激。谢谢
xml - 如何将xml转换为schematron
谁能解释一下如何将xml文件转换为schematron文件进行验证?我正在研究 oracle soa,但我无法弄清楚如何。
xslt - 查找 XPath 表达式的相对构造(算法)
我遇到了一个有趣的需求,我已经有自己的工作实现,但我正在努力确保我已经涵盖了所有极端情况。
我想要实现的最好描述为“XPath 条件委托”。
假设某种晦涩的模式语言可以使用任意 XPath 条件来约束实例元素。这些条件被转换为 Schematron 断言,然后应用于 XML 实例文档。为了使其工作,每个条件都需要一个上下文节点来测试表达式(这就像说:“在 XML 实例文档中找到某个元素,然后检查 XPath 条件是否适用于它”)。事情是; 可以为虚拟/抽象节点定义我的模式语言中的某些条件,这些节点从未出现在实例文档中(xsd:choice 在这里可能是一个合适的类比——它只存在于语言文件中,而不存在于实例中)。所以我想,好吧,让我们简单地将条件从父虚拟节点委托给子节点,实际出现在 XML 实例中。结果很好!如果您只使用绝对 XPath 位置路径,那就是......
模式语言的假设示例:
这基本上是说,允许<smth>
具有 a<c-enabled>
和一个<foo>
子元素的元素,并且 if<c-enabled>
的值'true'
也允许 a<one>
或一个<two>
子元素。有效实例文档的示例:
因此,如前所述,我决定将条件委托给<one>
and <two>
,实质上是在运行时将上述模式重构为以下内容:
这显然只有在使用绝对路径编写 XPath 条件时才有效。每次在实例文档中遇到<one>
or<two>
时,都会通过将它们用作初始上下文节点来检查条件(它们是current()
XSLT 中返回的内容)。
因此,在阅读了一些XPath 规范并使用结合此语法的精彩ANTLR4 工具创建 XPath 解析器并实现了转换解析树步行器之后,我现在将原始模式重构为:
请注意,这只是我正在处理的 XPath 条件的一个简单示例(这不是简单地编写正则表达式来处理它的问题),因为它们是完全任意的,由创建模式定义的人组成。关于它们,我唯一可以确定的是它们是有效的 XPath 1.0 表达式(只有基本函数,没有变量)。
所以我的问题是:根据 XPath 1.0 规范,XPath 表达式中可能出现引用初始上下文节点(以相对方式)的构造的位置是什么?
我目前的假设是:任何在解析树中没有以下祖先的RelativeLocationPath : AbsoluteLocationPath和Predicate。如果 RelativeLocationPath 前面有一个 AbsoluteLocationPath,则该组合形成一个绝对构造。在谓词中,所有路径都指向不同的上下文节点或者是绝对的。
我假设这是基于我制作的这张图(表示使用我上面提到的语法解析 XPath 时如何调用产品):
下面是一些我需要在 XPath 表达式中找到的地方的示例。基本上是在寻找这些(可能还有其他)的正式定义。
xpath - Schematron 测试内容节点的文本(直到某个位置)
我想编写一个 Schematron 规则来测试其中的值是今年、去年还是明年。
问题是该值可能包含年份范围,例如:2013-2014。我只想测试(2013)文本节点的前四位。
这是我写的,但它不正确。你能返回一个文本节点的位置吗?
XML 文件:
Schematron 规则:
验证 XML 文件时,会触发规则,但 2013 年是有效年份:发布年份 (pub-date[@pub-type='epub-ppub']/year) 为“2013-2014”。应该是今年(2013 年)、去年或明年。
xml - 将 Schematron 与 Perl 一起使用
我正在尝试阅读有关 Schematron 和 Perl 的文章。
http://www.xml.com/pub/a/2002/01/23/perl-schematron.html?page=2
我的目标是使用 Schematron 和 RelaxNG 来验证 Docbook 5 文档。
但是,我似乎无法让这个基本示例起作用。这是我从 O'Reilly 文章中复制的 Perl 脚本:
我这样调用脚本:
perl schematron.pl path-to-docbook.sch path-to-xml-file
我得到了与命名空间“db”有关的错误:
我的 docbook.sch 文件开始如下。它是 Docbook 5 发行版附带的 docbook.sch 模式文件:
会不会是 Perl 模块使用了不理解命名空间的 Schematron 版本?或者可能是 docbook.sch 不正确?那会很奇怪,因为它随 Docbook 发行版一起提供。
我可能缺少一些基本的东西,因为我是 Schematron 的新手。
xml - Schematron sh 脚本不正常
我为 Schematron 找到了一个 shell 脚本,您应该能够提供 Schematron 模式和 XML 文档,以便将 Schematron 规则应用于 XML 文档。我在这里找到了脚本:
https://code.google.com/p/schematron/wiki/RunningSchematronWithGNOMExsltproc
脚本使用的各种 xsl 文件可从此处的 Schematron 发行版下载:
http://www.schematron.com/implementation.html
为方便起见,我将在这里重复 shell 脚本。
我像这样运行脚本:
run_schematron.sh docbook1.sch my_xml.xml
shell 脚本生成中间文件 step1.xsl、step2.xsl 和 step3.xsl。但是我已经在 step2.xsl 中偏离了轨道,因为它看起来像这样:
对我来说,这看起来不像 XSL 样式表。有任何想法吗?
xml - 在浏览器中针对 Schematron 验证 XML
Internet 浏览器支持针对 XSD 验证 XML,但是否存在任何插件可以增强这些功能以包括 Schematron 或 RELAX NG?我正在寻找一种适用于 Internet Explorer 的软件。
xml - XML Schematron 验证
这个 xml 文件
和这个 xsd 文件
和这段代码
我正在使用 NMatrix.Schematron 验证器,但它不正确。该方法并不总是异常。
xml - 如何验证跨文档引用?
我想从我为另一个 xml 制作的 xsd 检查另一个 xml 中是否存在属性。
例如,我有这个 xsd
我还有另一个xsd
并且我想确保在第一个 xsd 中命名name
的元素的命名model
属性存在于第二个 xsd中key
元素的命名属性中
,换句话说,如果第一个 xsd 中命名的属性值不存在于第二个xsd,一定会出错。
xml 示例:
第一个 xsd 的 xml:value
name
第二个xsd的xml:
它必须告诉存在错误,因为word
第二个 xml 中没有具有属性的标记,B
这会在 xsd 中发生吗:)?
虽然这是一个正确的
xml - 系统功能匹配在 Oxygen schematron 验证中不起作用
我正在使用 OXygen XML Developer 15 针对 schematron 运行 XML 文件验证。我在系统函数“匹配”上遇到错误,如下所示
我在互联网上搜索了答案,发现这个帖子表明这是一个氧气问题。但是,这个帖子就像6年前一样。我不敢相信问题仍然存在。或者我在这里缺少什么。
尽管我真的很喜欢 oXygen,但我不必使用它。所以如果我不能解决这个问题,有人可以推荐一个可以进行 schematron 验证的替代 XML 工具吗?
以下是我的schematron的全部内容: