[英]How to Represent collection of alternatives in JSON-LD
我的模型中有屬性,它具有替換數組的值(表示一組替換項,其中只選擇一個值)。 之前我使用RDF / XML使用rdf:Alt執行此操作。 請參閱以下示例
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://ns.example.com/example/">
<rdf:Description>
<ex:prop1>
<rdf:Alt>
<rdf:li>100</rdf:li>
<rdf:li>120</rdf:li>
<rdf:li>130</rdf:li>
</rdf:Alt>
</ex:prop1>
</rdf:Description>
</rdf:RDF>
但現在我想在JSON-LD中做同樣的事情。 我嘗試通過在線轉換器將上述代碼段轉換為JSON-LD並得到以下結果
{
"@context": {
"ex": "http://ns.example.com/example/",
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
},
"@graph": [
{
"@id": "_:g70327238021300",
"ex:prop1": {
"@id": "_:g70327280101680"
}
},
{
"@id": "_:g70327280101680",
"@type": "rdf:Alt",
"rdf:_1": "100",
"rdf:_2": "120",
"rdf:_3": "130"
}
]
}
實際上我發現rdf:Alt / Seq / Bag被w3c標記為古老 。 在JSON-LD中,有序和無序數組分別有@list和@set。 那么有沒有其他方法在JSON-LD中執行此操作而不使用“rdf:Alt”作為@type?
rdf:li
擴展到rdf:_n
是RDF / XML的一個特性,它實際上是唯一為rdf:Alt/Bag/Seq
提供本機支持的格式rdf:Alt/Bag/Seq
。 如您所知,這些被認為是過時的,因此不要在其他序列化中尋找任何本機支持,包括JSON-LD。
對於收集信息的其他方式,RDF集合除了在RDF Concepts中具有語義支持,並且直接受大多數RDF序列化支持之外,還可以查看本體,例如Ordered List Ontology ,它顯示了如何執行類似於rdf:Alt
使用語義而不是語法的rdf:Alt
語義。
例如,schema.org有一個Choose Action ,它看起來與你想要做的類似。 相關的投票行動也是類似的。
RDFS
在RDFS中,存在RDF容器 ( RDF:Container
)和RDF集合 ( rdf:List
)。 不同之處在於容器是開放的 ,而收集是封閉的 ,請參閱此問題 。
有三種rdf:Container
: rdf:Bag
, rdf:Seq
和rdf:Alt
。
這些容器之間沒有正式的(即語義上的 )差異,差異是相當務實的 。 不同之處在於消費者打算如何處理數據,請參閱此問題 。
嚴格地說,RDF集合和RDF容器都不是RDF數據模型的一部分,而是特定RDF詞匯表的元素(盡管這個詞匯表很常見)。
JSON-LD
JSON-LD數據模型與RDF沒有很好地對齊,例如參見其中一個主要創建者的這篇文章 。
制圖
來自RDFS 1.1:
因此,通常, rdf:Alt
元素不是唯一的,而是有序的。 因此,應該使用@list
。 但是,如果您的選擇是唯一且無序的,則可以使用@set
。
在其他情況下,請注意在沒有訂單時斷言是沒有任何損害的。
另見ISSUE-24的討論和動機。
UPDATE
是的,不可能在JSON-LD數據模型中表達實用 (即與語言語用學相關)的差異。 例如,無法表達rdf:Seq
和rdf:Alt
之間的區別。 如果你想表達這些差異,你需要一個詞匯表。
RDFS是一種這樣的詞匯。 使用JSON-LD作為RDF抽象語法的序列化格式,並像以前一樣編寫"@type": "rdf:Alt"
等。
也許你對JSON-LD中代理人@id
的豐富感到困惑。 只是不要在RDF中使用空白節點,那么JSON-LD將如下所示:
{
"@context": {
"ex": "http://example.com/example/",
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
},
"@graph": [
{
"@id": "ex:object1",
"ex:availableOptions": {
"@id": "ex:optionsFor1"
}
},
{
"@id": "ex:optionsFor1",
"@type": "rdf:Alt",
"rdf:_1": "100",
"rdf:_2": "120",
"rdf:_3": "130"
}
]
}
另一種選擇是使用另一種詞匯,例如schema.org 。 我不確定這個例子是否正確:
{
"@context": {"schema": "http://schema.org/",
"adobe" : "http://ns.adobe.com/xap/1.0/smp/"},
"@type": "schema:ChooseAction",
"@id": "adobe:price",
"schema:option": ["100", "120", "130"]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.