lib/rdf/rdfa/reader.rb in rdf-rdfa-1.1.5 vs lib/rdf/rdfa/reader.rb in rdf-rdfa-1.1.6

- old
+ new

@@ -372,11 +372,11 @@ when 'application/rdf+xml' then require 'rdf/rdfxml' when 'text/ntriples' then require 'rdf/ntriples' when 'text/turtle' then require 'rdf/turtle' when 'application/ld+json' then require 'json/ld' end - rescue + rescue LoadError end if reader = RDF::Reader.for(:content_type => type) add_debug(el, "=> reader #{reader.to_sym}") reader.new(input, options).each(&block) @@ -721,10 +721,11 @@ resource rev role src typeof + value vocab ).each do |a| attrs[a.to_sym] = element.attributes[a].to_s.strip if element.attributes[a] end @@ -1100,11 +1101,11 @@ begin current_property_value = case when datatype && ![RDF.XMLLiteral, RDF.HTML].include?(datatype) # typed literal add_debug(element, "[Step 11] typed literal (#{datatype})") - RDF::Literal.new(attrs[:content] || attrs[:datetime] || element.inner_text.to_s, :datatype => datatype, :validate => validate?, :canonicalize => canonicalize?) + RDF::Literal.new(attrs[:content] || attrs[:datetime] || attrs[:value] || element.inner_text.to_s, :datatype => datatype, :validate => validate?, :canonicalize => canonicalize?) when @version == :"rdfa1.1" case when datatype == RDF.XMLLiteral # XML Literal add_debug(element) {"[Step 11] XML Literal: #{element.inner_html}"} @@ -1140,15 +1141,25 @@ :validate => validate?, :canonicalize => canonicalize?) rescue ArgumentError => e add_error(element, e.message) end + when attrs[:value] + # Lexically scan value and assign appropriate type, otherwise, leave untyped + # See https://www.w3.org/2001/sw/wiki/RDFa_1.1._Errata#Using_.3Cdata.3E.2C_.3Cinput.3E_and_.3Cli.3E_along_with_.40value + add_debug(element, "[Step 11] value literal (#{attrs[:value]})") + v = attrs[:value].to_s + # Figure it out by parsing + dt_lit = %w(Integer Float Double).map {|t| RDF::Literal.const_get(t)}.detect do |dt| + v.match(dt::GRAMMAR) + end || RDF::Literal + dt_lit.new(v) when attrs[:datatype] # otherwise, as a plain literal if @datatype is present but has an empty value. # The actual literal is either the value of @content (if present) or a string created by # concatenating the value of all descendant text nodes, of the current element in turn. # typed literal - add_debug(element, "[Step 11] plain plain (#{datatype})") + add_debug(element, "[Step 11] datatyped literal (#{datatype})") RDF::Literal.new(attrs[:content] || element.inner_text.to_s, :language => language, :validate => validate?, :canonicalize => canonicalize?) when attrs[:content] # plain literal add_debug(element, "[Step 11] plain literal (content)") RDF::Literal.new(attrs[:content], :language => language, :validate => validate?, :canonicalize => canonicalize?)