1

我尝试通过以下 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 )子句引起的:如果我删除它,我的转发器会按预期运行!

知道为什么会发生异常以及如何纠正它吗?

4

1 回答 1

0

这可能与您的相关问题(BIND 子句上的 Sparql 问题)确定的错误有关

当它被用作另一个表达式的子表达式时存在一个错误EXISTS,如果您能够自己从源代码构建,您将能够检查该修复是否解决了这个问题。如果您仍然遇到问题,请在问题跟踪器中提交新错误

于 2013-04-22T23:26:02.127 回答