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

Document Object is required before uploading a file whereas Noark 5 requires a file at all times #285

Open
ivaylomitrev opened this issue Mar 6, 2023 · 10 comments

Comments

@ivaylomitrev
Copy link


       Prosjekt  NOARK 5 Tjenestegresesnitt
       Kategori  Noark 5.5.0 TG versjon 1.0
    Alvorlighet  kommentar / protest
   Meldingstype  utelatt / trenger klargjøring
Brukerreferanse  [email protected]
    Dokumentdel  Chapter #6 (Document upload of files, both small and large)

Beskrivelse

As per the API specification (Chapter 6 document upload):

Et dokumentobjekt opprettes før opplasting. Hvis noen av feltene «format», «mimeType», «filnavn», «sjekksum», «sjekksumAlgoritme» og «filstoerrelse» er fylt inn ved opprettelsen skal tjeneren verifisere at verdiene i de angitte feltene stemmer når den komplette filen er lastet opp.

As per the Noark 5 standard (section 2.7 Dokumentbeskrivelse og dokumentobjekt), however:

Dokumentobjekt er det laveste metadatanivået i arkivstrukturen. Et dokumentobjekt skal referere til én og kun en dokumentfil.

Additionally, arkivstruktur.xsd (as shipped with the Noark 5.5 standard) defines:

<xs:element name="referanseDokumentfil" type="n5mdk:referanseDokumentfil"/>
(which implies minOccurs=0)

The metadatakatalog also identifies the field as "obligatory".

As a result, the API specification requires that archive cores allow "empty" document objects which might, however, lead to data quality issues (as a document may never be linked to said document object). Such empty document objects might also have to be "worked around" in implementations of the API specification as they cannot be returned as results of queries (them not being Noark-compliant in this intermediary state).

Please let me know if I have misinterpreted the specification or the standard.

Ønsket endring

Is it possible to allow documents to be uploaded prior to creating a document object. This way, the Noark 5 requirements will be met by the following flow:

  1. Upload document
  2. Create document object referencing the uploaded document
@ivaylomitrev ivaylomitrev changed the title Document Object is required before uploading a file where as Noark 5 requires a file at all times Document Object is required before uploading a file whereas Noark 5 requires a file at all times Mar 6, 2023
@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented Mar 6, 2023 via email

@ivaylomitrev
Copy link
Author

Thanks for the confirmation! Uploading and creating a document object will satisfy the Noark 5 requirements (and, thus, ours). I might have to follow up on this one in the near future as it does affect heavily our own implementation of the API.

By saying that it will have to wait, do you know if there's a ongoing process for fixing outstanding issues and releasing a new version of the API in the short-term?

@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented Mar 6, 2023 via email

@ivaylomitrev
Copy link
Author

That might prove difficult with my (non-existent) Norwegian skills, but I will try where possible :)

@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented Mar 6, 2023 via email

petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue Mar 7, 2023
Merk, dette forslaget er basert på ideer i mangelmelding arkivverket#25.

Løser også utfordringer omtalt i mangelmelding arkivverket#285.
@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented Mar 9, 2023 via email

@ivaylomitrev
Copy link
Author

ivaylomitrev commented Mar 9, 2023

An open question is how high up in the hierarcy it should be possible to do the upload...
[...]
For example, it could be possible to upload a new document file into a file (mappe), and create the entries for registrering, dokumentbeskrivelse and dokumentobjekt automatically based on the content of the uploaded file...
[...]
Finally, it is the question on how to handle automatically detected values ...

My immediate reaction to this (emphasis on immediate) is that the API specification should not bother with such details. As long as it provides a simple generic way of uploading single documents that satisfy the requirements of the standard and, hopefully, all vendors, it should be sufficient. In other words, my impression is that the API specification should not overcomplicate the upload specification especially considering that there are already ways of creating resources such as dokumentbeskrivelse, dokumentobjekt, etc. I do not think new ways of creating these resources should be exposed as this would allow vendors to go with very specific (bordering with custom) interpretations of what metadata should be extracted from an uploaded (archive) file. Of course, the metadata for dokumentbeskrivelse/dokumentobjekt can be specified with multipart requests which would limit the amount of guesswork for the vendors, but uploading an arbitrary tarball would pose a lot of open questions to vendors as to the mapping of the data as such (arbitrary) multipart requests would be bothersome to build.

