Tuesday, 15 May 2012

random - sparql: randomly select one connection for each node -


मेरे पास निम्न डेटा है:

  & LT; नोड: 1 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 2 & gt; & LT; नोड: 1 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 3 & gt; & LT; नोड: 1 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 4 & gt; & LT; नोड: 2 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 10 & gt; & LT; नोड: 2 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 11 & gt; & LT; नोड: 2 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 12 & gt; & LT; नोड: 3 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 21 & gt; & LT; नोड: 3 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 13 & gt; & LT; नोड: 3 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 41 & gt; & LT; नोड: 3 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 100 & gt; & LT; नोड: 4 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 119 & gt; & LT; नोड: 4 & gt; & lt; कलश: connectTo & gt; & lt; नोड: 120 & gt;  

जैसा कि आप देख सकते हैं, प्रत्येक नोड के कई कनेक्शन हैं। मैं प्रत्येक नोड के लिए एक कनेक्शन का चयन करना चाहता हूं। मैं यह कैसे कर सकता हूँ? मैंने निम्नलिखित प्रश्नों की कोशिश की है, लेकिन कोई भी समस्या का समाधान नहीं करता है:

  1.   चुनें? CurrentNode? NextNode जहां {? CurrentNode? आदेश के लिए 1)  
  2.   अगली नोड BIND (RAND) AS? OrderKey) का चयन करें? CurrentNode नमूना (nextNode) के रूप में? NextNode1 जहां {? CurrentNode? पी? NextNode} ग्रुप द्वारा? CurrentNode  

    नोट: परिणाम प्रत्येक नोड का पहला कनेक्शन देता है लेकिन बेतरतीब ढंग से < / P>

  3.   चुनें? CurrentNode? NextNode (COUNT (? NextNode) AS? NoOfChoices) जहां {? CurrentNode? पी? NextNode BIND (रैंड () के रूप में? ऑर्डर की)} ग्रुप द्वारा? चालू नोड के आदेश द्वारा? ऑर्डर की ऑफसेट (रैंड () *? नो ओफ़क्वाइसेज) 1  

समूह के भीतर से एक व्यक्ति को रिटर्न देता है:

नमूना एक सेट फंक्शन है जो एक arbit देता है Multiset से rary मूल्य इसे पारित कर दिया। & Hellip; उदाहरण के लिए, दिए गए नमूना ({"a", "b", "c"}), "a", "b", और "c" सभी वैध वापसी मान हैं। नोट करें कि नमूना () किसी दिए गए इनपुट के लिए निर्धारक होने की आवश्यकता नहीं है, केवल प्रतिबंध यह है कि आउटपुट मान इनपुट मल्टीसेट में मौजूद होना चाहिए।

यह एक क्वेरी होगी:

  उपसर्ग नोड: & lt; नोड: & gt; उपसर्ग कलश: & lt; कलश: & gt; स्रोत का चयन करें? स्रोत (नमूना (? _ Target) के रूप में? लक्ष्य) जहां {? स्रोत आवरण: कनेक्ट टू? _ लक्ष्य} समूह <स्रोत  

  ------------------- | स्रोत | लक्ष्य | ===================== | नोड: 1 | नोड: 2 | | नोड: 2 | नोड: 10 | | नोड: 3 | नोड: 13 | | नोड: 4 | नोड: 119 | ---------------------  

बेशक, जैसा कि आप ध्यान दें, कार्यान्वयन सिर्फ एक मनमानी व्यक्ति को वापस करना होगा। यह आसानी से एकसमान प्रत्येक बार हो सकता है आप हो सकता है एक सबक्जरी में कुछ आदेश करना और नमूना से अलग परिणाम प्राप्त करने के लिए लक्ष्य के क्रम को यादृच्छिक बनाने की आशा रखता है, लेकिन इससे कोई नतीजा नहीं है कि परिणामों का क्रम एक subquery या तो संरक्षित है यह ऐसा दिखेगा:

  उपसर्ग नोड: & lt; नोड: & gt; उपसर्ग कलश: & lt; कलश: & gt; स्रोत ( 
< पी> यह अपाचे जेना के साथ काम करने लगता है दोहराया कॉल के परिणाम यहां दिए गए हैं:

  --------------------- | स्रोत | लक्ष्य | ===================== | नोड: 1 | नोड: 2 | | नोड: 2 | नोड: 11 | | नोड: 3 | नोड: 100 | | नोड: 4 | नोड: 120 | ---------------------  

  -------- ------------- | स्रोत | लक्ष्य | ===================== | नोड: 1 | नोड: 3 | | नोड: 2 | नोड: 11 | | नोड: 3 | नोड: 13 | | नोड: 4 | नोड: 120 | ---------------------  

  -------- ------------- | स्रोत | लक्ष्य | ===================== | नोड: 1 | नोड: 3 | | नोड: 2 | नोड: 10 | | नोड: 3 | नोड: 21 | | नोड: 4 | नोड: 119 | ---------------------  

  -------- ------------- | स्रोत | लक्ष्य | ===================== | नोड: 1 | नोड: 3 | | नोड: 2 | नोड: 10 | | नोड: 3 | नोड: 100 | | नोड: 4 | नोड: 119 | ---------------------  

No comments:

Post a Comment