2011-03-02 3 views
2

Je suis nouveau à RDF, mais ce qui suit semble plutôt trivial; Je n'obtiens pas les résultats que j'attends. J'ai un fichier RDF/XML comme suit (il valide dans le validateur du W3C):Analyse de RDF (RDFXML) dans ruby ​​avec rdf gem - ne fonctionne pas comme prévu

<?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> 

je tente de l'analyser en utilisant la gemme rdf comme suit, mais ce n'est pas l'impression des déclarations/triplets:

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 

sortie de reader.to_yaml est:

--- !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: [] 

sortie de reader.inspect est:

#<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>> 

Est-ce le comportement attendu? Le statement.to_yaml est vide. Je veux juste voir les données dans le RDF (cet exemple est simplifié). Quelqu'un a-t-il des commentaires/idées/URL à partager?

Cheers, Vanessa

+0

Vous pouvez aussi vous posez votre question sur semanticoverflow.com car vous êtes plus susceptible de la voir vu par des personnes travaillant régulièrement avec le Web Sémantique et des bibliothèques comme RDF.rb – RobV

Répondre

1

Je ne sais pas pourquoi vous faites l'appel reader.to_yaml ou ce que son but est que je ne suis pas un programmeur Ruby. Mais en regardant votre clé de code où vous essayez de sortir l'instruction, il semble qu'il manque un mot-clé puts. Le documentation pour RDF::RDFXML sur GitHub a l'exemple suivant:

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

Dans votre exemple, vous avez manqué le mot-clé puts avant statement.inspect - essayez d'ajouter ceci en arrière et voir si cela fonctionne