rdf-reasoner 0.4.0 → 0.4.1
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 +4 -4
- data/README.md +5 -2
- data/VERSION +1 -1
- data/lib/rdf/reasoner/owl.rb +2 -2
- data/lib/rdf/reasoner/rdfs.rb +4 -4
- data/lib/rdf/reasoner/schema.rb +17 -25
- metadata +13 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 64e3d93ea967347ff094db2d1844e3447471a118
         | 
| 4 | 
            +
              data.tar.gz: 7f5c88de9746a69ad9b492a977c9e2ce869c90f9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5c79cca368ea71ed8362adaef2a9a68b75ea6bbf1ae58c5d2c98470fbfe7fae1f9127dc709ee5e8c2b027f946e98c1d3fdb4b4cfe12bad7e6e6c73ec4016ac99
         | 
| 7 | 
            +
              data.tar.gz: a565dc38bb2d0c13f22d3da6a7f34e52347eb571f8f499930f1e1c65c62aea7af05c76b0d7d60b31d662c6c1def9ece0792a02bf6a43c8acbaf72f612aae1c73
         | 
    
        data/README.md
    CHANGED
    
    | @@ -98,10 +98,13 @@ Domain and Range entailment include specific rules for schema.org vocabularies. | |
| 98 98 | 
             
                  end
         | 
| 99 99 | 
             
                end
         | 
| 100 100 |  | 
| 101 | 
            +
            ## Command-Line interface
         | 
| 102 | 
            +
            The `rdf` command-line interface is extended with `entail` and `lint` commands. `Entail` can be used in combination, with `serialize` to generate an output graph representation including entailed triples.
         | 
| 103 | 
            +
             | 
| 101 104 | 
             
            ## Dependencies
         | 
