| | 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. |