RDF-обработка данных с помощью SPARQL и SPIN

Я хочу обрабатывать данные RDF, мне нужно создать с помощью запроса SPARQL (я использую SPIN) объект (книгу) с двумя свойствами (название и автор). У всех книг есть «Название», но иногда нет «Автор».

Когда это происходит, эта «Книга» не создается, и я хочу создать ее с «Заголовком».

Я использую GraphDB, и это запрос:

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)
}

Есть ли решение? Я могу использовать другой синтаксис SPARQL.


person Wences    schedule 13.03.2017    source источник
comment
Использование заголовка в качестве URL-адреса — не очень хорошая идея, поскольку заголовки недостаточно стабильны. Лучше использовать естественный ключ (например, ISBN).   -  person Vladimir Alexiev    schedule 06.06.2017


Ответы (1)


Используйте OPTIONAL в части SERVICE, чтобы шаблон не терпел неудачу, когда <urn:col:Author> отсутствует.

Тогда CONSTRUCT просто не будет входить в тройку ?rdfIRI pres:Author ?author, но будет включать ?rdfIRI a pres:Book.

Если вы хотите установить ?author, когда он отсутствует в данных, посмотрите на использование COALESCE.

person AndyS    schedule 13.03.2017