可以使用哪些RDF模式来表示组件及其组成的百分比?

时间:2017-05-26 20:41:09

标签: rdf semantic-web linked-data

我想使用RDF清点我的葡萄酒收藏品,但我不确定如何指定葡萄酒可以包含几种葡萄品种的百分比。下面是使用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时,百分比的三元组会被删除。这让我觉得你不应该/不能多次使用行李项目谓词(例如rdf:_1)。

我还考虑过制作一袋袋子,每个品种的袋子都包含名称和百分比。这将涉及创建更多空白节点,这对我来说似乎并不合适。最终,我希望能够检索出所有含有至少一定百分比特定品种的葡萄酒。我不确定如果品种名称和百分比对没有定义关系而不是在同一个包中,我是否能够。

我是新手,但有一种感觉我需要查看RDF Schema和本体来解决这个问题。也就是说,我也不想跳到那里直到我完全明白为什么需要。

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

1 个答案:

答案 0 :(得分:3)

我更喜欢使用这种简单的模式:

@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. 我不认为这些品种(百分比的葡萄品种)需要对URI进行强烈鉴定,它们的“本体论状态”不够稳固。因此,我使用空白节点。