在sansa应用程序中使用前解析/重写sparql查询

ckx4rj1h  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(278)

我有下面的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 .
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题