【问题标题】:Official XSLT validator?官方 XSLT 验证器?
【发布时间】:2014-01-03 12:19:41
【问题描述】:

是否有任何官方 XSLT 验证器,例如用于 HTML 和 XHTML 的 http://validator.w3.org/

我知道http://validator.w3.org/ 也可用于验证 XML 和 XSL 文档。但它们被验证为 XML 结构。

例如,在有效的 XHTML 中,<span><div>...</div></span> 是无效的,因为块元素不应出现在行内元素中。

那么,有没有一种方便的方法,可以直接验证 XSL 文档?

(我想我们可以结合XML和XSL,输出XHTML,然后验证它。但这不直接也不方便。)

谢谢!

【问题讨论】:

  • 我看不出这是如何工作的,除非是在最简单的情况下。您无法验证依赖于未知输入的未来产品。考虑一个样式表定义具有计算名称的元素的情况。验证者如何知道该名称最终会是什么?它可以是“span”,也可以是“div”。
  • 嗯...是的...感谢您的评论。这启发了我,并提出了另一个问题:使用相同的 XML 和 XSL,在某些情况下,它们会生成不同的 XHTML 吗?
  • 如果我们只验证 XSL,一些奇怪(但有效)的 XML 是否会对生成的 XHTML 做一些技巧(如注入)?
  • 你最后两个问题不清楚(对我来说,无论如何)。他们是谁”?相同的 XML 和 XSLT 应该产生相同的结果 - 不同处理器之间的差异很小(无关紧要)。
  • 是的,“他们”的意思是“XML 和 XSL”。那么,如果同一对 XML 和 XSL 会产生相同的结果,为什么我们不能输入一对 XML 和 XSL,并针对 XHTML 规则进行验证呢? (它不是“未来未知的产品”。)

标签: xml xslt xhtml validation


【解决方案1】:

有许多 XML 编辑工具(可能还有一些 HTML 工具)都知道 (X)HTML 的结构足以突出显示错误。例如,Visual Studio 可以使用架构验证任何 XML 文档,包括 XHTML 或 XSL——在跨度内是否允许 div 是在 XHTML 架构中定义的。

【讨论】:

  • 感谢您的回复。您还有其他 IDE 建议吗?尤其是免费的,比如 Eclipse PDT(你认为它可以吗)?
  • 不确定 eclipse,但看看这个问题,我认为它与您所问的类似:stackoverflow.com/questions/124865/…
【解决方案2】:

我假设验证 XSLT 样式表的意思是检查已经格式良好的 XML 文档(似乎是 XSLT 代码)中的元素、属性等是否符合 XSLT W3C 规范。

首先,请注意 XML 文档的格式正确性和有效性之间存在差异。如果包含的元素正确嵌套,如果存在单个根元素等等(这由 XML 规范定义),则它是格式良好的。另请参阅:Is there a difference between 'valid xml' and 'well formed xml'?

XML 文档的有效性只能与 XML 模式(或 DTD,或 RelaxNG...)一起验证。架构是一组规则,例如定义哪些元素和属性以什么顺序被允许。

现在,回答您的问题:W3C 没有这样的服务,但是,有一个可用的模式,请参见例如http://www.w3.org/2007/schema-for-xslt20.xsd 用于包含“标准”XSLT 2.0 的所有结构的模式。

您可以根据此架构验证您的 XSLT 代码。不过,使用 XSLT 处理器运行代码并查看它产生的警告和错误会更有洞察力。


此外,请注意 XSLT 代码的有效性和它输出的 XHTML 的有效性是不一样的。即使您的 XSLT 相对于 XSLT 规范完全有效,但这并不意味着生成的 XHTML 是合理的。

【讨论】:

  • 是的!非常感谢您的好回答,并提供架构。你在上一段中提到的正是我想要的——确保生成的 XHTML 是有效的——因为 XHTML 是用户真正感知的东西。
  • 不客气。请考虑接受对您最有帮助的答案(不一定是我的)。
  • 请继续你的最后一段,因为那是我最初想要做的。另外,请参阅我在上面the comment of my question 中提到的详细信息,以获取更多详细信息。我真的希望你能和我一起解决这个问题。非常感谢!
  • 是的,完全正确。 XSLT 代码无法根据 XHTML 规范进行验证。此外,如果不实际转换结果,则无法可靠地猜测结果。
  • XSD 并不意味着 XSLT 的 THE 模式,而是模式的通用名称。您不能在 XSLT 模式中包含 XHTML 的规则,但当然,XHTML 有自己的模式(例如,w3.org/TR/xhtml11/xhtml11_schema.html 代表 XHTML 1.1)。 [请避免进一步扩大讨论。]
【解决方案3】:

在一般情况下,您不能使用任意 XSLT 样式表并静态地证明它将生成有效的 XHTML。但是,如果编写样式表以利用模式感知能力,您可以检测到很多情况下它不会。为此,您需要一个可识别模式的 XSLT 处理器来进行静态检查(例如 Saxon-EE),并且您需要样式表来 (a) 使用 xslt:import-schema 导入模式,以及 (b) 在结果元素使用 [xsl:]validation="strict"。这将静态检测样式表输出中的一些有效性错误(编译样式表时),动态检测其余部分(运行时)。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多