lib/active_rdf/objectmanager/literal.rb in activerdf-1.3 vs lib/active_rdf/objectmanager/literal.rb in activerdf-1.3.1

- old
+ new

@@ -3,36 +3,45 @@ # Represents an RDF literal, optionally datatyped. # TODO: language tags class Literal Namespace.register :xsd, 'http://www.w3.org/2001/XMLSchema#' - attr_reader :value, :type - @value, @type = nil, nil + attr_reader :value, :type, :language + @value, @type, @language = nil, nil, nil # Constructs literal with given datatype. If no datatype is given, automatic # conversion from Ruby to XSD datatype is tried. - def initialize(value, type=nil) + def initialize(value, type_or_language=nil) @value = value - @type = type - - if @type.nil? + + if type_or_language.nil? + # deduce type from the given value @type = case value - when String - XSD::string - when Date, Time, DateTime - XSD::date - when TrueClass, FalseClass - XSD::boolean - when Fixnum - XSD::integer - end - end + when String + XSD::string + when Date, Time, DateTime + XSD::date + when TrueClass, FalseClass + XSD::boolean + when Fixnum + XSD::integer + end + elsif type_or_language[0..0] == "@" + # a language tag has been given + @language = type_or_language[1..type_or_language.length] + else + # the type_or_language was not empty and did not start with a @ so it must be a data type + @type = type_or_language + end + end # returns string serialisation of literal, e.g. "test"^^xsd:string def to_s if type "\"#{value}\"^^#{type.to_s}" + elsif language + "\"#{value}\"@#{language}" else "\"value\"" end end end