如何为 JSON-LD 中的 RDF 值编码数据类型 IRI?
How to encode datatype IRIs for RDF values in JSON-LD?
一个JSON-LD上下文可以用来指定一个属性的范围。例如,以下统计数据 rdf:value
的范围由整数组成:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"rdf:value": { "@type": "xsd:integer" }
},
"rdf:value": "1"
}
在 RDF 建模中,针对 rdf:value
的不同用途使用不同的范围是很常见的。例如,以下表示一个物体的价格为 2,50 欧元,温度为 28.2 ℃(使用海龟表示法):
_:1 ex:price [ rdf:value "2.50"^^xsd:decimal ; ex:unit ex:euros ] ;
ex:temperature [ rdf:value "28.2"^^xsd:float ; ex:unit ex:degreesCelsius ] .
如何根据 JSON-LD 上下文来描述这一点?在我看来,我需要 属性 路径(借用 SPARQL 的一个概念)作为键,特别是当前示例的以下内容:
"ex:price/rdf:value": "xsd:decimal"
"ex:temperature/rdf:value": "xsd:float"
有没有办法在 JSON-LD 中指定它?
您可以提供一个typed value by specifying a value object。
示例:
{
"@context":
{
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#"
},
"rdf:value":
{
"@value": "1",
"@type": "xsd:integer"
}
}
您还可以 nest @context
到 specialize/override 属性。举个例子:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"rdf:value": { "@type": "xsd:integexr" }
},
"rdf:value": "1",
"ex:price": {
"@context": {
"rdf:value": { "@type": "xsd:float"}
},
"rdf:value": "35.3"
},
"ex:temperature": {
"@context": {
"rdf:value": { "@type": "xsd:decimal"}
},
"rdf:value": "2.50"
}
}
你可以experiment with this in the JSON-LD Playground.
另一种方法是使用所有映射到一个 @id
(rdf:value
)但具有不同数据类型的自定义属性:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"value_integer": {
"@id": "rdf:value",
"@type": "xsd:integer"
},
"value_float": {
"@id": "rdf:value",
"@type": "xsd:float"
},
"value_decimal": {
"@id": "rdf:value",
"@type": "xsd:decimal"
}
},
"value_integer": "1",
"ex:price": {
"value_decimal": "35.3"
},
"ex:temperature": {
"value_float": "2.50"
}
}
最简单的方法是引入单独的属性。类似的东西(我在这里也将 @vocab
设置为 ex
):
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"price_value": { "@id": "rdf:value", "@type": "xsd:decimal" },
"temperature_value": { "@id": "rdf:value", "@type": "xsd:float" },
"@vocab": "http://ex.org/",
"unit": { "@type": "@vocab" }
},
"price": {
"price_value": "2.50",
"unit": "euros"
},
"temperature": {
"temperature_value": "28.2",
"unit": "degreesCelsius"
}
}
一个JSON-LD上下文可以用来指定一个属性的范围。例如,以下统计数据 rdf:value
的范围由整数组成:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"rdf:value": { "@type": "xsd:integer" }
},
"rdf:value": "1"
}
在 RDF 建模中,针对 rdf:value
的不同用途使用不同的范围是很常见的。例如,以下表示一个物体的价格为 2,50 欧元,温度为 28.2 ℃(使用海龟表示法):
_:1 ex:price [ rdf:value "2.50"^^xsd:decimal ; ex:unit ex:euros ] ;
ex:temperature [ rdf:value "28.2"^^xsd:float ; ex:unit ex:degreesCelsius ] .
如何根据 JSON-LD 上下文来描述这一点?在我看来,我需要 属性 路径(借用 SPARQL 的一个概念)作为键,特别是当前示例的以下内容:
"ex:price/rdf:value": "xsd:decimal"
"ex:temperature/rdf:value": "xsd:float"
有没有办法在 JSON-LD 中指定它?
您可以提供一个typed value by specifying a value object。
示例:
{
"@context":
{
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#"
},
"rdf:value":
{
"@value": "1",
"@type": "xsd:integer"
}
}
您还可以 nest @context
到 specialize/override 属性。举个例子:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"rdf:value": { "@type": "xsd:integexr" }
},
"rdf:value": "1",
"ex:price": {
"@context": {
"rdf:value": { "@type": "xsd:float"}
},
"rdf:value": "35.3"
},
"ex:temperature": {
"@context": {
"rdf:value": { "@type": "xsd:decimal"}
},
"rdf:value": "2.50"
}
}
你可以experiment with this in the JSON-LD Playground.
另一种方法是使用所有映射到一个 @id
(rdf:value
)但具有不同数据类型的自定义属性:
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"value_integer": {
"@id": "rdf:value",
"@type": "xsd:integer"
},
"value_float": {
"@id": "rdf:value",
"@type": "xsd:float"
},
"value_decimal": {
"@id": "rdf:value",
"@type": "xsd:decimal"
}
},
"value_integer": "1",
"ex:price": {
"value_decimal": "35.3"
},
"ex:temperature": {
"value_float": "2.50"
}
}
最简单的方法是引入单独的属性。类似的东西(我在这里也将 @vocab
设置为 ex
):
{
"@context": {
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"price_value": { "@id": "rdf:value", "@type": "xsd:decimal" },
"temperature_value": { "@id": "rdf:value", "@type": "xsd:float" },
"@vocab": "http://ex.org/",
"unit": { "@type": "@vocab" }
},
"price": {
"price_value": "2.50",
"unit": "euros"
},
"temperature": {
"temperature_value": "28.2",
"unit": "degreesCelsius"
}
}