2013-04-22 20 views
1

我嘗試通過以下VB代碼來填充Repeater控件的數據源:SPARQL BIND子句導致上轉發數據源例外

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事件機智h a VDS.RDF.Query.RdfQueryException: Cannot add a Set to the Null Multiset

看起來這個錯誤是由BIND (IF(EXISTS {?s rdf:type my:Subscriber}, 1, 0) AS ?priority)子句引起的:如果我刪除它,我的轉發器將按預期運行!

任何想法爲什麼會發生異常,以及如何糾正它?

回答

0

這可能與你的相關問題時指出了這個錯誤(Sparql issue on BIND clause

有在EXISTS一個bug,當它被用來作爲另一種表達的孩子,如果你可以從源代碼自己構建你將能夠檢查該修復是否可以解決此問題。如果你仍然遇到問題,請提交一個新的錯誤Issue Tracker

+0

我一定有點累:我沒有檢查我已經刪除了過濾器(unbound(?priority))..:P什麼似乎很奇怪是在我的aspx中,異常從未被提出,但組件總是失敗。我會檢查新建立的儘快。謝謝。 – Max 2013-04-23 06:03:09

+0

嗨,羅布,我測試了新的構建,一切都如預期(綁定和訂單),非常感謝您的反應。乾杯 – Max 2013-04-24 09:18:23