2012-04-15 12 views
4

Ich habe in einer RDF-Datei eine rdf:collection. Wenn ich eine Sammlung von einem Autor habe, gibt die folgende Abfrage nichts zurück. Die Abfrage funktioniert jedoch für zwei oder mehr Autoren, aber gibt nur zwei Autoren zurück. Was kann ich tun, um alle Autoren zu schreiben?rdf: Sammlung in Sparql

<bibo:authorList rdf:parseType="Collection"> 
<rdf:Description rdf:about="http://openlibrary.org/authors/OL113143A"/> 
<rdf:Description rdf:about="http://openlibrary.org/authors/OL6784959A"/> 
</bibo:authorList> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX dc: <http://purl.org/dc/terms/> 

select ?title ?author ?author2 
where { 
    ?x dc:title ?title . 

    ?x bibo:authorList ?object. 
    ?object rdf:first ?name. 
    ?name rdf:value ?author. 

    ?object rdf:rest ?object2. 
    ?object2 rdf:first ?name2. 
    ?name2 rdf:value ?author2 . 
} 

Antwort

5

Ihr Problem ist, dass Sie etwas semi-rekursive so Ihre Ergebnisse auf die Länge der RDF-Liste variieren je versuchen. Die Abfrage wie geschrieben funktioniert nur für Listen der Länge 2 oder mehr, Listen der Länge 1 funktionieren nicht, da der zweite Teil Ihrer Abfrage nichts hat.

Wenn Sie eine Sammlung der beste Weg, mit einer Eigenschaft Pfad zugreifen möchten, wie so (benötigt SPARQL 1.1):

SELECT * WHERE 
{ 
    ?list rdf:rest*/rdf:first ?member . 
} 

Sie können diese allgemeine Muster passen in Ihrer Anfrage passen, wie Sie sehen, passen.

+0

Verwenden Sie ARC2 für SPARQL-Abfragen für mich, also habe ich keine solche Anfrage. Irgendwo geschrieben: ARC2 unterstützt die Unterabfragen von SPARQL 1.1 nicht. Wie erstelle ich eine Abfrage mit SPARQL 1.0? Wie installiert man in ARC2 SPARQL 1.1? - –

+0

@Magdalena ARC2 unterstützt SPARQL 1.1 nicht, daher können Sie diese Abfrage nicht verwenden, wenn Sie ARC2 verwenden. – RobV

+0

Was ist anstelle Ihrer Sammlung zu verwenden? Arc2 würde ich brauchen und ich brauche etwas, das meine Sammlungen ersetzen wird. –