2017-10-23 1 views
1

Ich habe eine SPARQL-Abfrage, die Menschen wählen, die Geburtsjahr 1990 hat. Wie könnte ich nur Jahr von xsd: Datum Format bekommen? Ich kann sehen, wie man Jahr von xsd: dateTime mit year() bekommt, aber es funktioniert nicht für xsd: date.SPARQL Wie bekomme ich das Jahr als Ganzzahl von xsd: Datum

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT ?birthYear 
WHERE 
{dbr:Ilse_DeLange dbo:birthDate ?birth 
#how to get year only as a integer?} 
+0

Ein häufiges Problem ist, dass die Daten chaotisch (das heißt falsch), wie zB an nicht-Datentyp xsd haben: Datum oder mit einer schlechten lexikalischen Form. Beides bewirkt, dass YEAR() fehlschlägt, auch wenn es als Erweiterung unterstützt wird. – AndyS

Antwort

0

Nach den Angaben, year() Arbeiten auf xsd:dateTime Literale nur.

Je nach Triple-Store, können Sie versuchen, zu xsd:dateTime zuerst zu konvertieren:

PREFIX dbr: <http://dbpedia.org/resource/> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT DISTINCT (year(xsd:dateTime(?birthDate)) as ?birthYear) WHERE { 
    dbr:Ilse_DeLange dbo:birthDate ?birthDate 
} 
0

Um es zu tun, ohne Annahmen über Erweiterungen für xsd: date braucht ein bisschen String Bashing.

Sie können REPLACE in der lexikalischen Form von? BirthDate verwenden, um year als Zeichenfolge zu erhalten und dann in xsd: integer umwandeln.

REPLACE(str(?birthDate), "(\\d*)-.*", "$1")

Verwandte Themen