我试图整理一些代码,我目前有一个使它更通用一点。目前,我有一个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");