lib/rdf/literal.rb in rdf-0.0.5 vs lib/rdf/literal.rb in rdf-0.0.6

- old
+ new

@@ -1,8 +1,45 @@ module RDF ## # An RDF literal. + # + # @example Creating a plain literal + # value = RDF::Literal.new("Hello, world!") + # value.plain? #=> true + # + # @example Creating a language-tagged literal (1) + # value = RDF::Literal.new("Hello!", :language => :en) + # value.language? #=> true + # value.language #=> :en + # + # @example Creating a language-tagged literal (2) + # RDF::Literal.new("Wazup?", :language => :"en-US") + # RDF::Literal.new("Hej!", :language => :sv) + # RDF::Literal.new("¡Hola!", :language => :es) + # + # @example Creating an explicitly datatyped literal + # value = RDF::Literal.new("2009-12-31", :datatype => RDF::XSD.date) + # value.datatype? #=> true + # value.datatype #=> RDF::XSD.date + # + # @example Creating an implicitly datatyped literal + # value = RDF::Literal.new(Date.today) + # value.datatype? #=> true + # value.datatype #=> RDF::XSD.date + # + # @example Creating implicitly datatyped literals + # RDF::Literal.new(false).datatype #=> XSD.boolean + # RDF::Literal.new(true).datatype #=> XSD.boolean + # RDF::Literal.new(123).datatype #=> XSD.int + # RDF::Literal.new(9223372036854775807).datatype #=> XSD.long + # RDF::Literal.new(3.1415).datatype #=> XSD.double + # RDF::Literal.new(Time.now).datatype #=> XSD.dateTime + # RDF::Literal.new(Date.new(2010)).datatype #=> XSD.date + # RDF::Literal.new(DateTime.new(2010)).datatype #=> XSD.dateTime + # + # @see http://www.w3.org/TR/rdf-concepts/#section-Literals + # @see http://www.w3.org/TR/rdf-concepts/#section-Datatypes-intro class Literal < Value # @return [String] The normalized string representation of the value. attr_accessor :value # @return [Symbol] The language tag (optional). @@ -48,11 +85,19 @@ @value = @value.to_s end ## + # Returns `true`. + # # @return [Boolean] + def literal? + true + end + + ## + # @return [Boolean] def eql?(other) other.is_a?(Literal) && self == other end ## @@ -70,21 +115,41 @@ else false end end ## + # Returns `true` if this is a plain literal. + # # @return [Boolean] + # @see http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal def plain? language.nil? && datatype.nil? end ## + # Returns `true` if this is a language-tagged literal. + # # @return [Boolean] - def typed? + # @see http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal + def language? + !language.nil? + end + + ## + # Returns `true` if this is a datatyped literal. + # + # @return [Boolean] + # @see http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal + def datatype? !datatype.nil? end + alias_method :typed?, :datatype? + alias_method :datatyped?, :datatype? + ## + # Returns a string representation of this literal. + # # @return [String] def to_s quoted = value # FIXME output = "\"#{quoted}\"" output << "@#{language}" if language