File: foafpaths.py

package info (click to toggle)
rdflib 7.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 77,852 kB
  • sloc: python: 59,555; sh: 153; makefile: 83; ruby: 74; xml: 45
file content (42 lines) | stat: -rw-r--r-- 1,480 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""
SPARQL 1.1 defines path operators for combining/repeating predicates
in triple-patterns.

We overload some Python operators on URIRefs to allow creating path
operators directly in Python.

| Operator    | Path                                               |
|-------------|----------------------------------------------------|
| `p1 / p2`   | Path sequence                                       |
| `p1 | p2`  | Path alternative                                    |
| `p1 * '*'`  | Chain of 0 or more p's                              |
| `p1 * '+'`  | Chain of 1 or more p's                              |
| `p1 * '?'`  | 0 or 1 p                                            |
| `~p1`       | p1 inverted, i.e. `(s p1 o)` ⇔ `(o ~p1 s)`          |
| `-p1`       | NOT p1, i.e. any property but p1                   |

These can then be used in property position for `s,p,o` triple queries
for any graph method.

See the docs for [`paths`][rdflib.paths] for the details.

This example shows how to get the name of friends (i.e values two steps away x knows y, y name z) with a single query.
"""

from pathlib import Path

from rdflib import Graph, URIRef
from rdflib.namespace import FOAF

EXAMPLES_DIR = Path(__file__).parent

if __name__ == "__main__":
    g = Graph()
    g.parse(f"{EXAMPLES_DIR / 'foaf.n3'}")

    tim = URIRef("http://www.w3.org/People/Berners-Lee/card#i")

    print("Timbl knows:")

    for o in g.objects(tim, FOAF.knows / FOAF.name):
        print(o)