rdf-rdfa 1.99.3 → 2.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +487 -0
- data/VERSION +1 -1
- data/lib/rdf/rdfa.rb +0 -3
- data/lib/rdf/rdfa/context.rb +21 -9
- data/lib/rdf/rdfa/context/xml.rb +1 -0
- data/lib/rdf/rdfa/format.rb +6 -60
- data/lib/rdf/rdfa/reader.rb +55 -39
- data/lib/rdf/rdfa/reader/nokogiri.rb +1 -1
- data/lib/rdf/rdfa/writer.rb +119 -117
- metadata +134 -59
- data/README +0 -1
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            2.0.0.beta1
         | 
    
        data/lib/rdf/rdfa.rb
    CHANGED
    
    | @@ -35,8 +35,5 @@ module RDF | |
| 35 35 | 
             
                HTML_RDFA_CONTEXT   = "http://www.w3.org/2011/rdfa-context/html-rdfa-1.1"
         | 
| 36 36 | 
             
                XHTML_RDFA_CONTEXT  = "http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1"
         | 
| 37 37 | 
             
                XML_RDFA_CONTEXT    = "http://www.w3.org/2011/rdfa-context/rdfa-1.1"
         | 
| 38 | 
            -
                
         | 
| 39 | 
            -
                def self.debug?; @debug; end
         | 
| 40 | 
            -
                def self.debug=(value); @debug = value; end
         | 
| 41 38 | 
             
              end
         | 
| 42 39 | 
             
            end
         | 
    
        data/lib/rdf/rdfa/context.rb
    CHANGED
    
    | @@ -8,6 +8,8 @@ module RDF::RDFa | |
| 8 8 | 
             
              # The class may be backed by an RDF::Repository, which will be used to retrieve a context graph
         | 
| 9 9 | 
             
              # or to load into, if no such graph exists
         | 
| 10 10 | 
             
              class Context
         | 
| 11 | 
            +
                include RDF::Util::Logger
         | 
| 12 | 
            +
             | 
| 11 13 | 
             
                # Prefix mappings defined in this context
         | 
| 12 14 | 
             
                # @!attribute [r] prefixes
         | 
| 13 15 | 
             
                # @return  [Hash{Symbol => RDF::URI}]
         | 
| @@ -43,6 +45,7 @@ module RDF::RDFa | |
| 43 45 | 
             
                  @prefixes = options.fetch(:prefixes, {})
         | 
| 44 46 | 
             
                  @terms = options.fetch(:terms, {})
         | 
| 45 47 | 
             
                  @vocabulary = options[:vocabulary]
         | 
| 48 | 
            +
                  @options = options.dup
         | 
| 46 49 |  | 
| 47 50 | 
             
                  yield(self) if block_given?
         | 
| 48 51 | 
             
                  self
         | 
| @@ -61,7 +64,6 @@ module RDF::RDFa | |
| 61 64 | 
             
                ##
         | 
| 62 65 | 
             
                # Repository used for saving contexts
         | 
| 63 66 | 
             
                # @return [RDF::Repository]
         | 
| 64 | 
            -
                # @raise [RDF::RDFa::ContextError] if context does not support contexts
         | 
| 65 67 | 
             
                def self.repository
         | 
| 66 68 | 
             
                  @repository ||= RDF::Repository.new(title: "RDFa Contexts")
         | 
| 67 69 | 
             
                end
         | 
| @@ -71,7 +73,13 @@ module RDF::RDFa | |
| 71 73 | 
             
                # @param [RDF::Repository] repo
         | 
| 72 74 | 
             
                # @return [RDF::Repository]
         | 
| 73 75 | 
             
                def self.repository=(repo)
         | 
| 74 | 
            -
                   | 
| 76 | 
            +
                  unless repo.supports?(:graph_name)
         | 
| 77 | 
            +
                    if respond_to?(:log_fatal)
         | 
| 78 | 
            +
                      log_fatal("Context Repository must support graph_name", exception: ContextError)
         | 
| 79 | 
            +
                    else
         | 
| 80 | 
            +
                      abort("Context Repository must support graph_name")
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
                  end
         | 
| 75 83 | 
             
                  @repository = repo
         | 
| 76 84 | 
             
                end
         | 
| 77 85 |  | 
| @@ -87,18 +95,22 @@ module RDF::RDFa | |
| 87 95 | 
             
                  cache[uri] = Struct.new(:prefixes, :terms, :vocabulary).new({}, {}, nil)
         | 
| 88 96 | 
             
                  # Now do the actual load
         | 
| 89 97 | 
             
                  cache[uri] = new(uri) do |context|
         | 
| 90 | 
            -
                     | 
| 98 | 
            +
                    log_debug("process_context: retrieve context <#{uri}>") if respond_to?(:log_debug)
         | 
| 91 99 | 
             
                    Context.load(uri)
         | 
