Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/johnstonskj/rdftools
Command line tools for simple RDF file operations
https://github.com/johnstonskj/rdftools
command-line linked-data python rdf rdf-files rdflib semantic-web sparql sparql-query
Last synced: about 2 months ago
JSON representation
Command line tools for simple RDF file operations
- Host: GitHub
- URL: https://github.com/johnstonskj/rdftools
- Owner: johnstonskj
- License: mit
- Created: 2018-02-27T23:11:14.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T15:37:57.000Z (6 months ago)
- Last Synced: 2024-10-11T23:33:58.782Z (2 months ago)
- Topics: command-line, linked-data, python, rdf, rdf-files, rdflib, semantic-web, sparql, sparql-query
- Language: Python
- Size: 82 KB
- Stars: 6
- Watchers: 2
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# RDF Tools
CLI tools to validate, convert or query RDF files and SPARQL.
The functionality is provided by [RDFLib],
and while that provides a set of commands,
those provided here are somewhat more extensive
and also based upon a common command framework
that can be extended easily for more cases.[![Travis Status](
https://travis-ci.org/johnstonskj/rdftools.svg?branch=master)](
https://travis-ci.org/johnstonskj/rdftools)
[![Coverage Status](
https://coveralls.io/repos/github/elevont/rdftools/badge.svg?branch=master)](
https://coveralls.io/github/elevont/rdftools?branch=master)
[![Maintainability](
https://api.codeclimate.com/v1/badges/713dc63ecf8f8efa44d7/maintainability)](
https://codeclimate.com/github/elevont/rdftools/maintainability)
[![Requirements](
https://requires.io/github/elevont/rdftools/requirements.svg?branch=master)](
https://requires.io/github/elevont/rdftools/requirements/?branch=master)[![GitHub stars](
https://img.shields.io/github/stars/elevont/rdftools.svg)](
https://github.com/elevont/rdftools/stargazers)
[![Current Version](
https://img.shields.io/pypi/v/rdftools.svg)](
https://pypi.python.org/pypi/rdftools)
[![Python Versions](
https://img.shields.io/pypi/pyversions/rdftools.svg)](
https://pypi.python.org/pypi/rdftools)
[![Python Implementations](
https://img.shields.io/pypi/implementation/rdftools.svg)](
https://pypi.python.org/pypi/tdftools)## Installation
Python developers will know other ways,
but for the (more) laymen -
as long as you have `git` and `pipx` installed -
you can install like so (on Linux and Mac):```shell
mkdir -p ~/src
cd ~/src
git clone "https://github.com/johnstonskj/rdftools.git"
cd rdftools
pipx install .
```## Usage
The tooling uses a common starting command - `rdf` -
that then executes sub-commands.
As expected, the command has a help function
and lists the supported sub-commands as _positional arguments_.
These sub-commands also have their own help.```shell
$ rdf -h
usage: rdf [-h] [-v] {validate,convert,select,query} ...RDF tool
positional arguments:
{validate,convert,select,shell,query}
subargsoptional arguments:
-h, --help show this help message and exit
-v, --verbose
```The currently supported sub-commands are as follows.
* `convert` - convert files between different RDF representations
(NTriples, Notation3, RDF-XML, ...).
* `query` - execute SPARQL queries over RDF files.
* `select` - simple projections from RDF files.
* `shell` - run an interactive shell session.
* `validate` - validate an RDF file.An example, running a SPARQL query over a downloaded file:
```shell
$ rdf query \
-i ~/social.n3 \
-r n3 \
-q "SELECT DISTINCT ?person ?topic
WHERE {
?person
?topic.
}"
person topic
============================================== =============================================
http://amazon.com/cprm/customers/1.0/Alice http://amazon.com/cprm/entities/1.0/Diving
http://amazon.com/cprm/customers/1.0/Bob http://amazon.com/cprm/entities/1.0/Diving
http://amazon.com/cprm/customers/1.0/Alice http://amazon.com/cprm/entities/1.0/Shoes
3 rows returned in 1.629622 seconds.
```## Debugging
The `-v` parameter to either `rdf` or one of the sub-commands
controls the standard Python logging level.
It can be stated multiple times,
to increase the logging verbosity;
`-v` for warnings,
`-vv` for informational,
`-vvv` for debug.## Interactive Shell
For a more interactive exploration of RDF data,
you can run `rdf shell`,
which gives you access to a lot of the same functions
as in the separate tools.
The shell has a single common graph
into which you can load data from external files
(and stores in the future),
and run SPARQL queries.
The shell also has a default initialization file,
so commonly used prefixes, common data, etc.
can be loaded before you start your session.```shell
$ rdf shell
RDF Shell, v0.1.0.
reading commands from file /Users/simonjo/.rdfshrc
Graph updated with 40 statements.
>
```As you might expect,
the shell supports a `help` function and command completion,
as well as a persistent history.### Initialization File
The default location for this is `~/.rdfshrc`;
all commands are read as if you typed them into the shell.### History File
The default location for this is `~/.rdfsh_hist`;
it will be read at startup and updated on closing the shell.## Extending
New commands are added as modules in the `rdftools/scripts` folder
and have the following structure.```python
import rdftoolsdef main():
(LOG, cmd) = rdftools.startup('Tool description.', add_args=None)...
```The `add_args` parameter is used
to add additional command-line arguments to the common `argparse` structure.
The function, if required, takes in a parser object and returns it.
The common command line arguments include verbosity, help, and reading files.```python
def add_args(parser):
return parser```
The results from `startup` are a standard logger
and an (`ArgumentParser`) `Namespace` object.
The tool can then use the functions:
`read`, `read_into`, `read_all`, `write`, and `query`
to perform common operations on RDF files.Extending the shell is also pretty simple.
You add a function of the following form -
it always takes a context object first -
and the doc string will be used by default
as the displayed help for your command.
Arguments may be parsed for more structure,
and `print()` is used extensively for user feedback.
Note that you must always return the context,
whether you updated it or not.
The `add_command` function will install it into the shell,
enabling help and command completion.```python
def echo(context, args):
""" echo text
Echo back the following text."""
print(args)
return context
add_command(echo)
```## References
* [RDF Working Group](https://www.w3.org/2011/rdf-wg/wiki/Main_Page)
* [SPARQL Overview](https://www.w3.org/TR/sparql11-overview/)
* [RDFLib]
* [Travis Project](https://travis-ci.org/johnstonskj/rdftools)
* [Coveralls Project](https://coveralls.io/github/johnstonskj/rdftools)[RDFLib]: https://github.com/RDFLib/rdflib