SPARQL选择两列

时间:2011-04-17 15:53:20

标签: rdf semantic-web sparql

我是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

1 个答案:

答案 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