Class: RDF::Literal::XML
- Inherits:
-
RDF::Literal
- Object
- RDF::Literal
- RDF::Literal::XML
- Defined in:
- lib/rdf/xsd/xml.rb
Overview
An XML literal.
XML Literals are maintained in a lexical form, unless an object form is provided. The both lexical and object forms are presumed to be in Exclusive Canonical XML. As generating this form is dependent on the context of the XML Literal from the original document, canonicalization cannot be performed directly within this class.
This gem includes Exclusive Canonical XML extensions Nokogiri::XML::Node#c14nxl
, Nokogiri::XML::NodeSet#c14nxl
, REXML::Element#c14nxl
and Array#c14nxl
(necessary for REXML node children, which is the REXML implementation of a NodeSet)
Direct Known Subclasses
Constant Summary collapse
- DATATYPE =
RDF.XMLLiteral
- GRAMMAR =
nil
Instance Method Summary collapse
-
#eql?(other) ⇒ Boolean
XML Equivalence.
-
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ XML
constructor
A new instance of XML.
-
#object ⇒ Object
Parse value, if necessary.
- #to_s ⇒ Object
Constructor Details
#initialize(value, datatype: nil, lexical: nil, **options) ⇒ XML
Returns a new instance of XML.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rdf/xsd/xml.rb', line 39 def initialize(value, datatype: nil, lexical: nil, **) @datatype = datatype || DATATYPE @string = lexical if lexical if value.is_a?(String) @string ||= value else @object = value end @library = case [:library] when nil # Use Nokogiri when available, and REXML or Hpricot otherwise: defined?(::Nokogiri) ? :nokogiri : :rexml when :nokogiri, :rexml [:library] else raise ArgumentError.new("expected :rexml or :nokogiri, but got #{[:library].inspect}") end end |
Instance Method Details
#eql?(other) ⇒ Boolean
XML Equivalence. XML Literals can be compared with each other or with xsd:strings
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/rdf/xsd/xml.rb', line 81 def eql?(other) if other.is_a?(Literal::XML) case @library when :nokogiri then equivalent_nokogiri(other) when :rexml then equivalent_rexml(other) end elsif other.is_a?(Literal) && (other.plain? || other.datatype == RDF::XSD.string) value == other.value else super end end |
#object ⇒ Object
Parse value, if necessary
63 64 65 66 67 68 |
# File 'lib/rdf/xsd/xml.rb', line 63 def object @object ||= case @library when :nokogiri then parse_nokogiri(value) when :rexml then parse_rexml(value) end end |