Разбор RDF (RDFXML) в ruby ​​с помощью rdf gem - работает не так, как ожидалось - PullRequest
2 голосов
/ 03 марта 2011

Я новичок в RDF, но следующее кажется довольно тривиальным;Я просто не получаю ожидаемых результатов.У меня есть файл RDF / XML следующим образом (он проверяется в валидаторе W3C):

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:ore="http://blah.com"
  xmlns:dms="http://blah.com"
>
  <ore:Aggregation rdf:about="http://blah.com/data/Manifest">
    <ore:aggregates>
      <ore:Aggregation rdf:about="http://blah.com/data/something">
        <rdf:type rdf:resource="http://blah.com/data/Sequence"/>
        <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
      </ore:Aggregation>
    </ore:aggregates>
    <ore:aggregates>
      <ore:Aggregation rdf:about="http://blah.com/data/somethingElse">
        <rdf:type rdf:resource="http://blah.com/data/Sequence"/>
        <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
      </ore:Aggregation>
    </ore:aggregates>
  </ore:Aggregation>
</rdf:RDF>

Я пытаюсь разобрать его с помощью гема rdf следующим образом, но он не печатает операторы / тройки:

RDF::RDFXML::Reader.open(image_collection_file) do |reader|
  puts reader.to_yaml
  puts reader.inspect
  reader.each_statement do |statement|
    statement.inspect! # nothing here
  end
end

Вывод файла reader.to_yaml:

--- !ruby/object:RDF::TriX::Reader 
implementation: !ruby/object:Module {}

input: !ruby/object:File {}

library: :nokogiri
options: 
  :validate: false
  :intern: true
  :canonicalize: false
  :prefixes: {}

xml: !ruby/object:Nokogiri::XML::Document 
  decorators: 
  errors: []

  node_cache: []

Вывод файла reader.inspect:

#<RDF::TriX::Reader:0x101832a50 @implementation=RDF::TriX::Reader::Nokogiri, @xml=#<Nokogiri::XML::Document:0x80c16cd8 name="document" children=[#<Nokogiri::XML::Element:0x80c14b7c name="RDF" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> children=[#<Nokogiri::XML::Text:0x80c14690 "\n  ">, #<Nokogiri::XML::Element:0x80c14640 name="Aggregation" namespace=#<Nokogiri::XML::Namespace:0x80c14528 prefix="ore" href="http://blah.com"> attributes=[#<Nokogiri::XML::Attr:0x80c144c4 name="about" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://blah.com/data/Manifest">] children=[#<Nokogiri::XML::Text:0x80c13bdc "\n    ">, #<Nokogiri::XML::Element:0x80c13b78 name="aggregates" namespace=#<Nokogiri::XML::Namespace:0x80c14528 prefix="ore" href="http://blah.com"> children=[#<Nokogiri::XML::Text:0x80c13628 "\n      ">, #<Nokogiri::XML::Element:0x80c135c4 name="Aggregation" namespace=#<Nokogiri::XML::Namespace:0x80c14528 prefix="ore" href="http://blah.com"> attributes=[#<Nokogiri::XML::Attr:0x80c13470 name="about" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://blah.com/data/something">] children=[#<Nokogiri::XML::Text:0x80c12b88 "\n        ">, #<Nokogiri::XML::Element:0x80c12b24 name="type" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> attributes=[#<Nokogiri::XML::Attr:0x80c129bc name="resource" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://blah.com/data/Sequence">]>, #<Nokogiri::XML::Text:0x80c12a5c "\n        ">, #<Nokogiri::XML::Element:0x80c12160 name="type" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> attributes=[#<Nokogiri::XML::Attr:0x80c11ff8 name="resource" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://www.w3.org/1999/02/22-rdf-syntax-ns#List">]>, #<Nokogiri::XML::Text:0x80c12084 "\n      ">]>, #<Nokogiri::XML::Text:0x80c1165c "\n    ">]>, #<Nokogiri::XML::Text:0x80c114e0 "\n    ">, #<Nokogiri::XML::Element:0x80c11490 name="aggregates" namespace=#<Nokogiri::XML::Namespace:0x80c14528 prefix="ore" href="http://blah.com"> children=[#<Nokogiri::XML::Text:0x80c10f2c "\n      ">, #<Nokogiri::XML::Element:0x80c10edc name="Aggregation" namespace=#<Nokogiri::XML::Namespace:0x80c14528 prefix="ore" href="http://blah.com"> attributes=[#<Nokogiri::XML::Attr:0x80c10d74 name="about" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://blah.com/data/somethingElse">] children=[#<Nokogiri::XML::Text:0x80c1048c "\n        ">, #<Nokogiri::XML::Element:0x80c1043c name="type" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> attributes=[#<Nokogiri::XML::Attr:0x80c102d4 name="resource" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://blah.com/data/Sequence">]>, #<Nokogiri::XML::Text:0x80c10374 "\n        ">, #<Nokogiri::XML::Element:0x80c0fa64 name="type" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> attributes=[#<Nokogiri::XML::Attr:0x80c0f910 name="resource" namespace=#<Nokogiri::XML::Namespace:0x80c14af0 prefix="rdf" href="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> value="http://www.w3.org/1999/02/22-rdf-syntax-ns#List">]>, #<Nokogiri::XML::Text:0x80c0f99c "\n      ">]>, #<Nokogiri::XML::Text:0x80c0ef74 "\n    ">]>, #<Nokogiri::XML::Text:0x80c0edf8 "\n  ">]>, #<Nokogiri::XML::Text:0x80c0ec7c "\n">]>]>, @options={:validate=>false, :intern=>true, :canonicalize=>false, :prefixes=>{}}, @library=:nokogiri, @input=#<File:data/test.xml>>

Это ожидаемое поведение?Statement.to_yaml пусто.Я просто хочу получить данные в RDF (этот пример упрощен).У кого-нибудь есть какие-либо комментарии / идеи / URL-адреса, которыми можно поделиться?

Приветствия, Ванесса

1 Ответ

1 голос
/ 03 марта 2011

Я не уверен, почему вы делаете вызов reader.to_yaml или какова его цель, поскольку я не программист на Ruby.

Но, глядя на ваш ключевой фрагмент кода, где вы пытаетесьчтобы вывести оператор, у вас, по-видимому, отсутствует ключевое слово puts.Документация для RDF::RDFXML на github содержит следующий пример:

RDF::RDFXML::Reader.open("./etc/doap.xml") do |reader|
  reader.each_statement do |statement|
    puts statement.inspect
  end
end

В вашем примере вы пропустили ключевое слово puts до statement.inspect - попробуйте добавить это обратнои посмотреть, если это работает

...