JSON-LD是 JavaScript 对象表示法的扩展,它使链接数据概念能够以 JSON 表示,并提供人类和计算机可读的格式。这是 JSON-LD:
{
"@context": "https://json-ld.org/contexts/person.jsonld",
"@id": "http://dbpedia.org/resource/John_Lennon",
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
}
Run Code Online (Sandbox Code Playgroud)
NGSI-LD 是一个使用多种有效负载格式的 API,但这里是使用“规范化”NGSI-LD 表示的John Lennon实体 - 所有 NGSI 上下文代理必须支持的几种格式之一(它们还涵盖纯键值 JSON 和例如GeoJSON - 见下文)。
../ngsi-ld/v1/entities/John_Lennon
内容类型:application/ld+json
{
"@context": [
"https://json-ld.org/contexts/person.jsonld",
"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
],
"id": "http://dbpedia.org/resource/John_Lennon",
"type": "Person",
"name": {"type": "Property", "value": "John Lennon"},
"born": {"type": "Property", "value": "1940-10-09"},
"spouse": {
"type": "Relationship", "object":
"http://dbpedia.org/resource/Cynthia_Lennon"
}
}
Run Code Online (Sandbox Code Playgroud)
每个 NSGI-LD 有效负载都是一个有效的 JSON-LD 文档。然而,这种“标准化”NGSI-LD 格式具有额外的规则和限制(例如,所有属性必须具有 oftype
或Property
)Relationship
,因此并非所有 JSON-LD 片段都是有效的“标准化”NGSI-LD。
就像 JSON-LD 是JSON 加链接数据概念一样,NGSI-LD 是NGSI-v2 加链接数据概念。
NGSI -LD 规范描述了如何向上下文代理发出请求以及响应的预期格式。NGSI 中有 27 个定义明确的操作。此外,NGSI-LD 定义了严格的术语定义,例如订阅和注册、属性和关系、时间戳只能保存在GeoJSON 属性中observedAt
、地理位置必须在属性中找到等。location
Point
JSON-LD 只是一种数据表示形式,除了具有 JSON 格式的属性和属性之外,它不假设如何访问有效负载或如何构造有效负载@context
。
“标准化”NGSI-LD 中的 Context-Broker 到 Context-Broker 操作可以假设核心上下文https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld
被假定为请求的一部分并且最后被处理,因此总是覆盖其他@context
元素。该元素也可以使用链接标头来@context
表示
JSON-LD 表示必须始终包含一个@context
属性(毕竟这就是它们的原因,application/ld+json
而不仅仅是普通application/json
),并且@context
根据找到的元素数组的顺序进行处理。
由于 NGSI-LD 被定义为 API,因此对 NGSI-LD 请求的响应也可以以 JSONapplication/json
和 GeoJSON格式返回,或者作为“标准化”或带或不带注释application/geo+json
的键值对返回。例如,键值格式将返回John_Lennon实体,如下所示:@context
Properties
../ngsi-ld/v1/entities/John_Lennon?options=keyValues
内容类型:application/ld+json
{
"@context": "https://json-ld.org/contexts/person.jsonld",
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
}
Run Code Online (Sandbox Code Playgroud)
这与原始 JSON-LD 示例相同。还可以通过修改内容类型返回纯 JSON 或GeoJSON 。
../ngsi-ld/v1/entities/John_Lennon?options=keyValues
内容类型:application/json
{
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
}
Run Code Online (Sandbox Code Playgroud)
../ngsi-ld/v1/entities/John_Lennon?options=keyValues
内容类型:application/geo+json
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-73.975, 40.775556]
},
"properties": {
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
}
}
Run Code Online (Sandbox Code Playgroud)
“标准化”通常用于经纪商之间的数据交换。“keyValues”更有可能被应用程序开发人员使用。事实上,当您以 JSON 形式返回数据时,所有属性都已使用扩展/压缩操作进行了清洗,这意味着您可以使用不同的属性名称从多个源获取数据,并使用商定的IRI的单个通用短名称返回- 这是数据互操作性交换 API 的目标。
总之,“标准化”NGSI-LD 格式是 JSON-LD 的扩展子集。NGSI -LD API本身是一个更灵活的API,可以输出各种JSON和JSON-LD格式并用于数据交换。
如果您需要更多信息, FIWARE 基金会最近的视频演示中还对 NGSI-LD 数据格式(包括新的“简洁”数据格式)进行了更广泛的审查。
归档时间: |
|
查看次数: |
1202 次 |
最近记录: |