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

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

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

это кусок rdf:

@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/> 

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


person Federico Catalano    schedule 19.02.2017    source источник
comment
Добавление префикса к запросу ничего не меняет. Вы можете ограничить ресурсы в результате только определенными их свойствами. В вашем случае единственное, что нужно сделать, это использовать фильтр либо с REGEX, либо с функцией STRSTARTS(STR(?nsas), "http://lodserver.iula.upf.edu/id/WordNetLemon/EN/")   -  person UninformedUser    schedule 20.02.2017
comment
хорошо, спасибо, я не подумал фильтровать весь URI, спасибо   -  person Federico Catalano    schedule 21.02.2017


Ответы (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
person UninformedUser    schedule 19.02.2017
comment
хорошо, я вижу, но этот файл каким-то образом был сгенерирован, поэтому должен быть метод для получения такой информации... в нижней части есть поле lemon:reference <00000003-n>, которое связано с полем lvont:nearlySameAs... - person Federico Catalano; 20.02.2017
comment
Хорошо, я вижу. Я обновил свой ответ. Идея состоит в том, чтобы пройти через смысл и ссылку. В будущем просто представьте это как граф и ребра, которые вам нужно пройти. Надеюсь это поможет. - person UninformedUser; 20.02.2017
comment
хорошо, спасибо, мне пришлось немного переработать ваше решение, чтобы получить что-то близкое к тому, что я хочу, теперь последний шаг отсутствует. Я обновил исходный пост - person Federico Catalano; 20.02.2017