2015-02-10 9 views
5

मैं ज्यादातर डीबगिंग उद्देश्यों के लिए क्वेरी पर काम करते समय SPARQL SELECT का उपयोग करता हूं लेकिन अंत में मैं इसे अंतिम परिणाम का उपयोग एक CONSTRUCT तरीके से करना चाहता हूं; क्योंकि मैं एक ग्राफ के साथ काम करना चाहता हूं और कुंजी/मूल्य क्वेरी परिणाम नहीं चाहता हूं।CONSTRUQL में SPARQL फ़ंक्शंस/जहां

जो मुझे अभी तक नहीं मिला है (और खोज इंजन/दस्तावेज़ों के साथ नहीं लग रहा है) यह है कि अगर मैं इस तरह के कार्यों का भी उपयोग कर सकता हूं। एक उदाहरण के रूप में, मैं खिताब है, जो मैं बाद में एक Lucene सूचकांक के निर्माण सादा पाठ खोज गुणवत्ता को बढ़ाने के लिए उपयोग मैं एक "superstring" में श्रेणीबद्ध करने के लिए एक संपत्ति पथ का उपयोग करें:

PREFIX dc: <http://purl.org/dc/elements/1.1/>  

SELECT (group_concat(?title ; separator = " ") AS ?fancytitle) WHERE { 
    GRAPH ?graph { 
    <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> dc:relation+ ?relation . 
    ?relation dc:title ?title . 
    } 
} 

अब मैं करना चाहते हैं एक ही ?fancytitle एक नया ट्रिपल के रूप में की तरह

<http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> <fancytitle> ?fancytitle . 

तो मैं इसे सीधे एक नया ग्राफ में स्टोर कर सकते हैं। क्या यह संभव है? मैंने कुछ प्रश्नों के साथ खेला लेकिन SPARQL प्रोसेसर द्वारा इसे स्वीकार करने के लिए प्रबंधित नहीं किया जा सका। एफवाईआई मैं फूसेकी का उपयोग कर रहा हूँ।

आपको कम से इसे बाहर की कोशिश कर सकते मेरी SPARQL Endpoint

उत्तर

3
हम यह काम करने के लिए, UNION और GROUP BY आवश्यक हैं मिल गया मेरे सहकर्मी की मदद से

पर। एक बहुत

CONSTRUCT 
{ 
    ?archresource skos:hiddenLabel ?supertitle 
} 
WHERE 
{ 
    SELECT ?archresource (group_concat(?title ; separator = ", ") AS ?supertitle) WHERE { 
    GRAPH ?graph { 
     { 
     SELECT ?title ?archresource WHERE { 
      GRAPH ?graph { 
      { 
       ?archresource a locah:ArchivalResource ; 
       dc:title ?title . 
      } UNION 
      { 
       ?archresource dc:relation+ ?relation . 
       ?relation dc:title ?title . 
      } 
      } 
     } 
     } 
    } 
    } GROUP BY ?archresource 
} 
9

हाँ यह संभव है

आप एक CONSTRUCT टेम्पलेट में सीधे भाव उपयोग नहीं कर सकते, लेकिन आप WHERE खंड में या तो एक SELECT अभिव्यक्ति के माध्यम से चर असाइन कर सकते हैं उप-क्वेरी में या BIND का उपयोग करना।

आपके मामले में GROUP_CONCAT एक कुल है यह केवल SELECT अभिव्यक्ति हो सकता है, इसलिए आपको बस अपना संपूर्ण SELECT उप-क्वेरी के रूप में रखना होगा।

PREFIX dc: <http://purl.org/dc/elements/1.1/>  

CONSTRUCT 
{ 
    <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> <http://fancyTitle> ?fancytitle 
} 
WHERE 
{ 
    SELECT (group_concat(?title ; separator = " ") AS ?fancytitle) WHERE { 
    GRAPH ?graph { 
     <http://data.staatsarchiv-bs.ch/id/archivalresource/CH-000027-1/pa-633c-a-312-fasc-163> dc:relation+ ?relation . 
     ?relation dc:title ?title . 
    } 
    } 
} 

ऊपर काम करता है ठीक अपने अंतिम बिंदु

+0

जबकि मैं पहले से ही अन्य स्थितियों में उप प्रश्नों का उपयोग कर रहा था, मुझे लगता है कि नहीं सोचा था, धन्यवाद: इस क्वेरी स्ट्रिंग एक साथ रखता है रेखांकन में सभी locah:ArchivalResource के लिए! गैर-समग्र कार्यों के लिए 'BIND' कैसा दिखता है? –

+0

अनुवर्ती प्रश्न, क्या मैं अभी भी इस क्वेरी में एक चर के साथ संसाधन के यूआरआई को प्रतिस्थापित कर सकता हूं? 'संसाधन की तरह एक locah: ArchivalResource; '- मुझे इस तरह शून्य परिणाम मिलते हैं। मैं इसे सभी ArchivalResource –

+0

पर निष्पादित करना चाहता हूं पूरी क्वेरी के लिए अपना स्वयं का उत्तर देखें, धन्यवाद रॉब! –

संबंधित मुद्दे