问题描述
|
我是SPARQL的新手,我正在尝试从实体中选择两个或多个数据属性。
我有一个Artist实体,它具有两个数据属性(id和name)。我正在尝试获得如下结果:
id Name
0 Artist 1
1 Artist 2
但是我得到的是:
id Name
0 Artist 1
0 Artist 2
1 Artist 1
1 Artist 2
这是我的SPARQL查询:
PREFIX wits: <http://wits.org/song/>
SELECT ?name,?id
FROM <http://wits.org/song>
WHERE
{
<http://wits.org/song/Artist> wits:Name ?name .
<http://wits.org/song/Artist> wits:ID ?id
}
这是Artist类的RDF实现:
<!ENTITY www \"http://www.wits.org/\" >
<owl:Class rdf:about=\"&www;Artist\">
<rdfs:subClassOf rdf:resource=\"&owl;Thing\"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource=\"&www;song#ID\"/>
<owl:allValuesFrom rdf:resource=\"&xsd;unsignedInt\"/>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource=\"&www;song#Name\"/>
<owl:qualifiedCardinality rdf:datatype=\"&xsd;nonNegativeInteger\">1</owl:qualifiedCardinality>
<owl:onDatarange rdf:resource=\"&xsd;string\"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
这是先前执行的INSERT命令:
PREFIX wits: <http://wits.org/song/>
INSERT DATA INTO <http://wits.org/song> {
wits:Artist wits:Name \"Artist 2\"
wits:ID 1 .
}
我究竟做错了什么?
任何帮助表示赞赏。
125125
解决方法
我想您正在插入以下数据。
INSERT DATA INTO <http://wits.org/song> {
wits:Artist wits:Name \"Artist 0\"; wits:ID 0 .
wits:Artist wits:Name \"Artist 1\"; wits:ID 1 .
}
这是错误的,因为wits:Artist
会同时具有名称和ID,因此您需要为每个Artist提供不同的URI,并将类提供为rdf:type
。
根据您的本体论正确的方法是...
INSERT DATA INTO <http://wits.org/song> {
wits:Artist0 a wits:Artist; wits:Name \"Artist 0\"; wits:ID 0 .
wits:Artist1 a wits:Artist; wits:Name \"Artist 1\"; wits:ID 1 .
}
a
等同于rdf:type
。在这里,我们说wits:Artist0
是类型wits:Artist
的类型,名称为name13ѭ,标识为0
。