ruby-rdf / rdf-rdfxml

Ruby RDF/XML reader/writer for RDF.rb.
http://rubygems.org/gems/rdf-rdfxml
The Unlicense
17 stars 7 forks source link

`ensure_curie': undefined method `split' for :license:Symbol #31

Closed rhdunn closed 9 years ago

rhdunn commented 9 years ago

Summary

I am getting the error:

/var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:340:in `ensure_curie': undefined method `split' for :license:Symbol (NoMethodError)

in the line:

340    if get_curie(resource) == resource.to_s || get_curie(resource).split(':', 2).last =~ /[\.#]/

with the HTML code:

<a rel="license" href="...">...</a>

This appears to be because get_curie(resource) is returning XHV.license instead of XHV.license.to_s. I suspect this issue triggered after updating ruby from 1.9.1 to 2.1.

Details

I am getting the error:

/var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:340:in `ensure_curie': undefined method `split' for :license:Symbol (NoMethodError)
from /var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:334:in `preprocess_statement'
from /var/lib/gems/2.1.0/gems/rdf-rdfa-1.1.4/lib/rdf/rdfa/writer.rb:392:in `block in preprocess'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:341:in `call'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:341:in `block (4 levels) in query_pattern'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:339:in `each'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:339:in `block (3 levels) in query_pattern'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:336:in `each'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:336:in `block (2 levels) in query_pattern'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:333:in `each'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:333:in `block in query_pattern'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:330:in `each'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/repository.rb:330:in `query_pattern'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/mixin/queryable.rb:85:in `query'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/model/graph.rb:248:in `each'
from /var/lib/gems/2.1.0/gems/rdf-rdfa-1.1.4/lib/rdf/rdfa/writer.rb:392:in `preprocess'
from /var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:314:in `preprocess'
from /var/lib/gems/2.1.0/gems/rdf-rdfa-1.1.4/lib/rdf/rdfa/writer.rb:172:in `write_epilogue'
from /var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:98:in `write_epilogue'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/writer.rb:226:in `initialize'
from /var/lib/gems/2.1.0/gems/rdf-rdfa-1.1.4/lib/rdf/rdfa/writer.rb:106:in `initialize'
from /var/lib/gems/2.1.0/gems/rdf-rdfxml-1.1.1/lib/rdf/rdfxml/writer.rb:82:in `initialize'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/writer.rb:171:in `new'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/writer.rb:171:in `block in open'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/writer.rb:167:in `open'
from /var/lib/gems/2.1.0/gems/rdf-1.1.6/lib/rdf/writer.rb:167:in `open'
from .../reecedunn.co.uk/_plugins/rdf_generator.rb:42:in `write'

in the code:

  # Load the RDF data from the RDFa file.
  @graph = RDF::Graph.load(@src, :prefixes => @prefixes, :base_uri => @base_uri)

  # Remove WAI-ARIA roles from the RDF graph.
  @graph.delete([nil, RDF::XHV.role, RDF::XHV.banner])
  @graph.delete([nil, RDF::XHV.role, RDF::XHV.main])
  @graph.delete([nil, RDF::XHV.role, RDF::XHV.navigation])

  RDF::Writer.open(dest_path, :prefixes => @metadata.prefixes, :max_depth => 1) do |writer|
    @metadata.graph.each_statement do |statement|
      writer << statement
    end
  end

where @metadata.prefixes comes from the following YAML data:

namespaces: {
  dc:   'http://purl.org/dc/elements/1.1/',
  dct:  'http://purl.org/dc/terms/',
  doap: 'http://usefulinc.com/ns/doap#',
  foaf: 'http://xmlns.com/foaf/0.1/',
  rdf:  'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
  rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
  s:    'http://schema.org/',
  v:    'http://rdf.data-vocabulary.org/#',
  xsd:  'http://www.w3.org/2001/XMLSchema#' }

This was working before I upgraded (not sure if the issue is triggered by upgrading ruby or rdf-rdfxml).

The issue is triggered with the following HTML:

<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/" style="border: 0;"><img alt="CC-BY-SA 3.0" title="Creative Commons Attribution-ShareAlike 3.0 License" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png"/></a>

Printing statement.predicate for this outputs http://www.w3.org/1999/xhtml/vocab#license as expected. Also, changing this to rel="s:license" does not trigger the error.

gkellogg commented 9 years ago

Released in 1.1.2.