lib/sxp/reader/sparql.rb in sxp-0.0.7 vs lib/sxp/reader/sparql.rb in sxp-0.0.8

- old
+ new

@@ -6,14 +6,16 @@ # # Requires [RDF.rb](http://rdf.rubyforge.org/). # # @see http://openjena.org/wiki/SSE class SPARQL < Extended - BNODE_ID = /^_:([A-Za-z][A-Za-z0-9]*)/.freeze # FIXME - BNODE_NEW = /^_:$/.freeze - VARIABLE = /^\?([A-Za-z][A-Za-z0-9]*)/.freeze # FIXME - URIREF = /^<([^>]+)>/.freeze + BNODE_ID = /^_:([A-Za-z][A-Za-z0-9]*)/ # FIXME + BNODE_NEW = /^_:$/ + VAR_ID = /^\?([A-Za-z][A-Za-z0-9]*)/ # FIXME + VAR_GEN = /^\?\?([0-9]+)/ + VAR_NEW = '??' + URIREF = /^<([^>]+)>/ ## # @return [Object] def read_token case peek_char @@ -42,11 +44,11 @@ ## # @return [RDF::URI] def read_rdf_uri buffer = String.new skip_char # '<' - return :< if (char = peek_char).nil? || char !~ ATOM # FIXME: nasty special case for '< symbol + return :< if (char = peek_char).nil? || char.chr !~ ATOM # FIXME: nasty special case for '< symbol until peek_char == ?> buffer << read_char # TODO: unescaping end skip_char # '>' RDF::URI(buffer) @@ -59,11 +61,13 @@ when '.' then buffer.to_sym when DECIMAL then RDF::Literal(Float(buffer)) when INTEGER then RDF::Literal(Integer(buffer)) when BNODE_ID then RDF::Node($1) when BNODE_NEW then RDF::Node.new - when VARIABLE then RDF::Query::Variable.new($1) + when VAR_ID then RDF::Query::Variable.new($1) + when VAR_GEN then RDF::Query::Variable.new("?#{$1}") # FIXME? + when VAR_NEW then RDF::Query::Variable.new else buffer.to_sym end end ## @@ -76,7 +80,7 @@ when /#/ then skip_line else break end end end - end # class SPARQL -end; end # class SXP::Reader + end # SPARQL +end; end # SXP::Reader