1. 固定格式
JSON-LD 的核心是一个标准的 JSON 对象。它必须遵循 JSON 的语法规则(如使用双引号、正确的括号匹配等)。在这个 JSON 对象内部,结构是由一些固定的关键字来定义的。
一个最基本的、完整的 JSON-LD 脚本通常包含以下结构:
javascript
{
"@context": "https://schema.org",
"@type": "Thing",
... // 其他属性
}
关键点:
-
必须包含
@context:这是 JSON-LD 的"灵魂",它定义了文档中使用的术语(关键字)在哪个"词典"里可以找到解释。 -
推荐包含
@type:它描述的这个"东西"是什么类型,比如是一个人、一个产品、一篇文章等。
2. 固定的关键字
JSON-LD 规范定义了一系列以 @ 符号开头的关键字,它们有特殊的含义。
以下是一些最常用和核心的关键字:
核心关键字(处理文档结构)
-
@context(必须)-
作用 :指定用来解释文档中所有术语的"上下文"。它通常是一个指向外部词汇表的 URL(如 Schema.org),也可以是一个内嵌的 JSON 对象,用于自定义映射。
-
示例 :
"@context": "https://schema.org"
-
-
@type(强烈推荐)-
作用:指定当前被描述事物的类型。
-
示例 :
"@type": "Person","@type": "BlogPosting"
-
-
@id(可选,但很有用)-
作用:为被描述的事物提供一个唯一的、稳定的标识符,通常是一个 URL(可以是真实存在的,也可以只是一个概念上的 URI)。
-
示例 :
"@id": "https://example.com/#me"(用于个人),"@id": "https://example.com/products/123"(用于产品)
-
用于定义数据的关键字
-
@value:用于指定一个属性的"值"。 -
@language:与@value配合使用,指定该值的语言。javascript"name": { "@value": "苹果", "@language": "zh" } -
@container:在@context中用于指定一个属性的值应该如何被存储,例如作为列表 (@list)、集合 (@set) 或索引 (@index)。
用于组织图数据的关键字(高级用法)
-
@graph:允许在一个 JSON-LD 文档中包含多个独立的"描述"(多条数据),形成一个"图"。javascript{ "@context": "https://schema.org", "@graph": [ { "@type": "Person", "@id": "#person1", "name": "张三" }, { "@type": "BlogPosting", "author": {"@id": "#person1"} } ] } -
@reverse:用于定义反向关系。
3. 一个完整的示例
描述一个人的完整 JSON-LD 示例,它结合了上述关键字和 Schema.org 词汇表中的属性。
javascript
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://example.com/#zhangsan",
"name": "张三",
"jobTitle": "高级软件工程师",
"telephone": "(+86) 138-0013-8000",
"url": "https://zhangsan.example.com",
"worksFor": {
"@type": "Organization",
"name": "某科技公司"
},
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "某知名大学"
},
"sameAs": [
"https://linkedin.com/in/zhangsan",
"https://github.com/zhangsan"
]
}
在这个例子中:
-
@context,@type,@id是 固定的 JSON-LD 关键字。 -
name,jobTitle,worksFor,alumniOf等是来自 Schema.org 词汇表 的术语,它们不是固定的,你可以根据你要描述的类型自由选择。但它们的使用必须符合@context所指向的词汇表的定义。
总结
1. 有固定格式
它必须是有效的 JSON,并且必须包含
@context等核心关键字来构成一个合法的 JSON-LD 文档。2. 有固定的关键字
所有以
@开头的关键字(如@context,@type,@id)都是 JSON-LD 规范定义的,具有特殊含义,你不能随意发明它们。3. 其他属性
除了
@关键字之外的其他属性(如name,author,price)不是固定的 。它们来自于你在@context中引用的词汇表(最常用的是 Schema.org)。你可以根据需要在词汇表中查找并使用合适的属性。简单来说:JSON-LD 提供了固定的"语法骨架"(
@关键字),而内容(其他属性)则由像 Schema.org 这样的共享词汇表来填充。