aum*_*ets 1 rdf semantic-web sparql
我是SPARQL的新手,我正在尝试从实体中选择两个或更多数据属性.我有Artist实体,它有两个数据属性(id和name).我正在尝试获得这样的结果:
id Name
0 Artist 1
1 Artist 2
Run Code Online (Sandbox Code Playgroud)
但我得到的是这个:
id Name
0 Artist 1
0 Artist 2
1 Artist 1
1 Artist 2
Run Code Online (Sandbox Code Playgroud)
这是我的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
}
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
这是先前执行的INSERT命令:
PREFIX wits: <http://wits.org/song/>
INSERT DATA INTO <http://wits.org/song> {
wits:Artist wits:Name "Artist 2"
wits:ID 1 .
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
任何帮助表示赞赏.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 .
}
Run Code Online (Sandbox Code Playgroud)
这是错误的,因为它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 .
}
Run Code Online (Sandbox Code Playgroud)
a相当于rdf:type.在这里我们说的wits:Artist0是wits:Artist具有名称Artist 0和id 的类的类型0.