我正在尝试测试应用于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 requests
库:requests.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
我找到了问题的答案。 "@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"
}
}