summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Car <nicholas.car@surroundaustralia.com>2021-04-24 22:30:33 +1000
committerNicholas Car <nicholas.car@surroundaustralia.com>2021-04-24 22:30:33 +1000
commitdde6755e8941c71335bf161518571d9848eb60ce (patch)
tree691165c9c04c81bc7c3df81291cc81d9cb1b14c8
parent058a3d52f3a0e8055034cb2594af17eb680e41e3 (diff)
downloadrdflib-dde6755e8941c71335bf161518571d9848eb60ce.tar.gz
minor text edits; removed deprecated label & preferredLabel methods
-rw-r--r--docs/intro_to_graphs.rst63
1 files changed, 38 insertions, 25 deletions
diff --git a/docs/intro_to_graphs.rst b/docs/intro_to_graphs.rst
index aa0fecf3..08c2d027 100644
--- a/docs/intro_to_graphs.rst
+++ b/docs/intro_to_graphs.rst
@@ -4,7 +4,8 @@
Navigating Graphs
=================
-An RDF Graph is a set of RDF triples, and we try to mirror exactly this in RDFLib. The Python :meth:`~rdflib.graph.Graph` tries to emulate a container type.
+An RDF Graph is a set of RDF triples, and we try to mirror exactly this in RDFLib. The Python
+:meth:`~rdflib.graph.Graph` tries to emulate a container type.
Graphs as Iterators
-------------------
@@ -13,19 +14,23 @@ RDFLib graphs override :meth:`~rdflib.graph.Graph.__iter__` in order to support
.. code-block:: python
- for subject, predicate, object in someGraph:
- if not (subject, predicate, object) in someGraph:
+ for s, p, o in someGraph:
+ if not (s, p, o) in someGraph:
raise Exception("Iterator / Container Protocols are Broken!!")
+This loop iterates through all the subjects(s), predicates (p) & objects (o) in ``someGraph``.
+
Contains check
--------------
-Graphs implement :meth:`~rdflib.graph.Graph.__contains__`, so you can check if a triple is in a graph with ``triple in graph`` syntax:
+Graphs implement :meth:`~rdflib.graph.Graph.__contains__`, so you can check if a triple is in a graph with a
+``triple in graph`` syntax:
.. code-block:: python
from rdflib import URIRef
from rdflib.namespace import RDF
+
bob = URIRef("http://example.org/people/bob")
if (bob, RDF.type, FOAF.Person) in graph:
print("This graph knows that Bob is a person!")
@@ -42,52 +47,64 @@ Note that this triple does not have to be completely bound:
Set Operations on RDFLib Graphs
-------------------------------
-Graphs override several pythons operators: :meth:`~rdflib.graph.Graph.__iadd__`, :meth:`~rdflib.graph.Graph.__isub__`, etc. This supports addition, subtraction and other set-operations on Graphs:
+Graphs override several pythons operators: :meth:`~rdflib.graph.Graph.__iadd__`, :meth:`~rdflib.graph.Graph.__isub__`,
+etc. This supports addition, subtraction and other set-operations on Graphs:
-============ ==================================================
+============ =============================================================
operation effect
-============ ==================================================
-``G1 + G2`` return new graph with union
-``G1 += G1`` in place union / addition
-``G1 - G2`` return new graph with difference
+============ =============================================================
+``G1 + G2`` return new graph with union (triples on both)
+``G1 += G2`` in place union / addition
+``G1 - G2`` return new graph with difference (triples in G1, not in G2)
``G1 -= G2`` in place difference / subtraction
``G1 & G2`` intersection (triples in both graphs)
``G1 ^ G2`` xor (triples in either G1 or G2, but not in both)
-============ ==================================================
+============ =============================================================
-.. warning:: Set-operations on graphs assume Blank Nodes are shared between graphs. This may or may not do what you want. See :doc:`merging` for details.
+.. warning:: Set-operations on graphs assume Blank Nodes are shared between graphs. This may or may not be what you
+want. See :doc:`merging` for details.
Basic Triple Matching
---------------------
-Instead of iterating through all triples, RDFLib graphs support basic triple pattern matching with a :meth:`~rdflib.graph.Graph.triples` function.
-This function is a generator of triples that match the pattern given by the arguments. The arguments of these are RDF terms that restrict the triples that are returned. Terms that are :data:`None` are treated as a wildcard. For example:
+Instead of iterating through all triples, RDFLib graphs support basic triple pattern matching with a
+:meth:`~rdflib.graph.Graph.triples` function. This function is a generator of triples that match a pattern given by
+arguments, i.e. arguments restrict the triples that are returned. Terms that are :data:`None` are treated as a wildcard.
+For example:
.. code-block:: python
- g.load("some_foaf.rdf")
+ g.load("some_foaf.ttl")
+ # find all subjects (s) of type (rdf:type) person (foaf:Person)
for s, p, o in g.triples((None, RDF.type, FOAF.Person)):
- print("{} is a person".format(s))
+ print(f"{s} is a person")
+ # find all subjects of any type
for s, p, o in g.triples((None, RDF.type, None)):
- print("{} is a {}".format(s, o))
+ print(f"{s} is a {o}")
+ # create a graph
bobgraph = Graph()
-
+ # add all triples with subject 'bob'
bobgraph += g.triples((bob, None, None))
-If you are not interested in whole triples, you can get only the bits you want with the methods :meth:`~rdflib.graph.Graph.objects`, :meth:`~rdflib.graph.Graph.subjects`, :meth:`~rdflib.graph.Graph.predicates`, :meth:`~rdflib.graph.Graph.predicate_objects`, etc. Each take parameters for the components of the triple to constraint:
+If you are not interested in whole triples, you can get only the bits you want with the methods
+:meth:`~rdflib.graph.Graph.objects`, :meth:`~rdflib.graph.Graph.subjects`, :meth:`~rdflib.graph.Graph.predicates`,
+:meth:`~rdflib.graph.Graph.predicate_objects`, etc. Each take parameters for the components of the triple to constraint:
.. code-block:: python
for person in g.subjects(RDF.type, FOAF.Person):
print("{} is a person".format(person))
-Finally, for some properties, only one value per resource makes sense (i.e they are *functional properties*, or have max-cardinality of 1). The :meth:`~rdflib.graph.Graph.value` method is useful for this, as it returns just a single node, not a generator:
+Finally, for some properties, only one value per resource makes sense (i.e they are *functional properties*, or have a
+max-cardinality of 1). The :meth:`~rdflib.graph.Graph.value` method is useful for this, as it returns just a single
+node, not a generator:
.. code-block:: python
- name = g.value(bob, FOAF.name) # get any name of bob
+ # get any name of bob
+ name = g.value(bob, FOAF.name)
# get the one person that knows bob and raise an exception if more are found
mbox = g.value(predicate = FOAF.name, object=bob, any=False)
@@ -97,10 +114,6 @@ Finally, for some properties, only one value per resource makes sense (i.e they
Here is a list of all convenience methods for querying Graphs:
-.. automethod:: rdflib.graph.Graph.label
- :noindex:
-.. automethod:: rdflib.graph.Graph.preferredLabel
- :noindex:
.. automethod:: rdflib.graph.Graph.triples
:noindex:
.. automethod:: rdflib.graph.Graph.value