2

如何使用 PHP 解析 88 GB RDF 文件?

这个 RDF 充满了实体和关于每个实体的事实。

我正在尝试遍历每个实体并检查每个实体的某些事实。然后将这些事实写入我之前在脚本中创建的 XML 文档。

因此,当我浏览 rdf 时,我为每个实体创建一个<card></card>元素并给它一个名为<facts>. 我遍历了实体上的所有事实,并将我需要的事实写在里面,并<fact></fact>作为<facts></facts>.

如何解析 rdf、提取数据并将其写入 XML?

4

2 回答 2

1

首先,使用 RDF 解析器。谷歌搜索 PHP RDF 解析器会得到很多结果;我个人不使用 PHP,但我确信其中一个会完成解析 RDF 的工作。但是请确保它是一个流解析器,您不会在工作站的内存中保存 88G 的 RDF。

其次,您说您需要“遍历每个实体”,如果它们没有按原始文件中的主题排序,或者解析器没有以相同的顺序报告它们,这可能会很棘手。

假设这不是问题,那么您可以将每个主题的三元组保留在本地数据结构中,并且当您获得与您在本地排队的主题不同的主题的三元组时,执行您需要的任何业务逻辑并写出 XML。可能想确保您不能在本地排队太多语句,以至于您将 OOM。

最后,我将假设您有充分的理由采用 RDF 并将其转换为不是 RDF/XML 的 XML 格式。但是我你可能会重新考虑你的设计以防万一。

或者,您可以将数据放入 RDF 数据库并针对它编写 SPARQL 查询,将查询结果转换为任何 XML 或您需要的任何其他内容。

于 2013-09-23T17:32:32.407 回答
1

我认为你最好的选择是:

  1. 使用一些外部工具(可能是rapper之类的工具?)将源文件从Turtle转换为n-triples格式
  2. 通过 fopen+ fgets一次迭代文件一行,因为 n-triples 定义了严格的 1-statement per 1-line 约束,这在这种情况下是完美的
于 2013-09-25T11:09:33.073 回答