ssrq-schema

TEI-XML Schema der Sammlung Schweizerischer Rechtsquellen

https://github.com/ssrq-sds-fds/ssrq-schema

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (3.7%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

TEI-XML Schema der Sammlung Schweizerischer Rechtsquellen

Basic Info
Statistics
  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • Open Issues: 4
  • Releases: 11
Created about 3 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

SSRQ-Schema DOI

Dieses Repository beinhaltet Quellcode und sonstige Dateien im Zusammenhang mit dem XML-Schema der Sammlung der Schweizerischen Rechtsquellen.

Initiale Zielsetzung der Entwicklung

  1. Aktualisierung und Anpassung des bestehenden Schemas an Neuentwicklungen TEI-Guidelines
  2. Aufarbeitung von Rück-/Misständen
  3. Eindeutige Versionierung (Daten entsprechen einem Schema einer bestimmten Version)
  4. Testbarkeit
  5. Erzeugung einer Web-Dokumentation aus dem Schema heraus (ersetzt die Dokumentation im Wiki)
  6. Erarbeitung von XSLT-Skripten (o.ä.) zur Migration zwischen Datenständen
  7. Öffentlicher Zugriff auf vormals interne Dokumentation

Dokumentation

Versionierung

Die Versionierung des Schemas erfolgt gemäß Semantic Versioning. Dies erlaubt die eindeutige Zuordnung eines bestimmten Datenmodells zu einer bestimmten Version. Die Grundregel lautet:

MAJOR.MINOR.PATCH

Die Versionsnummer wird als Tag in der Git-History hinterlegt und ist zudem in der Datei pyproject.toml in der Tabelle ssrq.schema.meta hinterlegt. Die kompilierten Versionen des Schemas folgen dem Muster tei-ssrq-schema-version.(rng|odd) und verwenden die in dieser Projektkonfiguration hinterlegte Versionsnummer.

Was ist wo?

Das Repository ist wie folgt aufgeteilt:

ssrq-schema/ ├─ .github/ ├─ src/ │ ├─ docs/ │ ├─ schema/ │ │ ├─ commons/ │ │ ├─ elements/ │ │ ├─ examples/ │ │ ├─ main.odd.xml ├─ utils/ │ ├─ commons/ │ ├─ docs/ │ ├─ schema/ ├─ .gitignore ├─ .gitmodules ├─ CITATION.cff ├─ LICENSE ├─ mkdocs.yml ├─ poetry.lock ├─ pyproject.toml ├─ README.md ├─ Taskfile

  1. src: hier befinden sich die Quelldateien des Schemas sowie Teile der Dokumentation (.md), die nicht Teil des ODDs sind
  2. tests: der Name sagt es
  3. build: dieser Ordner wird dynamisch generiert und steht nicht unter Versionskontrolle; hier befinden sich die kompilierten Schemadateien sowie die HTML-Doku

src/docs

Siehe Erzeugung der Dokumentation.

src/schema

  • der Unterordner elements enthält die Schema-Deklarationen je Element; pro spezifizierten Element wird eine Datei nach dem Muster name.odd.xml erstellt – sofern verschiedene Spezifikationen für unt. Typen (Einleitung, Transkripte, etc.) festgelegt werden, wird der Typ mit -type an den Namen angehängt
  • der Unterordner commons enthält Spezifikationen, die von verschiedenen Teilen des Schemas wiederverwendet werden
    • classes.odd.xml: Klassendefinitionen
    • constrains.odd.xml: globale Schematron-Regeln
    • content.odd.xml: Inhaltstypen
    • datatypes.odd.xml: Datentypen, die als Inhalt für Attribute oder Elemente verwendet werden
    • modules.odd.xml: SSRQ-spezifische Module in Ergänzung der TEI
    • patterns.odd.xml: sog. Patterns, die als Inhaltsmodelle an verschiedenen Stellen verwendet werden – bspw. das Muster für Personen-IDs
  • konkrete Schemadeklrationen werden auf der obersten Ebene festgelegt; die benötigten Bestandteile werden hier eingebunden

src/utils/schema/lib/tei_stylesheets

Die Stylesheets der TEI werden als git submodule eingebunden. Um die Version der Stylesheets und damit auch die zugrunde liegende Version der TEI-Richtlinien zu aktualisieren kann man wie folgt vorgehen: git submodule set-branch -b utils/schema/lib/teistylesheets git submodule sync git submodule update --init --remote utils/schema/lib/teistylesheets

Technisches Setup

Verwendete Software / Technologien

Einrichtung / Anforderungen an die Umgebung

Das Repository wird regulär über git clone ausgecheckt. Für die vollständige Funktionalität müssen dann noch die Git-Submodule initialisiert werden:

sh git submodule update --init --recursive

Für die Kompilierung des Schemas sowie die Ausführung der Tests ist es erforderlich, dass eine JAVA-Laufzeitumgebung sowie Python in Version 3.11 auf dem System installiert ist. Ferner ist es erforderlich, dass der Python-Paketmanager poetry installiert ist.

Alle weiteren Abhängigkeiten können dann über folgenden Befehl install werden

sh sh ./Taskfile install

Wiederholt ausgeführte Aufgaben (bspw. Ausführung der Tests) sind im sog. Taskfile gebündelt. Für die einfachere Benutzung empfiehlt es sich in der lokalen Shell-Konfigurationen einen Alias für das Taskfile nach dem Schema alias run=./Taskfile einzurichten, dann lassen sich die diversen Aufgaben nach folgendem Muster ausführen:

sh run test

Weitere Parameter (bspw. -s um print-Statement immer anzuzeigen) können einfach übergeben werden:

sh run test -s

Anpassung

Anpassung von Übersetzungen

Das Schema ist in vier verschiedene Sprachen übersetzt: de, fr (sowie z.T. en und it)

Beschreibungen von Elementen werden i.d.R. in Deutsch, Englisch und Franzözisch verfasst. Die Spezifikation eines Element (siehe /src/elements) sollte immer ein Element <desc/> je Sprache enthalten. Für das Element <cell/> sieht das bspw. so aus:

xml <desc xml:lang="de" versionDate="2023-03-03">Auszeichnung von Tabellenzellen.</desc> <desc xml:lang="en" versionDate="2023-03-03">Table cell mark-up.</desc> <desc xml:lang="fr" versionDate="2023-03-03">Balisage des cellules de tableau.</desc>

Neben der Sprache sollte das Attribut @versionDate verwendet werden.

Beschreibungen von Attributwerten werden in der z.T. in der digitalen Edition verwendet und müssen in diesen Fällen immer in allen vier Sprachen angelegt werden. Dies kann folgendermaßen aussehen:

xml <valItem ident="Sack"> <desc xml:lang="de" versionDate="2023-03-17">Sack</desc> <desc xml:lang="de" type="plural" versionDate="2023-03-17">Säcke</desc> <desc xml:lang="fr" versionDate="2023-03-17">sac</desc> <desc xml:lang="fr" type="plural" versionDate="2023-03-17">sacs</desc> <desc xml:lang="en" versionDate="2023-03-17">bag</desc> <desc xml:lang="en" type="plural" versionDate="2023-03-17">bags</desc> <desc xml:lang="it" versionDate="2023-03-17">sacchetto,</desc> <desc xml:lang="it" type="plural" versionDate="2023-03-17">sacchetti</desc> </valItem>

Anpassung von Inhaltstypen

ToDo

Anpassung von Attributwerten

Todo

Anpassung / Erstellung von Tests

Die im Schema festgelegten Regeln werden automatisch mit pytest überprüft. Hierfür müssen Testfälle definiert werden. Tests werden im Unterordner test erstellt. Es wird zwischen Tests, die allgemeine Bedingungen des Schema prüfen, und elementspezifischen Tests unterschieden. Allgemeine Tests befinden sich gemeinsam mit den Konfigurationsdateien (conftest.py) auf der obersten Ebene. Elementspezifische Tests befinden sich in test/element. Nach Möglichkeit sollten immer mehrere Fälle je Test überprüft werden -- siehe hierzu Parametrizing fixtures and test functions.

Im Testfile eines Elements müssen zunächst die benötigten Module importiert werden.

```python import pytest from ssrq_cli.validate.xml import RNGJingValidator

from main import Schema

from ..conftest import SimpleTEIWriter ```

Anschließend können die Tests erstellt werden. Hierbei wird zwischen Tests zum Prüfen von RELAXNG- und Schematron-Regeln unterschieden (siehe bspw. test_idno.py). Die Testdefinition ist dabei weitestgehend an der Triple-A-Rule (Arrange-Act-Assert) orientiert und folgt typischerweise folgendem Muster:

```python

ARRANGE

@pytest.mark.parametrize( "name, markup, result", [ ( "valid-text", "

foo

", True, ), ( "valid-text", "

bar

foo

", True, ), ( "invalid-text-with-back-only", "

foo

", False, ), ( "invalid-text-with-attribute", "

hallo welt!

", False, ), ( "invalid-text-with-group", "

hallo welt!

", False, ), ], ) def testtext( elementschema: dict[str, str], writer: SimpleTEIWriter, name: str, markup: str, result: bool, ): validator = RNGJingValidator() writer.write(name, markup)

# ACT & ASSERT innerhalb der generischen Funktion `test_element_with_rng`
test_element_with_rng("text", name, markup, result, False)

```

Sollen nur die Tests eines Elements ausgeführt werden, dann kann dazu folgender Befehl verwendet werden:

sh run test tests/src/schema/elements/test_cell.py

Links zwischen Bestandteilen des Schemas und der (übrigen) Dokuseite

Aus dem Schema wird statisch eine Dokumentationsseite erzeugt (siehe oben). Einige Bestandteile dieser Seite liegen statisch als .md-Dateien vor. Verknüpfungen zwischen Schema und diesen Einzeldateien (oder umgekehrt) können über direkten Verweis auf die jeweilige Datei vorgenommen werden.

Aus dem Schema heraus:

xml <ref target="print.md" `

Oder aus einer Markdown-Datei auf ein Element:

md Der Tag [TEI][tei.de.md]

Die relative Pfaden (von a zu b) werden während des Build-Prozesses automatisch aufgelöst und müssen nicht händisch nachgeführt werden.

Schema erzeugen

Erzeugung einer neuen Version und Upload

Die Version eines Schemas ist je Inhaltstyp in der Datei pyproject.toml festgelegt. Sieh hierzu den Abschnitt Versionierung. Der Befehl

sh run compile

erzeugt die jeweiligen Schemadateien. Je Inhaltstyp werden eine .odd sowie eine .rng im Ordner /build gespeichert.

Erzeugung der Dokumentation

Die Dokumentation für das Schema zur Validierung der Transkriptionen der ‚Stücke‘ (der Quelldokumente) wird aus dem ODD selbst erzeugt. Mithilfe des Dokumentations-Frameworks mkdocs wird eine statische HTML-Seite erzeugt. Diese beinhaltet sowohl die Dokumentation der einzelnen Tags als auch erläuternde Texte zu philologischen Grundlagenentscheidungen.

Befehle
  • run serve-docs: Erzeugt die Dokumentation und startet zugleich einen Webserver (gedacht für die lokale Entwicklung)
  • run build-docs: Generiert die statische Dokumentationsseite. Das Ergebnis wird im Ordner /site abgelegt.
Datei- / Ordnerstruktur

Die Quelldateien für die Dokumentation sind einerseits die einzelnen Elementdefinitionen, diese befinden sich /src/elements und andererseits spezifische Dateien für die Dokuseite:

  • mkdocs.yml: Konfigurationsdatei für mkdocs; enthält ebenso Übersetzungen für die Navigation
  • utils/docs/odd2md.py: Python-Skript zur Umwandlung der ODD-Datei in einzelne Markdown-Dateien je Element (Quelle ist ein kompiliertes ODD)
  • utils/docs/doc_hooks.py: Hook (‚Event-Skript‘), welches von mkdocs beim Start aufgerufen wird – der Hook bindet wiederum odd2md.py ein
  • src/docs: grundlegende Quelldateien für die Dokuseite
    • index.md: Startseite (das Kürzel .de oder .fr verweist auf die jeweilige Sprachversion)
    • assets: CSS, Bilddateien usw.
    • base: Markdowndateien mit statischen Beschreibungstexten (bspw. Datierungsrichtlinien)
    • elements: leerer Ordner, in welchen die Markdowndateien je Element temporär gespeichert werden
    • translations: Übersetzungen für Bestandteile des UIs / des Inhalts

Autor:innen

Lizenzierung

Siehe LICENSE.

Owner

  • Name: Rechtsquellenstiftung des Schweizerischen Juristenvereins
  • Login: SSRQ-SDS-FDS
  • Kind: organization
  • Email: info@ssrq-sds-fds.ch
  • Location: St. Gallen

Research institution that publishes sources of old law up to 1798 in the collection of Swiss law sources.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Politycki"
  given-names: "Bastian"
  orcid: "https://orcid.org/0000-0002-6308-2424"
- family-names: "Sonder"
  given-names: "Christian"
- family-names: "Sutter"
  given-names: "Pascale"
  orcid: "https://orcid.org/0000-0003-4348-4394"
title: "TEI-XML Schema der Sammlung Schweizerischer Rechtsquellen"
version: 1.0.0-alpha.1
url: "https://github.com/SSRQ-SDS-FDS/ssrq-schema"

GitHub Events

Total
  • Release event: 7
  • Delete event: 125
  • Issue comment event: 41
  • Push event: 688
  • Pull request review comment event: 6
  • Pull request review event: 80
  • Pull request event: 240
  • Create event: 123
Last Year
  • Release event: 7
  • Delete event: 125
  • Issue comment event: 41
  • Push event: 688
  • Pull request review comment event: 6
  • Pull request review event: 80
  • Pull request event: 240
  • Create event: 123

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 2
  • Total pull requests: 213
  • Average time to close issues: about 20 hours
  • Average time to close pull requests: 4 days
  • Total issue authors: 1
  • Total pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.23
  • Merged pull requests: 142
  • Bot issues: 0
  • Bot pull requests: 95
Past Year
  • Issues: 0
  • Pull requests: 85
  • Average time to close issues: N/A
  • Average time to close pull requests: 3 days
  • Issue authors: 0
  • Pull request authors: 4
  • Average comments per issue: 0
  • Average comments per pull request: 0.13
  • Merged pull requests: 58
  • Bot issues: 0
  • Bot pull requests: 13
Top Authors
Issue Authors
  • ChristianSonderUniSG (3)
  • dependabot[bot] (2)
  • Bpolitycki (1)
Pull Request Authors
  • dependabot[bot] (192)
  • ChristianSonderUniSG (86)
  • Bpolitycki (45)
  • PascaleSSRQ (14)
Top Labels
Issue Labels
pip dependencies (2)
Pull Request Labels
pip dependencies (192)

Dependencies

.github/workflows/pr_to_dev.yml actions
  • Bpolitycki/setup-xmllint-action 1.0.1 composite
  • abatilo/actions-poetry v2 composite
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • webfactory/ssh-agent v0.7.0 composite
.github/workflows/pr_to_main.yml actions
  • Bpolitycki/setup-xmllint-action 1.0.1 composite
  • abatilo/actions-poetry v2 composite
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • webfactory/ssh-agent v0.7.0 composite
poetry.lock pypi
  • aiohttp 3.8.4 develop
  • aiosignal 1.3.1 develop
  • async-timeout 4.0.2 develop
  • attrs 23.1.0 develop
  • black 23.3.0 develop
  • cfgv 3.3.1 develop
  • click 8.1.3 develop
  • colorama 0.4.6 develop
  • commonmark 0.9.1 develop
  • distlib 0.3.7 develop
  • elementpath 4.1.2 develop
  • execnet 1.9.0 develop
  • filelock 3.12.2 develop
  • frozenlist 1.3.3 develop
  • ghp-import 2.1.0 develop
  • identify 2.5.26 develop
  • iniconfig 2.0.0 develop
  • jinja2 3.1.2 develop
  • lxml 4.9.2 develop
  • markdown 3.3.7 develop
  • markupsafe 2.1.2 develop
  • mergedeep 1.3.4 develop
  • mkdocs 1.4.3 develop
  • mkdocs-material 9.1.15 develop
  • mkdocs-material-extensions 1.1.1 develop
  • mkdocs-static-i18n 0.56 develop
  • multidict 6.0.4 develop
  • mypy 1.3.0 develop
  • mypy-extensions 1.0.0 develop
  • nodeenv 1.8.0 develop
  • packaging 23.1 develop
  • pathspec 0.11.1 develop
  • platformdirs 3.5.1 develop
  • pluggy 1.0.0 develop
  • pre-commit 3.3.3 develop
  • pygments 2.15.1 develop
  • pymdown-extensions 10.0.1 develop
  • pyschval 0.2.0 develop
  • pytest 7.3.1 develop
  • pytest-xdist 3.3.1 develop
  • python-dateutil 2.8.2 develop
  • pyyaml 6.0 develop
  • pyyaml-env-tag 0.1 develop
  • regex 2023.5.5 develop
  • rich 12.6.0 develop
  • ruff 0.0.261 develop
  • setuptools 68.0.0 develop
  • shellingham 1.5.0.post1 develop
  • six 1.16.0 develop
  • snakemd 2.1.0 develop
  • ssrq-cli 0.6.1 develop
  • tomli-w 1.0.0 develop
  • typer 0.7.0 develop
  • types-requests 2.31.0.1 develop
  • types-urllib3 1.26.25.13 develop
  • virtualenv 20.24.1 develop
  • watchdog 3.0.0 develop
  • yarl 1.9.2 develop
  • certifi 2023.5.7
  • charset-normalizer 3.1.0
  • idna 3.4
  • pydantic 1.10.7
  • requests 2.30.0
  • saxonche 12.2.0
  • saxonche-stubs 0.4.0
  • semver 2.13.0
  • typing-extensions 4.5.0
  • urllib3 2.0.2
pyproject.toml pypi
  • pydantic ^1.10.5
  • python ^3.11
  • requests ^2.30.0
  • saxonche ^12.0.0
  • saxonche-stubs ^0.4.0
  • semver ^2.13.0
.github/actions/mike/action.yml actions
.github/actions/setup/action.yml actions
  • actions/setup-python v4 composite
  • webfactory/ssh-agent v0.7.0 composite