| 102 105 |  | 
| 103 | 
            -
            * [Ruby](http://ruby-lang.org/) (>= 2. | 
| 104 | 
            -
            * [RDF.rb](http://rubygems.org/gems/rdf) (>= 2. | 
| 106 | 
            +
            * [Ruby](http://ruby-lang.org/) (>= 2.2.2)
         | 
| 107 | 
            +
            * [RDF.rb](http://rubygems.org/gems/rdf) (>= 2.1.1)
         | 
| 105 108 |  | 
| 106 109 | 
             
            ## Mailing List
         | 
| 107 110 |  | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.4. | 
| 1 | 
            +
            0.4.1
         | 
    
        data/lib/rdf/reasoner/owl.rb
    CHANGED
    
    | @@ -50,7 +50,7 @@ module RDF::Reasoner | |
| 50 50 | 
             
                    if self.predicate == RDF.type
         | 
| 51 51 | 
             
                      if term = (RDF::Vocabulary.find_term(self.object) rescue nil)
         | 
| 52 52 | 
             
                        term._entail_equivalentClass do |t|
         | 
| 53 | 
            -
                          statements << RDF::Statement(self. | 
| 53 | 
            +
                          statements << RDF::Statement(self.to_h.merge(object: t, inferred: true))
         | 
| 54 54 | 
             
                        end
         | 
| 55 55 | 
             
                      end
         | 
| 56 56 | 
             
                    end
         | 
| @@ -89,7 +89,7 @@ module RDF::Reasoner | |
| 89 89 | 
             
                    statements = []
         | 
| 90 90 | 
             
                    if term = (RDF::Vocabulary.find_term(self.predicate) rescue nil)
         | 
| 91 91 | 
             
                      term._entail_equivalentProperty do |t|
         | 
| 92 | 
            -
                        statements << RDF::Statement(self. | 
| 92 | 
            +
                        statements << RDF::Statement(self.to_h.merge(predicate: t, inferred: true))
         | 
| 93 93 | 
             
                      end
         | 
| 94 94 | 
             
                    end
         | 
| 95 95 | 
             
                    statements.each {|s| yield s} if block_given?
         | 
    
        data/lib/rdf/reasoner/rdfs.rb
    CHANGED
    
    | @@ -58,7 +58,7 @@ module RDF::Reasoner | |
| 58 58 | 
             
                    if self.predicate == RDF.type
         | 
| 59 59 | 
             
                      if term = (RDF::Vocabulary.find_term(self.object) rescue nil)
         | 
| 60 60 | 
             
                        term._entail_subClassOf do |t|
         | 
| 61 | 
            -
                          statements << RDF::Statement(self. | 
| 61 | 
            +
                          statements << RDF::Statement(self.to_h.merge(object: t, inferred: true))
         | 
| 62 62 | 
             
                        end
         | 
| 63 63 | 
             
                      end
         | 
| 64 64 | 
             
                      #$stderr.puts("subClassf(#{self.predicate.pname}): #{statements.map(&:object).map {|r| r.respond_to?(:pname) ? r.pname : r.to_ntriples}}}")
         | 
| @@ -127,7 +127,7 @@ module RDF::Reasoner | |
| 127 127 | 
             
                    statements = []
         | 
| 128 128 | 
             
                    if term = (RDF::Vocabulary.find_term(self.predicate) rescue nil)
         | 
| 129 129 | 
             
                      term._entail_subPropertyOf do |t|
         | 
| 130 | 
            -
                        statements << RDF::Statement(self. | 
| 130 | 
            +
                        statements << RDF::Statement(self.to_h.merge(predicate: t, inferred: true))
         | 
| 131 131 | 
             
                      end
         | 
| 132 132 | 
             
                      #$stderr.puts("subPropertyOf(#{self.predicate.pname}): #{statements.map(&:object).map {|r| r.respond_to?(:pname) ? r.pname : r.to_ntriples}}}")
         | 
| 133 133 | 
             
                    end
         | 
| @@ -146,7 +146,7 @@ module RDF::Reasoner | |
| 146 146 | 
             
                    statements = []
         | 
| 147 147 | 
             
                    if term = (RDF::Vocabulary.find_term(self.predicate) rescue nil)
         | 
| 148 148 | 
             
                      term.domain.each do |t|
         | 
| 149 | 
            -
                        statements << RDF::Statement(self. | 
| 149 | 
            +
                        statements << RDF::Statement(self.to_h.merge(predicate: RDF.type, object: t, inferred: true))
         | 
| 150 150 | 
             
                      end
         | 
| 151 151 | 
             
                    end
         | 
| 152 152 | 
             
                    #$stderr.puts("domain(#{self.predicate.pname}): #{statements.map(&:object).map {|r| r.respond_to?(:pname) ? r.pname : r.to_ntriples}}}")
         | 
| @@ -165,7 +165,7 @@ module RDF::Reasoner | |
| 165 165 | 
             
                    statements = []
         | 
| 166 166 | 
             
                    if object.resource? && term = (RDF::Vocabulary.find_term(self.predicate) rescue nil)
         | 
| 167 167 | 
             
                      term.range.each do |t|
         | 
| 168 | 
            -
                        statements << RDF::Statement(self. | 
| 168 | 
            +
                        statements << RDF::Statement(self.to_h.merge(subject: self.object, predicate: RDF.type, object: t, inferred: true))
         | 
| 169 169 | 
             
                      end
         | 
| 170 170 | 
             
                    end
         | 
| 171 171 | 
             
                    #$stderr.puts("range(#{self.predicate.pname}): #{statements.map(&:object).map {|r| r.respond_to?(:pname) ? r.pname : r.to_ntriples}}")
         | 
    
        data/lib/rdf/reasoner/schema.rb
    CHANGED
    
    | @@ -27,13 +27,7 @@ module RDF::Reasoner | |
| 27 27 | 
             
                  domains = Array(self.domainIncludes) - [RDF::OWL.Thing]
         | 
| 28 28 |  | 
| 29 29 | 
             
                  # Fully entailed types of the resource
         | 
| 30 | 
            -
                  types = options | 
| 31 | 
            -
                    queryable.query(:subject => resource, :predicate => RDF.type).
         | 
| 32 | 
            -
                      map {|s| (t = (RDF::Vocabulary.find_term(s.object) rescue nil)) && t.entail(:subClassOf)}.
         | 
| 33 | 
            -
                      flatten.
         | 
| 34 | 
            -
                      uniq.
         | 
| 35 | 
            -
                      compact
         | 
| 36 | 
            -
                  end unless domains.empty?
         | 
| 30 | 
            +
                  types = entailed_types(resource, queryable, options) unless domains.empty?
         | 
| 37 31 |  | 
| 38 32 | 
             
                  # Every domain must match some entailed type
         | 
| 39 33 | 
             
                  resource_acceptable = Array(types).empty? || domains.any? {|d| types.include?(d)}
         | 
| @@ -109,7 +103,7 @@ module RDF::Reasoner | |
| 109 103 | 
             
                          resource.datatype == RDF::XSD.anyURI ||
         | 
| 110 104 | 
             
                          resource.plain? && RDF::Literal::AnyURI.new(resource.value).valid?
         | 
| 111 105 | 
             
                        else
         | 
| 112 | 
            -
                          # If  | 
| 106 | 
            +
                          # If may be an XSD range, look for appropriate literal
         | 
| 113 107 | 
             
                          if range.start_with?(RDF::XSD.to_s)
         | 
| 114 108 | 
             
                            if resource.datatype == RDF::URI(range)
         | 
| 115 109 | 
             
                              true
         | 
| @@ -127,28 +121,14 @@ module RDF::Reasoner | |
| 127 121 | 
             
                      true # Special case for schema boolean resources
         | 
| 128 122 | 
             
                    elsif ranges.include?(RDF::Vocab::SCHEMA.URL) && resource.uri?
         | 
| 129 123 | 
             
                      true # schema:URL matches URI resources
         | 
| 130 | 
            -
                    elsif ranges | 
| 124 | 
            +
                    elsif ranges == [RDF::Vocab::SCHEMA.Text] && resource.uri?
         | 
| 131 125 | 
             
                      # Allowed if resource is untyped
         | 
| 132 | 
            -
                       | 
| 133 | 
            -
                      types = options.fetch(:types) do
         | 
| 134 | 
            -
                        queryable.query(:subject => resource, :predicate => RDF.type).
         | 
| 135 | 
            -
                          map {|s| (t = (RDF::Vocabulary.find_term(s.object) rescue nil)) && t.entail(:subClassOf)}.
         | 
| 136 | 
            -
                          flatten.
         | 
| 137 | 
            -
                          uniq.
         | 
| 138 | 
            -
                          compact
         | 
| 139 | 
            -
                      end
         | 
| 140 | 
            -
                      types.empty?
         | 
| 126 | 
            +
                      entailed_types(resource, queryable, options).empty?
         | 
| 141 127 | 
             
                    elsif literal_range?(ranges)
         | 
| 142 128 | 
             
                      false # If resource isn't literal, this is a range violation
         | 
| 143 129 | 
             
                    else
         | 
| 144 130 | 
             
                      # Fully entailed types of the resource
         | 
| 145 | 
            -
                      types = options | 
| 146 | 
            -
                        queryable.query(:subject => resource, :predicate => RDF.type).
         | 
| 147 | 
            -
                          map {|s| (t = (RDF::Vocabulary.find_term(s.object) rescue nil)) && t.entail(:subClassOf)}.
         | 
| 148 | 
            -
                          flatten.
         | 
| 149 | 
            -
                          uniq.
         | 
| 150 | 
            -
                          compact
         | 
| 151 | 
            -
                      end
         | 
| 131 | 
            +
                      types = entailed_types(resource, queryable, options)
         | 
| 152 132 |  | 
| 153 133 | 
             
                      # Every range must match some entailed type
         | 
| 154 134 | 
             
                      resource_acceptable = Array(types).empty? || ranges.any? {|d| types.include?(d)}
         | 
| @@ -191,6 +171,18 @@ module RDF::Reasoner | |
| 191 171 |  | 
| 192 172 | 
             
                def self.included(mod)
         | 
| 193 173 | 
             
                end
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                private
         | 
| 176 | 
            +
                # Fully entailed types
         | 
| 177 | 
            +
                def entailed_types(resource, queryable, options = {})
         | 
| 178 | 
            +
                  options.fetch(:types) do
         | 
| 179 | 
            +
                    queryable.query(:subject => resource, :predicate => RDF.type).
         | 
| 180 | 
            +
                      map {|s| (t = (RDF::Vocabulary.find_term(s.object) rescue nil)) && t.entail(:subClassOf)}.
         | 
| 181 | 
            +
                      flatten.
         | 
| 182 | 
            +
                      uniq.
         | 
| 183 | 
            +
                      compact
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
                end
         | 
| 194 186 | 
             
              end
         | 
| 195 187 |  | 
| 196 188 | 
             
              # Extend the Term with this methods
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rdf-reasoner
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.4. | 
| 4 | 
            +
              version: 0.4.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Gregg Kellogg
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-12-31 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rdf
         | 
| @@ -16,14 +16,20 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '2. | 
| 19 | 
            +
                    version: '2.1'
         | 
| 20 | 
            +
                - - ">="
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            +
                    version: 2.1.1
         | 
| 20 23 | 
             
              type: :runtime
         | 
| 21 24 | 
             
              prerelease: false
         | 
| 22 25 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 26 | 
             
                requirements:
         | 
| 24 27 | 
             
                - - "~>"
         | 
| 25 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '2. | 
| 29 | 
            +
                    version: '2.1'
         | 
| 30 | 
            +
                - - ">="
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: 2.1.1
         | 
| 27 33 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 34 | 
             
              name: rdf-vocab
         | 
| 29 35 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -59,7 +65,7 @@ dependencies: | |
| 59 65 | 
             
                - - "~>"
         | 
| 60 66 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 67 | 
             
                    version: '2.0'
         | 
| 62 | 
            -
              type: : | 
| 68 | 
            +
              type: :development
         | 
| 63 69 | 
             
              prerelease: false
         | 
| 64 70 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 71 | 
             
                requirements:
         | 
| @@ -168,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 168 174 | 
             
              requirements:
         | 
| 169 175 | 
             
              - - ">="
         | 
| 170 176 | 
             
                - !ruby/object:Gem::Version
         | 
| 171 | 
            -
                  version:  | 
| 177 | 
            +
                  version: 2.2.2
         | 
| 172 178 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 173 179 | 
             
              requirements:
         | 
| 174 180 | 
             
              - - ">="
         | 
| @@ -176,9 +182,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 176 182 | 
             
                  version: '0'
         | 
| 177 183 | 
             
            requirements: []
         | 
| 178 184 | 
             
            rubyforge_project: 
         | 
| 179 | 
            -
            rubygems_version: 2. | 
| 185 | 
            +
            rubygems_version: 2.6.8
         | 
| 180 186 | 
             
            signing_key: 
         | 
| 181 187 | 
             
            specification_version: 4
         | 
| 182 188 | 
             
            summary: RDFS/OWL Reasoner for RDF.rb
         | 
| 183 189 | 
             
            test_files: []
         | 
| 184 | 
            -
            has_rdoc: false
         |