是否有任何官方XSLT验证程序,例如适用于HTML&amp ;;的http://validator.w3.org/ XHTML?
我知道http://validator.w3.org/也可用于验证XML和XSL文档。但它们被验证为XML结构。
例如,在有效的XHTML中,<span><div>...</div></span>
无效,因为块元素不应出现在内嵌元素中。
那么,是否有一种方便的方法来直接验证XSL文档?
(我想我们可以结合XML和XSL,输出XHTML,然后验证它。但这不是直接而且不方便。)
谢谢!
答案 0 :(得分:11)
我假设通过验证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是合理的。
答案 1 :(得分:2)
在一般情况下,您不能采用任意XSLT样式表并静态证明它将生成有效的XHTML。但是,如果编写样式表以利用模式感知,则可以检测到不会出现的情况。为此,您需要一个执行静态检查的模式感知XSLT处理器(例如Saxon-EE),并且您需要样式表来(a)使用xslt:import-schema导入模式,以及(b)调用验证结果元素使用[xsl:] validation =“strict”。这将静态地检测样式表输出中的一些有效性错误(在编译样式表时),并动态地(在运行它时)检测其余部分。
答案 2 :(得分:0)
有许多XML编辑工具(也可能是一些HTML编辑工具)知道(X)HTML的结构足以突出显示错误。例如,Visual Studio可以使用模式验证任何XML文档,包括XHTML或XSL-在XHTML模式中是否定义了跨越内部的div。