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