簡體   English   中英

json-LD類屬性關系建模

[英]json-LD class property relationship modeling

我正在嘗試找出使用JSON-LD建立屬性/類關系的最佳方法。 我正在嘗試支持能夠共享屬性的類。

第一個示例使用我認為是實現此目標的常用方法(盡管schema.org使用名為http://schema.org/domainIncludes的托管屬性而不是rdfs:domain)。

但是,我認為,通過指向示例2中的類的屬性,可以更好地描述我的用例。

示例1)請參閱rdfs:domain屬性。

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "project": "http://wwww.hello.com#"
  },
  "@graph": [
    {
      "@id": "project:ClassOne",
      "@type": "rdfs:Class",
      "rdfs:label": "ClassOne"
    },
    {
      "@id": "project:ClassTwo",
      "@type": "rdfs:Class",
      "rdfs:label": "ClassOne"
    },
    {
      "@id": "project:propertyOne",
      "@type": "rdf:Property",
      "rdfs:label": "propertyOne",
      "rdfs:range": "xsd:string",
      "rdfs:domain": [
        { "@id":"project:ClassOne" },
        { "@id":"project:ClassTwo" },
      ]
    },
    {
      "@id": "project:PropertyTwo",
      "@type": "rdf:Property",
      "rdfs:label": "PropertyTwo",
      "rdfs:range": "xsd:string",
      "rdfs:domain": [
        { "@id":"project:ClassOne" }
      ]
    }
  ]
}

示例2)指向類中的屬性,而不是在屬性上使用域。 使用ref:isDefinedBy或project:custom / propertyList作為兩種可能的方式。 我會使用其中一個,而不是同時使用兩者。

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "project": "http://wwww.hello.com#"
  },
  "@graph": [
    {
      "@id": "project:ClassOne",
      "@type": "rdfs:Class",
      "rdfs:label": "ClassOne",
      "rdfs:isDefinedBy": [
        { "@id":"project:propertyOne" },
        { "@id":"project:propertyTwo" }
      ]
    },
    {
      "@id": "project:ClassTwo",
      "@type": "rdfs:Class",
      "rdfs:label": "ClassOne",
      "project:custom/propertyList": [
          { "@id":"project:propertyTwo" }
      ]
    },
    {
      "@id": "project:propertyOne",
      "@type": "rdf:Property",
      "rdfs:label": "propertyOne",
      "rdfs:range": "xsd:string"
    },
    {
      "@id": "project:propertyTwo",
      "@type": "rdf:Property",
      "rdfs:label": "propertyTwo",
      "rdfs:range": "xsd:string"
    }
  ]
}

這有意義嗎,還是我從根本上缺少一些東西? 我不想在屬性上使用域的原因是因為我試圖建立一個框架,使來自不同“項目”的類能夠共享屬性,而project1中的屬性具有一個project2中的一個類。

但是,讓project1中的類使用project2中的屬性確實有意義。

使用RDFS / OWL詞匯表的大多數人都傾向於使用Turtle或RDF / XML進行建模,但是JSON-LD是實現此目的的好方法。

通常對於rdfs:domain(和rdfs:range)不了解的是,如果使用兩個或多個類,則實際上是在創建一個交集,而不是一個並集; 這是RDFS的兩個推論性質。 當您有一個使用propertyOne的實例時,它會自動推斷該實例是其所有域的子類(值是所有范圍的子類)。 這就是創建schema:domainIncludes的原因,但是它沒有正式的推理規則。

建模的另一種方法是使用owl:unionOf,這樣您就可以說域是一個類的子類,該類是兩個或多個其他類的聯合,但這相當復雜,這也是schema.org決定的原因朝另一個方向前進。

在示例二中,您似乎在建議一種描述詞匯的不同方法。 請注意,rdfs:isDefinedBy也有特殊含義,我之前從未見過它用於描述屬性關系。 當然,從結構上講,您可以使用@reverse在ClassOne和ClassTwo下包括屬性定義。 關鍵在於查看其創建的三元組,這就是為什么Turtle通常更適合詞匯建模或專用Protégé的原因。 完成后,您可以序列化為JSON-LD,可能使用一些框架來創建您感興趣的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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