首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >json-ld别名不解析

json-ld别名不解析
EN

Stack Overflow用户
提问于 2018-06-05 21:49:39
回答 1查看 674关注 0票数 2

我正在努力学习json-ld,而且我的别名有一些问题。

当我在JSON-ld操场上使用以下上下文和文档时:

代码语言:javascript
运行
复制
{
  "@context": {
    "url": "@id",
    "a": "@type",
    "name": "http://schema.org/name",
    "schema": "http://schema.org/"
  },
  "url": "http://example.com/about#gregg",
  "a": "schema:Person",
  "name": "Gregg Kellogg"
}

这一契约适当地规定:

代码语言:javascript
运行
复制
{
  "@context": "http://schema.org/",
  "id": "http://example.com/about#gregg",
  "type": "Person",
  "name": "Gregg Kellogg"
}

如图所示:https://json-ld.org/playground/#startTab=tab-compacted&json-ld=%7B%22%40context%22%3A%7B%22url%22%3A%22%40id%22%2C%22a%22%3A%22%40type%22%2C%22name%22%3A%22http%3A%2F%2Fschema.org%2Fname%22%2C%22schema%22%3A%22http%3A%2F%2Fschema.org%2F%22%7D%2C%22url%22%3A%22http%3A%2F%2Fexample.com%2Fabout%23gregg%22%2C%22a%22%3A%22schema%3APerson%22%2C%22name%22%3A%22Gregg%20Kellogg%22%7D&context=%7B%22%40context%22%3A%22http%3A%2F%2Fschema.org%2F%22%7D

但是,当我使用Python库时,需要使用以下代码:

代码语言:javascript
运行
复制
from pyld import jsonld
import json

doc = {
    "url": "http://example.com/about#gregg",
    "a": "schema:Person",
    "name": "Gregg Kellogg"
}

context = {
    "url": "@id",
    "a": "@type",
    "name": "http://schema.org/name",
    "schema" : "http://schema.org/"
  }

compacted = jsonld.compact(doc, context)

print(json.dumps(compacted, indent=2))

只打印上下文而不打印文档:

代码语言:javascript
运行
复制
{
  "@context": {
    "url": "@id",
    "a": "@type",
    "name": "http://schema.org/name",
    "schema": "http://schema.org/"
  }
}

有人能解释为什么当我使用pyld库时没有应用别名,以及我做错了什么?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 23:23:06

这两个例子不一样。Python示例的问题是输入文档没有上下文。处理器首先扩展数据,并将导致未知的术语被删除。如果打印出扩展的数据,您可以看到这个问题:

代码语言:javascript
运行
复制
expanded = jsonld.expand(doc)
print(json.dumps(expanded, indent=2))
代码语言:javascript
运行
复制
[]

如果在上下文中添加,然后展开,您将看到正确的数据:

代码语言:javascript
运行
复制
from pyld import jsonld
import json

context = {
    "url": "@id",
    "a": "@type",
    "name": "http://schema.org/name",
    "schema" : "http://schema.org/"
}

doc = {
    "@context": context,
    "url": "http://example.com/about#gregg",
    "a": "schema:Person",
    "name": "Gregg Kellogg"
}

expanded = jsonld.expand(doc)
print(json.dumps(expanded, indent=2))
代码语言:javascript
运行
复制
[
  {
    "@type": [
      "http://schema.org/Person"
    ],
    "http://schema.org/name": [
      {
        "@value": "Gregg Kellogg"
      }
    ],
    "@id": "http://example.com/about#gregg"
  }
]

为了匹配您的压缩操场示例,您需要像上面这样添加上下文,并使用schema.org上下文进行压缩:

代码语言:javascript
运行
复制
...
compacted = jsonld.compact(doc, {"@context": "http://schema.org/"})
# or use the shortcut:
# compacted = jsonld.compact(doc, "http://schema.org/")
print(json.dumps(compacted, indent=2))
代码语言:javascript
运行
复制
{
  "@context": "http://schema.org/",
  "id": "http://example.com/about#gregg",
  "type": "Person",
  "name": "Gregg Kellogg"
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档