SPARQL Jena迭代以获得更多主题的结果

SPARQL Jena迭代以获得更多主题的结果,sparql,jena,dbpedia,Sparql,Jena,Dbpedia,我正在尝试获取有关DBpedia的一些概念的信息。我发现了如何得到1,但更多的是它失败了。我被告知过滤应该有帮助,但处理时间太长,我会超时 我不能做的是价值观{dbpedia:Facebook dbpedia:Google} 所以我一直在寻找另一种方法,但仍然没有;不起作用。这就是我现在的处境: public static String concepts[] = { "Facebook", "Google" }; public static String getQuery(String

我正在尝试获取有关DBpedia的一些概念的信息。我发现了如何得到1,但更多的是它失败了。我被告知过滤应该有帮助,但处理时间太长,我会超时

我不能做的是价值观{dbpedia:Facebook dbpedia:Google}

所以我一直在寻找另一种方法,但仍然没有;不起作用。这就是我现在的处境:

public static String concepts[] = { "Facebook", "Google" };

    public static String getQuery(String concept) {
        return "prefix dbpediaowl: <http://dbpedia.org/ontology/>"
                + " prefix dbpedia: <http://dbpedia.org/resource/>"
                + " prefix owl: <http://www.w3.org/2002/07/owl#>"
                + " prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
                + " PREFIX dbpprop: <http://dbpedia.org/property/>"
                + " prefix dbpedia-owl: <http://dbpedia.org/ontology/>"
                + " select ?s ?p ?o where { "
                + " values ?web {  dbpedia:"
                + "Facebook"
                + " } "
                + " { ?web ?p ?o bind( ?web as ?s ) } " + " union "
                + " { ?s ?p ?web bind( ?web as ?o ) } " + " filter( ?p in ( "
                + "dbpprop:available, " + "dbpprop:company, "
                + "dbpprop:inventor, " + "dbpedia-owl:foundedBy, "
                + "dbpedia-owl:subsidiary, " + "dbpprop:foundation, "
                + "dbpprop:founder, " + "dbpprop:industry, "
                + "dbpprop:programmingLanguage, " + "dbpedia-owl:successor )) ";

    }

    public static void main(String[] args) {
        OutputStream os;
        PrintStream printStream;

        try {
            os = new FileOutputStream("C:/Users/alex/Desktop/data.txt");
            printStream = new PrintStream(os);
            printStream.println("am scris");
            for (int i = 0; i < concepts.length; i++) {
                printStream.println(i+ " concept");
                Query query = QueryFactory.create(getQuery(concepts[i])); 

                QueryExecution qExe = QueryExecutionFactory.sparqlService(
                        "http://lod.openlinksw.com/sparql", query);
                ResultSet results = qExe.execSelect();

                while (results.hasNext()) {
                    printStream.println(results.nextSolution().toString());
                }

            }

            printStream.close();
            os.close();


        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getCause());
        }

    }
publicstaticstringconcepts[]={“Facebook”、“Google”};
公共静态字符串getQuery(字符串概念){
返回“前缀dbpediaowl:”
+“前缀dbpedia:”
+“前缀owl:”
+“前缀rdf:”
+“前缀dbpprop:”
+“前缀dbpedia owl:”
+“选择?s?p?o,其中{”
+“值?web{dbpedia:”
+“Facebook”
+ " } "
+“{web?p?o绑定(?web as?s)}”+“并集”
+“{s?p?web绑定(?web as?o)}”+”过滤器(?p in(”
+dbpprop:可用,“+”dbpprop:公司
+dbpprop:inventor,“+”dbpedia owl:foundedBy
+dbpedia owl:子公司,“+”dbpprop:基础
+dbpprop:创始人,“+”dbpprop:行业
+“dbpprop:programmingLanguage”,+“dbpedia owl:successiver”);
}
公共静态void main(字符串[]args){
输出流;
打印流打印流;
试一试{
os=新文件输出流(“C:/Users/alex/Desktop/data.txt”);
printStream=新的printStream(os);
printStream.println(“am scris”);
for(int i=0;i
对于一个概念,在SPARQL中效果很好,但我需要调用大约50个。因此我需要知道如何通过编程实现。此外,如果您能帮助我选择谓词(无需过滤),那就太好了,因为我还需要允许大约30-40个谓词


非常感谢!希望你能帮助。

我想我们已经用你上一个问题中的
值解决了这个问题。
你可以使用
过滤器(?s in(dbpedia:Facebook,dbpedia:Google)而不是
值{dbpedia:Facebook dbpedia:Google}
。这对主题和属性非常有效。例如,如果你想获得谷歌和Facebook的英文摘要和标签,你可以使用如下查询:

select ?s ?p ?o where {
  ?s ?p ?o
  filter( ?s in (dbpedia:Google, dbpedia:Facebook) )
  filter( ?p in (rdfs:label, dbpedia-owl:abstract) )
  filter( !isLiteral(?o) || langMatches(lang(?o),"en") ) 
}

现在,如果您可以摆脱
联合
(如果您真的只是从某些主题中查找某些属性的值,那么您可能能够做到这一点),那么您实际上可以按照您希望的方式使用
块。(实际上,我认为在您的另一个问题中看到的问题行为是由于DBpedia错误造成的;我认为您应该能够同时使用
联合
)。也就是说,要为某些指定属性选择非文本和带有英语标记的文本,您可以执行以下操作:

select ?s ?p ?o where {
  values ?s { dbpedia:Google dbpedia:Facebook }
  values ?p { rdfs:label dbpedia-owl:abstract }
  ?s ?p ?o
  filter( !isLiteral(?o) || langMatches(lang(?o),"en") ) 
}

过滤器的问题是它们的工作速度较慢,而DBpedia会给我超时。我找到了一个更好的端点镜像DBpedia,但它仍然有它的局限性,我需要检查大约30-40-50个资源。@AlexDoro如果你只是查询某些属性的值,你应该能够摆脱
联合
并使用它
,对吗?是否仍然存在超时问题?