SPARQL选择两列

aum*_*ets 1 rdf semantic-web sparql

我是SPARQL的新手,我正在尝试从实体中选择两个或更多数据属性.我有Artist实体,它有两个数据属性(idname).我正在尝试获得这样的结果:

 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

Man*_*res 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 .
    }
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:Artist0wits:Artist具有名称Artist 0和id 的类的类型0.