在本地服务器上测试时,rdflib无效的远程上下文

时间:2020-04-04 18:42:21

标签: json-ld rdflib

我正在尝试测试应用于json文件的不同上下文。我在本地计算机(2019 MacPro)上创建了一个非常简单的上下文文件(名为mycontext.json),内容如下:

{ "name": "http://example.com#name", "age": "http://example.com#age"}

接下来,我使用jekyll serve在计算机上启动本地Web服务器。我可以通过导航到http://127.0.0.1:4000/mycontext.json或使用Python requestsrequests.get("http://127.0.0.1:4000/mycontext.json").text来测试我的文件是否可以在Web浏览器中访问。
每个测试都能正常工作,因为它返回mycontext.json的上下文。

json文件(名为test-data.json)引用json-ld上下文。其内容为:

{
        "@context": "http://127.0.0.1:4000/mycontext.json",
        "name:": "Bill",
        "age": "48"
}

但是,当我在rdflb中进行解析时,出现了INVALID_REMOTE_CONTEXT错误。
也就是说,g.parse("test-data.json", format="json-ld")会产生错误:

:
:
~/opt/anaconda3/lib/python3.7/site-packages/rdflib_jsonld/context.py in _prep_sources(self, base, inputs, sources, referenced_contexts, in_source_url)
    205                 source = source_to_json(source_url)
    206                 if CONTEXT not in source:
--> 207                     raise errors.INVALID_REMOTE_CONTEXT
    208             else:
    209                 source_url = in_source_url

JSONLDException: invalid remote context

关于此的错误消息很多,但是这似乎最相关。

我尝试使用Graph()ConjunctiveGraph()来初始化图形。每个结果相同。

我也尝试过: *将上下文文件放在其自己的目录中,并使用以下命令进行调用:"@context": "http://127.0.0.1:4000/context/ *为上下文提供非json扩展名,并调用:"@context": "http://127.0.0.1:4000/context/c1"

在这一点上,我真的很沮丧:(

我意识到我可以以编程方式将上下文和数据文件解析/组合为一个文件。但是,我们的目标是在本地创建上下文文件并在json文件上对其进行测试。如果满意,我们可以将上下文文件部署到公共Web服务上,而无需部署数据。

我还在rdflib-jsonld gihub上发布了一个问题:https://github.com/RDFLib/rdflib-jsonld/issues/80

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。用"@context"键引用的文档还必须包含一个"@context"键。

例如,如果您的json-ld文档如下所示:

{ 
  "@context": "http://127.0.0.1:4000/mycontext", 
  "name:": "Bill", 
  "age": "48" 
}

http://127.0.0.1:4000/mycontext的内容必须看起来像这样:

{ 
  "@context": <----- This is needed. It was missing in my original post.
  { 
     "name": "http://example.com#name", "age": "http://example.com#age" 
  } 
}
相关问题