Deze pagina werd gearchiveerd in 2023. Voor de meest recente versie, bekijk de bijgewerkte versie onder de tab 'Data aanleveren'.


Inleiding

Een data aanlevering vertrekt het best met een bestaand en correct XML-bestand. Een dergelijk XML-bestand kan je openen en editeren met zo goed als elke tekst editor. Notepad++ is een voorbeeld van zo'n text editor die XML ondersteunt.

Er zijn enkele methoden om een XML-bestand te valideren tegen fouten.

Online XML validatie (voor beginners & experten)

De eerste methode maakt gebruik van de XML-validatietool van DOV. De XML-validatietool is beschikbaar via het DOV-Portaal of rechtstreeks met volgende url:

Het kiezen van een XML-bestand start de validatie direct. De details geven weer of er fouten gevonden zijn of niet. De header in het XML-bestand bepaalt tegen welk schema het wordt gevalideerd.

Voorbeeld van validatie zonder fouten



Voorbeeld van validatie met fout


[referentieprofiel:(p2)]-->[beginpunt]-->[xy]-->[betrouwbaarheid] Invalid content was found starting with element 'betrouwbaarheid'. One of '{x}' is expected.

Aan de hand van de foutendetails is het mogelijk de foutieve XML’s aan te passen en te verbeteren.

Offline XML validatie (voor experten)

De tweede methode maakt gebruik van een XML-schema bestand (ook XSD genoemd) dewelke kan gebruikt worden voor de validatie van XML’s. Op dezelfde pagina als voordien kunnen alle bestaande schema’s gedownload worden. Hier kan een specifiek schema gekozen worden:

Eens op een link geklikt, downloadt er een ZIP-bestand. Best voorziet u hiervoor een specifieke map, bv. In je documenten “C:\Users\‹PC_GEBRUIKER›\Documents\xsd”. Als u deze ZIP uitpakt kan u het XML-schema vinden in de folder “…\xsd\kern”.

Eens het XSD-schema op zijn plaats staat, kan deze gebruikt worden door een validator naar keuze. Deze validator kan een webapp, script of software zijn en de keuze hiervan ligt volledig bij de gebruiker.

Aangeraden opties zijn unit tests via script.

Voorbeeld in Java

In onderstaand voorbeeld is het mogelijk zowel met URL verwijzing als met de bronbestanden te werken. Deze kunnen gevonden worden op:


import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import java.net.URL;
import java.net.MalformedURLException;
import org.xml.sax.SAXException;
//import java.io.File; // Als er gebruik wordt gemaakt van een XSD-file ipv een URL
import java.io.IOException;
...
URL schemaFile = new URL("https://www.dov.vlaanderen.be/xdov/schema/latest/xsd/kern/dov.xsd");
// Andere schema's kunnen gevonden worden op https://www.dov.vlaanderen.be/portaal/?module=ocdov-xdov-validate
// Voorbeeld met een lokaal bestand:
// File schemaFile = new File("/location/to/localfile.xsd");
Source xmlFile = new StreamSource(new File("C:\\<PAD_NAAR_XML>\\mijn_xml.xml"));
SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
  Schema schema = schemaFactory.newSchema(schemaFile);
  Validator validator = schema.newValidator();
  validator.validate(xmlFile);
  System.out.println(xmlFile.getSystemId() + " is geldig");
} catch (SAXException e) {
  System.out.println(xmlFile.getSystemId() + " is NIET geldig. Reden:" + e);
} catch (IOException e) {}

XML validatie via DOV-webservices

Aan te spreken url: https://services.dov.vlaanderen.be/dov-xdov-server/import/validate (Type request: POST, Header: Content-Type: application/json)

curl -X POST -d "@validate-post-body.json" -k https://services.dov.vlaanderen.be/dov-xdov-server/import/validate   -H 'Content-Type: application/json' --key my_key.key --cert my_cert.pem  -v

Een json-body moet hier mee gestuurd worden:

{
  "id": null,
  "omschrijving": "opladen XML",
  "gebruikersnaam": "<username>",
  "datumOpladen": "2019-10-10",
  "datumProcessed": null,
  "aantalVerwerkt": 0,
  "aantalFouten": 0,
  "partner": "<kbonummer van uw organisatie>",
  "invoerwijze": {
    "code": "2",
    "beschrijving": "edov"
  },
  "status": {
    "code": "1",
    "beschrijving": "niet verwerkt"
  },
  "options": [
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "20",
        "beschrijving": "Boring"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "21",
        "beschrijving": "Opmerkingen bij een boring"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "22",
        "beschrijving": "Alternatieve namen"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "101",
        "beschrijving": "Informele stratigrafie"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "103",
        "beschrijving": "Lithologische beschrijving"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "104",
        "beschrijving": "Gecodeerde lithologie"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "105",
        "beschrijving": "Hydrogeologische stratigrafie"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "108",
        "beschrijving": "Geotechnische codering"
      }
    },
    {
      "id": null,
      "propertyValue": "true",
      "property": {
        "code": "120",
        "beschrijving": "Opmerkingen bij een interpretatie"
      }
    }
  ],
  "bestand": {
    "id": "<BESTAND-ID>",
    "naam": "<BESTANDSNAAM>"
  }
}

