2015-01-19 3 views
1

Я пытаюсь ввести в заблуждение график, соответствующий документации для рубинового RDF-драгоценного камня. (http://www.rubydoc.info/gems/rdf/RDF/Graph)Ошибка инициализации Graph.new с использованием ruby ​​rdf.rb gem

документации приводится следующий пример:

graph = Graph.new("http://rubygems.org/") 

Я пытался запустить эту точную команду, и я получаю ошибку (я не очень понимаю). (Обратите внимание, что я успешно загрузил график при использовании файла с моей локальной машины, поэтому я думаю, что есть некоторые проблемы с попыткой загрузить график из http-url.)

Я запускаю команду через интерфейс командной строки Gem Thor. Ниже находится исполняемый файл, а затем возвращается ошибка.

файл lbp

#!/usr/bin/env ruby 

require 'rdf' 
require 'rdf/rdfxml' 
require 'rdf/ntriples' 
require 'thor' 
require 'pry' 

class LbpCli < Thor 
    desc "hello", "say hello to NAME" 
    def hello(name) 
     puts "Hello #{name}!" 
    end 

    desc "init", "create projectifles dirs in current working directory" 
    def init(dir="projectfiles") 
     directories = ["#{dir}/Conf", "#{dir}/Textfiles", "#{dir}/citationlists"] 
     FileUtils.mkpath(directories) 
    end 

    desc "projecfile", "make projetfile from SCTA" 
    def projectfile 
     graph = RDF::Graph.new("http://rubygems.org") 
    end 
end 

LbpCli.start(ARGV) 

projectfile является соответствующий метод. Ниже приведен запуск команды и возвращенная ошибка.

файл lbp прогон методом projectfile

$ ./lbp projectfile 
/Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:126:in `initialize': Can't apply context unless initialized with `data` supporting contexts (ArgumentError) 
    from ./lbp:28:in `new' 
    from ./lbp:28:in `projectfile' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' 
    from ./lbp:45:in `<main>' 

EDIT

, если я немного изменить конструкцию, явно создавая resource так:

resource = RDF::Resource(RDF::URI.new("http://rdf.rubyforge.org/")) 
graph = RDF::Graph.load(resource) 

я получаю новую ошибку:

bin $ ./lbp projectfile 
/Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/util/file.rb:66:in `open_file': uninitialized constant RDF::Util::File::OpenSSL (NameError) 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/reader.rb:136:in `open' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/mixin/mutable.rb:43:in `load' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:81:in `block in load' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:131:in `call' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:131:in `initialize' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:80:in `new' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/rdf-1.1.7/lib/rdf/model/graph.rb:80:in `load' 
    from ./lbp:29:in `projectfile' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' 
    from /Users/JCWitt/.rvm/gems/[email protected]/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' 
    from ./lbp:47:in `<main>' 

ответ

1

Documentation provides the following example:

graph = Graph.new("http://rubygems.org/") 

В самом деле, это является устаревшим, и документация должна быть обновлена. Правильный способ загрузить график:

graph = Graph.load("http://rubygems.org/") 

Хотя, это не будет загружать ни одной троек. Вы не могли бы попробовать это:

graph = RDF::Graph.load("http://ruby-rdf.github.io/rdf/etc/doap.nt") 

if I change the construction slightly by explicitly creating resource like so:

resource = RDF::Resource(RDF::URI.new("http://rdf.rubyforge.org/")) 
graph = RDF::Graph.load(resource) 

Да, не утраивает их либо, и RDF::Resource(RDF::URI.new(...)) является излишним, как RDF::URI подкласс RDF::Resource. Нагрузка, которую я показал ранее, должна выполнять эту работу.

Документы в README (которые вы можете найти здесь: http://www.rubydoc.info/github/ruby-rdf/rdf, а также другая документация) немного понятнее. Я пропустил примеры, чтобы убедиться, что они работали с версией 1.1, но, очевидно, пропустили это. Я перейду и повторю проверку примеров и повторно создаю документы.

Смежные вопросы