2017-03-13 2 views
0

Ich möchte RDFizing Daten, ich brauche Konstrukt mit einer SPARQL-Abfrage (ich benutze SPIN) ein Objekt (Buch) mit zwei Eigenschaften (Titel und Autor). Alle Bücher haben "Titel", aber manchmal nicht "Autor".RDFisting Daten mit SPARQL und SPIN

Wenn dies passiert, erstellt es dieses "Buch" nicht, und ich möchte es mit "Titel" erstellen.

Ich verwende GraphDB und dies ist die Abfrage:

prefix spif: <http://spinrdf.org/spif#> 
prefix pres: <http://example.com/pruebardf/> 

CONSTRUCT { 
    ?rdfIRI a   pres:Book ; 
      pres:Author ?author . 
} 
WHERE { 
    SERVICE <http://localhost:7200/rdf-bridge/1683716393221> { 
     ?bookRow a    <urn:Row> ; 
        <urn:col:Author> ?author ; 
        <urn:col:Title> ?title . 
    } 
    BIND(IRI(CONCAT("http://example.com/", spif:encodeURL(?title))) AS ?rdfIRI) 
} 

Gibt es eine Lösung? Ich kann andere SPARQL-Syntax verwenden.

+0

Die Verwendung eines Titels als URL ist keine sehr gute Idee, da Titel nicht ausreichend stabil sind. Besser einen natürlichen Schlüssel benutzen (zB ISBN) –

Antwort

0

Verwenden Sie OPTIONAL im SERVICE Teil, damit das Muster nicht fehlschlägt, wenn <urn:col:Author> fehlt.

Die CONSTRUCT wird dann einfach nicht in die ?rdfIRI pres:Author ?author Dreiergruppe eingefügt, sondern enthält ?rdfIRI a pres:Book.

Wenn Sie? Autor festlegen möchten, wenn es in den Daten fehlt, sehen Sie sich COALESCE an.