Ich habe ein Konstrukt Abfrage in SPARQL was nützlich ist, Details über Verträge abzurufen:Wie kann ich ein RDF-Diagramm über einige Individuen mit einem einzigen CONSTRUCT erstellen?
CONSTRUCT {
?contract dcterm:identifier ?id .
?contract rdfs:label ?label .
?contract pc:bidder ?bidder .
}
WHERE {
OPTIONAL {
?contract dcterm:identifier ?id .
}
OPTIONAL {
?contract rdfs:label ?label .
}
OPTIONAL {
?contract pc:tender ?tender .
?tender pc:bidder ?bidder .
}
}
Ich habe eine Liste der Verträge, die zum Beispiel PC: c1, pc: c2, und ich würde in einem abzurufen mögen einzelne Abfrage (oder ein einzelner HTTP-Aufruf) die Details von beiden.
Die erste Idee ist, den Vertrag Variable mit jeder uri und Vermeidung von Konflikten zwischen anderen Variablen zu ersetzen:
CONSTRUCT {
pc:c1 dcterm:identifier ?id1 .
pc:c1 rdfs:label ?label1 .
pc:c1 pc:bidder ?bidder1 .
pc:c2 dcterm:identifier ?id2 .
pc:c2 rdfs:label ?label2 .
pc:c2 pc:bidder ?bidder2 .
}
WHERE {
OPTIONAL {
pc:c1 dcterm:identifier ?id1 .
}
OPTIONAL {
pc:c1 rdfs:label ?label1 .
}
OPTIONAL {
?pc:c1 pc:tender ?tender1 .
?tender1 pc:bidder ?bidder1 .
}
OPTIONAL {
pc:c2 dcterm:identifier ?id2 .
}
OPTIONAL {
pc:c2 rdfs:label ?label2 .
}
OPTIONAL {
?pc:c2 pc:tender ?tender2 .
?tender2 pc:bidder ?bidder2 .
}
}
Das Problem ist, dass bei vielen uris der Abfrage ziemlich groß werden könnte.
Gibt es eine kompaktere Art, es zu schreiben?
Ich versuchte mit dem Operator IN (https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#OperatorMapping - 17.4.1.9), aber Virtuoso scheint die Abfrage nicht zu analysieren. Das VALUES-Schlüsselwort (https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#inline-data) schien eine gute Lösung zu sein, aber Jena scheint es nicht richtig zu analysieren.
Welche Jena Version funktioniert nicht? – AKSW