2013-03-13 5 views
6

मैं यह जानने की कोशिश कर रहा हूं कि मॉडल में मेरा कोई विशिष्ट संसाधन था या नहीं। इसके लिए मैं उपयोग कर रहा हूं:जेना - कैसे पता चलेगा कि मॉडल में एक विशिष्ट संसाधन है या नहीं?

model.getResource("example") 

दस्तावेज़ की जांच करना, यह विधि बिल्कुल निर्माण संसाधन के रूप में व्यवहार करती है। फिर, अगर यह मॉडल में नहीं है, तो भी मुझे एक नया संसाधन मिल जाएगा।

मैं कैसे जांच सकता हूं कि मेरे पास संसाधन बनाने से संसाधन है जब यह नहीं है?

अग्रिम धन्यवाद!

+0

शायद यह लिंक [इंटरफ़ेस मॉडल] (http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html) उपयोगी है। –

+1

थोड़ा सा शोध करने के बाद मुझे अगली रास्ता मिल गई है। मुझे नहीं पता कि यह वास्तव में इसे प्राप्त करने का सबसे अच्छा तरीका है, लेकिन काम करता है: संसाधन से संसाधन = संसाधन Factory.createResource ("उदाहरण"); अगर (! Model.containsResource (toSearch)) ...; – jevora

+1

यदि इसे हल किया गया है तो एक उत्तर पोस्ट करें और इसे स्वीकार करें, इसलिए एक ही मुद्दे वाले अगले व्यक्ति को जवाब मिल जाएगा, आपको बैज भी मिल जाएगा! :) – Boaz

उत्तर

11

जेना में, Resource खुद वस्तुओं से नहीं में मॉडल हैं। मॉडल में केवल ट्रिपल - Statement ऑब्जेक्ट्स जिनमें विषय, अनुमान और वस्तु (आमतौर पर संक्षिप्त एसपीओ) शामिल है। एस, पी या ओ में से कोई एक संसाधन हो सकता है (यह देखते हुए कि Property जेना में और आरडीएफ मानक में Resource का उप-प्रकार है)। तो अगर आप अपने प्रश्न को परिष्कृत करने से करने के लिए "इस मॉडल इस संसाधन को शामिल करता है" की जरूरत है या तो:

  • करता मॉडल एम एक विषय के रूप संसाधन आर शामिल?

  • क्या मॉडल एम में किसी विषय, पूर्वानुमान या वस्तु के रूप में संसाधन आर होता है?

    Resource r = ... ; 
    Model m = ... ; 
    
    // does m contain r as a subject? 
    if (m.contains(r, null, (RDFNode) null)) { 
        .. 
    } 
    
    // does m contain r as s, p or o? 
    if (m.containsResource(r)) { 
        .. 
    } 
    

    संयोग से, अपने कोड नमूने में आप

    model.getResource("example") 
    

    यह एक Resource वस्तु दिया यूआरआई के लिए इसी दिखाए, लेकिन पक्ष नहीं है:

इस रूप में प्राप्त किया जा सकता मॉडल में ट्रिपल को प्रभावित करें। यही कारण है कि Model में getResource और createResource दोनों हैं - यह संभवतः थोड़ा अधिक कुशल है क्योंकि यह संसाधन वस्तुओं का पुन: उपयोग करता है, लेकिन अर्थशास्त्र अनिवार्य रूप से समान हैं। हालांकि, getResource या createResourceपर आपके द्वारा पारित तर्क एक यूआरआई होना चाहिए। यदि आप पूर्ण यूआरआई के स्थान पर "example" जैसे टोकन का उपयोग करना शुरू करते हैं, तो आप भविष्य से परेशानी उधार ले रहे हैं, इसलिए मैं इससे पहले कि आप इससे सहज महसूस कर सकें, इस बुरी आदत को रोकने की सलाह दूंगा!

+0

के रूप में चिह्नित करने के लिए 2 दिन का इंतजार करना होगा। यह निश्चित रूप से समाधान है।बुरी आदत के बारे में, चिंता न करें, मेरे विकास में मैं असली यूआरआई का उपयोग कर रहा हूं। मैंने अभी "उदाहरण" का उपयोग किया क्योंकि इससे इस बार कोई फर्क नहीं पड़ता। – jevora

+0

समाधान की जांच: आर, नल, शून्य के साथ फिट कई कई हैं। मैं इसके बजाय सुझाव दूंगा: model.contains (संसाधन, शून्य, (आरडीएफएनओडी) शून्य) – jevora

+0

अच्छी पकड़। हां, यह एक दर्द है कि 'युक्त') के लिए विधि हस्ताक्षर 'ऑब्जेक्ट' तर्क पर एक कलाकार की आवश्यकता के लिए उदार है, लेकिन यह एक डिजाइन निर्णय है जिसे जेना के शुरुआती इतिहास में बहुत समय पहले बनाया गया था और यह भी विघटनकारी होगा अब बदलने के लिए। –

2

थोड़ा सा शोध करने के बाद मुझे अगली रास्ता मिल गई है। मैं अगर यह वास्तव में सबसे अच्छा तरीका यह प्राप्त करने के लिए पता नहीं है, लेकिन काम करता है:

Resource toSearch = ResourceFactory.createResource("example"); 
if(!model.containsResource(toSearch))...; 
+0

यह एक सही उत्तर है, लेकिन मुझे इसे – jevora

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