In bovenstaand voorbeeld van post-data moet aandacht besteed worden aan de volgende velden:


Mogelijke codes voor objecten in het veld 'options':

(waarschuwing) Opgelet: voor gebruikers met de rol 'boorbedrijf' wordt een apart XML-schema gebruikt, waarin nog niet alle objecten opgenomen zitten, bv. putten en filters zitten er nog niet in. Dit leidt dan tot een foutmelding 'Het schema wordt niet ondersteund.be.vlaanderen.dov.schemas.kern.DovSchemaType'. Voor gebruikers met een andere rol kan je kiezen voor het uitgebreide XML-schema, door in het json-bestand als 'invoerwijze' te kiezen voor 'intern' ipv 'edov' (code 1 ipv code 2).


Het antwoord van de server is een json-bestand met daarin een overzicht van succes of fouten van elke element in de XML tegenover het edov-xml-schema.

Het belangrijkste is lijn 8. Daar moet staan 'validatie zonder fouten'; indien niet, is het een ongeldig bestand.

{
  "details": [
    {
      "id": "2",
      "context": null,
      "status": {
        "code": "7",
        "beschrijving": "validatie zonder fouten"
      },
      "messages": [],
      "identificatie": "1419-B-P6-Belle-Vue2",
      "boring": {
        "id": null,
        "partner": null,
        "uniekDOVId": "1419-B-P6-Belle-Vue2",
        "locatie": null,
        "displayName": "1419-B-P6-Belle-Vue2",
        "boringKey": null,
        "statusCode": null,
        "permKey": null
      }
    },
    {
      "id": null,
      "context": null,
      "status": {
        "code": "7",
        "beschrijving": "validatie zonder fouten"
      },
      "messages": [],
      "identificatie": "type 'informele stratigrafie' gekoppeld aan boring '1419-B-P6-Belle-Vue2' (datum '2010-11-13')",
      "interpretatie": {
        "id": null,
        "interpretatieKey": null,
        "partner": null,
        "type": {
          "code": "1",
          "beschrijving": "informele stratigrafie",
          "naam": "informele stratigrafie"
        },
        "datum": null,
        "auteurs": null,
        "moederBoring": {
          "id": null,
          "partner": null,
          "uniekDOVId": "1419-B-P6-Belle-Vue2",
          "locatie": null,
          "displayName": "1419-B-P6-Belle-Vue2",
          "boringKey": null,
          "statusCode": null,
          "permKey": null
        },
        "sondering": null,
        "statusCode": null,
        "permKey": null,
        "fase": null,
        "securityStatus": null
      }
    },
    {
      "id": null,
      "context": null,
      "status": {
        "code": "7",
        "beschrijving": "validatie zonder fouten"
      },
      "messages": [],
      "identificatie": "type 'lithologische beschrijving' gekoppeld aan boring '1419-B-P6-Belle-Vue2' (datum '2016-05-12')",
      "interpretatie": {
        "id": null,
        "interpretatieKey": null,
        "partner": null,
        "type": {
          "code": "3",
          "beschrijving": "lithologische beschrijving",
          "naam": "lithologische beschrijving"
        },
        "datum": null,
        "auteurs": null,
        "moederBoring": {
          "id": null,
          "partner": null,
          "uniekDOVId": "1419-B-P6-Belle-Vue2",
          "locatie": null,
          "displayName": "1419-B-P6-Belle-Vue2",
          "boringKey": null,
          "statusCode": null,
          "permKey": null
        },
        "sondering": null,
        "statusCode": null,
        "permKey": null,
        "fase": null,
        "securityStatus": null
      }
    }
  ],
  "summary": {
    "items": [
      {
        "option": {
          "code": "20",
          "beschrijving": "Boring"
        },
        "numberOfObjects": 1,
        "id": "20"
      },
      {
        "option": {
          "code": "101",
          "beschrijving": "Informele stratigrafie"
        },
        "numberOfObjects": 1,
        "id": "101"
      },
      {
        "option": {
          "code": "103",
          "beschrijving": "Lithologische beschrijving"
        },
        "numberOfObjects": 1,
        "id": "103"
      },
      {
        "option": {
          "code": "105",
          "beschrijving": "Hydrogeologische stratigrafie"
        },
        "numberOfObjects": 0,
        "id": "105"
      },
      {
        "option": {
          "code": "108",
          "beschrijving": "Geotechnische codering"
        },
        "numberOfObjects": 0,
        "id": "108"
      },
      {
        "option": {
          "code": "104",
          "beschrijving": "Gecodeerde lithologie"
        },
        "numberOfObjects": 0,
        "id": "104"
      }
    ],
    "id": null
  }
}