我是SPARQL的新手,我正在尝试从实体中选择两个或更多数据属性。 我有艺术家实体,它有两个数据属性( id 和名称)。我正试图获得这样的结果:
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 Class的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
答案 0 :(得分:5)
我猜您正在插入以下数据。
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,您需要为每个艺术家提供不同的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
的类型,名称为Artist 0
,标识为0
。