2013-08-23 48 views
3

CONSTRUCT查詢中使用LIMIT發生了一些奇怪的事情。我期望分別接收1或2個解決方案,分別爲LIMIT 1LIMIT 2,即一個或兩個圖形,但是我總是會得到兩個圖形,可以是11個或12個三元組。使用CONSTRUCT使用LIMIT的意外結果

CONSTRUCT { 
    ex:sceneResource skos:related ?newSceneSubject. 
    ?newSceneSubject a lcx:Scene ; 
        dcterms:subject ?type ; 
        lcx:hasTitle ?title ; 
        lcx:describedBy ?thumbNail ; 
        lcx:motto ?motto ; 
        lcx:freebaseID ?freebaseID 
} 
WHERE { 
    { ?newSceneSubject a ex:interestType1 } 
    UNION 
    { ?newSceneSubject a ex:interestType2 } 
    ?newSceneSubject lcx:hasTitle ?title ; 
        a ?type . 
        lcx:freebaseID ?freebaseID . 
    OPTIONAL { ?newSceneSubject lcx:motto ?motto } 
    OPTIONAL { ?newSceneSubject lcx:describedBy ?thumbNail } 
} 
LIMIT 2 

有我誤解LIMITCONSTRUCT,或者是有耶拿API中的錯誤?

回答

5

你的問題有點不清楚,你的期望是什麼,你究竟得到了什麼,但我會盡力回答。

LIMIT適用於查詢的WHERE部,在specification存在使用LIMITCONSTRUCT的一個例子,它指出以下:

從所述構建模板輸出圖形是從剛剛形成2 從圖形圖案中的解決方案的匹配

即它需要至多兩排從WHERE子句並將它們提供給CONSTRUCT模板。

由於模板可能會生成潛在的很多三元組,因此結果的實際最大數量是限制乘以模板中三元模式的數量。由於在模板各個圖案可能會產生無效的三元組(並且這些每specification丟棄)你得到的三元組的實際數目可以是下:

如果任何這樣的實例化將產生含有未結合 變量或三重非法RDF構建,如主題或 謂語位置上的文字,那麼三重不包含在輸出RDF 圖

因此,從你描述的內容和規範耶拿的行爲是完全正確的。

+0

感謝羅布。我會澄清我的關切。查詢 CONSTRUCT {<「+ m_sceneResource +」> skos:related?newSceneSubject。 } WHERE {{?newSceneSubject rdf:type <「+ interestType1 +」>} UNION {?newSceneSubject rdf:type <「+ interestType2 +」>} UNION {?newSceneSubject rdf:type <「+ interestType3 +」>} 。 \t \t \t \t \t 「newSceneSubject的rdf:??類型類型 } LIMIT 3」 返回一個,單個三重圖形,並用LIMIT 30個返回4相同的查詢,單個三重圖表。即WHERE部分至少有4個解決方案,但是當我放置LIMIT 3時只返回一個解決方案。 – user2498899

+0

@ user2498899這是完全不可讀的,請使用編輯按鈕來編輯您的問題並添加額外的細節。此外,我不明白你的意思是通過返回多個圖表,CONSTRUCT返回一個RDF圖表,所以你應該真的解釋你的問題的一部分 - 最好是顯示預期與實際結果 – RobV