簡體   English   中英

如何在JSON-LD中表示替代方案的集合

[英]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:Containerrdf:Bagrdf:Seqrdf:Alt

這些容器之間沒有正式的(即語義上的 )差異,差異是相當務實的 不同之處在於消費者打算如何處理數據,請參閱此問題

嚴格地說,RDF集合和RDF容器都不是RDF數據模型的一部分,而是特定RDF詞匯表的元素(盡管這個詞匯表很常見)。

JSON-LD

JSON-LD數據模型與RDF沒有很好地對齊,例如參見其中一個主要創建者的這篇文章

  • JSON-LD忽略了openclosed之間的區別。
  • JSON-LD忽略了上述語用差異。
  • JSON-LD保持有序無序之間的差異。
  • JSON-LD保持(詞匯上) 非獨特不同的區別
    用前一個識別這種差異。

制圖

來自RDFS 1.1:

同一資源可能會多次出現在容器中

容器的第一個成員,即rdf:_1屬性的值,是默認選項

因此,通常, rdf:Alt元素不是唯一的,而是有序的。 因此,應該使用@list 但是,如果您的選擇是唯一且無序的,則可以使用@set

在其他情況下,請注意在沒有訂單時斷言是沒有任何損害的。

另見ISSUE-24的討論和動機。

UPDATE

是的,不可能在JSON-LD數據模型中表達實用 (即與語言語用學相關)的差異。 例如,無法表達rdf:Seqrdf: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM