当前位置: 首页 > 知识库问答 >
问题:

jena查询RDF turtle,我有一个前缀后跟其他前缀

郝永思
2023-03-14

我必须解析柠檬格式的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\")." +
                "}";

通过最后一个查询,我可以检索整个URIlvont:nearlySameAs-mcreu:eus-30-02082791-n 现在最后一步应该是添加前缀

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

仅获取一个值(而不是使用过滤器),但目前我不知道如何执行此操作。


共有1个答案

郦祺
2023-03-14

您只能查询存在的数据。请再次查看数据,您将看到唯一与查询的前两个三重模式匹配的资源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:接近SameAs的三元组。因此,数据中没有连接,查询模式也不匹配。如果只需要该属性的值,只需编写一个由匹配数据的模式组成的查询。

我不认为这是你想要的,但是

sql prettyprint-override">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
 类似资料:
  • 问题内容: 我是ES的新手,我正在尝试建立一个查询,该查询将对多个字段使用phrase_prefix,因此我不必进行多次搜索。 这是到目前为止我得到的: 有人知道如何搜索多个字段,例如“ last_name”吗? 问题答案: 您正在使用的文本查询已被弃用(有效重命名),而改为使用match query 。匹配查询支持单个字段,但是您可以使用multi_match查询,该查询支持完全相同的选项并允许

  • 我遇到了一个问题,elasticsearch在我的环境(舞台和生产)中返回不同的结果。 我使用的elasticsearch版本对于这两种环境是相同的。 这两个环境都具有相同的映射和索引设置。 我有一个项目索引的标题字段为“测试”。我正在尝试执行match_phrase_prefix查询。然而,在我的舞台环境中,当我搜索“te”时,结果会像预期的那样返回。在生产中,我必须将搜索查询扩展到“TES”(

  • 我在互联网上搜索了一个很好的实现,它不是把数字表达式,而是把变量表达式从中缀符号转换成前缀和后缀。我做的所有搜索都没有成功。基本上,我想看看PHP中是否有任何实现,这样我就可以修改它以支持更多的操作符,而不仅仅是(-,*,=)。 例如转换: 同时保留变量名,不必输入数字进行计算。

  • 问题内容: 我是elasticsearch的新手。我有以下查询 } 在这里我希望Elastic应该给出不区分大小写的结果,例如字符串开头如下 但是我并没有像这样得到所有结果。所以任何人都可以帮助我。 示例:-我有4个文档 现在搜索,应该只返回前3个文档,因为它们从 此处忽略大小写开始,而不是第4 个文档,而第4个文档也包含但不包含开头。 问题答案: 这是在您使用关键字字段在应用程序中建立索引时发生

  • 我有一个字段,使用空白标记器和小写和asciifolding过滤器进行分析。我试图运行一个同时包含前缀和通配符的查询。我们正在用ElasticSearch取代一个使用纯Lucene的本土搜索引擎,类似的查询确实使用Lucene语法,但在ElasticSearch中不起作用。 例如,该查询将查找在“name”字段中有“Smith John”的所有文档。 如果我省略引号,我会得到结果,但这包括在同一文

  • 我对Lucene的不同查询对象进行了一些试验,并试图理解为什么在使用WhitespaceAnaylzer进行索引时,前缀查询与任何文档都不匹配。考虑以下测试代码: 如果我用StandardAnalyzer替换WhitespaceAnaylzer,测试就会通过。我使用Luke检查索引内容,但在索引过程中Lucene存储值的方式上找不到任何差异。谁能澄清一下出了什么问题吗?