Metadata-Version: 2.3
Name: xsd2rdf
Version: 0.3.0
Summary: Generates OWL, SHACL shapes and SKOS concepts from XML Schema (XSD) files
License: EUPL-1.2
Author: Mathias Vanden Auweele
Author-email: mathias@matdata.eu
Requires-Python: >=3.9,<4.0
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: File Formats
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: pyshacl (>0.30.0)
Requires-Dist: rdflib (>7.1.0)
Project-URL: Repository, https://gitlab.com/era-europa-eu/public/interoperable-data-programme/era-ontology/xsd2rdf
Description-Content-Type: text/markdown

# XSD2RDF

[![License](https://img.shields.io/badge/license-EUPL_1.2-blue)](http://data.europa.eu/eli/dec_impl/2017/863/oj)

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

```bash
pip install xsd2rdf
```

### From Source

```bash
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):

```bash
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 (required)
- `-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

### 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
```

## Examples

With custom output directory:

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

Using a custom abbreviations file:

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

Using namespaced concept IRIs:

```bash
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.

## 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:

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

This 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

## Example

Converting an XSD file with enumerations:

```bash
python -m xsd2rdf xsd2rdf -x comparison/enumerations.xsd
```

Validating data using generated shapes and concepts:

```bash
python shacl-validation.py comparison/enumerations.xsd
```

## License

EUPL 1.2

