在PHP中验证XHTML5?

时间:2011-11-11 21:33:32

标签: php domdocument xml-validation relaxng html5

背景

我决定以application/xhtml+xml的身份向我的网站提供服务。我知道有后果,我愿意接受的后果。

问题

我正在尝试在PHP中验证XHTML5。这样,如果验证失败,我可以将文件作为text/html提供(嘿,不是没有人完美)。不过,即使在我的情况之外,我的问题仍然有用。

那么我可以选择如何验证XHTML5?


我做了什么:

我已经在我的源代码中使用PHP的DOMDocument作为模板形式,所以我希望能够使用DOMDocument::relaxNGValidateDOMDocument::schemaValidate。我找不到.xsd.rng来使用。但是,我想我找到了directory to make an rng grammar。在今天之前,我从未听说过Relax NG。这个方向有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

正如@Kevin Peno指出的那样,HTML5不是XML,虽然这最初让我误解了,但我已经接受了它并且决定只将HTML5作为最终输出格式,而不是可以通过XML工具重新使用和转换。

我的建议是,如果你想沿着这条路走下去,就是通过一个清理过程来传递你的HTML5标记,这个过程保证了有效的XML(Tidy等工具会浮现在脑海中)。

您的另一个选择是重新考虑您的方法并将HTML视为最终输出格式。使用不同的标记语言来存储内容,甚至可能存储您网站的结构。

例如,您可以使用Markdown作为内容(轻松转换为HTML)。如果您更喜欢坚持使用XML,可以定义自己的DSL,或者重用Simplified DocBook之类的DSL。这对我来说效果很好。

然后利用XSL将您的XML mash-up转换为HTML5,或任何您喜欢的输出格式。

现在,为了尝试直接回答您的问题,在使用诸如RelaxNG或XML Schema之类的验证工具之前,您肯定需要“整理”HTML5标记以确保它是有效的XML。至于你的RNG模式文件,我建议先找一个XHTML 1.0 Strict .rng,然后仔细阅读HTML5规范并根据需要添加元素和属性。快速谷歌搜索出现the following

如果您要在RNG和XML Schema之间做出决定,请为自己省去一些麻烦,然后去RelaxNG。这是我的看法,但我已经广泛使用了它,而RelaxNG更易于阅读,更易于使用!

答案 1 :(得分:2)

new (Nu) HTML5 Validator有各种预设的RELAX NG模式,包括XHTML5

请参阅 https://bitbucket.org/validator/syntax/src/ed90a83ab0fd/relaxng https://github.com/validator/validator/tree/master/syntax/relaxng

这是你正在寻找的还是我感到困惑?