工具(过滤器)将HTML5转换为多语言标记?

时间:2015-02-14 21:46:29

标签: xml html5 polyglot-markup

上下文:我的 HTML5文档不需要Javascript,动画,表单......它们只是内容"。因此,可以对这些表示进行过滤,只需要"全HTML5表示"的某些子集/约束。表达这种情况(以及其他更广泛的情况!)的好方法是说"我的文档可以用 Polyglot Markup 约束来表达"。

问题:是否有工具可以转换(或过滤丢失虚假信息)"任何HTML5"进入Polyglot XHTML5
优选地,基于DOM(或XSLT或XQuery)的扩展的工具。

2 个答案:

答案 0 :(得分:2)

我不会有完整的解决方案。 在我看来,这种转换有两个甚至三个阶段:

第1阶段:HTML5格式正确

第一阶段有一种黑色艺术,需要适应HTML 5缺乏结构良好的要求。

在你有一个DOM之前,你需要这个,然后才有机会获得期望远程看起来像xml的工具。

那么谁实现了这样的转换:(几乎?)每个浏览器。不少有源代码。您也可以从正在运行的浏览器中获取此信息: 检查源代码,看看它对标签汤的作用是什么,你得到结构良好的源代码。

找到此类源代码的另一个地方是编辑器,允许您在网页中编辑xhtml(FCKeditor等)

e.g。 <p>para<ul><li>bullet</ul><p>para 变为<p>para</p><ul><li>bullet</li></ul><p>para</p>

第2阶段:过滤掉Polyglot中不允许的内容

一旦html标签结构合理,下一步就必须删除多语言标记中不允许的内容,因为它与html解析器和XML解析器之间的解释方式存在差异。

您可能有机会使用XSLT并构建过滤器,但您无法验证它,因为没有DTD或任何等效的用于验证polyglot(x)html。即使那些存在的xhtml5的验证器正在被废弃,所以它会使你的任务变得困难。

无论如何,尝试找到存在的其中一个验证器的来源是找到附近的源代码的最佳选择。

第3阶段:修复外部实体

说什么?那么你可以拥有漂亮的多语言(x)html并包含一个单一的javascript来执行单个document.write,但它仍然会失败。所以你需要在它工作之前追捕所有这些。

答案 1 :(得分:0)

我不知道这样的工具,但基于正则表达式,我认为应该可以使用您首选的编程语言编写自己的转换器。我给你一个使用Java正则表达式的例子,但它也应该转移到PHP。您可以在regexplanet.com

上对其进行测试
  

鉴于:任何自动关闭的html标记,例如<textarea class="placeholder"/>

     

目标:标记应转换为<textarea class="placeholder"></textarea>

这可以使用替换字符串上的{常规匹配表达式,例如<\s*([^\s>]+)([^>]*)/\s*>来实现,例如<$1$2></$1>。表达式在标记中找到第一个单词textarea,将其分配给模式组no。 1和标签上的所有属性模式组号。这使你可以连续组号。开头标记中的1和2以及重用组号。再次在结束标记中显示1。

希望这有帮助。