什么样的RDF模式可以用来表示组件以及它们组成的百分比?
问题描述:
我想用RDF清点我的葡萄酒收藏,但不知道如何指定葡萄酒可以包含几个葡萄品种的百分比。下面是使用rdf:bag在Turtle语法中做的一个尝试。什么样的RDF模式可以用来表示组件以及它们组成的百分比?
@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如何用来表示葡萄酒具有不同品种的某些百分比?
答
我宁愿用这个简单的模式:
@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)
一些言论:
在任何可能的情况下,使用RDF中的字符串而不是字符串在思想上更为正确。
W3C的例子wine ontology可以提供许多这些东西的URI。为什么不使用多次出现的
vin:varietal
属性而不是rdf:Seq
?在SPARQL中处理rdfs:Container
将更加困难,特别是在OWL中。我不认为这些葡萄品种(百分比葡萄品种)需要对URI进行强有力的识别,它们的“本体论状态”并不足够稳固。因此,我使用空白节点。
您必须为袋子中的每个物品使用空白节点或URI,然后才能将相应信息附加到物品上。 'rdf:_1 vin:entry1'和'vin:entry1 rdfs:label“Cabernet Sauvignon”@en; vin:grapePortion“0.76”^^ xsd:decimal .' – AKSW
这个效果很好。我做了一个额外的修改,就是用'rdf:Seq'替换'rdf:Bag',这样输入的数据就会从最大到最小的百分比排列。 – Kelly