[英]How to reference properties and values in JSON-LD?
我找到了一些 JSON-LD 代码的示例,例如这篇博客文章:
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"headline": "14 Ways Json Can Improve Your SEO",
"alternativeHeadline": "and the women who love them",
"image": "http://example.com/image.jpg",
"award": "Best article ever written",
"editor": "John Doe",
"genre": "search engine optimization",
"keywords": "seo sales b2b",
"wordcount": "1120",
"publisher": {
"@type": "Organization",
"name": "Elsevier",
"logo": {
"@type": "ImageObject",
"url": "http://example.com/logo.jpg"
}
},
"url": "http://www.example.com",
"datePublished": "2015-09-20",
"dateCreated": "2015-09-20",
"dateModified": "2015-09-20",
"description": "We love to do stuff to help people and stuff",
"articleBody": "You can paste your entire post in here, and yes it can get really really long.",
"author": {
"@type": "Person",
"name": "Steve"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/article"
}
}
在其中,您会看到@context
已设置,因此您可以从该上下文中更简洁地引用名为@type
的BlogPosting
。 然后,您可以直接访问使用 JSON 中的属性。
哦,我会注意到,我从未使用过 JSON-LD,只是知道它多年。 在过去的一个小时里,我浏览了JSON-LD Spec和IRI RFC ,试图弄清楚如何从其他代码中引用属性和值,以及如何组织 JSON-LD。
在 JSON-LD 中, #
标签的详细含义是什么?
例如,他们有这个:
{
"@context": {
"label": "http://www.w3.org/2000/01/rdf-schema#label"
},
"@id": "",
"label": "Just a simple document"
}
当我访问 url http://www.w3.org/2000/01/rdf-schema时,我得到了一些原始 RDF 文本。 我将label
视为 RDF 中的属性定义,但它是上下文 label http://www.w3.org/2000/01/rdf-schema#label
我们的 JSON-LD 代码? 对我来说,计算机似乎无法:
http://www.w3.org/2000/01/rdf-schema
获取内容。label
属性。 另一个例子在这里,使用http://schema.org
:
{
"@context": {
"name": "http://schema.org/name",
"image": {
"@id": "http://schema.org/image",
"@type": "@id"
},
"homepage": {
"@id": "http://schema.org/url",
"@type": "@id"
}
}
}
当我访问http://schema.org/url时,它是一个 HTML 页面(不是 RDF 或 JSON),它显示如下。
They don't appear to have a http://schema.org/url.json
or .rdf
URL, so again it appears this "mental association" between http://schema.org/url
and an actual URL property isn' t 由计算机处理或计算出来的东西,但只是一种粗略的心理联想。 Basically, we added the http://schema.org/url
HTML webpage so if you happen to visit http://schema.org/url
it shows something, and because it's nice to have some web docs:). 但是没有技术需要有一个网站或 JSON 来下载定义或诸如此类的东西。 最后,像http://schema.org/url
这样的链接只是用作标识符的字符串。 我这样做对吗?
那么这将意味着像http://www.w3.org/2000/01/rdf-schema#label
或其他的#
标签只是另一个字符串,但是编译 JSON-LD 的代码会从标签后部分分离出来并使用它在 JSON 中查找和键入属性。 但是,它没有任何实际意义,因为它托管在该域/URL 下的网页上。
假设我有一堆要创建的 URL:
/person/john-kennedy
/atom/hydrogen
每个都有一堆可能深度嵌套的属性/对象/值。 所以我可以这样做:
{
"@context": "https://mywebsite.org",
"@type": "atom",
"slug": "hydrogen",
"name": "Hydrogen",
"bindsTo": [{ "@id": "https://mywebsite.org/atom/oxygen" }]
}
或者更好的是,以某种方式做这样的事情:
{
"@context": "https://mywebsite.org",
"@type": "atom",
"@id": "/atom/hydrogen",
"name": "Hydrogen",
"bindsTo": [{ "@id": "/atom/oxygen" }]
}
简而言之,我可以做些什么来使用 JSON-LD 以尽可能干净的方式链接数据(最少的文本)?
#foo/bar[1]/baz
可以深入挖掘{ foo: { bar: [ { baz: 1 }, { baz: 2 } ] } }
返回 2? 还是托管网站实际上以某种方式使用了主题标签? 在解析术语 URI 时提供词汇表/术语的 RDF 定义是一种很好的做法,但这不是必需的。 尤其是因为任何类型的 URI 都可以用于 RDF 术语,而不仅仅是可解析的 URI(例如, urn
或tag
而不是http
)。
有几种方法可以以机器可读的方式提供词汇定义。 W3C 工作组注释发布 RDF 词汇表的最佳实践食谱记录了其中的一些。
附录 B解释了#
(与/
)在 RDF 术语 URI 中的作用。 这只是为词汇表构建 URI 命名空间的一种方式(也可以用来区分术语/事物和描述术语/事物的文档)。
是的,RDF 术语 URI 的基本作用是它们充当全局唯一标识符。
与其他 RDF 语法相比,JSON-LD 的特殊之处在于可以加载远程 JSON-LD 上下文。 例如,在 Schema.org 的情况下,当访问首页(使用alternate
链接类型)时,它们的 JSON-LD 上下文链接在链接 HTTP header 中。 这样的上下文只允许编写更短的 JSON-LD。
在了解关联数据背景时,此功能和其他 JSON-LD 功能可能会令人困惑。 以三重形式“思考”数据可能会有所帮助。 流行的 RDF 语法Turtle接近这个概念。 如果您知道三元组应该是什么样子,那么只需使用 JSON-LD 的语法特性来具体化您想说的话。 在许多情况下,编写/生成 Turtle 然后自动将其转换为 JSON-LD(或任何其他 RDF 语法)更容易。
JSON-LD
# on https://mywebsite.example.com/
{
"@context": "https://vocabulary.example.org",
"@type": "Atom",
"@id": "/atom/hydrogen",
"name": "Hydrogen",
"bindsTo": [{ "@id": "/atom/oxygen" }]
}
在 Turtle 中可以这样表示:
@prefix : <https://vocabulary.example.org/> .
<https://mywebsite.example.com/atom/hydrogen>
a :Atom ;
:bindsTo <https://mywebsite.example.com/atom/oxygen> ;
:name "Hydrogen" .
@prefix : <https://vocabulary.example.org/> .
<https://mywebsite.example.com/atom/hydrogen> a :Atom .
<https://mywebsite.example.com/atom/hydrogen> :bindsTo <https://mywebsite.example.com/atom/oxygen> .
<https://mywebsite.example.com/atom/hydrogen> :name "Hydrogen" .
<https://mywebsite.example.com/atom/hydrogen> a <https://vocabulary.example.org/Atom> .
<https://mywebsite.example.com/atom/hydrogen> <https://vocabulary.example.org/bindsTo> <https://mywebsite.example.com/atom/oxygen> .
<https://mywebsite.example.com/atom/hydrogen> <https://vocabulary.example.org/name> "Hydrogen" .
<https://mywebsite.example.com/atom/hydrogen> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://vocabulary.example.org/Atom> .
<https://mywebsite.example.com/atom/hydrogen> <https://vocabulary.example.org/bindsTo> <https://mywebsite.example.com/atom/oxygen> .
<https://mywebsite.example.com/atom/hydrogen> <https://vocabulary.example.org/name> "Hydrogen" .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.