SPARQL BIND子句在转发器数据源上导致异常

时间:2013-04-22 19:04:14

标签: data-binding datasource repeater sparql dotnetrdf

我尝试通过以下VB代码填充转发器控件的数据源:

    Dim queryString As SparqlParameterizedString = New SparqlParameterizedString()
    For Each nsPrefix In UrlManager.namespaces.Keys
        queryString.Namespaces.AddNamespace(nsPrefix, New Uri(UrlManager.namespaces(nsPrefix)))
    Next
    queryString.CommandText = commandText
    Dim parser As New SparqlQueryParser()
    Dim query = parser.ParseFromString(queryString)
    Dim r As SparqlResultSet = g.ExecuteQuery(query)
    If r.Count > 0 Then
        datasource = r
    Else
        datasource = Nothing
    End If

变量g是我的工作图

我使用相同的查询

SELECT DISTINCT ?context ?label { 
    ?s a my:Client . 
    ?s rdfs:label ?label . 
    BIND ( IF(EXISTS {?s rdf:type my:Subscriber}, 1, 0)  AS ?priority ) 
} ORDER BY DESC(?priority) ASC(?label)

每当我在一个简单的aspx页面中尝试这个vb代码时,它都可以正常工作,但如果在带有OnLoad的转发器VDS.RDF.Query.RdfQueryException: Cannot add a Set to the Null Multiset事件上失败

似乎错误是由BIND ( IF(EXISTS {?s rdf:type my:Subscriber}, 1, 0) AS ?priority )子句引起的:如果我删除它,我的转发器就会按预期运行!

知道异常发生的原因以及如何纠正它?

1 个答案:

答案 0 :(得分:0)

这可能与您的相关问题(Sparql issue on BIND clause

指出的错误有关

EXISTS用作另一个表达式的子节点时,有一个错误,如果您能够自己构建源代码,则可以检查该修复是否可以解决此问题。如果您仍然遇到问题,请在Issue Tracker

中提交新的错误