[ https://issues.apache.org/jira/browse/RYA-291?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16063664#comment-16063664 ]
ASF GitHub Bot commented on RYA-291: ------------------------------------ GitHub user jessehatfield opened a pull request: https://github.com/apache/incubator-rya/pull/174 RYA-291 Added owl:hasValue inference Given a type associated with a hasValue property restriction: 1) expand queries for members of the type to also check for anything with the value; and 2) expand queries for values of that property to check for instances of the type. <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> ## Description 1. Inference engine now stores information about owl:hasValue property restrictions, which relate a property, a value, and a type, such that members of the type are defined to have that value for that property. (https://www.w3.org/TR/2012/REC-owl2-syntax-20121211/#Individual_Value_Restriction) These type/property/value associations can be retrieved by type or by property. 2. HasValueVisitor rewrites queries according to the hasValue restrictions, expanding statement patterns referencing either the type or the property. Class hierarchy is considered, so if something is declared to belong to a subclass of such a type, then its value can be inferred; and if something has the property/value associated with such a type, then its membership in that type and any superclasses can be inferred. The resulting query tree is a union of the hasValue logic and the original statement pattern. Other inference visitors may still transform the original statement pattern. ### Tests InferenceEngineTest verifies that the correct schema is extracted from the ontology triples; HasValueVisitorTest verifies that query trees are expanded as expected; and InferenceIT verifies expected query results given ontology and instance triples. ### Links [Jira](https://issues.apache.org/jira/browse/RYA-291) ### Checklist - [ ] Code Review - [ ] Squash Commits #### People To Reivew @meiercaleb @ejwhite922 You can merge this pull request into a Git repository by running: $ git pull https://github.com/jessehatfield/incubator-rya RYA-291-hasValue-inference Alternatively you can review and apply these changes as the patch at: https://github.com/apache/incubator-rya/pull/174.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #174 ---- commit c0cc9596673904f9b9f8dea7be84de75066f73a5 Author: Jesse Hatfield <jesse.hatfi...@parsons.com> Date: 2017-06-26T18:06:06Z RYA-291 Added owl:hasValue inference Given a type associated with a hasValue property restriction: 1) expand queries for members of the type to also check for anything with the value; and 2) expand queries for values of that property to check for instances of the type. ---- > Implement owl:hasValue inference > -------------------------------- > > Key: RYA-291 > URL: https://issues.apache.org/jira/browse/RYA-291 > Project: Rya > Issue Type: Sub-task > Components: sail > Reporter: Jesse Hatfield > Assignee: Jesse Hatfield > > *{{owl:hasValue}}* is used to define a property restriction representing the > set of resources with a specific value for a specific predicate. > If the ontology states that the class {{:ChildOfJohn}} represents all > resources with {{:parent}} equal to {{:John}}, then the inference engine > should be able to: > 1. Rewrite a query pattern {{?X rdf:type :ChildOfJohn}} to check for > resources whose {{:parent}} is {{:John}} (in addition to those explicitly > stated to have type {{:ChildOfJohn}}) > 2. Rewrite a query pattern {{:Jane :parent :?Y}} to check whether :Jane has > the type {{:ChildOfJohn}} (in addition to querying for any specifically > stated {{:parent}} s) -- This message was sent by Atlassian JIRA (v6.4.14#64029)