rdf-rdfa 2.2.2 → 3.1.0
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 +7 -7
- data/VERSION +1 -1
- data/lib/rdf/rdfa.rb +2 -2
- data/lib/rdf/rdfa/context.rb +15 -15
- data/lib/rdf/rdfa/context/html.rb +2 -2
- data/lib/rdf/rdfa/context/xhtml.rb +2 -2
- data/lib/rdf/rdfa/context/xml.rb +11 -2
- data/lib/rdf/rdfa/expansion.rb +4 -4
- data/lib/rdf/rdfa/patches/string_hacks.rb +1 -1
- data/lib/rdf/rdfa/reader.rb +106 -95
- data/lib/rdf/rdfa/reader/nokogiri.rb +17 -21
- data/lib/rdf/rdfa/reader/rexml.rb +17 -17
- data/lib/rdf/rdfa/writer.rb +20 -18
- data/lib/rdf/rdfa/writer/haml_templates.rb +4 -4
- metadata +39 -60
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 41a438683b553f9eaa31a244a4fbbeeb2413b999f040b4a46980fe939d1891d2
         | 
| 4 | 
            +
              data.tar.gz: a191ff7cf36e120aa52491c8eea5b4cab05b48d5595c0486a6e9ed774093b39e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4e95a2ef75396bfead46f171d2366bf4019c7a6ffd9be70e1ae24614671d7f20719eb00476906ef17047bbf9ef9ed1ac7f711b5905e42c64094ac85134a48469
         | 
| 7 | 
            +
              data.tar.gz: b1cd79507874df6cb7f516a6ad87450b9d0e14e63784fe90191c862cd38c35a5520b33c315b287483aadc14800de677b200d7e94dcdb5ae6c54ae9fbf0c282d1
         | 
    
        data/README.md
    CHANGED
    
    | @@ -16,7 +16,7 @@ RDF::RDFa parses [RDFa][RDFa 1.1 Core] into statements or triples. | |
| 16 16 | 
             
            * Fully compliant RDFa 1.1 parser.
         | 
| 17 17 | 
             
            * Template-based Writer to generate XHTML+RDFa.
         | 
| 18 18 | 
             
              * Writer uses user-replacable [Haml][Haml]-based templates to generate RDFa.
         | 
| 19 | 
            -
            * If available, uses [Nokogiri][] for parsing HTML/SVG, falls back to REXML otherwise. For HTML5, include the [Nokogumbo][] gem for  | 
| 19 | 
            +
            * If available, uses [Nokogiri][] for parsing HTML/SVG, falls back to REXML otherwise. For HTML5, include the [Nokogumbo][] gem for a pure-HTML5 parser with better error detection.
         | 
| 20 20 |  | 
| 21 21 | 
             
            Install with `gem install rdf-rdfa`
         | 
| 22 22 |  | 
| @@ -397,12 +397,12 @@ The template hash defines four Haml templates: | |
| 397 397 | 
             
                }
         | 
| 398 398 |  | 
| 399 399 | 
             
            ## Dependencies
         | 
