在本地服务器上测试时 rdflib 无效的远程上下文
rdflib invalid remote context when testing on local sever
我正在尝试测试应用于 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
库来测试我的文件是否可以在 Web 浏览器中访问:requests.get("http://127.0.0.1:4000/mycontext.json").text
.
每个测试工作正常,因为它 returns 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"
此时我真的很困惑:(
我意识到我可以通过编程方式 parse/combine 将上下文和数据文件合并到一个文件中。但是,我们的目标是在本地创建上下文文件并在 json 文件上测试它们。如果我们满意,我们可以将上下文文件部署到 public 网络服务 w/o 上,同时部署数据。
我还在 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"
}
}
我正在尝试测试应用于 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
库来测试我的文件是否可以在 Web 浏览器中访问:requests.get("http://127.0.0.1:4000/mycontext.json").text
.
每个测试工作正常,因为它 returns 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"
此时我真的很困惑:(
我意识到我可以通过编程方式 parse/combine 将上下文和数据文件合并到一个文件中。但是,我们的目标是在本地创建上下文文件并在 json 文件上测试它们。如果我们满意,我们可以将上下文文件部署到 public 网络服务 w/o 上,同时部署数据。
我还在 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"
}
}