Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datenmodell im JSON Schema Format speichern #283

Closed
lu-j opened this issue Jun 20, 2015 · 5 comments
Closed

Datenmodell im JSON Schema Format speichern #283

lu-j opened this issue Jun 20, 2015 · 5 comments
Milestone

Comments

@lu-j
Copy link
Contributor

lu-j commented Jun 20, 2015

Das Datenmodell ist aktuell nicht maschinenlesbar in Markdown geschrieben. Ich will das Datenmodell in das JSON Schema Format übertragen. Aus JSON Schema können wir automatisch ein ER Diagramm oder Markdown Tabellen für das Schema Kapitel generieren lassen. Auch Clients und der Validator können das JSON Schema verwenden. Der Vorteil wäre, dass man bei Änderungen am Datenmodell nur das JSON Schema anpassen muss und den Rest automatisch neu generieren lassen kann. Es ist vor allem eine Arbeitsersparnis, inhaltlich wird sich dadurch nichts an der Spezifikation ändern.

Allerdings kann man mit JSON Schema nicht die Beziehung zwischen zwei OParl Objekten abbilden. Wir können JSON Schema aber mit den folgenden drei Eigenschaften erweitern (eigene Erweiterungen sind in JSON Schema erlaubt):

  • ref: Objekttyp der referenziert wird
  • backref: Name der Eigenschaft die vom referenzierten Objekt auf dieses Objekt zurück referenziert (falls vorhanden)
  • cardinality: die Kardinalität, habe ich im Beispiel gleich in der Form angegeben, wie ich sie in Kardinalitätsangaben überarbeiten #282 vorgeschlagen habe.

Hier ein JSON Schema Beispiel für AgendaItem: die "meeting" Eigenschaft referenziert ein Meeting Objekt. Im Meeting Objekt gibt es die die Eigenschaft "agendaItem" die auf AgendaItems zurück referenziert.

{
    "title": "AgendaItem",
    "properties": {
        "name": {
            "description":"Das Thema des Tagesordnungspunktes.",
            "type": "string"
        },
        "meeting": {
            "description":"Sitzung, der der Tagesordnungspunkt zugeordnet ist.",
            "type": "string",
            "format": "uri",
            "ref": "Meeting",
            "backref": "agendaItem",
            "cardinality": "n:1"
        },
...

Das Schema will ich in diesem Repo speichern, aber nochmal zusätzlich im Repo "schema" bereitstellen, das ausschließlich das Schema beinhalten soll und so besser in andere Projekte eingebunden werden kann. Mit Hilfe von git-subtree kann man das "schema" Repo komfortabel mit dem Schema in diesem Repo synchronisieren. Aktuell haben wir schon ein "schema" Repo, das aktuell JSON-LD-Kontexte enthält, daher will ich dieses Repo in "json-ld-context" umbenennen.

@akuckartz
Copy link
Contributor

Zumindest zum Teil ist dies ein Duplicate von #27.

Auch Clients und der Validator können das JSON Schema verwenden.

Ich begrüße es, wenn die Maschinenlesbarkeit von Spezifikationen gefördert wird !

Allerdings kann man mit JSON Schema nicht die Beziehung zwischen zwei OParl Objekten abbilden. Wir können JSON Schema aber mit den folgenden drei Eigenschaften erweitern (eigene Erweiterungen sind in JSON Schema erlaubt):
ref: Objekttyp der referenziert wird
backref: Name der Eigenschaft die vom referenzierten Objekt auf dieses Objekt zurück referenziert (falls vorhanden)
cardinality: die Kardinalität, habe ich im Beispiel gleich in der Form angegeben, wie ich sie in #282 vorgeschlagen habe.

Ich habe seit Juli 2014 schon drauf gewartet, dass OParl das Semantic Web für sich neu erfindet - bravo ;-)

Allerdings wäre #237 aus mehreren Gründen ein wesentlich nachhaltigerer Weg dort hin, denn eine Insellösung für OParl würde zukunftige Entwicklungen behindern und in eine Sackgasse führen. (EDIT: leicht umformuliert)

@akuckartz
Copy link
Contributor

Zwei Links für diejenigen, die sich für relevante Aktivitäten der Semantic Web Community im W3C interessieren:

RDF Data Shapes Working Group Charter
http://www.w3.org/2014/data-shapes/charter

SHACL (Shapes Constraint Language) Primer
W3C Editor's Draft
http://w3c.github.io/data-shapes/data-shapes-primer/

@akuckartz
Copy link
Contributor

Konkreter: backref ähnelt etwas der bereits seit über zehn Jahren in OWL spezifizierten Eigenschaft owl:inverseOf.

OpenGovLD geht damit aber noch einfacher um: inverse Properties werden nicht geschaffen, denn sie sind unerwünscht und unnötig, siehe OpenGovLD#127 Dabei wird die JSON-LD Property "@reverse" verwendet. Dies deckt sich auch mit der Position von TimBL, siehe mnot/I-D#39 (comment)

@the-infinity the-infinity added this to the 1.0 Freigabe milestone Jun 28, 2015
lu-j added a commit that referenced this issue Jul 1, 2015
Die Dateien werden nicht mehr benötigt, da mit dem json_schema2markdown.py
Skript das JSON Schema (inklusive der Beispiele) zu Markdown konvertiert werden
kann.
@lu-j
Copy link
Contributor Author

lu-j commented Jul 17, 2015

Das Schema ist jetzt komplett in JSON-Schema gespeichert. Für die OParl eigenen Eigenschaften, habe ich Präfixe verwendet (Beispiel: "oparl:ref").

@akuckartz: wie ich bereits oben geschrieben habe, wollen wir das JSON-Schema nur intern verwenden um komfortabler an der Spezifikation arbeiten zu können. Mit JSON-LD kann man Linked Data Informationen zu den JSON-Eigenschaften speichern. Dabei ist es möglich, ein JSON-LD Objekt ohne Informationsverlust in verschiedene Formen umzuwandeln. Es ist also nicht dazu gedacht, die genaue Form und Struktur eines JSON-Objekts zu beschreiben und zu validieren. Daher war JSON-LD keine Alternative für uns. Mit den aktuell vorhandenen inversen Referenzen bin ich auch noch nicht zufrieden, dafür werde ich aber ein eigenes Issue öffnen.

@lu-j lu-j closed this as completed Jul 17, 2015
@lu-j lu-j mentioned this issue Jul 17, 2015
@akuckartz
Copy link
Contributor

@lu-j Nur als Ausblick: JSON-Schema können prinzipiell zur Festlegung von JSON-LD Serialisierungen (der Syntax) verwendet werden. Darauf kann z.B. in einem JSON-LD Profile (#222) verwiesen werden.

Es gibt aber derzeit auch wieder Diskussionen über "rdf crystalization". Auch dabei geht es um Festlegungen der Serialisierung für Nicht-RDF-Anwender.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants