Простой SPARQL-запрос не дает результата из файла черепахи - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть файл ttl, который я запрашиваю.Это образец двух узлов, которые я запрашиваю:

<http://natarchives.com.mt/archivalresource/R494Vol1>
    a                       "http://data.archiveshub.ac.uk/def/ArchivalResource" ;
    locah:accessProvidedBy  "http://natarchives.com.mt/repository/MT01" ;
    locah:dateCreatedAccumulatedEnd
            "1497" ;
    locah:dateCreatedAccumulatedStart
            "1486" ;
    locah:dateCreatedAccumulatedString
            "1486-1497" ;
    locah:level             "http://data.archiveshub.ac.uk/page/level/file" ;
    <http://purl.org/dc/terms/creator>
            <http://natarchives.com.mt/author/R494Vol1_NotaryGiacomoZabbara> ;
    <http://purl.org/dc/terms/identifier>
            "R494Vol1" ;
    <http://purl.org/dc/terms/language>
            "la" ;
    <http://purl.org/dc/terms/type>
            "Register" ;

и

<http://natarchives.com.mt/deed/R494Vol1-D233>
    locah:accessProvidedBy  "http://natarchives.com.mt/repository/MT01" ;
    locah:associatedWith    "constituens" , "positum" , "annuam gabellam" , "juribus" , "melite" , "festo pasce ressureccionis dominice" , "moratorie" , "converso" , "bonam" , "ponderis" , "situm" , "nobilem" , "completis" , "procuratorem magnifici" , "precario" , "civitatis melite" , "jngabellacionem" , "territorium eiusdem magnifici" , "bona" , "pecunia" , "juravit" , "gabellam juxta usum melite" , "jngabellavit" , "personam" , "augustj" , "procurator magnifici" , "crastato" , "testibus testamur" ;
    locah:associatedWith    <http://natarchives.com.mt/person/person3617> , <http://natarchives.com.mt/place/place727> , <http://natarchives.com.mt/place/place191> , <http://natarchives.com.mt/person/person3612> , <http://natarchives.com.mt/person/person3616> , <http://natarchives.com.mt/place/place726> , <http://natarchives.com.mt/place/place190> , <http://natarchives.com.mt/person/person3619> , <http://natarchives.com.mt/person/person3611> , <http://natarchives.com.mt/person/person3615> , <http://natarchives.com.mt/person/person3614> , <http://natarchives.com.mt/person/person3618> , <http://natarchives.com.mt/place/place728> , <http://natarchives.com.mt/person/person3610> , <http://natarchives.com.mt/person/person3613> ;
    locah:level             "http://data.archiveshub.ac.uk/page/level/item" ;
    <http://purl.org/dc/terms/date>
            "8-8-1487" ;
    <http://purl.org/dc/terms/identifier>
            "R494Vol1-D233" ;
    <http://purl.org/dc/terms/isPartOf>
            "http://natarchives.com.mt/archivalresource/R494Vol1" ;
    <http://purl.org/dc/terms/type>
            "Cabella" .

Это запрос, который я пытаюсь выполнить:

SELECT ?x ?reg ?regId
WHERE {
?x dcterms:date "8-8-1487".
?x dcterms:isPartOf ?reg.
?reg dcterms:identifier ?regId.
}

Как толькопоскольку я пытаюсь получить regId, запрос не дает результатов, если из файла turtle очевидно, что существует regId.Есть идеи почему?

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема в том, что в ваших данных значением свойства isPartOf является строковый литерал, "http://natarchives.com.mt/archivalresource/R494Vol1".Строковый литерал отличается от URI.Итак, что вы получаете с вашим запросом, так это то, что ?x совпадает с <http://natarchives.com.mt/deed/R494Vol1-D233>, ?reg совпадает с "http://natarchives.com.mt/archivalresource/R494Vol1", но тогда ?regId не совпадает ни с чем, потому что нет тройки со значением для?reg как субъект в ваших данных (и не может быть, потому что субъекты не могут быть литералами в RDF).

Чтобы исправить в ваших данных, вам нужно заменить "http://natarchives.com.mt/archivalresource/R494Vol1" на правильный URI, заключая в квадратные скобки вместо кавычек: <http://natarchives.com.mt/archivalresource/R494Vol1>.

Если вы не можете исправить ваши данные, вы также можете запросить их, заставив SPARQL преобразовать литерал в IRI, например:

SELECT ?x ?regIri ?regId
WHERE {
  ?x dcterms:date "8-8-1487".
  ?x dcterms:isPartOf ?reg.
  BIND(IRI(?reg) as ?regIri) 
  ?regIri dcterms:identifier ?regId.
}
...