| 400 | 
            -
            * [Ruby](http://ruby-lang.org/) (>= 2. | 
| 401 | 
            -
            * [RDF.rb](http://rubygems.org/gems/rdf) ( | 
| 402 | 
            -
            * [Haml](https://rubygems.org/gems/haml) ( | 
| 403 | 
            -
            * [HTMLEntities](https://rubygems.org/gems/htmlentities) (>= 4.3 | 
| 404 | 
            -
            * Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1. | 
| 405 | 
            -
            * Soft dependency on [Nokogumbo](https://github.com/rubys/nokogumbo) (>=  | 
| 400 | 
            +
            * [Ruby](http://ruby-lang.org/) (>= 2.4)
         | 
| 401 | 
            +
            * [RDF.rb](http://rubygems.org/gems/rdf) (~> 3.1)
         | 
| 402 | 
            +
            * [Haml](https://rubygems.org/gems/haml) (~> 5.1)
         | 
| 403 | 
            +
            * [HTMLEntities](https://rubygems.org/gems/htmlentities) (>= 4.3)
         | 
| 404 | 
            +
            * Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.10)
         | 
| 405 | 
            +
            * Soft dependency on [Nokogumbo](https://github.com/rubys/nokogumbo) (>= 2.0)
         | 
| 406 406 |  | 
| 407 407 | 
             
            ## Documentation
         | 
| 408 408 | 
             
            Full documentation available on [Rubydoc.info][RDFa doc]
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            3.1.0
         | 
    
        data/lib/rdf/rdfa.rb
    CHANGED
    
    | @@ -31,9 +31,9 @@ module RDF | |
| 31 31 | 
             
                autoload :Reader,     'rdf/rdfa/reader'
         | 
| 32 32 | 
             
                autoload :Writer,     'rdf/rdfa/writer'
         | 
| 33 33 | 
             
                autoload :VERSION,    'rdf/rdfa/version'
         | 
| 34 | 
            -
             | 
| 34 | 
            +
             | 
| 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 38 | 
             
              end
         | 
| 39 | 
            -
            end
         | 
| 39 | 
            +
            end
         | 
    
        data/lib/rdf/rdfa/context.rb
    CHANGED
    
    | @@ -19,7 +19,7 @@ module RDF::RDFa | |
| 19 19 | 
             
                # @!attribute [r] terms
         | 
| 20 20 | 
             
                # @return [Hash{Symbol => RDF::URI}]
         | 
| 21 21 | 
             
                attr_reader :terms
         | 
| 22 | 
            -
             | 
| 22 | 
            +
             | 
| 23 23 | 
             
                # Default URI defined for this vocabulary
         | 
| 24 24 | 
             
                # @!attribute [r] vocabulary
         | 
| 25 25 | 
             
                # @return [RDF::URI]
         | 
| @@ -29,7 +29,7 @@ module RDF::RDFa | |
| 29 29 | 
             
                # @!attribute [r] uri
         | 
| 30 30 | 
             
                # @return [RDF::URI]
         | 
| 31 31 | 
             
                attr_reader :uri
         | 
| 32 | 
            -
             | 
| 32 | 
            +
             | 
| 33 33 | 
             
                ##
         | 
| 34 34 | 
             
                # Initialize a new context from the given URI.
         | 
| 35 35 | 
             
                #
         | 
| @@ -40,17 +40,17 @@ module RDF::RDFa | |
| 40 40 | 
             
                # @yieldparam [RDF::RDFa::Context] context
         | 
| 41 41 | 
             
                # @yieldreturn [void] ignored
         | 
| 42 42 | 
             
                # @return [RDF::RDFa::Context]
         | 
| 43 | 
            -
                def initialize(uri, options | 
| 43 | 
            +
                def initialize(uri, **options, &block)
         | 
| 44 44 | 
             
                  @uri = RDF::URI.intern(uri)
         | 
| 45 45 | 
             
                  @prefixes = options.fetch(:prefixes, {})
         | 
| 46 46 | 
             
                  @terms = options.fetch(:terms, {})
         | 
| 47 47 | 
             
                  @vocabulary = options[:vocabulary]
         | 
| 48 48 | 
             
                  @options = options.dup
         | 
| 49 | 
            -
             | 
| 49 | 
            +
             | 
| 50 50 | 
             
                  yield(self) if block_given?
         | 
| 51 51 | 
             
                  self
         | 
| 52 52 | 
             
                end
         | 
| 53 | 
            -
             | 
| 53 | 
            +
             | 
| 54 54 | 
             
                ##
         | 
| 55 55 | 
             
                # @return [RDF::Util::Cache]
         | 
| 56 56 | 
             
                # @private
         | 
| @@ -67,7 +67,7 @@ module RDF::RDFa | |
| 67 67 | 
             
                def self.repository
         | 
| 68 68 | 
             
                  @repository ||= RDF::Repository.new(title: "RDFa Contexts")
         | 
| 69 69 | 
             
                end
         | 
| 70 | 
            -
             | 
| 70 | 
            +
             | 
| 71 71 | 
             
                ##
         | 
| 72 72 | 
             
                # Set repository used for saving contexts
         | 
| 73 73 | 
             
                # @param [RDF::Repository] repo
         | 
| @@ -82,14 +82,14 @@ module RDF::RDFa | |
| 82 82 | 
             
                  end
         | 
| 83 83 | 
             
                  @repository = repo
         | 
| 84 84 | 
             
                end
         | 
| 85 | 
            -
             | 
| 85 | 
            +
             | 
| 86 86 | 
             
                # Return a context faulting through the cache
         | 
| 87 87 | 
             
                # @return [RDF::RDFa::Context]
         | 
| 88 88 | 
             
                def self.find(uri)
         | 
| 89 89 | 
             
                  uri = RDF::URI.intern(uri)
         | 
| 90 | 
            -
             | 
| 90 | 
            +
             | 
| 91 91 | 
             
                  return cache[uri] unless cache[uri].nil?
         | 
| 92 | 
            -
             | 
| 92 | 
            +
             | 
| 93 93 | 
             
                  # Two part creation to prevent re-entrancy problems if p1 => p2 and p2 => p1
         | 
| 94 94 | 
             
                  # Return something to make the caller happy if we're re-entered
         | 
| 95 95 | 
             
                  cache[uri] = Struct.new(:prefixes, :terms, :vocabulary).new({}, {}, nil)
         | 
| @@ -97,7 +97,7 @@ module RDF::RDFa | |
| 97 97 | 
             
                  cache[uri] = new(uri) do |context|
         | 
| 98 98 | 
             
                    log_debug("process_context: retrieve context <#{uri}>") if respond_to?(:log_debug)
         | 
| 99 99 | 
             
                    Context.load(uri)
         | 
| 100 | 
            -
                    context.parse(repository.query(graph_name: uri))
         | 
| 100 | 
            +
                    context.parse(repository.query({graph_name: uri}))
         | 
| 101 101 | 
             
                  end
         | 
| 102 102 | 
             
                rescue Exception => e
         | 
| 103 103 | 
             
                  if respond_to?(:log_fatal)
         | 
| @@ -112,12 +112,12 @@ module RDF::RDFa | |
| 112 112 | 
             
                  uri = RDF::URI.intern(uri)
         | 
| 113 113 | 
             
                  repository.load(uri.to_s, base_uri: uri, graph_name: uri) unless repository.has_graph?(uri)
         | 
| 114 114 | 
             
                end
         | 
| 115 | 
            -
             | 
| 115 | 
            +
             | 
| 116 116 | 
             
                # @return [RDF::Repository]
         | 
| 117 117 | 
             
                def repository
         | 
| 118 118 | 
             
                  Context.repository
         | 
| 119 119 | 
             
                end
         | 
| 120 | 
            -
             | 
| 120 | 
            +
             | 
| 121 121 | 
             
                ##
         | 
| 122 122 | 
             
                # Defines the given named URI prefix for this context.
         | 
| 123 123 | 
             
                #
         | 
| @@ -151,7 +151,7 @@ module RDF::RDFa | |
| 151 151 | 
             
                  name = name.to_s.empty? ? nil : (name.respond_to?(:to_sym) ? name.to_sym : name.to_s.to_sym)
         | 
| 152 152 | 
             
                  uri.nil? ? terms[name] : terms[name] = uri
         | 
| 153 153 | 
             
                end
         | 
| 154 | 
            -
             | 
| 154 | 
            +
             | 
| 155 155 | 
             
                ##
         | 
| 156 156 | 
             
                # Extract vocabulary, prefix mappings and terms from a enumerable object into an instance
         | 
| 157 157 | 
             
                #
         | 
| @@ -179,14 +179,14 @@ module RDF::RDFa | |
| 179 179 | 
             
                    log_debug("process_context: uri=#{uri.inspect}, term=#{term.inspect}, prefix=#{prefix.inspect}, vocabulary=#{vocab.inspect}") if respond_to?(:log_debug)
         | 
| 180 180 |  | 
| 181 181 | 
             
                    @vocabulary = vocab if vocab
         | 
| 182 | 
            -
             | 
| 182 | 
            +
             | 
| 183 183 | 
             
                    # For every extracted triple that is the common subject of an rdfa:prefix and an rdfa:uri
         | 
| 184 184 | 
             
                    # predicate, create a mapping from the object literal of the rdfa:prefix predicate to the
         | 
| 185 185 | 
             
                    # object literal of the rdfa:uri predicate. Add or update this mapping in the local list of
         | 
| 186 186 | 
             
                    # URI mappings after transforming the 'prefix' component to lower-case.
         | 
| 187 187 | 
             
                    # For every extracted
         | 
| 188 188 | 
             
                    prefix(prefix.downcase, uri) if uri && prefix && prefix != "_"
         | 
| 189 | 
            -
             | 
| 189 | 
            +
             | 
| 190 190 | 
             
                    # triple that is the common subject of an rdfa:term and an rdfa:uri predicate, create a
         | 
| 191 191 | 
             
                    # mapping from the object literal of the rdfa:term predicate to the object literal of the
         | 
| 192 192 | 
             
                    # rdfa:uri predicate. Add or update this mapping in the local term mappings.
         | 
| @@ -4,8 +4,8 @@ | |
| 4 4 | 
             
            class RDF::RDFa::Context
         | 
| 5 5 | 
             
              def self.find_with_html_rdfa_1_1(uri)
         | 
| 6 6 | 
             
                if uri.to_s == "http://www.w3.org/2011/rdfa-context/html-rdfa-1.1"
         | 
| 7 | 
            -
                  @_html_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/html-rdfa-1.1"), | 
| 8 | 
            -
                   | 
| 7 | 
            +
                  @_html_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/html-rdfa-1.1"),
         | 
| 8 | 
            +
                  )
         | 
| 9 9 | 
             
                else
         | 
| 10 10 | 
             
                  find_without_html_rdfa_1_1(uri)
         | 
| 11 11 | 
             
                end
         | 
| @@ -4,7 +4,7 @@ | |
| 4 4 | 
             
            class RDF::RDFa::Context
         | 
| 5 5 | 
             
              def self.find_with_xhtml_rdfa_1_1(uri)
         | 
| 6 6 | 
             
                if uri.to_s == "http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1"
         | 
| 7 | 
            -
                  @_xhtml_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1"), | 
| 7 | 
            +
                  @_xhtml_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/xhtml-rdfa-1.1"),
         | 
| 8 8 | 
             
                    terms: {
         | 
| 9 9 | 
             
                      alternate:  "http://www.w3.org/1999/xhtml/vocab#alternate",
         | 
| 10 10 | 
             
                      appendix:   "http://www.w3.org/1999/xhtml/vocab#appendix",
         | 
| @@ -32,7 +32,7 @@ class RDF::RDFa::Context | |
| 32 32 | 
             
                      top:        "http://www.w3.org/1999/xhtml/vocab#top",
         | 
| 33 33 | 
             
                      up:         "http://www.w3.org/1999/xhtml/vocab#up",
         | 
| 34 34 | 
             
                    },
         | 
| 35 | 
            -
                   | 
| 35 | 
            +
                  )
         | 
| 36 36 | 
             
                else
         | 
| 37 37 | 
             
                  find_without_xhtml_rdfa_1_1(uri)
         | 
| 38 38 | 
             
                end
         | 
    
        data/lib/rdf/rdfa/context/xml.rb
    CHANGED
    
    | @@ -4,8 +4,9 @@ | |
| 4 4 | 
             
            class RDF::RDFa::Context
         | 
| 5 5 | 
             
              def self.find_with_rdfa_1_1(uri)
         | 
| 6 6 | 
             
                if uri.to_s == "http://www.w3.org/2011/rdfa-context/rdfa-1.1"
         | 
| 7 | 
            -
                  @_rdfa_1_1_prof ||= RDF::RDFa::Context.new(RDF::URI("http://www.w3.org/2011/rdfa-context/rdfa-1.1"), | 
| 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 | 
            +
                      as:      "https://www.w3.org/ns/activitystreams#",
         | 
| 9 10 | 
             
                      cc:      "http://creativecommons.org/ns#",
         | 
| 10 11 | 
             
                      csvw:    "http://www.w3.org/ns/csvw#",
         | 
| 11 12 | 
             
                      ctag:    "http://commontag.org/ns#",
         | 
| @@ -13,11 +14,16 @@ class RDF::RDFa::Context | |
| 13 14 | 
             
                      dc11:    "http://purl.org/dc/elements/1.1/",
         | 
| 14 15 | 
             
                      dcat:    "http://www.w3.org/ns/dcat#",
         | 
| 15 16 | 
             
                      dcterms: "http://purl.org/dc/terms/",
         | 
| 17 | 
            +
                      dqv:     "http://www.w3.org/ns/dqv#",
         | 
| 18 | 
            +
                      duv:     "https://www.w3.org/ns/duv#",
         | 
| 16 19 | 
             
                      foaf:    "http://xmlns.com/foaf/0.1/",
         | 
| 17 20 | 
             
                      gr:      "http://purl.org/goodrelations/v1#",
         | 
| 18 21 | 
             
                      grddl:   "http://www.w3.org/2003/g/data-view#",
         | 
| 19 22 | 
             
                      ical:    "http://www.w3.org/2002/12/cal/icaltzd#",
         | 
| 23 | 
            +
                      ldp:     "http://www.w3.org/ns/ldp#",
         | 
| 20 24 | 
             
                      ma:      "http://www.w3.org/ns/ma-ont#",
         | 
| 25 | 
            +
                      oa:      "http://www.w3.org/ns/oa#",
         | 
| 26 | 
            +
                      odrl:    "http://www.w3.org/ns/odrl/2/",
         | 
| 21 27 | 
             
                      og:      "http://ogp.me/ns#",
         | 
| 22 28 | 
             
                      org:     "http://www.w3.org/ns/org#",
         | 
| 23 29 | 
             
                      owl:     "http://www.w3.org/2002/07/owl#",
         | 
| @@ -34,6 +40,9 @@ class RDF::RDFa::Context | |
| 34 40 | 
             
                      sioc:    "http://rdfs.org/sioc/ns#",
         | 
| 35 41 | 
             
                      skos:    "http://www.w3.org/2004/02/skos/core#",
         | 
| 36 42 | 
             
                      skosxl:  "http://www.w3.org/2008/05/skos-xl#",
         | 
| 43 | 
            +
                      sosa:    "http://www.w3.org/ns/sosa/",
         | 
| 44 | 
            +
                      ssn:     "http://www.w3.org/ns/ssn/",
         | 
| 45 | 
            +
                      time:    "http://www.w3.org/2006/time#",
         | 
| 37 46 | 
             
                      v:       "http://rdf.data-vocabulary.org/#",
         | 
| 38 47 | 
             
                      vcard:   "http://www.w3.org/2006/vcard/ns#",
         | 
| 39 48 | 
             
                      void:    "http://rdfs.org/ns/void#",
         | 
| @@ -48,7 +57,7 @@ class RDF::RDFa::Context | |
| 48 57 | 
             
                      license:     "http://www.w3.org/1999/xhtml/vocab#license",
         | 
| 49 58 | 
             
                      role:        "http://www.w3.org/1999/xhtml/vocab#role",
         | 
| 50 59 | 
             
                    },
         | 
| 51 | 
            -
                   | 
| 60 | 
            +
                  )
         | 
| 52 61 | 
             
                else
         | 
| 53 62 | 
             
                  find_without_rdfa_1_1(uri)
         | 
| 54 63 | 
             
                end
         | 
    
        data/lib/rdf/rdfa/expansion.rb
    CHANGED
    
    | @@ -17,7 +17,7 @@ module RDF::RDFa | |
| 17 17 | 
             
                  add_debug("expand") {"Repository has #{repository.count} statements"}
         | 
| 18 18 |  | 
| 19 19 | 
             
                  # Load missing vocabularies
         | 
| 20 | 
            -
                  vocabs = repository.query(predicate: RDF::RDFA.usesVocabulary).to_a.map(&:object)
         | 
| 20 | 
            +
                  vocabs = repository.query({predicate: RDF::RDFA.usesVocabulary}).to_a.map(&:object)
         | 
| 21 21 | 
             
                  vocabs.map! do |vocab|
         | 
| 22 22 | 
             
                    begin
         | 
| 23 23 | 
             
                      # Create the name with a predictable name so that it is enumerated and can be found
         | 
| @@ -108,7 +108,7 @@ module RDF::RDFa | |
| 108 108 | 
             
                  def consequent(subject, prediate, object)
         | 
| 109 109 | 
             
                    consequents << RDF::Query::Pattern.new(subject, prediate, object)
         | 
| 110 110 | 
             
                  end
         | 
| 111 | 
            -
             | 
| 111 | 
            +
             | 
| 112 112 | 
             
                  ##
         | 
| 113 113 | 
             
                  # Execute the rule against queryable, yielding each consequent with bindings
         | 
| 114 114 | 
             
                  #
         | 
| @@ -227,7 +227,7 @@ module RDF::RDFa | |
| 227 227 | 
             
                        to_add << statement
         | 
| 228 228 | 
             
                      end
         | 
| 229 229 | 
             
                    end
         | 
| 230 | 
            -
             | 
| 230 | 
            +
             | 
| 231 231 | 
             
                    repository.insert(*to_add)
         | 
| 232 232 | 
             
                  end
         | 
| 233 233 | 
             
                end
         | 
| @@ -250,7 +250,7 @@ module RDF::RDFa | |
| 250 250 | 
             
                        to_add << statement
         | 
| 251 251 | 
             
                      end
         | 
| 252 252 | 
             
                    end
         | 
| 253 | 
            -
             | 
| 253 | 
            +
             | 
| 254 254 | 
             
                    repository.insert(*to_add)
         | 
| 255 255 | 
             
                  end
         | 
| 256 256 |  | 
    
        data/lib/rdf/rdfa/reader.rb
    CHANGED
    
    | @@ -31,7 +31,7 @@ module RDF::RDFa | |
| 31 31 | 
             
                include RDF::Util::Logger
         | 
| 32 32 |  | 
| 33 33 | 
             
                XHTML = "http://www.w3.org/1999/xhtml"
         | 
| 34 | 
            -
             | 
| 34 | 
            +
             | 
| 35 35 | 
             
                # Content model for @about and @resource. In RDFa 1.0, this was URIorSafeCURIE
         | 
| 36 36 | 
             
                SafeCURIEorCURIEorIRI = {
         | 
| 37 37 | 
             
                  :"rdfa1.0" => [:safe_curie, :uri, :bnode],
         | 
| @@ -83,17 +83,17 @@ module RDF::RDFa | |
| 83 83 | 
             
                # @!attribute [r] host_language
         | 
| 84 84 | 
             
                # @return [:xml, :xhtml1, :xhtml5, :html4, :html5, :svg]
         | 
| 85 85 | 
             
                attr_reader :host_language
         | 
| 86 | 
            -
             | 
| 86 | 
            +
             | 
| 87 87 | 
             
                # Version
         | 
| 88 88 | 
             
                # @!attribute [r] version
         | 
| 89 89 | 
             
                # @return [:"rdfa1.0", :"rdfa1.1"]
         | 
| 90 90 | 
             
                attr_reader :version
         | 
| 91 | 
            -
             | 
| 91 | 
            +
             | 
| 92 92 | 
             
                # Repository used for collecting triples.
         | 
| 93 93 | 
             
                # @!attribute [r] repository
         | 
| 94 94 | 
             
                # @return [RDF::Repository]
         | 
| 95 95 | 
             
                attr_reader :repository
         | 
| 96 | 
            -
             | 
| 96 | 
            +
             | 
| 97 97 | 
             
                # Returns the XML implementation module for this reader instance.
         | 
| 98 98 | 
             
                #
         | 
| 99 99 | 
             
                # @!attribute [rw] implementation
         | 
| @@ -124,7 +124,7 @@ module RDF::RDFa | |
| 124 124 | 
             
                  # @!attribute [rw] parent_subject
         | 
| 125 125 | 
             
                  # @return [RDF::URI]
         | 
| 126 126 | 
             
                  attr_accessor :parent_subject
         | 
| 127 | 
            -
             | 
| 127 | 
            +
             | 
| 128 128 | 
             
                  ##
         | 
| 129 129 | 
             
                  # The parent object.
         | 
| 130 130 | 
             
                  #
         | 
| @@ -138,14 +138,14 @@ module RDF::RDFa | |
| 138 138 | 
             
                  # @!attribute [rw] parent_object
         | 
| 139 139 | 
             
                  # @return [RDF::URI]
         | 
| 140 140 | 
             
                  attr_accessor :parent_object
         | 
| 141 | 
            -
             | 
| 141 | 
            +
             | 
| 142 142 | 
             
                  ##
         | 
| 143 143 | 
             
                  # A list of current, in-scope URI mappings.
         | 
| 144 144 | 
             
                  #
         | 
| 145 145 | 
             
                  # @!attribute [rw] uri_mappings
         | 
| 146 146 | 
             
                  # @return [Hash{Symbol => String}]
         | 
| 147 147 | 
             
                  attr_accessor :uri_mappings
         | 
| 148 | 
            -
             | 
| 148 | 
            +
             | 
| 149 149 | 
             
                  ##
         | 
| 150 150 | 
             
                  # A list of current, in-scope Namespaces. This is the subset of uri_mappings
         | 
| 151 151 | 
             
                  # which are defined using xmlns.
         | 
| @@ -153,7 +153,7 @@ module RDF::RDFa | |
| 153 153 | 
             
                  # @!attribute [rw] namespaces
         | 
| 154 154 | 
             
                  # @return [Hash{String => Namespace}]
         | 
| 155 155 | 
             
                  attr_accessor :namespaces
         | 
| 156 | 
            -
             | 
| 156 | 
            +
             | 
| 157 157 | 
             
                  ##
         | 
| 158 158 | 
             
                  # A list of incomplete triples.
         | 
| 159 159 | 
             
                  #
         | 
| @@ -165,14 +165,14 @@ module RDF::RDFa | |
| 165 165 | 
             
                  # @!attribute [rw] incomplete_triples
         | 
| 166 166 | 
             
                  # @return [Array<Array<RDF::URI, RDF::Resource>>]
         | 
| 167 167 | 
             
                  attr_accessor :incomplete_triples
         | 
| 168 | 
            -
             | 
| 168 | 
            +
             | 
| 169 169 | 
             
                  ##
         | 
| 170 170 | 
             
                  # The language. Note that there is no default language.
         | 
| 171 171 | 
             
                  #
         | 
| 172 172 | 
             
                  # @!attribute [rw] language
         | 
| 173 173 | 
             
                  # @return [Symbol]
         | 
| 174 174 | 
             
                  attr_accessor :language
         | 
| 175 | 
            -
             | 
| 175 | 
            +
             | 
| 176 176 | 
             
                  ##
         | 
| 177 177 | 
             
                  # The term mappings, a list of terms and their associated URIs.
         | 
| 178 178 | 
             
                  #
         | 
| @@ -183,7 +183,7 @@ module RDF::RDFa | |
| 183 183 | 
             
                  # @!attribute [rw] term_mappings
         | 
| 184 184 | 
             
                  # @return [Hash{Symbol => RDF::URI}]
         | 
| 185 185 | 
             
                  attr_accessor :term_mappings
         | 
| 186 | 
            -
             | 
| 186 | 
            +
             | 
| 187 187 | 
             
                  ##
         | 
| 188 188 | 
             
                  # The default vocabulary
         | 
| 189 189 | 
             
                  #
         | 
| @@ -230,7 +230,7 @@ module RDF::RDFa | |
| 230 230 | 
             
                    @namespaces = from.namespaces.clone
         | 
| 231 231 | 
             
                    @list_mapping = from.list_mapping # Don't clone
         | 
| 232 232 | 
             
                  end
         | 
| 233 | 
            -
             | 
| 233 | 
            +
             | 
| 234 234 | 
             
                  def inspect
         | 
| 235 235 | 
             
                    v = ['base', 'parent_subject', 'parent_object', 'language', 'default_vocabulary'].map do |a|
         | 
| 236 236 | 
             
                      "#{a}=#{o = self.send(a); o.respond_to?(:to_ntriples) ? o.to_ntriples : o.inspect}"
         | 
| @@ -297,7 +297,7 @@ module RDF::RDFa | |
| 297 297 | 
             
                # @yieldparam  [RDF::Reader] reader
         | 
| 298 298 | 
             
                # @yieldreturn [void] ignored
         | 
| 299 299 | 
             
                # @raise [RDF::ReaderError] if _validate_
         | 
| 300 | 
            -
                def initialize(input = $stdin, options | 
| 300 | 
            +
                def initialize(input = $stdin, **options, &block)
         | 
| 301 301 | 
             
                  super do
         | 
| 302 302 | 
             
                    @options = {reference_folding: true}.merge(@options)
         | 
| 303 303 | 
             
                    @repository = RDF::Repository.new
         | 
| @@ -327,12 +327,24 @@ module RDF::RDFa | |
| 327 327 | 
             
                    end
         | 
| 328 328 | 
             
                    self.extend(@implementation)
         | 
| 329 329 |  | 
| 330 | 
            -
                    detect_host_language_version(input, options)
         | 
| 330 | 
            +
                    detect_host_language_version(input, **options)
         | 
| 331 331 |  | 
| 332 | 
            -
                     | 
| 332 | 
            +
                    parse_lib = if @library == :nokogiri && @host_language == :html5
         | 
| 333 | 
            +
                      begin
         | 
| 334 | 
            +
                        require 'nokogumbo' unless defined?(::Nokogumbo)
         | 
| 335 | 
            +
                        :nokobumbo
         | 
| 336 | 
            +
                      rescue LoadError
         | 
| 337 | 
            +
                        :nokogiri
         | 
| 338 | 
            +
                      end
         | 
| 339 | 
            +
                    else
         | 
| 340 | 
            +
                      @library
         | 
| 341 | 
            +
                    end
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                    parse_lib = @library == :nokogiri && defined?(::Nokogumbo) ? :nokogumbo : @library
         | 
| 344 | 
            +
                    add_info(@doc, "version = #{@version},  host_language = #{@host_language}, library = #{parse_lib}, rdfagraph = #{@options[:rdfagraph].inspect}, expand = #{@options[:vocab_expansion]}")
         | 
| 333 345 |  | 
| 334 346 | 
             
                    begin
         | 
| 335 | 
            -
                      initialize_xml(input, options)
         | 
| 347 | 
            +
                      initialize_xml(input, **options)
         | 
| 336 348 | 
             
                    rescue
         | 
| 337 349 | 
             
                      add_error(nil, "Malformed document: #{$!.message}")
         | 
| 338 350 | 
             
                    end
         | 
| @@ -369,6 +381,38 @@ module RDF::RDFa | |
| 369 381 | 
             
                  end
         | 
| 370 382 | 
             
                end
         | 
| 371 383 |  | 
| 384 | 
            +
                ##
         | 
| 385 | 
            +
                # Extracts RDF from script element, or embeded RDF/XML
         | 
| 386 | 
            +
                def extract_script(el, input, type, **options, &block)
         | 
| 387 | 
            +
                  add_debug(el, "script element of type #{type}")
         | 
| 388 | 
            +
                  begin
         | 
| 389 | 
            +
                    # Formats don't exist unless they've been required
         | 
| 390 | 
            +
                    case type.to_s
         | 
| 391 | 
            +
                    when 'application/csvm+json' then require 'rdf/tabular'
         | 
| 392 | 
            +
                    when 'application/ld+json'   then require 'json/ld'
         | 
| 393 | 
            +
                    when 'application/rdf+xml'   then require 'rdf/rdfxml'
         | 
| 394 | 
            +
                    when 'text/ntriples'         then require 'rdf/ntriples'
         | 
| 395 | 
            +
                    when 'text/turtle'           then require 'rdf/turtle'
         | 
| 396 | 
            +
                    end
         | 
| 397 | 
            +
                  rescue LoadError
         | 
| 398 | 
            +
                  end
         | 
| 399 | 
            +
             | 
| 400 | 
            +
                  @readers ||= {}
         | 
| 401 | 
            +
                  reader = @readers[type.to_s] = RDF::Reader.for(content_type: type.to_s) unless @readers.has_key?(type.to_s)
         | 
| 402 | 
            +
                  if reader = @readers[type.to_s]
         | 
| 403 | 
            +
                    add_debug(el, "=> reader #{reader.to_sym}")
         | 
| 404 | 
            +
                    # Wrap input in a RemoteDocument with appropriate content-type and base
         | 
| 405 | 
            +
                    doc = if input.is_a?(String)
         | 
| 406 | 
            +
                      RDF::Util::File::RemoteDocument.new(input, content_type: type.to_s, **options)
         | 
| 407 | 
            +
                    else
         | 
| 408 | 
            +
                      input
         | 
| 409 | 
            +
                    end
         | 
| 410 | 
            +
                    reader.new(doc, **options).each(&block)
         | 
| 411 | 
            +
                  else
         | 
| 412 | 
            +
                    add_debug(el, "=> no reader found")
         | 
| 413 | 
            +
                  end
         | 
| 414 | 
            +
                end
         | 
| 415 | 
            +
             | 
| 372 416 | 
             
                ##
         | 
| 373 417 | 
             
                # Iterates the given block for each RDF statement in the input.
         | 
| 374 418 | 
             
                #
         | 
| @@ -388,62 +432,19 @@ module RDF::RDFa | |
| 388 432 | 
             
                      # parse
         | 
| 389 433 | 
             
                      parse_whole_document(@doc, RDF::URI(base_uri))
         | 
| 390 434 |  | 
| 391 | 
            -
                      def extract_script(el, input, type, options, &block)
         | 
| 392 | 
            -
                        add_debug(el, "script element of type #{type}")
         | 
| 393 | 
            -
                        begin
         | 
| 394 | 
            -
                          # Formats don't exist unless they've been required
         | 
| 395 | 
            -
                          case type.to_s
         | 
| 396 | 
            -
                          when 'application/csvm+json' then require 'rdf/tabular'
         | 
| 397 | 
            -
                          when 'application/ld+json'   then require 'json/ld'
         | 
| 398 | 
            -
                          when 'application/rdf+xml'   then require 'rdf/rdfxml'
         | 
| 399 | 
            -
                          when 'text/ntriples'         then require 'rdf/ntriples'
         | 
| 400 | 
            -
                          when 'text/turtle'           then require 'rdf/turtle'
         | 
| 401 | 
            -
                          end
         | 
| 402 | 
            -
                        rescue LoadError
         | 
| 403 | 
            -
                        end
         | 
| 404 | 
            -
             | 
| 405 | 
            -
                        if reader = RDF::Reader.for(content_type: type.to_s)
         | 
| 406 | 
            -
                          add_debug(el, "=> reader #{reader.to_sym}")
         | 
| 407 | 
            -
                          # Wrap input in a RemoteDocument with appropriate content-type and base
         | 
| 408 | 
            -
                          doc = if input.is_a?(String)
         | 
| 409 | 
            -
                            RDF::Util::File::RemoteDocument.new(input,
         | 
| 410 | 
            -
                                                                options.merge(
         | 
| 411 | 
            -
                                                                  content_type: type.to_s,
         | 
| 412 | 
            -
                                                                  base_uri: base_uri
         | 
| 413 | 
            -
                                                                ))
         | 
| 414 | 
            -
                          else
         | 
| 415 | 
            -
                            input
         | 
| 416 | 
            -
                          end
         | 
| 417 | 
            -
                          reader.new(doc, options).each(&block)
         | 
| 418 | 
            -
                        else
         | 
| 419 | 
            -
                          add_debug(el, "=> no reader found")
         | 
| 420 | 
            -
                        end
         | 
| 421 | 
            -
                      end
         | 
| 422 | 
            -
                    
         | 
| 423 435 | 
             
                      # Look for Embedded RDF/XML
         | 
| 424 436 | 
             
                      unless @root.xpath("//rdf:RDF", "rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#").empty?
         | 
| 425 | 
            -
                        extract_script(@root, @doc, "application/rdf+xml",  | 
| 437 | 
            +
                        extract_script(@root, @doc, "application/rdf+xml", **@options.merge(base_uri: base_uri)) do |statement|
         | 
| 426 438 | 
             
                          @repository << statement
         | 
| 427 439 | 
             
                        end
         | 
| 428 440 | 
             
                      end
         | 
| 429 441 |  | 
| 430 | 
            -
                      # Look for Embedded scripts
         | 
| 431 | 
            -
                      @root.css("script[type]").each do |el|
         | 
| 432 | 
            -
                        type = el.attribute("type")
         | 
| 433 | 
            -
             | 
| 434 | 
            -
                        text = el.inner_html.sub(%r(\A\s*\<!\[CDATA\[)m, '').sub(%r(\]\]>\s*\Z)m, '')
         | 
| 435 | 
            -
             | 
| 436 | 
            -
                        extract_script(el, text, type, @options) do |statement|
         | 
| 437 | 
            -
                          @repository << statement
         | 
| 438 | 
            -
                        end
         | 
| 439 | 
            -
                      end
         | 
| 440 | 
            -
                    
         | 
| 441 442 | 
             
                      # Look for Embedded microdata
         | 
| 442 443 | 
             
                      unless @root.xpath("//@itemscope").empty?
         | 
| 443 444 | 
             
                        begin
         | 
| 444 445 | 
             
                          require 'rdf/microdata'
         | 
| 445 446 | 
             
                          add_debug(@doc, "process microdata")
         | 
| 446 | 
            -
                          @repository << RDF::Microdata::Reader.new(@doc, options)
         | 
| 447 | 
            +
                          @repository << RDF::Microdata::Reader.new(@doc, **options)
         | 
| 447 448 | 
             
                        rescue LoadError
         | 
| 448 449 | 
             
                          add_debug(@doc, "microdata detected, not processed")
         | 
| 449 450 | 
             
                        end
         | 
| @@ -454,7 +455,7 @@ module RDF::RDFa | |
| 454 455 |  | 
| 455 456 | 
             
                      # Perform vocabulary expansion
         | 
| 456 457 | 
             
                      expand(@repository) if @options[:vocab_expansion]
         | 
| 457 | 
            -
             | 
| 458 | 
            +
             | 
| 458 459 | 
             
                      @processed = true
         | 
| 459 460 | 
             
                    end
         | 
| 460 461 |  | 
| @@ -493,7 +494,7 @@ module RDF::RDFa | |
| 493 494 | 
             
                  end
         | 
| 494 495 | 
             
                  enum_for(:each_triple)
         | 
| 495 496 | 
             
                end
         | 
| 496 | 
            -
             | 
| 497 | 
            +
             | 
| 497 498 | 
             
                private
         | 
| 498 499 |  | 
| 499 500 | 
             
                # Keep track of allocated BNodes
         | 
| @@ -501,12 +502,12 @@ module RDF::RDFa | |
| 501 502 | 
             
                  @bnode_cache ||= {}
         | 
| 502 503 | 
             
                  @bnode_cache[value.to_s] ||= RDF::Node.new(value)
         | 
| 503 504 | 
             
                end
         | 
| 504 | 
            -
             | 
| 505 | 
            +
             | 
| 505 506 | 
             
                # Figure out the document path, if it is an Element or Attribute
         | 
| 506 507 | 
             
                def node_path(node)
         | 
| 507 508 | 
             
                  "<#{base_uri}>#{node.respond_to?(:display_path) ? node.display_path : node}"
         | 
| 508 509 | 
             
                end
         | 
| 509 | 
            -
             | 
| 510 | 
            +
             | 
| 510 511 | 
             
                # Add debug event to debug array, if specified
         | 
| 511 512 | 
             
                #
         | 
| 512 513 | 
             
                # @param [#display_path, #to_s] node XML Node or string for showing context
         | 
| @@ -519,15 +520,15 @@ module RDF::RDFa | |
| 519 520 | 
             
                def add_info(node, message, process_class = RDF::RDFA.Info, &block)
         | 
| 520 521 | 
             
                  add_processor_message(node, message, process_class, &block)
         | 
| 521 522 | 
             
                end
         | 
| 522 | 
            -
             | 
| 523 | 
            +
             | 
| 523 524 | 
             
                def add_warning(node, message, process_class = RDF::RDFA.Warning)
         | 
| 524 525 | 
             
                  add_processor_message(node, message, process_class)
         | 
| 525 526 | 
             
                end
         | 
| 526 | 
            -
             | 
| 527 | 
            +
             | 
| 527 528 | 
             
                def add_error(node, message, process_class = RDF::RDFA.Error)
         | 
| 528 529 | 
             
                  add_processor_message(node, message, process_class)
         | 
| 529 530 | 
             
                end
         | 
| 530 | 
            -
             | 
| 531 | 
            +
             | 
| 531 532 | 
             
                def add_processor_message(node, message, process_class, &block)
         | 
| 532 533 | 
             
                  case process_class
         | 
| 533 534 | 
             
                  when RDF::RDFA.Error    then log_error(node_path(node), message, &block)
         | 
| @@ -552,7 +553,7 @@ module RDF::RDFa | |
| 552 553 | 
             
                        RDF::Statement.new(nc, RDF::PTR.expression, node.path, graph_name: RDF::RDFA.ProcessorGraph)
         | 
| 553 554 | 
             
                      ]
         | 
| 554 555 | 
             
                    end
         | 
| 555 | 
            -
             | 
| 556 | 
            +
             | 
| 556 557 | 
             
                    @repository.insert(*processor_statements)
         | 
| 557 558 | 
             
                    if cb = @options[:processor_callback]
         | 
| 558 559 | 
             
                      processor_statements.each {|s| cb.call(s)}
         | 
| @@ -591,7 +592,7 @@ module RDF::RDFa | |
| 591 592 |  | 
| 592 593 | 
             
                  # initialize the evaluation context with the appropriate base
         | 
| 593 594 | 
             
                  evaluation_context = EvaluationContext.new(base, @host_defaults)
         | 
| 594 | 
            -
             | 
| 595 | 
            +
             | 
| 595 596 | 
             
                  if @version != :"rdfa1.0"
         | 
| 596 597 | 
             
                    # Process default vocabularies
         | 
| 597 598 | 
             
                    load_initial_contexts(@host_defaults[:initial_contexts]) do |which, value|
         | 
| @@ -603,11 +604,11 @@ module RDF::RDFa | |
| 603 604 | 
             
                      end
         | 
| 604 605 | 
             
                    end
         | 
| 605 606 | 
             
                  end
         | 
| 606 | 
            -
             | 
| 607 | 
            +
             | 
| 607 608 | 
             
                  traverse(root, evaluation_context)
         | 
| 608 609 | 
             
                  add_debug("", "parse_whole_doc: traversal complete'")
         | 
| 609 610 | 
             
                end
         | 
| 610 | 
            -
             | 
| 611 | 
            +
             | 
| 611 612 | 
             
                # Parse and process URI mappings, Term mappings and a default vocabulary from @context
         | 
| 612 613 | 
             
                #
         | 
| 613 614 | 
             
                # Yields each mapping
         | 
| @@ -725,7 +726,7 @@ module RDF::RDFa | |
| 725 726 | 
             
                    add_error(element, "Can't parse nil element")
         | 
| 726 727 | 
             
                    return nil
         | 
| 727 728 | 
             
                  end
         | 
| 728 | 
            -
             | 
| 729 | 
            +
             | 
| 729 730 | 
             
                  add_debug(element) { "ec: #{evaluation_context.inspect}" }
         | 
| 730 731 |  | 
| 731 732 | 
             
                  # local variables [7.5 Step 1]
         | 
| @@ -763,6 +764,7 @@ module RDF::RDFa | |
| 763 764 | 
             
                    rev
         | 
| 764 765 | 
             
                    role
         | 
| 765 766 | 
             
                    src
         | 
| 767 | 
            +
                    type
         | 
| 766 768 | 
             
                    typeof
         | 
| 767 769 | 
             
                    value
         | 
| 768 770 | 
             
                    vocab
         | 
| @@ -807,17 +809,26 @@ module RDF::RDFa | |
| 807 809 | 
             
                      "[Step 2] default_vocaulary: #{default_vocabulary.inspect}"
         | 
| 808 810 | 
             
                    }
         | 
| 809 811 | 
             
                  end
         | 
| 810 | 
            -
             | 
| 812 | 
            +
             | 
| 811 813 | 
             
                  # Local term mappings [7.5 Step 3]
         | 
| 812 814 | 
             
                  # Next, the current element is then examined for URI mapping s and these are added to the local list of URI mappings.
         | 
| 813 815 | 
             
                  # Note that a URI mapping will simply overwrite any current mapping in the list that has the same name
         | 
| 814 816 | 
             
                  extract_mappings(element, uri_mappings, namespaces)
         | 
| 815 | 
            -
             | 
| 817 | 
            +
             | 
| 816 818 | 
             
                  # Language information [7.5 Step 4]
         | 
| 817 819 | 
             
                  language = element.language || language
         | 
| 818 820 | 
             
                  language = nil if language.to_s.empty?
         | 
| 819 821 | 
             
                  add_debug(element) {"HTML5 [3.2.3.3] lang: #{language.inspect}"} if language
         | 
| 820 822 |  | 
| 823 | 
            +
                  # Embedded scripts
         | 
| 824 | 
            +
                  if element.name == 'script'
         | 
| 825 | 
            +
                    text = element.inner_html.sub(%r(\A\s*\<!\[CDATA\[)m, '').sub(%r(\]\]>\s*\Z)m, '')
         | 
| 826 | 
            +
             | 
| 827 | 
            +
                    extract_script(element, text, attrs[:type], **@options.merge(base_uri: base)) do |statement|
         | 
| 828 | 
            +
                      @repository << statement
         | 
| 829 | 
            +
                    end
         | 
| 830 | 
            +
                  end
         | 
| 831 | 
            +
             | 
| 821 832 | 
             
                  # From HTML5, if the property attribute and the rel and/or rev attribute exists on the same element, the non-CURIE and non-URI rel and rev values are ignored. If, after this, the value of rel and/or rev becomes empty, then the processor must act as if the respective attribute is not present.
         | 
| 822 833 | 
             
                  if [:html5, :xhtml5].include?(@host_language) && attrs[:property] && (attrs[:rel] || attrs[:rev])
         | 
| 823 834 | 
             
                    old_rel, old_rev = attrs[:rel], attrs[:rev]
         | 
| @@ -844,14 +855,14 @@ module RDF::RDFa | |
| 844 855 | 
             
                                      term_mappings: term_mappings,
         | 
| 845 856 | 
             
                                      vocab: default_vocabulary,
         | 
| 846 857 | 
             
                                      restrictions: TERMorCURIEorAbsIRI.fetch(@version, []))
         | 
| 847 | 
            -
             | 
| 858 | 
            +
             | 
| 848 859 | 
             
                  add_debug(element) do
         | 
| 849 860 | 
             
                    "rels: #{rels.join(" ")}, revs: #{revs.join(" ")}"
         | 
| 850 861 | 
             
                  end unless (rels + revs).empty?
         | 
| 851 862 |  | 
| 852 863 | 
             
                  if !(attrs[:rel] || attrs[:rev])
         | 
| 853 864 | 
             
                    # Establishing a new subject if no rel/rev [7.5 Step 5]
         | 
| 854 | 
            -
             | 
| 865 | 
            +
             | 
| 855 866 | 
             
                    if @version == :"rdfa1.0"
         | 
| 856 867 | 
             
                      new_subject = if attrs[:about]
         | 
| 857 868 | 
             
                        process_uri(element, attrs[:about], evaluation_context, base,
         | 
| @@ -989,7 +1000,7 @@ module RDF::RDFa | |
| 989 1000 | 
             
                    new_subject ||= process_uri(element, attrs[:src], evaluation_context, base,
         | 
| 990 1001 | 
             
                                              uri_mappings: uri_mappings,
         | 
| 991 1002 | 
             
                                              restrictions: [:uri]) if @version == :"rdfa1.0"
         | 
| 992 | 
            -
             | 
| 1003 | 
            +
             | 
| 993 1004 | 
             
                    # if the @typeof attribute is present, set typed resource to new subject
         | 
| 994 1005 | 
             
                    typed_resource = new_subject if attrs[:typeof]
         | 
| 995 1006 |  | 
| @@ -1008,7 +1019,7 @@ module RDF::RDFa | |
| 1008 1019 | 
             
                      evaluation_context.parent_object
         | 
| 1009 1020 | 
             
                      # no skip flag set this time
         | 
| 1010 1021 | 
             
                    end
         | 
| 1011 | 
            -
             | 
| 1022 | 
            +
             | 
| 1012 1023 | 
             
                    # Then the current object resource is set to the URI obtained from the first match from the following rules:
         | 
| 1013 1024 | 
             
                    current_object_resource = process_uri(element, attrs[:resource], evaluation_context, base,
         | 
| 1014 1025 | 
             
                                  uri_mappings: uri_mappings,
         | 
| @@ -1034,7 +1045,7 @@ module RDF::RDFa | |
| 1034 1045 | 
             
                      "typed_resource: #{typed_resource.to_ntriples rescue 'nil'}, "
         | 
| 1035 1046 | 
             
                    }
         | 
| 1036 1047 | 
             
                  end
         | 
| 1037 | 
            -
             | 
| 1048 | 
            +
             | 
| 1038 1049 | 
             
                  # [Step 7] If in any of the previous steps a typed resource was set to a non-null value, it is now used to provide a subject for type values;
         | 
| 1039 1050 | 
             
                  if typed_resource
         | 
| 1040 1051 | 
             
                    # Typeof is TERMorCURIEorAbsIRIs
         | 
| @@ -1082,7 +1093,7 @@ module RDF::RDFa | |
| 1082 1093 | 
             
                        add_triple(element, new_subject, r, current_object_resource)
         | 
| 1083 1094 | 
             
                      end
         | 
| 1084 1095 | 
             
                    end
         | 
| 1085 | 
            -
             | 
| 1096 | 
            +
             | 
| 1086 1097 | 
             
                    revs.each do |r|
         | 
| 1087 1098 | 
             
                      add_triple(element, current_object_resource, r, new_subject)
         | 
| 1088 1099 | 
             
                    end
         | 
| @@ -1090,7 +1101,7 @@ module RDF::RDFa | |
| 1090 1101 | 
             
                    # Incomplete triples and bnode creation [Step 10]
         | 
| 1091 1102 | 
             
                    add_debug(element) {"[Step 10] incompletes: rels: #{rels}, revs: #{revs}"}
         | 
| 1092 1103 | 
             
                    current_object_resource = RDF::Node.new
         | 
| 1093 | 
            -
             | 
| 1104 | 
            +
             | 
| 1094 1105 | 
             
                    # predicate: full IRI
         | 
| 1095 1106 | 
             
                    # direction: forward/reverse
         | 
| 1096 1107 | 
             
                    # lists: Save into list, don't generate triple
         | 
| @@ -1108,12 +1119,12 @@ module RDF::RDFa | |
| 1108 1119 | 
             
                        incomplete_triples << {predicate: r, direction: :forward}
         | 
| 1109 1120 | 
             
                      end
         | 
| 1110 1121 | 
             
                    end
         | 
| 1111 | 
            -
             | 
| 1122 | 
            +
             | 
| 1112 1123 | 
             
                    revs.each do |r|
         | 
| 1113 1124 | 
             
                      incomplete_triples << {predicate: r, direction: :reverse}
         | 
| 1114 1125 | 
             
                    end
         | 
| 1115 1126 | 
             
                  end
         | 
| 1116 | 
            -
             | 
| 1127 | 
            +
             | 
| 1117 1128 | 
             
                  # Establish current object literal [Step 11]
         | 
| 1118 1129 | 
             
                  #
         | 
| 1119 1130 | 
             
                  # If the current element has a @inlist attribute, add the property to the
         | 
| @@ -1267,11 +1278,11 @@ module RDF::RDFa | |
| 1267 1278 | 
             
                        add_debug(element)  {"[Step 11] add #{current_property_value.to_ntriples} to #{p.to_ntriples} #{list_mapping[p].inspect}"}
         | 
| 1268 1279 | 
             
                        list_mapping[p] << current_property_value
         | 
| 1269 1280 | 
             
                      elsif new_subject
         | 
| 1270 | 
            -
                        add_triple(element, new_subject, p, current_property_value) | 
| 1281 | 
            +
                        add_triple(element, new_subject, p, current_property_value)
         | 
| 1271 1282 | 
             
                      end
         | 
| 1272 1283 | 
             
                    end
         | 
| 1273 1284 | 
             
                  end
         | 
| 1274 | 
            -
             | 
| 1285 | 
            +
             | 
| 1275 1286 | 
             
                  if !skip and new_subject && !evaluation_context.incomplete_triples.empty?
         | 
| 1276 1287 | 
             
                    # Complete the incomplete triples from the evaluation context [Step 12]
         | 
| 1277 1288 | 
             
                    add_debug(element) do
         | 
| @@ -1329,12 +1340,12 @@ module RDF::RDFa | |
| 1329 1340 | 
             
                      new_ec.list_mapping = list_mapping
         | 
| 1330 1341 | 
             
                      add_debug(element, "[Step 13] new ec")
         | 
| 1331 1342 | 
             
                    end
         | 
| 1332 | 
            -
             | 
| 1343 | 
            +
             | 
| 1333 1344 | 
             
                    element.children.each do |child|
         | 
| 1334 1345 | 
             
                      # recurse only if it's an element
         | 
| 1335 1346 | 
             
                      traverse(child, new_ec) if child.element?
         | 
| 1336 1347 | 
             
                    end
         | 
| 1337 | 
            -
             | 
| 1348 | 
            +
             | 
| 1338 1349 | 
             
                    # Step 14: after traversing through child elements, for each list associated with
         | 
| 1339 1350 | 
             
                    # a property
         | 
| 1340 1351 | 
             
                    (list_mapping || {}).each do |p, l|
         | 
| @@ -1380,13 +1391,13 @@ module RDF::RDFa | |
| 1380 1391 | 
             
                end
         | 
| 1381 1392 |  | 
| 1382 1393 | 
             
                # space-separated TERMorCURIEorAbsIRI or SafeCURIEorCURIEorIRI
         | 
| 1383 | 
            -
                def process_uris(element, value, evaluation_context, base, options)
         | 
| 1394 | 
            +
                def process_uris(element, value, evaluation_context, base, **options)
         | 
| 1384 1395 | 
             
                  return [] if value.to_s.empty?
         | 
| 1385 1396 | 
             
                  add_debug(element) {"process_uris: #{value}"}
         | 
| 1386 | 
            -
                  value.to_s.split(/\s+/).map {|v| process_uri(element, v, evaluation_context, base, options)}.compact
         | 
| 1397 | 
            +
                  value.to_s.split(/\s+/).map {|v| process_uri(element, v, evaluation_context, base, **options)}.compact
         | 
| 1387 1398 | 
             
                end
         | 
| 1388 1399 |  | 
| 1389 | 
            -
                def process_uri(element, value, evaluation_context, base, options | 
| 1400 | 
            +
                def process_uri(element, value, evaluation_context, base, **options)
         | 
| 1390 1401 | 
             
                  return if value.nil?
         | 
| 1391 1402 | 
             
                  restrictions = options[:restrictions]
         | 
| 1392 1403 | 
             
                  add_debug(element) {"process_uri: #{value}, restrictions = #{restrictions.inspect}"}
         | 
| @@ -1407,7 +1418,7 @@ module RDF::RDFa | |
| 1407 1418 | 
             
                    # TERMorCURIEorAbsIRI
         | 
| 1408 1419 | 
             
                    # If the value is an NCName, then it is evaluated as a term according to General Use of Terms in
         | 
| 1409 1420 | 
             
                    # Attributes. Note that this step may mean that the value is to be ignored.
         | 
| 1410 | 
            -
                    uri = process_term(element, value.to_s, options)
         | 
| 1421 | 
            +
                    uri = process_term(element, value.to_s, **options)
         | 
| 1411 1422 | 
             
                    add_debug(element) {"process_uri: #{value} => term => #{uri ? uri.to_base : 'nil'}"}
         | 
| 1412 1423 | 
             
                    uri
         | 
| 1413 1424 | 
             
                  else
         | 
| @@ -1444,16 +1455,16 @@ module RDF::RDFa | |
| 1444 1455 | 
             
                    add_warning(element, "Relative URI #{value}")
         | 
| 1445 1456 | 
             
                  end
         | 
| 1446 1457 | 
             
                end
         | 
| 1447 | 
            -
             | 
| 1458 | 
            +
             | 
| 1448 1459 | 
             
                # [7.4.3] General Use of Terms in Attributes
         | 
| 1449 | 
            -
                def process_term(element, value, options)
         | 
| 1460 | 
            +
                def process_term(element, value, **options)
         | 
| 1450 1461 | 
             
                  if options[:vocab]
         | 
| 1451 1462 | 
             
                    # If there is a local default vocabulary, the IRI is obtained by concatenating that value and the term
         | 
| 1452 1463 | 
             
                    return uri(options[:vocab] + value)
         | 
| 1453 1464 | 
             
                  elsif options[:term_mappings].is_a?(Hash)
         | 
| 1454 1465 | 
             
                    # If the term is in the local term mappings, use the associated URI (case sensitive).
         | 
| 1455 1466 | 
             
                    return uri(options[:term_mappings][value.to_s.to_sym]) if options[:term_mappings].has_key?(value.to_s.to_sym)
         | 
| 1456 | 
            -
             | 
| 1467 | 
            +
             | 
| 1457 1468 | 
             
                    # Otherwise, check for case-insensitive match
         | 
| 1458 1469 | 
             
                    options[:term_mappings].each_pair do |term, uri|
         | 
| 1459 1470 | 
             
                      return uri(uri) if term.to_s.downcase == value.to_s.downcase
         |