From 5fd715c3dc41531daa1a283d30d83d6121861949 Mon Sep 17 00:00:00 2001 From: Lars Pieschel <26352100+lapie1@users.noreply.github.com> Date: Mon, 22 Mar 2021 22:54:38 +0100 Subject: [PATCH] README.md and small changes. --- .gitignore | 4 +- README.md | 189 +++++++++++++++++++++++++++++++- img/cells.png | Bin 0 -> 39651 bytes jupyter-rdfify/serialization.py | 2 +- pyproject.toml | 6 + setup.py | 1 - 6 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 img/cells.png create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore index 7558721..c4618d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ __pycache__ .vscode -jupyter_rdfify.egg-info \ No newline at end of file +jupyter_rdfify.egg-info +dist +build \ No newline at end of file diff --git a/README.md b/README.md index e63a81b..45331c3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,190 @@ # Jupyter-RDFify + +IPython Extension for semantic web technology support (Turtle, SPARQL, ShEx, etc.) -TODO: Write Readme \ No newline at end of file +This extension is meant to be used together with Jupyter Notebooks for educational purposes. Its focus is neither performance nor scalability but instead ease-of-use. + +# Installation + +## Install using Pip + +``` +python -m pip install jupyter-rdfify +``` + +## Install from Source using Pip + +``` +python -m pip install git+https://github.com/lapie1/Jupyter-RDFify +``` + +## Dependencies + +You will need to have [Graphviz](https://graphviz.org/) installed and added to your path. + +If you're using Anaconda, you can install the Graphviz binaries using conda: + +``` +conda install -c conda-forge graphviz +``` + +# Usage + +## Basic Usage + +You first need to use the predefined `%load_ext` or `%reload_ext` magic to load Jupyter-RDFify. You need to do this each time your kernel is restarted. + +``` +%load_ext jupyter-rdfify +``` + +If you've installed the extension correctly, this should register the `%rdf` magic. This magic is special in that it is interpreted like a command line interface. If at any point you're wondering what arguments there are and what they do, do not hesitate to use the --help or -h flag. + +To list all submodules: + +``` +%rdf --help +``` + +To list all arguments of the Turtle submodule: + +``` +%rdf turtle --help +``` + +# Submodules + +Jupyter-RDFify is split into several submodules. Select the submodule you want using `%rdf <submodule>` + +## Graph Serialization Submodules + +These submodules allow you to parse and then visualize or convert graphs. The following graph serialization modules are provided by default: turtle, n3, json-ld, xml + +### Visualization + +To parse and visualize a graph, just use the `%%rdf` cell magic with the right submodule. For example to visualize a graph in Turtle notation: + +```turtle +%%rdf turtle +@prefix : <http://example.org/> . +:JupyterRDF :is :Awesome . +``` + +If this throws an error you probably do not have Graphviz installed. If you do not want to use the visualization, just use `--display none` or `--display table`. + +### Conversion + +To parse and convert a graph into a different format, use a combination of `--display raw` and `--serialize <format>`. Possible formats are: turtle, n3, json-ld, xml + +To convert a graph in Turtle notation to JSON-LD notation: + +```turtle +%%rdf turtle --display raw --serialize json-ld +@prefix : <http://example.org/> . +:JupyterRDF :is :Awesome . +``` + +### Labelling + +After parsing a graph, you may want to give it a label. You can later use this label to reference your graph in other submodules. With this you can for instance query, validate, draw or entail your graph later on. To give your graph a label just use the ```--label <label>``` or ```-l <label>``` argument. + +```turtle +%%rdf turtle --label awesome_graph +@prefix : <http://example.org/> . +:JupyterRDF :is :Awesome . +``` + +The special label ```last``` will always hold the last object, even if no ```--label``` argument was supplied. + +## SPARQL Submodule + +You can use the SPARQL submodule to query existing endpoints or to query local graphs. + +### Query SPARQL Endpoints + +Use the ```--endpoint``` argument to query an endpoint. An example using the [Wikidata](https://www.wikidata.org) endpoint: + +```sparql +%%rdf sparql --endpoint https://query.wikidata.org/sparql +SELECT ?item ?itemLabel +WHERE +{ + ?item wdt:P31 wd:Q146. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } +} LIMIT 10 +``` + +### Query Local Graphs + +You can query [labelled](#Labelling) graphs using the ```--local <label>``` argument. Note that this overrides the endpoint argument. + +Example querying the above labelled graph: + +```turtle +%%rdf sparql --local awesome_graph +PREFIX : <http://example.org/> +SELECT ?x WHERE { + ?x :is :Awesome +} +``` + +## ShEx Submodule + +With this submodule, you can validate graphs using the [ShEx](https://shex.io/) language. You first need to parse a schema: + +```shex +%%rdf shex parse --label awesome_schema +PREFIX : <http://example.org/> +:AwesomeShape { + :is [:Awesome] +} +``` + +We already gave the schema a [label](#Labelling) to reference it later. Note that graph labels and schema labels use different namespaces and do not overwrite each other. + +To validate a graph, we need to provide the schema label (```--label```), the graph label (```--graph```) of the graph we want to validate against the schema and at least a starting shape (```--start```). This will check every node of the graph against the starting shape. If we want to focus on a specific node in the graph, we can use the ```--focus``` argument. To validate the ```awesome_graph``` against the ```awesome_schema```, starting from the ```:AwesomeShape``` and focussing on the ```:JupyterRDF``` node: + +``` +%rdf shex validate --label awesome_schema --graph awesome_graph --start http://example.org/AwesomeShape --focus http://example.org/JupyterRDF +``` + +## Other Features + +### Prefixes +As many of the languages/formats use prefix declarations and these usually just distract from the actual task, most submodules lets you outsource them. Using either the ```--prefix``` flag or the ```prefix``` action (only for ShEx submodule), you can define a string which gets prepend to every cell magic of that submodule. A simple example for Turtle which defines some very frequent prefixes: + +```turtle +%rdf turtle --prefix +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +``` + +### Graph Manager +The graph manager submodule lets you list, draw, entail and delete labelled graphs. You just need to specify the action and usually a graph label. To draw or ```awesome_graph```: + +``` +%rdf graph draw --label awesome_graph +``` + +### Entailment + +Using [OWL-RL](https://owl-rl.readthedocs.io/en/latest/), you can generate the finite closure of a graph under either RDFS semantics, OWL-RL semantics or both. This uses a brute-force approach, so it may easily take a long time or fail for large graphs. You can either entail a parsed graph directly using the ```--entail <regime>``` argument or entail a labelled graph later using the graph manager: + +``` +%rdf graph entail-<regime> --label awesome_graph +``` + +For now you can only entail graphs in-place. Possible values for <regime>: rdfs, owl, rdfs+owl + +# Dependencies + +Note that these dependencies will be installed automatically if you use Pip. + +[RDFLib](https://rdflib.readthedocs.io/en/stable/): The heart of this extension +[RDFLib-jsonld](https://github.com/RDFLib/rdflib-jsonld): Extension of RDFLib for JSON-LD +[SPARQLWrapper](https://github.com/RDFLib/sparqlwrapper): Extension of RDFLib for SPARQL +[OWL-RL](https://owl-rl.readthedocs.io/en/latest/): Library for RDFS and OWL-RL entailment +[PyShEx](https://github.com/hsolbrig/PyShEx): Implementation of ShEx +[Graphviz python wrapper](https://pypi.org/project/graphviz/) +[IPython](https://ipython.org/) \ No newline at end of file diff --git a/img/cells.png b/img/cells.png new file mode 100644 index 0000000000000000000000000000000000000000..d904327cf50f6596a960fed71bf4f9dad2f103a5 GIT binary patch literal 39651 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\qHj>(;FWSF;2qB|GojiMg5VHdk0o?3u{|k^i4Q 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 literal 0 HcmV?d00001 diff --git a/jupyter-rdfify/serialization.py b/jupyter-rdfify/serialization.py index c21fb21..e9c748a 100644 --- a/jupyter-rdfify/serialization.py +++ b/jupyter-rdfify/serialization.py @@ -7,7 +7,7 @@ from .table import graph_spo_iterator, html_table from .util import strip_comments displays = ["graph", "table", "raw", "none"] -formats = ["turtle", "json-ld", "xml"] +formats = ["turtle", "json-ld", "xml", "n3"] class SerializationModule(RDFModule): diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b5a3c46 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel" +] +build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/setup.py b/setup.py index 97de421..23c3c65 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,6 @@ setuptools.setup( "ipython>=7.18.0", "graphviz", "sparqlwrapper", - "requests", "owlrl", "PyShEx" ], -- GitLab