SPARQL Выбрать две колонки - PullRequest
1 голос
/ 17 апреля 2011

Я новичок в 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 
}

Вот реализация RDF класса Artist:

<!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 Ответ

5 голосов
/ 17 апреля 2011

Полагаю, вы вставляете следующие данные.

    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 будет иметь оба имени и оба идентификатора, вам нужно назначить разные идентификаторы 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.

...