如何在sql中存储html文件?

时间:2015-06-24 16:37:26

标签: html sql structure

我正在考虑将我的html文档存储在这样的表中:

id    content     parent      tag
1                 0           html
2                 1           head
3                 1           body
4     Main page   2           title
5     Hello world 3           h1

这只是一个简单的例子。结果应该是

<html>
 <head>
   <title> Main page </title>
 </head>

 <body>
  <h1> Hello world </h1>
 </body>
</html> 

现在,我可以使用CTE和SQL进行查询,从而得到正确的树结构。我的想法受到了这个页面的启发: https://www.sqlite.org/lang_with.html (向下滚动以查找使用sql解决数独的最佳部分。)

我想尽可能多地使用sql来避免PHP代码。我的问题是这样的:

  1. 你有什么想法完成这个过程吗? (例如,映射html标签,排序,插入和删除节点等)。任何想法都将不胜感激。

  2. 您尝试(或看到)类似的东西吗?个人经历,教程等?

  3. 您如何建议制作桌面结构?例如,为了避免重复相同的html结构(通常是标题,菜单,页脚)?

  4. 还有什么其他可能有用且与此主题相关的内容?

  5. 我希望你觉得这个话题和我一样有趣:)

    PS:我想使用SQLite,但我认为如果你不建议任何太多的数据库特定的话无关紧要

    PPS:请在您建议之前阅读,这不是一个好主意:)

    我想在sql中完成大部分项目。这是浪费时间,所以不要担心:) 这只是实验性的事情。如果选择语言非常重要,我会使用python而不是php。基本上,因为你有ORM拥有与数据库无关的应用程序,我试图反过来 - 只使用任何语言访问语言无关的sql数据库。这或多或少是我的目标。 说到浪费我的时间,我可以对参与任何php框架的穷人说同样的话。最近,我检查了一些,从我的角度来看,我会把时间浪费在一些真正不同的东西上:)

1 个答案:

答案 0 :(得分:1)

有许多方法可以在RDBMS中存储树结构。但是,HTML并不是一个完美的树形结构。您将面临从数据中创建有效HTML的众多问题(<p>应该关闭吗?selected属性是否有值?等等。

此外,SQL并不是一种容易操作树的语言。换句话说,对数据库中的模板进行任何非平凡的编辑都会非常痛苦。

所以我想你想序列化一个DOM树,你知道如何从常规的HTML文件生成,以节省解析时间。您也可以将其存储为完整的DOM树,而不是作为一系列片段,只添加HTML模板具有循环的子节点。这将排除大部分DOM毛羽:为什么要先麻烦地解析它只是为了稍后序列化?

这,BTW,将要求模板本身是一个格式良好的树:没有条件封闭的标签或类似的。一些模板引擎需要这个。

我不把这个东西存放在一棵树上。相反,我将解析后的模板存储为具有标记的平坦片段序列,其中嵌套结构的开始和结束。加载是微不足道的,处理是微不足道的(所有你需要的是一个堆栈来跟踪嵌套),并且更容易用眼睛和调试进行检查。

或者也许你会环顾四周,找到一个现成的模板引擎来做到这一点。我不知道现代PHP环境是什么样子,但在如此成熟的环境中找到现有解决方案的机会非常高。

如果您仍采用树方法,请确保您可以在一个查询中加载整个树,因为数据库往返不是那么便宜,即使对于进程中的SQLite也是如此。

但在您继续使用任何方法之前,请先对您的代码进行分析。我敢打赌模板不是瓶颈,降低数据库/文件系统访问次数会对延迟和CPU负载产生更明显的影响。