Clojure: Никакая реализация метода в протоколе

Я пытаюсь загрузить библиотеку 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)))

Я, может действительно казаться, не точно определяю что не так здесь, в исходном коде все это, кажется, складывает.

5
задан bleakgadfly 19 July 2010 в 14:07
поделиться

1 ответ

Фрагмент (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 соответствующего типа.

3
ответ дан 15 December 2019 в 00:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: