【问题标题】:Parsing HTML+RDFa in RDFLib在 RDFLib 中解析 HTML+RDFa
【发布时间】:2021-09-30 15:09:11
【问题描述】:

RDFLib 似乎在 support 解析 RDFa 数据。在实现一个 sn-p 来解析一个带有 RDFa 注释的 HTML 页面时,我遇到了这个问题:

Traceback (most recent call last):
  File "/home/zonk/.local/lib/python3.8/site-packages/rdflib/plugin.py", line 107, in get
    p = _plugins[(name, kind)]
KeyError: ('html', <class 'rdflib.parser.Parser'>)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "basic-rdfa.py", line 7, in <module>
    g.parse("beatles.rdfa.html", format='html') 
  File "/home/zonk/.local/lib/python3.8/site-packages/rdflib/graph.py", line 1209, in parse
    parser = plugin.get(format, Parser)()
  File "/home/zonk/.local/lib/python3.8/site-packages/rdflib/plugin.py", line 109, in get
    raise PluginException("No plugin registered for (%s, %s)" % (name, kind))
rdflib.plugin.PluginException: No plugin registered for (html, <class 'rdflib.parser.Parser'>)

使用如下sn-p:

from rdflib import Graph, plugin
g = Graph()
g.parse("beatles.rdfa.html", format='html') 

for subj, pred, obj in g:
    if(subj, pred, obj) not in g:
        raise Exception("Zonk!")

print(f"Graph g has {len(g)} statements.")
print(g.serialize(format="turtle"))

使用以下虚拟数据:

<!DOCTYPE html>

<html lang="en">
<head>
  <title>John Lennon</title>
</head>

<div vocab="http://schema.org/">
  <div typeof="Person">
    <link property="rdfa:copy" href="#lennon"/>
    <link property="rdfa:copy" href="#band"/>
  </div>
  <p resource="#lennon" typeof="rdfa:Pattern"> 
    Name: <span property="name">John Lennon</span>
  <p>
  <div resource="#band" typeof="rdfa:Pattern">
    <div property="band" typeof="MusicGroup">
      <link property="rdfa:copy" href="#beatles"/>
    </div>
  </div>
  <div resource="#beatles" typeof="rdfa:Pattern">
    <p>Band: <span property="name">The Beatles</span></p>
    <p>Size: <span property="size">4</span> players</p>
  </div>
</div>
</html>

确实,plugin.py 中没有一行记录任何 HTML 数据。在这种情况下如何解析带有 rdfa 注释的数据?

提前谢谢你。

【问题讨论】:

    标签: python html-parsing semantic-markup rdflib rdfa


    【解决方案1】:

    抱歉,文档已经过时了,我们在当前的 RDFlib 版本 (6.0.0) 或之前的版本 (5.0.0) 中不再支持 RDFa 解析

    要获得 RDFa 支持,您必须使用 RDFlib 4.2.2 (https://github.com/RDFLib/rdflib/tree/4.2.2)。

    【讨论】:

    • 感谢您的回答。我已经用 RDFLib 4.2.2 进行了测试,效果很好。出于好奇,是否有任何理由放弃对 RDFa 的支持?您是否认为 RDFa 在社区中的实现正在逐渐消失,是否有计划在未来的 RDFLib 版本中将 RDFa 带回来?
    • 由于解析器有问题 (github.com/RDFLib/rdflib/pull/828) 和测试失败,它被删除了,但这发生在我来维护 RDFlib 之前,所以除了那个 PR,我没有任何上下文。通过阅读那里的 cmets 和 pyRDFa 插件 (github.com/RDFLib/pyrdfa3),我认为我们仍然可以支持 RDFa,用户只需安装插件即可。该插件去年运行良好,但显然需要更新才能与 RDFlib 6.0.0 一起使用。如果您有兴趣,我建议您提交问题(甚至是 PR!)以请求更新 pyRDFA3。
    • 感谢@Nicholas Car 对 RDFLib 的回答和贡献。不幸的是,我目前没有能力在那里贡献代码和创建 PR,但是已经提交了这个请求的问题。
    • 不用担心@snowball147,很高兴您在 rdflib 跟踪器中标记了该问题。希望我们可以在 6.0.1 或类似的补丁版本中解决这个问题。
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2013-05-13
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多