Justert XSD for å validere Nikita-uttrekk

Petter Reinholdtsen pere at hungry.com
Thu Apr 15 12:48:12 CEST 2021


De siste dagene har jeg sjekket om "xmllint --noout --schema
arkivstruktur.xsd arkivstruktur.xml" liker resultatet fra "export-all
--xml" i noark5-tester.  Fant en del feil i prosessen, men etter at de
var fikset er det fortsatt noen mer fundamentale ting igjen.

For moro skyld har jeg laget en justert arkivstruktur.xsd som validerer,
se vedlagte diff.

Den fundamentale utfordringen er at "export-all --xml" henter ut også
ikke-avsluttede arkiver, hvilket gjør at de påkrevde feltene
avsluttetDato, avsluttetAv, arkivertDato og ArkivertAv naturligvis
mangler.  Det må en naturligvis akseptere hvis en skal bruke dette
XML-formatet til å migrere arkivdata fra et system til et annet.

Et mindre problem er at Nikita kun automatisk setter verdi på mappeID
for saksmapper, slik at det mangler på "rå" mappe-instanser.  Jeg endret
mappeID til å bli valgfritt for a jobbe meg rundt det problemet, men
tenker riktig løsning her er at Nikita begynner å fylle inn mappeID ved
oppretting av mapper, ikke bare når de utvides til saksmappe.

Et mer åpent spørsmål er at Nikita lar en opprette et arkiv før en har
opprettet en arkivskaper, og det er ingenting som tvinger API-brukerne i
dag til å opprette arkivskaper.  Resultatet blir at uttrekket som lages
mangler påkrevde arkiv.arkivskaper.  Gjorde det valgfritt for å jobbe
meg rundt problemet, men tenker at her må vi finne en bedre plan. :)

På den positivie siden gjorde dette at jeg kunne validere det som kommer
ut fra export-all --xml, inkludert virksomhetsspesifikkeMetadata. :)

For å gjøre det enklere å teste med de uendrede XSD-filene, så har jeg
laget et nytt export-all-argument --onlyclosed, som kun tar med
avsluttede og arkiverte instanser.  Den er ikke testet, da jeg så langt
ikke har hatt et avsluttet arkiv på teste med på nikita.oslomet.no.

Uansett, ville bare delen med dere status på XML-validering av
API-baserte uttrekk. :)

diff --git a/schemas/arkivstruktur.xsd b/schemas/arkivstruktur.xsd
index a2a4638..137cc5b 100644
--- a/schemas/arkivstruktur.xsd
+++ b/schemas/arkivstruktur.xsd
@@ -76,10 +76,10 @@
       <xs:element name="oppbevaringssted" type="n5mdk:oppbevaringssted" minOccurs="0" maxOccurs="unbounded"/>
       <xs:element name="opprettetDato" type="n5mdk:opprettetDato"/>
       <xs:element name="opprettetAv" type="n5mdk:opprettetAv"/>
-      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato"/>
-      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv"/>
+      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato" minOccurs="0"/>
+      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv" minOccurs="0"/>
 
-      <xs:element name="arkivskaper" type="arkivskaper" maxOccurs="unbounded"/>
+      <xs:element name="arkivskaper" type="arkivskaper" minOccurs="0" maxOccurs="unbounded"/>
 
       <!-- Vil alltid inneholde minst en forekomst av enten arkiv eller arkivdel -->
       <xs:choice>
@@ -109,8 +109,8 @@
       <xs:element name="oppbevaringssted" type="n5mdk:oppbevaringssted" minOccurs="0" maxOccurs="unbounded"/>
       <xs:element name="opprettetDato" type="n5mdk:opprettetDato"/>
       <xs:element name="opprettetAv" type="n5mdk:opprettetAv"/>
-      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato"/>
-      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv"/>
+      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato" minOccurs="0"/>
+      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv" minOccurs="0"/>
       <xs:element name="arkivperiodeStartDato" type="n5mdk:arkivperiodeStartDato" minOccurs="0"/>
       <xs:element name="arkivperiodeSluttDato" type="n5mdk:arkivperiodeSluttDato" minOccurs="0"/>
       <xs:element name="referanseForloeper" type="n5mdk:referanseForloeper" minOccurs="0"/>
@@ -178,7 +178,7 @@
   <xs:complexType name="mappe">
     <xs:sequence>
       <xs:element name="systemID" type="n5mdk:systemID"/>
-      <xs:element name="mappeID" type="n5mdk:mappeID"/>
+      <xs:element name="mappeID" type="n5mdk:mappeID" minOccurs="0"/>
       <xs:element name="tittel" type="n5mdk:tittel"/>
       <xs:element name="offentligTittel" type="n5mdk:offentligTittel" minOccurs="0"/>
       <xs:element name="beskrivelse" type="n5mdk:beskrivelse" minOccurs="0"/>
@@ -187,8 +187,8 @@
       <xs:element name="oppbevaringssted" type="n5mdk:oppbevaringssted" minOccurs="0" maxOccurs="unbounded"/>
       <xs:element name="opprettetDato" type="n5mdk:opprettetDato"/>
       <xs:element name="opprettetAv" type="n5mdk:opprettetAv"/>
-      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato"/>
-      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv"/>
+      <xs:element name="avsluttetDato" type="n5mdk:avsluttetDato" minOccurs="0"/>
+      <xs:element name="avsluttetAv" type="n5mdk:avsluttetAv" minOccurs="0"/>
       <xs:element name="referanseArkivdel" type="n5mdk:referanseArkivdel" minOccurs="0" maxOccurs="unbounded"/>
       <xs:element name="virksomhetsspesifikkeMetadata" type="xs:anyType" minOccurs="0"/>
 
@@ -260,8 +260,8 @@
       <xs:element name="systemID" type="n5mdk:systemID"/>
       <xs:element name="opprettetDato" type="n5mdk:opprettetDato"/>
       <xs:element name="opprettetAv" type="n5mdk:opprettetAv"/>
-      <xs:element name="arkivertDato" type="n5mdk:arkivertDato"/>
-      <xs:element name="arkivertAv" type="n5mdk:arkivertAv"/>
+      <xs:element name="arkivertDato" type="n5mdk:arkivertDato" minOccurs="0"/>
+      <xs:element name="arkivertAv" type="n5mdk:arkivertAv" minOccurs="0"/>
       <xs:element name="referanseArkivdel" type="n5mdk:referanseArkivdel" minOccurs="0" maxOccurs="unbounded"/>
 
       <xs:element name="part" type="part" minOccurs="0" maxOccurs="unbounded"/>

-- 
Vennlig hilsen
Petter Reinholdtsen


More information about the nikita-noark mailing list