哪些 RDF 模式可用于表示组件及其构成的百分比?

What RDF patterns can be used to represent components and the percentage they make up?

我想使用 RDF 清点我的葡萄酒 collection,但不确定如何指定葡萄酒可以包含几种葡萄品种的百分比。下面是使用 rdf:bag.

在 Turtle 语法中这样做的尝试
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix vin: <http://example.org/wine#> .

<http://example.org/wine/id#1001>
  a <http://example.org/wine/ns#red> ;
  vin:name "Quilceda Creek CVR" ;
  vin:vintage "2014"^^xsd:gYear ;
  vin:winery "Quilceda Creek"@en ;
  vin:alcoholContent "0.15"^^xsd:decimal  ;
  vin:agedIn "French Oak"@en ;      

  vin:varietals rdf:_1, rdf:_2, rdf:_3, rdf:_4, [
    a rdf:Bag ;
    rdf:_1 "Cabernet Sauvignon"@en ;
    rdf:_1 "0.76"^^xsd:decimal ;
    rdf:_2 "Merlot"@en ;
    rdf:_2 "0.20"^^xsd:decimal ;
    rdf:_3 "Petit Verdot"@en ;
    rdf:_3 "0.03"^^xsd:decimal ;
    rdf:_4 "Malbec"@en ;
    rdf:_4 "0.01"^^xsd:decimal ;
  ] .

当我将其转换为 XML/RDF 时,带有百分比的三元组被丢弃。这让我觉得你不应该t/can 不应该多次使用包项谓词(例如 rdf:_1)。

我也考虑过做一袋袋子,每个品种都有一个袋子,包含名称和百分比。这将涉及创建更多的空白节点,这对我来说似乎不正确。最终,我希望能够检索到所有至少含有一定比例的特定品种的葡萄酒。我不确定如果品种名称和百分比对除了在同一个袋子中之外没有定义任何关系。

我是新手,但感觉我需要查看 RDF 模式和本体来解决这个问题。也就是说,在我完全理解为什么我需要这样做之前,我也不想跳槽。

如果可能的话,如何使用 RDF 来表示葡萄酒具有一定百分比的不同品种?

我更愿意使用这个简单的模式:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix wine: <http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#> .
@prefix vin: <http://example.org/wine#> .

vin:id1001 vin:varietal [ vin:grape  wine:CabernetSauvignonGrape; 
                          vin:percentage  "0.76"^^xsd:decimal ] ;
           vin:varietal [ vin:grape  wine:MerlotGrape ;
                          vin:percentage  "0.20"^^xsd:decimal ] .

针对上述模式的示例 SPARQL 查询为:

SELECT DISTINCT ?sophistique
WHERE {
    ?sophistique vin:varietal/vin:percentage ?percentage .
    FILTER (?percentage <= "0.05"^^decimal)
}
SELECT DISTINCT ?coupage
WHERE {
    ?coupage vin:varietal/vin:grape ?grape1.
    ?coupage vin:varietal/vin:grape ?grape2.
    FILTER (?grape1 != ?grape2)
}
SELECT ?id (("1.0"^^xsd:decimal - SUM(?percentage)) AS ?part_des_anges)   
WHERE {
    ?id vin:varietal/vin:percentage ?percentage .
} GROUP BY ?id HAVING ( ?part_des_anges > "0.0"^^xsd:decimal )

一些备注:

  1. 在 RDF 中尽可能使用事物而不是字符串在意识形态上更正确。
    W3C 的示例 wine ontology 可以为其中许多内容提供 URI。

  2. 为什么不使用多次出现的 vin:varietal 属性 而不是 rdf:Seq?在 SPARQL 中处理 rdfs:Container 将更加困难,尤其是在 OWL.

  3. 我不认为这些品种(葡萄品种有百分比)需要用URIs进行强烈的识别,它们的“本体论地位”不够牢固。因此,我使用空白节点。