| 238 | |
| 239 | Reasoning can be used in a few ways. It can be used to infer data that was not hard coded into the database. |
| 240 | e.g. Triples are added in the store that you did not encode. |
| 241 | |
| 242 | an example. |
| 243 | |
| 244 | ProteinA :interactsWith ProteinB |
| 245 | |
| 246 | without reasoning when you ask |
| 247 | {{{ |
| 248 | sparql ?with where (ProteinB :interactsWith ?with) |
| 249 | }}} |
| 250 | will return no results. When the owl statement is added |
| 251 | |
| 252 | :interactsWith owl:inverseOf :interactsWith |
| 253 | |
| 254 | Then the same query will return proteinA as ?with. |
| 255 | |
| 256 | You can also introduce classes as shown by the SADI example. To make more readable queries. |
| 257 | For example give me all human proteins known to be a kinase. |
| 258 | e.g. |
| 259 | {{{ |
| 260 | select ?p where {?p a :Protein . |
| 261 | ?p :classifiedWith <http://purl.uniprot.org/keywords/418> . |
| 262 | ?p :organism <http://purl.uniprot.org/taxonomy/9606> .) |
| 263 | }}} |
| 264 | While |
| 265 | {{{ |
| 266 | select ?p where (?p a :HumanKinase) |
| 267 | }}} |
| 268 | is much more readable to a human/biologist. This :HumanKinase type can be generated on the fly using owl inference. |
| 269 | |
| 270 | |
| 271 | It can also be used to do quality control. |
| 272 | e.g. when assigning the keyword complete proteome to an uniprot entry a chromosomal location must be known. When an entry is found for a with the keyword complete proteome but no chromosomal location. A contradiction is raised. i.e. and error. This allows us to notify a curator and fix this oversight. |