| 92 | 
            -
                    context.parse(repository.query( | 
| 100 | 
            +
                    context.parse(repository.query(graph_name: uri))
         | 
| 93 101 | 
             
                  end
         | 
| 94 102 | 
             
                rescue Exception => e
         | 
| 95 | 
            -
                   | 
| 103 | 
            +
                  if respond_to?(:log_fatal)
         | 
| 104 | 
            +
                    log_error("Context #{uri}: #{e.message}")
         | 
| 105 | 
            +
                  else
         | 
| 106 | 
            +
                    abort("Context #{uri}: #{e.message}")
         | 
| 107 | 
            +
                  end
         | 
| 96 108 | 
             
                end
         | 
| 97 109 |  | 
| 98 110 | 
             
                # Load context into repository
         | 
| 99 111 | 
             
                def self.load(uri)
         | 
| 100 112 | 
             
                  uri = RDF::URI.intern(uri)
         | 
| 101 | 
            -
                  repository.load(uri.to_s, base_uri: uri,  | 
| 113 | 
            +
                  repository.load(uri.to_s, base_uri: uri, graph_name: uri) unless repository.has_graph?(uri)
         | 
| 102 114 | 
             
                end
         | 
| 103 115 |  | 
| 104 116 | 
             
                # @return [RDF::Repository]
         | 
| @@ -146,12 +158,12 @@ module RDF::RDFa | |
| 146 158 | 
             
                # @param [RDF::Enumerable, Enumerator] enumerable
         | 
| 147 159 | 
             
                # @return [void] ignored
         | 
| 148 160 | 
             
                def parse(enumerable)
         | 
| 149 | 
            -
                   | 
| 161 | 
            +
                  log_debug("process_context: parse context <#{uri}>") if respond_to?(:log_debug)
         | 
| 150 162 | 
             
                  resource_info = {}
         | 
| 151 163 | 
             
                  enumerable.each do |statement|
         | 
| 152 164 | 
             
                    res = resource_info[statement.subject] ||= {}
         | 
| 153 165 | 
             
                    next unless statement.object.is_a?(RDF::Literal)
         | 
| 154 | 
            -
                     | 
| 166 | 
            +
                    log_debug("process_context: statement=#{statement.inspect}") if respond_to?(:log_debug)
         | 
| 155 167 | 
             
                    %w(uri term prefix vocabulary).each do |term|
         | 
| 156 168 | 
             
                      res[term] ||= statement.object.value if statement.predicate == RDF::RDFA[term]
         | 
| 157 169 | 
             
                    end
         | 
| @@ -164,7 +176,7 @@ module RDF::RDFa | |
| 164 176 | 
             
                    term = res["term"]
         | 
| 165 177 | 
             
                    prefix = res["prefix"]
         | 
| 166 178 | 
             
                    vocab = res["vocabulary"]
         | 
| 167 | 
            -
                     | 
| 179 | 
            +
                    log_debug("process_context: uri=#{uri.inspect}, term=#{term.inspect}, prefix=#{prefix.inspect}, vocabulary=#{vocab.inspect}") if respond_to?(:log_debug)
         | 
| 168 180 |  | 
| 169 181 | 
             
                    @vocabulary = vocab if vocab
         | 
| 170 182 |  | 
    
        data/lib/rdf/rdfa/context/xml.rb
    CHANGED
    
    | @@ -7,6 +7,7 @@ class RDF::RDFa::Context | |
| 7 7 | 
             
                  @_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/rdfa-1.1"), {
         | 
| 8 8 | 
             
                    prefixes: {
         | 
| 9 9 | 
             
                      cc:      "http://creativecommons.org/ns#",
         | 
| 10 | 
            +
                      csvw:    "http://www.w3.org/ns/csvw#",
         | 
| 10 11 | 
             
                      ctag:    "http://commontag.org/ns#",
         | 
| 11 12 | 
             
                      dc:      "http://purl.org/dc/terms/",
         | 
| 12 13 | 
             
                      dc11:    "http://purl.org/dc/elements/1.1/",
         | 
    
        data/lib/rdf/rdfa/format.rb
    CHANGED
    
    | @@ -19,7 +19,9 @@ module RDF::RDFa | |
| 19 19 | 
             
              # @see http://www.w3.org/TR/rdf-testcases/#ntriples
         | 
| 20 20 | 
             
              class Format < RDF::Format
         | 
| 21 21 | 
             
                content_encoding 'utf-8'
         | 
| 22 | 
            -
                content_type     'text/html', | 
| 22 | 
            +
                content_type     'text/html',
         | 
| 23 | 
            +
                  aliases: %w(application/xhtml+xml image/svg+xml),
         | 
| 24 | 
            +
                  extensions: [:html, :xhtml, :svg]
         | 
| 23 25 | 
             
                reader { RDF::RDFa::Reader }
         | 
| 24 26 | 
             
                writer { RDF::RDFa::Writer }
         | 
| 25 27 |  | 
| @@ -37,65 +39,9 @@ module RDF::RDFa | |
| 37 39 | 
             
                   sample.match(/<[^>]*DOCTYPE\s+html[^>]*>.*xmlns:/im)
         | 
| 38 40 | 
             
                  ) && !sample.match(/<(\w+:)?(RDF)/)
         | 
| 39 41 | 
             
                end
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              # Aliases for RDFa::Format
         | 
| 43 | 
            -
              #
         | 
| 44 | 
            -
              # This allows the following:
         | 
| 45 | 
            -
              #
         | 
| 46 | 
            -
              # @example Obtaining an HTML format class
         | 
| 47 | 
            -
              #   RDF::Format.for(:lite)         # RDF::RDFa::Lite
         | 
| 48 | 
            -
              #   RDF::Format.for(:lite).reader  # RDF::RDFa::Reader
         | 
| 49 | 
            -
              #   RDF::Format.for(:lite).writer  # RDF::RDFa::Writer
         | 
| 50 | 
            -
              class Lite < RDF::Format
         | 
| 51 | 
            -
                content_encoding 'utf-8'
         | 
| 52 | 
            -
                content_type     'text/html', extension: :html
         | 
| 53 | 
            -
                reader { RDF::RDFa::Reader }
         | 
| 54 | 
            -
                writer { RDF::RDFa::Writer }
         | 
| 55 | 
            -
              end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
              # Aliases for RDFa::Format
         | 
| 58 | 
            -
              #
         | 
| 59 | 
            -
              # This allows the following:
         | 
| 60 | 
            -
              #
         | 
| 61 | 
            -
              # @example Obtaining an HTML format class
         | 
| 62 | 
            -
              #   RDF::Format.for(:html)         # RDF::RDFa::HTML
         | 
| 63 | 
            -
              #   RDF::Format.for(:html).reader  # RDF::RDFa::Reader
         | 
| 64 | 
            -
              #   RDF::Format.for(:html).writer  # RDF::RDFa::Writer
         | 
| 65 | 
            -
              class HTML < RDF::Format
         | 
| 66 | 
            -
                content_encoding 'utf-8'
         | 
| 67 | 
            -
                content_type     'text/html', extension: :html
         | 
| 68 | 
            -
                reader { RDF::RDFa::Reader }
         | 
| 69 | 
            -
                writer { RDF::RDFa::Writer }
         | 
| 70 | 
            -
              end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
              # Aliases for RDFa::Format
         | 
| 73 | 
            -
              #
         | 
| 74 | 
            -
              # This allows the following:
         | 
| 75 | 
            -
              #
         | 
| 76 | 
            -
              # @example Obtaining an HTML format class
         | 
| 77 | 
            -
              #   RDF::Format.for(:xhtml)         # RDF::RDFa::XHTML
         | 
| 78 | 
            -
              #   RDF::Format.for(:xhtml).reader  # RDF::RDFa::Reader
         | 
| 79 | 
            -
              #   RDF::Format.for(:xhtml).writer  # RDF::RDFa::Writer
         | 
| 80 | 
            -
              class XHTML < RDF::Format
         | 
| 81 | 
            -
                content_encoding 'utf-8'
         | 
| 82 | 
            -
                content_type     'application/xhtml+xml', extension: :xhtml
         | 
| 83 | 
            -
                reader { RDF::RDFa::Reader }
         | 
| 84 | 
            -
                writer { RDF::RDFa::Writer }
         | 
| 85 | 
            -
              end
         | 
| 86 42 |  | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
              #
         | 
| 91 | 
            -
              # @example Obtaining an HTML format class
         | 
| 92 | 
            -
              #   RDF::Format.for(:svg)         # RDF::RDFa::SVG
         | 
| 93 | 
            -
              #   RDF::Format.for(:svg).reader  # RDF::RDFa::Reader
         | 
| 94 | 
            -
              #   RDF::Format.for(:svg).writer  # RDF::RDFa::Writer
         | 
| 95 | 
            -
              class SVG < RDF::Format
         | 
| 96 | 
            -
                content_encoding 'utf-8'
         | 
| 97 | 
            -
                content_type     'image/svg+xml', extension: :svg
         | 
| 98 | 
            -
                reader { RDF::RDFa::Reader }
         | 
| 99 | 
            -
                writer { RDF::RDFa::Writer }
         | 
| 43 | 
            +
                def self.symbols
         | 
| 44 | 
            +
                  [:rdfa, :lite, :html, :xhtml, :svg]
         | 
| 45 | 
            +
                end
         | 
| 100 46 | 
             
              end
         | 
| 101 47 | 
             
            end
         | 
    
        data/lib/rdf/rdfa/reader.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            begin
         | 
| 2 2 | 
             
              require 'nokogiri'
         | 
| 3 | 
            -
            rescue LoadError | 
| 3 | 
            +
            rescue LoadError
         | 
| 4 4 | 
             
              :rexml
         | 
| 5 5 | 
             
            end
         | 
| 6 6 | 
             
            require 'rdf/ntriples'
         | 
| @@ -28,6 +28,7 @@ module RDF::RDFa | |
| 28 28 | 
             
              class Reader < RDF::Reader
         | 
| 29 29 | 
             
                format Format
         | 
| 30 30 | 
             
                include Expansion
         | 
| 31 | 
            +
                include RDF::Util::Logger
         | 
| 31 32 |  | 
| 32 33 | 
             
                XHTML = "http://www.w3.org/1999/xhtml"
         | 
| 33 34 |  | 
| @@ -99,16 +100,6 @@ module RDF::RDFa | |
| 99 100 | 
             
                # @return [Module]
         | 
| 100 101 | 
             
                attr_reader :implementation
         | 
| 101 102 |  | 
| 102 | 
            -
                ##
         | 
| 103 | 
            -
                # Warnings found during processing
         | 
| 104 | 
            -
                # @return [Array<String>]
         | 
| 105 | 
            -
                attr_reader :warnings
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                ##
         | 
| 108 | 
            -
                # Accumulated errors found during processing
         | 
| 109 | 
            -
                # @return [Array<String>]
         | 
| 110 | 
            -
                attr_reader :errors
         | 
| 111 | 
            -
             | 
| 112 103 | 
             
                # The Recursive Baggage
         | 
| 113 104 | 
             
                # @private
         | 
| 114 105 | 
             
                class EvaluationContext # :nodoc:
         | 
| @@ -252,6 +243,31 @@ module RDF::RDFa | |
| 252 243 | 
             
                  end
         | 
| 253 244 | 
             
                end
         | 
| 254 245 |  | 
| 246 | 
            +
                ##
         | 
| 247 | 
            +
                # RDFa Reader options
         | 
| 248 | 
            +
                # @see http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Reader#options-class_method
         | 
| 249 | 
            +
                def self.options
         | 
| 250 | 
            +
                  super + [
         | 
| 251 | 
            +
                    RDF::CLI::Option.new(
         | 
| 252 | 
            +
                      symbol: :vocab_expansion,
         | 
| 253 | 
            +
                      datatype: TrueClass,
         | 
| 254 | 
            +
                      on: ["--vocab-expansion"],
         | 
| 255 | 
            +
                      description: "Perform OWL2 expansion on the resulting graph.") {true},
         | 
| 256 | 
            +
                    RDF::CLI::Option.new(
         | 
| 257 | 
            +
                      symbol: :host_language,
         | 
| 258 | 
            +
                      datatype: %w(xml xhtml1 xhtml5 html4 svg),
         | 
| 259 | 
            +
                      on: ["--host-language HOSTLANG", %w(xml xhtml1 xhtml5 html4 svg)],
         | 
| 260 | 
            +
                      description: "Host Language. One of xml, xhtml1, xhtml5, html4, or svg") do |arg|
         | 
| 261 | 
            +
                        arg.to_sym
         | 
| 262 | 
            +
                    end,
         | 
| 263 | 
            +
                    RDF::CLI::Option.new(
         | 
| 264 | 
            +
                      symbol: :rdfagraph,
         | 
| 265 | 
            +
                      datatype: %w(output processor both),
         | 
| 266 | 
            +
                      on: ["--rdfagraph RDFAGRAPH", %w(output processor both)],
         | 
| 267 | 
            +
                      description: "Used to indicate if either or both of the :output or :processor graphs are output.") {|arg| arg.to_sym},
         | 
| 268 | 
            +
                  ]
         | 
| 269 | 
            +
                end
         | 
| 270 | 
            +
             | 
| 255 271 | 
             
                ##
         | 
| 256 272 | 
             
                # Initializes the RDFa reader instance.
         | 
| 257 273 | 
             
                #
         | 
| @@ -276,12 +292,6 @@ module RDF::RDFa | |
| 276 292 | 
             
                #   Value is an array containing on or both of :output or :processor.
         | 
| 277 293 | 
             
                # @option options [Repository] :vocab_repository (nil)
         | 
| 278 294 | 
             
                #   Repository to save loaded vocabularies.
         | 
| 279 | 
            -
                # @option options [Array] :errors
         | 
| 280 | 
            -
                #   array for placing errors found when parsing
         | 
| 281 | 
            -
                # @option options [Array] :warnings
         | 
| 282 | 
            -
                #   array for placing warnings found when parsing
         | 
| 283 | 
            -
                # @option options [Array] :debug
         | 
| 284 | 
            -
                #   Array to place debug messages
         | 
| 285 295 | 
             
                # @return [reader]
         | 
| 286 296 | 
             
                # @yield  [reader] `self`
         | 
| 287 297 | 
             
                # @yieldparam  [RDF::Reader] reader
         | 
| @@ -289,13 +299,11 @@ module RDF::RDFa | |
| 289 299 | 
             
                # @raise [RDF::ReaderError] if _validate_
         | 
| 290 300 | 
             
                def initialize(input = $stdin, options = {}, &block)
         | 
| 291 301 | 
             
                  super do
         | 
| 292 | 
            -
                    @errors = @options[:errors]
         | 
| 293 | 
            -
                    @warnings = @options[:warnings]
         | 
| 294 | 
            -
                    @debug = @options[:debug]
         | 
| 295 302 | 
             
                    @options = {reference_folding: true}.merge(@options)
         | 
| 296 303 | 
             
                    @repository = RDF::Repository.new
         | 
| 297 304 |  | 
| 298 305 | 
             
                    @options[:rdfagraph] = case @options[:rdfagraph]
         | 
| 306 | 
            +
                    when 'all' then [:output, :processor]
         | 
| 299 307 | 
             
                    when String, Symbol then @options[:rdfagraph].to_s.split(',').map(&:strip).map(&:to_sym)
         | 
| 300 308 | 
             
                    when Array then @options[:rdfagraph].map {|o| o.to_s.to_sym}
         | 
| 301 309 | 
             
                    else  []
         | 
| @@ -396,9 +404,13 @@ module RDF::RDFa | |
| 396 404 |  | 
| 397 405 | 
             
                        if reader = RDF::Reader.for(content_type: type.to_s)
         | 
| 398 406 | 
             
                          add_debug(el, "=> reader #{reader.to_sym}")
         | 
| 399 | 
            -
                          # Wrap input in a RemoteDocument with appropriate content-type
         | 
| 407 | 
            +
                          # Wrap input in a RemoteDocument with appropriate content-type and base
         | 
| 400 408 | 
             
                          doc = if input.is_a?(String)
         | 
| 401 | 
            -
                            RDF::Util::File::RemoteDocument.new(input, | 
| 409 | 
            +
                            RDF::Util::File::RemoteDocument.new(input,
         | 
| 410 | 
            +
                                                                options.merge(
         | 
| 411 | 
            +
                                                                  content_type: type.to_s,
         | 
| 412 | 
            +
                                                                  base_uri: base_uri
         | 
| 413 | 
            +
                                                                ))
         | 
| 402 414 | 
             
                          else
         | 
| 403 415 | 
             
                            input
         | 
| 404 416 | 
             
                          end
         | 
| @@ -457,6 +469,10 @@ module RDF::RDFa | |
| 457 469 | 
             
                        yield RDF::Statement.new(*statement.to_triple) if @options[:rdfagraph].include?(:processor)
         | 
| 458 470 | 
             
                      end
         | 
| 459 471 | 
             
                    end
         | 
| 472 | 
            +
             | 
| 473 | 
            +
                    if validate? && log_statistics[:error]
         | 
| 474 | 
            +
                      raise RDF::ReaderError, "Errors found during processing"
         | 
| 475 | 
            +
                    end
         | 
| 460 476 | 
             
                  end
         | 
| 461 477 | 
             
                  enum_for(:each_statement)
         | 
| 462 478 | 
             
                end
         | 
| @@ -496,30 +512,30 @@ module RDF::RDFa | |
| 496 512 | 
             
                # @param [#display_path, #to_s] node XML Node or string for showing context
         | 
| 497 513 | 
             
                # @param [String] message
         | 
| 498 514 | 
             
                # @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
         | 
| 499 | 
            -
                def add_debug(node, message = "")
         | 
| 500 | 
            -
                   | 
| 501 | 
            -
                  message = message + yield if block_given?
         | 
| 502 | 
            -
                  add_processor_message(node, message, RDF::RDFA.Info)
         | 
| 515 | 
            +
                def add_debug(node, message = "", &block)
         | 
| 516 | 
            +
                  add_processor_message(node, message, nil, &block)
         | 
| 503 517 | 
             
                end
         | 
| 504 518 |  | 
| 505 | 
            -
                def add_info(node, message, process_class = RDF::RDFA.Info)
         | 
| 506 | 
            -
                  add_processor_message(node, message, process_class)
         | 
| 519 | 
            +
                def add_info(node, message, process_class = RDF::RDFA.Info, &block)
         | 
| 520 | 
            +
                  add_processor_message(node, message, process_class, &block)
         | 
| 507 521 | 
             
                end
         | 
| 508 522 |  | 
| 509 523 | 
             
                def add_warning(node, message, process_class = RDF::RDFA.Warning)
         | 
| 510 | 
            -
                  @warnings << "#{node_path(node)}: #{message}" if @warnings
         | 
| 511 524 | 
             
                  add_processor_message(node, message, process_class)
         | 
| 512 525 | 
             
                end
         | 
| 513 526 |  | 
| 514 527 | 
             
                def add_error(node, message, process_class = RDF::RDFA.Error)
         | 
| 515 | 
            -
                  @errors << "#{node_path(node)}: #{message}" if @errors
         | 
| 516 528 | 
             
                  add_processor_message(node, message, process_class)
         | 
| 517 | 
            -
                  raise RDF::ReaderError, message if validate?
         | 
| 518 529 | 
             
                end
         | 
| 519 530 |  | 
| 520 | 
            -
                def add_processor_message(node, message, process_class)
         | 
| 521 | 
            -
                   | 
| 522 | 
            -
                   | 
| 531 | 
            +
                def add_processor_message(node, message, process_class, &block)
         | 
| 532 | 
            +
                  case process_class
         | 
| 533 | 
            +
                  when RDF::RDFA.Error    then log_error(node_path(node), message, &block)
         | 
| 534 | 
            +
                  when RDF::RDFA.Warning  then log_warn(node_path(node), message, &block)
         | 
| 535 | 
            +
                  when RDF::RDFA.Info     then log_info(node_path(node), message, &block)
         | 
| 536 | 
            +
                  else                         log_debug(node_path(node), message, &block)
         | 
| 537 | 
            +
                  end
         | 
| 538 | 
            +
                  process_class ||= RDF::RDFA.Info
         | 
| 523 539 | 
             
                  if @options[:processor_callback] || @options[:rdfagraph].include?(:processor)
         | 
| 524 540 | 
             
                    n = RDF::Node.new
         | 
| 525 541 | 
             
                    processor_statements = [
         | 
| @@ -605,10 +621,10 @@ module RDF::RDFa | |
| 605 621 | 
             
                        next
         | 
| 606 622 | 
             
                      end
         | 
| 607 623 |  | 
| 608 | 
            -
                       | 
| 624 | 
            +
                      old_logger = @options[:logger]
         | 
| 609 625 | 
             
                      begin
         | 
| 610 626 | 
             
                        add_info(root, "load_initial_contexts: load #{uri.to_base}")
         | 
| 611 | 
            -
                         | 
| 627 | 
            +
                        @options[:logger] = false
         | 
| 612 628 | 
             
                        context = Context.find(uri)
         | 
| 613 629 |  | 
| 614 630 | 
             
                        # Add URI Mappings to prefixes
         | 
| @@ -619,11 +635,11 @@ module RDF::RDFa | |
| 619 635 | 
             
                        yield :term_mappings, context.terms unless context.terms.empty?
         | 
| 620 636 | 
             
                        yield :default_vocabulary, context.vocabulary if context.vocabulary
         | 
| 621 637 | 
             
                      rescue Exception => e
         | 
| 622 | 
            -
                         | 
| 638 | 
            +
                        options[:logger] = old_logger
         | 
| 623 639 | 
             
                        add_error(root, e.message)
         | 
| 624 640 | 
             
                        raise # In case we're not in strict mode, we need to be sure processing stops
         | 
| 625 641 | 
             
                      ensure
         | 
| 626 | 
            -
                         | 
| 642 | 
            +
                        @options[:logger] = old_logger
         | 
| 627 643 | 
             
                      end
         | 
| 628 644 | 
             
                    end
         | 
| 629 645 | 
             
                end
         | 
| @@ -1174,7 +1190,7 @@ module RDF::RDFa | |
| 1174 1190 | 
             
                          add_debug(element, "[Step 11] value literal (#{attrs[:value]})")
         | 
| 1175 1191 | 
             
                          v = attrs[:value].to_s
         | 
| 1176 1192 | 
             
                          # Figure it out by parsing
         | 
| 1177 | 
            -
                          dt_lit = %w(Integer  | 
| 1193 | 
            +
                          dt_lit = %w(Integer Decimal Double).map {|t| RDF::Literal.const_get(t)}.detect do |dt|
         | 
| 1178 1194 | 
             
                            v.match(dt::GRAMMAR)
         | 
| 1179 1195 | 
             
                          end || RDF::Literal
         | 
| 1180 1196 | 
             
                          dt_lit.new(v)
         | 
| @@ -280,7 +280,7 @@ module RDF::RDFa | |
| 280 280 | 
             
                  # Document errors
         | 
| 281 281 | 
             
                  def doc_errors
         | 
| 282 282 | 
             
                    # FIXME: Nokogiri version 1.5.5 thinks many HTML5 elements are invalid
         | 
| 283 | 
            -
                    @doc.errors.reject {|e| e.to_s =~ /(Tag (?:article|aside|audio|canvas|command| | 
| 283 | 
            +
                    @doc.errors.reject {|e| e.to_s =~ /(Tag (?:article|aside|audio|canvas|command|datalist|details|embed|figcaption|figure|footer|header|hgroup|keygen|main|mark|meter|nav|output|progress|ruby|section|time|video|wbr) invalid|Missing attribute name)/}
         | 
| 284 284 | 
             
                  end
         | 
| 285 285 |  | 
| 286 286 | 
             
                  ##
         | 
    
        data/lib/rdf/rdfa/writer.rb
    CHANGED
    
    | @@ -49,6 +49,7 @@ module RDF::RDFa | |
| 49 49 | 
             
              # @author [Gregg Kellogg](http://kellogg-assoc.com/)
         | 
| 50 50 | 
             
              class Writer < RDF::Writer
         | 
| 51 51 | 
             
                format RDF::RDFa::Format
         | 
| 52 | 
            +
                include RDF::Util::Logger
         | 
| 52 53 |  | 
| 53 54 | 
             
                # Defines rdf:type of subjects to be emitted at the beginning of the document.
         | 
| 54 55 | 
             
                # @return [Array<URI>]
         | 
| @@ -62,8 +63,9 @@ module RDF::RDFa | |
| 62 63 | 
             
                # @return [Array<URI>]
         | 
| 63 64 | 
             
                attr :heading_predicates
         | 
| 64 65 |  | 
| 65 | 
            -
                 | 
| 66 | 
            -
             | 
| 66 | 
            +
                HAML_OPTIONS = {
         | 
| 67 | 
            +
                  ugly: false, # to preserve whitespace without using entities
         | 
| 68 | 
            +
                }
         | 
| 67 69 |  | 
| 68 70 | 
             
                # @return [Graph] Graph of statements serialized
         | 
| 69 71 | 
             
                attr_accessor :graph
         | 
| @@ -71,6 +73,19 @@ module RDF::RDFa | |
| 71 73 | 
             
                # @return [RDF::URI] Base URI used for relativizing URIs
         | 
| 72 74 | 
             
                attr_accessor :base_uri
         | 
| 73 75 |  | 
| 76 | 
            +
                ##
         | 
| 77 | 
            +
                # RDFa Writer options
         | 
| 78 | 
            +
                # @see http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Writer#options-class_method
         | 
| 79 | 
            +
                def self.options
         | 
| 80 | 
            +
                  super + [
         | 
| 81 | 
            +
                    RDF::CLI::Option.new(
         | 
| 82 | 
            +
                      symbol: :lang,
         | 
| 83 | 
            +
                      datatype: String,
         | 
| 84 | 
            +
                      on: ["--lang"],
         | 
| 85 | 
            +
                      description: "Output as root @lang attribute, and avoid generation _@lang_ where possible."),
         | 
| 86 | 
            +
                  ]
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
             | 
| 74 89 | 
             
                ##
         | 
| 75 90 | 
             
                # Initializes the RDFa writer instance.
         | 
| 76 91 | 
             
                #
         | 
| @@ -124,25 +139,6 @@ module RDF::RDFa | |
| 124 139 | 
             
                  end
         | 
| 125 140 | 
             
                end
         | 
| 126 141 |  | 
| 127 | 
            -
                ##
         | 
| 128 | 
            -
                # Write whole graph
         | 
| 129 | 
            -
                #
         | 
| 130 | 
            -
                # @param  [Graph] graph
         | 
| 131 | 
            -
                # @return [void]
         | 
| 132 | 
            -
                def write_graph(graph)
         | 
| 133 | 
            -
                  @graph = graph
         | 
| 134 | 
            -
                end
         | 
| 135 | 
            -
             | 
| 136 | 
            -
                ##
         | 
| 137 | 
            -
                # Addes a statement to be serialized
         | 
| 138 | 
            -
                # @param  [RDF::Statement] statement
         | 
| 139 | 
            -
                # @return [void]
         | 
| 140 | 
            -
                # @raise [RDF::WriterError] if validating and attempting to write an invalid {RDF::Term}.
         | 
| 141 | 
            -
                def write_statement(statement)
         | 
| 142 | 
            -
                  raise RDF::WriterError, "Statement #{statement.inspect} is invalid" if validate? && statement.invalid?
         | 
| 143 | 
            -
                  @graph.insert(statement)
         | 
| 144 | 
            -
                end
         | 
| 145 | 
            -
             | 
| 146 142 | 
             
                ##
         | 
| 147 143 | 
             
                # Addes a triple to be serialized
         | 
| 148 144 | 
             
                # @param  [RDF::Resource] subject
         | 
| @@ -153,7 +149,7 @@ module RDF::RDFa | |
| 153 149 | 
             
                # @abstract
         | 
| 154 150 | 
             
                # @raise [RDF::WriterError] if validating and attempting to write an invalid {RDF::Term}.
         | 
| 155 151 | 
             
                def write_triple(subject, predicate, object)
         | 
| 156 | 
            -
                   | 
| 152 | 
            +
                  @graph.insert(RDF::Statement(subject, predicate, object))
         | 
| 157 153 | 
             
                end
         | 
| 158 154 |  | 
| 159 155 | 
             
                ##
         | 
| @@ -163,16 +159,15 @@ module RDF::RDFa | |
| 163 159 | 
             
                def write_epilogue
         | 
| 164 160 | 
             
                  @base_uri = RDF::URI(@options[:base_uri]) if @options[:base_uri]
         | 
| 165 161 | 
             
                  @lang = @options[:lang]
         | 
| 166 | 
            -
                  @debug = @options[:debug]
         | 
| 167 162 | 
             
                  self.reset
         | 
| 168 163 |  | 
| 169 | 
            -
                   | 
| 164 | 
            +
                  log_debug {"\nserialize: graph size: #{@graph.size}"}
         | 
| 170 165 |  | 
| 171 166 | 
             
                  preprocess
         | 
| 172 167 |  | 
| 173 168 | 
             
                  # Prefixes
         | 
| 174 169 | 
             
                  prefix = prefixes.keys.map {|pk| "#{pk}: #{prefixes[pk]}"}.sort.join(" ") unless prefixes.empty?
         | 
| 175 | 
            -
                   | 
| 170 | 
            +
                  log_debug {"\nserialize: prefixes: #{prefix.inspect}"}
         | 
| 176 171 |  | 
| 177 172 | 
             
                  subjects = order_subjects
         | 
| 178 173 |  | 
| @@ -196,6 +191,8 @@ module RDF::RDFa | |
| 196 191 | 
             
                    subject(s)
         | 
| 197 192 | 
             
                  end
         | 
| 198 193 | 
             
                  @output.write(doc)
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                  super
         | 
| 199 196 | 
             
                end
         | 
| 200 197 |  | 
| 201 198 | 
             
                protected
         | 
| @@ -307,7 +304,7 @@ module RDF::RDFa | |
| 307 304 | 
             
                # @return String
         | 
| 308 305 | 
             
                #   The rendered document is returned as a string
         | 
| 309 306 | 
             
                def render_property(predicate, objects, options = {}, &block)
         | 
| 310 | 
            -
                   | 
| 307 | 
            +
                  log_debug {"render_property(#{predicate}): #{objects.inspect}, #{options.inspect}"}
         | 
| 311 308 | 
             
                  # If there are multiple objects, and no :property_values is defined, call recursively with
         | 
| 312 309 | 
             
                  # each object
         | 
| 313 310 |  | 
| @@ -317,19 +314,19 @@ module RDF::RDFa | |
| 317 314 | 
             
                  # Separate out the objects which are lists and render separately
         | 
| 318 315 | 
             
                  list_objects = objects.reject do |o|
         | 
| 319 316 | 
             
                    o == RDF.nil ||
         | 
| 320 | 
            -
                    (l = RDF::List.new(o, @graph)).invalid?
         | 
| 317 | 
            +
                    (l = RDF::List.new(subject: o, graph: @graph)).invalid?
         | 
| 321 318 | 
             
                  end
         | 
| 322 319 | 
             
                  unless list_objects.empty?
         | 
| 323 320 | 
             
                    # Render non-list objects
         | 
| 324 | 
            -
                     | 
| 325 | 
            -
                    nl =  | 
| 321 | 
            +
                    log_debug {"properties with lists: #{list_objects} non-lists: #{objects - list_objects}"}
         | 
| 322 | 
            +
                    nl = log_depth {render_property(predicate, objects - list_objects, options, &block)} unless objects == list_objects
         | 
| 326 323 | 
             
                    return nl.to_s + list_objects.map do |object|
         | 
| 327 324 | 
             
                      # Render each list as multiple properties and set :inlist to true
         | 
| 328 | 
            -
                      list = RDF::List.new(object, @graph)
         | 
| 325 | 
            +
                      list = RDF::List.new(subject: object, graph: @graph)
         | 
| 329 326 | 
             
                      list.each_statement {|st| subject_done(st.subject)}
         | 
| 330 327 |  | 
| 331 | 
            -
                       | 
| 332 | 
            -
                       | 
| 328 | 
            +
                      log_debug {"list: #{list.inspect} #{list.to_a}"}
         | 
| 329 | 
            +
                      log_depth do
         | 
| 333 330 | 
             
                        render_property(predicate, list.to_a, options.merge(inlist: "true")) do |object|
         | 
| 334 331 | 
             
                          yield(object, true) if block_given?
         | 
| 335 332 | 
             
                        end
         | 
| @@ -340,10 +337,10 @@ module RDF::RDFa | |
| 340 337 | 
             
                  if objects.length > 1 && template.nil?
         | 
| 341 338 | 
             
                    # If there is no property_values template, render each property using property_value template
         | 
| 342 339 | 
             
                    objects.map do |object|
         | 
| 343 | 
            -
                       | 
| 340 | 
            +
                      log_depth {render_property(predicate, [object], options, &block)}
         | 
| 344 341 | 
             
                    end.join(" ")
         | 
| 345 342 | 
             
                  else
         | 
| 346 | 
            -
                     | 
| 343 | 
            +
                    log_fatal("Missing property template", exception: RDF::WriterError) if template.nil?
         | 
| 347 344 |  | 
| 348 345 | 
             
                    template = options[:haml] || (
         | 
| 349 346 | 
             
                      objects.to_a.length > 1 &&
         | 
| @@ -410,7 +407,7 @@ module RDF::RDFa | |
| 410 407 | 
             
                  select {|s| !seen.include?(s)}.
         | 
| 411 408 | 
             
                  each do |class_uri|
         | 
| 412 409 | 
             
                    graph.query(predicate: RDF.type, object: class_uri).map {|st| st.subject}.sort.uniq.each do |subject|
         | 
| 413 | 
            -
                      # | 
| 410 | 
            +
                      #log_debug {"order_subjects: #{subject.inspect}"}
         | 
| 414 411 | 
             
                      subjects << subject
         | 
| 415 412 | 
             
                      seen[subject] = true
         | 
| 416 413 | 
             
                    end
         | 
| @@ -422,7 +419,7 @@ module RDF::RDFa | |
| 422 419 | 
             
                    map {|r| [r.is_a?(RDF::Node) ? 1 : 0, ref_count(r), r]}.
         | 
| 423 420 | 
             
                    sort
         | 
| 424 421 |  | 
| 425 | 
            -
                   | 
| 422 | 
            +
                  log_debug {"order_subjects: #{recursable.inspect}"}
         | 
| 426 423 |  | 
| 427 424 | 
             
                  subjects += recursable.map{|r| r.last}
         | 
| 428 425 | 
             
                end
         | 
| @@ -446,7 +443,7 @@ module RDF::RDFa | |
| 446 443 | 
             
                    prop_list << prop.to_s
         | 
| 447 444 | 
             
                  end
         | 
| 448 445 |  | 
| 449 | 
            -
                   | 
| 446 | 
            +
                  log_debug {"order_properties: #{prop_list.join(', ')}"}
         | 
| 450 447 | 
             
                  prop_list
         | 
| 451 448 | 
             
                end
         | 
| 452 449 |  | 
| @@ -454,7 +451,7 @@ module RDF::RDFa | |
| 454 451 | 
             
                # @param [RDF::Statement] statement
         | 
| 455 452 | 
             
                # @return [ignored]
         | 
| 456 453 | 
             
                def preprocess_statement(statement)
         | 
| 457 | 
            -
                  # | 
| 454 | 
            +
                  #log_debug {"preprocess: #{statement.inspect}"}
         | 
| 458 455 | 
             
                  bump_reference(statement.object)
         | 
| 459 456 | 
             
                  @subjects[statement.subject] = true
         | 
| 460 457 | 
             
                  get_curie(statement.subject)
         | 
| @@ -465,7 +462,7 @@ module RDF::RDFa | |
| 465 462 |  | 
| 466 463 | 
             
                # Reset parser to run again
         | 
| 467 464 | 
             
                def reset
         | 
| 468 | 
            -
                  @ | 
| 465 | 
            +
                  @options[:log_depth] = 0
         | 
| 469 466 | 
             
                  prefixes = {}
         | 
| 470 467 | 
             
                  @references = {}
         | 
| 471 468 | 
             
                  @serialized = {}
         | 
| @@ -502,7 +499,7 @@ module RDF::RDFa | |
| 502 499 | 
             
                  typeof = type_of(properties.delete(RDF.type.to_s), subject)
         | 
| 503 500 | 
             
                  prop_list = order_properties(properties)
         | 
| 504 501 |  | 
| 505 | 
            -
                   | 
| 502 | 
            +
                  log_debug {"props: #{prop_list.inspect}"}
         | 
| 506 503 |  | 
| 507 504 | 
             
                  render_opts = {typeof: typeof, property_values: properties}.merge(options)
         | 
| 508 505 |  | 
| @@ -539,7 +536,7 @@ module RDF::RDFa | |
| 539 536 | 
             
                  # Nodes without a curie need a blank @typeof to generate a subject
         | 
| 540 537 | 
             
                  typeof ||= "" unless curie
         | 
| 541 538 |  | 
| 542 | 
            -
                   | 
| 539 | 
            +
                  log_debug {"subject: #{curie.inspect}, typeof: #{typeof.inspect}" }
         | 
| 543 540 |  | 
| 544 541 | 
             
                  typeof.freeze
         | 
| 545 542 | 
             
                end
         | 
| @@ -552,17 +549,17 @@ module RDF::RDFa | |
| 552 549 | 
             
                  # See if there's a template based on the sorted concatenation of all types of this subject
         | 
| 553 550 | 
             
                  # or any type of this subject
         | 
| 554 551 | 
             
                  tmpl = find_template(subject)
         | 
| 555 | 
            -
                   | 
| 552 | 
            +
                  log_debug {"subject: found template #{tmpl[:identifier] || tmpl.inspect}"} if tmpl
         | 
| 556 553 |  | 
| 557 554 | 
             
                  # Render this subject
         | 
| 558 555 | 
             
                  # If :rel is specified and :typeof is nil, use @resource instead of @about.
         | 
| 559 556 | 
             
                  # Pass other options from calling context
         | 
| 560 557 | 
             
                  with_template(tmpl) do
         | 
| 561 558 | 
             
                    render_subject(subject, prop_list, render_opts) do |pred|
         | 
| 562 | 
            -
                       | 
| 559 | 
            +
                      log_depth do
         | 
| 563 560 | 
             
                        pred = RDF::URI(pred) if pred.is_a?(String)
         | 
| 564 561 | 
             
                        values = render_opts[:property_values][pred.to_s]
         | 
| 565 | 
            -
                         | 
| 562 | 
            +
                        log_debug {"subject: #{get_curie(subject)}, pred: #{get_curie(pred)}, values: #{values.inspect}"}
         | 
| 566 563 | 
             
                        predicate(pred, values)
         | 
| 567 564 | 
             
                      end
         | 
| 568 565 | 
             
                    end
         | 
| @@ -578,15 +575,15 @@ module RDF::RDFa | |
| 578 575 | 
             
                #   Objects to serialize
         | 
| 579 576 | 
             
                # @return [String]
         | 
| 580 577 | 
             
                def predicate(predicate, objects)
         | 
| 581 | 
            -
                   | 
| 578 | 
            +
                  log_debug {"predicate: #{predicate.inspect}, objects: #{objects}"}
         | 
| 582 579 |  | 
| 583 580 | 
             
                  return if objects.to_a.empty?
         | 
| 584 581 |  | 
| 585 | 
            -
                   | 
| 582 | 
            +
                  log_debug {"predicate: #{get_curie(predicate)}"}
         | 
| 586 583 | 
             
                  render_property(predicate, objects) do |o, inlist=nil|
         | 
| 587 584 | 
             
                    # Yields each object, for potential recursive definition.
         | 
| 588 585 | 
             
                    # If nil is returned, a leaf is produced
         | 
| 589 | 
            -
                     | 
| 586 | 
            +
                    log_depth {subject(o, rel: get_curie(predicate), inlist: inlist, element: (:li if objects.length > 1 || inlist))} if !is_done?(o) && @subjects.include?(o)
         | 
| 590 587 | 
             
                  end
         | 
| 591 588 | 
             
                end
         | 
| 592 589 |  | 
| @@ -596,8 +593,12 @@ module RDF::RDFa | |
| 596 593 | 
             
                # @return [String, nil]
         | 
| 597 594 | 
             
                # @raise [RDF::WriterError]
         | 
| 598 595 | 
             
                def get_dt_curie(literal)
         | 
| 599 | 
            -
                   | 
| 600 | 
            -
             | 
| 596 | 
            +
                  if literal.is_a?(RDF::Literal)
         | 
| 597 | 
            +
                    get_curie(literal.datatype) if literal.literal? && literal.datatype?
         | 
| 598 | 
            +
                  else
         | 
| 599 | 
            +
                    log_error("Getting datatype CURIE for #{literal.inspect}, which must be a literal")
         | 
| 600 | 
            +
                    nil
         | 
| 601 | 
            +
                  end
         | 
| 601 602 | 
             
                end
         | 
| 602 603 |  | 
| 603 604 | 
             
                # Haml rendering helper. Return language for plain literal, if there is no language, or it is the same as the document, return nil
         | 
| @@ -606,8 +607,12 @@ module RDF::RDFa | |
| 606 607 | 
             
                # @return [Symbol, nil]
         | 
| 607 608 | 
             
                # @raise [RDF::WriterError]
         | 
| 608 609 | 
             
                def get_lang(literal)
         | 
| 609 | 
            -
                   | 
| 610 | 
            -
             | 
| 610 | 
            +
                  if literal.is_a?(RDF::Literal)
         | 
| 611 | 
            +
                    literal.language if literal.literal? && literal.language && literal.language.to_s != @lang.to_s
         | 
| 612 | 
            +
                  else
         | 
| 613 | 
            +
                    log_error("Getting language for #{literal.inspect}, which must be a literal")
         | 
| 614 | 
            +
                    nil
         | 
| 615 | 
            +
                  end
         | 
| 611 616 | 
             
                end
         | 
| 612 617 |  | 
| 613 618 | 
             
                # Haml rendering helper. Data to be added to a @content value, for specific datatypes
         | 
| @@ -616,21 +621,28 @@ module RDF::RDFa | |
| 616 621 | 
             
                # @return [String, nil]
         | 
| 617 622 | 
             
                # @raise [RDF::WriterError]
         | 
| 618 623 | 
             
                def get_content(literal)
         | 
| 619 | 
            -
                  raise RDF::WriterError, "Getting content for #{literal.inspect}, which must be a literal" unless literal.is_a?(RDF::Literal)
         | 
| 620 624 | 
             
                  case literal
         | 
| 621 625 | 
             
                  when RDF::Literal::Date, RDF::Literal::Time, RDF::Literal::DateTime, RDF::Literal::Duration
         | 
| 622 626 | 
             
                    literal.to_s
         | 
| 627 | 
            +
                  when RDF::Literal then nil
         | 
| 628 | 
            +
                  else
         | 
| 629 | 
            +
                    log_error("Getting content for #{literal.inspect}, which must be a literal")
         | 
| 630 | 
            +
                    nil
         | 
| 623 631 | 
             
                  end
         | 
| 624 632 | 
             
                end
         | 
| 625 633 |  | 
| 626 | 
            -
                # Haml rendering helper. Display value for object, may be humanized into a non-canonical form
         | 
| 634 | 
            +
                # Haml rendering helper. Display value for object, may be humanized into a non-canonical form 
         | 
| 627 635 | 
             
                #
         | 
| 628 636 | 
             
                # @param [RDF::Literal] literal
         | 
| 629 637 | 
             
                # @return [String]
         | 
| 630 638 | 
             
                # @raise [RDF::WriterError]
         | 
| 631 639 | 
             
                def get_value(literal)
         | 
| 632 | 
            -
                   | 
| 633 | 
            -
             | 
| 640 | 
            +
                  if literal.is_a?(RDF::Literal)
         | 
| 641 | 
            +
                    literal.humanize
         | 
| 642 | 
            +
                  else
         | 
| 643 | 
            +
                    log_error("Getting value for #{literal.inspect}, which must be a literal")
         | 
| 644 | 
            +
                    nil
         | 
| 645 | 
            +
                  end
         | 
| 634 646 | 
             
                end
         | 
| 635 647 |  | 
| 636 648 | 
             
                # Haml rendering helper. Return an appropriate label for a resource.
         | 
| @@ -639,8 +651,12 @@ module RDF::RDFa | |
| 639 651 | 
             
                # @return [String]
         | 
| 640 652 | 
             
                # @raise [RDF::WriterError]
         | 
| 641 653 | 
             
                def get_predicate_name(resource)
         | 
| 642 | 
            -
                   | 
| 643 | 
            -
             | 
| 654 | 
            +
                  if resource.is_a?(RDF::URI)
         | 
| 655 | 
            +
                    get_curie(resource)
         | 
| 656 | 
            +
                  else
         | 
| 657 | 
            +
                    log_error("Getting predicate name for #{resource.inspect}, which must be a URI")
         | 
| 658 | 
            +
                    nil
         | 
| 659 | 
            +
                  end
         | 
| 644 660 | 
             
                end
         | 
| 645 661 |  | 
| 646 662 | 
             
                # Haml rendering helper. Return appropriate, term, CURIE or URI for the given resource.
         | 
| @@ -649,42 +665,50 @@ module RDF::RDFa | |
| 649 665 | 
             
                # @return [String] value to use to identify URI
         | 
| 650 666 | 
             
                # @raise [RDF::WriterError]
         | 
| 651 667 | 
             
                def get_curie(resource)
         | 
| 652 | 
            -
                   | 
| 653 | 
            -
                   | 
| 668 | 
            +
                  case resource
         | 
| 669 | 
            +
                  when RDF::URI
         | 
| 670 | 
            +
                    begin
         | 
| 671 | 
            +
                      uri = resource.to_s
         | 
| 672 | 
            +
             | 
| 673 | 
            +
                      curie = case
         | 
| 674 | 
            +
                      when @uri_to_term_or_curie.has_key?(uri)
         | 
| 675 | 
            +
                        log_debug {"get_curie(#{uri}): uri_to_term_or_curie #{@uri_to_term_or_curie[uri].inspect}"}
         | 
| 676 | 
            +
                        return @uri_to_term_or_curie[uri]
         | 
| 677 | 
            +
                      when base_uri && uri.index(base_uri.to_s) == 0
         | 
| 678 | 
            +
                        log_debug {"get_curie(#{uri}): base_uri (#{uri.sub(base_uri.to_s, "")})"}
         | 
| 679 | 
            +
                        uri.sub(base_uri.to_s, "")
         | 
| 680 | 
            +
                      when @vocabulary && uri.index(@vocabulary) == 0
         | 
| 681 | 
            +
                        log_debug {"get_curie(#{uri}): vocabulary"}
         | 
| 682 | 
            +
                        uri.sub(@vocabulary, "")
         | 
| 683 | 
            +
                      when u = @uri_to_prefix.keys.detect {|u| uri.index(u.to_s) == 0}
         | 
| 684 | 
            +
                        log_debug {"get_curie(#{uri}): uri_to_prefix"}
         | 
| 685 | 
            +
                        # Use a defined prefix
         | 
| 686 | 
            +
                        prefix = @uri_to_prefix[u]
         | 
| 687 | 
            +
                        prefix(prefix, u)  # Define for output
         | 
| 688 | 
            +
                        uri.sub(u.to_s, "#{prefix}:")
         | 
| 689 | 
            +
                      when @options[:standard_prefixes] && vocab = RDF::Vocabulary.detect {|v| uri.index(v.to_uri.to_s) == 0}
         | 
| 690 | 
            +
                        log_debug {"get_curie(#{uri}): standard_prefixes"}
         | 
| 691 | 
            +
                        prefix = vocab.__name__.to_s.split('::').last.downcase
         | 
| 692 | 
            +
                        prefix(prefix, vocab.to_uri) # Define for output
         | 
| 693 | 
            +
                        uri.sub(vocab.to_uri.to_s, "#{prefix}:")
         | 
| 694 | 
            +
                      else
         | 
| 695 | 
            +
                        log_debug {"get_curie(#{uri}): none"}
         | 
| 696 | 
            +
                        uri
         | 
| 697 | 
            +
                      end
         | 
| 654 698 |  | 
| 655 | 
            -
             | 
| 699 | 
            +
                      #log_debug {"get_curie(#{resource}) => #{curie}"}
         | 
| 656 700 |  | 
| 657 | 
            -
             | 
| 658 | 
            -
             | 
| 659 | 
            -
             | 
| 660 | 
            -
             | 
| 661 | 
            -
             | 
| 662 | 
            -
             | 
| 663 | 
            -
             | 
| 664 | 
            -
                  when @vocabulary && uri.index(@vocabulary) == 0
         | 
| 665 | 
            -
                    add_debug {"get_curie(#{uri}): vocabulary"}
         | 
| 666 | 
            -
                    uri.sub(@vocabulary, "")
         | 
| 667 | 
            -
                  when u = @uri_to_prefix.keys.detect {|u| uri.index(u.to_s) == 0}
         | 
| 668 | 
            -
                    add_debug {"get_curie(#{uri}): uri_to_prefix"}
         | 
| 669 | 
            -
                    # Use a defined prefix
         | 
| 670 | 
            -
                    prefix = @uri_to_prefix[u]
         | 
| 671 | 
            -
                    prefix(prefix, u)  # Define for output
         | 
| 672 | 
            -
                    uri.sub(u.to_s, "#{prefix}:")
         | 
| 673 | 
            -
                  when @options[:standard_prefixes] && vocab = RDF::Vocabulary.detect {|v| uri.index(v.to_uri.to_s) == 0}
         | 
| 674 | 
            -
                    add_debug {"get_curie(#{uri}): standard_prefixes"}
         | 
| 675 | 
            -
                    prefix = vocab.__name__.to_s.split('::').last.downcase
         | 
| 676 | 
            -
                    prefix(prefix, vocab.to_uri) # Define for output
         | 
| 677 | 
            -
                    uri.sub(vocab.to_uri.to_s, "#{prefix}:")
         | 
| 701 | 
            +
                      @uri_to_term_or_curie[uri] = curie
         | 
| 702 | 
            +
                    rescue ArgumentError => e
         | 
| 703 | 
            +
                      log_error("Invalid URI #{uri.inspect}: #{e.message}")
         | 
| 704 | 
            +
                      nil
         | 
| 705 | 
            +
                    end
         | 
| 706 | 
            +
                  when RDF::Node then resource.to_s
         | 
| 707 | 
            +
                  when RDF::Literal then nil
         | 
| 678 708 | 
             
                  else
         | 
| 679 | 
            -
                     | 
| 680 | 
            -
                     | 
| 709 | 
            +
                    log_error("Getting CURIE for #{resource.inspect}, which must be a resource")
         | 
| 710 | 
            +
                    nil
         | 
| 681 711 | 
             
                  end
         | 
| 682 | 
            -
             | 
| 683 | 
            -
                  #add_debug {"get_curie(#{resource}) => #{curie}"}
         | 
| 684 | 
            -
             | 
| 685 | 
            -
                  @uri_to_term_or_curie[uri] = curie
         | 
| 686 | 
            -
                rescue ArgumentError => e
         | 
| 687 | 
            -
                  raise RDF::WriterError, "Invalid URI #{uri.inspect}: #{e.message}"
         | 
| 688 712 | 
             
                end
         | 
| 689 713 | 
             
                private
         | 
| 690 714 |  | 
| @@ -700,18 +724,6 @@ module RDF::RDFa | |
| 700 724 | 
             
                  CGI.escapeHTML(str).gsub(/[\n\r]/) {|c| '&#x' + c.unpack('h').first + ';'}
         | 
| 701 725 | 
             
                end
         | 
| 702 726 |  | 
| 703 | 
            -
                # Increase depth around a method invocation
         | 
| 704 | 
            -
                # @yield
         | 
| 705 | 
            -
                #   Yields with no arguments
         | 
| 706 | 
            -
                # @yieldreturn [Object] returns the result of yielding
         | 
| 707 | 
            -
                # @return [Object]
         | 
| 708 | 
            -
                def depth
         | 
| 709 | 
            -
                  @depth += 1
         | 
| 710 | 
            -
                  ret = yield
         | 
| 711 | 
            -
                  @depth -= 1
         | 
| 712 | 
            -
                  ret
         | 
| 713 | 
            -
                end
         | 
| 714 | 
            -
             | 
| 715 727 | 
             
                # Set the template to use within block
         | 
| 716 728 | 
             
                # @param [Hash{Symbol => String}] templ template to use for block evaluation; merged in with the existing template.
         | 
| 717 729 | 
             
                # @yield
         | 
| @@ -743,20 +755,22 @@ module RDF::RDFa | |
| 743 755 | 
             
                # @return [String]
         | 
| 744 756 | 
             
                # @raise [RDF::WriterError]
         | 
| 745 757 | 
             
                def hamlify(template, locals = {})
         | 
| 746 | 
            -
                   | 
| 758 | 
            +
                  log_debug {"hamlify template: #{template}"}
         | 
| 747 759 | 
             
                  template = haml_template[template] if template.is_a?(Symbol)
         | 
| 748 760 |  | 
| 749 761 | 
             
                  template = template.align_left
         | 
| 750 | 
            -
                   | 
| 762 | 
            +
                  log_debug {"hamlify locals: #{locals.inspect}"}
         | 
| 751 763 |  | 
| 752 764 | 
             
                  Haml::Engine.new(template, @options[:haml_options] || HAML_OPTIONS).render(self, locals) do |*args|
         | 
| 753 765 | 
             
                    yield(*args) if block_given?
         | 
| 754 766 | 
             
                  end
         | 
| 755 767 | 
             
                rescue Haml::Error => e
         | 
| 756 | 
            -
                   | 
| 768 | 
            +
                  log_fatal("#{e.inspect}\n" +
         | 
| 757 769 | 
             
                    "rendering #{template}\n" +
         | 
| 758 770 | 
             
                    "with options #{(@options[:haml_options] || HAML_OPTIONS).inspect}\n" +
         | 
| 759 | 
            -
                    "and locals #{locals.inspect}"
         | 
| 771 | 
            +
                    "and locals #{locals.inspect}",
         | 
| 772 | 
            +
                    exception: RDF::WriterError
         | 
| 773 | 
            +
                  )
         | 
| 760 774 | 
             
                end
         | 
| 761 775 |  | 
| 762 776 | 
             
                ##
         | 
| @@ -794,18 +808,6 @@ module RDF::RDFa | |
| 794 808 | 
             
                def ref_count(node)
         | 
| 795 809 | 
             
                  @references.fetch(node, 0)
         | 
| 796 810 | 
             
                end
         | 
| 797 | 
            -
             | 
| 798 | 
            -
                # Add debug event to debug array, if specified
         | 
| 799 | 
            -
                #
         | 
| 800 | 
            -
                # @param [String] message
         | 
| 801 | 
            -
                # @yieldreturn [String] appended to message, to allow for lazy-evaulation of message
         | 
| 802 | 
            -
                def add_debug(message = "")
         | 
| 803 | 
            -
                  return unless ::RDF::RDFa.debug? || @debug
         | 
| 804 | 
            -
                  message = message + yield if block_given?
         | 
| 805 | 
            -
                  msg = "#{'  ' * @depth}#{message}"
         | 
| 806 | 
            -
                  STDERR.puts msg if ::RDF::RDFa.debug?
         | 
| 807 | 
            -
                  @debug << msg.force_encoding("utf-8") if @debug.is_a?(Array)
         | 
| 808 | 
            -
                end
         | 
| 809 811 | 
             
              end
         | 
| 810 812 | 
             
            end
         | 
| 811 813 |  |