It seems to me that this particular point boils down to what the goal is, because I see two separate topics here - bulk upload/creation and single file uploads. I would say resolving the latter is more important at this point as it diverges from the requirements of the standard whereas the former can always be added in a backwards-compatible way to the specification, if a need arises for it. I would even argue that bulk upload should not be the topic of the API specification as long as it provides means of single file uploads. The argument here is that uploading a tarball may mean different things to different business systems (clients) and having a common vendor-specific processing of such tarballs may lead to more issues than it solves. Open topics off the top of my head are:

  • how would nested hierarchies be handled
  • what if a tarball contains multiple nested folders, but the upload target is a saksmappe which does not allow for such
  • what would provide information about mandatory primary klasses (and list values) in hierarchies that would require such
  • would each document in a tarball represent a dokumentbeskrivelse, or would they all represent a single dokumentbeskrivelse with multiple dokumentobjekter
  • what if one business system wants to upload a tarball as a tarball, but another wants it to be extracted and multiple entities to be generated from it
  • what limits would need to be imposed on archive files both in terms of size and contained documents... processing 5 files in a tarball is one thing, processing 1,000,000 is another regardless of the vendor's language/frameworks of choice. Also, would vendors be required to register all these in one transaction, meaning that a registration failure of the 999,999th document should revert the registration of all 999,998 before that?
  • etc.

Reading the questions I posed above, I am thinking that specifying bulk upload would either have to be extremely configurable to satisfy the requirements of various client-side business systems making it difficult to support by vendors or it would have to be very lenient allowing for a lot of interpretation and making it useless for clients.

I am not critiquing the idea in any way. I am convinced bulk upload would be a requirement by certain business systems/integrations. It is just my personal opinion that this best be left to the discretion of clients that are responsible for the business logic of the corresponding business system as either the API specification would have to be very limiting (posing issues for one or another existing vendor), or it would have to be very lenient (making the implementation very vendor-specific), or it would have to be overly configurable (making it difficult to implement and support both in terms of vendors and API specification).

EDIT: Of course, if there are actual requirements for bulk uploads by business systems/clients, maybe the best approach would be to gather such from them. Until such are available, I believe the bulk upload can go into too many directions and it might, unfortunately, be a guessing game as to what developers might need.

petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue Apr 28, 2023
…nstanser

Tillat opplasting direkte fra mappe, registrering, dokumentbeskrivelse og
dokumentobjekt.

Endre fra dagens opplastingsprosedyre, som har et mellomsteg der arkivet
er i en ufullstendig tilstand, mellom oppretting av dokumentobjekt-instans
og vellykket opplasting av arkivfil, og i stedet la en laste opp
fil directe fra dokumentbeskrivelse, registrering og mappe.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 13, 2023
…nstanser

Tillat opplasting direkte fra mappe, registrering, dokumentbeskrivelse og
dokumentobjekt.

Endre fra dagens opplastingsprosedyre, som har et mellomsteg der arkivet
er i en ufullstendig tilstand, mellom oppretting av dokumentobjekt-instans
og vellykket opplasting av arkivfil, og i stedet la en laste opp
fil directe fra dokumentbeskrivelse, registrering og mappe.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 30, 2023
…nstanser

Tillat opplasting direkte fra dokumentbeskrivelse og dokumentobjekt.

Dette lager et alternativ til dagens opplastingsprosedyre, som har
et mellomsteg der arkivet er i en ufullstendig tilstand, mellom
oppretting av dokumentobjekt-instans og vellykket opplasting av
arkivfil, og kunne laste opp fil direkte fra dokumentbeskrivelse
i tillegg til fra dokumentobjekt.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Reduserer utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 30, 2023
…trering

Endret til å tillate opplasting direkte fra mappe, registrering,
dokumentbeskrivelse og dokumentobjekt.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 30, 2023
…trering

Endret til å tillate opplasting direkte fra mappe, registrering,
dokumentbeskrivelse og dokumentobjekt.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 30, 2023
…trering

Endret til å tillate opplasting direkte fra mappe, registrering,
dokumentbeskrivelse og dokumentobjekt.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
petterreinholdtsen added a commit that referenced this issue May 30, 2023
…nstanser

Tillat opplasting direkte fra dokumentbeskrivelse og dokumentobjekt.

