Builds pleiades-places.nt, an N-Triples version of the Pleiades gazetteer that follows the Linked Art Place model, using CIDOC-CRM where Linked Art has nothing suitable.
make # build pleiades-places.nt
make examples # regenerate the example places in examples/ and their diagrams
make diagrams # regenerate only the diagrams of the examples
make clean # remove the output and intermediate files
make superclean # also remove downloaded data and toolsRequirements: GNU make, bash, curl, jq (1.7 or later), GNU coreutils and Java 21 or later. The diagrams also need Python 3 and Graphviz. The Makefile downloads Apache Jena and SPARQL Anything into tools/, and installs RDFLib in a virtual environment there for scripts/diagram.py, which draws the diagrams with rdf2dot.
- Download the latest Pleiades JSON dump (about 1.9 GB uncompressed) and the place-type vocabulary into
data/. - Stream the dump through
queries/records.jqwithjq --stream, so only one place is in memory at a time. This writes one compact record per published place todata/places.jsonl, and along the way:- keeps only published names and locations
- converts GeoJSON to WKT
- takes each location's precision (
precise,roughorunlocated) from the dump'sfeatures - splits romanized names into separate forms
- Construct RDF: split the records into chunks of 2,000 places and run
queries/construct.rqon each chunk with SPARQL Anything, writing N-Triples.queries/place-types.rqadds labels for the place types. - Merge the chunks with
LC_ALL=C sort -u, which also removes duplicate triples. TheClocale matters: other locales ignore hyphens when comparing and silently drop distinct lines. - Check the output:
riot --validateparses it, and the build fails if it contains no places.
Chunking and the 4 GB Java heap cap (-Xmx4g) keep a full build within 8 GB of RAM. It takes about 8 minutes.
| Pleiades | RDF |
|---|---|
| place | crm:E53_Place with rdfs:label, place types (crm:P2_has_type) and a representative point (crm:P168_place_is_defined_by) |
| name | one crm:E33_E41_Linguistic_Appellation per attested or romanized form, linked with crm:P1_is_identified_by |
| description, details | crm:E33_Linguistic_Object, linked with crm:P67i_is_referred_to_by |
| location | its own crm:E53_Place with a WKT geometry (geo:wktLiteral). The ancient place crm:P89_falls_within a rough location; any other location crm:P189_approximates the ancient place. |
Pleiades URIs are used as-is for places, locations, names and vocabulary terms. See examples/ for four places in Turtle. Open modelling questions are tracked in the issues.
.github/workflows/build.yml runs make on every pull request and uploads pleiades-places.nt as an artifact.