Я пытаюсь загрузить библиотеку Clojure для clj-площади RDF в Clojure REPL как так:
user=> (use 'plaza.rdf.core)
nil
У меня есть папка, названная площадью и подпапкой, названной rdf и файлом core.clj доступный и насколько я могу сказать, Clojure REPL загружает библиотеку, как это должно.
Теперь, если я делаю
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)))
Я, может действительно казаться, не точно определяю что не так здесь, в исходном коде все это, кажется, складывает.
Фрагмент (defn document-to-model ...)
не реализует поток загрузки
; он реализует функцию под названием документ-модель
, которая вызывает load-stream
с набором аргументов, первый из которых - * rdf-model *
- должен иметь тип, до которого был расширен протокол RDFModel
(или который напрямую реализует протокол или соответствующий интерфейс).
clj-plaza
предоставляет две реализации RDFModel
в пространствах имен plaza.rdf.implementations.sesame
(см. (deftype SesameModel ...
], строка 218 в источнике) и plaza.rdf.implementations.jena
(см. (deftype JenaModel ...
, строка 167 ]). require
- их должно быть достаточно для включения указанных реализаций; тогда вы можете использовать их с * rdf-model *
s соответствующего типа.