我正在考虑将我的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代码。我的问题是这样的:
你有什么想法完成这个过程吗? (例如,映射html标签,排序,插入和删除节点等)。任何想法都将不胜感激。
您尝试(或看到)类似的东西吗?个人经历,教程等?
您如何建议制作桌面结构?例如,为了避免重复相同的html结构(通常是标题,菜单,页脚)?
还有什么其他可能有用且与此主题相关的内容?
我希望你觉得这个话题和我一样有趣:)
PS:我想使用SQLite,但我认为如果你不建议任何太多的数据库特定的话无关紧要
PPS:请在您建议之前阅读,这不是一个好主意:)
我想在sql中完成大部分项目。这是浪费时间,所以不要担心:) 这只是实验性的事情。如果选择语言非常重要,我会使用python而不是php。基本上,因为你有ORM拥有与数据库无关的应用程序,我试图反过来 - 只使用任何语言访问语言无关的sql数据库。这或多或少是我的目标。 说到浪费我的时间,我可以对参与任何php框架的穷人说同样的话。最近,我检查了一些,从我的角度来看,我会把时间浪费在一些真正不同的东西上:)
答案 0 :(得分:1)
有许多方法可以在RDBMS中存储树结构。但是,HTML并不是一个完美的树形结构。您将面临从数据中创建有效HTML的众多问题(<p>
应该关闭吗?selected
属性是否有值?等等。
此外,SQL并不是一种容易操作树的语言。换句话说,对数据库中的模板进行任何非平凡的编辑都会非常痛苦。
所以我想你想序列化一个DOM树,你知道如何从常规的HTML文件生成,以节省解析时间。您也可以将其存储为完整的DOM树,而不是作为一系列片段,只添加HTML模板具有循环的子节点。这将排除大部分DOM毛羽:为什么要先麻烦地解析它只是为了稍后序列化?
这,BTW,将要求模板本身是一个格式良好的树:没有条件封闭的标签或类似的。一些模板引擎需要这个。
我不把这个东西存放在一棵树上。相反,我将解析后的模板存储为具有标记的平坦片段序列,其中嵌套结构的开始和结束。加载是微不足道的,处理是微不足道的(所有你需要的是一个堆栈来跟踪嵌套),并且更容易用眼睛和调试进行检查。
或者也许你会环顾四周,找到一个现成的模板引擎来做到这一点。我不知道现代PHP环境是什么样子,但在如此成熟的环境中找到现有解决方案的机会非常高。
如果您仍采用树方法,请确保您可以在一个查询中加载整个树,因为数据库往返不是那么便宜,即使对于进程中的SQLite也是如此。
但在您继续使用任何方法之前,请先对您的代码进行分析。我敢打赌模板不是瓶颈,降低数据库/文件系统访问次数会对延迟和CPU负载产生更明显的影响。