GraphDB + Lucene Index: могу ли я получить соответствующий предикат / литерал?

Следуя инструкциям, я создал индекс, охватывающий несколько ( буквальные-) предикаты:

  PREFIX luc: <http://www.ontotext.com/owlim/lucene#>
  INSERT DATA {
    luc:index             luc:setParam "uris" .
    luc:include           luc:setParam "literals" .
    luc:moleculeSize      luc:setParam "1" .
    luc:includePredicates luc:setParam "http://purl.org/dc/terms/title http://www.w3.org/2000/01/rdf-schema#label http://www.w3.org/2004/02/skos/core#prefLabel http://www.w3.org/2004/02/skos/core#altLabel" .
  }

а также

PREFIX luc: <http://www.ontotext.com/owlim/lucene#>
INSERT DATA {
  luc:${Cfg.literalIndex}   luc:createIndex   "true" .
}

Эта часть, кажется, работает нормально. У меня вопрос: есть ли способ получить соответствующий предикат или литерал в моем запросе SPARQL?

Итак, предположим следующие данные:

:exA rdfs:label     'label' ;
     dct:title      'title' .

Я бы хотел сделать что-то подобное

SELECT *
WHERE {
  ?needle luc:labelIndex "title" ;
          luc:predicate  ?predicate ;
          ?predicate     ?label .
}

Если что-то вроде этого luc:predicate существует, это могло бы дать мне фактически совпавший предикат вместе со значением совпадений. Однако я даже не уверен, что Lucene индексирует предикат, который потребуется для включения такой функции.


person Sirko    schedule 18.11.2018    source источник


Ответы (1)


Вы не можете сделать это эффективно с устаревшим плагином FTS Lucene. Однако Lucene Connectors легко поддерживает ваш вариант использования. Вот пример с некоторыми фиктивными данными:

Примеры данных

<urn:a> a <http://www.w3.org/2004/02/skos/core#Concept> ;
    <http://purl.org/dc/terms/title> "title"; 
    <http://www.w3.org/2000/01/rdf-schema#label> "label" ; 
    <http://www.w3.org/2004/02/skos/core#prefLabel> "prefer label"; 
    <http://www.w3.org/2004/02/skos/core#altLabel> "alt label" .

Примечание. Коннекторы индексируют данные для одного rdf:type. В вашем примере я считаю, что у вас должно быть skos:Concept.

Создать коннектор Lucene

Соединители будут индексировать для выбранного типа каждое свойство или цепочку свойств в отдельное поле Lucene.

PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>

INSERT DATA {
    inst:fts :createConnector '''
{
  "types": [
    "http://www.w3.org/2004/02/skos/core#Concept"
  ],
  "fields": [
    {
      "fieldName": "label",
      "propertyChain": [
        "http://www.w3.org/2000/01/rdf-schema#label"
      ]
    },
    {
      "fieldName": "prefLabel",
      "propertyChain": [
        "http://www.w3.org/2004/02/skos/core#prefLabel"
      ]
    },
    {
      "fieldName": "altLabel",
      "propertyChain": [
        "http://www.w3.org/2004/02/skos/core#altLabel"
      ]
    }
  ]
}
''' .
}

Вернуть совпадающие поля и фрагмент

PREFIX : <http://www.ontotext.com/connectors/lucene#>
PREFIX inst: <http://www.ontotext.com/connectors/lucene/instance#>
SELECT ?entity ?snippetField ?snippetText {
    ?search a inst:fts ;
            :query "label" ;
            :entities ?entity .
    ?entity :snippets _:s .
    _:s :snippetField ?snippetField ;
        :snippetText ?snippetText .
}

Где в проекции:

  • ? entity - это ресурс RDF, которому соответствует свойство или цепочка свойств, т.е.
  • ? snippetField - это имя поля, соответствующее полнотекстовому запросу
  • ? snippetText - значение совпадающего фрагмента
person vassil_momtchev    schedule 18.11.2018