2010-07-19 11 views
5

protokolde yöntemin hiçbir uygulama: Bir klasör adında plaza varClojure: Öyle gibi Clojure Repl içinde RDF <a href="http://github.com/antoniogarrote/clj-plaza/" rel="nofollow noreferrer">clj-plaza</a> için Clojure kütüphanesini yüklemeye çalışıyorum

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

ve bir alt isimli rdf ve dosya core.clj mevcut ve söyleyebileceğim kadarıyla, Clojure REPL olması gerektiği gibi kütüphaneyi yükler. Ben

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

Ve yaparsanız

Şimdi yine bildiğim kadarıyla söyleyebilirim core.clj kütüphanesi olması gerektiği gibi bildiriyor. Şimdi ben f.ex. çalışırsanız

(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) 

Ben aynı sonucu alırım Kaynak kodu (core.clj) yılında
(make-triples [["http://triple1" "http://triple2" "http://triple3"]]) 

Gerçekten görünmüyor

(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))) 

uygulanmaktadır protokol RDFModel

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

Ve yük akışında bir yöntemi denir yük akışı vardır Burada neyin yanlış olduğunu saptamak için, kaynak kodunda her şey eklenmiş gibi görünüyor.

cevap

3

(defn document-to-model ...) snippet, load-stream;(load-stream) argümanlarıyla çağıran ve *rdf-model* - *rdf-model* protokolünün genişletildiği (veya protokolü ya da ilgili arabirimi doğrudan uygulayan) bir işlevi olması gereken document-to-model işlevini uygular. .

clj-plaza iki ad plaza.rdf.implementations.sesame içinde RDFModel uygulamalarını, (kaynak (deftype SesameModel ..., line 218) ve plaza.rdf.implementations.jena ((deftype JenaModel ..., line 167 bakınız) içerir. require -gerçekleştirilmesi, söz konusu uygulamaların çekilmesi için yeterli olmalıdır; daha sonra uygun tipte *rdf-model* s ile kullanabilirsiniz.

+0

MARCZYK ama "yönteminin hiçbir uygulanmasını olsun.: protokoldür: # 'plaza.rdf.core/RDFNode sınıf için bulundu: Anahtar kelime. Hem plaza.rdf.implementations.sesame hem de plaza.rdf.implementations.jena'yı istedim. Daha fazlasına ihtiyacınız varsa başka bir soru başlatacağım. – aduric

+0

@aduric: Muhtemelen bir "RDFNode" türünün gerçekleştirildiği bir yerde - muhtemelen "alter-root-model" veya "with-model" çağrısında bir anahtar kelime kullanıyorsunuz gibi görünüyor? sorunlu bir noktaya rastladım, sanırım daha fazla ayrıntıya sahip ayrı bir soru yararlı olurdu. (NB. Ben bir süre içinde clj-plazaya bakmadım, bu yüzden burada birtakım ortaklıklar var ise kaçırmak.) –

1

bir adım daha sonra (gerektirmeyen ... Ben benzer bir sorun var (init-jena-çerçeve) veya (init-susam-çerçeve) için