jena query RDF turtle, у меня есть префикс, за которым следуют другие префиксы

Я должен проанализировать данные RDF, данные в формате лимона, все в порядке, но я не могу получить доступ к одному полю, которое, кроме того, больше всего мне нужно.

Обязательное поле lvont:nearlySameAsЯ хотел бы принять только одно из следующих значений (они все более или менее одинаковы), но если есть только метод, чтобы взять их все, это не большая проблема.

это часть рдф:

@prefix lemon: <http://lemon-model.net/lemon#> .
@prefix lvont: <http://lexvo.org/ontology#> .
@prefix wordnet-ontology: <http://wordnet-rdf.princeton.edu/ontology#> .
@prefix mcren: <http://lodserver.iula.upf.edu/id/WordNetLemon/EN/> .
@prefix mcrgl: <http://lodserver.iula.upf.edu/id/WordNetLemon/GL/> .
@prefix mcres: <http://lodserver.iula.upf.edu/id/WordNetLemon/ES/> .
@prefix mcrca: <http://lodserver.iula.upf.edu/id/WordNetLemon/CAT/> .
@prefix mcreu: <http://lodserver.iula.upf.edu/id/WordNetLemon/EU/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix gawnl: <gawn-lemon/> .

<00000003-n> a wordnet-ontology:Synset ;
    rdfs:label "aardvark  n"@eng ;
    rdfs:label "arcán talún"@gle ;
    wordnet-ontology:part_of_speech wordnet-ontology:noun .

<arcán_talún-n> a lemon:LexicalEntry ;
    lemon:canonicalForm <arcán_talún-n#CanonicalForm> ;
    wordnet-ontology:part_of_speech wordnet-ontology:noun .

<arcán_talún-n#CanonicalForm> a lemon:Form ;
    lemon:writtenRep "arcán talún"@gle .
<arcán_talún-n> lemon:sense <arcán_talún-n#1-n> .

<00000003-n> lvont:nearlySameAs mcreu:eus-30-02082791-n ,
                       mcrca:cat-30-02082791-n ,
                       mcres:spa-30-02082791-n ,
                       mcrgl:glg-30-02082791-n ,
                       mcren:eng-30-02082791-n .
<arcán_talún-n#1-n> a lemon:LexicalSense ;
    wordnet-ontology:sense_number 1 ;
    wordnet-ontology:old_sense_key "aardvark%1:05:00::" ;
    lvont:nearlySameAs <http://lexvo.org/id/wordnet/30/noun/aardvark_1_05_00> ;
    lemon:reference <00000003-n> .

<00000003-n> wordnet-ontology:synset_member <arcán_talún-n#1-n> .

и это мой запрос:

    final String query =
            "prefix lemon: <http://lemon-model.net/lemon#> \n" +
            "prefix lvont: <http://lexvo.org/ontology#> \n" +
            "prefix wordnet-ontology: <http://wordnet-rdf.princeton.edu/ontology#> \n" +
            "prefix mcren: <http://lodserver.iula.upf.edu/id/WordNetLemon/EN/> \n" +
            "prefix mcrgl: <http://lodserver.iula.upf.edu/id/WordNetLemon/GL/> \n" +
            "prefix mcres: <http://lodserver.iula.upf.edu/id/WordNetLemon/ES/> \n" +
            "prefix mcrca: <http://lodserver.iula.upf.edu/id/WordNetLemon/CAT/> \n" +
            "prefix mcreu: <http://lodserver.iula.upf.edu/id/WordNetLemon/EU/> \n" +
            "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" +
            "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n" + 
            "prefix gawnl: <gawn-lemon/> \n " +
            "\n" +
            "select ?lemon ?sense ?nsas where {\n" +
            "  ?lemon a lemon:Form ;\n" +
            "             lemon:writtenRep ?sense ;\n" +
            "             lvont:nearlySameAs ?nsas .\n" +
            "}";
            ;

Я могу получить первые два значения, но если я добавлю третью строку, запрос не выдаст. Очевидно, что я что-то не так делаю, но не могу понять, что изменить. Заранее спасибо.

ОБНОВЛЕНИЕ ЗАПРОСА

            final String query =
                "prefix lemon: <http://lemon-model.net/lemon#> \n" +
                "prefix lvont: <http://lexvo.org/ontology#> \n" +
                "prefix wordnet-ontology: <http://wordnet-rdf.princeton.edu/ontology#> \n" +
                "prefix mcren: <http://lodserver.iula.upf.edu/id/WordNetLemon/EN/> \n" +
                "prefix mcrgl: <http://lodserver.iula.upf.edu/id/WordNetLemon/GL/> \n" +
                "prefix mcres: <http://lodserver.iula.upf.edu/id/WordNetLemon/ES/> \n" +
                "prefix mcrca: <http://lodserver.iula.upf.edu/id/WordNetLemon/CAT/> \n" +
                "prefix mcreu: <http://lodserver.iula.upf.edu/id/WordNetLemon/EU/> \n" +
                "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" +
                "prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \n" + 
                "prefix gawnl: <gawn-lemon/> \n " +
                "\n" +
                "select ?wr ?nsas where {\n" +
                "  ?le  a lemon:LexicalEntry  ;\n" +
                "         lemon:canonicalForm ?cf .\n" +
                "  ?cf  a lemon:Form  ;\n" +
                "             lemon:writtenRep ?wr .\n" +
                "  ?le    lemon:sense ?sense . \n" +
                "  ?sense a lemon:LexicalSense ; \n" +
                "           lemon:reference ?ref . \n" +
                "  ?ref     lvont:nearlySameAs ?nsas. \n" +
                "  FILTER regex(str(?nsas), \"eng\")." +
                "}";

С помощью этого последнего запроса я могу получить весь URI lvont:nearlySameAs mcreu:eus-30-02082791-n... Теперь последний шаг должен добавить префикс

@prefix mcren: <http://lodserver.iula.upf.edu/id/WordNetLemon/EN/> 

получить только одно значение (вместо использования фильтра), но на данный момент я не могу понять, как это сделать.

1 ответ

Решение

Вы можете только запросить данные, которые существуют. Пожалуйста, посмотрите на данные еще раз, и вы увидите, что единственный ресурс arcán_talún-n#CanonicalForm который соответствует первым двум тройным шаблонам вашего запроса

?lemon a lemon:Form ;
       lemon:writtenRep ?sense .

троек

<arcán_talún-n#CanonicalForm> a lemon:Form ;
    lemon:writtenRep "arcán talún"@gle .

Но для этого ресурса не существует тройки с предикатом lvont:nearlySameAs в ваших данных. Таким образом, в данных нет связи, и ваш шаблон запроса не совпадает. Если вам нужны только значения для этого свойства, просто напишите запрос, который состоит из шаблона, соответствующего данным.

Я не думаю, что это то, что вы хотите, но

SELECT ?nsas WHERE {?s <http://lemon-model.net/lemon#nearlySameAs> ?nsas } LIMIT 1

просто вернул бы одно значение, но это не выглядит полезным для меня.

Обновление: более сложный и связанный запрос в смысле

PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lvont: <http://lexvo.org/ontology#>

SELECT ?lemon ?sense ?nsas WHERE {
  ?lemon a lemon:Form ;
         lemon:writtenRep ?sense .
  ?sense lemon:reference ?ref .
  ?ref lvont:nearlySameAs ?nsas .
} LIMIT 1
Другие вопросы по тегам