代码之家  ›  专栏  ›  技术社区  ›  null

将SparQL查询转换为QueryBuilder对象,以便使用准备好的语句

  •  0
  • null  · 技术社区  · 7 年前

    我试图整理一些代码,我目前有一个使它更通用一点。目前,我有一个StringBuilder可以工作,但是我想把它转换成一个SelectBuilder对象,这样我就可以从其他函数传入不同的主题等,而不必再编写相同的代码。

    这是我目前正在做的工作,理想情况下,我希望能够传入名称和变量集,以及生日(也许我可以找出生地代替)

    下面的版本可以工作,因为它返回所有的生日,但它没有返回我想要的单一生日,即TonyBlair的生日。

    我意识到,也许问题还不清楚——我怎样才能把“托尼布莱尔”的价值传递出去,这样?查询中的“name”值将替换为此字符串并返回所需的单个结果?我打算把主语和/或谓语都传进去。

    String name = "Tony_Blair";
    
            SelectBuilder sbi = new SelectBuilder()
                    .addPrefix("dbr", "http://dbpedia.org/resource/")
                    .addPrefix("dbp", "http://dbpedia.org/property/")
                    .addPrefix("dbo", "http://dbpedia.org/ontology/")
                    //.addVar( "*" ) //the name?
                    //.addWhere( "dbr:Tony_Blair",  "dbp:birthDate", "?dob" );
                    //.addWhere( "dbr:"+name,  "dbp:birthDate", "?dob" );
                    .addWhere( "?name",  "dbp:birthDate", "?dob" );
    
            sbi.setVar(Var.alloc("?name"), NodeFactory.createLiteral("dbr:Tony_Blair"));
            Query q = sbi.build() ;
    

    这是旧版本

    StringBuilder sb = new StringBuilder();
            sb.append("PREFIX dbr: <http://dbpedia.org/resource/> \n");
            sb.append("PREFIX dbp: <http://dbpedia.org/property/> \n");
            sb.append("PREFIX dbo: <http://dbpedia.org/ontology/> \n");
            sb.append("SELECT (STR(?dob) as ?date_of_birth) \n");
            sb.append("WHERE {dbr:Tony_Blair dbp:birthDate ?dob} \n");
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   kidney    7 年前

    将变量名传递给 Var.alloc 没有'?',它将自动添加。而且,正如@AKSW在他的评论中所说 dbr:Tony_Blair

    sbi.setVar(Var.alloc("name"), NodeFactory.createURI("dbr:Tony_Blair"));