2010-07-19 16 views
5

मैं बहुत तरह Clojure REPL में RDF clj-plaza के लिए Clojure पुस्तकालय लोड करने के लिए कोशिश कर रहा हूँ:Clojure: प्रोटोकॉल में विधि का कोई कार्यान्वयन

user=> (use 'plaza.rdf.core) 
nil 

मैं एक फ़ोल्डर नामित चौक है, और एक सबफ़ोल्डर नामित rdf और फ़ाइल core.clj उपलब्ध है और जहां तक ​​मैं कह सकता हूं, क्लोजर आरईपीएल लाइब्रेरी को लोड करता है जैसा इसे करना चाहिए।

अब, अगर मैं

user=> (alter-root-rdf-ns “http://www.example.org/”) 
"http://www.example.org" 

और ऐसा फिर से, जहाँ तक मैं बता सकता हूँ core.clj पुस्तकालय एकदम सही ढंग से रिपोर्ट कर रहा है। अब मैं

(def e (document-to-model “http://www.snee.com/rdf/elvisimp.rdf” :xml)) 
java.lang.IllegalArgumentException: No implementation of method: :load-stream of protocol: #’plaza.rdf.core/RDFModel found for class: nil (NO_SOURCE_FILE:2) 

मैं एक ही परिणाम प्राप्त अगर मैं f.ex. कोशिश करते हैं

(make-triples [["http://triple1" "http://triple2" "http://triple3"]]) 

स्रोत कोड (core.clj) में प्रोटोकॉल RDFModel

(defprotocol RDFModel 
    "Operations for the manipulation of RDF" 
    .... 
    (load-stream [model stream format] "Load triples from a stream") 
    .... 

और लोड धारा में एक विधि कहा जाता लोड धारा लागू किया गया है

(defn document-to-model 
    "Adds a set of triples read from a serialized document into a model" 
    ([stream format] 
    (load-stream *rdf-model* stream format))) 

मैं वास्तव में नहीं कर पा रहे है यहां गलत क्या है, यह इंगित करने के लिए, स्रोत कोड में यह सब कुछ जोड़ना प्रतीत होता है।

उत्तर

3

(defn document-to-model ...) स्निपेट load-stream लागू नहीं करता है; यह document-to-model नामक एक फ़ंक्शन को लागू करता है जो तर्कों के समूह के साथ load-stream पर कॉल करता है, जिसमें से पहला - *rdf-model* - RDFModel प्रोटोकॉल को विस्तारित किया गया है (या जो प्रोटोकॉल या संबंधित इंटरफ़ेस को सीधे लागू करता है) ।

clj-plazaplaza.rdf.implementations.jenaRDFModel के दो कार्यान्वयन, नामस्थान plaza.rdf.implementations.sesame में (स्रोत में (deftype SesameModel ..., line 218 देखें) और ((deftype JenaModel ..., line 167 देखें) प्रदान करता है। require- उन्हें लागू कार्यान्वयन में खींचने के लिए पर्याप्त होना चाहिए; तो आप उचित प्रकार के *rdf-model* एस के साथ उनका उपयोग कर सकते हैं।

+0

Marczyk लेकिन मैं "मिल विधि का कोई कार्यान्वयन।: प्रोटोकॉल का शाब्दिक है: # 'plaza.rdf.core/RDFNode कक्षा के लिए मिला: कीवर्ड। मुझे plaza.rdf.implementations.sesame और plaza.rdf.implementations.jena दोनों की आवश्यकता है। यदि आपको और आवश्यकता है तो मैं एक और प्रश्न शुरू करूंगा विवरण – aduric

+0

@aduric: ऐसा लगता है कि आप किसी ऐसे कीवर्ड का उपयोग कर रहे हैं जहां 'RDFNode' को लागू करने वाला एक प्रकार अपेक्षित है - संभावित रूप से' ऑल्टर-रूट-मॉडल 'या' मॉडल के साथ 'कॉल में? यदि आप' मुझे इस तरह की समस्याग्रस्त जगह नहीं मिलती है, मुझे लगता है कि अधिक जानकारी के साथ एक अलग सवाल उपयोगी होगा। (एनबी। मैंने थोड़ी देर में क्लज-प्लाजा को नहीं देखा है, इसलिए यदि यहां कुछ आम गोचा शामिल है, तो शायद इसे याद आओ।) –

1

एक और कदम के बाद (की आवश्यकता होती है ... मैं एक ऐसी ही समस्या है (init-जेना-ढांचा) या (init-तिल-ढांचा) के लिए है

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