我有下面的sparql查询。我想用scala重写它,以便在sansaspark应用程序中进一步使用它。在查询中,我想消除以“bind”开头的所有行,并替换select part(?doc)中的所有变量lita:doi ?doi)只有where子句(?d?doi)中使用的变量。
SELECT
{
?doc lita:doi ?doi .
}
WHERE
{
?d a dm:Document .
?d prism:doi ?doi .
BIND(STRAFTER(str(?d), "#") as ?docid) .
BIND(URI(CONCAT(\"http://lit-search-api/node/doc#\", ?docid)) as ?doc) .
BIND(STRAFTER(str(?ds), "#") as ?secid) .
BIND(URI(CONCAT(\"http://lit-search-api/node/docsec#\", ?secid)) as ?docsec) .
}
最终查询如下所示
SELECT
{
?d ?doi .
}
WHERE
{
?d a dm:Document .
?d prism:doi ?doi .
}
我达到70%的解决方案与下面的代码-
def parser(query:String) = {
var Input_query=query
var Replaced_query=Input_query.replace("CONSTRUCT", "SELECT")
/*println("replaced string is "+Replaced_query)*/
val Bind_Index = Replaced_query.indexOf("BIND")
val No_Bind_Query = Replaced_query.substring(0,Bind_Index) + "}"
println("-----------------------------------------------------")
println(No_Bind_Query)
}
但是,我仍然被困在如何替换select{}部分(?doc)中的变量(或列名)上lita:doi ?doi )只使用where{}子句部分(?d?doi.)中使用的变量。
所以,现在我的问题是-
SELECT
{
?doc lita:doi ?doi .
}
WHERE
{
?d a dm:Document .
?d prism:doi ?doi .
}
但是,我希望它像-
SELECT
{
?d ?doi .
}
WHERE
{
?d a dm:Document .
?d prism:doi ?doi .
}
暂无答案!
目前还没有任何答案,快来回答吧!