繁体   English   中英

如何在 JSON-LD 中引用属性和值?

[英]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已设置,因此您可以从该上下文中更简洁地引用名为@typeBlogPosting 然后,您可以直接访问使用 JSON 中的属性。

哦,我会注意到,我从未使用过 JSON-LD,只是知道它多年。 在过去的一个小时里,我浏览了JSON-LD SpecIRI 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 代码? 对我来说,计算机似乎无法:

  1. http://www.w3.org/2000/01/rdf-schema获取内容。
  2. 意识到它是 RDF。
  3. 解析 RDF。
  4. 深入了解label属性。
  5. 并使用它来了解如何在我们的 JSON-LD 中键入 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 以尽可能干净的方式链接数据(最少的文本)?

  • 是否需要有一个实际的网络存在来支持实际的结构化 JSON 数据,或者它只是不合常规或创造某种友好的用户体验,但机器不需要?
  • 标签只是进入属性的约定吗? 是否可以使用主题标签深入挖掘属性(或数组项),例如#foo/bar[1]/baz可以深入挖掘{ foo: { bar: [ { baz: 1 }, { baz: 2 } ] } }返回 2? 还是托管网站实际上以某种方式使用了主题标签?

在解析术语 URI 时提供词汇表/术语的 RDF 定义是一种很好的做法,但这不是必需的。 尤其是因为任何类型的 URI 都可以用于 RDF 术语,而不仅仅是可解析的 URI(例如, urntag而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM