Skip to main content

Generates OWL, SHACL shapes and SKOS concepts from XML Schema (XSD) files

Project description

XSD2RDF

License

A tool to convert XML Schema (XSD) files into various RDF formats (SHACL, OWL, SKOS) with integrated validation capabilities.

Overview

XSD2RDF allows you to convert XML Schema definitions into:

  • SHACL (Shapes Constraint Language) for RDF data validation
  • OWL (Web Ontology Language) for ontology representation
  • SKOS (Simple Knowledge Organization System) for concept schemes and taxonomies

Features

  • Convert XSD to SHACL, OWL, and SKOS based on integrated principles
  • SHACL shape constraints are linked to SKOS concept schemes when applicable
  • Handle complex XSD structures (choices, unions, complex types, enumerations, etc.)
  • SHACL shapes are validated according to SHACL-SHACL

This repository also includes a validation script to check RDF data against the generated SHACL shapes and SKOS concepts.

Installation

From PyPI

pip install xsd2rdf

From Source

git clone https://github.com/YourUsername/xsd2rdf.git
cd xsd2rdf
python -m pip install poetry
poetry install

Basic Usage

Convert an XSD file to all RDF formats (SHACL, OWL, SKOS):

python -m xsd2rdf -x path/to/schema.xsd

This generates the following files:

  • schema.xsd.shape.ttl (SHACL shapes)
  • schema.xsd.owl.ttl (OWL ontology)
  • schema.xsd.*.skos.ttl (SKOS concept schemes, one file per enumeration)

Command Line Parameters

  • -x, --XSD_FILE: XSD file to be converted
  • -f, --FOLDER: Folder containing non-related XSD files to be converted
  • -o, --OUTPUT_DIR: Output directory for generated files (default: same as XSD file)
  • -a, --ABBREVIATIONS_FILE: File containing custom abbreviations, one per line
  • -d, --debug: Enable debug output
  • -nc, --namespaced-concepts: Use namespaced IRIs for SKOS concepts
  • -un, --use-namespace: Override the XSD targetNamespace for generated SHACL, OWL and SKOS resources
  • -ssv, --skipShaclValidation: Skip SHACL-SHACL validation

Either -x or -f must be specified, but not both. If both are specified, -x takes precedence.

SKOS IRI Options

By default, SKOS concept IRIs are created using a flat structure:

targetnamespace/concepts/conceptschemename_conceptname

With the --namespaced-concepts flag, concepts use a hierarchical structure:

targetnamespace/concepts/conceptschemename/conceptname

Release new version CI/CD

The CI/CD script will automatically push a new version of the library to PyPi when a new Gitlab tag is created. As the tag name, use semantic versioning with 3 digits, examples: v1.2.3.

For user's convenience, best also add human readable release notes.

Examples

With custom output directory:

python -m xsd2rdf  -x path/to/schema.xsd -o output/directory

With folder containing multiple unrelated XSD files:

python -m xsd2rdf -f path/to/folder

Using a custom abbreviations file:

python -m xsd2rdf -x path/to/schema.xsd -a path/to/abbreviations.txt

A practical way to generate a list of abbreviations on a Windows machine using Powershell is with this command:

 Select-String -Path "c:\Users\mathi\Git\era\xsd2rdf\debug\SFERA_v3.00.xsd" -Pattern "\b[A-Z]{2,}\b" -AllMatches | ForEach-Object { $_.Matches } | ForEach-Object { $_.Value } | Where-Object { $_ -cmatch "^[A-Z]{2,}$" } | Sort-Object -Unique | Where-Object { $_.Length -ge 2 -and $_.Length -le 10 }

Using namespaced concept IRIs:

python -m xsd2rdf -x path/to/schema.xsd --namespaced-concepts

The abbreviations file should contain one abbreviation per line. These abbreviations will be preserved as uppercase when creating human-readable labels from camelCase or PascalCase strings.

Using a custom namespace instead of the XSD targetNamespace:

python -m xsd2rdf -x path/to/schema.xsd --use-namespace http://data.europa.eu/949/

Skipping SHACL-SHACL validation:

python -m xsd2rdf -x path/to/schema.xsd -ssv

Development validation

This feature is only available from source as it is meant for development purposes.

Prerequisites:

  • Create sample data for validation schema.xsd.shape.ttl in the same directory as the xsd file

To validate RDF data against SHACL shapes with SKOS concepts:

python shacl-validation.py path/to/schema.xsd

This result will:

  1. Load the data from schema.xsd.sample.ttl
  2. Include all related SKOS files (schema.xsd.*.skos.ttl)
  3. Perform validation using the generated SHACL shapes (schema.xsd.shape.ttl)
  4. Report results in the command line

Wiki Pages

Some wiki pages explain the inner workings of the convertor and the list of mapping rules implemented within the tool.

License

EUPL 1.2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xsd2rdf-1.2.0.tar.gz (25.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xsd2rdf-1.2.0-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file xsd2rdf-1.2.0.tar.gz.

File metadata

  • Download URL: xsd2rdf-1.2.0.tar.gz
  • Upload date:
  • Size: 25.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for xsd2rdf-1.2.0.tar.gz
Algorithm Hash digest
SHA256 93ae311cfd860e614f87f3405c920c68b9b17946b9cf944ca73f7489e0491f3c
MD5 629854b9396982d1a5fd23e89539c178
BLAKE2b-256 17e1a0902e327b3ca9f0145154d94444a991a281f0d11c468e49e389a67d5d8b

See more details on using hashes here.

File details

Details for the file xsd2rdf-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: xsd2rdf-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for xsd2rdf-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81b1ad325a1899ee34a42948f2e1610e108a6c87c250c5ad798369a9a8e13907
MD5 2ba9a7d4b1add6632bcd66b52cb73a54
BLAKE2b-256 cefd0ec4da901a1161da3336dc81a7d479e8719764216aa67afd7833762c0195

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page