Class: RDF::Literal::Time
- Inherits:
-
Temporal
- Object
- RDF::Literal
- Temporal
- RDF::Literal::Time
- Defined in:
- lib/rdf/model/literal/time.rb
Overview
A time literal.
The lexical representation for time is the left truncated lexical representation for ‘xsd:dateTime`: “hh:mm:ss.sss” with an optional following time zone indicator.
Constant Summary collapse
- DATATYPE =
RDF::URI("http://www.w3.org/2001/XMLSchema#time")
- GRAMMAR =
%r(\A((?:#{HOURFRAG}:#{MINUTEFRAG}:#{SECONDFRAG})|#{EODFRAG})(#{TZFRAG})?\z).freeze
- FORMAT =
'%H:%M:%S.%L'.freeze
Constants inherited from Temporal
RDF::Literal::Temporal::DAYFRAG, RDF::Literal::Temporal::EODFRAG, RDF::Literal::Temporal::HOURFRAG, RDF::Literal::Temporal::MINUTEFRAG, RDF::Literal::Temporal::MONTHFRAG, RDF::Literal::Temporal::SECONDFRAG, RDF::Literal::Temporal::TZFRAG, RDF::Literal::Temporal::YEARFRAG, RDF::Literal::Temporal::ZONE_GRAMMAR
Constants inherited from RDF::Literal
FALSE, TRUE, XSD_STRING, ZERO
Instance Attribute Summary
Attributes inherited from RDF::Literal
#datatype, #direction, #language
Instance Method Summary collapse
-
#humanize(lang = :en) ⇒ String
Returns a human-readable value for the literal.
-
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ Time
constructor
Internally, a ‘DateTime` is represented using a native `::DateTime`.
Methods inherited from Temporal
#+, #-, #<=>, #==, #adjust_to_timezone, #adjust_to_timezone!, #canonicalize!, #day, #hours, #milliseconds?, #minutes, #month, #seconds, #timezone, #timezone?, #to_s, #tz, #valid?, #year
Methods inherited from RDF::Literal
#<=>, #==, #canonicalize!, #compatible?, #comperable_datatype2?, #comperable_datatype?, #datatype?, datatype_map, datatyped_class, #direction?, #english?, #eql?, #escape, #freeze, #hash, #inspect, #language?, #literal?, new, #object, #plain?, #simple?, #squish, #squish!, #to_s, #valid?, #validate!, #value, #value_hash
Methods included from Term
#<=>, #==, #compatible?, #eql?, #term?, #terms, #to_base, #to_term
Methods included from Value
#anonymous?, #canonicalize, #canonicalize!, #constant?, #graph?, #inspect, #inspect!, #invalid?, #iri?, #list?, #literal?, #node?, #resource?, #start_with?, #statement?, #term?, #to_nquads, #to_ntriples, #to_rdf, #to_term, #type_error, #uri?, #valid?, #validate!, #variable?
Constructor Details
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ Time
Internally, a ‘DateTime` is represented using a native `::DateTime`. If initialized from a `::DateTime`, the timezone is taken from that native object, otherwise, a timezone (or no timezone) is taken from the string representation having a matching `zzzzzz` component.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rdf/model/literal/time.rb', line 23 def initialize(value, datatype: nil, lexical: nil, **) @datatype = RDF::URI(datatype || self.class.const_get(:DATATYPE)) @string = lexical || (value if value.is_a?(String)) @object = case when value.respond_to?(:to_datetime) dt = value.to_datetime @zone = dt.zone # Normalize to 1972-12-31 dateTime base hms = dt.strftime(FORMAT) ::DateTime.parse("1972-12-31T#{hms}#{@zone}") else md = value.to_s.match(GRAMMAR) _, tm, tz = Array(md) if tz @zone = tz == 'Z' ? '+00:00' : tz else @zone = nil # No timezone end # Normalize 24:00:00 to 00:00:00 hr, mi, se = tm.split(':') if hr.to_i > 23 hr = "%.2i" % (hr.to_i % 24) @string = nil end value = "#{hr}:#{mi}:#{se}" # Normalize to 1972-12-31 dateTime base ::DateTime.parse("1972-12-31T#{hr}:#{mi}:#{se}#{@zone}") end rescue ::DateTime.new end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RDF::Literal
Instance Method Details
#humanize(lang = :en) ⇒ String
Returns a human-readable value for the literal
58 59 60 61 62 63 64 65 |
# File 'lib/rdf/model/literal/time.rb', line 58 def humanize(lang = :en) t = object.strftime("%r") if timezone? z = @zone == '+00:00' ? "UTC" : @zone t += " #{z}" end t end |