Dette gir klienter et alternativ til dagens opplastingsprosedyre, som har
et mellomsteg der arkivet er i en ufullstendig tilstand, mellom
oppretting av dokumentobjekt-instans og vellykket opplasting av
arkivfil, og kunne laste opp fil direkte fra dokumentbeskrivelse
i tillegg til fra dokumentobjekt.  Når dokumentobjekt opprettes
automatisk brukes variantformat Produksjonsformat med mindre
API-tjenesten kjenner igjen et arkivformat.

Dette forslaget er basert på ideer i mangelmelding #25, og
Reduserer utfordringer omtalt i mangelmelding #285.
petterreinholdtsen added a commit that referenced this issue May 30, 2023
…nstanser

Tillat opplasting direkte fra dokumentbeskrivelse og dokumentobjekt.

Dette lager et alternativ til dagens opplastingsprosedyre, som har
et mellomsteg der arkivet er i en ufullstendig tilstand, mellom
oppretting av dokumentobjekt-instans og vellykket opplasting av
arkivfil, og kunne laste opp fil direkte fra dokumentbeskrivelse
i tillegg til fra dokumentobjekt.

Dette forslaget er basert på ideer i mangelmelding #25, og
Reduserer utfordringer omtalt i mangelmelding #285.
petterreinholdtsen added a commit that referenced this issue May 30, 2023
…nstanser

Tillat opplasting direkte fra dokumentbeskrivelse og dokumentobjekt.

Dette gir klienter et alternativ til dagens opplastingsprosedyre, som har
et mellomsteg der arkivet er i en ufullstendig tilstand, mellom
oppretting av dokumentobjekt-instans og vellykket opplasting av
arkivfil, og kunne laste opp fil direkte fra dokumentbeskrivelse
i tillegg til fra dokumentobjekt.  Når dokumentobjekt opprettes
automatisk brukes variantformat Produksjonsformat med mindre
API-tjenesten kjenner igjen et arkivformat.

Dette forslaget er basert på ideer i mangelmelding #25, og
Reduserer utfordringer omtalt i mangelmelding #285.
petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue Nov 27, 2023
…trering

Endret til å tillate opplasting direkte fra mappe, registrering,
dokumentbeskrivelse og dokumentobjekt.

Etter opplasting returnerer de nyopprettede barneinstansene i
_embedded, jamfør JSON Hypertext Application Language.

Dette forslaget er basert på ideer i mangelmelding arkivverket#25, og
Løser utfordringer omtalt i mangelmelding arkivverket#285.
@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented May 28, 2024 via email

petterreinholdtsen added a commit to petterreinholdtsen/noark5-tjenestegrensesnitt-standard that referenced this issue May 28, 2024
…en fil.

Noark 5 krever at det er en fil koblet til hver dokumentobjekt-instans, men det
vil være en periode mellom dokumentobjekt blir opprettet og en fil blir lastet opp
der et slikt dokumentobjekt mangler slik kobling.  For å sikre at ingen
API-leser ser slike inkonsistente dokumentobjekt-instanser, gjør det klart at slike
ikke skal returneres som barn av sin foreldre-dokumentbeskrivelse før filopplastingen
har lykkes.

Relatert til mangelmelding arkivverket#285 og arkivverket#25, og tilbyr en bakoverkompatibel løsning uten
ekstrafunksjonaliteten beskrevet i arkivverket#309 og arkivverket#298.
@ivaylomitrev
Copy link
Author

But the _links dictionary in the parent dokumentbeskrivelse instance for the https://rel.arkivverket.no/noark5/v5/api/arkivstruktur/dokumentobjekt/ key do not need to be presented to API consumers before the file is uploaded.

That would only be possible for dokumentbeskrivelse that had no dokumentobjekt instance in the first place. If the dokumentobjekt is being created in an existing dokumenbeksrivelse with multiple objects in it, the vendor would still need to return the dokumentobjekt key in the _links dictionary due to the presence of other dokumentobjekter.

As far as I can tell, this is both allowed by the Noark 5 specifiaction and the Noark 5 tjenestegrensesnitt specification, and would allow a implementation to provide consistent view without changing the current API description.

Would not that clash with the relasjoner requirements for dokumentobjekt in the specification that says that a dokumentobjekt must have a dokumentbeskrivelse:
image

@petterreinholdtsen
Copy link
Collaborator

petterreinholdtsen commented May 29, 2024 via email

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

No branches or pull requests

2 participants