gpt4 book ai didi

python - 解析 DTD 以揭示元素的层次结构

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:09 25 4
gpt4 key购买 nike

我的目标是解析几个相对复杂的 DTD 以揭示元素的层次结构。 DTD 之间的唯一区别是版本,但每个版本都没有尝试保持向后兼容——那太容易了!因此,我打算将每个 DTD 定义的元素结构可视化,以便设计适合统一存储数据的数据库模型。

因为我在 Python 中研究过的大多数解决方案只会针对外部 DTD 进行验证,所以我决定从头开始我的努力。 Python 的 xml.parsers.expat 只解析 XML 文件并实现非常基本的 DTD 回调,所以我决定查看 original version ,它是用 C 编写的,并声称完全符合 XML 1.0 规范。但是,我对这种方法有以下疑问:

  1. expat(在 C 中)是否会解析 DTD 文件中的外部实体引用并遵循这些引用、解析它们的元素并将这些元素添加到层次结构中?
  2. expat 能否概括和处理 SGML,或者它会在遇到无效 DTD 但有效的 SGML 文件后失败吗?

我的要求可能得出expat不合适的结论。如果是这样的话,我正在考虑为 XML 1.0 DTD 编写一个词法分析器/解析器。还有其他我应该考虑的选择吗?

下面更简洁地说明了我的意图:

输入 DTD 摘录

<!--A concise summary of the disclosure.-->
<!ELEMENT abstract (doc-page+ | (abst-problem , abst-solution) | p+)>

从 DTD 摘录(伪代码)创建的对象

class abstract:
member doc_page_array[]
member abst_problem
member abst_solution
member paragraph_array[]
member description = "A concise summary of the disclosure."

一个具有挑战性的方面是归因于 <!ELEMENT>标记出现在其上方的评论。因此,如果我不能使用 expat 来完成此操作,则可能需要自行开发的解析器。

另一个问题是一些解析器在处理使用大于 #xFFFF 的 unicode 字符的 DTD 时遇到问题,因此这可能是另一个有利于创建我自己的 DTD 的因素。

如果事实证明 lexer/parser 路由更适合我的任务,有没有人碰巧知道转换 these EBNF expressions 的好方法?能够被解析的东西?我认为“最佳”方法可能是使用正则表达式。

无论如何,这些只是我对我的问题的想法。任何对上述问题的回答或对替代方法的建议都将不胜感激。

最佳答案

有几种现有工具可以满足您的需求,包括 DTDParse , OpenSP , Matra , 和 DTD Parser .还有articles关于创建自定义解析器。

关于python - 解析 DTD 以揭示元素的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com