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

Json generatie verbeteringen #574

Open
ThiesMesdag opened this issue Jan 7, 2025 · 9 comments
Open

Json generatie verbeteringen #574

ThiesMesdag opened this issue Jan 7, 2025 · 9 comments

Comments

@ThiesMesdag
Copy link
Contributor

Zie: #462 (comment)

De (geo-)Json generator gaat bij het maken van relaties uit van de rolnamen van de relatie. Bij het ontbreken van de rolnaam wordt een ongetypeerde target van de relatie gegenereerd. Als Kadaster willen we dat bij het genereren van een Json relatie de relatienaam wordt gebruikt voor een relatie naar een specifiek objecttype. Ofwel Imvertor moet voor het Kadaster ook kijken naar de relatienaam bij het genereren van de target.

zie onderstaande voorbeeld:
Model
image

Gegenereerde Json

 "KadastraleGrens" : {
      "$anchor" : "KadastraleGrens",
      "description" : "definitie: Een Kadastrale Grens is de weergave van een kadastrale grens op de kadastrale kaart die door de dienst van het Kadaster ingemeten en verwerkt wordt, op basis van inlichtingen van belanghebbenden ; begrip: http://brk.basisregistraties.overheid.nl/id/concept/KadastraleGrens",
      "allOf" : [ {
        "$ref" : "#/$defs/Voorkomen"
      }, {
        "type" : "object",
        "properties" : {
          "auditTrail" : {
            "description" : "definitie: AuditTrail is een verzameling gegevens over door wie en waarom een voorkomen van een objecttype in de registratie is gewijzigd.",
            "$ref" : "#/$defs/AuditTrail"
          },
          "historie" : {
            "description" : "definitie: Historie beschrijft de opeenvolging van veranderingen van gegevens van een informatieobject in de registratie.",
            "$ref" : "#/$defs/KadasterHistorie"
          },
          "transactie" : {
            "$ref" : "#/$defs/TransactieRecord"
          },
          "identificatie" : {
            "description" : "definitie: De Kadaster identificatie is een door het Kadaster toegekend landelijk uniek nummer aan dit object binnen de kadastrale registratie.",
            "$ref" : "#/$defs/BRK-Id"
          },
          "type" : {
            "description" : "definitie: Type kadastrale grens is de aanduiding of een kadastrale grens definitief, voorlopig of administratief is. De waarden zijn opgenomen in een waardelijst.",
            "$ref" : "#/$defs/TypeGrens"
          },
          "grenslijn" : {
            "description" : "definitie: Een grenslijn is of een lijn (GML LineString), of een boog (GML ArcString).",
            "$ref" : "https://geojson.org/schema/LineString.json"
          },
          "perceelLinks" : {
            "type" : "string",
            "format" : "uri-reference"
          },
          "perceelRechts" : {
            "type" : "string",
            "format" : "uri-reference"
          }
        },
        "required" : [ "auditTrail", "historie", "transactie", "identificatie" ]
      } ]
    },

In de Json zou ik bij de relaties perceelLinks en perceelRechts verwachten dat daar iets staat als :

"perceelLinks" : {
          "type" : "string",
          "items" : {
            "$ref" : "#/$defs/Perceel"
          },
          "maxItems" : 1,
          "uniqueItems" : true
        }

NB ik weet niet of dit geldige json is, maar ik verwacht in ieder geval een referentie naar een perceel en niet naar een willekeurige uri-reference. Ik weet ook niet hoe 0 of 1 kardinaliteit moet worden gespecificeerd maar dat is vast anders dan in het bovenstaande voorbeeld.

@ThiesMesdag
Copy link
Contributor Author

Er is ook een Kadaster MIM -xml naar Json generator voor de datahub gemaakt. Misschien is dat ook een mogelijkheid om die te gebruiken of op te nemen in Imvertor voor niet Geo-json.

@PalmJanssen
Copy link
Collaborator

De (geo-)Json generator gaat bij het maken van relaties uit van de rolnamen van de relatie. Bij het ontbreken van de rolnaam wordt een ongetypeerde target van de relatie gegenereerd. Als Kadaster willen we dat bij het genereren van een Json relatie de relatienaam wordt gebruikt voor een relatie naar een specifiek objecttype. Ofwel Imvertor moet voor het Kadaster ook kijken naar de relatienaam bij het genereren van de target.

Dit is vanuit de huidige MIM standaard inderdaad een terechte functionaliteit of eis. Dus als relatienaam = leidend dan moet de relatienaam als de benaming van de realisatie van de relatie tussen twee instanties worden toegepast.

Omdat de MIM-UML naar JSON toepassing is gebaseerd op de OGC - UML to JSON encoding, had dit niet onze aandacht. Internationaal en in UML is de relatienaam namelijk geen property. Maar goed, bij MIM dus wel.

@ArjanLoeffen
Copy link
Contributor

Okay, dan gaan we dit zo inrichten.

@ArjanLoeffen
Copy link
Contributor

ArjanLoeffen commented Jan 14, 2025

Tot nu toe was geïmplementeerd: als er geen inlineOrByReference tagged value is gespecifieerd, wordt bij relaties tussen constructies met een identiteit zoals Objecttypen "byReference" aangenomen. Dit moet dus worden vervangen door "inline".

Geldt dit ook voor externe Koppelingen?
Geldt dit ook voor keuzen?

Ik vermoed van wel en stel het zo maar in.

@ArjanLoeffen
Copy link
Contributor

Resultaat:
image

wordt:

{
  "$comment" : "Github-574-jsonschema - version 1.0.0 / 20240409 by Imvertor Nightly-build.0 variant plainjson",
  "$schema" : "https://json-schema.org/draft/2019-09/schema",
  "$reqs" : [ "/req/plain", "/req/by-reference-uri", "/req/codelists-literal", "none" ],
  "$defs" : {
    "Objecttype1" : {
      "$anchor" : "Objecttype1",
      "type" : "object",
      "properties" : {
        "relatie1" : {
          "$ref" : "#/$defs/Objecttype2"
        }
      }
    },
    "Objecttype2" : {
      "$anchor" : "Objecttype2",
      "type" : "object",
      "properties" : { }
    }
  }
}

@PalmJanssen
Copy link
Collaborator

Tot nu toe was geïmplementeerd: als er geen inlineOrByReference tagged value is gespecifieerd, wordt bij relaties tussen constructies met een identiteit zoals Objecttypen "byReference" aangenomen. Dit moet dus worden vervangen door "inline".

Geldt dit ook voor externe Koppelingen? Geldt dit ook voor keuzen?

Ik vermoed van wel en stel het zo maar in.

Ehh... Dit gaat over iets anders en is correct zoals het was.

  1. Zie clause 7.8.2: er bestaat voor relaties en attributen een tagged value inlineOrByReference. Deze hoeft niet opgenomen te zijn. Als die niet opgenomen is wordt bij een relatierol (en dus nu naar wens ook een relatiesoort) default aangenomen dat het byReference is.
  2. De sturing of de relatiesoort danwel de relatierol in JSON toegepast moet worden kan denk ik alleen door op het informatiemodel niveau de tagged value Relatiemodelleringstype uit te lezen.

@PalmJanssen
Copy link
Collaborator

Het resultaat ziet er wel goed uit, maar zoals gezegd de aansturing is anders.

@ThiesMesdag
Copy link
Contributor Author

Eens met Paul, de inline of by reference staat er los van. Verder eens met 2.

@ArjanLoeffen
Copy link
Contributor

@PalmJanssen Ik snap het niet meer: Terugdraaien? Je schrijft: is correct zoals het was.

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

No branches or pull requests

3 participants