diff --git a/TD-21-i18n-PROMPT.md b/TD-21-i18n-PROMPT.md new file mode 100644 index 0000000..750ab7c --- /dev/null +++ b/TD-21-i18n-PROMPT.md @@ -0,0 +1,42 @@ +# Prompt + +You are assisting the ArchivesSpace Tech Docs project with translating technical documentation from English into another language, for a human volunteer to review before it is merged. + +## Context + +- Source: the ArchivesSpace Tech Docs site (this repo, which uses the Starlight/Astro.js framework), documenting ArchivesSpace, the open-source archives management software used by archives, libraries, and museums. +- Audience: a mix of archivists/records managers (administrators, non-developers) and developers/sysadmins who install, configure, extend, and operate ArchivesSpace. +- Output is a DRAFT. Prioritize accuracy and flag uncertainty in "Translator notes" rather than guessing silently. + +## Task + +Translate the file listed below in the 'Source file' section from English into {TARGET_LANGUAGE} ({LOCALE_CODE}), for use as `src/content/docs/{LOCALE_CODE}/{RELATIVE_FILE_NAME}`. + +Before translating: + +1. Read the {TARGET_LANGUAGE} section of `TD-21-i18n-glossary.md` in this repo. Reuse existing entries verbatim. +2. If you encounter a recurring ArchivesSpace/archival-science term not yet in the glossary, prefer the term ArchivesSpace's own application already uses in its official {LOCALE_CODE} UI translation (see locale files at github.com/archivesspace/archivesspace under `frontend/config/locales`, `public/config/locales`, `common/locales`; background in `/customization/locales`) so the docs match the software. Otherwise use the most standard professional archival-science translation for {TARGET_LANGUAGE}, not a literal/invented one. Add every such new term to the glossary and note your reasoning in the translator-notes log (see "Output" below). + +### Translation rules + +- Translate: headings, paragraphs, list items, table text, aside/admonition content, image alt text, and link text. +- Do NOT translate: code blocks/inline code, shell commands, file paths, YAML/JSON keys, config option names, environment variable names, class/method names, and URLs. +- Do NOT translate product/technology proper nouns (ArchivesSpace, MySQL, Solr, Docker, JRuby, GitHub, npm, etc.); follow {TARGET_LANGUAGE}'s normal convention for inflecting/declining them if needed. +- In YAML frontmatter, translate only human-facing values (`title`, `description`, and similar `label`/`tagline` fields). Leave keys and non-text values (booleans, dates, slugs) unchanged. +- Leave internal link paths (e.g. `/architecture/public`) byte-for-byte as-is; translate only the visible link text. The site automatically rewrites these to the correct locale-prefixed path at build time — do not add a locale prefix yourself. +- Preserve all Markdown/MDX syntax exactly: heading levels, code fence language/meta strings, `:::` aside types, ``/`` tags and props, table structure, and Mermaid syntax (translate only quoted labels inside `mermaid` blocks, never the diagram syntax). +- Follow {TARGET_LANGUAGE}'s own grammar/capitalization/punctuation conventions rather than mirroring English (see `/about/authoring#writing-conventions` for the English baseline this content follows). +- Use a formal, neutral, precise technical register; avoid regional slang. +- Do not add, remove, reorder, or "fix" content. If you spot an English error, note it instead of silently changing meaning. + +### Source file + +Read `src/content/docs/{RELATIVE_FILE_NAME}` directly from this repo. `{RELATIVE_FILE_NAME}` must match the English original exactly (same filename and directory segments); do not translate or rename the path. + +### Output + +Perform these actions directly in this repo; do not just print results in chat: + +1. Write the full translated file (frontmatter included) to `src/content/docs/{LOCALE_CODE}/{RELATIVE_FILE_NAME}`. +2. If you proposed any new glossary terms, add them as new rows to the {TARGET_LANGUAGE} table in `TD-21-i18n-glossary.md`. +3. Append a new section to `i18n-notes/{LOCALE_CODE}.md` (create the file with a top-level heading if it doesn't exist yet) titled with today's date and the relative path you just translated, listing: (a) any new glossary terms you added and why, (b) terms/sentences you were unsure about and why, (c) issues noticed in the English source but not changed. diff --git a/TD-21-i18n-glossary.md b/TD-21-i18n-glossary.md new file mode 100644 index 0000000..fe46204 --- /dev/null +++ b/TD-21-i18n-glossary.md @@ -0,0 +1,253 @@ +# TD-21 i18n Glossary + +A shared, living reference for translating recurring ArchivesSpace/archival-science and technical terms consistently across languages, translators, and pages. See [TD-21-i18n_project.md](TD-21-i18n_project.md) for the overall i18n project and the canonical translation prompt that references this file. + +## How this glossary works + +- **Terms come from the docs, not a generic word list.** Every seed row below is a term that actually recurs in `src/content/docs/**`, not a general archival-science glossary imported from elsewhere. +- **One section per target language.** Find your language's section and work only within it. +- **Translation column starts blank.** Fill it in the first time you translate a page that uses that term. +- **Prefer ArchivesSpace's own UI translation when one exists.** Before inventing a translation, check whether the ArchivesSpace application already ships an official translation for that term in your language (locale files at `frontend/config/locales`, `public/config/locales`, and `common/locales` in the [archivesspace/archivesspace](https://github.com/archivesspace/archivesspace) repo; background in [Customizing text](/customization/locales)). Reusing it keeps the docs consistent with the software readers are using. +- **Growing the glossary:** when the canonical translation prompt (see `TD-21-i18n_project.md`) produces a "Translator notes" section proposing a new term, a human reviewer confirms the proposed translation and adds it as a new row in the relevant language section below, so future translations can reuse it verbatim. +- **Don't change another translator's existing entry** without discussion — these are shared, canonical choices other pages already depend on. + +## Dutch (nl) + +| English term | Context | Dutch translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | nog niet ontsloten materiaal | +| Assessment | An ArchivesSpace record type used to document an assessment associated with resources, accessions, or digital objects. | beoordeling | +| Archival Object | A descriptive record for an archival component in a resource hierarchy; a core ArchivesSpace record type. | archiefonderdeel | +| Nested record | A record that exists only within the context of another record and is stored and retrieved as part of that record. | genest record | +| Main record | A primary ArchivesSpace record type with its own persistent URI, as distinct from a supporting or nested record. | hoofdrecord | +| Supporting record | A record type that supplements main records and is commonly linked to them through relationship tables. | ondersteunend record | +| Relationship table | A database table that links main records and supporting records. | relatietabel | +| Parent/child relationship | A hierarchical relationship between a record and its immediate parent or child record. | ouder-kindrelatie | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | collectie | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | digitaal object | +| Digital Object Component | A component of a digital object in its hierarchical structure. | component van digitaal object | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | topcontainer | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | containerprofiel | +| Container model | The ArchivesSpace model for representing containers and relationships between container records. | containermodel | +| Composite identifier | An identifier composed of values inherited from multiple levels of an archival hierarchy. | samengesteld ID-nummer | +| Element of description | A discrete element used to describe archival materials at a particular level of description. | beschrijvingselement | +| Location | A record representing a physical storage location that can be linked to top containers. | locatie | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | onderwerp | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | agent | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | collectiebeherende instelling | +| Release | A packaged version of ArchivesSpace made available to users, usually tagged and published on GitHub. | uitgave | +| Release notes | A summary of changes, fixes, and compatibility notes for a specific release. | release-opmerkingen | +| Report | A custom report generated from ArchivesSpace records and associated data. | rapport | +| Subreport | A report nested within a report or another subreport to provide additional detail. | subrapport | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | classificatie | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | rechtenverklaring | +| Access restrictions note | A note that describes restrictions on access to archival materials. | aantekening over openbaarheidsbeperkingen | +| Reference Code | The archival identifier for a described unit, commonly associated with ISAD(G) and DACS. | referentiecode | +| Scope and contents note | An archival description element summarizing the scope and content of a described unit. | toelichting op inhoud | +| Language of Materials note | A note describing the language or languages of the materials being described. | aantekening over de taal van het materiaal | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | enumeratie | +| Controlled Value List | A configurable list of controlled values used in ArchivesSpace, such as options in a dropdown. | gecontroleerde waardelijst | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Harvest | The process of retrieving records or metadata from a service using OAI-PMH. | harvesten | +| Level of Description | A hierarchical level used to describe archival materials and define OAI-PMH sets. | beschrijvingsniveau | +| OAI-PMH set | A named grouping of records exposed by an OAI-PMH service. | set | +| Resumption Token | An OAI-PMH token used to continue a paginated response or harvest. | token voor voortzetting | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | medewerkersinterface | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | publieke gebruikersinterface (PUI) | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | backend | +| Instance | A running deployment of ArchivesSpace or a service such as Solr, with its own configuration. | instantie | +| Tenant | An isolated ArchivesSpace installation within a shared deployment environment. | tenant | +| Inheritance | The process by which a record displays values from an ancestor in an archival hierarchy when it has no value of its own. | overerving | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | indexeerproces | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | achtergrondtaak | +| Job runner | A registered class that executes jobs of one or more types. | taakuitvoerder | +| Database dump | An exported SQL snapshot or file generated from a database (for example via `mysqldump`) as part of a backup or recovery workflow. | database-dump | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | plug-in | +| Authentication handler | A class that checks credentials and returns a user model during an authentication attempt. | authenticatiehandler | +| Authentication source | The external user directory or service against which a user authenticates. | authenticatiebron | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | locale (taal-/regio-instelling) | +| Mapping | A table or document describing correspondences between fields or values in data formats or systems. | mapping | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | migratie | +| Database migration | A migration that applies database schema changes and associated data changes during an ArchivesSpace upgrade. | databasemigratie | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | schemaversie | +| Reindex | Updating or rebuilding the Solr index for records. | herindexering | +| Soft reindex | Updating existing Solr documents without rebuilding the index files. | soft-herindexering | +| Full reindex | Rebuilding the Solr index from the database. | volledige herindexering | +| Resequencing | Rebuilding the technical metadata used to establish the ordering of archival object and digital object component trees. | volgordegegevens opnieuw opbouwen | +| Child container | A container nested within a top container, corresponding to the first level below it in the container hierarchy. | subcontainer | +| Grandchild container | A container nested within a child container, corresponding to the second level below a top container. | sub-subcontainer | +| Extent | A description of the quantity or physical extent of archival materials. | omvang | +| Finding aid | A descriptive tool that provides information about an archival collection and its contents. | collectiebeschrijving | +| Theme | A set of visual styles and layout choices that determine the appearance of an ArchivesSpace interface. | thema | +| Rails asset pipeline | Rails tooling that processes and compiles assets such as stylesheets and images for an application. | assetpipeline van Rails | + +## French (fr) + +| English term | Context | French translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | | +| Location | A record representing a physical storage location that can be linked to top containers. | | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | | + +## German (de) + +| English term | Context | German translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | | +| Location | A record representing a physical storage location that can be linked to top containers. | | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | | + +## Japanese (ja) + +| English term | Context | Japanese translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | | +| Location | A record representing a physical storage location that can be linked to top containers. | | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | | + +## Spanish (es) + +| English term | Context | Spanish translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | | +| Location | A record representing a physical storage location that can be linked to top containers. | | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | | + +## Ukrainian (uk) + +| English term | Context | Ukrainian translation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| Accession | A group of records acquired by a repository in a single transaction; a core ArchivesSpace record type. | | +| Resource | A core ArchivesSpace record type describing an arranged and described body of archival material (e.g., a finding aid). | | +| Digital Object | A core ArchivesSpace record type representing a digital representation of, or component related to, an archival resource. | | +| Top Container | A physical storage unit (e.g., box, folder) holding materials described by a resource or accession. | | +| Container Profile | A record defining the physical dimensions of a container type, used for space and location calculations. | | +| Location | A record representing a physical storage location that can be linked to top containers. | | +| Subject | A controlled-vocabulary term record describing the topic, geographic area, or genre of archival materials. | | +| Agent | A record representing a person, family, or corporate body associated with archival materials (as creator, subject, etc.). | | +| Repository | The top-level organizational record representing an individual archive/institution within an ArchivesSpace instance. | | +| Classification | A record type used to arrange accessions/resources into a hierarchical scheme independent of physical arrangement. | | +| Rights Statement | A record capturing rights and restriction information attached to resources, accessions, or digital objects. | | +| Enumeration | A controlled, dynamic list of values (e.g., dropdown options) configurable via System > Manage Controlled Value Lists. | | +| EAD | Encoded Archival Description, the XML standard ArchivesSpace uses to export/import finding aids for resources. | | +| EAC-CPF | Encoded Archival Context — Corporate Bodies, Persons, and Families, the XML standard for exporting agent records. | | +| MARCXML | The XML-encoded MARC21 bibliographic format, supported as an import/export format for resource records. | | +| MODS | Metadata Object Description Schema, an XML export format supported for digital object records. | | +| DACS | Describing Archives: A Content Standard, the descriptive standard referenced throughout ArchivesSpace's data model and field help. | | +| OAI-PMH | Open Archives Initiative Protocol for Metadata Harvesting; ArchivesSpace's built-in interface for external systems to harvest records. | | +| Staff interface | The internal, authenticated web application archivists use to create and manage records (also called the staff/frontend application). | | +| Public User Interface (PUI) | The public-facing web application that presents published records to end users and researchers. | | +| Backend | The core ArchivesSpace application that exposes data and workflows via a REST API, consumed by the staff and public interfaces. | | +| Indexer | The background process that reads records from the backend and writes them into Solr for search and browse. | | +| JSONModel | The class/library defining the JSON data format ArchivesSpace's components use to exchange records. | | +| Job | A background/batch task (e.g., an import or bulk update) tracked and reported on within the staff interface. | | +| Plugin | A self-contained package that customizes or extends ArchivesSpace behavior without modifying its core codebase. | | +| Locale | A language/region configuration (e.g., `en`, `fr`) used by the Rails I18n system that drives the application's own UI translations. | | +| Migration | The process and tooling for importing data into ArchivesSpace from a prior system (e.g., Archivists' Toolkit, Archon). | | +| Schema version | The database schema version number associated with a given ArchivesSpace release, used to track upgrades. | | diff --git a/TD-21-i18n_project.md b/TD-21-i18n_project.md new file mode 100644 index 0000000..4af0fb0 --- /dev/null +++ b/TD-21-i18n_project.md @@ -0,0 +1,489 @@ +# TD-21 i18n Project + +We want to enable Starlight's internationalization feature for the TechDocs site. See the appendix section below for the contents of the current Starlight i18n documentation. + +## i18n languages + +1. Dutch +2. French +3. German +4. Japanese +5. Spanish +6. Ukranian + +## Implementation (migration guide) + +Starlight i18n is enabled. English is the root locale (served at `/` with no `/en/` prefix); every other language lives behind its own path prefix (`/nl/`, `/fr/`, `/de/`, `/ja/`, `/es/`, `/uk/`). Until a page is translated, its localized URL serves the English content with a "not yet translated" notice in the reader's language. + +### What changed in the codebase + +- `astro.config.mjs`: added `defaultLocale: 'root'` and a `locales` map (root + nl, fr, de, ja, es, uk). Each non-root locale sets `lang` to a value matching a built-in Starlight UI dictionary, so UI strings (search, table of contents, language picker, etc.) localize automatically. +- `src/content.config.ts`: added an `i18n` content collection (`i18nLoader()` + `i18nSchema()`) for future custom UI string overrides. No JSON files are required to start. +- `src/content/docs/{nl,fr,de,ja,es,uk}/`: empty directories created as the home for translated content. +- No changes to `src/siteNavigation.json` (the shared sidebar is localized per locale automatically), the component overrides (`Header.astro` already renders Starlight's ``), or the blog (intentionally English-only). + +### Locale config reference + +| Prefix | `lang` | Picker label | UI strings | +| ------ | ------ | ------------ | ---------- | +| (root) | `en` | English | built-in | +| `/nl/` | `nl` | Nederlands | built-in | +| `/fr/` | `fr` | Français | built-in | +| `/de/` | `de` | Deutsch | built-in | +| `/ja/` | `ja` | 日本語 | built-in | +| `/es/` | `es` | Español | built-in | +| `/uk/` | `uk` | Українська | built-in | + +### Adding page translations + +To translate a page, follow the collaborator prompt below and save the output at `src/content/docs/{LOCALE_CODE}/{RELATIVE_FILE_NAME}` (same relative path as the English original). Once a translated file exists, Starlight stops serving the English fallback for that route and serves the translated page instead. The custom `issueUrl`/`issueText` frontmatter fields are optional and default to the project constants. + +### Notes + +- English content stays at `src/content/docs/` (root locale) — do not move it into an `en/` folder. +- The blog collection under `src/content/blog/` is out of scope and remains English-only. +- Translating Starlight's built-in UI strings (search, table of contents, language picker, etc. via `src/content/i18n/.json`) is out of scope for this project. This project only translates page content under `src/content/docs/`. +- Translated site titles are not configured yet; `title` is a single string. To localize it, change `title` in `astro.config.mjs` to an object keyed by `lang`. +- `npm run build` produces 480 pages across all locales with a per-locale Pagefind search index and sitemap. +- Translator-notes logs live at `i18n-notes/{LOCALE_CODE}.md` (repo root), one running, append-only file per target language. They are not part of any Starlight content collection and are never published to the site — they exist purely to give PR reviewers context on each translated page's glossary additions, uncertainties, and flagged English-source issues. + +## Prompt for collaborators to create translations + +Volunteer collaborators translate Tech Docs pages using an agentic tool with read/write access to this repo, then open a PR so the draft can be reviewed before it's merged. The prompt below is the **canonical prompt every collaborator should use** so translations stay consistent across languages, pages, and contributors, regardless of which agentic tool they run it in. + +### How to use this prompt + +1. Pick a source file under `src/content/docs/` and a target language. +2. Fill in the `{TARGET_LANGUAGE}`, `{LOCALE_CODE}`, and `{RELATIVE_FILE_NAME}` placeholders (locale codes: `nl` Dutch, `fr` French, `de` German, `ja` Japanese, `es` Spanish, `uk` Ukrainian). `{RELATIVE_FILE_NAME}` is always the English source file's path (e.g. `about/authoring.md`) — do not translate or rename it. +3. Give the whole prompt to your agentic tool (e.g. Cursor) with access to this repo. It reads the source file and the glossary itself — no need to paste file contents. +4. The agent writes the translated file to `src/content/docs/{LOCALE_CODE}/{RELATIVE_FILE_NAME}`, adds any new glossary terms directly to [TD-21-i18n-glossary.md](TD-21-i18n-glossary.md), and appends a dated entry to `i18n-notes/{LOCALE_CODE}.md` documenting its choices and uncertainties. +5. Open a PR with these changes. **The output is always a draft**, never a final, merge-ready translation — since none of the collaborators doing this initial translation work are fluent in a language beyond English, review happens on the PR (ideally by a fluent-speaking reviewer) rather than before it's opened. + +### The prompt + +See [TD-21-i18n-PROMPT.md](./TD-21-i18n-PROMPT.md). + +### Growing the glossary + +The glossary in [TD-21-i18n-glossary.md](TD-21-i18n-glossary.md) is seeded with terms that already recur across the docs, but it will always be incomplete — new pages introduce new terms. The feedback loop: + +1. While translating, the agent checks the glossary first and reuses existing entries verbatim. +2. When it hits a recurring term that isn't in the glossary yet, it adds a new row directly to that language's table in `TD-21-i18n-glossary.md` and records its reasoning in the corresponding entry it appends to `i18n-notes/{LOCALE_CODE}.md`. +3. A human reviewer checks the proposed glossary row during PR review (ideally more than one set of eyes for less common languages) and can request changes before merge, so every later translation of that term — on any page, by any collaborator — stays consistent. + +## Apendix + +### Starlight i18n documentation + +NOTE: The following is the raw markdown file for the documentation from the source code on GitHub. + +--- + +title: Internationalization (i18n) +description: Learn how to configure your Starlight site to support multiple languages. + +--- + +import { FileTree, Steps } from '@astrojs/starlight/components'; + +Starlight provides built-in support for multilingual sites, including routing, fallback content, and full right-to-left (RTL) language support. + +## Configure i18n + + + +1. Tell Starlight about the languages you support by passing [`locales`](/reference/configuration/#locales) and [`defaultLocale`](/reference/configuration/#defaultlocale) to the Starlight integration: + + ```js {9-26} + // astro.config.mjs + import { defineConfig } from 'astro/config' + import starlight from '@astrojs/starlight' + + export default defineConfig({ + integrations: [ + starlight({ + title: 'My Docs', + // Set English as the default language for this site. + defaultLocale: 'en', + locales: { + // English docs in `src/content/docs/en/` + en: { + label: 'English' + }, + // Simplified Chinese docs in `src/content/docs/zh-cn/` + 'zh-cn': { + label: '简体中文', + lang: 'zh-CN' + }, + // Arabic docs in `src/content/docs/ar/` + ar: { + label: 'العربية', + dir: 'rtl' + } + } + }) + ] + }) + ``` + + Your `defaultLocale` will be used for fallback content and UI labels, so choose the language you are most likely to start writing content in, or already have content for. + +2. Create a directory for each language in `src/content/docs/`. + For example, for the configuration shown above, create the following folders: + + + - src/ + - content/ + - docs/ + - ar/ + - en/ + - zh-cn/ + + + +3. You can now add content files in your language directories. Use the same file name to associate pages across languages and take advantage of Starlight’s full set of i18n features, including fallback content, translation notices, and more. + + For example, create `ar/index.md` and `en/index.md` to represent the homepage for Arabic and English respectively. + + + +For more advanced i18n scenarios, Starlight also supports configuring internationalization using the [Astro’s `i18n` config](https://docs.astro.build/en/guides/internationalization/#configure-i18n-routing) option. + +### Use a root locale + +You can use a “root” locale to serve a language without any i18n prefix in its path. For example, if English is your root locale, an English page path would look like `/about` instead of `/en/about`. + +To set a root locale, use the `root` key in your `locales` config. If the root locale is also the default locale for your content, remove `defaultLocale` or set it to `'root'`. + +```js {9,11-14} +// astro.config.mjs +import { defineConfig } from 'astro/config' +import starlight from '@astrojs/starlight' + +export default defineConfig({ + integrations: [ + starlight({ + title: 'My Docs', + defaultLocale: 'root', // optional + locales: { + root: { + label: 'English', + lang: 'en' // lang is required for root locales + }, + 'zh-cn': { + label: '简体中文', + lang: 'zh-CN' + } + } + }) + ] +}) +``` + +When using a `root` locale, keep pages for that language directly in `src/content/docs/` instead of in a dedicated language folder. For example, here are the home page files for English and Chinese when using the config above: + + + +- src/ + - content/ + - docs/ + - **index.md** + - zh-cn/ + - **index.md** + + + +#### Monolingual sites + +By default, Starlight is a monolingual (English) site. To create a single language site in another language, set it as the `root` in your `locales` config: + +```diff lang="js" {10-13} +// astro.config.mjs +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +export default defineConfig({ + integrations: [ + starlight({ + title: 'My Docs', + locales: { + root: { + label: '简体中文', + lang: 'zh-CN', + }, + }, + }), + ], +}); +``` + +This allows you to override Starlight’s default language without enabling other internationalization features for multi-language sites, such as the language picker. + +## Fallback content + +Starlight expects you to create equivalent pages in all your languages. For example, if you have an `en/about.md` file, create an `about.md` for each other language you support. This allows Starlight to provide automatic fallback content for pages that have not yet been translated. + +If a translation is not yet available for a language, Starlight will show readers the content for that page in the default language (set via `defaultLocale`). For example, if you have not yet created a French version of your About page and your default language is English, visitors to `/fr/about` will see the English content from `/en/about` with a notice that this page has not yet been translated. This helps you add content in your default language and then progressively translate it when your translators have time. + +## Translate the site title + +By default, Starlight will use the same site title for all languages. +If you need to customize the title for each locale, you can pass an object to [`title`](/reference/configuration/#title-required) in Starlight’s options: + +```diff lang="js" +// astro.config.mjs +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +export default defineConfig({ + integrations: [ + starlight({ +- title: 'My Docs', ++ title: { ++ en: 'My Docs', ++ 'zh-CN': '我的文档', ++ }, + defaultLocale: 'en', + locales: { + en: { label: 'English' }, + 'zh-cn': { label: '简体中文', lang: 'zh-CN' }, + }, + }), + ], +}); +``` + +## Translate Starlight's UI + +import LanguagesList from '~~/components/languages-list.astro'; +import UIStringsList from '~~/components/ui-strings-list.astro'; + +In addition to hosting translated content files, Starlight allows you to translate the default UI strings (e.g. the "On this page" heading in the table of contents) so that your readers can experience your site entirely in the selected language. + + translated UI strings are provided out of the +box, and we welcome [contributions to add more default +languages](https://github.com/withastro/starlight/blob/main/CONTRIBUTING.md). + +You can provide translations for additional languages you support — or override our default labels — via the `i18n` data collection. + + + +1. Configure the `i18n` data collection in `src/content.config.ts` if it isn’t configured already: + + ```diff lang="js" ins=/, (i18nLoader|i18nSchema)/ + // src/content.config.ts + import { defineCollection } from 'astro:content'; + import { docsLoader, i18nLoader } from '@astrojs/starlight/loaders'; + import { docsSchema, i18nSchema } from '@astrojs/starlight/schema'; + + export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), + + i18n: defineCollection({ loader: i18nLoader(), schema: i18nSchema() }), + }; + ``` + +2. Create a JSON file in `src/content/i18n/` for each additional locale you want to provide UI translation strings for. + For example, this would add translation files for Arabic and Simplified Chinese: + + + - src/ + - content/ + - i18n/ + - ar.json + - zh-CN.json + + + +3. Add translations for the keys you want to translate to the JSON files. Translate only the values, leaving the keys in English (e.g. `"search.label": "Buscar"`). + + These are the English defaults of the existing strings Starlight ships with: + + + + Starlight’s code blocks are powered by the [Expressive Code](https://expressive-code.com/) library. + You can set translations for its UI strings in the same JSON file using `expressiveCode` keys: + + ```json + { + "expressiveCode.copyButtonCopied": "Copied!", + "expressiveCode.copyButtonTooltip": "Copy to clipboard", + "expressiveCode.terminalWindowFallbackTitle": "Terminal window" + } + ``` + + Starlight’s search modal is powered by the [Pagefind](https://pagefind.app/) library. + You can set translations for Pagefind’s UI in the same JSON file using `pagefind` keys: + + ```json + { + "pagefind.clear_search": "Clear", + "pagefind.load_more": "Load more results", + "pagefind.search_label": "Search this site", + "pagefind.filters_label": "Filters", + "pagefind.zero_results": "No results for [SEARCH_TERM]", + "pagefind.many_results": "[COUNT] results for [SEARCH_TERM]", + "pagefind.one_result": "[COUNT] result for [SEARCH_TERM]", + "pagefind.alt_search": "No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead", + "pagefind.search_suggestion": "No results for [SEARCH_TERM]. Try one of the following searches:", + "pagefind.searching": "Searching for [SEARCH_TERM]..." + } + ``` + + + +### Extend translation schema + +Add custom keys to your site’s translation dictionaries by setting `extend` in the `i18nSchema()` options. +In the following example, a new, optional `custom.label` key is added to the default keys: + +```diff lang="js" +// src/content.config.ts +import { defineCollection } from 'astro:content'; +import { z } from 'astro/zod'; +import { docsLoader, i18nLoader } from '@astrojs/starlight/loaders'; +import { docsSchema, i18nSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), + i18n: defineCollection({ + loader: i18nLoader(), + schema: i18nSchema({ ++ extend: z.object({ ++ 'custom.label': z.string().optional(), ++ }), + }), + }), +}; +``` + +Learn more about content collection schemas in [“Defining a collection schema”](https://docs.astro.build/en/guides/content-collections/#defining-the-collection-schema) in the Astro docs. + +## Using UI translations + +You can access Starlight’s [built-in UI strings](/guides/i18n/#translate-starlights-ui) as well as [user-defined](/guides/i18n/#extend-translation-schema), and [plugin-provided](/reference/plugins/#injecttranslations) UI strings through a unified API powered by [i18next](https://www.i18next.com/). +This includes support for features like [interpolation](https://www.i18next.com/translation-function/interpolation) and [pluralization](https://www.i18next.com/translation-function/plurals). + +In Astro components, this API is available as part of the [global `Astro` object](https://docs.astro.build/en/reference/api-reference/#locals) as `Astro.locals.t`: + +```astro title="example.astro" +

+ {Astro.locals.t('404.text')} +

+``` + +You can also use the API in [endpoints](https://docs.astro.build/en/guides/endpoints/), where the `locals` object is available as part of the [endpoint context](https://docs.astro.build/en/reference/api-reference/#locals): + +```ts title="src/pages/404.ts" +export const GET = (context) => { + return new Response(context.locals.t('404.text')) +} +``` + +In the context of a Starlight plugin, you can use the [`useTranslations()`](/reference/plugins/#usetranslations) helper to access this API for a specific language. +See the [plugins reference](/reference/plugins/) for more information. + +### Rendering a UI string + +Render UI strings using the `locals.t()` function. +This is an instance of i18next’s `t()` function, which takes a UI string key as its first argument and returns the corresponding translation for the current language. + +For example, given a custom translation file with the following content: + +```json title="src/content/i18n/en.json" +{ + "link.astro": "Astro documentation", + "link.astro.custom": "Astro documentation for {{feature}}" +} +``` + +The first UI string can be rendered by passing `'link.astro'` to the `t()` function: + +```astro {3} + + + {Astro.locals.t('link.astro')} + + +``` + +The second UI string uses i18next’s [interpolation syntax](https://www.i18next.com/translation-function/interpolation) for the `{{feature}}` placeholder. +The value for `feature` must be set in an options object passed as the second argument to `t()`: + +```astro {3} + + + {Astro.locals.t('link.astro.custom', { feature: 'Astro DB' })} + + +``` + +See the [i18next documentation](https://www.i18next.com/overview/api#t) for more information on how to use the `t()` function with interpolation, formatting, and more. + +### Advanced APIs + +#### `t.all()` + +The `locals.t.all()` function returns an object containing all UI strings available for the current locale. + +```astro +--- +// src/components/Example.astro +const allStrings = Astro.locals.t.all() +// ^ +// { +// "skipLink.label": "Skip to content", +// "search.label": "Search", +// … +// } +--- +``` + +#### `t.exists()` + +To check if a translation key exists, use the `locals.t.exists()` function with the translation key as first argument. +Pass an optional second argument if you need to check if a translation exists for a specific locale. + +```astro +--- +// src/components/Example.astro +const keyExists = Astro.locals.t.exists('a.key') +// ^ true +const keyExistsInFrench = Astro.locals.t.exists('other.key', { lngs: ['fr'] }) +// ^ false +--- +``` + +See the [`exists()` reference in the i18next documentation](https://www.i18next.com/overview/api#exists) for more information. + +#### `t.dir()` + +The `locals.t.dir()` function returns the text direction of the current or a specific locale. + +```astro +--- +// src/components/Example.astro +const currentDirection = Astro.locals.t.dir() +// ^ +// 'ltr' +const arabicDirection = Astro.locals.t.dir('ar') +// ^ +// 'rtl' +--- +``` + +See the [`dir()` reference in the i18next documentation](https://www.i18next.com/overview/api#dir) for more information. + +## Accessing the current locale + +You can use [`Astro.currentLocale`](https://docs.astro.build/en/reference/api-reference/#currentlocale) to read the current locale in `.astro` components. + +The following example reads the current locale and uses it with the [`getRelativeLocaleUrl()`](https://docs.astro.build/en/reference/modules/astro-i18n/#getrelativelocaleurl) helper to generate a link to an about page in the current language: + +```astro +--- +// src/components/AboutLink.astro +import { getRelativeLocaleUrl } from 'astro:i18n' +--- + +About +``` diff --git a/astro.config.mjs b/astro.config.mjs index 2ef1007..ee28bf2 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,13 +1,48 @@ import { defineConfig } from 'astro/config' import starlight from '@astrojs/starlight' import sidebar from './src/siteNavigation.json' +import { remarkLocalizeLinks } from './src/lib/remark-localize-links.ts' // https://astro.build/config export default defineConfig({ site: 'https://docs.archivesspace.org', + markdown: { + remarkPlugins: [remarkLocalizeLinks] + }, integrations: [ starlight({ title: 'Tech Docs', + defaultLocale: 'root', + locales: { + root: { + label: 'English', + lang: 'en' + }, + nl: { + label: 'Nederlands', + lang: 'nl' + }, + fr: { + label: 'Français', + lang: 'fr' + }, + de: { + label: 'Deutsch', + lang: 'de' + }, + ja: { + label: '日本語', + lang: 'ja' + }, + es: { + label: 'Español', + lang: 'es' + }, + uk: { + label: 'Українська', + lang: 'uk' + } + }, routeMiddleware: './src/blogRouteData.js', logo: { dark: './src/images/logo-full-dark.svg', diff --git a/i18n-notes/nl.md b/i18n-notes/nl.md new file mode 100644 index 0000000..2680b4f --- /dev/null +++ b/i18n-notes/nl.md @@ -0,0 +1,403 @@ +# Translator notes + +## 2026-10-26 — `src/content/docs/nl/authoring_nl.md` + +- **Glossary:** The existing `Plugin` entry was filled in as `plug-in`, the conventional Dutch spelling; no new glossary row was added. The term is used in the source's writing conventions and in the description of SmartyPants. The English instruction prefers “plugins” without a hyphen; the Dutch version follows the Dutch spelling instead. +- **Uncertainty:** The English convention recommending `-ing` verb forms for documentation-page titles is specific to English. It is rendered as a preference for Dutch infinitives, which convey the equivalent title style without reproducing the English suffix rule. +- **English-source issues not changed:** The source says “Customize the the aside title,” with a duplicated “the”; its instruction says to use `_ ` for italics, including a space after the underscore even though the examples do not use one. The supplied source path `src/content/docs/authoring_nl.md` does not exist; the available English page is `src/content/docs/about/authoring.md`. + +## 2026-10-26 — `src/content/docs/nl/development_nl.md` + +- **Glossary:** Filled the existing `Staff interface` entry as `medewerkersinterface`. The ArchivesSpace locale search did not surface a Dutch UI locale file or an official Dutch label for this term, so this uses a clear, standard Dutch compound rather than claiming an official UI translation. No new glossary rows were added. +- **Uncertainty:** The source uses “Help Center” as the name of an external navigation destination, so it remains untranslated as a proper label. The source path specified in the request, `src/content/docs/development_nl.md`, does not exist; the supplied English source is `src/content/docs/about/development.md`. +- **English-source issues not changed:** The source description misspells “repository” as “repostory”; the `npm` scripts paragraph uses “ie” where “i.e.” is intended; and the Mermaid accessibility bullet says “bor” instead of “for”. These were noted rather than changed in the English source. + +## 2026-10-27 — `src/content/docs/nl/backup.md` + +- **Glossary:** Added the Dutch glossary entry `Database dump` → `database-dump` because this page repeatedly refers to the exported SQL snapshot produced by `mysqldump`; Dutch technical usage commonly uses that compound, and there is no ArchivesSpace-specific Dutch UI term for the concept. +- **Uncertainty:** In Dutch, I used `back-up` and `database-dump` depending on whether the sentence referred to the process or the exported artifact, since the English source alternates between those meanings. The source uses "demo database" as a production warning label; I rendered it as `demodatabase` in running prose but kept the code examples unchanged. +- **English-source issues not changed:** The source contains a typographical oddity in the warning sentence `Note: _NEVER use the demo database in production._.` with an extra period before the closing emphasis, and the Ruby example uses escaped underscores in the configuration key `AppConfig[:demo\_db\_backup\_number\_to\_keep]`; both are code or source-text quirks, so I left them untouched. + +## 2026-10-27 — `src/content/docs/nl/docker.md` + +- **Glossary:** Added the Dutch glossary entry `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)` because this documentation repeatedly refers to the public-facing web application as an ArchivesSpace interface name, and the Dutch UI terminology is clearer and more consistent than a literal calque. +- **Uncertainty:** The source alternates between "Docker configuration package" and "Docker package" to describe the downloaded zip bundle; I used "Docker-configuratiepakket" consistently because it best matches the product's deployment setup. I also kept the terms "medewerkersinterface" and "publieke gebruikersinterface" in Dutch even though the source uses English interface names, because the glossary prefers ArchivesSpace's own Dutch terminology when it is clear and recurring. +- **English-source issues not changed:** The English source repeats the word `locales` in the sentence describing the contents of the configuration bundle, and the prose calls the target directory `architecture` in the upgrade section even though the surrounding text uses `archivespace`; these are English-source errors and were noted rather than corrected while translating. + +## 2026-10-27 — `src/content/docs/nl/getting_started.mdx` + +- **Glossary:** Reused the existing `Staff interface` entry as `medewerkersinterface` and the `Public User Interface (PUI)` entry as `publieke gebruikersinterface (PUI)`. No new glossary rows were added. +- **Uncertainty:** The source uses both "public interface" and "staff interface" in browser verification text; I kept the Dutch UI terminology consistent with the glossary rather than a literal English rendering. I also treated “zip distribution” as `zip-distributie`, which is standard Dutch technical usage for this deployment format without implying a new ArchivesSpace-specific term. +- **English-source issues not changed:** The source sentence in the Java section is grammatically awkward and inconsistent in capitalization and punctuation around the note about Java 11 versus Java 17/21. The prompt refers to `src/content/docs/getting_started.mdx` at the repository root, but the actual file present in this repo is `src/content/docs/administration/getting_started.mdx`; I translated the file that exists in the repository. + +## 2026-10-27 — `src/content/docs/nl/administration/index.md` + +- **Glossary:** No new terms added. The page contains general administration labels rather than recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** No significant terminology uncertainty. “Log rotation” is translated as `logrotatie`, a conventional Dutch IT term. +- **English-source issues not changed:** None noticed. The initially specified root-level source file `src/content/docs/index.md` is absent from this checkout; this translation uses the tagged `src/content/docs/administration/index.md` source and its corresponding locale path, as selected. + +## 2026-10-30 — `src/content/docs/nl/indexes.md` + +- **Glossary:** Added `Reindex` → `herindexering`, `Soft reindex` → `soft-herindexering`, and `Full reindex` → `volledige herindexering` because these recurring terms describe the page's central indexing workflows. Filled the existing `Accession` entry as `nog niet ontsloten materiaal`, `Resource` as `collectie`, and `Repository` as `collectiebeherende instelling`, following the official Dutch ArchivesSpace UI. Filled `Indexer` as `indexeerproces`; no exact Dutch UI label was found for this background process, so this uses a clear Dutch technical term. +- **Uncertainty:** The official UI's `Accession` label, `nog niet ontsloten materiaal`, describes the record's content rather than naming the record type explicitly; it is retained for consistency with the application. I used `soft-herindexering` rather than `gedeeltelijke herindexering` to preserve the distinction from a full rebuild. +- **English-source issues not changed:** The source uses lowercase `youtube` for the brand name YouTube and varies between `reindex` and `re-indexing`. The requested source path `src/content/docs/indexes.md` is absent; after clarification, the tagged `src/content/docs/administration/indexes.md` was translated to the requested destination. + +## 2026-10-30 — `src/content/docs/nl/logrotate.md` + +- **Glossary:** No new terms added. `Logrotatie` is a standard Dutch IT term and is already used in the Dutch translator notes. +- **Uncertainty:** The source says the configuration keeps “7 days worth” of logs. I translated this as `de logbestanden van de afgelopen 7 dagen`, following the source wording. +- **English-source issues not changed:** The explanation may overstate what `rotate 7` guarantees: it retains seven rotated log files, and with daily rotation this generally corresponds to about seven days, not necessarily exactly seven days. The source wording was preserved in the translation. + +## 2026-10-30 — `src/content/docs/nl/passwords.md` + +- **Glossary:** No new terms added. The text contains no recurring ArchivesSpace or archival-science term that is missing from the glossary. +- **Uncertainty:** None. +- **English-source issues not changed:** None noticed. + +## 2026-10-30 — `src/content/docs/nl/unix_daemon.md` + +- **Glossary:** No new terms added. `daemon`, `init script`, and `run-level` are general Unix administration terms rather than recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** `Daemon` is also sometimes rendered as `achtergrondproces` in Dutch; `daemon` was retained to match the existing Dutch administration index and common Unix terminology. +- **English-source issues not changed:** The prose refers to “double greater than signs,” while the example uses `&>>`, a shell-specific operator that appends both standard output and standard error; the source does not identify the required shell. The sentence about using a Systemd unit file also lacks terminal punctuation, and the source uses both `systemd` and `Systemd`. + +## 2026-10-30 — `src/content/docs/nl/upgrading_1_1_0.md` + +- **Glossary:** Added `Instance` → `instantie` for a running ArchivesSpace deployment or service such as Solr. The concept recurs in this and other administration documentation; the official Dutch UI locales do not provide a label for this server/deployment meaning, so I used the standard Dutch technical term already found in the Dutch docs. +- **Uncertainty:** The source example `http://[localhost|yourhostname]:8091` appears to show alternative hostnames in brackets separated by a pipe, rather than a literal URL. I preserved the example as instructed. +- **English-source issues not changed:** “You use a different ports sequence” is grammatically awkward in English; I rendered it as `U gebruikt een andere poortreeks` without changing the intended meaning. The host/URL example could be mistaken for a literal value even though its bracket-and-pipe notation appears illustrative; it was not changed. + +## 2026-10-30 — `src/content/docs/nl/upgrading_1_1_1.md` + +- **Glossary:** Added `Archival Object` → `archiefonderdeel`, following the Dutch public interface's description of these records as `archiefonderdelen`; added `Digital Object` → `digitaal object`, matching the interface label; added `Digital Object Component` → `component van digitaal object`, applying the interface's term `digitaal object` where no specific component label was found; and added `Resequencing` → `volgordegegevens opnieuw opbouwen`, a descriptive rendering of the procedure, which rebuilds ordering metadata without changing the elements' order. +- **Uncertainty:** The source's “resource tree” is rendered as `collectiestructuur`, using the glossary translation of `Resource`; the term refers to the hierarchy being rebuilt, but the English does not further define its scope. The phrase “resource hit” is informal and imprecise, so it is rendered as databasebelasting. +- **English-source issues not changed:** “There is now method” is missing an article. In “This duration depends on the size of your database, which can take seconds ... to hours,” the relative clause has an unclear antecedent. The description of the resource cost of EAD exports as “a rather large resource hit” is also vague; these were translated according to the intended meaning without changing the source. + +## 2026-10-30 — `src/content/docs/nl/upgrading_1_5_0.md` + +- **Glossary:** Filled the existing `Top Container`, `Container Profile`, and `Location` entries with `topcontainer`, `containerprofiel`, and `locatie`. The ArchivesSpace Dutch locale uses these terms (including `Locatie` and `Containerprofiel`); its public locale labels the lower levels `Subcontainer` and `Sub-subcontainer`. Added `Child container` → `subcontainer` and `Grandchild container` → `sub-subcontainer` to match those labels, and `Extent` → `omvang`, following the Dutch public interface's extent terminology. +- **Uncertainty:** The source says “child and grandparent container records,” which is inconsistent with its subsequent references to the child and grandchild levels; I retained the source's “grandparent” meaning rather than silently changing it. The source also refers to “validation name error” without further explanation, so this is rendered literally as a validation error involving a name. +- **English-source issues not changed:** “Archivists 1.5.0” appears to mean “ArchivesSpace 1.5.0.” The phrase introducing the Instance Joiner Plugin has an unclosed parenthesis. The conversion warning has awkward capitalization and punctuation (“and THE CHANGES”), and “A quick overview of the steps are” is grammatically incorrect. These source issues were not changed. + +## 2026-10-30 — `src/content/docs/nl/upgrading_2_1_0.md` + +- **Glossary:** Added `Container model` → `containermodel` for the recurring ArchivesSpace model concept. Filled the existing `Rights Statement` entry as `rechtenverklaring` and `Migration` as `migratie`. The Dutch ArchivesSpace locales use `Metadata-rechtenverklaring` for a related metadata-rights label but do not provide a Dutch UI label for Rights Statement records; `rechtenverklaring` is therefore used as a clear professional translation. +- **Uncertainty:** The source refers repeatedly to the “container model” and once to “container conversion”; the latter is rendered as `conversie van het containermodel` to clarify that it means converting between the old and new models. The source description's “rights statement data migration” could refer to the migration of records or of the data model; the surrounding text describes conversion of rights-statement data to a new model, so I translated it as `gegevensmigratie van rechtenverklaringen`. +- **English-source issues not changed:** “If you are upgrading from ArchivesSpace version of 1.4.2 or lower” is grammatically awkward; it is translated according to its apparent intended meaning without changing the source. The frontmatter description awkwardly coordinates ArchivesSpace versions with Archivists' Toolkit and Archon, which are migration sources rather than upgrade versions; its grouping was preserved. + +## 2026-10-30 — `src/content/docs/nl/upgrading.md` + +- **Glossary:** Added `Database migration` → `databasemigratie` to distinguish schema and data changes applied during an upgrade from `Migration`, which the glossary reserves for importing data from an earlier system. Filled the existing `Locale` entry as `locale (taal-/regio-instelling)`; the page deals with Rails I18n locale files, and `locale` is already used in the Dutch documentation for this application concept. +- **Uncertainty:** “Zip distribution” is translated as `zip-distributie`, a standard technical rendering of the installation format. I retained `locale` in compounds such as `locale-bestand` to align with the application's Rails terminology and the existing Dutch docs. +- **English-source issues not changed:** The paragraph about transferring locale files contains the malformed text `ArchivesSpace locales/provisioning/solr/#copy-the-config-files files`, which appears to be an accidental link/path insertion; it has been retained and noted rather than silently corrected. The Tomcat section contains grammatical errors, including “the any libraries,” “you other local configuration settings,” “Make sure you MySQL connector jar,” and “to migration your database.” The source also spells “essentially” as “esentially” and uses lowercase “github”; these were not corrected in the source. + +## 2026-10-30 — `src/content/docs/nl/windows.md` + +- **Glossary:** No new terms added. The page uses general Windows and Java administration terminology rather than recurring ArchivesSpace or archival-science terms missing from the glossary. +- **Uncertainty:** The quoted procrun button label “Launch” is translated as “Starten”; the label displayed in the GUI may remain English depending on its localization. The source also calls the Java path the directory of the Java executable, while its example appears to be the Java installation directory; the translation preserves this distinction as written. +- **English-source issues not changed:** The source says “edit you %PATH% environment variable” instead of “edit your.” Its sentence about Jetty “respond to when the shutdown action is taken” is awkward, and the final batch-script sentence repeats “from.” It instructs readers to uncomment the displayed configuration lines, although the lines in the example are not commented out. These issues were not changed in the source. + +## 2026-10-30 — `src/content/docs/nl/api/index.md` + +- **Glossary:** Reused the existing translations for `Archival Object`, `Accession`, `Resource`, `Repository`, `Top Container`, and other glossary terms. Filled the existing `Subject` entry as `onderwerp`, following the Dutch ArchivesSpace locale's use of `Onderwerp`; no new glossary row was needed. +- **Uncertainty:** The existing translation of `Accession` (`nog niet ontsloten materiaal`) is descriptive of the material rather than a direct name for the record type. It was retained verbatim to follow the glossary. “Search this archive” is translated as `In dit archief zoeken`; the source does not clarify whether “archive” here means an ArchivesSpace repository or the institution more generally. +- **English-source issues not changed:** The pagination section contains only the note “Python example needed” and no Python example. In the long-results Python example, `len(get_repo_aos_pages.json())` counts the top-level keys in the response dictionary rather than the result rows, despite the adjacent comment saying it counts results. The first curl example's URL is missing a closing quotation mark. These issues were noted but not corrected. + +## 2026-10-30 — `src/content/docs/nl/api.md` + +- **Glossary:** No new terms added. Filled the existing, blank `Backend` translation as `backend`, the standard Dutch software term. +- **Uncertainty:** “CRUD-style” is rendered as `CRUD-stijl`; the acronym remains unchanged because it names the established create/read/update/delete pattern. `Sessietoken` follows Dutch compound spelling. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/backend.md` + +- **Glossary:** Added `Nested record` → `genest record` because it is a recurring ArchivesSpace data-model concept in this page; no exact Dutch UI term was found in the ArchivesSpace locale files, so the standard technical Dutch term is used. Filled the existing `Agent` entry as `agent`, matching the official Dutch ArchivesSpace UI. +- **Uncertainty:** The existing `Accession` translation, `nog niet ontsloten materiaal`, describes the material rather than the record type; it was reused as required. `Optimistic concurrency control` is translated as `optimistische gelijktijdigheidscontrole`; a preferred Dutch term for this concurrency-control pattern is not evident from the source. +- **English-source issues not changed:** “those records as expressed as JSON documents” is grammatically awkward; “a HTTP request” should use “an”; and “system-level records require comparing the record” appears to mean “system-level validations.” These source issues were not changed. + +## 2026-10-30 — `src/content/docs/nl/database.md` + +- **Glossary:** Added `Main record` → `hoofdrecord`, `Supporting record` → `ondersteunend record`, `Relationship table` → `relatietabel`, and `Parent/child relationship` → `ouder-kindrelatie` for recurring ArchivesSpace database categories. Filled the existing `Enumeration` entry as `enumeratie`. The checked `common` and `frontend` Dutch locale files did not provide exact UI terms for these database concepts, so standard Dutch technical terminology is used. Reused the existing `Nested record` → `genest record` entry and the existing translations for `Resource`, `Repository`, `Archival Object`, `Accession`, and the interfaces. +- **Uncertainty:** `Foreign key` is translated as `vreemde sleutel`, although Dutch IT writing also commonly retains the English term. The glossary translation `Accession` → `nog niet ontsloten materiaal` describes the material rather than the record type, so the prose follows that established choice where the term is used. +- **English-source issues not changed:** The source has the grammatical error “it's mapping” (intended “its mapping”), the phrase “values that are stored a few of the supporting record tables” is missing “in,” the typo `MysQL`, and the apparent typo `digital_oject_type_id`. It also refers to a table named `enumeration_values` before using `enumeration_value` elsewhere, which may be an inconsistency. The two MySQL 8+ child-query headings have no query content, and the MySQL 5.7+ child query has an empty code block. These source issues and gaps were left unchanged. + +## 2026-10-30 — `src/content/docs/nl/directories.md` + +- **Glossary:** No new terms added. Reused `Staff interface` → `medewerkersinterface` and `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)`. +- **Uncertainty:** The source says “public interface”; I rendered this as `publieke gebruikersinterface`, following the existing glossary term. The official Dutch public UI locale also uses `Publieksinterface`, but the glossary's established equivalent was retained for consistency. +- **English-source issues not changed:** The source writes “github io pages,” which appears to mean GitHub Pages; this wording was translated as written without changing the technical reference. + +## 2026-10-30 — `src/content/docs/nl/frontend.md` + +- **Glossary:** No new terms added. Reused the existing `Staff interface` → `medewerkersinterface` entry. +- **Uncertainty:** The source’s “frontend/staff interface” treats these as equivalent; I rendered it as `frontend (medewerkersinterface)` to preserve that relationship. I translated the linked “ArchivesSpace Help Center” as `Helpcentrum van ArchivesSpace` because link text should be translated, although the destination may use “Help Center” as its official English name. +- **English-source issues not changed:** The note `Additional documentation needed` signals that more content is required; I translated it without changing or expanding the source. + +## 2026-10-30 — `src/content/docs/nl/architecture/index.md` + +- **Glossary:** No new terms added. Reused the existing translations for `Backend`, `Staff interface`, `Public User Interface (PUI)`, and `Indexer`. +- **Uncertainty:** The source calls the indexer an “application,” while the glossary defines `Indexer` as a background process; `indexeerproces` follows the established glossary entry. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/jobs.md` + +- **Glossary:** Filled the existing blank `Job` translation as `achtergrondtaak`, matching its definition as a background/batch task. Added `Job runner` → `taakuitvoerder` for the registered class that executes jobs. +- **Uncertainty:** The official Dutch ArchivesSpace locale files checked in `frontend/config/locales`, `public/config/locales`, and `common/locales` do not provide Dutch labels for jobs. Literal UI labels and code identifiers in backticks were therefore retained, while explanatory prose uses Dutch terms. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/jsonmodel.md` + +- **Glossary:** No new terms added. Reused the existing translations for `Digital Object`, `Repository`, and `Backend`. Kept `JSONModel` and `JSONModel::Client` unchanged as technical names. +- **Uncertainty:** Rendered “accessors” as `toegangsmethoden` to convey their role in retrieving JSONModel values without introducing an unfamiliar loanword. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/languages.md` + +- **Glossary:** No new terms added. Reused the existing translations for `Backend`, `Staff interface`, `Public User Interface (PUI)`, and `Indexer`. +- **Uncertainty:** Rendered “out of the box” as `standaard wordt meegeleverd` to convey that Apache Derby is available in the standard setup. Kept `OAI-harvester` as a technical component name. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/oai-pmh.md` + +- **Glossary:** Added `Harvest` → `harvesten`, matching usage in the existing Dutch docs; `Level of Description` → `beschrijvingsniveau`, the standard Dutch archival term; `OAI-PMH set` → `set`, retaining the protocol's term; and `Resumption Token` → `token voor voortzetting`, a descriptive rendering of the pagination token. +- **Uncertainty:** Rendered “persistent deletes” as `blijvende verwijderingsmeldingen` to clarify that harvesters are notified of records deleted since their previous harvest. The Dutch UI locale does not provide specific translations for this OAI-PMH protocol behavior. +- **English-source issues not changed:** “OAI options are set within both ... and via ...” uses a nonparallel construction. “Configured sets as shown above” is not specific about where the configuration was shown. Both were translated without changing or inferring the source meaning. + +## 2026-10-30 — `src/content/docs/nl/overview.md` + +- **Glossary:** No new terms added. Reused the existing translations for `Staff interface`, `Public User Interface (PUI)`, `Backend`, and `Indexer`. +- **Uncertainty:** No significant uncertainties. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/public.md` + +- **Glossary:** Added `Access restrictions note` → `aantekening over openbaarheidsbeperkingen`, following the Dutch PUI locale's `Openbaarheidsbeperkingen` label; `Composite identifier` → `samengesteld ID-nummer`, following the ArchivesSpace UI's `ID-nummer` for identifiers and using a clear Dutch modifier for the composite form; `Element of description` → `beschrijvingselement`, a standard archival-science compound; `Inheritance` → `overerving`, the standard technical term for this behavior; `Language of Materials note` → `aantekening over de taal van het materiaal`, following the PUI label `Taal van het materiaal`; `Reference Code` → `referentiecode`, the Dutch archival term associated with ISAD(G) and DACS; and `Scope and contents note` → `toelichting op inhoud`, matching the official Dutch PUI locale. Reused the existing interface, collection, description-level, extent, and indexer glossary terms. +- **Uncertainty:** The ArchivesSpace locale uses the general label `ID-nummer` rather than a specific translation for `Reference Code`; `referentiecode` follows Dutch archival terminology for the ISAD(G)/DACS concept. The official PUI locale renders inherited labels as `Uit de %{level}:`; the examples use `Uit de collectie` and `Uit de subserie` to match that pattern. `Request` was translated as `Aanvragen`, matching the Dutch PUI locale. +- **English-source issues not changed:** The source has a duplicated article in “a child-level series record has an an access restrictions note.” “The lower-level of description” is grammatically awkward, and “at the series 1 level, and any descendant record” appears to omit a word or preposition. The unresolved placeholder `AR-XXXX` was preserved. The source writes `ISAD-G`; the standard is commonly styled `ISAD(G)`, but the source wording was not changed. + +## 2026-10-30 — `src/content/docs/nl/search.md` + +- **Glossary:** No new terms added. Reused the existing `Indexer` → `indexeerproces`, `Reindex` → `herindexering`, and related indexing terms. +- **Uncertainty:** Rendered “browse list” as `de lijst met records die gebruikers kunnen doorbladeren`. The official Dutch PUI locale uses `Blader door` for browse actions, but does not provide an exact label for this list. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/authentication.md` + +- **Glossary:** Added `Authentication handler` → `authenticatiehandler` and `Authentication source` → `authenticatiebron`. The official Dutch locale files do not provide exact terms for these concepts, so I used clear Dutch compounds for these recurring ArchivesSpace concepts. Reused the existing `Plugin` → `plug-in` entry and the Dutch PUI locale's `Inloggen`, `Gebruikersnaam`, and `Wachtwoord` labels. +- **Uncertainty:** The source uses “user directory” broadly for password-based authentication services; I translated this as `gebruikersdirectory's` to retain that broader meaning rather than narrowing it to LDAP. The PUI locale renders “authenticating” as `Toegang verifiëren`, but this page describes verification of user credentials, so I followed the existing Tech Docs term `authenticatie`. +- **English-source issues not changed:** The prose spells the product term `OAUTH` in all capitals rather than the standard `OAuth` styling. It also uses the grammatically incorrect article in “an `JSONModel::ValidationException`”, and the inline code span `The JSONModel(:user)` includes the English article “The”. These source forms were left unchanged. + +## 2026-10-30 — `src/content/docs/nl/bower.md` + +- **Glossary:** No new terms added. Reused the existing `Staff interface` → `medewerkersinterface` translation. +- **Uncertainty:** Translated “static assets” as `statische bestanden` for clarity in Dutch; the page's context indicates frontend files, not archival assets. +- **English-source issues not changed:** The frontmatter description misspells “assets” as “assests”; the translated description conveys the intended meaning without changing the source. + +## 2026-10-30 — `src/content/docs/nl/configuration.md` + +- **Glossary:** No new terms added. Reused existing entries for `Staff interface`, `Public User Interface (PUI)`, `Backend`, `Indexer`, `Repository`, `Resource`, `Archival Object`, `Level of Description`, `Inheritance`, `Enumeration`, and `Extent`. +- **Uncertainty:** Rendered “container inventory” as `containerinventaris`; the source does not identify a Dutch UI label for this navigation item. Rendered the PUI label “Read More” as `Meer lezen`; a reviewer may want to confirm the exact Dutch UI wording. +- **English-source issues not changed:** The OAI deprecation note says “These three settings” although it lists four parameter names. The notification description says “older that this amount” where “older than” appears intended. The indexer-state description uses “it's” instead of “its”. The source styles OAuth as “Oauth” and JavaScript as “Javascript”; conventional casing is used in the Dutch text, but the English source was not modified. The `help_url` and `help_topic_base_url` examples each end with an extra backtick; these source quirks were preserved. + +## 2026-10-30 — `src/content/docs/nl/customization/index.md` + +- **Glossary:** No new glossary terms added. This page is a short section index, and the wording used here follows standard Dutch documentation practice rather than introducing new ArchivesSpace-specific terminology. +- **Uncertainty:** No significant terminology uncertainty. The section labels were translated as straightforward Dutch equivalents: `configureren`, `aanpassen`, and `thematiseeren`. +- **English-source issues not changed:** No issues noticed in the English source for this index page. + +## 2026-10-30 — `src/content/docs/nl/ldap.md` + +- **Glossary:** No new terms added. Reused the existing `Authentication handler` → `authenticatiehandler` and `Authentication source` → `authenticatiebron` entries where relevant. The official Dutch locale files did not provide an exact LDAP or bind term. +- **Uncertainty:** Used `bind` as a Dutch technical noun for the LDAP protocol operation; this preserves the LDAP-specific meaning, but a reviewer may prefer another established Dutch wording. +- **English-source issues not changed:** No issues noticed in the English source. + +## 2026-10-30 — `src/content/docs/nl/locales.md` + +- **Glossary:** No new terms added. Reused `Locale` → `locale (taal-/regio-instelling)`, `Enumeration` → `enumeratie`, and the existing translations for the staff and public interfaces. +- **Uncertainty:** Translated “tooltip” as `knopinfo` and “placeholder” as `tijdelijke aanduiding`; the checked Dutch ArchivesSpace locale files did not provide exact UI terms for these concepts. +- **English-source issues not changed:** The prose spells the product name as “Archives Space” once instead of “ArchivesSpace,” uses “top most” instead of “topmost,” has an extra space before a comma after a parenthetical example, and uses singular “version” with plural “they.” These source issues were not changed. + +## 2026-10-30 — `src/content/docs/nl/plugins.md` + +- **Glossary:** No new terms added. Reused `Plugin` → `plug-in`, `Staff interface` → `medewerkersinterface`, and `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)`. +- **Uncertainty:** Kept `favicon` and `hooks` as familiar technical terms. The ArchivesSpace frontend's Dutch locale has no `Plugins` menu translation; I preserved this label as inline code and used the glossary spelling `plug-in` in the surrounding prose. The source also refers to the `Welcome` page using `[home]` without a link destination; rendered this as `[startpagina]` and preserved the source's link-like Markdown. +- **English-source issues not changed:** The source has spelling/wording errors including “rather then,” “practiceable,” “astericks,” and “eaiser,” as well as grammatical issues in “allows you define” and “new records fields.” The example path line for `my.js` has an unmatched quotation mark, and the sample ERB `img` tag contains a questionable `#{...}` interpolation. The source's `[home]` text has no link destination. These were preserved rather than silently changed. + +## 2026-10-30 — `src/content/docs/nl/reports.md` + +- **Glossary:** Added `Report` → `rapport` and `Subreport` → `subrapport`. The ArchivesSpace Dutch locale files provide report-format labels but no direct labels for these report classes; `rapport` is the standard Dutch term, and `subrapport` preserves the nested relationship and the `AbstractSubreport` class name. +- **Uncertainty:** Rendered “initializer” as `initialisatiemethode` and “result set” as `resultaatset`; a reviewer may prefer the English Ruby term `initializer` or another Dutch database term. Rendered “implement page_break to be false” as setting `page_break` to `false`; the intended implementation is not explicit in the source. +- **English-source issues not changed:** “Implement page_break to be false” is grammatically awkward and does not make clear whether the method should return `false` or a value should be set. The `after_tasks` bullet has no final punctuation in the source. These issues were not changed. + +## 2026-10-30 — `src/content/docs/nl/theming.md` + +- **Glossary:** Added `Theme` → `thema` and `Rails asset pipeline` → `assetpipeline van Rails`. The Dutch ArchivesSpace locale files do not provide specific UI terms for these concepts; `thema` is standard Dutch and is already used for this concept in the Dutch Tech Docs, while `assetpipeline van Rails` is a clear Dutch rendering of the established Rails technical term. +- **Uncertainty:** Rendered “heavy re-theming” as `ingrijpende wijzigingen aan het thema` to convey the extensive visual changes without reproducing the source's informal wording. +- **English-source issues not changed:** The source says “updated you theme,” apparently intending “updated your theme,” and has an unmatched closing parenthesis after the note about starting Backend. The phrase “these kind of site-specific changes” is grammatically nonstandard. These issues were noted rather than changed in the English source. + +## 2026-10-30 — `src/content/docs/nl/xsl.md` + +- **Glossary:** No new terms added. `Stylesheet` is rendered as `stijlblad`, a standard Dutch technical term; EAD and EAC-CPF remain unchanged as names of XML standards. +- **Uncertainty:** The description’s phrase “transforming ArchivesSpace data to EAC-CPF and EAD exports into HTML or PDF” is ambiguous. The translation interprets EAC-CPF and EAD exports as the input formats being converted to HTML or PDF. +- **English-source issues not changed:** The description is grammatically awkward and does not clearly distinguish the exported input formats from the HTML/PDF output formats. It was rendered according to the most likely intended meaning. + +## 2026-10-30 — `src/content/docs/nl/dev.md` + +- **Glossary:** Added `Development environment` → `ontwikkelomgeving`, `Bootstrap` → `bootstrap`, and `MySQL connector` → `MySQL-connector` because these are recurring technical terms in the source page, and the Dutch wording is standard technical usage without inventing a new ArchivesSpace-specific label. Reused the existing `Staff interface` → `medewerkersinterface` and `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)` entries. +- **Uncertainty:** The source page alternates between `Solr reset`, `clear out existing Solr state`, and `database reset` to describe related cleanup steps; I rendered these as `Solr-reset` and `bestaande Solr-status wissen` to keep the operational steps clear in Dutch. The term `development environment` is generic rather than a formal ArchivesSpace record or UI label, so I used the standard Dutch `ontwikkelomgeving`. +- **English-source issues not changed:** The source contains a minor typo in the Java section (`has occured`) and leaves a few prose lines in English (`Do not use system packages...` and `By default ...`), but these were part of the original source and were noted rather than altered in the English text. The source also uses the phrase “Building an Archivesspace Release” in the section links; I preserved the source link text as provided. + +## 2026-10-30 — `src/content/docs/nl/development/docker.md` + +- **Glossary:** No new terms added. The page uses standard Docker technical terms (`Docker`, `MySQL`, `Solr`, `image`, and `branch`), and no ArchivesSpace-specific term on this page required a new Dutch glossary entry. +- **Uncertainty:** I kept the Docker terms in their established technical forms rather than translating `image` or `branch` into Dutch prose, because this page is a deployment workflow and those terms are standard outside any ArchivesSpace-specific UI label. The source wording for “build image” is slightly generic, but in context it clearly refers to the Docker image produced for deployment. +- **English-source issues not changed:** No substantive English-source errors were noted in this short page. The shell command examples, comments, and output lines are intentionally left unchanged because they are code blocks or command snippets, not human-language prose. + +## 2026-10-30 — `src/content/docs/nl/e2e_tests.md` + +- **Glossary:** No new terms added. Reused `Staff interface` → `medewerkersinterface` and `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)` from the glossary. `End-to-endtestsuite` and other testing terms are general software-development terminology, not recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** I rendered `version manager` as `versiebeheerder`, consistent with the Dutch development documentation. In the frontend dev-server heading, I used the glossary's `medewerkersinterface` term, following the existing Dutch documentation's description of `frontend:devserver`. +- **English-source issues not changed:** No substantive English-source errors were noted. + +## 2026-10-30 — `src/content/docs/nl/ead-exporter.md` + +- **Glossary:** No new terms added. Reused `Resource` → `collectie` and `Repository` → `collectiebeherende instelling` from the glossary. `EAD` remains unchanged as the name/acronym of the standard. +- **Uncertainty:** None. “Published resources” is translated using the glossary's `collectie` term. +- **English-source issues not changed:** No substantive English-source errors were noticed. + +## 2026-10-30 — `src/content/docs/nl/development/index.md` + +- **Glossary:** No new glossary rows were added. The page is a legacy navigation index made up of product names, technical labels, and standard Dutch terminology; nothing required a new recurring term beyond those already covered in the glossary. +- **Uncertainty:** The only notable wording choice was `Gebruikersinterfacetestsuite`, which follows Dutch compound-noun conventions without translating the product name. I preserved the legacy `.html` links and the old relative paths exactly, because the task requires leaving internal link paths unchanged while translating only the visible text. +- **English-source issues not changed:** The source uses legacy `.html` navigation links and a dated target pattern such as `./development/jruby-rack-build.html`; I kept these as given rather than rewriting them to newer locale-aware paths. + +## 2026-10-30 — `src/content/docs/nl/jruby-rack-build.md` + +- **Glossary:** No new terms added. This short build guide uses product and technical names such as JRuby, Rack, Maven, and S3, which remain unchanged in Dutch; it contains no recurring archival-science term that needs a glossary entry. +- **Uncertainty:** The source uses `aspace` as shorthand in “aspace version” and “aspace build.xml” without defining it. I retained `aspace` rather than expanding it to ArchivesSpace. +- **English-source issues not changed:** The instruction “Download jruby-rack” does not say where or how to obtain it. I noted the omission rather than adding an assumed download method. + +## 2026-10-30 — `src/content/docs/nl/release_schema_versions.md` + +- **Glossary:** No new rows were added. Filled the existing `Schema version` entry as `schemaversie`, matching the database schema version described by the page. +- **Uncertainty:** The source's table heading says `DB Version`; I rendered this as `Databaseschemaversie` because the source filename and glossary context specify that these are database schema versions. `Release` is retained as standard Dutch IT usage. +- **English-source issues not changed:** No substantive English-source issues were noticed. + +## 2026-10-30 — `src/content/docs/nl/release.md` + +- **Glossary:** Added `Release` → `uitgave` and `Release notes` → `release-opmerkingen` because this page is entirely devoted to the release process and those two labels recur throughout the workflow. I reused the existing Dutch technical convention for `release-branch` and `release-tag` in the prose while leaving Git branch and tag names unchanged in code examples. +- **Uncertainty:** I translated `release` as `uitgave` rather than `versie` because in this context it refers to a packaged and published ArchivesSpace version, not to a generic version number alone. The source uses `hotfix` as a Git-flow concept; I retained it as `hotfix` because it is standard Dutch IT usage and the distinction from a normal release is important here. I kept `GitHub Pages` and `GitHub` unchanged because they are product names rather than ordinary English words. +- **English-source issues not changed:** The source contains several English-language inconsistencies and typos—`Github` vs. `GitHub`, `Neccessary`, and the awkward sentence around the manual release-note note—while the example block intentionally remains in English as code/sample text. I noted those issues rather than rewriting the English source text itself. + +## 2026-10-30 — `src/content/docs/nl/releases.md` + +- **Glossary:** No new terms were added. Reused `Release` → `uitgave`; filled the existing `Schema version` entry as `schemaversie` and used that term for the source's schema numbers. +- **Uncertainty:** The source calls these values “schema numbers,” while the related Dutch page identifies them as database schema versions. I translated them as `schemaversie` for consistency with that context. +- **English-source issues not changed:** The source misspells “November” as `Novemver` and the 3.1.1 download URL points to `v3.1.0`. It also uses the noncanonical capitalization `Archivesspace` in the description, has a standalone `[Bug in Release]` without a link destination, and leaves several schema numbers as `???`. The product name is rendered as `ArchivesSpace` in Dutch; the listed values and URLs are otherwise preserved. + +## 2026-10-30 — `src/content/docs/nl/ui_test.md` + +- **Glossary:** No new terms were added. Reused `Staff interface` → `medewerkersinterface`, `Public User Interface (PUI)` → `publieke gebruikersinterface (PUI)`, and `Database dump` → `database-dump` where relevant; UI testing and browser-testing vocabulary is general software-development terminology rather than a recurring ArchivesSpace or archival-science term. +- **Uncertainty:** I translated the browser UI label `Summary -> Artifacts` as `Samenvatting -> Artefacten`. I rendered `headless` as `headless` in prose because it is standard browser-testing terminology, and used `pullrequest` as the Dutch compound for the GitHub workflow term. +- **English-source issues not changed:** The source contains the typos `pakcages`, `heady`, and `ovoid`, as well as grammatical issues in “Test require” and “unexpected fails.” These remain untouched in the English source; code blocks, including their comments, are preserved verbatim as required. + +## 2026-10-30 — `src/content/docs/nl/vscode.md` + +- **Glossary:** No new terms were added. The page uses general VS Code and software-development terminology, not recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** No significant terminology uncertainties arose. The VS Code task label `Terminal → Run Task… → Cucumber: Run e2e-test` is kept verbatim so readers can find the exact task in the editor. +- **English-source issues not changed:** The description misspells the product name as `ArchiveSpace`; the Dutch description uses the correct name, `ArchivesSpace`. + +## 2026-10-30 — `src/content/docs/nl/migrate_from_archivists_toolkit.md` + +- **Glossary:** Added `Assessment` → `beoordeling` for the recurring ArchivesSpace record type. The Dutch translations in ArchivesSpace's `frontend/config/locales/nl.yml`, `public/config/locales/nl.yml`, and `common/locales/nl.yml` did not provide a Dutch term for this record type, so the standard Dutch term is used. Reused the existing glossary entries for `Accession`, `Resource`, `Digital Object`, `Repository`, `Subject`, `Migration`, and `Enumeration`. +- **Uncertainty:** Exact AT plug-in control names are kept in English where they identify specific controls, so readers can match them to the application. The menu label “Tools” is translated as “Hulpmiddelen”; a reviewer should confirm whether it should instead remain in English to match the AT interface. The glossary translation of `Accession` (“nog niet ontsloten materiaal”) is not a one-to-one name for this record type, so the text uses it in context as a description of the material. +- **English-source issues not changed:** The explanation for **Copy to ArchivesSpace** is grammatically incomplete and contradictory about the Host URL and the three buttons; the phrase “For most part” is ungrammatical; and the standalone “Data” bullet followed by a missing-information warning leaves unclear which AT modules' reports will not migrate. These issues were not resolved by guessing. + +## 2026-10-30 — `src/content/docs/nl/migrate_from_archon.md` + +- **Glossary:** Filled the existing `Classification` entry as `classificatie`, matching the official Dutch ArchivesSpace UI label `Classificatie`. Added `Controlled Value List` → `gecontroleerde waardelijst`; searches of ArchivesSpace's Dutch locale files did not find an existing UI translation, so the standard Dutch rendering is used. Reused the existing glossary terms for `Accession`, `Archival Object`, `Resource`, `Digital Object`, `Digital Object Component`, `Top Container`, `Location`, `Subject`, `Agent`, `Repository`, `Instance`, `Migration`, and `Enumeration`. +- **Uncertainty:** The existing glossary renders `Accession` as `nog niet ontsloten materiaal`, which is descriptive rather than the usual record-type label; the translation follows that canonical entry when referring to these records. The Archon-specific terms `level container`, `collection content`, and `intellectual level` do not map neatly to ArchivesSpace record names, so they are translated descriptively. Exact migration-tool controls are retained in English where readers need to match their labels in the tool. The source's phrase “all ArchivesSpace 2.2.2” is unclear; the description identifies ArchivesSpace 2.2.2 as the target version. The internal link to the migration-log appendix retains its English fragment as required, which may no longer match the translated heading slug. +- **English-source issues not changed:** The source contains the malformed phrase “migration as completed,” uses “follow query” instead of “following query,” and has inconsistent `LevelID`/`LevelContainerID` references. Several list items in the controlled-value section have missing spaces or broken formatting (including “Creatorsources...” and “o MaterialTypes”). The first paragraph says “all ArchivesSpace 2.2.2,” and the sentence before the non-migrating Archon modules is not formatted as a proper list item. These issues were not corrected in the source. + +## 2026-10-30 — `src/content/docs/nl/migration_tools.md` + +- **Glossary:** Added `Mapping` → `mapping` for the repeated spreadsheet/document links that describe correspondences between data fields or formats. No dedicated Dutch UI label appeared in the ArchivesSpace locale files, so the established Dutch IT term is used. Reused existing glossary terms including `Migration`, `Plugin`, `Accession`, `Assessment`, `Archival Object`, `Resource`, `Digital Object`, and `Location`. +- **Uncertainty:** The link text “Load Via Spreadsheet” appears to name a specific ArchivesSpace workflow. It is translated descriptively as `laden via spreadsheet`; a reviewer should confirm whether it is preferable to retain the English label so readers can match it to the interface. “Mapping” is retained as a technical loanword because the linked files are field crosswalks, not maps in the geographic sense. +- **English-source issues not changed:** The first AT migration-mapping link label has an opening parenthesis with no matching closing parenthesis before the link delimiter. The source also repeats “(newly reviewed) MARCXML Import Map” and “MARCXML Export Map” as plain text after the corresponding list items. Both source issues are preserved. + +## 2026-10-31 — `src/content/docs/nl/clustering.md` + +- **Glossary:** Added `Tenant` → `tenant` because the term recurs throughout this page for an isolated ArchivesSpace installation in a shared deployment. No corresponding Dutch label appeared in the ArchivesSpace locale files; `tenant` is established Dutch IT usage for this deployment concept. +- **Uncertainty:** `Tenant` is retained as a technical loanword rather than translated; a reviewer may want to confirm that this is preferred in the project's target Dutch register. The existing glossary translations for the staff interface and public user interface were reused. +- **English-source issues not changed:** The instructions rely on dated software/platform versions and examples, including CentOS 6, Java 1.6, and MySQL Connector/J 5.1.24. Their current compatibility should be reviewed; they were retained as source content rather than updated during translation. + +## 2026-10-31 — `src/content/docs/nl/domains.md` + +- **Glossary:** No new terms added. Reused the existing translations `medewerkersinterface` and `publieke gebruikersinterface`; the remaining terminology is general web-server and networking terminology. +- **Uncertainty:** The source says that `ProxyPassReverse` intercepts outgoing traffic and rewrites “the header.” This may simplify its behavior, which is more specifically about rewriting response headers; the wording was preserved in the translation. +- **English-source issues not changed:** None noticed beyond the technical imprecision noted above. + +## 2026-10-31 — `src/content/docs/nl/https.md` + +- **Glossary:** No new terms added. Reused the glossary translations `medewerkersinterface` and `publieke gebruikersinterface (PUI)`; the remaining terminology is general web-server and networking terminology. +- **Uncertainty:** The source describes “end-user requests (i.e., URLs),” which equates requests with URLs; this was translated conservatively without changing the source's meaning. +- **English-source issues not changed:** The Nginx example appears syntactically malformed: the TLS server blocks close before the certificate and location directives. In the second TLS block, `server_name` is `staff.myarchive.org` although the preceding HTTP block is for `public.myarchive.org`; the proxy ports also differ from the staff/public mapping in the Apache example. These source issues were not changed. + +## 2026-10-31 — `src/content/docs/nl/provisioning/index.md` + +- **Glossary:** No new terms added. Reused `tenant` and the established Dutch wording for load balancing, subdomains, and HTTPS from the existing Dutch pages. +- **Uncertainty:** `Provisioning` is rendered as `inrichting`, which fits the deployment and server-configuration context; Dutch usage of the technical term varies. +- **English-source issues not changed:** The description misspells “technical” as “techinal”; the translation conveys the intended meaning. + +## 2026-10-31 — `src/content/docs/nl/jmeter.md` + +- **Glossary:** No new terms added. Reused `Repository` → `collectiebeherende instelling` and `Backend` → `backend`. +- **Uncertainty:** The source calls this a “Test Group.” I translated it as `testgroep`; it may not refer to JMeter's standard “Thread Group” UI element, so the wording should be checked against the example plan. +- **English-source issues not changed:** The description spells the product name as “Jmeter” instead of “JMeter”; the correct product capitalization is used in the Dutch text. + +## 2026-10-31 — `src/content/docs/nl/mysql.md` + +- **Glossary:** No new terms added. “Database” is consistently translated as `database` in the existing Dutch documentation; this page contains no recurring ArchivesSpace or archival-science term that requires a new glossary entry. +- **Uncertainty:** None noted. +- **English-source issues not changed:** The source says “ready to starting using,” which is grammatically incorrect. Its character-encoding instructions are inconsistent: the bold note says `utf8`, the database creation command uses `utf8mb4`, and the configuration text later specifies `UTF-8`. The final note also begins with the sentence fragment “For MySQL 8.” and refers to the product as lowercase “mysql.” These source issues were preserved in the translation. + +## 2026-10-31 — `src/content/docs/nl/newrelic.md` + +- **Glossary:** No new terms added. The page uses general application-monitoring and system-administration terminology rather than recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** None noted. +- **English-source issues not changed:** The bullet says “Signup for an account” where the verb phrase “Sign up” is expected. It also spells the product name as lowercase “newrelic” in that bullet, although the brand is written “New Relic” elsewhere on the page. + +## 2026-10-31 — `src/content/docs/nl/prefix.md` + +- **Glossary:** No new terms added. The page uses general web-server terminology and existing Dutch wording for the staff/public applications; the technical concept of `prefix` is kept as `prefix` in line with the surrounding Dutch provisioning docs. +- **Uncertainty:** The source uses `prefix` as a deployment pattern; Dutch technical prose often uses `voorvoegsel`, but the existing Dutch provisioning overview already uses `prefix`, so the term was retained for consistency and to match the specific Apache configuration pattern described. +- **English-source issues not changed:** The source uses the bold warning “Prefixes do NOT work properly…,” the shorthand references `README_HTTPS` and `iptables`, and the phrase “the following are assumed”; these were preserved in the Dutch translation because they are source wording and exact technical references rather than translation errors. + +## 2026-10-31 — `src/content/docs/nl/robots.md` + +- **Glossary:** No new terms added. The page uses general web-server terminology rather than recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** The phrase “in your `/config/` directly” is unclear; it was interpreted as referring to the `/config/` directory. The source does not specify how the separate file relates to the proxy, so the translation retains the same general relationship. +- **English-source issues not changed:** The source misspells “separate” as “seperate” and uses the unclear phrase “in your `/config/` directly.” The fragment “nginx, more like this:” was rendered naturally as an introductory label without changing the technical content. + +## 2026-10-31 — `src/content/docs/nl/solr.md` + +- **Glossary:** No new terms added. The page reuses the existing entries `Reindex` → `herindexering` and `Full reindex` → `volledige herindexering`; its remaining terminology is general Solr and system-administration language. +- **Uncertainty:** The phrase “standalone mode” was translated as `zelfstandige modus`. Solr's linked documentation uses the technical term “standalone mode”; this Dutch rendering is intended to convey that it is not a Solr Cloud deployment. +- **English-source issues not changed:** The source says “instructions on how set an environment variable,” missing “to.” This grammatical error was not carried over into Dutch. + +## 2026-10-31 — `src/content/docs/nl/tuning.md` + +- **Glossary:** No new terms added; the page contains general system-administration terminology rather than recurring ArchivesSpace or archival-science terms. +- **Uncertainty:** `Heap` was retained as a technical loanword because it refers specifically to JVM heap memory. No other uncertain terms noted. +- **English-source issues not changed:** The source has grammatical errors, including “multiple server” and “can tuned,” and refers to the “top limits what you've set.” It also misspells `archivesspace.sh` as `archivsspace.sh`. The Windows code sample contains line breaks within `-Xmx2048m` and `launcher/launcher.rb`, which appear to make the sample invalid if copied as-is; these source issues were not changed. + +## 2026-10-31 — `src/content/docs/nl/v4.0.0.md` + +- **Glossary:** Added `Finding aid` → `collectiebeschrijving`. The official ArchivesSpace Dutch PUI locale labels the finding-aid title as `Titel van de collectiebeschrijving`, so this term follows the application's own terminology. +- **Uncertainty:** “Large finding aids” was translated as `omvangrijke collectiebeschrijvingen`; here “large” appears to refer to the size or complexity of the described collection, rather than the physical size of a document. `Rapid Data Entry` was retained as the name of the feature because the source presents it as a specific ArchivesSpace interface component. +- **English-source issues not changed:** “More fields have special character escaped” has a grammatical agreement error, and “Change PDF label from ...” uses an imperative where the surrounding release-note bullets describe completed changes. Their intended meaning was preserved in Dutch. + +## 2026-10-31 — `src/content/docs/nl/index.mdx` + +- **Glossary:** No new terms added. “Archives management tool” is rendered as `opensourcesoftware voor archiefbeheer`, a general description rather than a recurring ArchivesSpace or archival-science term. +- **Uncertainty:** None noted. +- **English-source issues not changed:** None noticed. diff --git a/package-lock.json b/package-lock.json index a3b8e74..9eff319 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,12 @@ "@astrojs/starlight": "^0.41.5", "astro": "^7.1.6", "mermaid": "^11.14.0", - "sharp": "^0.35.3" + "sharp": "^0.35.3", + "unist-util-visit": "^5.1.0" }, "devDependencies": { + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3", "cypress": "^15.13.0", "postcss-html": "^1.8.0", "prettier": "^3.8.1", diff --git a/package.json b/package.json index f0b053a..ef4e969 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,12 @@ "@astrojs/starlight": "^0.41.5", "astro": "^7.1.6", "mermaid": "^11.14.0", - "sharp": "^0.35.3" + "sharp": "^0.35.3", + "unist-util-visit": "^5.1.0" }, "devDependencies": { + "@types/mdast": "^4.0.4", + "@types/unist": "^3.0.3", "cypress": "^15.13.0", "postcss-html": "^1.8.0", "prettier": "^3.8.1", diff --git a/src/content.config.ts b/src/content.config.ts index e57ea0f..360eb36 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -1,7 +1,7 @@ import { defineCollection } from 'astro:content' import { glob } from 'astro/loaders' -import { docsLoader } from '@astrojs/starlight/loaders' -import { docsSchema } from '@astrojs/starlight/schema' +import { docsLoader, i18nLoader } from '@astrojs/starlight/loaders' +import { docsSchema, i18nSchema } from '@astrojs/starlight/schema' import { z } from 'astro/zod' import { DEFAULT_ISSUE_TEXT, DEFAULT_ISSUE_URL } from '@lib/constants.ts' @@ -30,5 +30,6 @@ export const collections = { blog: defineCollection({ loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }), schema: blogSchema - }) + }), + i18n: defineCollection({ loader: i18nLoader(), schema: i18nSchema() }) } diff --git a/src/content/docs/nl/about/authoring.md b/src/content/docs/nl/about/authoring.md new file mode 100644 index 0000000..aee880a --- /dev/null +++ b/src/content/docs/nl/about/authoring.md @@ -0,0 +1,306 @@ +--- +title: Content schrijven +description: Deze pagina beschrijft best practices voor het bijwerken en schrijven van Markdown-bestanden voor de tech-docs-repository. +--- + +De Tech Docs-site bevat twee soorten content: documentatiepagina's en blogberichten. Beide soorten content worden geschreven in [Markdown](https://en.wikipedia.org/wiki/Markdown) en bevatten paginaspecifieke gegevens als [yaml](https://yaml.org/)-sleutel-waardeparen. + +Tech Docs gebruikt [GitHub-flavored Markdown](https://github.github.com/gfm/), een variant van de Markdown-syntaxis, en [SmartyPants](https://daringfireball.net/projects/smartypants/), een plug-in voor typografische interpunctie. Deze hulpmiddelen bieden auteurs handige functies, zoals het genereren van aanklikbare links uit tekst, het maken van lijsten en tabellen en het opmaken van citaten en gedachtestreepjes. + +## Waar pagina's staan + +### Documentatiepagina's + +Documentatiepagina's staan in `src/content/docs/`. Elke pagina is een `.md`- of `.mdx`-bestand. Het URL-pad bestaat uit `/` plus het bestandspad relatief aan die map, zonder de extensie. Zo wordt `src/content/docs/architecture/public.md` aangeboden op `/architecture/public`. Geneste mappen voegen segmenten aan het pad toe. + +### Blog + +Blogberichten staan als `.md`- of `.mdx`-bestanden in `src/content/blog/`. De URL bestaat uit `/blog/` plus het pad naar het bestand relatief aan die map, zonder de extensie. Zo wordt `src/content/blog/v4-2-0-release-candidate.md` aangeboden op `/blog/v4-2-0-release-candidate`. Geneste mappen voegen segmenten aan de URL toe. + +Voor het bouwen en publiceren van de site zijn geldige frontmatter en hoofdtekst vereist. + +## Markdown + +Veelvoorkomende toepassingen van Markdown in Tech Docs zijn: + +- [koppen](#headings) +- [links](#links) +- [tekst benadrukken](#emphasizing-text) +- [alinea's](#paragraphs) +- [lijsten](#lists) +- [codevoorbeelden](#code-examples) +- [diagrammen](#diagrams) +- [kaders](#asides) +- [afbeeldingen](#images) + +### Koppen + +Begin een nieuwe regel met 2 tot 6 `#`-symbolen, gevolgd door één spatie en de koptekst. + +```md +## Example second-level heading +``` + +Het aantal `#`-symbolen komt overeen met het kopniveau in de documenthiërarchie. **Het eerste kopniveau is gereserveerd voor de paginatitel** (beschikbaar in de [YAML-frontmatter](#yaml-frontmatter) van de pagina). Daarom moet de eerste _zelf geschreven_ kop op elke pagina een kop van het tweede niveau zijn (`##`). + +:::note[Vereiste voor koppen van het tweede niveau] +Zelf geschreven koppen moeten op elke pagina beginnen op het tweede niveau (`##`), omdat het eerste niveau (`#`) is gereserveerd voor de paginatitel die automatisch wordt gegenereerd. +::: + +```md + + +## Second level heading + +Notice the page starts with a second level heading. + +Notice the blank lines above and below each heading. + +### Third level heading + +This is demo text under the Third level heading section. + +#### Fourth level heading + +##### Fifth level heading + +###### Sixth and final level heading +``` + +### Links + +Maak een link door de linktekst tussen vierkante haken (`[ ]`) te zetten, direct gevolgd door de externe URL of het interne pad tussen ronde haken (`( )`). + +```md +[text](URL or path) +``` + +Zorg ervoor dat er geen spatie staat tussen de tekst tussen vierkante haken en de URL. + +```md + + +See the [TechDocs source code](https://github.com/archivesspace/tech-docs). +``` + +#### In documentatiepagina's + +##### Naar andere pagina's + +Wanneer je linkt naar een andere Tech Docs-documentatiepagina, begin je met een schuine streep (`/`), gevolgd door de locatie van de pagina zoals die voorkomt in de map `src/content/docs/`, en laat je de bestandsextensie (`.md`) weg. + +```md +✅ [Public user interface](/architecture/public) + +❌ [Public user interface](architecture/public) +❌ [Public user interface](./architecture/public) +❌ [Public user interface](../architecture/public) +❌ [Public user interface](/architecture/public.md) +``` + +:::note[Vereisten voor interne links] +Links naar andere Tech Docs-documentatiepagina's moeten: + +1. beginnen met een schuine streep (`/`) +2. overeenkomen met de locatie van de pagina in `src/content/docs/` +3. de bestandsextensie (`.md`) niet bevatten + +::: + +##### Binnen een pagina + +Starlight biedt [automatische ankerlinks voor koppen](https://starlight.astro.build/guides/authoring-content/#automatic-heading-anchor-links). Gebruik om naar een sectie binnen een pagina te linken het symbool `#`, gevolgd door de HTML-`id` van de betreffende sectiekop. + +```md + + +See the [Links](#links) section on this page. + +See the [Public configuration options](/architecture/public#configuration). +``` + +De `id` van een sectiekop is meestal dezelfde tekenreeks als de kop zelf, maar dan volledig in kleine letters en met alle enkele spaties vervangen door enkele koppeltekens. Je kunt de daadwerkelijke HTML-`id` bekijken door met de rechtermuisknop op de kop te klikken en deze te 'inspecteren'. + +#### In blogberichten + +Wanneer je de hoofdtekst van een blogbericht schrijft, gebruik je voor links naar documentatiepagina's hetzelfde patroon als [in documentatiepagina's](#to-other-pages): een voorafgaande `/` en het pad onder `src/content/docs/` zonder `.md`, bijvoorbeeld `[Public user interface](/architecture/public)`. + +Links naar een ander blogbericht gebruiken `/blog/` plus het pad van dat bericht onder `src/content/blog/`, zonder de extensie—dezelfde vorm als de openbare URL (zie [Blog](#blog) onder [Waar pagina's staan](#where-pages-go)). `src/content/blog/v4-2-0-release-candidate.md` wordt bijvoorbeeld gelinkt als `[v4.2.0 release candidate](/blog/v4-2-0-release-candidate)`. Geneste mappen voegen segmenten toe, bijvoorbeeld `/blog/releases/v4-2-0` voor `src/content/blog/releases/v4-2-0.md`. + +### Tekst benadrukken + +Zet tekst die je wilt benadrukken tussen `_ ` voor cursief, `**` voor vet en `~~` voor doorhalen. + +```md + + +_Italicized_ text + +**Bold** text + +**_Bold and italicized_** text + +~~Strikethrough~~ text +``` + +### Alinea's + +Maak alinea's door een lege regel tussen regels tekst te laten. + +```md + + +This is one paragraph. + +This is another paragraph. +``` + +### Lijsten + +Begin elke regel in een lijst met een streepje (`-`) voor een lijst met opsommingstekens, of met een getal gevolgd door een punt (`1.`) voor een genummerde lijst. + +```md + + +- Resource +- Digital Object +- Accession + +1. Accession +2. Digital Object +3. Resource +``` + +### Codevoorbeelden + +Zet inline code tussen enkele backticks (`` ` ``). + +Zet codeblokken tussen drie backticks (` ``` `), ook wel een 'code fence' genoemd, die je direct boven en onder het codeblok plaatst. Voeg de naam van de programmeertaal of de bestandsextensie toe aan de eerste reeks backticks om syntaxiskleuring in te schakelen. + +````md + + +The `JSONModel` class is central to ArchivesSpace. + +```ruby +def h(str) + ERB::Util.html_escape(str) +end +``` +```` + +### Diagrammen + +Tech Docs ondersteunt [Mermaid](https://mermaid.js.org/)-diagrammen in zowel documentatiepagina's als blogberichten. + +Gebruik een afgebakend codeblok met `mermaid` als taal: + +````md +```mermaid +flowchart TD + A[Staff user edits record] --> B[Indexer updates Solr] + B --> C[Updated record in PUI] +``` +```` + +Weergegeven voorbeeld: + +```mermaid +flowchart TD + A[Staff user edits record] --> B[Indexer updates Solr] + B --> C[Updated record in PUI] +``` + +### Kaders + +Kaders zijn handig om secundaire of promotionele informatie uit te lichten. + +Zet de inhoud tussen een paar reeksen van drie dubbele punten (`:::`) en voeg een van de kadertypen (bijvoorbeeld `note`) toe aan de eerste reeks dubbele punten. De kadertypen zijn `note`, `tip`, `caution` en `danger`; elk type heeft een eigen kleur en pictogram. Pas de titel aan door tekst tussen vierkante haken (`[ ]`) te zetten na het kadertype. + +```md + + +:::tip +Become an ArchivesSpace member today! 🎉 +::: + +:::note[Some custom title] + +### Markdown is supported in asides + +![Pic alt text](../../../images/example.jpg) + +Lorem ipsum dolor sit amet consectetur, adipisicing elit. +::: +``` + +:::note +Kaders zijn een aangepaste Markdown-functie van het onderliggende [Starlight-framework](https://starlight.astro.build/guides/authoring-content/#asides) waarmee Tech Docs wordt gebouwd. +::: + +:::tip[Titel van een kader aanpassen] +Pas de titel van een kader aan door tekst tussen vierkante haken (`[ ]`) te zetten na het kadertype, in dit geval `tip`. +::: + +### Afbeeldingen + +Toon een afbeelding met een uitroepteken (`!`), gevolgd door de [alternatieve tekst](https://en.wikipedia.org/wiki/Alt_attribute) van de afbeelding (een korte beschrijving van de afbeelding) tussen vierkante haken (`[ ]`), gevolgd door de externe URL of het interne pad tussen ronde haken (`( )`). + +```md + + +![A dozen Krispy Kreme donuts in a box](https://example.com/donuts.jpg) + +![The ArchivesSpace logo](../../../images/logo.svg) +``` + +:::note[Plaats afbeeldingen in `src/images`] +Alle interne afbeeldingen horen in de map `src/images`. Het relatieve pad naar afbeeldingen vanuit dit bestand is `../../../images`. +::: + +## YAML-frontmatter + +Elk contentbestand begint met [YAML](https://yaml.org/)-frontmatter: metadata in een blok dat wordt afgebakend door drie streepjes (`---`). Gebruik de onderstaande sjablonen zodat elk veld waarvan we afhankelijk zijn expliciet is ingesteld. Zie voor meer informatie over hoe het bouwsysteem van de site deze waarden uitleest [De contentcollectie en het schema voor documentatie](/about/development#documentation-content-collection-and-schema) en [De contentcollectie en het schema voor blogs](/about/development#blog-content-collection-and-schema) op de pagina Ontwikkeling. + +### Documentatiepagina's + +```md +--- +title: Using MySQL +description: Instructions for how to set up MySQL with ArchivesSpace. +--- +``` + +- **`title`** — Paginatitel die wordt weergegeven in de lay-out, het browsertabblad en de metadata. +- **`description`** — Korte samenvatting die wordt gebruikt voor SEO, zoekresultaten en previews op sociale media. + +### Blogberichten + +```md +--- +title: v4.2.0 Release Candidate +metaDescription: Early access to ArchivesSpace v4.2.0-RC1 is now available. +teaser: ArchivesSpace v4.2.0-RC1 has landed for early testing. +pubDate: 2026-03-20 +authors: + - Pat Doe +updatedDate: 2026-03-21 +--- +``` + +- **`title`** — Kop van het bericht op de berichtpagina en in het blogoverzicht. +- **`metaDescription`** — Korte samenvatting voor paginametadata (SEO) en voor de overzichtskaart wanneer `teaser` ontbreekt. +- **`teaser`** — Tekst of HTML voor de overzichtskaart van het blog (links en beperkte opmaak komen hier vaak voor). +- **`pubDate`** — Publicatiedatum; berichten worden op basis van deze waarde gesorteerd, met de nieuwste bovenaan. Gebruik een datum in ISO-notatie (`YYYY-MM-DD`). +- **`authors`** — Lijst met auteursnamen, op het overzicht en de berichtpagina weergegeven, gescheiden door komma's. +- **`updatedDate`** — Datum waarop het bericht voor het laatst is bijgewerkt, in hetzelfde formaat (`YYYY-MM-DD`), wanneer het na publicatie is herzien. + +## Afbeeldingsbestanden + +Alle interne afbeeldingsbestanden die in Tech Docs-content worden gebruikt, horen in de map `src/images` in de hoofdmap van dit project. + +## Schrijfconventies + +- Plug-ins, niet plugins +- Titels zijn in zinskapitalisatie ("Applicatiemonitoring met New Relic") +- Gebruik voor titels van documentatiepagina's bij voorkeur een infinitief ("MySQL gebruiken", "Serveren via HTTPS") diff --git a/src/content/docs/nl/about/development.md b/src/content/docs/nl/about/development.md new file mode 100644 index 0000000..cb38a7e --- /dev/null +++ b/src/content/docs/nl/about/development.md @@ -0,0 +1,318 @@ +--- +title: Ontwikkeling +description: Op deze pagina wordt beschreven hoe je de tech-docs-repository instelt, de website bouwt, afhankelijkheden bijwerkt en tests uitvoert. +# This is the last page in the sidebar, so point to Home next instead of +# the Help Center which comes after this page in the sidebar +next: + link: / + label: Startpagina +--- + +Tech Docs is een [Node.js](https://nodejs.org)-applicatie, gebouwd met [Astro](https://astro.build/) en het documentatiesiteframework [Starlight](https://starlight.astro.build/). De broncode wordt gehost op [GitHub](https://github.com/archivesspace/tech-docs). De site wordt statisch gebouwd en (tijdelijk) gehost via [Cloudflare Pages](https://pages.cloudflare.com/). De content wordt geschreven in [Markdown](/about/authoring#markdown). Wanneer de broncode verandert, wordt korte tijd later een nieuwe set statische bestanden gegenereerd en gepubliceerd. + +## Afhankelijkheden + +Tech Docs is afhankelijk van de volgende opensourcesoftware (zie `.nvmrc` en `package.json` voor de versies): + +1. [Node.js](https://nodejs.org) - JavaScript-ontwikkel- en bouwomgeving; de versie die in `.nvmrc` staat, is de standaardversie van Node.js in de build-image van Cloudflare Pages +2. [Astro](https://astro.build/) - generator voor statische sites die conceptueel is gebaseerd op 'componenten' (React, Vue, Svelte enzovoort) in plaats van 'sjablonen' (Jekyll, Handlebars, Pug enzovoort) + 1. [Starlight](https://starlight.astro.build/) - Astro-plug-in en thema voor documentatiewebsites + 2. [Sharp](https://sharp.pixelplumbing.com/) - bibliotheek voor beeldtransformatie die door Astro wordt gebruikt +3. [Cypress](https://www.cypress.io/) - framework voor end-to-endtests +4. [Stylelint](https://stylelint.io/) - CSS-linter die lokaal in teksteditors en op afstand in [CI](#cicd) wordt gebruikt om tests uit te voeren + 1. [stylelint-config-recommended](https://github.com/stylelint/stylelint-config-recommended) - basisset lintregels + 2. [postcss-html](https://github.com/ota-meshi/postcss-html) - PostCSS-syntaxis voor het parseren van HTML (en HTML-achtige bestanden, waaronder `.astro`-bestanden) + 3. [stylelint-config-html](https://github.com/ota-meshi/stylelint-config-html) - maakt het mogelijk voor Stylelint om `.astro`-bestanden te parseren +5. [Prettier](https://prettier.io/) - formatter voor broncode die lokaal in teksteditors en op afstand in [CI](#cicd) wordt gebruikt om tests uit te voeren + 1. [prettier-plugin-astro](https://github.com/withastro/prettier-plugin-astro) - maakt het mogelijk voor Prettier om `.astro`-bestanden via de opdrachtregel te parseren + +## Lokaal ontwikkelen + +Voer Tech Docs lokaal uit door de Tech Docs-repository te klonen, de projectafhankelijkheden te installeren en een ontwikkelserver te starten: + +```sh +# Requires git and Node.js + +# Clone Tech Docs and move to it +git clone https://github.com/archivesspace/tech-docs.git +cd tech-docs + +# Install dependencies +npm install + +# Run dev server +npm start +``` + +Ga nu naar [localhost:4321](http://localhost:4321) om Tech Docs lokaal in de browser te bekijken. Wijzigingen in de broncode worden direct in de browser weergegeven. + +### De site bouwen + +Bij het bouwen van de site wordt een set statische bestanden aangemaakt. Na de build staan deze bestanden in `dist`; ze kunnen lokaal worden aangeboden of op een server worden geïmplementeerd. Soms komen bij het bouwen van de site fouten aan het licht die niet in de ontwikkelomgeving optreden. + +```sh +# Build the site and output it to dist/ +npm run build +``` + +:::tip +Serveer de gebouwde uitvoer na een build door `npm run preview` uit te voeren. +::: + +### Beschikbare `npm`-scripts + +De volgende scripts zijn beschikbaar via `package.json`. Voer een script vanaf de hoofdmap van het project uit op de opdrachtregel door er het commando `npm run` voor te zetten, bijvoorbeeld `npm run start`. + +- `start` -- voer de Astro-ontwikkelserver uit +- `build` -- bouw Tech Docs voor productie +- `preview` -- serveer de statische build +- `astro` -- geef Astro-help weer +- `test:dev` -- voer tests uit in de ontwikkelmodus +- `test:prod` -- voer tests uit in de productiemodus +- `test` -- voert standaard tests uit in de productiemodus +- `prettier:check` -- controleer de opmaak met Prettier +- `prettier:fix` -- herstel mogelijke opmaakfouten +- `stylelint:check` -- voer Stylelint uit op CSS +- `stylelint:fix` -- herstel mogelijke CSS-fouten + +## Documentatiepagina's + +Documentatiepagina's worden geïmplementeerd met de contentcollectie `docs` van Starlight. De bronbestanden staan in `src/content/docs/`; Starlight genereert de bijbehorende routes als onderdeel van de normale statische Astro-build (er is geen afzonderlijke documentatiebuildstap). De hiërarchie van de zijbalk wordt ingesteld in `src/siteNavigation.json`. Zie [YAML-frontmatter](/about/authoring#yaml-frontmatter) voor kopieerbare sjablonen en beknopte aanwijzingen voor auteurs over velden. + +### Documentatiepagina's toevoegen + +Een nieuwe documentatiepagina toevoegen: + +1. Maak een Markdown-bestand in de toepasselijke documentatiesectiemap onder `src/content/docs/`. +2. Voeg die pagina toe aan `src/siteNavigation.json` in de juiste sectie en op de juiste plek, zodat deze in de gewenste volgorde in de zijbalk verschijnt. +3. Als de nieuwe pagina de eerste pagina in de sectie wordt, werk dan de bijbehorende hero-link op de homepage bij in `src/components/HomePage.astro`, zodat de sectielink naar de nieuwe eerste pagina verwijst. + +### Verouderde `index.md`-pagina's + +Sommige sectiemappen bevatten nog verouderde `index.md`-pagina's van de oude Tech Docs-site. Deze pagina's kunnen nog steeds routes krijgen (bijvoorbeeld `/architecture` en `/architecture/index`), maar ze worden niet opgenomen in de zijbalk omdat ze niet in `src/siteNavigation.json` staan. + +### Documentatiecontentcollectie en -schema + +In `src/content.config.ts` gebruikt de collectie `docs` `docsLoader()` en het [frontmatter-schema van Starlight](https://starlight.astro.build/reference/frontmatter/) via `docsSchema()`, uitgebreid met `issueUrl` en `issueText`. Frontmatter wordt tijdens het bouwen gevalideerd. Starlight vereist een `title`; andere sleutels zijn optioneel, tenzij de pagina een specifieke behoefte heeft. + +| Veld | Vereist | Doel | +| ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | Ja | Paginatitel in de lay-out, het browsertabblad en de metadata. | +| `description` | Nee | Korte samenvatting voor SEO, zoekresultaten en previews op sociale media. De meeste pagina's hebben dit veld; op enkele pagina's ontbreekt het (bijvoorbeeld [medewerkersinterface](/architecture/frontend), [404](/404)). | +| `slug` | Nee | Vervangt het URL-segment dat anders uit het bestandspad zou worden afgeleid. | +| `editUrl` | Nee | Overschrijft de URL voor 'Pagina bewerken', of `false` om de link te verbergen (bijvoorbeeld op [404](/404)). | +| `head` | Nee | Extra tags voor de documenthead (meta, link, aangepaste titel enzovoort). | +| `tableOfContents` | Nee | Inhoudsopgave: `false` om deze te verbergen, of `{ minHeadingLevel, maxHeadingLevel }` om het bereik in te stellen. | +| `template` | Nee | Lay-outsjabloon van Starlight (bijvoorbeeld `splash`). | +| `hero` | Nee | Hero-gebied voor pagina's in splash-stijl (`title`, `tagline`, optioneel `image`, `actions` enzovoort). | +| `banner` | Nee | Optionele banner boven de pagina-inhoud. | +| `lastUpdated` | Nee | Overschrijft de weergegeven datum van de laatste wijziging, of `false` om deze te verbergen. | +| `prev` | Nee | Paginering naar de vorige pagina: `false`, een label als tekenreeks of `{ link, label }`. | +| `next` | Nee | Paginering naar de volgende pagina: `false`, een label als tekenreeks of `{ link, label }`. Zo stelt [Ontwikkeling](/about/development) dit zo in dat 'Volgende' naar Startpagina gaat in plaats van naar de externe Help Center-vermelding die erna in de zijbalk staat. | +| `pagefind` | Nee | Stel in op `false` om de pagina niet op te nemen in de Pagefind-index. | +| `draft` | Nee | Wanneer dit `true` is, wordt de pagina uitgesloten van productiebuilds. | +| `sidebar` | Nee | Label, volgorde, badge, `hidden` of link-`attrs` voor de pagina. De hoofdstructuur van de zijbalk wordt ingesteld in `src/siteNavigation.json`. | +| `issueUrl` | Nee | URL voor de voettekstlink 'Een probleem melden', of `false` om de link te verbergen. Als dit veld ontbreekt, wordt de standaardwaarde uit `src/content.config.ts` gebruikt; auteurs kunnen deze expliciet instellen (zie [YAML-frontmatter](/about/authoring#yaml-frontmatter)). | +| `issueText` | Nee | Labeltekst voor die voettekstlink. Als dit veld ontbreekt, wordt de standaardwaarde uit `src/content.config.ts` gebruikt; auteurs kunnen deze expliciet instellen (zie [YAML-frontmatter](/about/authoring#yaml-frontmatter)). | + +### Documentatieroutes + +- URL's worden afgeleid van bestandspaden in `src/content/docs/`, tenzij `slug` is ingesteld in frontmatter. +- Paginering naar vorige/volgende pagina's wordt afgeleid van de volgorde in de zijbalk, tenzij `prev`/`next` in frontmatter is overschreven. + +### UI-componenten voor documentatie + +| Onderdeel | Locatie | +| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| Hiërarchie en groepering van de zijbalk | `src/siteNavigation.json` | +| Standaardweergave van de paginatitel van documentatie | `src/components/CustomPageTitle.astro` (valt voor niet-blogroutes terug op Starlights standaard `PageTitle`) | +| Metagegevens/navigatie in de voettekst (bewerklink, probleemlink enz.) | `src/components/overrides/Footer.astro`, `src/components/overrides/EditLink.astro`, `src/components/IssueLink.astro` | + +### Tests voor documentatie + +Gedrag van documentatiepagina's wordt met Cypress getest, voornamelijk in `cypress/e2e/content-pages.cy.js` (zijbalk, inhoudsopgave, voettekstmetagegevenslinks en paginering). + +## Blog + +De [blog](/blog) is geïmplementeerd als een Astro-contentcollectie naast de documentatiecollectie. Bronbestanden van berichten staan in `src/content/blog/`; de routes staan in `src/pages/blog/`. Er is geen afzonderlijke blogbuildstap: blogpagina's maken deel uit van de normale statische Astro-uitvoer, en de zoekfunctie van de site ([Zoeken](#search)) indexeert ze net als andere HTML. Zie [Content schrijven](/about/authoring#where-pages-go) en [YAML-frontmatter](/about/authoring#yaml-frontmatter) voor informatie over waar bestanden moeten staan en voor voorbeelden van frontmatter. + +### Blogberichten toevoegen + +Maak een nieuw Markdown-bestand in `src/content/blog/` met de verplichte frontmattervelden (`title`, `metaDescription`, `pubDate` en `authors`) om een blogbericht toe te voegen. + +Optionele velden (`teaser` en `updatedDate`) kunnen indien nodig ook worden toegevoegd. Voor blogberichten zijn geen wijzigingen in `src/siteNavigation.json` vereist; geldige bestanden in de collectie worden automatisch opgenomen wanneer de site wordt gebouwd. + +### Blogcontentcollectie en -schema + +De collectie `blog` is geregistreerd in `src/content.config.ts` met een Zod-schema. Frontmatter wordt tijdens het bouwen gevalideerd. Als je frontmattervelden toevoegt of hernoemt, moet je dat schema bijwerken, evenals alle onderdelen die `entry.data` gebruiken (blogpagina's, middleware en tests). + +| Veld | Vereist | Doel | +| ----------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | Ja | Kop van het bericht op de berichtpagina en de indexkaart. Mag HTML bevatten voor de weergave; de document-`` en labels voor vorige/volgende paginering **verwijderen HTML** uit `title`. | +| `metaDescription` | Ja | Korte samenvatting voor de paginametabeschrijving (SEO). Wordt gebruikt als teasertekst in de index wanneer `teaser` ontbreekt. | +| `teaser` | Nee | HTML of platte tekst voor de indexkaart van de blog (`set:html`). Gebruik dit bij voorkeur voor links of beperkte HTML in de index; platte tekst in `title` is het veiligst voor tabtitels en pagineringslabels. | +| `pubDate` | Ja | Publicatiedatum; berichten worden op dit veld gesorteerd, met de nieuwste bovenaan. Wordt uit frontmatter geparseerd en op de index en in de berichtkop weergegeven in **UTC**. | +| `authors` | Ja | Lijst met weergegeven auteursnamen; op de index en de berichtpagina weergegeven, gescheiden door komma's. | +| `updatedDate` | Nee | Optionele herzieningsdatum (`YYYY-MM-DD`). Wordt in frontmatter opgeslagen, maar **wordt momenteel niet in de UI weergegeven**; kan later worden gebruikt voor weergave of consistentie met de auteursjabloon. | + +### Blogroutes + +- `src/pages/blog/index.astro` — `/blog`-index; laadt berichten, sorteert ze aflopend op `pubDate` en geeft gegevens door aan de index-UI. +- `src/pages/blog/[id].astro` — afzonderlijke berichten; `getStaticPaths` wordt gegenereerd op basis van de collectie, zodat nieuwe geldige berichten bij de volgende build verschijnen. + +### Middleware voor blogroutes + +`src/blogRouteData.js` is Starlight-route-middleware voor blogroutes. Het voegt `pubDate`, `authors` en `postTitle` toe voor berichtpagina's en stelt paginering naar vorige/volgende pagina's in (een ouder bericht als 'Vorige', een nieuwer bericht als 'Volgende'). Uit pagineringslabels is HTML uit titels verwijderd. + +### UI-componenten voor de blog + +| Onderdeel | Locatie | +| ----------------------------------- | ----------------------------------------------------------------------------- | +| Indexlijst en kaarten | `src/components/BlogIndex.astro` | +| Paginatitel van de index | `src/components/BlogIndexTitleHeader.astro` | +| Titel, datum, auteurs en teruglink | `src/components/BlogPostTitleHeader.astro`, `src/components/BackToBlog.astro` | +| Standaardtitel versus blogtitel | `src/components/CustomPageTitle.astro` | +| Link 'Blog' in de kop | `src/components/overrides/Header.astro` | +| Bloglay-out / gedrag van de zijbalk | `src/components/overrides/PageFrame.astro` | + +### Blogtests + +End-to-enddekking staat in `cypress/e2e/blog.cy.js`. Werk deze tests bij wanneer je de blogmarkup, URL's of zichtbare werking wijzigt. + +## Zoeken + +Zoeken op de site is een [functie van Starlight](https://starlight.astro.build/guides/site-search/): + +> Starlight-sites bevatten standaard zoeken in de volledige tekst, mogelijk gemaakt door [Pagefind](https://pagefind.app/), een snelle zoektool met een laag bandbreedtegebruik voor statische sites. +> +> Er is geen configuratie nodig om zoeken in te schakelen. Bouw en implementeer je site en gebruik daarna de zoekbalk in de sitekop om content te vinden. + +:::note +Zoeken werkt alleen in productiebuilds, niet op de ontwikkelserver. +::: + +## Thema aanpassen + +Starlight kan op verschillende manieren worden aangepast, waaronder: + +- [Instellingen](https://starlight.astro.build/guides/customization/) -- zie `astro.config.mjs` +- [CSS](https://starlight.astro.build/guides/css-and-tailwind/) -- zie `src/styles/custom.css` +- [Componenten](https://starlight.astro.build/guides/overriding-components/) -- zie `src/components` + +## Statische bestanden + +### Afbeeldingen + +De meeste afbeeldingsbestanden horen in `src/images` te staan. Hierdoor kunnen ze door Astro worden [verwerkt](https://docs.astro.build/en/guides/images/), met onder meer prestatieoptimalisaties. + +Afbeeldingen die niet door Astro moeten worden verwerkt, zoals favicons, horen in `public` te staan. + +:::note[Gebruik `src/images` voor alle afbeeldingen in de content] +Plaats alle afbeeldingen die in Tech Docs-content worden gebruikt in `src/images`. +::: + +### De map `public` + +Bestanden in `public` worden niet door Astro verwerkt. Ze worden rechtstreeks naar de uitvoer gekopieerd en zijn beschikbaar vanaf de hoofdmap van de site. Zo is `public/favicon.svg` beschikbaar op `docs.archivesspace.org/favicon.svg` en is `public/example/slides.pdf` beschikbaar op `docs.archivesspace.org/example/slides.pdf`. + +## Mermaid-diagrammen + +Tech Docs ondersteunt Mermaid-diagrammen in zowel documentatie- als blogcontent (zie [Content schrijven](/about/authoring#diagrams) voor de syntaxis). Mermaid is een tool die tekst omzet in diagrammen: auteurs schrijven diagramdefinities in een code fence en Mermaid zet die tekst in de browser om in SVG-diagrammen. Dit verschilt van gewone codeblokken, die Starlight met [Expressive Code](https://expressive-code.com/) weergeeft als statische codefragmenten met syntaxisaccentuering. + +### Implementatie + +1. De runtime-logica staat in `src/lib/mermaid.ts`. +2. De runtime wordt geladen door de Starlight-override voor het paginaraamwerk in `src/components/overrides/PageFrame.astro`. +3. Mermaid-fences worden tijdens runtime nabewerkt en als SVG-diagrammen weergegeven. + +### Gedrag van thema's + +- Het Mermaid-thema wordt afgeleid van het sitethema (`data-theme` op `<html>`): + - donkere modus => Mermaid `dark` + - andere modi => Mermaid `default` +- Een `MutationObserver` in `src/lib/mermaid.ts` houdt wijzigingen in `data-theme` bij en rendert bestaande Mermaid-diagrammen opnieuw, zodat kleuren na het wisselen van thema worden bijgewerkt. +- De tekstkleur van Mermaid wordt expliciet ingesteld in `initializeMermaidRuntime()` voor betere toegankelijkheid dan met de standaardstijlen: + - tekst in donkere modus: `#fff` + - tekst in lichte modus: `#000` + +### Onderhoudsnotities + +- Als de markup van Starlight/Expressive Code bij een toekomstige upgrade verandert, werk dan de Mermaid-selectors en -parsing in `src/lib/mermaid.ts` bij (vooral `pre[data-language="mermaid"]` en `.ec-line .code`). +- Als het laden van scripts op lay-outniveau verandert, zorg er dan voor dat `src/components/overrides/PageFrame.astro` `src/lib/mermaid.ts` blijft laden op pagina's met Markdown-content. +- Houd de Cypress-dekking in `cypress/e2e/mermaid.cy.js` bijgewerkt wanneer het gedrag of de markup van Mermaid-weergave verandert. + +## npm-afhankelijkheden bijwerken + +Voer de volgende opdrachten lokaal uit om npm-afhankelijkheden bij te werken en push de wijzigingen daarna naar de upstreamrepository. + +```sh +# List outdated dependencies +npm outdated + +# Update dependencies +npm update +``` + +## Importaliassen + +Astro ondersteunt [importaliassen](https://docs.astro.build/en/guides/imports/#aliases), waarmee je lange relatieve importpaden korter kunt schrijven. + +```astro title="src/components/overrides/Example.astro" del="../../images" ins="@images" +--- +import relativeA from '../../images/A_logo.svg' // no alias +import aliasA from '@images/A_logo.svg' // alias +--- +``` + +## Sitemap + +Starlight heeft ingebouwde [sitemapondersteuning](https://starlight.astro.build/guides/customization/#enable-sitemap), ingeschakeld via de bovenliggende sleutel `site` in `astro.config.mjs`. Deze sleutel genereert `/sitemap-index.xml` en `/sitemap-0.xml` wanneer Tech Docs wordt [gebouwd](#building-the-site), en voegt de sitemaplink toe aan de `<head>` van elke pagina. `public/robots.txt` verwijst ook naar de sitemap. + +## Testen + +### End-to-end + +Tech Docs gebruikt [Cypress](https://www.cypress.io/) voor end-to-endtests van aanpassingen aan het onderliggende Starlight-framework en voor andere projectbehoeften. End-to-endtests staan in `cypress/e2e`. + +Voer de Cypress-tests lokaal uit door eerst de site te bouwen en te serveren: + +```sh +# Build the site +npm run build + +# Serve the build output +npm run preview +``` + +Start de tests vervolgens **in een andere terminal**: + +```sh +# Run the tests +npm test +``` + +### Codestijl + +Bijna alle bestanden in de Tech Docs-codebase worden opgemaakt met [Prettier](https://prettier.io/), zodat de leesbaarheid en syntaxis consistent zijn. Voer Prettier lokaal uit om opmaakfouten te vinden en deze waar mogelijk automatisch te herstellen: + +```sh +# Check formatting of .md, .css, .astro, .js, .yml, etc. files +npm run prettier:check + +# Fix any errors that can be overwritten automatically +npm run prettier:fix +``` + +Alle CSS in `.css`- en `.astro`-bestanden wordt met [Stylelint](https://stylelint.io/) gelint om fouten te helpen voorkomen en conventies af te dwingen. Voer Stylelint lokaal uit om lintfouten te vinden en deze waar mogelijk automatisch te herstellen: + +```sh +# Check all CSS +npm run stylelint:check + +# Fix any errors that can be overwritten automatically +npm run stylelint:fix +``` + +### CI/CD + +Voordat nieuwe wijzigingen worden geaccepteerd in de codebase, moeten de tests voor [end-to-end](#end-to-end) en [codestijl](#code-style) slagen. Tech Docs gebruikt [GitHub Actions](https://docs.github.com/en/actions) als platform voor continue integratie en continue levering (CI/CD), dat de test- en implementatieprocessen automatiseert. De tests zijn gedefinieerd in yaml-bestanden in `.github/workflows/` en worden automatisch uitgevoerd wanneer nieuwe wijzigingen worden voorgesteld. diff --git a/src/content/docs/nl/administration/backup.md b/src/content/docs/nl/administration/backup.md new file mode 100644 index 0000000..9f1e5aa --- /dev/null +++ b/src/content/docs/nl/administration/backup.md @@ -0,0 +1,147 @@ +--- +title: Back-up en herstel +description: Stappen, opdrachten en advies voor het instellen van uw ArchivesSpace MySQL-database en Solr-index. Back-ups zorgen voor herstel in geval van fouten of storingen. +--- + +## De Docker-configuratiepakketten gebruiken + +### Back-ups van de database + +Het [Docker-configuratiepakket](/administration/docker) bevat een mechanisme dat periodieke back-ups van uw MySQL-database uitvoert, +met behulp van: [databacker/mysql-backup](https://github.com/databacker/mysql-backup). Het is standaard ingesteld om +een dump elke twee uur uit te voeren. Zie [configuratie](https://github.com/databacker/mysql-backup/blob/master/docs/configuration.md) voor meer opties. + +De automatisch aangemaakte back-ups bevinden zich in de [`backups` directory](/administration/docker/) van het Docker-configuratiepakket. + +#### Bij gebruik van Docker + +U kunt expliciet een dump van uw gedockeriseerde database aanmaken terwijl de Docker-containers draaien met behulp van de opdracht in uw host-systeem shell: + +```shell +docker exec mysql mysqldump -u root -p123456 archivesspace | gzip > /tmp/db.$(date +%F.%H%M%S).sql.gz +``` + +#### Bij gebruik van Docker Desktop + +U kunt expliciet een dump van uw gedockeriseerde database aanmaken terwijl de Docker-containers draaien met behulp van het tabblad "Exec" van uw mysql-container: + +```shell +docker exec mysql mysqldump -u root -p123456 archivesspace | gzip > /tmp/db.$(date +%F.%H%M%S).sql.gz +``` + +U kunt de aangemaakte databasedump vervolgens exporteren vanuit de `/tmp`-map van uw mysql-container met behulp van het tabblad "Bestanden". + +## Uw eigen back-ups beheren + +Het regelmatig maken van back-ups van uw MySQL-database is cruciaal. ArchivesSpace slaat +al uw recordsgegevens op in de database, zodat u, zolang u back-ups van uw database heeft, altijd kunt herstellen van fouten en storingen. + +Als u MySQL gebruikt, kan het hulpprogramma `mysqldump` de databasestructuur en gegevens dumpen naar een bestand. Het is een goed idee om dit uit te voeren met de optie +`--single-transaction` om te voorkomen dat uw databasetabellen worden geblokkeerd terwijl uw back-ups draaien. Het is ook essentieel om de vlag +`--routines` te gebruiken, waarmee functies en opgeslagen procedures in de back-up worden opgenomen. +Het hulpprogramma `mysqldump` wordt veel gebruikt, en er zijn veel tutorials beschikbaar. Als voorbeeld zou iets als dit in uw `crontab` de +database twee keer per dag back-uppen: + +```shell +# Dump archivesspace database 6am and 6pm +30 06,18 * * * mysqldump -u as -pas123 archivesspace | gzip > ~/backups/db.$(date +%F.%H%M%S).sql.gz +``` + +U moet back-ups opslaan op een veilige locatie. + +Als u met de demodatabase werkt (gebruik de demodatabase NOOIT in productie), +kunt u periodieke databasesnapshots maken met de volgende configuratie-instellingen: + +```ruby +# In this example, we create a snapshot at 4am each day and keep +# 7 days' worth of backups +# +# Database snapshots are written to 'data/demo_db_backups' by +# default. +AppConfig[:demo_db_backup_schedule] = "0 4 \* \* \*" +AppConfig[:demo\_db\_backup\_number\_to\_keep] = 7 +``` + +Solr-indexen kunnen altijd worden [opnieuw gemaakt](administration/indexes/) vanuit de inhoud van de +database. Voor grote sites, waar het opnieuw opbouwen van de indexen te lang zou duren, is het mogelijk om [Solr-indexen back-uppen en herstellen](https://solr.apache.org/guide/solr/latest/deployment-guide/backup-restore.html). +In dat geval moet u ook de bestanden back-uppen en herstellen die door de indexers worden gebruikt om te markeren welk deel van de gegevens al is geïndexeerd: + +``` +docker cp archivesspace:/archivesspace/data/indexer_state /tmp/indexer_state +docker cp archivesspace:/archivesspace/data/indexer_pui_state /tmp/indexer_pui_state +``` + +## Back-ups van uw database maken met het meegeleverde script + +ArchivesSpace biedt eenvoudige scripts voor Windows en Unix-achtige systemen om de database naar een `.zip`-bestand te back-uppen. + +### Bij gebruik van de ingebouwde demodatabase + +Opmerking: _Gebruik de demodatabase NOOIT in productie._ U kunt: + +```shell +scripts/backup.sh --output /path/to/backup-yyyymmdd.zip +``` + +uitvoeren en het script zal een bestand genereren met een snapshot van de demodatabase. + +### Bij gebruik van MySQL + +Als u tegen MySQL draait en `mysqldump` hebt geïnstalleerd, +kunt u de optie `--mysqldump` opgeven. Hiermee wordt de +configuratie uit uw configuratiebestand gelezen en wordt een dump van uw MySQL-database toegevoegd aan het resulterende `.zip`-bestand. + +```shell +scripts/backup.sh --mysqldump --output ~/backups/backup-yyyymmdd.zip +``` + +## Herstellen vanuit back-up + +Bij het herstellen van een ArchivesSpace-installatie vanuit een back-up, moet u uw database herstellen (ofwel de demodatabase of MySQL). + +Na het herstellen van uw database, wordt aanbevolen om uw [Solr-indexen opnieuw te maken](administration/indexes/) + +### Uw database herstellen + +#### Bij het beheren van uw eigen MySQL + +Als u MySQL gebruikt, vereist het herstellen van uw database alleen het laden van uw `mysqldump`-back-up in een lege database. Als u het script `scripts/backup.sh` gebruikt (zoals hierboven beschreven), is dit dumpbestand `mysqldump.sql` in uw back-up `.zip`-bestand. + +Om een MySQL-dumpbestand te laden, volg de instructies in _Uw MySQL-database instellen_ +om een lege database aan te maken met de juiste +machtigingen. Vul daarna de database met uw back-upbestand met behulp van de MySQL-client: + +```sql +`mysql -uas -p archivesspace < mysqldump.sql`, where + `as` is the user name + `archivesspace` is the database name + `mysqldump.sql` is the mysqldump filename +``` + +U wordt gevraagd om het wachtwoord van de gebruiker in te voeren. + +#### Bij gebruik van de demodatabase + +Als u de demodatabase gebruikt, bevat uw back-up `.zip`-bestand een map met de naam `demo_db_backups`. Elke submap van `demo_db_backups` bevat een back-up van de demodatabase. Om +terug te herstellen vanuit een back-up, kopieer de map `archivesspace_demo_db` terug naar uw ArchivesSpace-datamap. Bijvoorbeeld: + +```shell +cp -a /unpacked/zip/demo_db_backups/demo_db_backup_1373323208_25926/archivesspace_demo_db \ +/path/to/archivesspace/data/ +``` + +#### Bij gebruik van Docker + +Als u de Docker-configuratiepakketten gebruikt om ArchivesSpace uit te voeren, kunt u een databasedump terugzetten op uw `archivesspace` MySQL-database met de volgende opdracht in uw host-systeem shell: + +```shell +docker exec mysql mysql -uas -pas123 archivesspace < /tmp/db.2025-02-26.164907.sql +``` + +##### Bij gebruik van Docker Desktop + +Op Docker Desktop kunt u uw sql-bestand importeren in de `/tmp/`-directory met behulp van het tabblad "Bestanden" van uw mysql-container. Daarna voert u op het tabblad "Exec" de opdracht uit: + +```shell +gunzip -c /tmp/db.2026-02-17.155254.sql.gz | mysql -u as -pas123 archivesspace +``` diff --git a/src/content/docs/nl/administration/docker.md b/src/content/docs/nl/administration/docker.md new file mode 100644 index 0000000..05abe83 --- /dev/null +++ b/src/content/docs/nl/administration/docker.md @@ -0,0 +1,225 @@ +--- +title: Uitvoeren met Docker +description: Instructies voor het instellen, uitvoeren en beheren van een ArchivesSpace-installatie met Docker. +--- + +## Docker-afbeeldingen + +Vanaf v4.0.0 ondersteunt ArchivesSpace officieel het gebruik van [Docker](https://www.docker.com/) als de eenvoudigste manier om snel een werkende installatie te krijgen. Docker vereenvoudigt het installeren, upgraden, starten en stoppen van ArchivesSpace. Het maakt het ook eenvoudig om ArchivesSpace als systeemservice in te stellen die bij elke herstart automatisch start. + +Als u Docker niet wilt gebruiken, is een andere (meer omvattende) manier om ArchivesSpace operationeel te krijgen het installeren van het nieuwste [ZIP-distributiebestand](/getting_started/zip_distribution). + +ArchivesSpace Docker-afbeeldingen zijn beschikbaar op [Docker Hub](https://hub.docker.com/u/archivesspace). + +- de afbeeldingen van de hoofdtoepassing zijn gemaakt vanuit [dit Dockerfile](https://github.com/archivesspace/archivesspace/blob/master/Dockerfile) +- solr-afbeeldingen zijn gebouwd vanuit [dit Dockerfile](https://github.com/archivesspace/archivesspace/blob/master/solr/Dockerfile) + +## Installeren + +### Systeemvereisten + +ArchivesSpace op Docker is getest op Ubuntu Linux, macOS en Windows. Er is minimaal 1024 MB RAM vereist. We raden minimaal 2 GB aan voor optimale prestaties. + +### Software-afhankelijkheden + +Wanneer u Docker gebruikt, is [Docker](https://www.docker.com/) de enige software-afhankelijkheid. Volg de [instructies](https://docs.docker.com/get-started/get-docker/) om de Docker-engine te installeren. +Optioneel kan [Docker Desktop](https://www.docker.com/products/docker-desktop/) worden geïnstalleerd; dit biedt een grafische manier om uw Docker-containers te beheren, te starten en te stoppen, containerlogs te bekijken, enz. + +### Downloaden van het configuratiepakket + +Om ArchivesSpace met Docker uit te voeren, downloadt u eerst het ArchivesSpace Docker-configuratiepakket van de nieuwste release van [GitHub](https://github.com/archivesspace/archivesspace/releases) (scroll naar beneden naar het gedeelte "Assets" op de pagina van de nieuwste release en zoek naar het ZIP-bestand met de naam `archivesspace-docker-${VERSION}.zip`). + +Het gedownloade configuratiepakket bevat een eenvoudige maar configureerbare en productieklaar gemaakte Docker-opzet die bedoeld is om op één computer te draaien. + +### Inhoud van het configuratiepakket + +Het uitpakken van het gedownloade bestand maakt een `archivesspace`-map met de volgende inhoud: + +``` +. +├── backups +├── config +│ └── config.rb +├── locales +├── plugins +├── proxy-config +│ └── default.conf +├── sql +├── docker-compose.yml +├── stylesheets +└── .env +``` + +- De map `backups` wordt pas aangemaakt nadat u de toepassing hebt gestart en bevat de automatisch uitgevoerde back-ups van de database. Zie [sectie automatische back-ups](#automated-database-backups). +- Het bestand `config/config.rb` bevat de [hoofdsconfiguratie](/customization/configuration/) van ArchivesSpace. +- De map `locales` maakt [aanpassing van de interface-teksten](/customization/locales/) mogelijk. +- De map `plugins` is bedoeld om extra ArchivesSpace-[plug-ins](/customization/plugins/) op te nemen. Standaard bevat deze de [`local`](/customization/plugins/#adding-your-own-branding)- en [`lcnaf`](https://github.com/archivesspace-plugins/lcnaf)-plug-ins. +- `proxy-config/default.conf` bevat de configuratie van de meegeleverde `nginx`; zie ook [proxyconfiguratie](#proxy-configuration). +- In de map `sql` kunt u uw `.sql`-database-dumpbestand plaatsen om de nieuwe database te initialiseren; zie [volgende sectie](migrating-from-the-zip-distribution-to-docker). +- De map `stylesheets` bevat de bestanden die worden gebruikt voor het maken van PDF's en andere bestanden. +- Het bestand `docker-compose.yml` bevat alle informatie die Docker nodig heeft om ArchivesSpace te bouwen en uit te voeren. +- Het bestand `.env` bevat de configuratie van de Docker-containers, waaronder: + - Gebruikersnaam- en wachtwoordgegevens waarmee ArchivesSpace toegang krijgt tot de MySQL-database. Het wordt aanbevolen om het standaardroot- en gebruikerswachtwoord te wijzigen in een veiliger wachtwoord. + - De databaseverbindings-URI die ook [dienovereenkomstig moet worden bijgewerkt](/customization/configuration/#database-config) nadat het databasegebruikerswachtwoord hierboven is gewijzigd. + +## Migreren van de zip-distributie naar Docker + +Als u ArchivesSpace momenteel gebruikt met het ZIP-distributiebestand, kunt u beginnen met het gebruik van Docker. + +### Maak een back-up van de database van uw ArchivesSpace-installatie + +Gebruik `mysqldump` om een dump van uw MySQL-database te maken: + +```shell +mysqldump -uroot -p123456 -h 127.0.0.1 archivesspace > /tmp/db.$(date +%F.%H%M%S).sql +``` + +Volg de stappen in de sectie [Back-up en herstel](/administration/backup/) als u meer instructies nodig heeft over het maken van back-ups van uw MySQL-database. + +### Initialiseren en migreren van de database in Docker + +Kopieer uw hierboven gemaakte `.sql`-database-dumpbestand naar de map `sql` van uw uitgepakte Docker-configuratiepakket. Zorg ervoor dat de bestandsnaam de extensie `.sql` bevat. Het bestand moet in platte tekstvorm zijn (geen zip-bestand). +Docker haalt het op wanneer het voor de eerste keer start en herstelt de dump in uw nieuwe database. + +Als u de dump op een eerdere ArchivesSpace-versie hebt gemaakt, past het systeem eventuele openstaande databasemigraties toe om uw database te upgraden naar de ArchivesSpace-versie die u momenteel op Docker draait. + +Na de eerste run wilt u dat `.sql`-bestand waarschijnlijk verwijderen uit de map `sql` van uw uitgepakte Docker-configuratiepakket. + +Het Docker-configuratiepakket bevat al een configureerbare database-back-upmechanisme voor MySQL. Lees daar meer over in de [sectie Back-up en herstel](/administration/backup/#using-the-docker-configuration-package). + +## Uitvoeren + +### Resource-limieten + +We raden aan om minimaal 2 GB per container toe te wijzen voor optimale prestaties. Als de hostmachine volledig is gewijd aan het uitvoeren van ArchivesSpace, is het verstandig om geen geheugengrens te configureren voor Docker-containers. + +Bij gebruik van Docker Desktop is standaard een geheugengrens ingesteld op 50% van het geheugen van uw hostmachine. Om het RAM-geheugen en andere resource-limieten te verhogen bij gebruik van Docker Desktop, zie [de documentatie](https://docs.docker.com/desktop/settings-and-maintenance/settings/#resources). + +Bij gebruik van Docker zonder Docker Desktop wordt standaard geen geheugengrens ingesteld. Zie [de Docker-documentatie](https://docs.docker.com/engine/containers/resource_constraints/) als u de limieten voor de resources die door ArchivesSpace-containers worden gebruikt, wilt instellen. + +### Opmerking bij het migreren vanuit de zip-distributie + +Als u migreert van de zip-distributie naar Docker, draait u waarschijnlijk nog met lokale MySQL- en Solr-instanties. Als u ArchivesSpace met Docker start, worden de Docker-gebaseerde MySQL- en Solr-instanties gestart. Om poortconflicten te vermijden, moet u ervoor zorgen dat u de lokale MySQL- en Solr-instanties stopzet voordat u doorgaat. + +### Starten + +Open een terminal, ga naar de map `archivespace` die het bestand `docker-compose.yml` bevat en voer het volgende uit: + +```shell +docker compose up --detach +``` + +De eerste keer dat u ArchivesSpace met Docker start, worden de containerafbeeldingen gedownload en worden configuratiestappen zoals database-initialisatie en Solr-indexinitialisatie automatisch uitgevoerd. +Het wordt verwacht dat het volledige proces tot tien of zelfs meer minuten duurt, afhankelijk van de kracht van uw machine en de snelheid van uw internetverbinding. **Opmerking**: als u migreert vanuit de zip-distributie naar Docker en u al een dump van uw database hebt gekopieerd naar de map `sql`, kan initialisatie van de database en indexering in Solr lang duren, afhankelijk van de grootte van uw gegevens. + +Als u de optie `--detach` gebruikt, kunt u de terminal sluiten zonder ArchivesSpace te stoppen. Het bekijken van de logs van draaiende ArchivesSpace-containers is mogelijk in [Docker Desktop](https://www.docker.com/products/docker-desktop/) of in een terminal met: + +```shell +docker compose logs --follow +``` + +Kijk naar de logs voor het welkomstbericht: + +``` +2024-12-04 18:42:17 archivesspace | ************************************************************ +2024-12-04 18:42:17 archivesspace | Welcome to ArchivesSpace! +2024-12-04 18:42:17 archivesspace | You can now point your browser to http://localhost:8080 +2024-12-04 18:42:17 archivesspace | ************************************************************ +``` + +Met de standaard proxyconfiguratie is de publieke gebruikersinterface beschikbaar op http://localhost/ en de medewerkersinterface op: http://localhost/staff/ (standaardlogin met: admin / admin) + +U kunt de status van uw draaiende containers bekijken met: + +``` +docker ps +``` + +Welke een lijst geeft als deze: + +``` +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +6cd7114c1796 nginx:1.21 "/docker-entrypoint.…" 26 hours ago Up 29 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp proxy +9ed453c46a9f archivesspace/archivesspace:4.0.0 "/archivesspace/star…" 26 hours ago Up 29 minutes (healthy) 8080-8081/tcp, 8089-8090/tcp, 8092/tcp archivesspace +ec71dd3030b7 databack/mysql-backup:latest "/entrypoint dump" 26 hours ago Up 29 minutes db-backup +8b74aa374ec8 archivesspace/solr:4.0.0 "docker-entrypoint.s…" 26 hours ago Up 29 minutes 0.0.0.0:8983->8983/tcp, :::8983->8983/tcp solr +d2cf634744fe mysql:8 "docker-entrypoint.s…" 26 hours ago Up 29 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql +``` + +Als u ook [Docker Desktop](https://www.docker.com/products/docker-desktop/) hebt geïnstalleerd, kunt u deze gebruiken om de ArchivesSpace-containers te starten, stoppen en beheren nadat ze voor de eerste keer zijn gemaakt. Docker Desktop heeft een ingebouwde terminalvenster dat kan worden gebruikt om Docker-opdrachten uit te voeren. + +### Stoppen + +De volgende opdrachten moeten worden uitgevoerd vanuit de map `archivespace` die het bestand `docker-compose.yml` bevat. U kunt draaiende containers (zonder ze te verwijderen) stoppen met de opdracht: + +```shell +docker compose stop +``` + +Ze kunnen opnieuw worden gestart met: + +```shell +docker compose up --detach +``` + +### Een shell binnen een container starten om de meegeleverde scripts uit te voeren + +U kunt een `bash`-shell openen op de container die de ArchivesSpace-toepassing uitvoert en vervolgens een van de scripts in de map `scripts` uitvoeren met: + +```shell +$ docker exec -it archivesspace bash +archivesspace@9ed453c46a9f:/$ cd archivesspace/scripts/ +archivesspace@9ed453c46a9f:/archivesspace/scripts$ ls +backup.bat backup.sh ead_export.bat ead_export.sh find-base.sh initialize-plugin.bat initialize-plugin.sh password-reset.bat password-reset.sh rb setup-database.bat setup-database.sh +archivesspace@9ed453c46a9f:/archivesspace/scripts$ ./setup-database.sh +NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED +Loading ArchivesSpace configuration file from path: /archivesspace/config/config.rb +Loading ArchivesSpace configuration file from path: /archivesspace/config/config.rb +Loading ArchivesSpace configuration file from path: /archivesspace/config/config.rb +Detected MySQL connector 8+ +Running migrations against jdbc:mysql://db:3306/archivesspace?useUnicode=true&characterEncoding=UTF-8&user=[REDACTED]&****** +All done. +``` + +### Bestanden kopiëren van en naar uw gegevensmap + +De `data`-map van ArchivesSpace is niet zichtbaar in het Docker-configuratiepakket (zoals `locales`, `config` en `locales` wel zichtbaar zijn). Dit komt door problemen die we op Windows hebben gehad bij het blootstellen van de `data`-map in plaats van een Docker-volume te gebruiken. + +Als u bestanden uit de `data`-map of een andere map van de ArchivesSpace-installatie wilt kopiëren of naar die map wilt kopiëren, kunt u `docker cp`-opdrachten gebruiken, bijvoorbeeld: + +```shell +docker cp archivesspace:/archivesspace/data/indexer_state /tmp/indexer_state +docker cp ~/Desktop/test.png archivesspace:/archivesspace/data +``` + +## Automatische database-back-ups + +Het Docker-configuratiepakket bevat een mechanisme dat periodieke back-ups van uw MySQL-database uitvoert; zie [Back-up en herstel](/administration/backup/#backups-when-using-the-docker-configuration-package) voor meer informatie. + +## Proxyconfiguratie + +Het Docker-configuratiepakket bevat een op `nginx` gebaseerde proxy die standaard gebonden is aan poort 80 van de hostmachine (zie variabele `NGINX_PORT` in het bestand `.env`). Zie `proxy-config/default.conf` en de [nginx Docker-pagina](https://hub.docker.com/_/nginx) voor meer configuratieopties. + +## Upgraden + +Als u al het Docker-configuratiepakket gebruikt en upgraden naar een nieuwere ArchivesSpace-versie, [download en pak](#downloading-the-configuration-package) het nieuwste Docker-configuratiepakket uit. + +### Met Solr-configuratie-/schemawijzigingen + +Als de ArchivesSpace-versie waarnaar u upgradet Solr-configuratie- of schemawijzigingen bevat (zie de [release notes](https://github.com/archivesspace/archivesspace/releases)), moet u uw Solr-core opnieuw maken en opnieuw indexeren. Ga naar de map `archivespace` waar u het nieuw gedownloade Docker-configuratiepakket hebt uitgepakt en voer het volgende uit: + +```shell +docker compose down solr app +docker volume rm archivesspace_app-data archivesspace_solr-data +docker compose pull +docker compose up -d --build --force-recreate +``` + +### Zonder Solr-configuratie-/schemawijzigingen + +Als er geen Solr-configuratie- of schemawijzigingen zijn opgenomen, gaat u naar de uitgepakte map `architecture` en voert u het volgende uit: + +```shell +docker compose pull +docker compose up -d --build --force-recreate +``` diff --git a/src/content/docs/nl/administration/getting_started.mdx b/src/content/docs/nl/administration/getting_started.mdx new file mode 100644 index 0000000..af73977 --- /dev/null +++ b/src/content/docs/nl/administration/getting_started.mdx @@ -0,0 +1,149 @@ +--- +title: Aan de slag +description: Gedetailleerde hardware- en softwarevereisten voor het uitvoeren van ArchivesSpace, inclusief instructies voor het instellen en starten van een ArchivesSpace-installatie met het nieuwste distributie-.zip-bestand. +--- + +import LatestReleaseBlurb from '@components/LatestReleaseBlurb.astro' + +## De nieuwste release + +<LatestReleaseBlurb /> + +## Twee installatiemethoden + +Er zijn twee verschillende manieren om ArchivesSpace te installeren: + +- Met Docker +- Met de `.zip`-distributie + +### Met Docker + +Zie de pagina [Uitvoeren met Docker](/administration/docker/) voor instructies over het installeren van ArchivesSpace met Docker. + +Vanaf ArchivesSpace v4.0.0 is de gemakkelijkste en aanbevolen manier om snel aan de slag te gaan het gebruik van Docker. Deze methode vereenvoudigt het installeren, upgraden, starten en stoppen van ArchivesSpace. Het maakt het ook eenvoudig om ArchivesSpace als systeemservice in te stellen die bij elke herstart automatisch start. + +### Met de `.zip`-distributie + +De oudere en meer omvattende manier is het installeren vanaf het nieuwste distributie-.zip-bestand, zoals hieronder wordt beschreven. + +#### Systeemvereisten + +##### Besturingssysteem + +ArchivesSpace wordt getest op Ubuntu Linux, macOS en Windows. + +##### Geheugen + +Minimaal 1024 MB RAM toegewezen aan de toepassing is vereist. We raden minimaal 2 GB aan voor optimale prestaties. + +#### Softwarevereisten + +Bij gebruik van de zip-distributie zijn een Java-runtimeomgeving en een Solr-instantie vereist. Zie [Docker gebruiken](/administration/docker/) om deze afhankelijkheden te vermijden. + +##### Java Runtime Environment + +We raden [OpenJDK](https://openjdk.org/projects/jdk/) aan. De volgende tabel toont de ondersteunde Java-versies voor elke versie van ArchivesSpace: + +| ArchivesSpace-versie | OpenJDK-versie | +| -------------------- | -------------- | +| ≤ v3.5.1 | 8 of 11 | +| v4.0.0 tot v4.1.1 | 11 of 17 | +| ≥ v4.2.0 | 17 of 21 | + +De JRuby-versie die in ArchivesSpace v4.2.0 wordt gebruikt, is nog steeds compatibel met Java 11. We raden sterk aan om Java 17 of 21 te gebruiken, omdat dit de Java-versies zijn waarmee ArchivesSpace v4.2.0 is getest. U kunt Java 11 nog steeds gebruiken met v4.2.0, maar het ArchivesSpace Program Team kan ondersteuning bieden voor omgevingen die Java-versies gebruiken waarmee ArchivesSpace is getest (17 of 21). + +Merk op dat we in de volgende grote release de ondersteuning voor Java 17 waarschijnlijk zullen stoppen en alleen Java 21 en 25 ondersteunen. + +##### Solr + +Tot en met ArchivesSpace v3.1.1 bevat de zip-distributie een ingebedde Solr v4-instantie, die verouderd is en niet meer ondersteund wordt. Gebruik de Docker-afbeeldingen in het [ArchivesSpace Docker Repository](https://hub.docker.com/orgs/archivesspace/repositories) en zie ook [Docker gebruiken](/administration/docker/) om een externe Solr-instantie te beheren. + +ArchivesSpace v3.2.0 en hoger vereist een externe Solr-instantie bij gebruik van de zip-distributie. De onderstaande tabel vat de ondersteunde Solr-versies voor elke ArchivesSpace-versie samen: + +| ArchivesSpace-versie | Externe Solr-versie | +| -------------------- | ------------------------- | +| ≤ v3.1.1 | geen externe Solr vereist | +| v3.2.0 tot v3.5.1 | 8 (8.11) | +| v4.0.0 tot v4.1.1 | 9 (9.4.1) | +| ≥ v4.2.0 | 9 (9.9.0) | + +Elke ArchivesSpace-versie is getest op compatibiliteit met de bijbehorende Solr-versie die in de bovenstaande tabel staat. Het wordt aanbevolen de bijbehorende Solr-versie te gebruiken, omdat deze versie tijdens de ontwikkeling en bij het uitvoeren van de geautomatiseerde tests van ArchivesSpace wordt gebruikt. + +Als u ArchivesSpace wilt gebruiken met een oudere Solr-versie, controleert u de [release notes](https://github.com/archivesspace/archivesspace/releases) op mogelijke compatibiliteitsproblemen. + +**Opmerking: het ArchivesSpace Program Team kan alleen ondersteuning bieden voor Solr-implementaties +die de "officieel" ondersteunde versie gebruiken met de standaardconfiguratie die door +de toepassing wordt geleverd. Alles andere wordt behandeld als "best effort"-ondersteuning, geleid door de community.** + +Zie [Uitvoeren met externe Solr](/provisioning/solr) voor meer informatie over het installeren en upgraden van Solr. + +#### Database + +Hoewel ArchivesSpace een ingebedde database heeft, is MySQL verplicht voor productiegebruik. + +(Hoewel niet officieel ondersteund door ArchivesSpace, gebruiken sommige leden van de community MariaDB, en er is enige communityondersteuning voor versie 10.4.10.) + +Alle ArchivesSpace-versies kunnen op MySQL 5.x of 8.x draaien. + +##### Opmerking over het draaien met de ingebedde database + +**De ingebedde database is alleen voor testdoeleinden. We raden aan MySQL te gebruiken voor alle gegevens die bedoeld zijn voor productie, inclusief gegevens in een testinstantie die u later wilt overzetten naar een productie-instantie.** + +De ingebedde database is beschikbaar bij gebruik van de `.zip`-distributie van ArchivesSpace als een eenvoudige manier om snel een demo-ArchivesSpace-systeem op te zetten zonder MySQL in te stellen. Deze wordt in de komende grote release verouderd. + +Zie de pagina [Uitvoeren met Docker](/administration/docker/) voor instructies over het installeren van ArchivesSpace met Docker, wat de aanbevolen manier is om een ArchivesSpace-systeem met minimale inspanning op te zetten. + +#### Installeren en uitvoeren + +Download de distributie-`.zip` voor uw versie van [ArchivesSpace-release op GitHub](https://github.com/archivesspace/archivesspace/releases). + +Controleer of een ondersteunde Java-versie actief is in uw `PATH`: + +```sh +java -version +``` + +Vergelijk de uitvoer met [Java Runtime Environment](#java-runtime-environment). Als dat nodig is, installeert u een ondersteunde OpenJDK of wijst u uw omgeving daar naartoe (vermijd een niet-ondersteunde nieuwere Java als standaard). + +Pak de `.zip` uit; dit maakt een map met de naam `archivesspace`. Voordat u ArchivesSpace start, voltooit u de provisie: + +- [MySQL](/provisioning/mysql) +- JDBC-driver: [Download MySQL Connector](/provisioning/mysql/#download-mysql-connector) +- Extern [Solr](/provisioning/solr) wanneer uw versie dat vereist (ArchivesSpace v3.2.0 en later bij de zip-distributie; zie [Solr](#solr)) + +**Ga niet verder voordat MySQL en Solr (wanneer vereist) actief zijn.** + +Start ArchivesSpace vanuit die map. Op Linux en macOS: + +```shell +cd /path/to/archivesspace +./archivesspace.sh +``` + +Op Windows: + +```shell +cd \path\to\archivesspace +archivesspace.bat +``` + +Dit voert ArchivesSpace uit in de foreground (het stopt wanneer u de terminal sluit). Standaard worden logs geschreven naar `logs/archivesspace.out`. + +**Opmerking:** Op Windows betekenen fouten zoals `unable to resolve type 'size_t'` of `no such file to load -- bundler` vaak dat het pad naar de map `archivesspace` spaties bevat. Gebruik een pad zonder spaties. + +##### Verifiëren en inloggen + +De eerste start kan ongeveer een minuut duren. Controleer daarna de services in een browser: + +- http://localhost:8089/ — backend +- http://localhost:8080/ — medewerkersinterface +- http://localhost:8081/ — publieke gebruikersinterface +- http://localhost:8082/ — OAI-PMH-server +- http://localhost:8090/ — Solr-beheerconsole + +Log in op de medewerkersinterface met het standaard beheerdersaccount: + +- Gebruikersnaam: `admin` +- Wachtwoord: `admin` + +Maak een repository aan via **Systeem** → **Beheer repositories** (rechtsboven). Via **Systeem** kunt u gebruikers en andere beheertaken beheren. **Verander het standaardwachtwoord van `admin` voordat u deze in productie gebruikt.** diff --git a/src/content/docs/nl/administration/index.md b/src/content/docs/nl/administration/index.md new file mode 100644 index 0000000..4d542c6 --- /dev/null +++ b/src/content/docs/nl/administration/index.md @@ -0,0 +1,13 @@ +--- +title: Basisprincipes van beheer +description: Overzicht van de beheerpagina's van de Tech Docs-website. +--- + +- [Aan de slag](./getting_started) +- [ArchivesSpace uitvoeren als Unix-daemon](./unix_daemon) +- [ArchivesSpace uitvoeren als Windows-service](./windows) +- [Back-up en herstel](./backup) +- [Indexen opnieuw maken](./indexes) +- [Wachtwoorden opnieuw instellen](./passwords) +- [Upgraden](./upgrading) +- [Logrotatie](./logrotate) diff --git a/src/content/docs/nl/administration/indexes.md b/src/content/docs/nl/administration/indexes.md new file mode 100644 index 0000000..3508b87 --- /dev/null +++ b/src/content/docs/nl/administration/indexes.md @@ -0,0 +1,91 @@ +--- +title: Indexen opnieuw opbouwen +description: Stappen voor het uitvoeren van soft-herindexeringen en volledige herindexeringen van Solr, waaronder interne en externe Solr-installaties. +--- + +Er zijn twee strategieën voor het herindexeren van ArchivesSpace: + +- soft-herindexering +- volledige herindexering + +## Soft-herindexering + +Een soft-herindexering werkt de bestaande documenten in Solr bij zonder de +daadwerkelijke indexdocumenten op het bestandssysteem rechtstreeks aan te +raken. Dit kan terwijl het systeem actief is en is geschikt voor de meeste +toepassingen. + +Er zijn twee gangbare manieren om een soft-herindexering uit te voeren: + +1. Statusbestanden van het indexeerproces verwijderen + +ArchivesSpace houdt bij wat is geïndexeerd met behulp van de bestanden in +`data/indexer_state` en `data/indexer_pui_state` (voor de PUI). + +Als deze bestanden ontbreken, gaat het indexeerproces ervan uit dat er niets +is geïndexeerd en wordt alles opnieuw geïndexeerd. Als u ArchivesSpace wilt +dwingen alle records opnieuw te indexeren, verwijdert u de bestanden in +`/path/to/archivesspace/data/indexer_state` en +`/path/to/archivesspace/data/indexer_pui_state`. + +U kunt dit ook selectief doen per recordtype. Als u bijvoorbeeld het nog niet +ontsloten materiaal in collectiebeherende instelling 2 opnieuw wilt indexeren, +verwijdert u het bestand `2_accession.dat`. + +2. `system_mtime`-waarden in de database verhogen + +Als u de `system_mtime`-waarde van een record bijwerkt, komt het in aanmerking +om opnieuw te worden geïndexeerd. + +```sql +#reindex all resources +UPDATE resource SET system_mtime = NOW(); +#reindex resource 1 +UPDATE resource SET system_mtime = NOW() WHERE id = 1; +``` + +## Volledige herindexering + +Een volledige herindexering is een volledige heropbouw van de index op basis +van de database. Dit kan nodig zijn bij problemen met het indexeerproces, bij +een beschadigde index of wanneer een upgrade dit vereist vanwege wijzigingen +in de Solr-configuratie van ArchivesSpace. + +Voer de volgende stappen uit voor een volledige herindexering: + +### ArchivesSpace <= 3.1.0 (ingebouwde Solr) + +- ArchivesSpace afsluiten +- Deze mappen verwijderen: + - `rm -rf /path/to/archivesspace/data/indexer_state/` + - `rm -rf /path/to/archivesspace/data/indexer_pui_state/` + - `rm -rf /path/to/archivesspace/data/solr_index/` +- ArchivesSpace opnieuw starten + +### ArchivesSpace > 3.1.0 (externe Solr) + +Voor externe Solr is er een plug-in die alle herindexeringsstappen kan +uitvoeren: [aspace-reindexer](https://github.com/lyrasis/aspace-reindexer) + +Handmatige stappen: + +- ArchivesSpace afsluiten +- Deze mappen verwijderen: + - `rm -rf /path/to/archivesspace/data/indexer_state/` + - `rm -rf /path/to/archivesspace/data/indexer_pui_state/` +- Een Solr-query uitvoeren om alles te verwijderen: + - `curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://${solrUrl}:${solrPort}/solr/archivesspace/update?commit=true` + - Windows PowerShell: + ``` + Invoke-RestMethod -Uri "http://localhost:8983/solr/archivesspace/update?commit=true" + -Method Post + -ContentType "application/json" + -Body '{"delete":{"query":"*:*"}}' + ``` +- ArchivesSpace opnieuw starten + +--- + +U kunt de video [Tips voor het indexeren van ArchivesSpace](https://www.youtube.com/watch?v=yFJ6yAaPa3A) bekijken om te zien hoe deze stappen worden uitgevoerd. + +--- diff --git a/src/content/docs/nl/administration/logrotate.md b/src/content/docs/nl/administration/logrotate.md new file mode 100644 index 0000000..f306f31 --- /dev/null +++ b/src/content/docs/nl/administration/logrotate.md @@ -0,0 +1,28 @@ +--- +title: Logrotatie +description: Voorbeeld van het instellen van logrotatie, zodat het logbestand van ArchivesSpace niet buitensporig groot wordt. +--- + +Om te voorkomen dat het logbestand van ArchivesSpace buitensporig groot wordt, kunt u logrotatie instellen. De manier waarop u logrotatie instelt, verschilt per instelling. Hieronder staat een voorbeeld van een logrotate-configuratiebestand, met uitleg over de werking ervan. + +`/etc/logrotate.d/` + +``` + /<install location>/archivesspace/logs/archivesspace.out { + daily + rotate 7 + compress + notifempty + missingok + copytruncate + } +``` + +Dit voorbeeldconfiguratiebestand: + +- roteert de logbestanden dagelijks +- bewaart de logbestanden van de afgelopen 7 dagen +- comprimeert de logbestanden zodat ze minder ruimte innemen +- negeert lege logbestanden +- meldt geen fouten als het logbestand ontbreekt +- maakt een kopie van het oorspronkelijke logbestand voor rotatie voordat de inhoud van het oorspronkelijke bestand wordt afgekapt diff --git a/src/content/docs/nl/administration/passwords.md b/src/content/docs/nl/administration/passwords.md new file mode 100644 index 0000000..81db6f3 --- /dev/null +++ b/src/content/docs/nl/administration/passwords.md @@ -0,0 +1,15 @@ +--- +title: Wachtwoorden opnieuw instellen +description: Een script uitvoeren om het wachtwoord van een gebruiker in ArchivesSpace opnieuw in te stellen. +--- + +In de map `scripts` vindt u een script waarmee u het wachtwoord van een +gebruiker opnieuw kunt instellen. U kunt het als volgt uitvoeren: + +``` +scripts/password-reset.sh theusername newpassword # or password-reset.bat under Windows +``` + +Als u MySQL gebruikt, kunt u deze opdracht gebruiken om een wachtwoord in te stellen terwijl het systeem actief is. Als u de +demodatabase gebruikt, moet u ArchivesSpace afsluiten voordat u dit script +uitvoert. diff --git a/src/content/docs/nl/administration/unix_daemon.md b/src/content/docs/nl/administration/unix_daemon.md new file mode 100644 index 0000000..12f5141 --- /dev/null +++ b/src/content/docs/nl/administration/unix_daemon.md @@ -0,0 +1,62 @@ +--- +title: Uitvoeren als Unix-daemon +description: Stappen voor het op de achtergrond uitvoeren van ArchivesSpace als daemon met behulp van het opstartscript, en aanvullende informatie over het configureren van opstart-/init-instellingen. +--- + +Het opstartscript `archivesspace.sh` doet ook dienst als init-script. Als +u het volgende uitvoert: + +``` +archivesspace.sh start +``` + +wordt ArchivesSpace op de achtergrond als daemon uitgevoerd (standaard, zoals +voorheen, met logboekregistratie naar `logs/archivesspace.out`). U kunt het +afsluiten met: + +``` +archivesspace.sh stop +``` + +U kunt het zelfs als systeembreed init-script installeren door een +symbolische koppeling te maken: + +``` +cd /etc/init.d +ln -s /path/to/your/archivesspace/archivesspace.sh archivesspace +``` + +Opmerking: standaard overschrijft ArchivesSpace het logbestand wanneer het +opnieuw wordt gestart. U kunt dit aanpassen door `archivesspace.sh` te wijzigen +en `$startup_cmd` zo aan te passen dat deze twee groter-dan-tekens bevat: + +``` +$startup_cmd &>> \"$ARCHIVESSPACE_LOGS\" & +``` + +Gebruik vervolgens het geschikte hulpmiddel voor uw distributie om de +symbolische koppelingen voor runlevels in te stellen (zoals `chkconfig` voor +RedHat of `update-rc.d` voor op Debian gebaseerde distributies). + +U kunt archivesspace.sh eventueel aanpassen om het account in te stellen +waaronder het systeem wordt uitgevoerd, JVM-opties enzovoort. + +Voor systemen die systemd gebruiken, kunt u overwegen een Systemd-unitbestand +voor ArchivesSpace te gebruiken + +Iets vergelijkbaars zou moeten werken: + +``` +[Unit] +Description=ArchivesSpace Application +After=syslog.target network.target +[Service] +Type=forking +ExecStart=/path/to/your/archivesspace/archivesspace.sh start +ExecStop=/path/to/your/archivesspace/archivesspace.sh stop +PIDFile=/path/to/your/archivesspace/archivesspace.pid +User=archivesspace +Group=archivesspace +[Install] +WantedBy=multi-user.target +``` diff --git a/src/content/docs/nl/administration/upgrading.md b/src/content/docs/nl/administration/upgrading.md new file mode 100644 index 0000000..fe973a1 --- /dev/null +++ b/src/content/docs/nl/administration/upgrading.md @@ -0,0 +1,152 @@ +--- +title: Upgraden met de zip-distributie +description: Instructies voor het bijwerken van ArchivesSpace. +--- + +Als u ArchivesSpace hebt geïnstalleerd met het Docker-configuratiepakket, raadpleegt u [upgraden met Docker](/administration/docker/#upgrading). Als u ArchivesSpace hebt geïnstalleerd met de zip-distributie, lees dan verder. (Als u het verschil niet kent, raadpleeg dan de [pagina Aan de slag](/administration/getting_started/#two-ways-to-get-up-and-running).) + +Met deze algemene instructies kunt u de meeste versies van ArchivesSpace upgraden naar een latere versie. Gewoonlijk hoeft u niet via andere versies van ArchivesSpace te upgraden om een latere versie te bereiken, tenzij er voor een specifieke versie bijzondere aandachtspunten zijn. Bijzondere aandachtspunten voor deze versies worden hier en in de releaseopmerkingen vermeld. + +- **[Bijzondere aandachtspunten bij het upgraden naar v1.1.0](/administration/upgrading_1_1_0)** +- **[Bijzondere aandachtspunten bij het upgraden naar v1.1.1](/administration/upgrading_1_1_1)** +- **[Bijzondere aandachtspunten bij het upgraden van v1.4.2 naar 1.5.x (deze aandachtspunten gelden ook bij een upgrade van 1.4.2 naar elke versie tot en met 2.0.1)](/administration/upgrading_1_5_0)** +- **[Bijzondere aandachtspunten bij het upgraden naar 2.1.0](/administration/upgrading_2_1_0)** +- **[Overstappen op externe Solr bij het upgraden naar 3.2.0 of hoger](https://docs.archivesspace.org/provisioning/solr/).** + +## Maak een back-up van uw ArchivesSpace-instantie + +Zorg ervoor dat u een werkende back-up van uw ArchivesSpace-installatie hebt voordat u een upgrade uitvoert. Volg hiervoor de stappen in het gedeelte [Back-up en herstel](/administration/backup). + +## Pak de nieuwe versie uit + +Het is verstandig om een nieuwe kopie uit te pakken van de versie van ArchivesSpace waarnaar u wilt upgraden. Zo weet u zeker dat u de nieuwste versies van alle bestanden gebruikt. Vervang in de onderstaande voorbeelden de kleine letter x door het versienummer waarnaar u upgradet. Bijvoorbeeld 1.5.2 of 1.5.3. + +Bijvoorbeeld op Mac OS X of Linux: + +```shell +$ mkdir archivesspace-1.5.x +$ cd archivesspace-1.5.x +$ curl -LJO https://github.com/archivesspace/archivesspace/releases/download/v1.5.x/archivesspace-v1.5.x.zip +$ unzip -x archivesspace-v1.5.x.zip +``` + +( De stap met curl is optioneel en downloadt alleen de distributie van github. U kunt het zip-bestand ook +gewoon in uw browser downloaden en naar de map kopiëren ) + +Op Windows kunt u hetzelfde doen door ArchivesSpace uit te pakken naar een nieuwe map die u in Windows Verkenner aanmaakt. + +## Sluit uw ArchivesSpace-instantie af + +Om een consistente kopie te garanderen, moet u nu uw actieve ArchivesSpace-instantie afsluiten. + +## Kopieer uw configuratie- en gegevensbestanden + +U moet de volgende bestanden en mappen uit uw oorspronkelijke ArchivesSpace-installatie overzetten: + +- de map `data` (zie de onderstaande **Opmerking over indexen**) +- de map `config` (zie de onderstaande **Opmerking over de configuratie**) +- uw bestand `lib/mysql-connector*.jar` (als u MySQL gebruikt) +- eventuele plug-ins en lokale aanpassingen die u in uw map `plugins` hebt geïnstalleerd + +Bijvoorbeeld op Mac OS X of Linux: + +```shell +$ cd archivesspace-1.5.x/archivesspace +$ cp -a /path/to/archivesspace-1.4.2/archivesspace/data/* data/ +$ cp -a /path/to/archivesspace-1.4.2/archivesspace/config/* config/ +$ cp -a /path/to/archivesspace-1.4.2/archivesspace/lib/mysql-connector* lib/ +$ cp -a /path/to/archivesspace-1.4.2/archivesspace/plugins/local plugins/ +$ cp -a /path/to/archivesspace-1.4.2/archivesspace/plugins/wonderful_plugin plugins/ +``` + +Of op Windows: + +``` +$ cd archivesspace-1.5.x\archivesspace +$ xcopy \path\to\archivesspace-1.4.2\archivesspace\data\* data /i /k /h /s /e /o /x /y +$ xcopy \path\to\archivesspace-1.4.2\archivesspace\config\* config /i /k /h /s /e /o /x /y +$ xcopy \path\to\archivesspace-1.4.2\archivesspace\lib\mysql-connector* lib /i /k /h /s /e /o /x /y +$ xcopy \path\to\archivesspace-1.4.2\archivesspace\plugins\local plugins\local /i /k /h /s /e /o /x /y +$ xcopy \path\to\archivesspace-1.4.2\archivesspace\plugins\wonderful_plugin plugins\wonderful_plugin /i /k /h /s /e /o /x /y +``` + +Het is mogelijk dat u het logbestand (`logs/archivesspace.out` +is de standaardlocatie) van uw vorige installatie wilt bewaren, voor het geval u het later nodig hebt. + +### Opmerking over de configuratie + +Soms introduceert een nieuwe versie van ArchivesSpace configuratie-instellingen die niet in eerdere versies aanwezig waren. +Voordat u de distributieversie van `config/config.rb` vervangt door uw +oorspronkelijke versie, is het verstandig de distributieversie te bekijken om na te gaan of er nieuwe configuratie-instellingen zijn die voor u van belang zijn. + +In upgrade-opmerkingen wordt doorgaans gewezen op configuratie-instellingen die u expliciet moet instellen, maar u weet nooit wanneer u een nieuwe, interessante functie ontdekt. In de documentatie kan ook staan dat u configuratieopties zonder commentaarmarkering moet gebruiken die niet in uw bestand staan als u uw oudere versie behoudt. + +### Opmerking over indexen + +Soms vereist een nieuwe versie van ArchivesSpace een VOLLEDIGE herindexering. In dat geval moet u niets uit uw map data naar uw nieuwe versie kopiëren. De map data bevat de door Solr aangemaakte indexen. +Raadpleeg de releaseopmerkingen van de nieuwe versie voor informatie over herindexering en het gedeelte [Indexen opnieuw maken](/administration/indexes/) voor instructies over het opnieuw maken van indexen. + +## Zet uw locale-gegevens over + +Als u wijzigingen hebt aangebracht in uw locale-bestand ( en.yml ) met aangepaste +labels, titels, knopinfo enzovoort, moet u deze overzetten naar uw nieuwe locale-bestand. + +Een goede manier om dit te doen is een diff-tool te gebruiken, zoals Notepad++, TextMate of gewoon de opdracht diff van Linux: + +```shell +$ diff /path/to/archivesspace-1.4.2/locales/en.yml /path/to/archivesspace-1.5.x/archivesspace/locales/en.yml +$ diff /path/to/archivesspace-1.4.2/locales/enums/en.yml /path/to/archivesspace-v1.5.x/archivesspace/locales/enums/en.yml +``` + +Hiermee ziet u de verschillen tussen uw huidige locale-bestanden en de nieuwe toevoegingen in de locale-bestanden van de nieuwe versie. Kopieer eenvoudig de waarden die u wilt behouden uit uw oude ArchivesSpace-locale-bestanden naar uw nieuwe ArchivesSpace locales/provisioning/solr/#copy-the-config-files files. + +## Voer de databasemigraties uit + +Nu alles is gekopieerd, voert u als laatste stap de databasemigraties uit. Hiermee worden de schemawijzigingen en gegevensmigraties toegepast die voor de upgrade nodig zijn. Gebruik hiervoor het script `setup-database` voor uw platform. Bijvoorbeeld op Mac OS X +of Linux: + +```shell +$ cd archivesspace-1.5.x/archivesspace +$ scripts/setup-database.sh +``` + +Of op Windows: + +```shell +$ cd archivesspace-1.5.x\archivesspace +$ scripts\setup-database.bat +``` + +## Updates van de Solr-configuratie + +Als de versie waarnaar u upgradet updates van het Solr-schema of andere configuratiebestanden bevat (zie de releaseopmerkingen) +en u externe Solr gebruikt (verplicht vanaf versie 3.2.0), moet u het Solr-schema en de configuratiebestanden dienovereenkomstig bijwerken door de [Solr-configuratiebestanden te kopiëren](/provisioning/solr/#copy-the-config-files) uit het releasepakket naar uw externe Solr-configuratie. +Zie ook de [volledige instructies voor het gebruik van externe Solr met ArchivesSpace](/provisioning/solr). + +## Als u Tomcat gebruikt + +De stappen voor implementatie op Tomcat zijn in wezen hetzelfde als in +[archivesspace_tomcat](https://github.com/archivesspace-labs/archivesspace_tomcat) + +Maar voordat u uw setup-tomcat-script uitvoert, moet u alle bibliotheken van de vorige ASpace-versie uit uw Tomcat-classpath verwijderen. + + 1. Stop Tomcat + 2. Pak uw nieuwe versie van ArchivesSpace uit + 3. Configureer uw MySQL-database in de config.rb ( net als in de + installatie-instructies ) + 4. Controleer of al uw andere lokale configuratie-instellingen in uw + config.rb-bestand staan ( controleer de instellingen in uw Tomcat conf/config.rb-bestand. ) + 5. Controleer of uw MySQL-connector-JAR-bestand in de map lib staat + 6. Voer uw setup-database-script uit om uw database te migreren. + 7. Verwijder alle ASpace-gerelateerde JAR-bibliotheken uit de lib-map van Tomcat. Hieronder vallen de map "gems" en ook "common.jar" en enkele + [andere](https://github.com/archivesspace/archivesspace/tree/master/common/lib). + Zo weet u zeker dat u de juiste versie van de afhankelijke + bibliotheken voor uw nieuwe ASpace-versie gebruikt. + Zorg er wel voor dat u geen Apache Tomcat-bibliotheken verwijdert. + 8. Voer uw setup-tomcat-script uit ( net als in de installatie-instructies ). + Hiermee worden alle bestanden naar Tomcat gekopieerd. + 9. Start Tomcat + +## Dat is alles! + +U kunt nu uw nieuwe versie van ArchivesSpace zoals gebruikelijk starten. diff --git a/src/content/docs/nl/administration/upgrading_1_1_0.md b/src/content/docs/nl/administration/upgrading_1_1_0.md new file mode 100644 index 0000000..368c67a --- /dev/null +++ b/src/content/docs/nl/administration/upgrading_1_1_0.md @@ -0,0 +1,62 @@ +--- +title: Upgraden naar 1.1.0 +description: Bijzondere aandachtspunten bij het upgraden vanaf ArchivesSpace 1.0.9 of ouder naar 1.1.0, inclusief de mogelijkheid om een externe Solr-instantie te gebruiken. +--- + +Aanvullende aandachtspunten voor deze release. Raadpleeg de [upgradedocumentatie](/administration/upgrading) voor de standaardinstructies die in alle gevallen van toepassing zijn. + +## Externe Solr + +--- + +In ArchivesSpace 1.0.9 was de standaardpoortconfiguratie: + +```ruby +AppConfig[:backend_url] = "http://localhost:8089" +AppConfig[:frontend_url] = "http://localhost:8080" +AppConfig[:solr_url] = "http://localhost:8090" +AppConfig[:public_url] = "http://localhost:8081" +``` + +Met de introductie van de functionaliteit voor een [optionele externe Solr-instantie](/provisioning/solr) is dit bijgewerkt naar: + +```ruby +AppConfig[:backend_url] = "http://localhost:8089" +AppConfig[:frontend_url] = "http://localhost:8080" +AppConfig[:solr_url] = "http://localhost:8090" +AppConfig[:indexer_url] = "http://localhost:8091" # NEW TO 1.1.0 +AppConfig[:public_url] = "http://localhost:8081" +``` + +In de meeste gevallen sluit de standaardwaarde voor `indexer_url` naadloos aan, zodat u niets hoeft te doen. Als u de oorspronkelijke waarden in uw `config.rb`-bestand hebt gewijzigd, moet u deze mogelijk bijwerken. Voorbeelden: + +**U gebruikt een andere poortreeks** + +```ruby +AppConfig[:indexer_url] = "http://localhost:9091" +``` + +**U voert meerdere ArchivesSpace-instanties uit op één host** + +In deze implementatieopzet hebt u de poortnummers voor sommige (of alle) instanties in elk `config.rb`-bestand gewijzigd. Stel daarom voor elke instantie de `indexer_url` in zoals hierboven beschreven. + +**U gebruikt hostnamen** + +```ruby +AppConfig[:indexer_url] = "http://yourhostname:8091" +``` + +## Clusterconfiguratie + +--- + +In een geclusterde configuratie moet u mogelijk de bestanden `instance_[server hostname].rb` bewerken: + +```ruby +{ + ... + :indexer_url => "http://[localhost|yourhostname]:8091", +} +``` + +--- diff --git a/src/content/docs/nl/administration/upgrading_1_1_1.md b/src/content/docs/nl/administration/upgrading_1_1_1.md new file mode 100644 index 0000000..c657080 --- /dev/null +++ b/src/content/docs/nl/administration/upgrading_1_1_1.md @@ -0,0 +1,37 @@ +--- +title: Upgraden naar 1.1.1 +description: Instructies voor het opnieuw opbouwen van volgordegegevens voor archiefonderdelen en componenten van digitale objecten binnen de collectiestructuur, en informatie over een plug-in waarmee PDF's beschikbaar worden gemaakt in de publieke gebruikersinterface. +--- + +Aanvullende aandachtspunten voor deze release. Raadpleeg de [upgradedocumentatie](/administration/upgrading) voor de standaardinstructies die in alle gevallen van toepassing zijn. + +## Volgordegegevens van structuren met archiefonderdelen en componenten van digitale objecten opnieuw opbouwen + +--- + +In sommige gevallen raken archiefonderdelen en componenten van digitale objecten gegevens kwijt die worden gebruikt om hun hiërarchie te ordenen. Dit kan problemen veroorzaken bij het aanmaken, bewerken of verplaatsen van items in de structuur, omdat databasebeperkingen de uniciteit van bepaalde metadata-elementen waarborgen. + +Om de gegevensintegriteit te waarborgen, is er nu een methode om de volgordegegevens van de structuren opnieuw op te bouwen. Deze methode wijzigt of herordent de elementen niet, maar bouwt alleen alle technische metadata opnieuw op die wordt gebruikt om de volgorde vast te leggen. + +Om het proces voor het opnieuw opbouwen van de volgordegegevens uit te voeren, bewerkt u het bestand config/config.rb en voegt u deze regel toe: + +```ruby +AppConfig[:resequence_on_startup] = true +``` + +Start ArchivesSpace vervolgens opnieuw. Hiermee wordt een proces gestart dat de volgordegegevens opnieuw opbouwt nadat de applicatie is gestart. Het is raadzaam dit proces volledig te laten uitvoeren voordat u records bewerkt. De duur hangt af van de grootte van uw database: bij databases met weinig archiefonderdelen en digitale objecten kan dit enkele seconden duren, terwijl dit bij databases met honderdduizenden records uren kan duren. Controleer het logbestand om te zien hoe het proces verloopt. Wanneer het is voltooid, hoort de applicatie weer normaal te functioneren; doorgaans worden dan alleen updates van het indexeerproces in het logbestand geregistreerd. + +Nadat u ArchivesSpace hebt gestart, moet u de instelling :resequence_on_startup in het bestand config.rb op "false" zetten, omdat u dit proces niet bij elke herstart hoeft uit te voeren. + +## PDF's exporteren in de publieke gebruikersinterface + +--- + +Er is vaak verzocht om in de publieke applicatie een PDF-versie van de EAD te kunnen exporteren. Dit leverde enige problemen op, omdat het exporteren van EAD de database aanzienlijk belast; het extra proces voor het maken van PDF's vergroot die belasting verder. We herzien momenteel een deel van de ArchivesSpace-backend om het maken van PDF's gebruiksvriendelijker te maken door een wachtrijsysteem voor exports in te voeren. + +In de tussentijd heeft Mark Cooper van Lyrasis een [ plug-in Public Metadata Formats ](https://github.com/archivesspace-deprecated/aspace-public-formats) gemaakt, waarmee bepaalde metadataformaten en PDF's beschikbaar worden gemaakt in de publieke gebruikersinterface. Deze plug-in is opgenomen in deze release, maar u moet deze configureren om aan te geven welke formaten beschikbaar moeten zijn. Raadpleeg de documentatie van de plug-in voor informatie over de configuratie. + +LET OP: +Het exporteren van grote EAD-collecties met deze plug-in veroorzaakt waarschijnlijk problemen. Langlopende verzoeken lopen een time-out op, omdat de server geen resources wil verspillen aan langlopende processen. Bovendien kunnen veel verzoeken om PDF's de server zwaarder belasten. Houd rekening met deze problemen en beperkingen van de plug-in voordat u deze inschakelt. + +--- diff --git a/src/content/docs/nl/administration/upgrading_1_5_0.md b/src/content/docs/nl/administration/upgrading_1_5_0.md new file mode 100644 index 0000000..55e841d --- /dev/null +++ b/src/content/docs/nl/administration/upgrading_1_5_0.md @@ -0,0 +1,147 @@ +--- +title: Upgraden naar 1.5.0 +description: Instructies voor de upgrade van ArchivesSpace 1.4.2 of lager naar 1.5.0, inclusief informatie over de nieuwste functie voor containerbeheer. +--- + +Aanvullende aandachtspunten voor de upgrade die specifiek zijn voor deze release en ook van toepassing zijn wanneer u een upgrade uitvoert van 1.4.2 of lager naar een versie tot en met 2.0.1. Raadpleeg de [upgradedocumentatie](/administration/upgrading) voor de standaardinstructies die in alle gevallen gelden. + +## Algemeen overzicht + +Voor de upgrade naar het nieuwe gegevensmodel in 1.5.0 is een aanzienlijke gegevensconversie nodig. Het is belangrijk dat u dit document doorneemt om inzicht te krijgen in de gevolgen en mogelijke neveneffecten. + +De stappen in het kort: + +1. Lees dit document en zorg dat u begrijpt welke gevolgen de upgrade voor uw gegevens heeft. Let daarbij vooral op het gedeelte [Voorbereiding](#preparation). +2. [Maak een back-up van uw database](/administration/backup). +3. Nee, echt: [maak een back-up van uw database](/administration/backup). +4. Het advies is om [een nieuwe Solr-index te maken](/administration/indexes). Verwijder hiervoor de map data/solr_index/index en alle bestanden in de map data/indexer_state. De ingebouwde versie van Solr is bijgewerkt; daardoor zou de index veel kleiner moeten worden. +5. Volg de standaard [upgrade-instructies](/administration/upgrading). Let op: het script setup-database.sh|bat wijzigt het databaseschema, maar verplaatst de gegevens niet. Als u de plug-in voor containerbeheer gebruikt, moet u deze uit de lijst met plug-ins in uw configuratiebestand verwijderen voordat u ArchivesSpace start. +6. Start ArchivesSpace. Wanneer 1.5.0 voor het eerst wordt gestart, begint een conversieproces dat de gegevens naar de nieuwe tabelstructuur verplaatst. **Tijdens dit proces is de applicatie niet beschikbaar.** De duur hangt af van de omvang van uw gegevens en de serverbronnen: van enkele minuten voor zeer kleine databases tot enkele uren voor zeer grote databases. +7. Zodra de conversie is voltooid, start de webapplicatie en bouwt het indexeerproces uw index opnieuw op. Afhankelijk van uw serveromgeving en de beschikbare bronnen kan de werking trager zijn terwijl het indexeerproces actief is. +8. Controleer de [uitvoer van het conversieproces](#conversion) aan de hand van de onderstaande instructies. Hoe lang het duurt voordat het rapport wordt geladen, hangt af van het aantal vermeldingen erin. + +## Voorbereiding op en conversie naar de nieuwe functionaliteit voor containerbeheer + +Met versie 1.5.0 introduceert ArchivesSpace een nieuw gegevensmodel waarmee u de containers waarin uw archiefmateriaal wordt bewaard uitgebreider en efficiënter kunt beheren. Om van deze verbeterde functionaliteit gebruik te maken: + +- Collectiebeherende instellingen die ArchivesSpace al in productie gebruiken, moeten hun ArchivesSpace-applicatie upgraden naar versie 1.5.0. (Deze upgrade/conversie is ook nodig om gebruik te maken van andere nieuwe functies en bugfixes in ArchivesSpace 1.5.0 en latere versies.) +- Collectiebeherende instellingen die ArchivesSpace nog niet in productie gebruiken, maar wel gegevens uit Archivists’ Toolkit of Archon moeten migreren, moeten hun gegevens eerst migreren naar versie 1.4.2 van ArchivesSpace of een eerdere versie en die versie vervolgens upgraden naar versie 1.5.0. (Dit kan wanneer uw instelling klaar is om naar ArchivesSpace te migreren.) +- Collectiebeherende instellingen die ArchivesSpace nog niet in productie gebruiken en geen gegevens uit Archivists’ Toolkit of Archon hoeven te migreren, kunnen Archivists 1.5.0 gaan gebruiken zonder een upgrade uit te voeren. (In dat geval hoeft u niet verder te lezen.) + +De conversie van het containermodel in versie 1.4.2 en eerdere versies van ArchivesSpace naar het model in versie 1.5.0 is complex en ondersteunt mogelijk niet alle manieren waarop verschillende instellingen containergegevens hebben vastgelegd. Daarom moet u bij een upgrade vanaf een versie vóór 1.5.0 de upgrade plannen, de resultaten controleren en gegevens mogelijk vóór of na de definitieve conversie corrigeren. Omdat containergegevens op veel verschillende manieren kunnen worden vastgelegd, is het onmogelijk om vooraf te weten welke gevolgen dit voor de gegevens van instellingen heeft. Daarom moeten **alle instellingen die hun ArchivesSpace upgraden naar versie 1.5.0 dit doen met een back-up van hun productieomgeving en in een testomgeving.** Een conversie kan alleen ongedaan worden gemaakt door terug te gaan naar de brondatabase. + +## Veelgestelde vragen + +_Hoe worden mijn gegevens naar het nieuwe model geconverteerd?_ + +Wanneer u uw installatie upgradet naar 1.5.0, vindt de conversie plaats als onderdeel van het upgradeproces. + +_Kan ik het huidige containermodel blijven gebruiken en de gegevens niet naar het nieuwe model converteren?_ + +Vanwege de aanzienlijke verbeteringen (zie de [lijst met nieuwe functies](#new-features-in-150) hieronder) is het nieuwe model vereist voor iedereen die ArchivesSpace 1.5.0 of hoger gebruikt. De enige manier om het huidige model te blijven gebruiken, is om nooit verder te upgraden dan 1.4.2. + +_Wat als ik de plug-in voor containerbeheer al gebruik die Yale University beschikbaar heeft gesteld aan de gemeenschap?_ + +Ook de conversie van gegevens die met de Yale-plug-in voor containerbeheer of een lokale aanpassing daarvan zijn aangemaakt, maakt deel uit van de upgrade naar 1.5.0. Stappen die niet nodig zijn, worden overgeslagen. Na afloop is het nieuwe containermodel in ArchivesSpace geïntegreerd en hoeft het niet als plug-in te worden geladen of onderhouden. + +Wie de plug-in voor containerbeheer gebruikt, moet deze vóór het starten van de conversie uit de lijst in het configuratiebestand verwijderen. Anders treedt er een fout op met de validatienaam. + +_Ik ben nog niet overgestapt van Archivists’ Toolkit of Archon en wil de bijbehorende migratietool gebruiken. Kan ik rechtstreeks naar 1.5.0 migreren?_ + +Nee. U moet eerst migreren naar versie 1.4.2 of een eerdere versie en vervolgens uw installatie upgraden naar 1.5.0 volgens de instructies in dit document. + +_Welke wijzigingen worden aangebracht in het vorige containermodel?_ + +De belangrijkste wijziging is het nieuwe concept van topcontainers. Een topcontainer is de container van het hoogste niveau waarin een bepaalde instantie is opgeslagen. Topcontainers zijn in sommige opzichten vergelijkbaar met het huidige Container 1, maar zijn losgekoppeld van het volledige containerrecord (de onderliggende en grootoudercontainerrecords). Daardoor kunt u de containers van het hoogste niveau in uw collectie efficiënter registreren en bijwerken. + +_Hoe bepaalt ArchivesSpace wat een topcontainer is?_ + +Tijdens de conversie zoekt ArchivesSpace alle Container 1-records in uw huidige ArchivesSpace-database op. Vervolgens worden deze als volgt beoordeeld: + +- Als containers barcodes hebben, wordt voor elke unieke barcode van Container 1 één topcontainer aangemaakt. +- Als containers geen barcodes hebben, wordt binnen een collectie of nog niet ontsloten materiaal één topcontainer aangemaakt voor elke unieke combinatie van de indicator van Container 1 en het containertype van Container 1. +- Nadat een topcontainer is aangemaakt, worden extra instantierecords voor dezelfde container binnen een nog niet ontsloten materiaal of collectie aan dat topcontainerrecord gekoppeld. + +## Voorbereiding + +_Wat kan ik doen om mijn ArchivesSpace-gegevens voor te bereiden op een soepelere conversie naar topcontainers?_ + +- Als uw Container 1-records unieke barcodes hebben, hoeft u niets te doen behalve controleren of uw gegevens volledig en correct zijn. Voer een voorlopige conversie uit zoals beschreven in het gedeelte Conversie en los eventuele fouten op. +- Als uw Container 1-records geen barcodes hebben, maar binnen elk nog niet ontsloten materiaal of elke collectie een unieke reeks containeridentificaties hebben (bijvoorbeeld Doos 1, Doos 2, Doos 3), of als identificaties binnen een nog niet ontsloten materiaal of een collectie alleen opnieuw worden gebruikt voor verschillende containertypen (bijvoorbeeld Doos 1 tot en met 10 en Formaatdoos 1 tot en met 3), hoeft u niets te doen behalve controleren of uw gegevens volledig en correct zijn. Voer een voorlopige conversie uit zoals beschreven in het gedeelte Conversie en los eventuele fouten op. +- Als uw Container 1-records geen barcodes hebben en u parallelle nummerreeksen gebruikt, waarbij dezelfde indicatoren en typen binnen sommige of alle nog niet ontsloten materialen of collecties naar verschillende containers verwijzen (bijvoorbeeld een Doos 1 in serie 1 en een andere Doos 1 in serie 5), moet u deze containers op een manier uniek identificeren. U kunt hiervoor de [barcoder-plug-in](https://github.com/archivesspace-plugins/barcoder) uitvoeren voor elke collectie waarop dit van toepassing is. De barcoder-plug-in maakt barcodes aan waarin de ID van het bovenliggende archiefonderdeel op het hoogste niveau wordt gecombineerd met het type en de indicator van Container 1. (De barcoder-plug-in is ontworpen om op één collectie tegelijk te worden uitgevoerd, niet op alle collecties, omdat niet alle collecties in een instelling aan deze voorwaarde hoeven te voldoen.) Nadat u de containers met parallelle nummerreeksen van elkaar hebt onderscheiden, voert u een voorlopige conversie uit zoals beschreven in het gedeelte Conversie en lost u eventuele fouten op. + +U hoeft geen wijzigingen aan te brengen in de velden Container 2 of Container 3. De gegevens in deze velden worden geconverteerd naar de nieuwe velden Subcontainer en Sub-subcontainer, die rechtstreeks aan deze velden zijn gekoppeld. + +Als u de huidige velden voor containeromvang gebruikt, zijn deze niet meer beschikbaar in 1.5.0. Gegevens in deze velden worden tijdens de conversie gemigreerd naar een nieuw subrecord voor omvang. Na de conversie kunt u beoordelen of deze gegevens in een omvangrecord moeten blijven staan of beter in een containerprofiel of andere velden thuishoren, en ze vervolgens verplaatsen. + +_Ik heb nog EAD's die ik in ArchivesSpace moet importeren. Hoe kan ik ze voorbereiden op dit nieuwe model?_ + +Als een onderdeel een doos en een map bevat (of als containers op een andere manier hiërarchisch zijn gerelateerd), moet u identificaties aan het containerelement toevoegen, zodat de EAD-importeur weet welke container de topcontainer is. Als u eerder Archivists' Toolkit hebt gebruikt om EAD aan te maken, bevatten uw containers waarschijnlijk al containeridentificaties. Als uw containerelementen nog geen identificaties hebben, heeft Yale University een [XSLT-transformatiebestand](https://github.com/YaleArchivesSpace/xslt-files/blob/master/EAD_add_IDs_to_containers.xsl) beschikbaar gesteld om deze toe te voegen. Voer dit bestand uit voordat u het EAD-bestand in ArchivesSpace importeert. + +## Conversie + +Bij een upgrade van versie 1.4.2 (of een eerdere versie) naar 1.5.0 vindt de containerconversie plaats als onderdeel van het upgradeproces. U kunt de voortgang ervan in het logboek volgen. Instructies voor het upgraden vanaf een eerdere versie van ArchivesSpace staan in de [upgradedocumentatie](/administration/upgrading). + +Omdat dit een grote wijziging in het gegevensmodel van dit deel van de applicatie is, wordt sterk aangeraden om ten minste één testconversie uit te voeren. Volg deze stappen om het upgrade-/conversieproces uit te voeren: + +- Maak een back-up van uw ArchivesSpace-instantie voor gebruik bij het testen. **VOER DIT NIET UIT OP EEN PRODUCTIE-INSTANTIE. DE CONVERSIE WIJZIGT UW GEGEVENS EN DE WIJZIGINGEN KUNNEN ALLEEN ONGEDAAN WORDEN GEMAAKT DOOR TERUG TE GAAN NAAR EEN BACK-UP VAN UW GEGEVENS VAN VÓÓR DE CONVERSIE.** +- Volg de upgrade-instructies om een nieuwe kopie van versie 1.5.0 uit te pakken voor het testen, uw configuratie- en gegevensbestanden te kopiëren en uw locales over te zetten. +- **Het advies is om uw Solr-indexbestanden te verwijderen en met een lege index te beginnen.** De versie van Solr die bij de applicatie wordt geleverd, wordt bijgewerkt en voor de upgrade moeten alle ArchivesSpace-gegevens opnieuw worden geïndexeerd. Verwijder hiervoor de map data/solr_index/index en de bestanden in data/indexer_state. +- Volg de upgrade-instructies om de databasemigraties uit te voeren. Tijdens deze stap worden uw containergegevens naar het nieuwe gegevensmodel geconverteerd. U kunt de voortgang in het logboek volgen. Windows-gebruikers kunnen het bestand archivesspace.out openen met een programma zoals Notepad ++. Mac-gebruikers kunnen tail –f logs/archivesspace.out uitvoeren om het logboek live te volgen. +- Na afloop van de testconversie vermeldt het logboek: "Completed: existing containers have been migrated to the new container model." + +![Afbeelding van het conversielogboek](../../../../images/ConversionLog.png) + +- Open ArchivesSpace in uw browser en meld u aan. + Haal het foutenrapport van de containerconversie op in het gedeelte Achtergrondtaken: +- Selecteer Achtergrondtaken in het menu Instellingen. + +![Afbeelding van Achtergrondtaken](../../../../images/BackgroundJobs.png) + +- Het eerste item onder Gearchiveerde taken na de upgrade moet container_conversion_job zijn. Klik op Weergeven. + +![Afbeelding van de lijst met achtergrondtaken](../../../../images/BackgroundJobsList.png) + +- Klik onder Bestanden op Bestand om een CSV-bestand met de fouten en een korte toelichting te downloaden. + +![Afbeelding van bestanden](../../../../images/Files.png) + +![Afbeelding van het foutenrapport](../../../../images/ErrorReport.png) + +- Ga terug naar uw brongegevens en corrigeer eventuele fouten voordat u opnieuw een testconversie uitvoert. +- Wanneer het foutenrapport geen fouten meer bevat, of wanneer u tevreden bent met de resterende fouten, is uw productie-instantie klaar voor de upgrade. +- Nadat de definitieve upgrade/conversie is voltooid, kunt u ArchivesSpace versie 1.5.0 in productie nemen. + +_Welke veelvoorkomende fouten of afwijkingen worden tijdens de conversie gemeld?_ + +- Een container met een barcode heeft in verschillende records verschillende indicatoren of typen. +- Een container met een bepaald type en een bepaalde indicator heeft soms wel en soms geen barcode. +- Bij een container ontbreekt een type of indicator. +- Er zijn containerniveaus overgeslagen (bijvoorbeeld: er is een Container 1 en een Container 3, maar geen Container 2). +- Een container heeft meerdere locaties. + +Het conversieproces kan sommige van deze fouten oplossen door waarden toe te voegen of te verwijderen, al naargelang wat passend lijkt. Voor de meeste controle over het proces kunt u deze problemen waarschijnlijk het beste zelf in uw ArchivesSpace-database oplossen voordat u naar het nieuwe containermodel converteert. + +_Zijn er bekende conversieproblemen?_ + +Door een wijziging in de EAD-importeur van ArchivesSpace in 2015 werden sommige EAD-bestanden met hiërarchische containers die niet met een @parent-attribuut waren aangeduid, omgezet in meerdere instantierecords. Dit is inmiddels in de applicatie gecorrigeerd, maar we werken aan een plug-in (nu beschikbaar als [Instance Joiner Plugin](https://github.com/archivesspace-plugins/instance_joiner) waarmee u deze weer kunt omzetten naar afzonderlijke instanties, zodat subcontainers niet per ongeluk als topcontainers worden behandeld. + +## Nieuwe functies in 1.5.0 + +**Topcontainers vervangen Container 1-records.** In tegenstelling tot Container 1-records in de huidige versie van ArchivesSpace kunnen topcontainers in de nieuwe versie één keer worden gedefinieerd en herhaaldelijk worden gekoppeld aan verschillende archiefonderdelen, collecties en records van nog niet ontsloten materiaal. + +**De mogelijkheid om containerprofielen aan te maken en aan topcontainers te koppelen.** Met optionele containerprofielen kunt u gegevens over de containers zelf vastleggen, waaronder de afmetingen. + +**Omvangcalculator.** Met de nieuwe omvangcalculator kunt u in combinatie met containerprofielen eenvoudig de omvang bekijken van records voor nog niet ontsloten materiaal, collecties of collectieonderdelen. U kunt de calculator ook gebruiken om omvangrecords aan te maken voor een record van nog niet ontsloten materiaal, een collectie of een collectieonderdeel. + +**Bulkbewerkingen voor containers.** Het gedeelte Topcontainers beheren biedt efficiëntere manieren om met meerdere containers te werken, zoals barcodes toevoegen of bewerken, locaties wijzigen en topcontainers in bulk verwijderen. + +**De mogelijkheid om dozen op een betekenisvolle manier tussen collecties te delen.** U kunt topcontainers los van individuele records van nog niet ontsloten materiaal en collecties definiëren en ze vanuit meerdere records van nog niet ontsloten materiaal en collecties openen. Dit kan bijvoorbeeld handig zijn om gegevens vast te leggen over een formaatdoos met materiaal uit meerdere collecties. + +**De mogelijkheid om gegevens op te slaan waarmee u ArchivesSpace kunt synchroniseren met itemrecords in uw ILS.** Als uw instelling in haar ILS itemrecords voor containers aanmaakt, kunt u die gegevens nu ook in ArchivesSpace vastleggen. + +**De mogelijkheid om gegevens op te slaan over de beperkingen op materiaal in een container.** U kunt nu in één oogopslag zien of er beperkingen gelden voor een deel van de inhoud van een container. + +**Machinaal toepasbare beperkingen.** U kunt voortaan begin- en einddatums koppelen aan de notities "voorwaarden voor toegang" en "voorwaarden voor gebruik". U kunt ook een lokaal beperkingstype koppelen aan beperkingen zonder tijdsduur. Zo kunt u beperkingen die verlopen beter beheren en opnieuw beschrijven. + +Raadpleeg voor meer informatie over het gebruik van de nieuwe functies de gebruikershandleiding, met name het nieuwe gedeelte met de titel Containers beheren (beschikbaar vanaf eind april 2016). diff --git a/src/content/docs/nl/administration/upgrading_2_1_0.md b/src/content/docs/nl/administration/upgrading_2_1_0.md new file mode 100644 index 0000000..1b0f540 --- /dev/null +++ b/src/content/docs/nl/administration/upgrading_2_1_0.md @@ -0,0 +1,30 @@ +--- +title: Upgraden naar 2.1.0 +description: Instructies voor het upgraden naar ArchivesSpace 2.1.0 vanaf versie 1.4.2 of lager, Archivists' Toolkit of Archon, of bij gebruik van een externe Solr-server, met daarnaast opmerkingen over de gegevensmigratie van rechtenverklaringen. +--- + +Aanvullende aandachtspunten voor het upgraden die specifiek zijn voor deze release. Raadpleeg de [upgraddocumentatie](/administration/upgrading) voor de standaardinstructies die in alle gevallen gelden. + +:::note +Deze aandachtspunten gelden ook bij een upgrade vanaf een versie vóór 2.1.0 naar een versie na 2.1.0. +::: + +## Voor wie een upgrade uitvoert vanaf 1.4.2 of lager + +Na de samenvoeging van de Container Management Plugin in 1.5.0 behield ArchivesSpace nog steeds het oude containermodel en waren er diverse afhankelijkheden van dit model. Dit zorgde voor onnodige complexiteit en enige prestatievermindering in het systeem. + +In deze release zijn alle verwijzingen naar het oude containermodel verwijderd en zijn de onderdelen van de applicatie die ervan afhankelijk waren (bijvoorbeeld Importeren en exporteren) geherstructureerd om het nieuwe containermodel te gebruiken. + +Een gevolg van deze wijziging is dat u, als u een upgrade uitvoert vanaf ArchivesSpace versie 1.4.2 of lager, eerst moet upgraden naar een versie tussen 1.5.0 en 2.0.1 om de conversie van het containermodel uit te voeren. Daarna kunt u upgraden naar 2.1.0. Als u al een versie van ArchivesSpace tussen 1.5.0 en 2.0.1 gebruikt, kunt u rechtstreeks upgraden naar 2.1.0. + +## Voor wie gegevens migreert vanuit Archivists' Toolkit of Archon met de migratietools + +De migratietools worden momenteel alleen ondersteund tot en met versie 1.4.2. Als u gegevens met een van deze tools naar ArchivesSpace wilt migreren, moet u deze naar versie 1.4.2 migreren. Daarna kunt u de instructies volgen voor wie een upgrade uitvoert vanaf 1.4.2 of lager. + +## Gegevensmigraties in deze release + +Het gegevensmodel voor rechtenverklaringen is gewijzigd in 2.1.0. Als u momenteel rechtenverklaringen gebruikt, worden uw gegevens tijdens de stap `setup-database` van het upgradeproces naar het nieuwe model geconverteerd. We raden u nadrukkelijk aan een back-up van uw database te maken en ten minste één testupgrade uit te voeren voordat u 2.1.0 in productie neemt. + +## Voor wie een externe Solr-server gebruikt + +Het indexschema is gewijzigd in 2.1.0. Als u een externe Solr-server gebruikt, moet u [schema.xml](https://github.com/archivesspace/archivesspace/blob/master/solr/schema.xml) bijwerken naar de nieuwere versie. Als u de standaard Solr-index gebruikt die met ArchivesSpace wordt meegeleverd, hoeft u niets te doen. diff --git a/src/content/docs/nl/administration/windows.md b/src/content/docs/nl/administration/windows.md new file mode 100644 index 0000000..483ee43 --- /dev/null +++ b/src/content/docs/nl/administration/windows.md @@ -0,0 +1,54 @@ +--- +title: Uitvoeren als Windows-service +description: Instructies voor het instellen van ArchivesSpace als Windows-service. +--- + +Voor het uitvoeren van ArchivesSpace als Windows-service is enige aanvullende configuratie vereist. + +U kunt Apache [procrun](http://commons.apache.org/proper/commons-daemon/procrun.html) gebruiken om ArchivesSpace zo te configureren dat het als Windows-service wordt uitgevoerd. We hebben een script service.bat geleverd dat procrun voor u probeert te configureren (in `launcher\service.bat`). + +Om dit script uit te voeren, moet u eerst [procrun downloaden](http://www.apache.org/dist/commons/daemon/binaries/windows/). +Pak de bestanden uit en kopieer prunsrv.exe en prunmgr.exe naar uw ArchivesSpace-map. + +U vindt het pad naar Java via "Start" > "Configuratiescherm" > "Java". Selecteer het tabblad "Java". Daar ziet u het pad. Dit ziet er ongeveer zo uit: `C:\Program Files (x86)\Java` + +U moet er ook voor zorgen dat Java in het systeempad staat en dat u `JAVA_HOME` als globale omgevingsvariabele aanmaakt. +Als u Java aan uw pad wilt toevoegen, bewerkt u de omgevingsvariabele %PATH% zodat deze de map met het Java-uitvoerbare bestand bevat (dit is bijvoorbeeld `C:\Program Files (x86)\Java`). Als u `JAVA_HOME` wilt toevoegen, maakt u een nieuwe systeemvariabele aan en geeft u de map op waarin Java is geïnstalleerd (bijvoorbeeld `C:\Program Files (x86)\Java`). + +U vindt de omgevingsvariabelen via "Start" > "Configuratiescherm". Zoek naar omgevingsvariabelen. Klik op "Systeemomgevingsvariabelen bewerken". Zoek in het gedeelte "Systeemvariabelen" de omgevingsvariabele `PATH` en selecteer deze. Klik op Bewerken. Als de omgevingsvariabele `PATH` niet bestaat, klikt u op Nieuw. Geef in het venster Systeemvariabele bewerken (of Nieuwe systeemvariabele) de waarde van de omgevingsvariabele `PATH` op. Klik op OK. Sluit alle overige vensters door op OK te klikken. Doe hetzelfde voor `JAVA_HOME`. + +Voordat u de ArchivesSpace-service instelt, moet u ArchivesSpace ook [configureren voor gebruik met MySQL](/provisioning/mysql). +Zorg ervoor dat het MySQL-connector-JAR-bestand in de map lib staat, zodat +het servicescript dit aan het classpath van de toepassing kan toevoegen. + +Tot slot moet u, zodat de service correct kan worden afgesloten, de volgende regels in +config/config.rb uitcommentariëren en wijzigen: + +```ruby +AppConfig[:use_jetty_shutdown_handler] = true +AppConfig[:jetty_shutdown_path] = "/xkcd" +``` + +Hiermee wordt een shutdown-hook ingeschakeld, zodat Jetty kan reageren wanneer de afsluitactie wordt uitgevoerd. + +U kunt het batchscript nu vanaf de hoofdmap van ArchivesSpace uitvoeren via de opdrachtregel met `launcher\service.bat`. Hiermee wordt de service geconfigureerd en worden twee uitvoerbare bestanden aangemaakt: `ArchivesSpaceService.exe` (de service) en `ArchivesSpaceServicew.exe` (een GUI-monitor). + +U kunt de service op verschillende manieren starten. De eenvoudigste manier is om de GUI-monitor te openen en op "Starten" te klikken. + +U kunt ook de GUI-monitor starten en deze minimaliseren naar het systeemvak met: + +```shell +ArchivesSpaceServicew.exe //MS// +``` + +U kunt de service vanaf de opdrachtregel uitvoeren met: + +```shell +ArchivesSpaceService.exe //ES// +``` + +De loguitvoer wordt opgeslagen in de logmap van ArchivesSpace. + +Raadpleeg de [documentatie van +procrun](http://commons.apache.org/proper/commons-daemon/procrun.html) +voor meer informatie. diff --git a/src/content/docs/nl/api/index.md b/src/content/docs/nl/api/index.md new file mode 100644 index 0000000..fe73aa5 --- /dev/null +++ b/src/content/docs/nl/api/index.md @@ -0,0 +1,466 @@ +--- +title: Werken met de API +description: Algemene informatie over het werken met de API, waaronder authenticatie en GET- en POST-verzoeken met voorbeelden. +--- + +:::tip +Deze documentatie bevat algemene informatie over het werken met de API. Zie voor gedetailleerde documentatie over specifieke eindpunten de [API-referentie](http://archivesspace.github.io/archivesspace/api/), die afzonderlijk wordt bijgehouden. +::: + +## Authenticatie + +Voor de meeste acties op de backend moet u zijn aangemeld als gebruiker +met de juiste machtigingen. Door een verzoek als volgt te verzenden: + + POST /users/admin/login?password=login + +wordt uw authenticatieverzoek gevalideerd en wordt een sessietoken +geretourneerd in het JSON-antwoord op uw verzoek. Geef dit token bij +volgende verzoeken mee in de header `X-ArchivesSpace-Session` om aangemeld +te blijven. Bijvoorbeeld: + + X-ArchivesSpace-Session: 8e921ac9bbe9a4a947eee8a7c5fa8b4c81c51729935860c1adfed60a5e4202cb + +Omdat niet voor alle backend-/API-eindpunten authenticatie vereist is, kunt u de toegang tot poort 8089 het beste beperken tot IP-adressen die u vertrouwt. Gebruik uw firewall om een reeks IP-adressen op te geven die uw ArchivesSpace API-eindpunt mogen aanroepen. Dit wordt ook wel een allowlist genoemd. + +### Voorbeeldverzoeken met CURL + +Verzend het verzoek om u te authenticeren: + +```shell +curl -s -F password="admin" "http://localhost:8089/users/admin/login" +``` + +Dit levert een JSON-antwoord op dat er ongeveer als volgt uitziet: + +<!-- prettier-ignore --> +```json +{ + "session":"9528190655b979f00817a5d38f9daf07d1686fed99a1d53dd2c9ff2d852a0c6e", + .... +} +``` + +Het is verstandig om de sessiesleutel op te slaan als omgevingsvariabele, zodat u deze voor volgende verzoeken kunt gebruiken: + +```shell +#Mac/Unix terminal +export SESSION="9528190655b979f00817a5d38f9daf07d1686fed99a1d53dd2c9ff2d852a0c6e" + +#Windows Command Prompt +set SESSION="9528190655b979f00817a5d38f9daf07d1686fed99a1d53dd2c9ff2d852a0c6e" + +#Windows PowerShell +$env:SESSION="9528190655b979f00817a5d38f9daf07d1686fed99a1d53dd2c9ff2d852a0c6e" +``` + +Nu kunt u verzoeken verzenden zoals dit: + +```shell +curl -H "X-ArchivesSpace-Session: $SESSION" "http://localhost:8089/repositories/2/resources/1 +``` + +## CRUD + +De ArchivesSpace API biedt interacties in CRUD-stijl voor verschillende +typen records op het hoogste niveau. Het werken met records volgt een +vrij standaardpatroon: + + # Get a paginated list of accessions from repository '123' + GET /repositories/123/accessions?page=1 + + # Create a new accession, returning the ID of the new record + POST /repositories/123/accessions + {... a JSON document satisfying JSONModel(:accession) here ...} + + # Get a single accession (returned as a JSONModel(:accession) instance) using the ID returned by the previous request + GET /repositories/123/accessions/456 + + # Update an existing accession + POST /repositories/123/accessions/456 + {... a JSON document satisfying JSONModel(:accession) here ...} + +## API-verzoeken uitvoeren + +### GET-verzoeken + +#### Bijbehorende records ophalen + +Met de parameter :resolve kunt u ArchivesSpace vragen om het volledige object aan deze verwijzingen toe te voegen; de parameter wordt doorgegeven als een +reeks sleutels die in de geretourneerde JSON vooraf moeten worden opgehaald. Het object wordt in de verwijzing opgenomen onder de sleutel \_resolved. + +Als u bijvoorbeeld een archiefonderdeel wilt vinden op basis van een ref_id en het gevonden archiefonderdeel wilt retourneren, kunt u +`resolve[]: "archival_objects"` aan uw verzoek toevoegen. + +##### Shell-voorbeeld + +> ```shell +> curl -s -F ****** "http://localhost:8089/users/admin/login" +> # Replace "admin" with your password and "http://localhost:8089/users/admin/login" with your ASpace API URL +> # followed by "/users/{your_username}/login" +> +> set SESSION="session_id" +> # If using a unix-like shell, replace set with export +> +> curl -H "X-ArchivesSpace-Session: $SESSION" // +> "http://localhost:8089/repositories/:repo_id:/find_by_id/archival_objects?ref_id[]=hello_im_a_ref_id;resolve[]=archival_objects" +> # Replace "http://localhost:8089" with your ASpace API URL, :repo_id: with the repository ID, +> # "hello_im_a_ref_id" with the ref ID you are searching for, and only add +> # "resolve[]=archival_objects" if you want the JSON for the returned record - otherwise, it will return the +> # record URI only +> ``` + +##### Python-voorbeeld + +> ```python +> from asnake.client import ASnakeClient # import the ArchivesSnake client +> +> client = ASnakeClient(baseurl="http://localhost:8089", username="admin", ******) +> # Replace "http://localhost:8089" with your ArchivesSpace API URL and "admin" for your username and password +> +> client.authorize() # authorizes the client +> +> find_ao_refid = client.get("repositories/:repo_id:/find_by_id/archival_objects", +> params={"ref_id[]": "hello_im_a_ref_id", +> "resolve[]": "archival_objects"}) +> # Replace :repo_id: with the repository ID, "hello_im_a_ref_id" with the ref ID you are searching for, and only add +> # "resolve[]": "archival_objects" if you want the JSON for the returned record - otherwise, it will return the +> # record URI only +> +> print(find_ao_refid.json()) +> # Output (dict): {'archival_objects': [{'ref': '/repositories/2/archival_objects/708425', '_resolved':...}]} +> ``` + +#### Verzoeken om gepagineerde resultaten + +Eindpunten die groepen objecten vertegenwoordigen in plaats van afzonderlijke objecten, zijn doorgaans gepagineerd. Gepagineerde eindpunten worden in de documentatie als zodanig aangeduid, met een variant van de volgende tekst: +Dit eindpunt is gepagineerd. :page, :id_set of :all_ids is vereist + + Integer page – The page set to be returned + Integer page_size – The size of the set to be returned ( Optional. default set in AppConfig ) + Comma separated list id_set – A list of ids to request resolved objects ( Must be smaller than default page_size ) + Boolean all_ids – Return a list of all object ids + +Deze eindpunten ondersteunen een of meer van de volgende mogelijkheden: + + paged access to objects (via :page) + listing all matching ids (via :all_ids) + fetching specific known objects via their database ids (via :id_set) + +##### Shell-voorbeeld + +> ```shell +> curl -s -F ****** "http://localhost:8089/users/admin/login" +> # Replace "admin" with your password and "http://localhost:8089/users/admin/login" with your ASpace API URL +> # followed by "/users/{your_username}/login" +> +> set SESSION="session_id" +> # If using a unix-like shell, replace set with export +> +> # For all archival objects, use all_ids +> curl -H "X-ArchivesSpace-Session: $SESSION" // +> "http://localhost:8089/repositories/2/archival_objects?all_ids=true" +> +> # For a set of archival objects, use id_set +> curl -H "X-ArchivesSpace-Session: $SESSION" // +> "http://localhost:8089/repositories/2/archival_objects?id_set=707458&id_set=707460&id_set=707461" +> +> # For a page of archival objects, use page and page_size +> "http://localhost:8089/repositories/2/archival_objects?page=1&page_size=10" +> ``` + +> Python-voorbeeld nodig + +#### Werken met lange resultatensets + +Wanneer u met zoekresultaten werkt met de parameters page en page_size, kunnen er veel resultaten worden geretourneerd en kan het lastig zijn om deze te beheren. Zie het Python-voorbeeld hieronder, dat laat zien hoe u door een grote resultatenset kunt itereren om in gepagineerde resultaten naar archiefonderdelen te zoeken. + +##### Python-voorbeeld + +> ```python +> from asnake.client import ASnakeClient # import the ArchivesSnake client +> +> client = ASnakeClient(baseurl="http://localhost:8089", username="admin", ******) +> # Replace http://localhost:8089 with your ArchivesSpace API URL and admin for your username and password +> +> client.authorize() # authorizes the client +> +> # To get a page of archival objects with a set page size, use "page" and "page_size" parameters +> get_repo_aos_pages = client.get("repositories/2/archival_objects", params={"page": 1, "page_size": 10}) +> # Replace 2 for your repository ID. Find this in the URI of your archival object on the bottom right of the +> # Basic Information section in the staff interface +> +> print(get_repo_aos_pages.json()) +> # Output (dictionary): {'first_page': 1, 'last_page': 26949, 'this_page': 1, 'total': 269488, +> # 'results': [{'lock_version': 1, 'position': 0,...]...} +> +> result_count = len(get_repo_aos_pages.json()) # Get us the count of results back +> for result in get_repo_aos_pages.json(): +> json_info = json.loads(result["json"]) +> for key, value in json_info.items(): +> id_match = id_field_regex.match(key) +> ``` + +#### Zoekverzoeken + +Een aantal routes in de ArchivesSpace API is bedoeld om in alle of een deel van de records in de +applicatie naar inhoud te zoeken. Deze routes maken gebruik van Solr, een onderdeel dat met ArchivesSpace wordt meegeleverd en waarmee de volledige tekst van records kan worden doorzocht. + +De zoekroutes die momenteel beschikbaar zijn in de applicatie zijn: + +- In dit archief zoeken +- In alle collectiebeherende instellingen zoeken +- In deze collectiebeherende instelling zoeken +- In alle onderwerpen zoeken +- Zoeken naar topcontainers +- In alle locatieprofielen zoeken + +Zoekroutes accepteren veel verschillende parameters, waarvan de meeste rechtstreeks overeenkomen met Solr-queryparameters. De belangrijkste parameter is q: de query die naar Solr wordt verzonden. Deze query gebruikt de Lucene-querysyntaxis. De relevante documentatie staat op de webpagina [The Standard Query Parser](https://solr.apache.org/guide/6_6/the-standard-query-parser.html#the-standard-query-parser) van de Solr Reference Guide. + +Als u een zoekopdracht wilt beperken tot records van een bepaald type of bepaalde typen, kunt u de parameter 'type' gebruiken. Dit is alleen relevant voor zoek-eindpunten die niet tot specifieke typen zijn beperkt. Houd er rekening mee dat voor type een lijst met typen wordt verwacht, ook als u maar naar één type zoekt. + +##### Opmerkingen over zoekroutes en resultaten + +ArchivesSpace vertegenwoordigt records als JSONModel-objecten. Dit zijn de objecten die u van het systeem ontvangt en ernaartoe verzendt. + +SOLR neemt deze records en slaat op basis van deze JSONModel-objecten "documenten" op in een doorzoekbare index. + +Zoekroutes doorzoeken deze documenten, NIET de records zelf zoals die in de database zijn opgeslagen en door JSONModel worden weergegeven. + +JSONModel-objecten en SOLR-documenten vertonen enkele overeenkomsten: + +- Zowel SOLR-documenten als JSONModel-objecten zijn uitgedrukt in JSON. +- Documenten bevatten over het algemeen altijd een deelverzameling van het JSONModel-object dat ze vertegenwoordigen. + +Er zijn echter ook belangrijke verschillen: + +- SOLR-documenten bevatten niet noodzakelijkerwijs alle velden van een JSONModel-object. +- SOLR-documenten bevatten niet automatisch geneste JSONModel-objecten. +- SOLR-documenten kunnen velden bevatten die willekeurige "zoekweergaven" zijn van velden in bijbehorende records, + of combinaties van velden in een record. +- SOLR-documenten hebben geen veld jsonmodel_type; de jsonmodel_type van het record wordt in SOLR opgeslagen als primary_type. + +Hoe haalt u het daadwerkelijke JSONModel-object uit een zoekdocument op? + +In ArchivesSpace hebben SOLR-documenten allemaal een veld json, dat het JSONModel-object dat het document vertegenwoordigt als tekenreeks bevat. U kunt een JSON-bibliotheek gebruiken om deze tekenreeks uit het veld te parseren, bijvoorbeeld de json-bibliotheek in Python. + +##### Shell-voorbeeld + +> ```shell +> +> # auto-generated example +> curl -H "X-ArchivesSpace-Session: $SESSION" \ +> "http://localhost:8089/search/repositories?q=&aq=%7B%22jsonmodel_type%22%3D%3E%22advanced_query%22%2C+%22query%22%3D%3E%7B%22jsonmodel_type%22%3D%3E%22boolean_query%22%2C+%22op%22%3D%3E%22AND%22%2C+%22subqueries%22%3D%3E%5B%7B%22jsonmodel_type%22%3D%3E%22date_field_query%22%2C+%22negated%22%3D%3Efalse%2C+%22comparator%22%3D%3E%22empty%22%2C+%22field%22%3D%3E%22QSUC205%22%2C+%22value%22%3D%3E%222018-03-26%22%7D%5D%7D%7D&type%5B%5D=&sort=&facet%5B%5D=&facet_mincount=1&filter=%7B%22jsonmodel_type%22%3D%3E%22advanced_query%22%2C+%22query%22%3D%3E%7B%22jsonmodel_type%22%3D%3E%22boolean_query%22%2C+%22op%22%3D%3E%22AND%22%2C+%22subqueries%22%3D%3E%5B%7B%22jsonmodel_type%22%3D%3E%22date_field_query%22%2C+%22negated%22%3D%3Efalse%2C+%22comparator%22%3D%3E%22empty%22%2C+%22field%22%3D%3E%22QSUC205%22%2C+%22value%22%3D%3E%222018-03-26%22%7D%5D%7D%7D&filter_query%5B%5D=&exclude%5B%5D=&hl=BooleanParam&root_record=&dt=&fields%5B%5D=" +> +> # auto-generated example +> curl -H 'Content-Type: text/json' -H "X-ArchivesSpace-Session: $SESSION" \ +> "http://localhost:8089/search/repositories" \ +> -d '{ +> "aq": { +> "jsonmodel_type": "advanced_query", +> "query": { +> "jsonmodel_type": "boolean_query", +> "op": "AND", +> "subqueries": [ +> { +> "jsonmodel_type": "date_field_query", +> "negated": false, +> "comparator": "empty", +> "field": "QSUC205", +> "value": "2018-03-26" +> } +> ] +> } +> }, +> "facet_mincount": "1", +> "filter": { +> "jsonmodel_type": "advanced_query", +> "query": { +> "jsonmodel_type": "boolean_query", +> "op": "AND", +> "subqueries": [ +> { +> "jsonmodel_type": "date_field_query", +> "negated": false, +> "comparator": "empty", +> "field": "QSUC205", +> "value": "2018-03-26" +> } +> ] +> } +> }, +> "hl": "BooleanParam" +> }' +> ``` + +### POST-verzoeken + +#### Bestaande records bijwerken + +Als u bestaande records wilt bijwerken, wordt aanbevolen eerst een GET-verzoek uit te voeren voor het record dat u wilt bijwerken. Zo weet u zeker dat de gegevens die u bijwerkt zo nauwkeurig mogelijk zijn en verkleint u de kans dat u onbedoeld gegevens verwijdert die eerder aanwezig waren maar verloren kunnen gaan als ze niet in de volgende update worden opgenomen. Nadat u de oorspronkelijke recordgegevens hebt opgehaald, kunt u deze zo nodig bijwerken en vervolgens een POST-verzoek met de bijgewerkte gegevens uitvoeren. Zorg ervoor dat de bijgewerkte gegevens in JSON-indeling staan en worden doorgegeven via de parameter `-d` of `--data`, of via de parameter `json` als u ArchivesSnake gebruikt. + +##### Shell-voorbeeld + +> ```shell +> curl -s -F ****** "http://localhost:8089/users/admin/login" +> # Replace "admin" with your password and "http://localhost:8089" with your ASpace API URL followed by +> # "/users/{your_username}/login" +> +> set SESSION="session_id" +> # If using a unix-like shell, replace set with export +> +> curl -H 'Content-Type: text/json' -H "X-ArchivesSpace-Session: $SESSION" \\ +> "http://localhost:8089/repositories/:repo_id:/groups/:group_id:" \\ +> -d '{"group_code": "test-group_managers", +> "lock_version": 4, +> "description": "Test group managers of the Manuscripts repository", +> "jsonmodel_type": "group", +> "member_usernames": [ +> "manager", "advance"]}' +> # Replace http://localhost:8089 with your ArchivesSpace API URL, :repo_id: with the repository ID number, +> # :group_id: with the group ID number you want to update, and the data found after -d with the data you want +> # updating the group. Be sure to include "lock_version" and the most recent number for it. You can find the +> # most recent lock_version by submitting a get request, like so: curl -H "X-ArchivesSpace-Session: $SESSION" \ +> # "http://localhost:8089/repositories/:repo_id:/groups/:group_id:" +> +> # Output: +> # {"status":"Updated","id":23,"lock_version":5,"stale":null,"uri":"/repositories/2/groups/23","warnings":[]} +> ``` + +##### Python-voorbeeld + +> ```python +> from asnake.client import ASnakeClient # import the ArchivesSnake client +> client = ASnakeClient(baseurl="http://localhost:8089", username="admin", ******) +> # replace http://localhost:8089 with your ArchivesSpace API URL and admin for your username and password +> +> client.authorize() # authorizes the client +> +> get_user_group = client.get("repositories/:repo_id:/groups/:group_id:").json() +> # Retrieve the data from the group you are trying to update. Replace :repo_id: with the repository ID number and +> # :group_id: with the group ID number you want to update +> +> get_user_group["member_usernames"].append("advance") +> # An example of how to modify a group record. For a list of all the fields you can update, +> # print(get_user_group). Here we append a new user 'advance' to the list of users associated with this group. +> +> update_user_group = get_user_group +> # Assign the newly updated get_user_group to update_user_group - to help make it clearer to see. +> +> update_status = client.post("repositories/:repo_id:/groups/:group_id:", json=update_user_group) +> # Replace :repo_id: with the repository ID number and :group_id: with the group ID number you want to update +> +> print(update_status.json()) +> # Output: +> # {'status': 'Updated', 'id': 48, 'lock_version': 1, 'stale': None, 'uri': '/repositories/2/groups/48', +> # 'warnings': []} +> ``` + +#### Nieuwe records aanmaken + +Bij het aanmaken van nieuwe records wordt aanbevolen een GET-verzoek uit te voeren voor het type record dat u wilt aanmaken. Dit voorbeeldrecord is handig om te zien welke velden voor dat specifieke record zijn opgenomen. Niet alle velden zijn vereist; de velden `created` en `modified` zijn bijvoorbeeld niet nodig bij het aanmaken van een nieuw record, omdat deze automatisch worden afgehandeld. Andere velden, zoals `title` en `jsonmodel_type`, zijn wel vereist. + +Bekijk een bestaand record als referentie en stel vervolgens uw JSON-gegevens samen en verstuur een POST-verzoek. Zorg ervoor dat het nieuwe record wordt doorgegeven via de parameter `-d` of `--data`, of via de parameter `json` als u ArchivesSnake gebruikt. + +##### Shell-voorbeeld + +> ```shell +> # Create a new user group within the SHELL +> curl -s -F ****** "http://localhost:8089/users/admin/login" +> # Replace "admin" with your password and "http://localhost:8089" with your ASpace API URL followed by +> # "/users/{your_username}/login" +> +> set SESSION="session_id" +> # If using a unix-like shell, replace set with export +> +> curl -H "X-ArchivesSpace-Session: $SESSION" "http://localhost:8089/repositories/:repo_id:/groups/" \\ +> -d '{"group_code": "test-group_managers", +> "description": "Test group managers of the Manuscripts repository", +> "jsonmodel_type": "group"}' +> # Replace "http://localhost:8089" with your ASpace API URL, :repo_id: with the repository ID, and +> # the data found in -d with the metadata you want to create the new user group. +> +> # Output +> # {"status":"Created","id":24,"lock_version":0,"stale":null,"uri":"/repositories/2/groups/24","warnings":[]} +> ``` + +##### Python-voorbeeld + +> ```python +> # Create a new user group using Python and ArchivesSnake +> from asnake.client import ASnakeClient # import the ArchivesSnake client +> +> client = ASnakeClient(baseurl="http://localhost:8089", username="admin", ******) +> # replace http://localhost:8089 with your ArchivesSpace API URL and admin for your username and password +> +> client.authorize() # authorizes the client +> +> new_group = { +> "group_code": "test-group_managers", +> "description": "Test group managers of the Manuscripts repository", +> "jsonmodel_type": "group", +> "member_usernames": [ +> "manager" +> ], +> "grants_permissions": [ +> "cancel_job", +> "manage_enumeration_record"] +> } +> # This is a sample user group that exceeds the minimum requirements. The minimum requirements are: +> # jsonmodel_type, description, and group_code. grants_permissions is optional, these values can be looked up in +> # the ASpace database within the permissions table +> +> post_user_group = client.post("repositories/:repo_id:/groups", json=new_group) +> # Replace :repo_id: with the ArchivesSpace repository ID and new_group with the json data to create a new user +> # group +> +> print(post_user_group.json()) +> # Output: +> # {'status': 'Created', 'id': 23, 'lock_version': 0, 'stale': None, 'uri': '/repositories/2/groups/23', +> # 'warnings': []} +> ``` + +### DELETE-verzoeken + +DELETE-verzoeken via de API verwijderen records permanent, net als in de medewerkersinterface. Wees voorzichtig! Controleer voordat u dit doet of u het volledige record wilt verwijderen. Zie [Bestaande records bijwerken](####Updating existing records) als u delen van een record wilt verwijderen, bijvoorbeeld notities of andere velden. + +Haal de door ArchivesSpace gegenereerde ID van het record op om het te verwijderen en gebruik de opdracht `DELETE` in de SHELL of `client.delete` als u de Python-bibliotheek ArchivesSnake gebruikt. + +##### Shell-voorbeeld + +> ```shell +> # Delete a user group within the SHELL +> curl -s -F ****** "http://localhost:8089/users/admin/login" +> # Replace "admin" with your password and "http://localhost:8089" with your ASpace API URL followed by +> # "/users/{your_username}/login" +> +> set SESSION="session_id" +> # If using a unix-like shell, replace set with export +> +> curl -H "X-ArchivesSpace-Session: $SESSION" \\ +> -X DELETE "http://localhost:8089/repositories/:repo_id:/groups/:group_id:" +> # Replace "http://localhost:8089" with your ASpace API URL, :repo_id: with the repository ID, and +> # :group_id: with the ID of the group you want to delete (usually found in the URL of the user group when +> # viewing in the staff interface). Deleting is permanent so make sure to test this first! +> +> # Output: {"status":"Deleted","id":47} +> ``` + +##### Python-voorbeeld + +> ```python +> # Delete a user group from a repository using Python and ArchivesSnake +> from asnake.client import ASnakeClient # import the ArchivesSnake client +> +> client = ASnakeClient(baseurl="http://localhost:8089", username="admin", ******) +> # replace http://localhost:8089 with your ArchivesSpace API URL and admin for your username and password +> +> client.authorize() # authorizes the client +> +> delete_user_group = client.delete("repositories/:repo_id:/groups/:group_id:") +> # Replace :repo_id: with the ArchivesSpace repository ID and :group_id: with the ArchivesSpace ID of the +> # user group you want to delete. Deleting is permanent so make sure to test this first! +> +> print(delete_user_group.json()) +> # Output: {'status': 'Deleted', 'id': 23} +> ``` diff --git a/src/content/docs/nl/architecture/api.md b/src/content/docs/nl/architecture/api.md new file mode 100644 index 0000000..97bbcab --- /dev/null +++ b/src/content/docs/nl/architecture/api.md @@ -0,0 +1,48 @@ +--- +title: API +description: Instructies voor authenticatie bij het verbinden met een sessie op de backend, bijvoorbeeld via de API, met voorbeelden van veelvoorkomende verzoeken voor het ophalen en versturen van gegevens. +--- + +:::note +Zie het [API-gedeelte](/api/index) voor uitgebreidere documentatie. +::: + +## Authenticatie + +Voor de meeste handelingen via de backend moet u zijn aangemeld als gebruiker +met de juiste machtigingen. Wanneer u een verzoek zoals dit verstuurt: + +``` +POST /users/admin/login?password=login +``` + +wordt uw authenticatieverzoek gevalideerd en ontvangt u een sessietoken in het +JSON-antwoord op uw verzoek. Om aangemeld te blijven, voegt u dit token toe aan +volgende verzoeken in de header +`X-ArchivesSpace-Session`. Bijvoorbeeld: + +``` +X-ArchivesSpace-Session: 8e921ac9bbe9a4a947eee8a7c5fa8b4c81c51729935860c1adfed60a5e4202cb +``` + +## CRUD + +De ArchivesSpace-API biedt interacties in CRUD-stijl voor een aantal +verschillende typen records op het hoogste niveau. Bij het werken met records +volgt u doorgaans een vrij standaard patroon: + +``` +# Get a paginated list of accessions from repository '123' +GET /repositories/123/accessions?page=1 + +# Create a new accession, returning the ID of the new record +POST /repositories/123/accessions +{... a JSON document satisfying JSONModel(:accession) here ...} + +# Get a single accession (returned as a JSONModel(:accession) instance) using the ID returned by the previous request +GET /repositories/123/accessions/456 + +# Update an existing accession +POST /repositories/123/accessions/456 +{... a JSON document satisfying JSONModel(:accession) here ...} +``` diff --git a/src/content/docs/nl/architecture/archivesspace_architecture.svg b/src/content/docs/nl/architecture/archivesspace_architecture.svg new file mode 100644 index 0000000..e7ded40 --- /dev/null +++ b/src/content/docs/nl/architecture/archivesspace_architecture.svg @@ -0,0 +1,105 @@ +<svg width="100%" viewBox="0 0 680 560" xmlns="http://www.w3.org/2000/svg"> +<defs> +<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"> +<path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> +</marker> +</defs> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="40" y="22" width="160" height="42" rx="8" stroke-width="0.5" style="fill:rgb(8, 80, 65);stroke:rgb(93, 202, 165);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="120" y="43" text-anchor="middle" dominant-baseline="central" style="fill:rgb(159, 225, 203);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Logged-in users</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="265" y="22" width="150" height="42" rx="8" stroke-width="0.5" style="fill:rgb(68, 68, 65);stroke:rgb(180, 178, 169);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="340" y="43" text-anchor="middle" dominant-baseline="central" style="fill:rgb(211, 209, 199);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Internet</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="480" y="22" width="160" height="42" rx="8" stroke-width="0.5" style="fill:rgb(113, 43, 19);stroke:rgb(240, 153, 123);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="560" y="43" text-anchor="middle" dominant-baseline="central" style="fill:rgb(245, 196, 179);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Anonymous users</text> +</g> + +<line x1="200" y1="43" x2="265" y2="43" stroke="#0F6E56" stroke-width="1.5" fill="none" marker-end="url(#arrow)" style="fill:none;stroke:rgb(15, 110, 86);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<line x1="480" y1="43" x2="415" y2="43" stroke="#993C1D" stroke-width="1.5" fill="none" marker-end="url(#arrow)" style="fill:none;stroke:rgb(153, 60, 29);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<path d="M310,64 C300,108 105,96 105,138" fill="none" stroke="#0F6E56" stroke-width="1.5" marker-end="url(#arrow)" style="fill:none;stroke:rgb(15, 110, 86);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<path d="M370,64 C380,108 547,96 547,138" fill="none" stroke="#993C1D" stroke-width="1.5" marker-end="url(#arrow)" style="fill:none;stroke:rgb(153, 60, 29);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<rect x="15" y="115" width="650" height="145" rx="12" fill="none" stroke="var(--color-border-secondary)" stroke-width="0.5" stroke-dasharray="6 4" style="fill:none;stroke:rgba(222, 220, 209, 0.3);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-dasharray:6px, 4px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="290" y="104" width="100" height="22" rx="11" stroke-width="0.5" style="fill:rgb(12, 68, 124);stroke:rgb(133, 183, 235);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="340" y="115" text-anchor="middle" dominant-baseline="central" style="fill:rgb(181, 212, 244);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Frontend</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="20" y="138" width="170" height="58" rx="8" stroke-width="0.5" style="fill:rgb(12, 68, 124);stroke:rgb(133, 183, 235);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="105" y="155" text-anchor="middle" dominant-baseline="central" style="fill:rgb(181, 212, 244);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Staff UI</text> +<text x="105" y="173" text-anchor="middle" dominant-baseline="central" style="fill:rgb(133, 183, 235);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JRuby · Rails · jQuery</text> +</g> +<line x1="36" y1="192" x2="174" y2="192" stroke="#0F6E56" stroke-width="2" stroke-linecap="round" style="fill:rgb(0, 0, 0);stroke:rgb(15, 110, 86);color:rgb(251, 251, 254);stroke-width:2px;stroke-linecap:round;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="248" y="138" width="170" height="58" rx="8" stroke-width="0.5" style="fill:rgb(12, 68, 124);stroke:rgb(133, 183, 235);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="333" y="158" text-anchor="middle" dominant-baseline="central" style="fill:rgb(181, 212, 244);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Background jobs</text> +<text x="333" y="176" text-anchor="middle" dominant-baseline="central" style="fill:rgb(133, 183, 235);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JRuby · Ruby</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="462" y="138" width="170" height="58" rx="8" stroke-width="0.5" style="fill:rgb(12, 68, 124);stroke:rgb(133, 183, 235);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="547" y="155" text-anchor="middle" dominant-baseline="central" style="fill:rgb(181, 212, 244);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Public UI</text> +<text x="547" y="173" text-anchor="middle" dominant-baseline="central" style="fill:rgb(133, 183, 235);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JRuby · Rails · jQuery</text> +</g> +<line x1="478" y1="192" x2="616" y2="192" stroke="#993C1D" stroke-width="2" stroke-linecap="round" style="fill:rgb(0, 0, 0);stroke:rgb(153, 60, 29);color:rgb(251, 251, 254);stroke-width:2px;stroke-linecap:round;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<line x1="190" y1="167" x2="248" y2="167" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<path d="M105,196 C105,258 80,258 80,330" fill="none" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<path d="M333,196 C333,262 120,262 120,330" fill="none" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<path d="M547,196 C547,268 160,268 160,330" fill="none" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<rect x="15" y="310" width="650" height="115" rx="12" fill="none" stroke="var(--color-border-secondary)" stroke-width="0.5" stroke-dasharray="6 4" style="fill:none;stroke:rgba(222, 220, 209, 0.3);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-dasharray:6px, 4px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="290" y="299" width="100" height="22" rx="11" stroke-width="0.5" style="fill:rgb(8, 80, 65);stroke:rgb(93, 202, 165);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="340" y="310" text-anchor="middle" dominant-baseline="central" style="fill:rgb(159, 225, 203);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Backend</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="50" y="330" width="185" height="68" rx="8" stroke-width="0.5" style="fill:rgb(8, 80, 65);stroke:rgb(93, 202, 165);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="142" y="352" text-anchor="middle" dominant-baseline="central" style="fill:rgb(159, 225, 203);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">ArchivesSpace API</text> +<text x="142" y="369" text-anchor="middle" dominant-baseline="central" style="fill:rgb(93, 202, 165);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JRuby · Sinatra</text> +<text x="142" y="385" text-anchor="middle" dominant-baseline="central" style="fill:rgb(93, 202, 165);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JSONModel</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="435" y="330" width="195" height="68" rx="8" stroke-width="0.5" style="fill:rgb(8, 80, 65);stroke:rgb(93, 202, 165);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="532" y="352" text-anchor="middle" dominant-baseline="central" style="fill:rgb(159, 225, 203);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Indexer</text> +<text x="532" y="369" text-anchor="middle" dominant-baseline="central" style="fill:rgb(93, 202, 165);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JRuby · Sinatra</text> +<text x="532" y="385" text-anchor="middle" dominant-baseline="central" style="fill:rgb(93, 202, 165);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">JSONModel</text> +</g> + +<text x="340" y="346" text-anchor="middle" style="fill:rgb(194, 192, 182);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:auto">monitors updates</text> +<line x1="435" y1="359" x2="235" y2="359" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +<rect x="15" y="450" width="650" height="95" rx="12" fill="none" stroke="var(--color-border-secondary)" stroke-width="0.5" stroke-dasharray="6 4" style="fill:none;stroke:rgba(222, 220, 209, 0.3);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-dasharray:6px, 4px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="290" y="439" width="100" height="22" rx="11" stroke-width="0.5" style="fill:rgb(99, 56, 6);stroke:rgb(239, 159, 39);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="340" y="450" text-anchor="middle" dominant-baseline="central" style="fill:rgb(250, 199, 117);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Storage</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="50" y="462" width="185" height="58" rx="8" stroke-width="0.5" style="fill:rgb(99, 56, 6);stroke:rgb(239, 159, 39);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="142" y="482" text-anchor="middle" dominant-baseline="central" style="fill:rgb(250, 199, 117);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">MySQL</text> +<text x="142" y="500" text-anchor="middle" dominant-baseline="central" style="fill:rgb(239, 159, 39);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">Primary data store</text> +</g> + +<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"> +<rect x="435" y="462" width="195" height="58" rx="8" stroke-width="0.5" style="fill:rgb(99, 56, 6);stroke:rgb(239, 159, 39);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<text x="532" y="482" text-anchor="middle" dominant-baseline="central" style="fill:rgb(250, 199, 117);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">Apache Solr</text> +<text x="532" y="500" text-anchor="middle" dominant-baseline="central" style="fill:rgb(239, 159, 39);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">Search index · Java</text> +</g> + +<line x1="142" y1="398" x2="142" y2="462" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> +<line x1="532" y1="398" x2="532" y2="462" marker-end="url(#arrow)" style="fill:none;stroke:rgb(156, 154, 146);color:rgb(251, 251, 254);stroke-width:1.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/> + +</svg> \ No newline at end of file diff --git a/src/content/docs/nl/architecture/backend.md b/src/content/docs/nl/architecture/backend.md new file mode 100644 index 0000000..26ae564 --- /dev/null +++ b/src/content/docs/nl/architecture/backend.md @@ -0,0 +1,425 @@ +--- +title: Backend +description: Beschrijft de architectuur van de backend van ArchivesSpace, waaronder de bestanden main.rb en rest.rb voor het starten van ArchivesSpace en het definiëren van API-mechanismen, controllers, modellen, geneste records, relaties, agents, validatie, optimistische gelijktijdigheidscontrole en het machtigingenmodel. +--- + +De backend is verantwoordelijk voor de implementatie van de ArchivesSpace-API +en ondersteunt de soorten toegangspatronen die in het vorige gedeelte zijn +weergegeven. We hebben gezien dat de backend CRUD-bewerkingen voor een aantal +verschillende recordtypen moet ondersteunen, en dat deze records worden +weergegeven als JSON-documenten die zijn gemaakt op basis van instanties van +JSONModel-klassen. + +In de volgende gedeelten wordt beschreven hoe de onderdelen van de backend +met elkaar samenhangen. + +## main.rb -- het systeem laden en initialiseren + +Het programma `main.rb` is verantwoordelijk voor het starten van het +ArchivesSpace-systeem: het laden van alle controllers en modellen, het +aanmaken van gebruikers, groepen en machtigingen waar nodig, en het +voorbereiden van het systeem op het afhandelen van verzoeken. + +Wanneer het systeem wordt gestart, voert het programma `main.rb` de volgende +acties uit: + +- Initialiseert JSONModel, waardoor alle recordschema's uit het bestandssysteem + worden geladen en de klassen voor elk recordtype worden gegenereerd. +- Maakt verbinding met de database. +- Laadt alle backendmodellen: de domeinobjecten en persistentielaag van het + systeem. +- Laadt alle controllers: hiermee worden de REST-eindpunten van het systeem + gedefinieerd. +- Start de taakplanner, die geplande taken afhandelt, zoals back-ups van de + demodatabase (indien gebruikt). +- Voert het proces voor de 'bootstrap ACLs' uit: maakt de beheerder en diens + groep aan als deze nog niet bestaan; maakt de verborgen globale + collectiebeherende instelling aan; en maakt systeemgebruikers en -groepen + aan. +- Verstuurt de melding 'backend started' naar alle geregistreerde waarnemers. + +Naast het starten van het systeem biedt `main.rb` ook de volgende functies: + +- Sessiebeheer: houdt geauthenticeerde backendsessies bij met het token dat + wordt opgehaald uit de aanvraagheader `X-ArchivesSpace-Session`. +- Hulpmethoden voor toegang tot de huidige gebruiker en de huidige sessie van + elk verzoek. + +## rest.rb -- verzoeken en antwoorden voor REST-eindpunten afhandelen + +De module `rest.rb` biedt het mechanisme waarmee de REST-eindpunten van de API +worden gedefinieerd. Elke definitie van een eindpunt omvat: + +- De URI en HTTP-aanvraagmethode waarmee het eindpunt wordt benaderd. +- Een lijst met getypeerde parameters voor dat eindpunt. +- Documentatie voor het eindpunt, elke parameter en elk mogelijk antwoord. +- Machtigingscontroles: voorwaarden waaraan de huidige gebruiker moet voldoen + om het eindpunt te mogen gebruiken. + +Elke controller in het systeem bestaat uit een of meer van deze definities van +eindpunten. Met de syntaxis voor eindpunten die `rest.rb` biedt, kunnen +controllers hun interface declareren. Daardoor hoeven ze de gebruikelijke +standaardcode voor verzoekafhandeling niet zelf uit te voeren, zoals +parametertypen controleren, waarden van tekenreeksen naar andere typen +omzetten, enzovoort. + +De onderdelen `main.rb` en `rest.rb` werken samen om controllers af te +schermen van een groot deel van de complexiteit van verzoekafhandeling. +Wanneer een verzoek de hoofdtekst van een eindpunt bereikt: + +- Kan ervan worden uitgegaan dat alle vereiste parameters aanwezig zijn en + het juiste type hebben. +- Is de hoofdtekst van het verzoek opgehaald, geparseerd naar het juiste type + (doorgaans een JSONModel-instantie; zie hieronder) en beschikbaar gemaakt + als verzoekparameter. +- Zijn eventuele parameters die de client heeft opgegeven maar die niet in de + definitie van het eindpunt voorkwamen, verwijderd. +- Is de sessie van de gebruiker opgehaald en zijn alle gedefinieerde + toegangscontroles uitgevoerd. +- Is een databaseverbinding aan het verzoek toegewezen en is een transactie + gestart. Als de controller een uitzondering veroorzaakt, wordt de + transactie automatisch teruggedraaid. + +## Controllers + +Zoals in het vorige gedeelte is besproken, implementeren controllers de +functionaliteit van de ArchivesSpace-API door een of meer eindpunten te +registreren. Elk eindpunt accepteert een HTTP-verzoek voor een bepaalde URI, +handelt het verzoek af en retourneert een JSON-antwoord (bij succes) of +veroorzaakt een uitzondering (als er iets misgaat). + +Elke controller staat in een eigen bestand; deze bestanden zijn te vinden in +de map `backend/app/controllers`. Omdat de module `rest.rb` het grootste deel +van de verzoekafhandelingslogica bevat, doen controllers doorgaans niet meer +dan de klassen uit de modellagen coördineren en een antwoord naar de client +terugsturen. + +### crud_helpers.rb -- veelvoorkomende CRUD-controlleracties vastleggen + +Hoewel controllers vrij beperkt zijn, is er veel overlap in hun gedrag. Elk +recordtype in het systeem ondersteunt dezelfde CRUD-bewerkingen en vanuit het +perspectief van de controller verschilt een bijwerkverzoek voor nog niet +ontsloten materiaal niet veel van een bijwerkverzoek voor een digitaal object +(bijvoorbeeld). + +De module `crud_helpers.rb` bundelt deze gemeenschappelijke functionaliteit in +een reeks hulpmethoden die door elke controller worden aangeroepen. Deze +methoden bieden de standaardbewerkingen van het systeem. + +## Modellen + +De modellagen van de backend vormen het hart van de werking. De rol van deze +laag is de kloof te overbruggen tussen de JSONModel-objecten op hoog niveau +(met hun eigenschappen, geneste records, verwijzingen naar andere records +enzovoort) en de onderliggende relationele database (via de Sequel-databasetoolkit). +De modellagen richten zich daarom voornamelijk op het omzetten van +JSONModel-instanties naar databasetabellen op een manier die alle gegevens +behoudt en efficiënte zoekopdrachten mogelijk maakt. + +Elk recordtype heeft een bijbehorende modelklasse, maar de afzonderlijke +modeldefinities zijn vaak vrij beperkt. Dat komt doordat de verschillende +recordtypen op de volgende punten van elkaar verschillen: + +- De reeks eigenschappen die ze toestaan (en de typen, geldige waarden + enzovoort daarvan). +- De typen geneste records die ze kunnen bevatten. +- De typen relaties die ze met andere recordtypen kunnen hebben. + +Het eerste punt, de reeks toegestane eigenschappen, is al vastgelegd in de +JSONModel-schemadefinities. De modellagen hoeven deze beperkingen dus niet af +te dwingen. Elk model kan eenvoudig de waarden overnemen die het aangeleverde +JSONModel-object bevat en ervan uitgaan dat alles wat aanwezig moet zijn er +ook is, en dat de validatie al heeft plaatsgevonden. + +De overige twee aspecten worden wel door de modellagen afgedwongen, maar +hebben doorgaans niet alleen betrekking op één recordtype. Een registratie +van nog niet ontsloten materiaal kan bijvoorbeeld aan nul of meer onderwerpen +zijn gekoppeld, maar dat geldt ook voor verschillende andere recordtypen. Het +heeft dus geen zin om de logica voor het afhandelen van onderwerpen in het +model `Accession` op te nemen. + +In de praktijk zien we heel weinig functionaliteit die uitsluitend bij één +recordtype hoort. Daarom hoeft er niet veel in elk bijbehorend model te staan. +In plaats daarvan worden modellen doorgaans samengesteld door een aantal +mix-ins (Ruby-modules) te combineren die voldoen aan de vereisten van het +betreffende recordtype. Functionaliteit op maat! + +### ASModel en andere mix-ins + +Elk model bevat ten minste de mix-in `ASModel`, die basisversies van de +volgende methoden biedt: + +- `Model.create_from_json` -- Neem een JSONModel-instantie en maak daarvan een + modelinstantie (een subklasse van Sequel::Model). Retourneert de instantie. +- `model.update_from_json` -- Werk de doelmodelinstantie bij met de waarden + uit een gegeven JSONModel-instantie. +- `Model.sequel_to_json` -- Retourneer een JSONModel-instantie van het juiste + type, met waarden die zijn overgenomen van de doelmodelinstantie. + Modelklassen worden bij het aanmaken gekoppeld aan een bepaalde + JSONModel-instantie, zodat deze methode automatisch een JSONModel-instantie + van het juiste type kan retourneren. + +Deze methoden vormen de belangrijkste interface van de modellagen: vrijwel +elke mix-in in de modellagen overschrijft een of meer van deze methoden om op +modulaire wijze gedrag toe te voegen. + +De mix-in 'notes' voegt bijvoorbeeld ondersteuning toe voor meerdere notities +bij een recordtype. Door deze module in een modelklasse te mengen, accepteert +die klasse automatisch een JSONModel-eigenschap met de naam 'notes', die +indien nodig in de database wordt opgeslagen en daaruit wordt opgehaald. Dit +werkt door de drie methoden als volgt te overschrijven: + +- `Model.create_from_json` -- Roep 'super' aan om het aanmaken aan de volgende + mix-in in de keten over te dragen. Wanneer deze een nieuw aangemaakt object + retourneert, haalt u de notities uit de JSONModel-instantie en koppelt u ze + aan de modelinstantie (waarbij ze in de database worden opgeslagen). +- `model.update_from_json` -- Roep 'super' aan om de overige wijzigingen in + de database op te slaan en vervang vervolgens alle bestaande notities voor + het record door de notities uit de JSONModel. +- `Model.sequel_to_json` -- Roep 'super' aan om de volgende mix-in in de keten + een JSONModel-instantie te laten maken. Haal vervolgens de opgeslagen + notities uit de database en voeg ze eraan toe. + +Alle mix-ins volgen dit patroon: roep 'super' aan om de aanroep aan de +volgende mix-in in de keten over te dragen (uiteindelijk bij ASModel) en +pas vervolgens het resultaat aan om het gewenste gedrag te implementeren. + +### Geneste records + +Sommige recordtypen, zoals registraties van nog niet ontsloten materiaal, +digitale objecten en onderwerpen, zijn _records op het hoogste niveau_: ze +worden onafhankelijk van andere records aangemaakt en zijn bereikbaar via +hun eigen URI. Er zijn echter ook records die niet zelfstandig kunnen bestaan +en alleen in de context van een ander record voorkomen. Wanneer een record +instanties van een ander record kan bevatten, noemen we deze _geneste +records_. + +Het recordtype `date` is bijvoorbeeld onder meer genest in een +`accession`-record. Wanneer de modellagen een JSONModel-instantie +met geneste records moeten opslaan, moeten ze die records eruit halen, ze in +de juiste databasetabel opslaan en ervoor zorgen dat er in de database +koppelingen worden gemaakt, zodat ze later kunnen worden opgehaald. + +Dit komt vaak genoeg voor dat het omslachtig zou zijn om voor elk model code +te schrijven voor de afhandeling van geneste records. Daarom biedt de mix-in +ASModel een declaratie om dit automatisch af te handelen. Het model +`accession` gebruikt bijvoorbeeld een definitie zoals: + +```ruby +base.def_nested_record(:the_property => :dates, + :contains_records_of_type => :date, + :corresponding_to_association => :date) +``` + +Wanneer een registratie van nog niet ontsloten materiaal wordt aangemaakt, +geeft deze declaratie het model `Accession` de opdracht om een databaserecord +aan te maken voor elke datum die in de eigenschap "dates" van het +binnenkomende record staat. Elk van deze datumrecords wordt automatisch +gekoppeld aan de aangemaakte registratie van nog niet ontsloten materiaal. + +### Relaties + +Een relatie is een koppeling tussen twee records op het hoogste niveau, +waarbij de koppeling een afzonderlijk, dynamisch gegenereerd model is met +nul of meer eigen eigenschappen. + +Het model `Event` kan bijvoorbeeld aan verschillende recordtypen zijn +gerelateerd: + +```ruby +define_relationship(:name => :event_link, + :json_property => 'linked_records', + :contains_references_to_types => proc {[Accession, Resource, ArchivalObject]}) +``` + +Deze declaratie genereert een aangepaste klasse die de relatie tussen +gebeurtenissen en de andere recordtypen modelleert. De bijbehorende +JSON-schemadeclaratie voor de eigenschap `linked_records` ziet er als volgt +uit: + +```ruby +"linked_records" => { + "type" => "array", + "ifmissing" => "error", + "minItems" => 1, + "items" => { + "type" => "object", + "subtype" => "ref", + "properties" => { + "role" => { + "type" => "string", + "dynamic_enum" => "linked_event_archival_record_roles", + "ifmissing" => "error", + }, + "ref" => { + "type" => [{"type" => "JSONModel(:accession) uri"}, + {"type" => "JSONModel(:resource) uri"}, + {"type" => "JSONModel(:archival_object) uri"}, + ...], + "ifmissing" => "error" + }, + ... +``` + +De eigenschap bevat dus URI-verwijzingen naar andere records en daarnaast +een eigenschap 'role' om de aard van de relatie aan te geven. De bijbehorende +JSON kan er dan als volgt uitzien: + +```ruby +linked_records: [{ref: '/repositories/123/accessions/456', role: 'authorizer'}, ...] +``` + +De definitie `define_relationship` maakt automatisch gebruik van de juiste +koppeltabellen in de database om deze relatie op te slaan en indien nodig +later weer op te halen. + +### Agents en `agent_manager.rb` + +Agents vormen een uitdaging voor de representatie. Er zijn vier typen agents +(persoon, familie, organisatie, software) en op hoog niveau zijn ze op +dezelfde manier gestructureerd: elk type kan een of meer naamrecords, nul of +meer contactrecords en een aantal eigenschappen bevatten. Records die aan +agents zijn gekoppeld (bijvoorbeeld via een relatie), kunnen aan elk van de +vier typen worden gekoppeld. In zekere zin implementeert elk agenttype dus +een gemeenschappelijke `Agent`-interface. + +De agenttypen verschillen echter in details. Agents bevatten naamrecords, +maar de typen van die naamrecords komen overeen met het type agent: een +persoonagent bevat bijvoorbeeld een persoonsnaamrecord. Ondanks hun +overeenkomsten moeten de verschillende agents dus als afzonderlijke +recordtypen worden gemodelleerd. + +De module `agent_manager` legt de overeenkomsten op hoog niveau tussen +agents vast. Elk agentmodel bevat de mix-in voor agentbeheer: + +```ruby +include AgentManager::Mixin +``` + +en definieert zichzelf vervolgens declaratief met de aangeboden klassenmethode: + +```ruby +register_agent_type(:jsonmodel => :agent_person, + :name_type => :name_person, + :name_model => NamePerson) +``` + +Deze definitie stelt de eigenschappen van die agent in. Ze maakt het volgende +aan: + +- een one_to_many-relatie met het bijbehorende naamtype van de agent. +- een one_to_many-relatie met de tabel agent_contact. +- een definitie van geneste records voor de namenlijst van de agent (zodat + deze lijst automatisch in de database wordt opgeslagen en eruit wordt + opgehaald). +- een definitie van geneste records voor de contactpersonenlijst van de agent. + +## Validaties + +Wanneer records aan het ArchivesSpace-systeem worden toegevoegd of erin +worden bijgewerkt, worden ze aan een aantal regels getoetst om te controleren +of ze goed zijn gevormd en niet conflicteren met andere records. Er zijn twee +typen recordvalidatie: + +- Validaties op recordniveau controleren of een record intern consistent is: + het bevat alle verplichte velden, de waarden hebben het juiste type en + formaat en de velden spreken elkaar niet tegen. +- Validaties op systeemniveau controleren of een record in een bredere + context klopt: het deelt geen unieke identificatie met een ander record en + de records waarnaar het verwijst bestaan daadwerkelijk. + +Validaties op recordniveau kunnen geïsoleerd worden uitgevoerd, terwijl voor +validaties op systeemniveau records met andere records in de database moeten +worden vergeleken. + +Validaties op systeemniveau moeten in de database zelf worden geïmplementeerd +(als integriteitsbeperkingen), maar validaties op recordniveau zijn vaak te +complex om op deze manier uit te drukken. Daarom kunnen validaties in +ArchivesSpace op een of beide van de volgende lagen voorkomen: + +- Op JSONModel-niveau worden validaties vastgelegd in JSON-schemadocumenten. + Wanneer meer flexibiliteit nodig is, worden aangepaste validaties + toegevoegd aan het bestand `common/validations.rb`, zodat de + validatielogica met willekeurige Ruby-code kan worden uitgedrukt. +- Op databaseniveau worden validaties vastgelegd met databasebeperkingen. + Omdat de foutmeldingen van deze beperkingen doorgaans niet nuttig zijn voor + gebruikers, worden databasebeperkingen ook in de modellagen van de backend + herhaald met Sequel-validaties, die gerichtere foutmeldingen opleveren. + +In het algemeen worden validaties op recordniveau afgehandeld met +JSONModel-validaties (via het JSON-schema of aangepaste validaties), terwijl +validaties op systeemniveau worden afgehandeld door het model en het +databaseschema. + +## Optimistische gelijktijdigheidscontrole + +Een record bijwerken met de ArchivesSpace-API is een proces in twee stappen: + +```ruby +# Perform a `GET` against the desired record to fetch its JSON +# representation: + +GET /repositories/5/accessions/2 + +# Manipulate the JSON representation as required, and then `POST` +# it back to replace the original: + +POST /repositories/5/accessions/2 +``` + +Als twee personen dit tegelijkertijd doen, bestaat het risico dat de ene +persoon de wijzigingen van de andere ongemerkt overschrijft. Om dit te +voorkomen, krijgt elk record een versienummer in de eigenschap `lock_version`. +Wanneer het systeem een bijgewerkte kopie van een record ontvangt, controleert +het of de versie ervan nog actueel is. Als het versienummer niet overeenkomt +met het nummer in de database, wordt het bijwerkverzoek afgewezen en moet de +gebruiker eerst de nieuwste versie opnieuw ophalen voordat de wijzigingen +worden toegepast. + +## Het machtigingenmodel van ArchivesSpace + +De backend van ArchivesSpace dwingt toegangscontrole af en bepaalt welke +gebruikers records in het systeem mogen aanmaken, lezen, bijwerken, +onderdrukken en verwijderen. De belangrijkste actoren in het machtigingenmodel +zijn: + +- Collectiebeherende instellingen -- Het belangrijkste mechanisme om het + ArchivesSpace-systeem op te delen. Een instantie kan bijvoorbeeld één + collectiebeherende instelling bevatten voor elke afdeling van een + organisatie of één voor elke grote collectie. +- Gebruikers -- Entiteiten die het systeem gebruiken, vaak personen maar + mogelijk ook gebruikers van de ArchivesSpace-API. Gebruikers zijn + systeembreed gedefinieerd en één gebruiker kan toegang hebben tot meerdere + collectiebeherende instellingen. +- Records -- Een informatie-eenheid in het systeem. Sommige records zijn + globaal (ze bestaan buiten een bepaalde collectiebeherende instelling), + terwijl andere aan één collectiebeherende instelling zijn gekoppeld. +- Groepen -- Een verzameling gebruikers _binnen_ een collectiebeherende + instelling. Aan elke groep worden nul of meer machtigingen toegekend, die + gelden voor de leden van die groep. +- Machtigingen -- Handelingen die een gebruiker mag uitvoeren. Een gebruiker + met de machtiging `update_accession_record` mag bijvoorbeeld registraties + van nog niet ontsloten materiaal van een collectiebeherende instelling + bijwerken. + +Samengevat kan een gebruiker een handeling binnen een collectiebeherende +instelling uitvoeren als die gebruiker lid is van een groep waaraan de +machtiging voor die handeling is toegekend. + +### Conceptuele kunstgreep + +Omdat groepen aan een collectiebeherende instelling zijn gekoppeld, regelen +ze de toegang tot die instellingen. Sommige recordtypen bestaan echter op +het hoogste niveau van het systeem (zoals de collectiebeherende instellingen +zelf, onderwerpen en agents), en het machtigingenmodel moet hiermee rekening +houden. + +Om dit op te lossen, introduceren we een concept: de 'globale' +collectiebeherende instelling bevat conceptueel het volledige ArchivesSpace- +universum. Net als andere collectiebeherende instellingen bevat de globale +instelling groepen. Gebruikers kunnen lid worden van deze groepen om +machtigingen voor het hele systeem te krijgen. Een voorbeeld hiervan is de +gebruiker 'admin', die via de groep 'administrators' van de globale +collectiebeherende instelling alle machtigingen krijgt. Een ander voorbeeld +is de gebruiker 'search indexer', die elk record in het systeem mag lezen, +maar niet mag bijwerken of verwijderen. diff --git a/src/content/docs/nl/architecture/database.md b/src/content/docs/nl/architecture/database.md new file mode 100644 index 0000000..6ef3c73 --- /dev/null +++ b/src/content/docs/nl/architecture/database.md @@ -0,0 +1,554 @@ +--- +title: Database +description: Beschrijft de structuur van de ArchivesSpace-database, met een overzicht van de hoofdrecordtabellen, tabellen met ondersteunende en geneste records, relatietabellen, enumeratietabellen, tabellen voor gebruikers, instellingen en rechten, taaktabellen en systeemtabellen. Ook worden de specifieke velden in de verschillende tabellen beschreven. +--- + +De ArchivesSpace-database slaat alle gegevens op die binnen een ArchivesSpace-instantie worden aangemaakt. Zoals in andere delen van deze documentatie wordt beschreven, gebruikt de backendcode — met name de model-laag en het bestand `ASModel_crud.rb` — de databasetoolkit `Sequel` om de onderliggende gegevens te verbinden met de JSON-objecten die door de andere onderdelen van het systeem worden uitgewisseld. + +Vaak is de database rechtstreeks doorzoeken de efficiëntste en krachtigste manier om gegevens uit ArchivesSpace op te halen. U kunt ook SQL-query's gebruiken om aangepaste rapporten te maken die gebruikers in de medewerkersinterface kunnen uitvoeren. Raadpleeg het onderdeel [Aangepaste rapporten](/customization/reports) van deze documentatie voor meer informatie over het maken van aangepaste rapporten. + +<!-- .See this [plugin](link-to-plugin) for an example. Also --> + +Voor productie wordt aanbevolen ArchivesSpace met MySQL te gebruiken en niet met de meegeleverde demodatabase. Instructies voor het configureren van ArchivesSpace voor gebruik met MySQL vindt u [hier](/provisioning/mysql). + +De voorbeelden in dit onderdeel zijn geschreven voor MySQL. Op internet zijn veel gratis tutorials beschikbaar die uitleg bieden aan lezers die niet vertrouwd zijn met de querysyntaxis van MySQL en de functies van deze taal. + +**OPMERKING**: de onderstaande documentatie is bijgewerkt tot en met databaseschemaversie 129 en applicatieversie 2.7.1. + +## Databaseoverzicht + +Het databaseschema van ArchivesSpace en de toewijzing ervan aan de JSONModel-objecten die door de andere onderdelen van het systeem worden gebruikt, worden gedefinieerd in de bestanden in de mappen `common/schemas` en `backend/models`. De database zelf wordt aangemaakt met het script `setup-database` in de map `scripts`. Dit script voert de migraties uit in de map `common/db/migrations`. + +De tabellen in de ArchivesSpace-database kunnen in verschillende algemene categorieën worden ingedeeld: + +- [Databaseoverzicht](#database-overview) +- [Hoofdrecordtabellen](#main-record-tables) +- [Tabellen met ondersteunende records](#supporting-record-tables) +- [Tabellen met geneste records](#subrecord-tables) +- [Relatietabellen](#relationship-tables) +- [Enumeraties](#enumerations) +- [Tabellen voor gebruikers, instellingen en rechten](#user-setting-and-permission-tables) +- [Taaktabellen](#job-tables) +- [Systeemtabellen](#system-tables) +- [Ouder-kindrelaties en volgorde](#parent-child-relationships-and-sequencing) + - [Aan een collectiebeherende instelling gekoppelde records](#repository-scoped-records) + - [Ouder-kindrelaties](#parentchild-relationships) + - [Volgorde](#sequencing) +- [Booleaanse velden](#boolean-fields) +- [Alleen-lezenvelden](#read-only-fields) + +U kunt een overzicht van alle tabellen en kolommen in uw ArchivesSpace-instantie opvragen door de volgende query in een MySQL-client uit te voeren: + +```sql +SELECT TABLE_SCHEMA + , TABLE_NAME + , COLUMN_NAME + , ORDINAL_POSITION + , IS_NULLABLE + , COLUMN_TYPE + , COLUMN_KEY +FROM INFORMATION_SCHEMA.COLUMNS +#change the following value to whatever your database is named +WHERE TABLE_SCHEMA Like 'archivesspace' +``` + +Daarnaast hebben leden van het ArchivesSpace-ontwikkelingsteam en het Reports-team van de ArchivesSpace User Advisory Council een BÈTA-versie van een [gegevenswoordenboek voor ArchivesSpace](https://github.com/archivesspace/data-dictionary-initial) gemaakt. + +## Hoofdrecordtabellen + +Deze tabellen bevatten gegevens over de primaire recordtypen in ArchivesSpace. Hoofdrecordtypen onderscheiden zich van geneste records doordat ze een eigen blijvende URI hebben — overeenkomend met hun database-ID/primaire sleutel — die kan worden opgezocht via de medewerkersinterface, de publieke gebruikersinterface en de API. Ze onderscheiden zich van ondersteunende records doordat het de primaire beschrijvende recordtypen zijn waarmee gebruikers in het systeem werken. + +Al deze records kunnen onafhankelijk van andere records worden aangemaakt, behalve archiefonderdelen. Records van archiefonderdelen vertegenwoordigen componenten van een grotere entiteit en moeten daarom een collectie als hoofdrecord hebben. Zie het onderdeel [ouder-kindrelaties](#parent-child-relationships-and-sequencing) voor meer informatie over de weergave van hiërarchische relaties in de database. + +Een aantal veelvoorkomende velden komt in verschillende hoofdrecordtabellen voor. Deze overeenkomstige velden zijn gedefinieerd in de bovenliggende schema's in de map `common/schemas`: + +| Kolomnaam | Tabellen | +| ----------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `title` | `accession`, `archival_object`, `digital_object`, `digital_object_component`, `resource` | +| `identifier`/`component_id`/`digital_object_id` | `accession`, `resource`/`archival_object`, `digital_object_component`/`digital_object` | +| `other_level` | `archival_object`, `resource` | +| `repository_processing_note` | `archival_object`, `resource` | + +<!-- Booleans --> + +Alle hoofdrecords hebben velden die booleaanse waarden (`0` of `1`) opslaan. Deze geven aan of records zijn gepubliceerd in de publieke gebruikersinterface, zijn onderdrukt in de medewerkersinterface of onder een bepaalde beperking vallen. De tabel `repository` vormt hierop een uitzondering: deze heeft geen booleaans veld voor beperkingen, maar wel een booleaans veld `hidden`. De tabel `accession` bevat meerdere booleaanse velden die verband houden met beperkingen. Zie het onderstaande onderdeel voor meer informatie over booleaanse velden. + +Vanaf versie 2.6.0 bevatten de hoofdrecordtabellen (en enkele ondersteunende records; zie hieronder) ook velden met gegevens over Archival Resource Keys (ARK's) en leesbare URL's (slugs): + +| Kolomnaam | Tabellen | +| ------------------ | ------------------------------------------------------------------------------------------------------ | +| `slug` | `accession`, `archival_object`, `digital_object`, `digital_object_component`, `repository`, `resource` | +| `external_ark_url` | `archival_object`, `resource` | + +In deze en alle andere tabellen worden ook enumeratiewaarden opgeslagen. Dit zijn vreemde sleutels die overeenkomen met database-ID's in de tabel `enumeration_value`, waarin gecontroleerde waarden worden opgeslagen. Zie het onderstaande onderdeel over enumeraties voor meer informatie. + +Alle typen geneste gegevens — zoals datums, omvang en instanties — die betrekking hebben op een hoofdrecord of ondersteunend record, worden in eigen tabellen opgeslagen en via verwijzingen met vreemde sleutels in de tabellen met geneste records aan die records gekoppeld. Zie het onderstaande onderdeel over geneste records voor meer informatie. + +De overige gegevens in de hoofdrecordtabellen zijn tekst en zijn uniek voor elke tabel: + +| TABLE_NAME | COLUMN_NAME | IS_NULLABLE | COLUMN_TYPE | COLUMN_KEY | +| -------------------------- | ------------------------------- | ----------- | ------------ | ---------- | +| `accession` | `content_description` | YES | text | | +| `accession` | `condition_description` | YES | text | | +| `accession` | `disposition` | YES | text | | +| `accession` | `inventory` | YES | text | | +| `accession` | `provenance` | YES | text | | +| `accession` | `general_note` | YES | text | | +| `accession` | `accession_date` | YES | date | | +| `accession` | `retention_rule` | YES | text | | +| `accession` | `access_restrictions_note` | YES | text | | +| `accession` | `use_restrictions_note` | YES | text | | +| `archival_object` | `ref_id` | NO | varchar(255) | MUL | +| `digital_object_component` | `label` | YES | varchar(255) | | +| `repository` | `repo_code` | NO | varchar(255) | UNI | +| `repository` | `name` | NO | varchar(255) | | +| `repository` | `org_code` | YES | varchar(255) | | +| `repository` | `parent_institution_name` | YES | varchar(255) | | +| `repository` | `url` | YES | varchar(255) | | +| `repository` | `image_url` | YES | varchar(255) | | +| `repository` | `contact_persons` | YES | text | | +| `repository` | `description` | YES | text | | +| `repository` | `oai_is_disabled` | YES | int | | +| `repository` | `oai_sets_available` | YES | text | | +| `resource` | `ead_id` | YES | varchar(255) | | +| `resource` | `ead_location` | YES | varchar(255) | | +| `resource` | `finding_aid_title` | YES | text | | +| `resource` | `finding_aid_filing_title` | YES | text | | +| `resource` | `finding_aid_date` | YES | varchar(255) | | +| `resource` | `finding_aid_author` | YES | text | | +| `resource` | `finding_aid_language_note` | YES | varchar(255) | | +| `resource` | `finding_aid_sponsor` | YES | text | | +| `resource` | `finding_aid_edition_statement` | YES | text | | +| `resource` | `finding_aid_series_statement` | YES | text | | +| `resource` | `finding_aid_note` | YES | text | | +| `resource` | `finding_aid_subtitle` | YES | text | | + +<!-- arguably top contsainers should be here, or digital objects should be in the supporting records --> + +## Tabellen met ondersteunende records + +Net als de hierboven genoemde hoofdrecordtypen kunnen ondersteunende records onafhankelijk van andere records worden aangemaakt. Ze zijn via hun eigen URI bereikbaar in de medewerkersinterface en de API. Hun betekenis komt echter vooral voort uit hun veel-op-veelrelaties met hoofdrecordtypen en soms met andere ondersteunende recordtypen. Deze records bieden doorgaans aanvullende informatie over de primaire recordtypen of verrijken deze op een andere manier. Enkele ondersteunende recordtypen — bijvoorbeeld die in de tabel `term` — worden gebruikt om andere ondersteunende recordtypen aan te vullen. + +| Tabellen van ondersteunende modules | Gekoppeld aan | +| ----------------------------------- | --------------------------------------------------- | +| `agent_corporate_entity` | +| `agent_family` | +| `agent_person` | +| `agent_software` | +| `assessment` | +| `classification` | `accession`, `resource` | +| `classification_term` | `classification`, `accession`, `resource` | +| `container_profile` | `top_container` | +| `event` | +| `location` | +| `location_profile` | `location` | +| `subject` | `resource`, `archival_object` | +| `term` | `subject` | +| `top_container` | +| `vocabulary` | `subject`, `term` | +| `assessment_attribute_definition` | `assessment_attribute`, `assessment_attribute_note` | + +<!-- is this the appropriate place for the assessment attribute def? Vocabulary? --> + +## Tabellen met geneste records + +<!-- link to ### Nested records section of the backend readme --> + +Geneste records moeten bij een hoofdrecord of ondersteunend record horen; ze kunnen niet onafhankelijk worden aangemaakt. Daarom hebben ze geen eigen URI en zijn ze via de API alleen toegankelijk door het bovenliggende record op te halen waartoe ze behoren. In de medewerkersinterface zijn deze records opgenomen in de weergaven van hoofdrecords of ondersteunende records. In de API staan gegevens van geneste records in arrays binnen hoofdrecords of ondersteunende records. + +De verschillende typen geneste records hebben wel hun eigen databasetabellen. Naast gegevens die specifiek zijn voor het type genest record, bevatten de tabellen ook kolommen met vreemde sleutels die de database-ID's van hoofdrecords of ondersteunende records bevatten. Een tabel met geneste records moet een waarde bevatten in een van de velden met vreemde sleutels. Sommige geneste records kunnen zelf een ander genest record als bovenliggend record hebben; zo heeft het geneste record `sub_container` de kolom met vreemde sleutel `instance_id`. + +Geneste records hebben een één-op-veelrelatie met hun bovenliggende records. Daarom kan de `id` van een record meerdere keren voorkomen in een tabel met geneste records, bijvoorbeeld wanneer er twee datums aan een collectie zijn gekoppeld. + +Houd er rekening mee dat geneste records bij elke opslag van het hoofdrecord of ondersteunende record waartoe ze behoren, worden verwijderd en opnieuw aangemaakt, ongeacht of het geneste record zelf is gewijzigd. Dit betekent dat de database-ID bij elke opslag wordt verwijderd en opnieuw toegewezen. + +| Tabellen met geneste records | Vreemde sleutels | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `agent_contact` | `agent_person_id`, `agent_family_id`, `agent_corporate_entity_id`, `agent_software_id` | +| `date` | `accession_id`, `deaccession_id`, `archival_object_id`, `resource_id`, `event_id`, `digital_object_id`, `digital_object_component_id`, `related_agents_rlshp_id`, `agent_person_id`, `agent_family_id`, `agent_corporate_entity_id`, `agent_software_id`, `name_person_id`, `name_family_id`, `name_corporate_entity_id`, `name_software_id` | +| `extent` | `accession_id`, `deaccession_id`, `archival_object_id`, `resource_id`, `digital_object_id`, `digital_object_component_id` | +| `external_document` | `accession_id`, `archival_object_id`, `resource_id`, `subject_id`, `agent_person_id`, `agent_family_id`, `agent_corporate_entity_id`, `agent_software_id`, `rights_statement_id`, `digital_object_id`, `digital_object_component_id`, `event_id` | +| `external_id` | `subject_id`, `accession_id`, `archival_object_id`, `collection_management_id`, `digital_object_id`, `digital_object_component_id`, `event_id`, `location_id`, `resource_id` | +| `file_version` | `digital_object_id`, `digital_object_component_id` | +| `instance` | `resource_id`, `archival_object_id`, `accession_id` | +| `name_authority_id` | `name_person_id`, `name_family_id`, `name_software_id`, `name_corporate_entity_id` | +| `name_corporate_entity` | `agent_corporate_entity_id` | +| `name_family` | `agent_family_id` | +| `name_person` | `agent_person_id` | +| `name_software` | `agent_software_id` | +| `note` | `resource_id`, `archival_object_id`, `digital_object_id`, `digital_object_component_id`, `agent_person_id`, `agent_corporate_entity_id`, `agent_family_id`, `agent_software_id`, `rights_statement_act_id`, `rights_statement_id` | +| `note_persistent_id` | `note_id`, `parent_id` | +| `revision_statement` | `resource_id` | +| `rights_restriction` | `resource_id`, `archival_object_id` | +| `rights_restriction_type` | `rights_restriction_id` | +| `rights_statement` | `accession_id`, `archival_object_id`, `resource_id`, `digital_object_id`, `digital_object_component_id`, `repo_id` | +| `rights_statement_act` | `rights_statement_id` | +| `sub_container` | `instance_id` | +| `telephone` | `agent_contact_id` | +| `user_defined` | `accession_id`, `resource_id`, `digital_object_id` | +| `ark_name` | `archival_object_id`, `resource_id` | +| `assessment_attribute_note` | `assessment_id` | +| `assessment_attribute` | `assessment_id` | +| `lang_material` | `archival_object_id`, `resource_id`, `digital_object_id`, `digital_object_component_id` | +| `language_and_script` | `lang_material_id` | +| `collection_management` | `accession_id`, `resource_id`, `digital_object_id` | +| `location_function` | `location_id` | + +<!-- appropriate place for collection management and deaccession stuff? what about location function? all the rights statement stuff? Is there a specific thing that defines a subrecord as a subrecord? --> + +## Relatietabellen + +Deze tabellen maken koppelingen tussen hoofdrecords en ondersteunende records mogelijk. Relatietabellen zijn nodig omdat tabellen met ondersteunende records, anders dan tabellen met geneste records, geen vreemde sleutels bevatten die ze aan de hoofdrecordtabellen koppelen. + +De meeste relatietabellen hebben het achtervoegsel `_rlshp` in hun naam. Gewoonlijk bevatten ze alleen de primaire sleutels van de tabellen die aan elkaar worden gekoppeld, maar enkele tabellen bevatten ook velden die specifiek zijn voor de relatie tussen de twee recordtypen. + +| Relatie-/koppeltabellen | Gekoppelde tabellen | +| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `assessment_reviewer_rlshp` | `assessment` gekoppeld aan `agent_person` | +| `assessment_rlshp` | `assessment` gekoppeld aan `accession`, `archival_object`, `resource` of `digital_object` | +| `classification_creator_rlshp` | `classification` gekoppeld aan `agent_person`, `agent_family`, `agent_corporate_entity` of `agent_software` | +| `classification_rlshp` | `classification` of `classification_term` gekoppeld aan `resource` of `accession` | +| `classification_term_creator_rlshp` | `classification_term` gekoppeld aan `agent_person`, `agent_family`, `agent_corporate_entity` of `agent_software` | +| `event_link_rlshp` | `event` gekoppeld aan `accession`, `resource`, `archival_object`, `digital_object`, `digital_object_component`, `agent_person`, `agent_family`, `agent_corporate_entity`, `agent_software` of `top_container`. Bevat ook de tabel `role_id`, die met de tabel `enumeration_value` kan worden samengevoegd om de gebeurtenisrol (bron, uitkomst, overdracht, context) op te halen. | +| `instance_do_link_rlshp` | `digital_object` gekoppeld aan `instance` | +| `linked_agents_rlshp` | `agent_person`, `agent_software`, `agent_family` of `agent_corporate_entity` gekoppeld aan `accession`, `archival_object`, `digital_object`, `digital_object_component`, `event` of `resource`. Bevat ook de tabellen `role_id` en `relator_id`, die met de tabel `enumeration_value` kunnen worden samengevoegd. | +| `location_profile_rlshp` | `location` gekoppeld aan `location_profile` | +| `owner_repo_rlshp` | `location` gekoppeld aan `repository` | +| `related_accession_rlshp` | Koppelt een rij in de tabel `accession` aan een andere rij in die tabel. Bevat ook velden voor `relator` en het relatietype. | +| `related_agents_rlshp` | `agent_person`, `agent_corporate_entity`, `agent_software` of `agent_family` gekoppeld aan andere agenttabellen, of twee rijen in dezelfde agenttabel. Bevat ook velden voor `relator`, `description` en het relatietype. | +| `spawned_rlshp` | `accession` gekoppeld aan `resource`. Bevat alle gekoppelde gegevens over het nog niet ontsloten materiaal, zelfs als de collectie niet vanuit het bijbehorende record is voortgekomen. | +| `subject_rlshp` | `subject` gekoppeld aan `accession`, `archival_object`, `resource`, `digital_object` of `digital_object_component` | +| `surveyed_by_rlshp` | `assessment` gekoppeld aan `agent_person` | +| `top_container_housed_at_rlshp` | `top_container` gekoppeld aan `location`. Bevat ook velden voor `start_date`, `end_date`, `status` en een vrije-tekstnotitie `note`. | +| `top_container_link_rlshp` | `top_container` gekoppeld aan `sub_container` | +| `top_container_profile_rlshp` | `top_container` gekoppeld aan `container_profile` | +| `subject_term` | `subject` gekoppeld aan `term` | +| `linked_agent_term` | `linked_agents_rlshp` gekoppeld aan `term` | + +<!-- is the assessment definition thing a linking table - it pretty much only has foreign keys + +Same question about one of the rights restriction tables - can't remember which one right now. + --> + +Het is niet altijd duidelijk welke relatietabellen de gewenste resultaten opleveren. Voer bijvoorbeeld de volgende query in een MySQL-editor in om een dozenlijst voor een bepaalde collectie op te halen: + +```sql +SELECT DISTINCT CONCAT('/repositories/', resource.repo_id, '/resources/', resource.id) as resource_uri + , resource.identifier + , resource.title + , tc.barcode as barcode + , tc.indicator as box_number +FROM sub_container sc +JOIN top_container_link_rlshp tclr on tclr.sub_container_id = sc.id +JOIN top_container tc on tclr.top_container_id = tc.id +JOIN instance on sc.instance_id = instance.id +JOIN archival_object ao on instance.archival_object_id = ao.id +JOIN resource on ao.root_record_id = resource.id +#change to your desired resource id +WHERE resource.id = 4556 +``` + +Soms moeten meerdere relatietabellen worden samengevoegd om de gewenste resultaten op te halen. Voer bijvoorbeeld de volgende query in een MySQL-editor in om alle dozen en mappen voor een bepaalde collectie op te halen, inclusief eventuele containerprofielen en locaties: + +```sql +SELECT CONCAT('/repositories/', tc.repo_id, '/top_containers/', tc.id) as tc_uri + , CONCAT('/repositories/', resource.repo_id, '/resources/', resource.id) as resource_uri + , CONCAT('/repositories/', resource.repo_id) as repo_uri + , CONCAT('/repositories/', ao.repo_id, '/archival_objects/', ao.id) as ao_uri + , resource.identifier AS resource_identifier + , resource.title AS resource_title + , ao.display_string AS ao_title + , ev2.value AS level + , tc.barcode AS barcode + , cp.name AS container_profile + , tc.indicator AS container_num + , ev.value AS sc_type + , sc.indicator_2 AS sc_num +from sub_container sc +JOIN top_container_link_rlshp tclr on tclr.sub_container_id = sc.id +JOIN top_container tc on tclr.top_container_id = tc.id +LEFT JOIN top_container_profile_rlshp tcpr on tcpr.top_container_id = tc.id +LEFT JOIN container_profile cp on cp.id = tcpr.container_profile_id +LEFT JOIN top_container_housed_at_rlshp tchar on tchar.top_container_id = tc.id +JOIN instance on sc.instance_id = instance.id +JOIN archival_object ao on instance.archival_object_id = ao.id +JOIN resource on ao.root_record_id = resource.id +LEFT JOIN enumeration_value ev on ev.id = sc.type_2_id +LEFT JOIN enumeration_value ev2 on ev2.id = ao.level_id +#change to your desired resource id +WHERE resource.id = 4223 + +``` + + <!-- Mention the CONCAT function for creating URIs --> + +## Enumeraties + +Alle gecontroleerde waarden die de applicatie gebruikt — met uitzondering van knopinfo, weergavewaarden voor de frontend/publieke interface en waarden die in enkele tabellen met ondersteunende records zijn opgeslagen (zie hieronder) — staan in een tabel met de naam `enumeration_values`. Gecontroleerde waarden zijn ingedeeld in verschillende bovenliggende enumeraties (vergelijkbaar met afzonderlijke lijsten met gecontroleerde waarden) die door verschillende recordtypen en typen geneste records worden gebruikt. Gegevens over bovenliggende enumeraties staan in de tabel `enumeration` en worden via een vreemde sleutel in het veld `enumeration_id` aan de tabel `enumeration_value` gekoppeld. In de recordtabellen en tabellen met geneste records staan enumeratiewaarden als vreemde sleutels in verschillende kolommen met vreemde sleutels, die doorgaans eindigen op `_id`. + +ArchivesSpace wordt geleverd met een standaardset gecontroleerde waarden, maar eindgebruikers kunnen de meeste daarvan aanpassen via de medewerkersinterface en de API. Sommige waarden in de tabel `enumeration_value` zijn echter alleen-lezen. Deze waarden bepalen de terminologie en gegevenstypen die in verschillende delen van de applicatie worden gebruikt, zoals de diverse notitietypen. + +Enumeratie-ID's komen als vreemde sleutels voor in verschillende databasetabellen: + +| table_name | column_name | enumeration_name | +| -------------------------- | ---------------------------------- | -------------------------------------------------- | +| `accession` | `acquisition_type_id` | accession_acquisition_type | +| `accession` | `resource_type_id` | accession_resource_type | +| `agent_contact` | `salutation_id` | agent_contact_salutation | +| `archival_object` | `level_id` | archival_record_level | +| `collection_management` | `processing_priority_id` | collection_management_processing_priority | +| `collection_management` | `processing_status_id` | collection_management_processing_status | +| `collection_management` | `processing_total_extent_type_id` | extent_extent_type_id | +| `container_profile` | `dimension_units_id` | dimension_units | +| `date` | `calendar_id` | date_calendar | +| `date` | `certainty_id` | date_certainty | +| `date` | `date_type_id` | date_type | +| `date` | `era_id` | date_era | +| `date` | `label_id` | date_label | +| `deaccession` | `scope_id` | deaccession_scope | +| `digital_object` | `digital_oject_type_id` | digital_object_digital_object_type | +| `digital_object` | `level_id` | digital_object_level | +| `event` | `event_type_id` | event_event_type | +| `event` | `outcome_id` | event_outcome | +| `extent` | `extent_type_id` | extent_extent_type | +| `extent` | `portion_id` | extent_portion | +| `external_document` | `identifier_type_id` | rights_statement_external_document_identifier_type | +| `file_version` | `checksum_method_id` | file_version_checksum_methods | +| `file_version` | `file_format_name_id` | file_version_file_format_name | +| `file_version` | `use_statement_id` | file_version_use_statement | +| `file_version` | `xlink_actuate_attribute_id` | file_version_xlink_actuate_attribute | +| `file_version` | `xlink_show_attribute_id` | file_version_xlink_show_attribute | +| `instance` | `instance_type_id` | instance_instance_type | +| `language_and_script` | `language_id` | +| `language_and_script` | `script_id` | +| `location` | `temporary_id` | location_temporary | +| `location_function` | `location_function_type_id` | location_function_type | +| `location_profile` | `dimension_units_id` | dimension_units | +| `name_corporate_entity` | `rules_id` | name_rule | +| `name_corporate_entity` | `source_id` | name_source | +| `name_family` | `rules_id` | name_rule | +| `name_family` | `source_id` | name_source | +| `name_person` | `name_order_id` | name_person_name_order | +| `name_person` | `rules_id` | name_rule | +| `name_person` | `source_id` | name_source | +| `name_software` | `rules_id` | name_rule | +| `name_software` | `source_id` | name_source | +| `repository` | `country_id` | country_iso_3166 | +| `resource` | `finding_aid_description_rules_id` | resource_finding_aid_description_rules | +| `resource` | `finding_aid_language_id` | +| `resource` | `finding_aid_script_id` | +| `resource` | `finding_aid_status_id` | resource_finding_aid_status | +| `resource` | `level_id` | archival_record_level | +| `resource` | `resource_type_id` | resource_resource_type | +| `rights_restriction_type` | `restriction_type_id` | restriction_type | +| `rights_statement` | `jurisdiction_id` | +| `rights_statement` | `other_rights_basis_id` | rights_statement_other_rights_basis | +| `rights_statement` | `rights_type_id` | rights_statement_rights_type | +| `rights_statement` | `status_id` | +| `rights_statement_act` | `act_type_id` | rights_statement_act_type | +| `rights_statement_act` | `restriction_id` | rights_statement_act_restriction | +| `rights_statement_pre_088` | `ip_status_id` | rights_statement_ip_status | +| `rights_statement_pre_088` | `jurisdiction_id` | +| `rights_statement_pre_088` | `rights_type_id` | rights_statement_rights_type | +| `sub_container` | `type_2_id` | container_type | +| `sub_container` | `type_3_id` | container_type | +| `subject` | `source_id` | subject_source | +| `telephone` | `number_type_id` | telephone_number_type | +| `term` | `term_type_id` | subject_term_type | +| `top_container` | `type_id` | container_type | + +<!-- need to add some rlshp tables which have enums --> + +Om de enumeratie-ID in de recordtabellen en tabellen met geneste records te vertalen, voegt u de tabel `enumeration_value` samen. Als u meerdere waarden wilt vertalen, kunt u de tabel meerdere keren samenvoegen, maar moet u voor elke tabel een alias gebruiken. Bijvoorbeeld: + +```sql +SELECT CONCAT('/repositories/', ao.repo_id, '/archival_objects/', ao.id) as ao_uri + , ao.display_string as ao_title + , date.begin + , date.end + , ev.value as date_label + , ev2.value as date_type + , ev3.value as date_calendar +FROM archival_object ao +LEFT JOIN date on date.archival_object_id = ao.id +LEFT JOIN enumeration_value ev on ev.id = date.label_id +LEFT JOIN enumeration_value ev2 on ev2.id = date.date_type_id +LEFT JOIN enumeration_value ev3 on ev3.id = date.calendar_id +``` + +**OPMERKING**: records in `container_profile`, `location_profile` en `assessment_attribute_definition` zijn vergelijkbaar met records in de tabel `enumeration_value`, omdat ze gecontroleerde waarden opslaan waarnaar andere onderdelen van het systeem verwijzen. Ze verschillen er echter van doordat ze eigen tabellen hebben en via hun eigen URI bereikbaar zijn. + +## Tabellen voor gebruikers, instellingen en rechten + +Deze tabellen bevatten gebruikers- en rechtengegevens, gebruikers-, collectiebeherende-instelling- en algemene voorkeuren, en sjablonen voor RDE en aangepaste rapporten. + +| Tabelnaam | Beschrijving | +| ------------------------ | -------------------------------------------------------------------------------- | +| `custom_report_template` | Sjablonen voor aangepaste rapporten | +| `default_values` | Instellingen voor standaardwaarden | +| `group` | Gegevens over door elke collectiebeherende instelling aangemaakte rechtengroepen | +| `group_permission` | Koppelt de rechtentabel aan de groeptabel | +| `group_user` | Koppelt de groeptabel aan de gebruikerstabel | +| `oai_config` | Configuratiegegevens voor het harvesten via OAI-PMH | +| `permission` | Alle typen rechten die aan gebruikers kunnen worden toegekend | +| `preference` | Gebruikersvoorkeuren | +| `rde_template` | RDE-sjablonen | +| `required_fields` | Bevat door de collectiebeherende instelling bepaalde verplichte velden | +| `user` | Gebruikersgegevens | + +## Taaktabellen + +Deze tabellen bevatten gegevens over achtergrondtaken, waaronder imports. + +| Tabelnaam | Beschrijving | +| --------------------- | -------------------------------------------------------------------- | +| `job` | Alle taken die in een ArchivesSpace-instantie zijn uitgevoerd | +| `job_created_record` | Records die via achtergrondtaken zijn aangemaakt | +| `job_input_file` | Gegevens over invoerbestanden die bij achtergrondtaken zijn gebruikt | +| `job_modified_record` | Gegevens over records die via achtergrondtaken zijn gewijzigd | + +## Systeemtabellen + +Deze tabellen houden acties op de database bij (zoals bewerkingen en verwijderingen), evenals systeemgebeurtenissen, sessie- en autorisatiegegevens en databasegegevens. Gewoonlijk wordt vanuit geen enkele andere tabel naar deze tabellen verwezen. + +| Tabelnaam | Beschrijving | +| ----------------- | ------------------------------------------------------------------------------------------------------ | +| `active_edit` | Records die momenteel door een gebruiker worden bewerkt. Alleen-lezen-systeemtabel | +| `auth_db` | Authenticatiegegevens voor gebruikers. Alleen-lezen-systeemtabel | +| `deleted_records` | Records die in de afgelopen 24 uur zijn verwijderd. Alleen-lezen-systeemtabel | +| `notification` | Meldingenstroom. Alleen-lezen-systeemtabel | +| `schema_info` | Bevat de versie van het databaseschema. Alleen-lezen-systeemtabel. | +| `sequence` | De waarde komt overeen met het aantal onderliggende archiefonderdelen min 1. Alleen-lezen-systeemtabel | +| `session` | Recente sessiegegevens. Alleen-lezen-systeemtabel | +| `system_event` | Systeemgebeurtenisgegevens. Alleen-lezen-systeemtabel | + +<!-- these are subrecords --> +<!-- | subnote_metadata | +| rights_statement_pre_088 | --> + +## Ouder-kindrelaties en volgorde + +### Aan een collectiebeherende instelling gekoppelde records + +Veel hoofdrecords en ondersteunende records zijn gekoppeld aan een specifieke collectiebeherende instelling. In deze tabellen wordt de bovenliggende collectiebeherende instelling aangeduid met een vreemde sleutel die overeenkomt met de database-ID in de tabel `repository`: + +| Kolomnaam | Beschrijving | Voorbeeld | Komt voor in | +| --------- | ----------------------------------------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `repo_id` | De database-ID van de bovenliggende collectiebeherende instelling | `12` | `accession`, `archival_object`, `assessment`, `assessment_attribute_definition`, `classification`, `classification_term`, `custom_report_template`, `default_values`, `digital_object`, `digital_object_component`, `event`, `group`, `job`, `preference`, `required_fields`, `resource`, `rights_statement`, `top_container` | + +### Ouder-kindrelaties + +Hiërarchische relaties tussen andere records worden ook met vreemde sleutels vastgelegd: + +| Kolomnaam | Beschrijving | Voorbeeld | Tabellen met primaire sleutel | Komt voor in | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | +| `root_record_id` | De database-ID van het bovenliggende hoofdrecord | `4566` | `resource`, `digital_object`, `classification` | `archival_object`, `digital_object_component`, `classification_term` | +| `parent_id` | De database-ID van het directe bovenliggende record. Deze wordt gebruikt om bovenliggende records van hetzelfde type als het onderliggende record te identificeren (bijvoorbeeld twee records van archiefonderdelen). De waarde is NULL als het enige bovenliggende record het hoofdrecord is. | `1748121` | `archival_object`, `classification_term`, `digital_object_component` | `archival_object`, `classification_term`, `digital_object_component`, `note_persistent_id` | +| `parent_name` | De database-ID of URI en het recordtype van het directe bovenliggende record | `144@archival_object`, `root@/repositories/2/resources/2` | `resource`, `archival_object`, `classification`, `classification_term`, `digital_object`, `digital_object_component` | `archival_object`, `classification_term`, `digital_object_component` | + +Vanaf MySQL 8 kunt u met de volgende query recursief alle bovenliggende records van een archiefonderdeel ophalen (of alle archiefonderdelen die aan een collectie zijn gekoppeld): + +```sql +WITH RECURSIVE ao_path AS + (SELECT ao1.id + , ao1.display_string + , ao1.component_id + , ao1.parent_id + , ev.value as `ao_level` + , 1 as level + FROM archival_object ao1 + LEFT JOIN enumeration_value ev on ev.id = ao1.level_id + WHERE ao1.id = <your ao id> + <!-- to get all trees for a resource change to: WHERE ao1.root_record_id = <your root_record_id> --> + UNION ALL + SELECT ao2.id + , ao2.display_string + , ao2.component_id + , ao2.parent_id + , ev.value as `ao_level` + , ao_path.level + 1 as level + FROM ao_path + JOIN archival_object ao2 on ao_path.parent_id = ao2.id + LEFT JOIN enumeration_value ev on ev.id = ao2.level_id) + SELECT GROUP_CONCAT(CONCAT(display_string, ' ', ' (', CONCAT(UPPER(SUBSTRING(ao_level,1,1)),LOWER(SUBSTRING(ao_level,2))), ' ', IF(component_id is not NULL, CAST(component_id as CHAR), "N/A"), ')') ORDER BY level DESC SEPARATOR ' > ') as tree + FROM ao_path; + +``` + +Alle onderliggende records ophalen (MySQL 8+): + +Zowel bovenliggende als onderliggende records ophalen (MySQL 8+): + +Voer de volgende query uit om alle bovenliggende records van een record op te halen in MySQL 5.7 en ouder: + +```sql +SELECT (SELECT GROUP_CONCAT(CONCAT(display_string, ' (', ao_level, ')') SEPARATOR ' < ') as parent_path + FROM (SELECT T2.display_string as display_string + , ev.value as ao_level + FROM (SELECT @r AS _id + , @p := @r AS previous + , (SELECT @r := parent_id FROM archival_object WHERE id = _id) AS parent_id + , @l := @l + 1 AS lvl + FROM ((SELECT @r := 1749840, @p := 0, @l := 0) AS vars, + archival_object h) + WHERE @r <> 0 AND @r <> @p) AS T1 + JOIN archival_object T2 ON T1._id = T2.id + LEFT JOIN enumeration_value ev on ev.id = T2.level_id + WHERE T2.id != 1749840 + ORDER BY T1.lvl DESC) as all_parents) as p_path + , ao.display_string + , CONCAT('/repositories/', ao.repo_id, '/archival_objects/', ao.id) as uri +FROM archival_object ao +WHERE ao.id = 1749840 +``` + +Alle onderliggende records van een record ophalen (MysQL 5.7 en ouder): + +```sql + +``` + +### Volgorde + +De volgorde van records in een `resource`-, `classification`- of `digital_object`-boom wordt bepaald door het veld `position`. Dit veld wordt ook gebruikt om waarden te ordenen in de tabellen `enumeration_value` en `assessment_attribute_definition`: + +| Kolomnaam | Beschrijving | Voorbeeld | Komt voor in | +| ---------- | -------------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `position` | De positie van het archiefonderdeel onder het directe bovenliggende record | `168000` | `enumeration_value`, `assessment_attribute_definition`, `classification_term`, `digital_object_component`, `archival_object` | + +## Booleaanse velden + +Veel records en geneste records bevatten velden met gehele getallen (`0` of `1`) die overeenkomen met booleaanse waarden. + +| Booleaanse velden | Beschrijving | Komt voor in | +| -------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `publish` | | `subnote_metadata`, `file_version`, `external_document`, `accession`, `classification`, `agent_person`, `agent_family`, `agent_software`, `agent_corporate_entity`, `classification_term`, `revision_statement`, `repository`, `note`, `digital_object`, `digital_object_component`, `archival_object`, `resource` | +| `suppressed` | | `accession`, `archival_object`, `assessment_reviewer_rlshp`, `assessment_rlshp`, `classification`, `classification_creator_rlshp`, `classification_rlshp`, `classification_term`, `classification_term_creator_rlshp`, `digital_object`, `digital_object_component`, `enumeration_value`, `event`, `event_link_rlshp`, `instance_do_link_rlshp`, `linked_agents_rlshp`, `location_profile_rlshp`, `owner_repo_rlshp`, `related_accession_rlshp`, `related_agents_rlshp`, `resource`, `spawned_rlshp`, `surveyed_by_rlshp`, `top_container_housed_at_rlshp`, `top_container_link_rlshp`, `top_container_profile_rlshp` | +| `restrictions_apply` | | `accession`, `archival_object` | + +<!-- NEED TO ADD the restriction field here - the resource and dig ob recs have it --> +<!-- also add the hidden field in repo and the multiple restrictions in accession --> +<!-- I think this is good to mention because these are editable via the API but also have their own endpoints. So they are a little different. Should also mention that they are bools in the API docs. --> + +## Alleen-lezenvelden + +In veel tabellen komen verschillende door het systeem gegenereerde, alleen-lezenvelden voor. Hiertoe behoren database-ID's, tijdstempels die het aanmaken en wijzigen van records bijhouden, en velden met de gebruikersnaam van de gebruiker die elk record heeft aangemaakt en voor het laatst heeft gewijzigd. + +| Meest voorkomende alleen-lezenvelden | Beschrijving | +| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` (primary key) | Database-ID voor elk record | +| `system_mtime` | Het laatste tijdstip waarop het record door het systeem is gewijzigd | +| `created_by` | De gebruiker die een record heeft aangemaakt | +| `last_modified_by` | De gebruiker die een record voor het laatst heeft gewijzigd | +| `user_mtime` | Het tijdstip waarop een gebruiker een record voor het laatst heeft gewijzigd | +| `create_time` | Het tijdstip waarop een record is aangemaakt | +| `lock_version` | Dit veld wordt telkens verhoogd wanneer een record wordt bijgewerkt. Zo kunnen updates worden bijgehouden en bijna gelijktijdige bewerkingen door verschillende gebruikers worden beheerd. | +| `json_schema_version` | De versie van het JSON-schema | +| `aspace_relationship_position` | De positie van een gekoppeld record in een lijst met andere gekoppelde records | +| `is_slug_auto` | Een booleaanse waarde die aangeeft of een slug automatisch is gegenereerd | +| `system_generated` | Een booleaanse waarde die aangeeft of een veld door het systeem is gegenereerd | +| `display_string` | Een door het systeem gegenereerd veld dat de titel- en datumvelden van een record van een archiefonderdeel samenvoegt | + +**OPMERKING**: in tabellen met geneste records kunnen deze velden onverwachte gegevens bevatten. Omdat geneste records bij elke opslag van een hoofdrecord of ondersteunend record worden verwijderd en opnieuw aangemaakt, worden ook hun aanmaak- en wijzigingstijdstippen opnieuw ingesteld. Deze geven dus niet de oorspronkelijke aanmaakdatum van het geneste record zelf weer. Voor collecties registreert de tijdstempel alleen wanneer de collectie zelf is gewijzigd, niet wanneer een van de componenten voor het laatst is gewijzigd. + +<!-- ## Querying the ArchivesSpace Database --> diff --git a/src/content/docs/nl/architecture/directories.md b/src/content/docs/nl/architecture/directories.md new file mode 100644 index 0000000..9d45937 --- /dev/null +++ b/src/content/docs/nl/architecture/directories.md @@ -0,0 +1,90 @@ +--- +title: Mappenstructuur +description: Korte beschrijvingen van de verschillende mappen in de codebase van ArchivesSpace. +--- + +ArchivesSpace bestaat uit verschillende componenten die in afzonderlijke mappen zijn ondergebracht. + +## \_yard + +Deze map bevat de code voor het documentatiehulpmiddel dat wordt gebruikt om de GitHub.io-pagina's hier te genereren: http://archivesspace.github.io/archivesspace/ + +## backend + +Deze map bevat de code voor de database en de API. + +## build + +Deze map bevat de code voor het bouwen van de applicatie. De map bevat de opdrachten voor het uitvoeren van de ontwikkelservers en testsuites en voor het bouwen van de releases. ArchivesSpace is een JRuby-applicatie en voor het bouwen ervan wordt Apache Ant gebruikt. + +## clustering + +Deze map bevat code die kan worden gebruikt bij het clusteren van een ArchivesSpace-installatie. + +## common + +Deze map bevat code die in twee of meer componenten wordt gebruikt. De map bevat configuratieopties, databaseschema's en migraties, en vertaalbestanden. + +## contribution_files + +Deze map bevat de documentatie en pdf-bestanden van de licentieovereenkomsten. + +## docs + +Deze map bevat documentatiebestanden die in een release worden opgenomen. + +## frontend + +Deze map bevat de Ruby on Rails-applicatie voor de medewerkersinterface. + +## indexer + +Deze map bevat de Sinatra-applicatie voor het indexeerproces. + +## jmeter + +Deze map bevat een voorbeeld dat kan worden gebruikt om Apache JMeter in te stellen voor het uitvoeren van belastingtests op de functionele werking en het meten van prestaties. + +## launcher + +Deze map bevat de code die een ArchivesSpace-applicatie start, herstart en stopt. + +## oai + +Deze map bevat de OAI-PMH Sinatra-applicatie. + +## plugins + +Deze map bevat plug-ins die worden ondersteund door het ArchivesSpace Program Team. + +## proxy + +Deze map bevat de Docker-proxycode. + +## public + +Deze map bevat de Ruby on Rails-applicatie voor de publieke gebruikersinterface. + +## reports + +Deze map bevat de rapportagecode. + +## scripts + +Deze map bevat scripts die nodig zijn voor het bouwen, implementeren en voor andere taken in ArchivesSpace. + +## selenium + +Deze map bevat de Selenium-tests. + +## solr + +Deze map bevat de Solr-code. + +## stylesheets + +Deze map bevat XSL-stylesheets die door ArchivesSpace worden gebruikt. + +## supervisord + +Deze map bevat een hulpmiddel dat kan worden gebruikt om de ontwikkelservers uit te voeren. diff --git a/src/content/docs/nl/architecture/frontend.md b/src/content/docs/nl/architecture/frontend.md new file mode 100644 index 0000000..f43ffd2 --- /dev/null +++ b/src/content/docs/nl/architecture/frontend.md @@ -0,0 +1,7 @@ +--- +title: Medewerkersinterface +--- + +Dit document geeft een overzicht van de onderdelen van de codebase van ArchivesSpace die de frontend (medewerkersinterface) aansturen. Raadpleeg voor informatie over het gebruik van de medewerkersinterface van ArchivesSpace het [Helpcentrum van ArchivesSpace](https://archivesspace.atlassian.net/wiki/spaces/ArchivesSpaceUserManual/overview) (alleen toegankelijk voor leden van ArchivesSpace). + +> Aanvullende documentatie nodig diff --git a/src/content/docs/nl/architecture/index.md b/src/content/docs/nl/architecture/index.md new file mode 100644 index 0000000..39a1e1c --- /dev/null +++ b/src/content/docs/nl/architecture/index.md @@ -0,0 +1,26 @@ +--- +title: Architectuur en componenten +description: Beknopte beschrijving van de interactie tussen de verschillende onderdelen van ArchivesSpace, met links naar elke sectie. +--- + +ArchivesSpace is onderverdeeld in verschillende componenten: de backend, die +de belangrijkste werkprocessen en gegevenstypen van het systeem via een +REST API beschikbaar stelt, een medewerkersinterface, een publieke +gebruikersinterface en een zoeksysteem dat bestaat uit Solr en een +indexeerproces. + +Deze componenten wisselen JSON-gegevens met elkaar uit. Het formaat van deze +gegevens wordt gedefinieerd door een klasse met de naam JSONModel. + +- [Overzicht](./overview) +- [JSONModel -- een gevalideerd ArchivesSpace-record](./jsonmodel) +- [De backend van ArchivesSpace](./backend) +- [De medewerkersinterface van ArchivesSpace](./frontend) +- [Achtergrondtaken](./jobs) +- [Zoekindexering](./search) +- [De publieke gebruikersinterface van ArchivesSpace](./public) +- [OAI-PMH-interface](./oai-pmh) +- [API](./api) +- [Database](./database) +- [Mappenstructuur](./directories) +- [Afhankelijkheden](./languages) diff --git a/src/content/docs/nl/architecture/jobs.md b/src/content/docs/nl/architecture/jobs.md new file mode 100644 index 0000000..1c0ccb7 --- /dev/null +++ b/src/content/docs/nl/architecture/jobs.md @@ -0,0 +1,130 @@ +--- +title: Achtergrondtaken +description: Beschrijft langlopende processen in ArchivesSpace, ook wel achtergrondtaken genoemd, en hoe deze zijn opgebouwd met typen, uitvoerders en schema's. Bevat ook aanvullende richtlijnen voor het gelijktijdig uitvoeren van taken en het toevoegen van een nieuw taaktype met een plug-in. +--- + +ArchivesSpace biedt een mechanisme om langlopende processen asynchroon uit te +voeren. Deze processen worden `Background Jobs` genoemd. + +## Taken beheren in de medewerkersinterface + +Het menu `Create` bevat de optie `Background Job` met een submenu met typen +achtergrondtaken waarvoor de huidige gebruiker toestemming heeft. (Zie +hieronder voor meer informatie over taakmachtigingen en verborgen taken.) Als +de gebruiker een van deze opties selecteert, wordt een formulier geopend om de +eventuele benodigde parameters voor de taak in te voeren en deze vervolgens aan +te maken. + +Wanneer een taak wordt aangemaakt, wordt deze in de `Background Job Queue` +geplaatst. Taken in de wachtrij worden uitgevoerd in de volgorde waarin ze zijn +aangemaakt. (Zie hieronder voor meer informatie over meerdere threads en +gelijktijdige taken.) + +Het menu `Browse` bevat de optie `Background Jobs`. Hiermee opent de gebruiker +een lijst met taken, ingedeeld op status. De gebruiker kan vervolgens de +details van een taak bekijken en deze annuleren als die daarvoor toestemming +heeft. + +## Machtigingen + +Een gebruiker moet de machtiging `create_job` hebben om een taak aan te maken. +Deze machtiging is standaard opgenomen in de groep +`repository_basic_data_entry`. + +Een gebruiker moet de machtiging `cancel_job` hebben om een taak te annuleren. +Deze machtiging is standaard opgenomen in de groep `repository_managers`. + +Wanneer een taakuitvoerder wordt geregistreerd, kan deze aanvullende +machtigingen voor het aanmaken en annuleren opgeven. (Zie hieronder voor meer +informatie.) + +## Typen, uitvoerders en schema's + +Elke taak heeft een type en elk type heeft een geregistreerde uitvoerder om +taken van dat type uit te voeren, en een JSONModel-schema waarin de parameters +worden gedefinieerd. + +#### Geregistreerde taakuitvoerders + +Alle taken van een type worden verwerkt door een geregistreerde `JobRunner`. +De klassen van taakuitvoerders staan hier: + +``` +backend/app/lib/job_runners/ +``` + +Het is mogelijk om aanvullende taakuitvoerders te definiëren in een plug-in. +(Zie hieronder voor meer informatie over plug-ins.) + +Een klasse voor taakuitvoerders moet een subklasse zijn van `JobRunner`, zich +registreren voor het uitvoeren van een of meer taaktypen en een methode +`#run` implementeren voor de taken die deze afhandelt. + +Wanneer een taakuitvoerder zich registreert voor een taaktype, kan deze enkele +opties instellen: + +- `:hidden` + - Standaardwaarde: `false` + - Als deze optie is ingesteld, wordt dit taaktype niet weergegeven in de lijst met beschikbare taaktypen. +- `:run_concurrently` + - Standaardwaarde: `false` + - Als deze optie is ingesteld op true, kan meer dan één taak van dit type tegelijkertijd worden uitgevoerd. +- `:create_permissions` + - Standaardwaarde: `[]` + - Een machtiging of lijst met machtigingen die nodig zijn naast `create_job` om taken van dit type aan te maken. +- `:cancel_permissions` + - Standaardwaarde: `[]` + - Een machtiging of lijst met machtigingen die nodig zijn naast `cancel_job` om taken van dit type te annuleren. + +Zie de superclass `JobRunner` voor meer informatie over het definiëren van een +taakuitvoerder: + +``` +backend/app/lib/job_runner.rb +``` + +#### JSONModel-schema's + +Voor een taaktype is ook een JSONModel-schema nodig dat de parameters +definieert voor het uitvoeren van een taak van dat type. De naam van het schema +moet overeenkomen met het type waarvoor de uitvoerder zich registreert. +Bijvoorbeeld: + +``` +common/schemas/import_job.rb +``` + +Dit schema voor `JSONModel(:import_job)` definieert de parameters voor het +uitvoeren van een taak van het type `import_job`. + +## Gelijktijdigheid + +ArchivesSpace kan zo worden geconfigureerd dat er meer dan één achtergrondtaak +tegelijk wordt uitgevoerd. Standaard zijn er twee threads beschikbaar om +achtergrondtaken uit te voeren. De configuratie ziet er als volgt uit: + +``` +AppConfig[:job_thread_count] = 2 +``` + +De `BackgroundJobQueue` start dit aantal threads bij het opstarten. Deze +threads controleren vervolgens op taken in de wachtrij en voeren deze uit. + +Wanneer een taakuitvoerder zich registreert, kan deze een optie met de naam +`:run_concurrently` instellen. Deze is standaard `false`. Als de optie is +ingesteld op `false`, voert een taakthread geen taak uit als er al een taak van +hetzelfde type wordt uitgevoerd. De taak blijft in de wachtrij staan en wordt +uitgevoerd zodra er geen taken van dat type meer actief zijn. + +Als de optie is ingesteld op `true`, wordt een taak uitgevoerd zodra deze +vooraan in de wachtrij komt, ongeacht of er al een taak van hetzelfde type +wordt uitgevoerd. + +## Plug-ins + +Het is mogelijk om met een plug-in een nieuw taaktype toe te voegen. ArchivesSpace +bevat een plug-in die laat zien hoe dit werkt: + +``` +plugins/jobs_example +``` diff --git a/src/content/docs/nl/architecture/jsonmodel.md b/src/content/docs/nl/architecture/jsonmodel.md new file mode 100644 index 0000000..e0d6b01 --- /dev/null +++ b/src/content/docs/nl/architecture/jsonmodel.md @@ -0,0 +1,78 @@ +--- +title: JSONModel +description: Beschrijft de regels en structuur achter de JSONModel-klasse, die de regels voor verschillende typen archiefrecords uitdrukt. JSONModel-instanties zijn het primaire mechanisme voor gegevensuitwisseling van ArchivesSpace. +--- + +Het ArchivesSpace-systeem beheert verschillende typen archiefrecords. Elk record kan worden uitgedrukt als een reeks geneste sleutel-waardeparen. Bij elk recordtype hoort een aantal regels die bepalen wanneer een record van dat type geldig is: + +- sommige velden zijn verplicht, andere optioneel +- sommige velden kunnen alleen bepaalde gegevenstypen bevatten +- sommige velden kunnen alleen waarden uit een beperkte verzameling bevatten +- sommige velden zijn afhankelijk van andere velden +- sommige recordtypen kunnen binnen andere recordtypen worden genest +- sommige recordtypen kunnen door middel van een hiërarchie aan andere recordtypen zijn gerelateerd +- sommige recordtypen vormen samen met andere recordtypen een relatiegraaf + +De klasse JSONModel biedt een gemeenschappelijke taal om deze regels uit te drukken, die alle onderdelen van de applicatie kunnen delen. Voor elk recordtype in het systeem bestaat er een exemplaar van de klasse JSONModel, dus: + +```ruby +JSONModel(:digital_object) +``` + +is een klasse die weet hoe ze een hash met eigenschappen moet verwerken en controleren of die eigenschappen voldoen aan de specificatie van een digitaal object: + +```ruby +JSONModel(:digital_object).from_hash(myhash) +``` + +Als de validatie slaagt, wordt een nieuw exemplaar van JSONModel(:digital_object) geretourneerd. Dit exemplaar biedt toegangsmethoden om de waarden op te vragen en mogelijkheden om heen en weer om te zetten tussen JSON-documenten en gewone Ruby-hashes: + +```ruby +obj = JSONModel(:digital_object).from_hash(myhash) + +obj.title # or obj['title'] +obj.title = 'a new title' # or obj['title'] = 'a new title' + +obj.\_exceptions # Validates the object and reports any issues + +obj.to_hash # Turn the JSONModel object back into a regular hash +obj.to_json # Serialize the JSONModel object into JSON +``` + +Een groot deel van de validatie die JSONModel uitvoert, wordt verzorgd door de JSON-schemadefinities in de map `common/schemas`. JSON-schema's bieden een standaardmanier om vast te leggen welke eigenschappen een record wel en niet mag bevatten, evenals de typen en andere beperkingen daarvan. ArchivesSpace gebruikt deze schema's om de validatieregels voor elk recordtype op een declaratieve en relatief zelfdocumenterende manier vast te leggen. + +JSONModel-instanties zijn het primaire mechanisme voor gegevensuitwisseling van het ArchivesSpace-systeem: de API gebruikt en genereert JSONModel-instanties (in JSON-indeling), en een groot deel van het werk van de gebruikersinterface bestaat uit het omzetten van formulieren naar JSONModel-instanties en deze naar de backend versturen. + +## JSONModel::Client -- Een API op hoog niveau voor interactie met de ArchivesSpace-backend + +Om veel werk met HTTP-verzoeken te besparen, bevat ArchivesSpace een module met de naam JSONModel::Client die veelgebruikte CRUD-bewerkingen vereenvoudigt. U hoeft deze module alleen op te nemen door bij het initialiseren van JSONModel een extra parameter mee te geven: + +```ruby +JSONModel::init(:client_mode => true, :url => @backend_url) +include JSONModel +``` + +Als u met één collectiebeherende instelling werkt, is het handig om deze als standaard in te stellen voor volgende acties: + +```ruby +JSONModel.set_repository(123) +``` + +Daarna zijn er verschillende extra JSONModel-methoden beschikbaar: + +```ruby +# As before, get a paginated list of accessions (GET) +JSONModel(:accession).all(:page => 1) + +# Create a new accession (POST) +obj = JSONModel(:accession).from_hash(:title => "A new accession", ...) +obj.save + +# Get a single accession by ID (GET) +obj = JSONModel(:accession).find(123) + +# Update an existing accession (POST) +obj = JSONModel(:accession).find(123) +obj.title = "Updated title" +obj.save +``` diff --git a/src/content/docs/nl/architecture/languages.md b/src/content/docs/nl/architecture/languages.md new file mode 100644 index 0000000..50e5716 --- /dev/null +++ b/src/content/docs/nl/architecture/languages.md @@ -0,0 +1,18 @@ +--- +title: Afhankelijkheden +description: Beschrijft de technische stack van de applicatie, waaronder programmeertalen en platforms. +--- + +De onderdelen van ArchivesSpace zijn gebouwd met verschillende programmeertalen, platforms en aanvullende opensourceprojecten. + +## Programmeertalen + +De gebruikte programmeertalen zijn Java, JRuby, Ruby, JavaScript en CSS. + +## Platforms + +De backend, OAI-harvester en indexeerproces zijn Sinatra-apps. De medewerkersinterface en publieke gebruikersinterface zijn Ruby on Rails-apps. + +## Aanvullende opensourceprojecten + +De database die standaard wordt meegeleverd en voor tests wordt gebruikt, is Apache Derby. Voor productie wordt MySQL aanbevolen. Het indexeerplatform is Apache Solr. diff --git a/src/content/docs/nl/architecture/oai-pmh.md b/src/content/docs/nl/architecture/oai-pmh.md new file mode 100644 index 0000000..1a7a98b --- /dev/null +++ b/src/content/docs/nl/architecture/oai-pmh.md @@ -0,0 +1,132 @@ +--- +title: OAI-PMH-interface +description: Beschrijft hoe OAI-PMH is ingesteld in ArchivesSpace en hoe u gegevens met OAI-PMH kunt harvesten, met voorbeeldlinks en aanvullende informatie. +--- + +Met de OAI-PMH-responder van ArchivesSpace kunnen andere systemen records +harvesten op basis van uw instellingen. + +Standaard draait de OAI-PMH-interface op poort 8082. Een voorbeeldpagina voor +verzoeken is beschikbaar op http://localhost:8082/sample. (Zorg ervoor dat u +AppConfig[:oai_proxy_url] correct hebt ingesteld om deze pagina te openen.) + +Het systeem reageert op een aantal standaard OAI-PMH-verzoeken, +waaronder GetRecord, Identify, ListIdentifiers, ListMetadataFormats, +ListRecords en ListSets. Niet-gepubliceerde en onderdrukte records en elementen +worden niet opgenomen in OAI-PMH-reacties. + +Voor sommige reacties is de URL-parameter metadataPrefix vereist. Er zijn vijf +verschillende metadataformaten beschikbaar: + +- EAD -- oai_ead (collecties in EAD) +- Dublin Core -- oai_dc (archiefonderdelen en collecties in Dublin Core) +- uitgebreide DCMI Terms -- oai_dcterms (archiefonderdelen en collecties in DCMI Metadata Terms-formaat) +- MARC -- oai_marc (archiefonderdelen en collecties in MARC) +- MODS -- oai_mods (archiefonderdelen en collecties in MODS) + +De EAD-reactie voor collecties en de MARC-reactie voor collecties en +archiefonderdelen gebruiken de toewijzingen uit de ingebouwde exportfunctie +voor collecties. U kunt de EAD-opties voor OAI configureren in +`AppConfig[:oai_ead_options]`. De DC-, DCMI Terms- en MODS-reacties voor +collecties en archiefonderdelen gebruiken door de gemeenschap voorgestelde +toewijzingen. + +OAI-opties worden ingesteld in [`AppConfig`](https://docs.archivesspace.org/customization/configuration/#oai-configuration-options) en via de medewerkersinterface (menu Systeem > OAI-PMH-instellingen beheren). + +Hier volgen enkele voorbeeld-URL's en andere informatie over deze verzoeken: + +**GetRecord** – vereist een record-ID en metadataPrefix +Tot en met ArchivesSpace v3.5.1 hebben OAI-identificatoren deze indeling: + +`http://localhost:8082/oai?verb=GetRecord&identifier=oai:archivesspace//repositories/2/resources/138&metadataPrefix=oai_ead` + +Vanaf ArchivesSpace v4.0.0 hebben OAI-identificatoren de nieuwe indeling (let +op de dubbele punt na het naamruimtegedeelte `oai:archivesspace` van de +identificator): + +`http://localhost:8082/oai?verb=GetRecord&identifier=oai:archivesspace:/repositories/2/resources/138&metadataPrefix=oai_ead` + +Zie ook: https://github.com/code4lib/ruby-oai/releases/tag/v1.0.0 + +**Identify** + +`http://localhost:8082/oai?verb=Identify` + +**ListIdentifiers** – vereist een metadataPrefix + +`http://localhost:8082/oai?verb=ListIdentifiers&metadataPrefix=oai_dc` + +**ListMetadataFormats** + +`http://localhost:8082/oai?verb=ListMetadataFormats` + +**ListRecords** – vereist een metadataPrefix + +`http://localhost:8082/oai?verb=ListRecords&metadataPrefix=oai_dcterms` + +**ListSets** + +`http://localhost:8082/oai?verb=ListSets` + +Als u de OAI-PMH-server van ArchivesSpace harvest zonder een set op te geven, +levert dit alle gepubliceerde records uit alle collectiebeherende instellingen +op. + +U kunt vooraf gedefinieerde sets openen met de parameter set. Als u records uit +sets wilt ophalen, neemt u een set-parameter en de DC-metadataPrefix op in de +URL, bijvoorbeeld "&set=collection&metadataPrefix=oai_dc". Deze sets kunnen +afkomstig zijn van geconfigureerde sets zoals hierboven beschreven, of van de +volgende beschrijvingsniveaus: + +- Klasse -- class +- Collectie -- collection +- Verzamelbeschrijving -- file +- Archief -- fonds +- Aanvraagbare eenheid -- item +- Ander niveau -- otherlevel +- Recordgroep -- recordgrp +- Rubriek -- series +- Deelarchief -- subfonds +- Subgroep -- subgrp +- Subrubriek -- subseries + +Naast sets op basis van beschrijvingsniveau kunt u sets definiëren op basis van +codes van collectiebeherende instellingen en/of sponsors. Deze instellingen +zijn beschikbaar in de applicatie, in het onderdeel OAI-PMH-instellingen +beheren. + +De interface implementeert tokens voor voortzetting om resultaten te pagineren. +Als voorbeeld gebruikt u de volgende URL-indeling om de resultaten van een +ListRecords-verzoek over meerdere pagina's op te halen: + +`http://localhost:8082/oai?verb=ListRecords&metadataPrefix=oai_ead` + +met het token voor voortzetting: + +`http://localhost:8082/oai?verb=ListRecords&resumptionToken=eyJtZXRhZGF0YV9wcmVmaXgiOiJvYWlfZWFkIiwiZnJvbSI6IjE5NzAtMDEtMDEgMDA6MDA6MDAgVVRDIiwidW50aWwiOiIyMDE3LTA3LTA2IDE3OjEwOjQxIFVUQyIsInN0YXRlIjoicHJvZHVjaW5nX3JlY29yZHMiLCJsYXN0X2RlbGV0ZV9pZCI6MCwicmVtYWluaW5nX3R5cGVzIjp7IlJlc291cmNlIjoxfSwiaXNzdWVfdGltZSI6MTQ5OTM2MTA0Mjc0OX0=` + +Opmerking: gebruik metadataPrefix niet wanneer u een resumptionToken gebruikt. + +De OAI-PMH-server van ArchivesSpace ondersteunt blijvende +verwijderingsmeldingen. Harvesters ontvangen daardoor bericht over records die +zijn verwijderd sinds hun vorige opvraging. + +Gemengde inhoud wordt verwijderd uit de velduitvoer van Dublin Core, dcterms, +MARC en MODS in de OAI-PMH-reactie (bijvoorbeeld: een notitie over omvang en +inhoud die is toegewezen aan een DC-beschrijvingsveld bevat geen `<p>`, +`<abbr>`, `<address>`, `<archref>`, `<bibref>`, `<blockquote>`, `<chronlist>`, +`<corpname>`, `<date>`, `<emph>`, `<expan>`, `<extptr>`, `<extref>`, +`<famname>`, `<function>`, `<genreform>`, `<geogname>`, `<lb>`, `<linkgrp>`, +`<list>`, `<name>`, `<note>`, `<num>`, `<occupation>`, `<origination>`, +`<persname>`, `<ptr>`, `<ref>`, `<repository>`, `<subject>`, `<table>`, +`<title>`, `<unitdate>` of `<unittitle>`). + +Records op het niveau van archiefonderdelen bevatten overgenomen gegevens van +hogere niveaus in de hiërarchische structuur van de archieftoegang. De +overerving van elementen wordt bepaald door de systeemconfiguratie van de +instelling (aanpasbaar in het bestand `config/config.rb`), zoals +geïmplementeerd voor de publieke gebruikersinterface. + +Vanaf 2.7.0 is het mogelijk om interne of externe Archival Resource Keys (ARK's) +te gebruiken in exports of bij het harvesten via OAI-PMH voor collecties en +archiefonderdelen. diff --git a/src/content/docs/nl/architecture/overview.md b/src/content/docs/nl/architecture/overview.md new file mode 100644 index 0000000..8a1f91a --- /dev/null +++ b/src/content/docs/nl/architecture/overview.md @@ -0,0 +1,15 @@ +--- +title: Architectuuroverzicht +description: De belangrijkste onderdelen van ArchivesSpace en hoe deze met elkaar en met de eindgebruikers communiceren. +--- + +ArchivesSpace is onderverdeeld in verschillende onderdelen: + +- de backend, die de belangrijkste werkprocessen en gegevenstypen van het systeem beschikbaar maakt via een REST API, +- een medewerkersinterface, +- een publieke gebruikersinterface, +- een zoeksysteem, bestaande uit Solr en een indexeerproces. + +Deze onderdelen wisselen JSON-gegevens met elkaar uit. Het formaat van deze gegevens wordt gedefinieerd door een klasse met de naam JSONModel. + +![Architectuur van ArchivesSpace](archivesspace_architecture.svg) diff --git a/src/content/docs/nl/architecture/public.md b/src/content/docs/nl/architecture/public.md new file mode 100644 index 0000000..e14eb8d --- /dev/null +++ b/src/content/docs/nl/architecture/public.md @@ -0,0 +1,215 @@ +--- +title: Publieke gebruikersinterface +description: Informatie over configuratieopties voor de publieke gebruikersinterface (PUI) van ArchivesSpace en over de overerving van gegevens in records. +--- + +De publieke gebruikersinterface (PUI) van ArchivesSpace biedt een publieke +interface voor uw ArchivesSpace-collecties. Bij een standaardinstallatie van +ArchivesSpace draait deze op poort `:8081`. + +## Configuratie + +De PUI wordt geconfigureerd met het standaardbestand `config.rb` van +ArchivesSpace. De relevante configuratieopties hebben het voorvoegsel +`:pui_`. + +Zie het bestand +[`https://github.com/archivesspace/archivesspace/blob/master/common/config/config-defaults.rb`](https://github.com/archivesspace/archivesspace/blob/master/common/config/config-defaults.rb) +voor de volledige lijst met beschikbare opties. + +### Privacy van bezoekers + +De sleutel **:block_referrer** in het configuratiebestand (standaard: +**true**) bepaalt of de volledige verwijzende URL wordt verzonden wanneer een +gebruiker op een link klikt naar een website buiten het webdomein van uw +ArchivesSpace-instantie. Dit beschermt uw bezoekers tegen tracking door die +website. + +### Hoofdnavigatiemenu + +U kunt ervoor kiezen een of meer links in het hoofdmenu (horizontale +navigatie) niet weer te geven, globaal of per collectiebeherende instelling +als u meer dan één collectiebeherende instelling hebt. U beheert dit met de +opties `:pui_hide` in het bestand `config/config.rb`. + +### Aanpassing van collectiebeherende instellingen + +#### Weergave van "badges" op de pagina van de collectiebeherende instelling + +U kunt globaal of per collectiebeherende instelling configureren welke +badges op de pagina van de collectiebeherende instelling worden weergegeven. +Hiervoor kunt u ook de configuratieopties `:pui_hide` gebruiken. + +### Activering van de knop "Aanvragen" op pagina's van archiefobjecten + +U kunt globaal of per collectiebeherende instelling configureren of de knop +"Aanvragen" actief is op pagina's van archiefobjecten zonder bijbehorende +topcontainer. U kunt dit aanpassen met de configuratieoptie +`:pui_requests_permitted_for_containers_only`. + +### I18n + +U kunt de tekst en labels van de PUI wijzigen door de locale-bestanden in de +map `locales/public` van uw ArchivesSpace-distributie te bewerken. + +### Een "inleidende alinea" toevoegen + +U kunt ook de hierboven beschreven aangepaste `.yml`-bestanden gebruiken om +een aangepaste "inleidende alinea" (inclusief HTML-markup) toe te voegen aan +een of meer van uw collectiebeherende instellingen. Gebruik hiervoor de code +van de collectiebeherende instelling als sleutel. + +Als uw collectiebeherende instelling `My Wonderful Repository` bijvoorbeeld +de code `MWR` heeft, ziet u mogelijk het volgende in het aangepaste bestand +`en.yml`: + +```yaml +en: + repos: + mwr: + lead_graph: This <strong>amazing</strong> repository has so much to offer you! +``` + +## Ontwikkeling + +Voor een ontwikkelserver volgt de PUI hetzelfde patroon als de rest van +ArchivesSpace. Ga vanuit uw checkout van ArchivesSpace als volgt te werk: + +```shell + # Prepare all dependencies + build/run bootstrap + + # Run the backend development server (and Solr) + build/run backend:devserver + + # Run the indexer + build/run indexer + + # Finally, run the PUI itself + build/run public:devserver +``` + +## Overerving + +### Drie opties voor overerving: + +- Een veldwaarde rechtstreeks overerven – het record heeft geen waarde voor + het veld en u wilt dat de veldwaarde wordt weergegeven alsof deze bij het + record zelf hoort [verwijder de commentaarmarkering bij het + overervingsgedeelte in de configuratie en stel het gewenste veld + (property) in op inherit_directly => true] +- Een veldwaarde indirect overerven – het record heeft geen waarde voor het + veld en u wilt de waarde van een hoger niveau weergeven, voorafgegaan door + een aantekening die aangeeft dat de waarde van dat hogere niveau afkomstig + is, zoals "Uit de collectie" [verwijder de commentaarmarkering bij het + overervingsgedeelte in de configuratie en stel het gewenste veld + (property) in op inherit_directly => false] +- Het veld helemaal niet weergeven – het record heeft zelf geen waarde voor + het veld en u wilt het helemaal niet weergeven [verwijder de + commentaarmarkering bij het overervingsgedeelte in de configuratie en + verwijder de regels voor het gewenste veld (property)] + +### Overerving van beschrijvingselementen + +Met de nieuwe versie van de publieke interface kunnen alle +beschrijvingselementen worden overgeërfd. Dit is vooral belangrijk omdat de +PUI elk beschrijvingsniveau op een eigen webpagina weergeeft. + +Elk beschrijvingselement kan rechtstreeks of indirect worden overgeërfd. Als +een element rechtstreeks wordt overgeërfd, wordt het weergegeven alsof het +element in de medewerkersinterface rechtstreeks aan dat archiefobject is +gekoppeld. Als een element indirect wordt overgeërfd, wordt het op een lager +beschrijvingsniveau in de publieke interface weergegeven, voorafgegaan door +een aantekening met het niveau van de voorouder waarvan het element is +overgeërfd (bijvoorbeeld "Uit de collectie" of "Uit de subserie"). In beide +gevallen wordt het element alleen overgeërfd als het ontbreekt in het +archiefobject. Bovendien wordt het beschrijvingselement alleen overgeërfd +van de dichtstbijzijnde voorouder. Als een collectierecord op het hoogste +niveau bijvoorbeeld een aantekening over openbaarheidsbeperkingen heeft en een +reeksrecord op een lager niveau ook een aantekening over openbaarheidsbeperkingen +heeft, maar het onderliggende subserierecord geen aantekening over +openbaarheidsbeperkingen heeft, erft het subserierecord alleen de aantekening +over openbaarheidsbeperkingen van het bovenliggende reeksrecord. + +Daarnaast kan het ID-nummer in ArchivesSpace, dat in ISAD-G en DACS beter +bekendstaat als de referentiecode, op samengestelde wijze worden +overgeërfd. Bij samengestelde overerving worden de overgeërfde onderdelen +achter elkaar geplaatst. Een ID-nummer op itemniveau kan er bijvoorbeeld zo +uitzien: MSS 1. Reeks A. Item 1. Hoewel het archiefobject het ID-nummer +"Item 1" heeft, wordt een samengesteld ID-nummer weergegeven omdat het +reeksrecord waartoe het item behoort het ID-nummer "Reeks A" heeft, en die +reeks op haar beurt behoort tot een collectierecord met het ID-nummer "MSS +1". + +Standaard zijn de volgende elementen ingesteld voor overerving: + +- Titel (rechtstreekse overerving) +- ID-nummer (indirecte overerving); standaard wordt het ID-nummer alleen + overgeërfd van bovenliggende archiefobjecten en NIET van het ID-nummer van + de collectie. + +Daarnaast wordt aanbevolen dit element op samengestelde wijze over te erven, +nadat is bepaald of het beschrijvingsniveau wel of niet als onderdeel van het +ID-nummer moet worden weergegeven. Dit hangt af van de lokale +gegevensinvoerpraktijken. + +- Taalcode (rechtstreekse overerving, maar deze wordt momenteel nergens in + de interface weergegeven; mogelijk kan deze later worden gebruikt voor + facetten) +- Datums (rechtstreekse overerving) +- Omvang (indirecte overerving) +- Archiefvormer (indirecte overerving) +- Aantekening over openbaarheidsbeperkingen (rechtstreekse overerving) +- Toelichting op inhoud (indirecte overerving) +- Aantekening over de taal van het materiaal (indirecte overerving; er lijkt + momenteel echter een fout te zijn waardoor deze aantekeningen altijd als + rechtstreeks overgeërfd worden weergegeven. Zie AR-XXXX.) + +Zie https://github.com/archivesspace/archivesspace/blob/master/common/config/config-defaults.rb#L296-L396 voor meer informatie en voorbeelden. + +Een video-overzicht van deze functie, opgenomen voordat de ontwikkeling was +afgerond, is ook online beschikbaar: +https://vimeo.com/195457286 + +Samengestelde overerving van ID-nummers + +Als u de volgende drie regels aan uw configuratiebestand toevoegt, +ArchivesSpace opnieuw start en vervolgens het indexeerproces uw records opnieuw +laat indexeren, kunt u samengestelde ID-nummers gebruiken: + +```ruby +AppConfig[:record_inheritance][:archival_object][:composite_identifiers] = { +:include_level => true, +:identifier_delimiter => '. ' +} +``` + +Voeg de volgende configuratie toe om extra velden, zoals onderwerpen, toe te +voegen: + +```ruby +inherited_fields_extras = [ + { + code: 'subjects', + property: 'subjects', + inherit_if: proc { |json| json.select { |j| true } }, + inherit_directly: false, + }, +] +``` + +Als u `include_level` instelt op `true`, wordt het niveau van het +archiefobject opgenomen in het ID-nummer, zodat u die informatie niet hoeft +te herhalen. Als het beschrijvingsniveau bijvoorbeeld "Reeks" is, het +ID-nummer van het archiefobject "1" is en het ID-nummer van de bovenliggende +collectie "MSS 1" is, wordt het samengestelde ID-nummer op het niveau van +reeks 1 en bij alle onderliggende records weergegeven als "MSS 1. Reeks 1". +Als u `include_level` instelt op `false`, wordt het weergegeven als "MSS 1. +1". + +### Licentie + +ArchivesSpace wordt uitgebracht onder de [Educational Community License, +version 2.0](http://opensource.org/licenses/ecl2.php). Zie het bestand +[COPYING](https://github.com/archivesspace/archivesspace/blob/master/COPYING) +voor meer informatie. diff --git a/src/content/docs/nl/architecture/search.md b/src/content/docs/nl/architecture/search.md new file mode 100644 index 0000000..f809eb2 --- /dev/null +++ b/src/content/docs/nl/architecture/search.md @@ -0,0 +1,46 @@ +--- +title: Zoekindexering +description: Uitleg over hoe ArchivesSpace Solr gebruikt om toegevoegde, bijgewerkte en verwijderde records te indexeren en over de verschillen tussen periodieke en realtime-indexering van records. +--- + +ArchivesSpace gebruikt Solr om de volledige tekst te doorzoeken. Wanneer de +backend records toevoegt, bijwerkt of verwijdert, worden de overeenkomstige +wijzigingen ook in de Solr-index aangebracht, zodat beide (ongeveer) +gesynchroniseerd blijven. + +Het indexeerproces zorgt ervoor dat de backend en Solr synchroon blijven. Dit +afzonderlijke proces draait op de achtergrond en houdt wijzigingen in records +in de gaten. Het indexeerproces werkt gelijktijdig in twee modi: + +- De periodieke modus vraagt de backend op om een lijst op te halen van records + die sinds de vorige controle zijn toegevoegd, gewijzigd of verwijderd. Deze + wijzigingen worden doorgevoerd in de Solr-index. Dit gebeurt doorgaans elke + 30 tot 60 seconden en is instelbaar. +- De realtime-modus reageert op wijzigingen zodra die plaatsvinden en voert + wijzigingen in Solr door zodra ze in de backend zijn doorgevoerd. Deze modus + is bedoeld om wijzigingen binnen milliseconden of seconden in de zoekindexen + zichtbaar te maken. + +De twee modi overlappen elkaar enigszins, maar dienen verschillende doelen. De +periodieke modus zorgt ervoor dat records niet verloren gaan door tijdelijke +storingen en brengt de indexen weer bij tot de actuele stand, zelfs als het +indexeerproces lange tijd niet heeft gedraaid. Zo nodig maakt deze modus de +indexen zelfs helemaal opnieuw aan. Deze modus wordt ook gebruikt voor +wijzigingen die door bulkimportprocessen worden aangebracht en voor andere +wijzigingen die niet onmiddellijk in de indexen zichtbaar hoeven te zijn. + +De realtime-modus van het indexeerproces probeert wijzigingen veel sneller in +de index door te voeren. In plaats van de backend periodiek op te vragen, doet +het indexeerproces een `GET`-verzoek aan het `/update-feed`-endpoint van de +backend. Dit endpoint retourneert alle records die zijn bijgewerkt sinds het +endpoint voor het laatst is aangeroepen en, nog belangrijker, houdt het verzoek +open als er geen records zijn gewijzigd. + +Door dit endpoint in een lus aan te roepen, wacht het realtime-indexeerproces +het grootste deel van de tijd op een gebeurtenis. Zodra een record wordt +bijgewerkt, retourneert het al openstaande verzoek aan het `/update-feed`- +endpoint het bijgewerkte record. Dit wordt naar Solr verzonden en meteen +geïndexeerd. Zo worden de vertragingen van periodiek opvragen vermeden en blijft +de indexeringsvertraging laag waar dat van belang is. Nieuwe records moeten +bijvoorbeeld in de lijst met records die gebruikers kunnen doorbladeren staan +wanneer een gebruiker deze bekijkt. diff --git a/src/content/docs/nl/customization/authentication.md b/src/content/docs/nl/customization/authentication.md new file mode 100644 index 0000000..ab0afc4 --- /dev/null +++ b/src/content/docs/nl/customization/authentication.md @@ -0,0 +1,141 @@ +--- +title: Aanvullende authenticatie +description: Instructies voor het installeren en configureren van een aangepaste authenticatiehandler via een plug-in. +--- + +ArchivesSpace ondersteunt standaard authenticatie op basis van LDAP, maar u kunt +gebruikers authenticeren via andere gebruikersdirectory's die met wachtwoorden +werken door uw eigen authenticatiehandler te definiëren, een plug-in te maken +en uw ArchivesSpace-instantie zo te configureren dat deze de handler gebruikt. +Als u liever geen eigen handler maakt, is er een +[plug-in](https://github.com/lyrasis/aspace-oauth) beschikbaar die OAUTH-gebruikersauthenticatie gebruikt en die u aan uw ArchivesSpace-installatie kunt toevoegen. + +## Een nieuwe authenticatiehandlerklasse maken voor gebruik in een plug-in + +Een authenticatiehandler is een klasse die een paar belangrijke methoden +implementeert: + +- `initialize(opts)` -- Een objectconstructor die het configuratieblok ontvangt + dat in de systeemconfiguratie is opgegeven. +- `name` -- Een methode zonder argumenten die een tekenreeks retourneert + waarmee de instantie van uw handler wordt geïdentificeerd. De indeling van + deze tekenreeks is niet van belang: deze wordt alleen opgeslagen als een + gebruikerskenmerk (in de ArchivesSpace-database), zodat kan worden vastgesteld + via welke authenticatiebron een gebruiker zich het laatst met succes heeft + geauthenticeerd. +- `authenticate(username, password)` -- een methode die controleert of + `password` het juiste wachtwoord is voor `username`. Als het wachtwoord juist + is, retourneert de methode een instantie van `JSONModel(:user)`. Anders + retourneert de methode `nil`. + +Voor elke inlogpoging wordt een nieuwe instantie van uw handler gemaakt, dus u +hoeft in uw implementatie geen rekening te houden met gelijktijdigheid. + +Uw methode `authenticate` mag alles doen wat nodig is om te controleren of het +opgegeven wachtwoord juist is. De enige beperking is dat de methode `nil` of +een instantie van `JSONModel(:user)` moet retourneren. + +De klasse `JSONModel(:user)` (waarvan het JSON-schema is gedefinieerd in +`common/schemas/user.rb`) beschrijft de eigenschappen die het systeem voor een +gebruiker nodig heeft. Wanneer u een object van `JSONModel(:user)` retourneert, +worden de waarden ervan gebruikt om een ArchivesSpace-gebruiker aan te maken +(als er nog geen gebruiker met die naam bestaat) of om de bestaande gebruiker +bij te werken (als deze al bekend was). + +**Opmerking**: De klasse `The JSONModel(:user)` valideert de waarden die u opgeeft +aan de hand van het JSON-schema en genereert een +`JSONModel::ValidationException` als er iets niet klopt. Als dit binnen uw +handler gebeurt, wordt de uitzondering vastgelegd in het logboek en mislukt het +authenticatieverzoek. + +### Een basisskelet + +Stel dat u al een database hebt met een tabel met gebruikers die bij +ArchivesSpace moeten kunnen inloggen. Hieronder staat een schets van een +authenticatiehandler die verbinding maakt met deze database en deze gebruikt +voor authenticatie. + +```ruby +# For this example we'll use the Sequel database toolkit. Note that +# this isn't necessary--you could use whatever database library you +# like here. +require 'sequel' + +class MyDatabaseAuth + + # For easy access to the JSONModel(:user) class + include JSONModel + + + def initialize(definition) + # Store the database connection details for use at + # authentication time. + @db_url = definition[:db_url] or raise "Need a value for :db_url" + end + + + # Just for informational purposes. Return a string containing our + # database URL. + def name + "MyDatabaseAuth - #{@db_url}" + end + + + def authenticate(username, password) + # Open a connection to the database + Sequel.connect(@db_url) do |db| + + # Check whether we have an entry for the given username + # and password in our database's "users" table + user = db[:users].filter(:username => username, + :password => password). + first + + if !user + # The user couldn't be found, or their password was wrong. + # Authentication failed. + return nil + end + + # Build and return a JSONModel(:user) instance from fields in the database + JSONModel(:user).from_hash(:username => username, + :name => user[:user_full_name]) + + end + end + +end +``` + +Om uw nieuwe authenticatiehandler te gebruiken, moet u deze toevoegen aan de +plug-inarchitectuur van ArchivesSpace en inschakelen. Maak een nieuwe map aan +in de plug-inmap van uw ArchivesSpace-installatie, bijvoorbeeld our_auth. +Maak in die map de mappenstructuur `backend/model/` aan en plaats het nieuwe +klassebestand daarin. Configureer vervolgens de nieuwe handler. + +## Uw configuratie aanpassen + +Als u wilt dat ArchivesSpace uw nieuwe authenticatiehandler aanroept, voegt u +een item toe aan het configuratieblok `:authentication_sources` in het bestand +`config/config.rb`. + +Een configuratie voor het bovenstaande voorbeeld kan er als volgt uitzien: + +```ruby +AppConfig[:authentication_sources] = [{ + :model => 'MyDatabaseAuth', + :db_url => 'jdbc:mysql://localhost:3306/somedb?user=myuser&password=mypassword', + }] +``` + +## De plug-in toevoegen aan de lijst met al ingeschakelde plug-ins + +Zoek in het bestand `config/config.rb` de instelling AppConfig[:plugins] en +voeg daar een verwijzing naar de nieuwe plug-in toe. Als u deze bijvoorbeeld +our_auth hebt genoemd, kan de instelling AppConfig[:plugins] er ongeveer +als volgt uitzien: + +AppConfig[:plugins] = ['local', 'hello_world', 'our_auth'] + +Start uw ArchivesSpace-installatie opnieuw. Daarna zouden authenticatieverzoeken +bij uw nieuwe handler moeten binnenkomen. diff --git a/src/content/docs/nl/customization/bower.md b/src/content/docs/nl/customization/bower.md new file mode 100644 index 0000000..8a5285d --- /dev/null +++ b/src/content/docs/nl/customization/bower.md @@ -0,0 +1,64 @@ +--- +title: Frontend-assets beheren met Bower +description: Instructies voor het toevoegen van statische bestanden aan het coreproject. +--- + +Dit is bedoeld voor ontwikkelaars en is alleen van toepassing op de toepassing `frontend`. + +Als u statische bestanden aan het coreproject wilt toevoegen (zoals JavaScript-, CSS- en LESS-bestanden), gebruik dan `bower` om ze toe te voegen en te installeren. Zo blijft duidelijk welke bestanden zijn toegevoegd en wanneer ze moeten worden bijgewerkt. + +Als u ArchivesSpace wilt helpen, kunt u de herkomst achterhalen van leveranciersbestanden die niet in bower.json zijn opgenomen en ervoor zorgen dat deze volgens dit protocol worden bijgewerkt en geïnstalleerd. + +## Algemene configuratie + +### Stap 1: npm installeren + +Op macOS bijvoorbeeld: + +```shell +brew install npm +``` + +### Stap 2: Bower installeren + +```shell +npm install bower -g +``` + +### Stap 3: componenten installeren + +```shell +bower install +``` + +## Een statisch bestand toevoegen aan de ASpace-frontend (medewerkersinterface) + +### Stap 1: de component toevoegen + +```shell +bower install <PACKAGE NAME> --save +``` + +### Stap 2: Bower aan Rails koppelen + + Edit the bower.json file to map the assets you want from bower_components + to assets. See examples in bower.json + This is kind of a hack to workaround: + https://github.com/blittle/bower-installer/issues/75 + +### Stap 3: bestanden installeren + +```shell +alias npm-exec='PATH=$(npm bin):$PATH' +npm-exec bower-installer +``` + +### Stap 4: bestanden in Git opnemen + +Neem de geïnstalleerde bestanden op in Git. We beheren bower.json en de +geïnstalleerde bestanden met versiebeheer, maar niet de map bower_components. + +## Productie! + +Vergeet niet: als u bestanden toevoegt die geen extensie .js hebben, moet u +deze toevoegen aan frontend/config/environments/production.rb. diff --git a/src/content/docs/nl/customization/configuration.md b/src/content/docs/nl/customization/configuration.md new file mode 100644 index 0000000..06adda2 --- /dev/null +++ b/src/content/docs/nl/customization/configuration.md @@ -0,0 +1,1293 @@ +--- +title: Configuratie +description: Een overzicht van alle beschikbare configuratieopties in het bestand config/config.rb, met configuratienamen, waarden en suggesties voor de configuratie. +--- + +De belangrijkste configuratie van ArchivesSpace staat in het bestand config/config.rb. +Standaard bevat dit bestand de standaardinstellingen. Deze zijn herkenbaar aan +regels die als commentaar zijn gemarkeerd (in het bestand aangeduid met "#"). +U kunt deze instellingen aanpassen door nieuwe regels toe te voegen die de +standaardwaarden wijzigen en ArchivesSpace opnieuw te starten. Zorg ervoor dat +uw nieuwe instellingen niet als commentaar zijn gemarkeerd (begin dus NIET met +"#"), anders worden ze niet toegepast. + +## Veel gewijzigde instellingen + +### Databaseconfiguratie + +#### :db_url + +Stel de naam en inloggegevens van uw database in. De standaardwaarde geeft aan dat +de ingebouwde database moet worden gebruikt. +Het wordt aanbevolen een MySQL-database te gebruiken in plaats van de ingebouwde database. +Zie [MySQL gebruiken](../provisioning/mysql) voor meer informatie. + +Dit is een voorbeeld van het opgeven van MySQL-referenties: + +`AppConfig[:db_url] = "jdbc:mysql://127.0.0.1:3306/aspace?useUnicode=true&characterEncoding=UTF-8&user=as&password=as123"` + +#### :db_max_connections + +Stel het maximumaantal databaseverbindingen in dat de applicatie gebruikt. +De standaardwaarde is afgeleid van het aantal threads van het indexeerproces. + +`AppConfig[:db_max_connections] = proc { 20 + (AppConfig[:indexer_thread_count] * 2) }` + +### URL's voor ArchivesSpace-componenten + +Stel de poort van de ArchivesSpace-backend in. De backend luistert standaard op poort 8089. + +`AppConfig[:backend_url] = "http://localhost:8089"` + +Stel de poort van de ArchivesSpace-medewerkersinterface (frontend) in. De medewerkersinterface luistert standaard op poort 8080. + +`AppConfig[:frontend_url] = "http://localhost:8080"` + +Stel de poort van de ArchivesSpace-publieke interface in. De publieke interface luistert standaard op poort 8081. + +`AppConfig[:public_url] = "http://localhost:8081"` + +Stel de poort van de ArchivesSpace OAI-server in. De OAI-server luistert standaard op poort 8082. + +`AppConfig[:oai_url] = "http://localhost:8082"` + +Stel de poort van de ArchivesSpace Solr-index in. De Solr-server luistert standaard op poort 8090. + +`AppConfig[:solr_url] = "http://localhost:8090"` + +Stel de poort van het ArchivesSpace-indexeerproces in. Het indexeerproces luistert standaard op poort 8091. + +`AppConfig[:indexer_url] = "http://localhost:8091"` + +Stel de poort van de ArchivesSpace-API-documentatie in. De API-documentatie luistert standaard op poort 8888. + +`AppConfig[:docs_url] = "http://localhost:8888"` + +### ArchivesSpace-componenten inschakelen + +Schakel specifieke componenten in of uit door de volgende instellingen op true of false te zetten (standaard is true): + +```ruby +AppConfig[:enable_backend] = true +AppConfig[:enable_frontend] = true +AppConfig[:enable_public] = true +AppConfig[:enable_solr] = true +AppConfig[:enable_indexer] = true +AppConfig[:enable_docs] = true +AppConfig[:enable_oai] = true +``` + +### Applicatielogging + +Standaard wordt alle loguitvoer op het scherm weergegeven terwijl de opdracht +archivesspace wordt uitgevoerd. Wanneer de applicatie als daemon/service draait, +wordt deze uitvoer opgeslagen in `logs/archivesspace.out`. U kunt de loguitvoer +voor elke component naar een ander bestand sturen door de logwaarde te wijzigen +in een bestandspad waarnaar archivesspace schrijfrechten heeft. + +U kunt ook het logniveau voor elke component instellen. Geldige waarden zijn: + +- `debug` (everything) +- `info` +- `warn` +- `error` +- `fatal` (severe only) + +#### `AppConfig[:frontend_log]` + +Bestand voor loguitvoer van de frontend (medewerkersinterface). Stel dit in op +"default" om de loguitvoer naar archivesspace.out te sturen. + +#### `#AppConfig[:frontend_log_level]` + +Logniveau voor de frontend. + +#### `AppConfig[:backend_log]` + +Bestand voor loguitvoer van de backend. Stel dit in op "default" om de +loguitvoer naar archivesspace.out te sturen. + +#### `#AppConfig[:backend_log_level]` + +Logniveau voor de backend. + +#### `AppConfig[:pui_log]` + +Bestand voor loguitvoer van de publieke interface. Stel dit in op "default" om +de loguitvoer naar archivesspace.out te sturen. + +#### `#AppConfig[:pui_log_level]` + +Logniveau voor de publieke interface. + +#### `AppConfig[:indexer_log]` + +Bestand voor loguitvoer van het indexeerproces. Stel dit in op "default" om de +loguitvoer naar archivesspace.out te sturen. + +#### `#AppConfig[:indexer_log_level]` + +Logniveau voor het indexeerproces. + +### Databaselogging + +#### `AppConfig[:db_debug_log]` + +Stel in op true om alle SQL-instructies te loggen. +Houd er rekening mee dat dit de prestaties kan beïnvloeden! + +`AppConfig[:db_debug_log] = false` + +#### `AppConfig[:mysql_binlog]` + +Stel in op true als u MySQL-binaire logging hebt ingeschakeld. + +`AppConfig[:mysql_binlog] = false` + +### Solr-back-ups + +#### `AppConfig[:solr_backup_schedule]` + +Stel het schema voor Solr-back-ups in. Standaard worden de Solr-back-ups om +middernacht uitgevoerd. Zie https://crontab.guru/ voor informatie over de +syntaxis van het schema. + +`AppConfig[:solr_backup_schedule] = "0 * * * *"` + +#### `AppConfig[:solr_backup_number_to_keep]` + +Het aantal Solr-back-ups dat moet worden bewaard (standaard = 1) + +`AppConfig[:solr_backup_number_to_keep] = 1` + +#### `AppConfig[:solr_backup_directory]` + +Map waarin Solr-back-ups worden opgeslagen. + +`AppConfig[:solr_backup_directory] = proc { File.join(AppConfig[:data_directory], "solr_backups") }` + +### Standaard Solr-parameters + +#### `AppConfig[:solr_params]` + +Voeg standaard Solr-parameters toe. + +Een eenvoudig voorbeeld: gebruik AND voor zoekopdrachten: + +`AppConfig[:solr_params] = { "q.op" => "AND" }` + +Een uitgebreider voorbeeld: stel de waarde van de boost query (bq) in om de +relevantie van de zoekopdracht in de titel te verhogen, stel de parameter voor +frasevelden (pf) in om de relevantie van de titel te verhogen wanneer de +zoektermen dicht bij elkaar staan, en stel de parameter phrase slop (ps) voor +de parameter pf in om aan te geven hoe dicht de termen bij elkaar moeten staan: + +```ruby +AppConfig[:solr_params] = { + "bq" => proc { "title:\"#{@query_string}\"*" }, + "pf" => 'title^10', + "ps" => 0, +} +``` + +### Taal + +#### `AppConfig[:locale]` + +Stel de taal van de applicatie in (zie de .yml-bestanden in +https://github.com/archivesspace/archivesspace/tree/master/common/locales +voor een lijst met beschikbare localecodes). De standaardtaal is Engels (:en): + +`AppConfig[:locale] = :en` + +### Plug-ins registreren + +#### `AppConfig[:plugins]` + +De plug-ins die moeten worden geladen. Ze worden geladen in de opgegeven volgorde. + +`AppConfig[:plugins] = ['local', 'lcnaf']` + +### Aantal threads + +#### `AppConfig[:job_thread_count]` + +Het aantal gelijktijdige threads dat beschikbaar is voor achtergrondtaken. +Deze instelling is toegevoegd omdat langlopende taken de wachtrij blokkeerden. +Stel dit aantal niet te hoog in. + +`AppConfig[:job_thread_count] = 2` + +### OAI-configuratieopties + +#### `AppConfig[:oai_ead_options]` + +`AppConfig[:oai_ead_options] = { :include_daos => true, :use_numbered_c_tags => true, :include_uris => false }` + +**LET OP: Vanaf versie 2.5.2 zijn de volgende parameters (`oai_repository_name`, `oai_record_prefix`, `oai_admin_email` en `oai_sets`) verouderd. Stel deze in via de medewerkersinterface. Kies daarvoor in de medewerkersinterface het menu System en selecteer vervolgens Manage OAI-PMH Settings. Deze drie instellingen staan bovenaan de pagina in het gedeelte General Settings. In versie 2.6.0 zijn deze instellingen uit het configuratiebestand verwijderd.** + +#### `AppConfig[:oai_repository_name]` + +`AppConfig[:oai_repository_name] = 'ArchivesSpace OAI Provider'` + +#### `AppConfig[:oai_record_prefix]` + +`AppConfig[:oai_record_prefix] = 'oai:archivesspace'` + +#### `AppConfig[:oai_admin_email]` + +`AppConfig[:oai_admin_email] = 'admin@example.com'` + +#### `AppConfig[:oai_sets]` + +Naast sets op basis van beschrijvingsniveau kunt u als volgt OAI-sets +definiëren op basis van instellingscodes en/of sponsors: + +```ruby +AppConfig[:oai_sets] = { + 'repository_set' => { + :repo_codes => ['hello626'], + :description => "A set of one or more repositories", + }, + + 'sponsor_set' => { + :sponsors => ['The_Sponsor'], + :description => "A set of one or more sponsors", + }, +} +``` + +## Andere, minder vaak gewijzigde instellingen + +### Standaardwachtwoord voor de beheerder + +#### `AppConfig[:default_admin_password]` + +Stel het standaardwachtwoord voor de beheerder in. Het standaardwachtwoord is "admin". + +`#AppConfig[:default_admin_password] = "admin"` + +### Datamappen + +#### `AppConfig[:data_directory]` + +Als u ArchivesSpace uitvoert met de standaardscripts (archivesspace.sh of +archivesspace.bat) of als Windows-service gebruikt, wordt de waarde van :data_directory +automatically ingesteld op de map "data" van uw ArchivesSpace-distributie. +U hoeft deze waarde niet te wijzigen, tenzij u wilt dat ArchivesSpace de +gegevensbestanden ergens anders opslaat. + +`AppConfig[:data_directory] = File.join(Dir.home, "ArchivesSpace")` + +#### `AppConfig[:backup_directory]` + +Map voor geautomatiseerde back-ups bij gebruik van de ingebouwde demodatabase (Apache Derby in plaats van MySQL). Standaard is dit `demo_db_backups` in de map `data`. + +`AppConfig[:backup_directory] = proc { File.join(AppConfig[:data_directory], "demo_db_backups") }` + +### Solr-standaardwaarden + +#### `AppConfig[:solr_indexing_frequency_seconds]` + +Het aantal seconden tussen elke uitvoering van de SUI- en PUI-indexeerprocessen. De indexeerprocessen voeren elke ingestelde periode een indexeringscyclus uit. + +`AppConfig[:solr_indexing_frequency_seconds] = 30` + +#### `AppConfig[:solr_facet_limit]` + +Het maximumaantal verschillende facetwaarden dat Solr in het antwoord voor een bepaald veld opneemt. + +`AppConfig[:solr_facet_limit] = 100` + +#### `AppConfig[:default_page_size]` + +Het aantal records op elke pagina in alle gepagineerde backend-API-antwoorden. +`AppConfig[:default_page_size] = 10` + +#### `AppConfig[:max_page_size]` + +Aanvragen aan de backend-API kunnen een aangepaste page_size-parameter opgeven. Dit is de maximaal toegestane paginagrootte. +`AppConfig[:max_page_size] = 250` + +### Cookieprefix + +#### `AppConfig[:cookie_prefix]` + +Een voorvoegsel dat wordt toegevoegd aan cookies die de applicatie gebruikt. +Wijzig dit als u meerdere instanties van ArchivesSpace op dezelfde hostnaam +uitvoert (bijvoorbeeld meerdere instanties op verschillende poorten). +De standaardwaarde is "archivesspace". + +`AppConfig[:cookie_prefix] = "archivesspace"` + +### Instellingen van het SUI-indexeerproces + +De grootte van elke batch records die naar elke workerthread van het indexeerproces wordt gestuurd om te verwerken en naar Solr te verzenden. +Het periodieke indexeerproces kan meerdere threads gebruiken om meerdere CPU-kernen +te benutten. Met deze twee opties bepaalt u hoeveel CPU-kernen worden gebruikt +en hoeveel geheugen het indexeringsproces verbruikt (meer kernen en/of meer +records per thread betekent meer geheugengebruik). + +#### `AppConfig[:indexer_records_per_thread]` + +De grootte van elke batch records die naar elke workerthread van het indexeerproces wordt gestuurd om te verwerken en naar Solr te verzenden. Meer records per thread betekent dat het indexeerproces meer geheugen gebruikt. +`AppConfig[:indexer_records_per_thread] = 25` + +#### `AppConfig[:indexer_thread_count]` + +Het aantal workerthreads dat het SUI-indexeerproces gebruikt. Meer workerthreads betekent dat meer CPU-kernen worden gebruikt. +`AppConfig[:indexer_thread_count] = 4` + +#### `AppConfig[:indexer_solr_timeout_seconds]` + +Het indexeerproces stuurt aanvragen naar Solr om bijgewerkte records naar de Solr-index te verzenden. Dit is het maximumaantal seconden dat het indexeerproces op een antwoord van Solr wacht. + +`AppConfig[:indexer_solr_timeout_seconds] = 300` + +### Instellingen van het PUI-indexeerproces + +#### `AppConfig[:pui_indexer_enabled]` + +Als dit op false staat, wordt er geen PUI-indexeerproces gestart. Stel dit in op false als u de PUI helemaal niet gebruikt. +`AppConfig[:pui_indexer_enabled] = true` + +#### `AppConfig[:pui_indexing_frequency_seconds]` + +Het aantal seconden tussen elke uitvoering van het PUI-indexeerproces. Het indexeerproces voert elke ingestelde periode een indexeringscyclus uit. +`AppConfig[:pui_indexing_frequency_seconds] = 30` + +#### `AppConfig[:pui_indexer_records_per_thread]` + +De grootte van elke batch records die naar elke workerthread van het indexeerproces wordt gestuurd om te verwerken en naar Solr te verzenden. +Het PUI-indexeerproces kan meerdere threads gebruiken om meerdere CPU-kernen +te benutten. Met deze twee opties bepaalt u hoeveel CPU-kernen worden gebruikt +en hoeveel geheugen het indexeringsproces verbruikt (meer kernen en/of meer +records per thread betekent meer geheugengebruik). + +`AppConfig[:pui_indexer_records_per_thread] = 25` + +#### `AppConfig[:pui_indexer_thread_count]` + +Het aantal workerthreads dat het PUI-indexeerproces gebruikt. Meer workerthreads betekent dat meer CPU-kernen worden gebruikt. +`AppConfig[:pui_indexer_thread_count] = 1` + +### Indexstatus + +#### `AppConfig[:index_state_class]` + +Het indexeerproces heeft een locatie nodig om de status op te slaan (bij te +houden welke records al zijn geïndexeerd). +Stel in op 'IndexState' (standaard) om de status op te slaan in de lokale map `data`. +Stel in op 'IndexStateS3' (optioneel) om de status op te slaan in een AWS S3-bucket in de Amazon Cloud. + +`AppConfig[:index_state_class] = 'IndexState'` + +#### `AppConfig[:index_state_s3]` - Alleen relevant bij gebruik van S3-opslag voor de status van het indexeerproces + +Als u S3-opslag gebruikt voor de status van het indexeerproces in Amazon S3 (optioneel), moet u de toegang tot S3 configureren. + +LET OP: S3 brengt kosten in rekening voor lees- en updateaanvragen. Omdat het +PUI-indexeerproces voortdurend statusbestanden bijwerkt, kunt u overwegen +`pui_indexing_frequency_seconds` en `solr_indexing_frequency_seconds` te verhogen. + +##### S3-toegang configureren met omgevingsvariabelen (standaard) + +Standaard wordt de S3-configuratie opgehaald uit de volgende shellomgevingsvariabelen: + +- `AWS_REGION` +- `AWS_ACCESS_KEY_ID` +- `AWS_SECRET_ACCESS_KEY` +- `AWS_ASPACE_BUCKET` + +De configuratie gebruikt de instelling `:cookie_prefix` als voorvoegsel voor de statusbestanden in de bucket. Dit is handig wanneer dezelfde bucket wordt gebruikt om de indexeerstatus van meerdere ArchivesSpace-instanties op te slaan. + +##### S3-toegang configureren met een AppConfig-variabele in het bestand `config.rb` + +```ruby +AppConfig[:index_state_s3] = { + region: "us-east-1", + aws_access_key_id: "ASIAXXXXEXAMPLEID", + aws_secret_access_key: "xXxxXXxxXX/XXXXXX/XXXXXXXEXAMPLEKEY", + bucket: ENV.fetch("my-as-test-bucket"), + prefix: proc { "#{AppConfig[:cookie_prefix]}_" }, +} +``` + +U kunt `prefix: "some random string"` gebruiken in plaats van de bovenstaande code die de AppConfig-variabele `:cookie_prefix` gebruikt. + +### Overige databaseopties + +#### `AppConfig[:allow_other_unmapped]` + +Sta toe dat de speciale enumeratiewaarde `other_unmapped` wordt toegewezen aan +velden met een dynamische enumeratie (gecontroleerde waarden). Als dit is +ingesteld op `true`, wordt `other_unmapped` beschouwd als een geldige waarde +voor alle velden met enumeraties (gecontroleerde waarden). De waarde +`other_unmapped` wordt toegevoegd als mogelijke waarde aan alle lijsten met +gecontroleerde waarden. +Deze functie is bedoeld voor niet-toegewezen of onbekende enumeratiewaarden en +kan van pas komen bij datamigraties wanneer brongegevens waarden bevatten die +nog niet in lijsten met gecontroleerde waarden zijn gedefinieerd, of bij het +importeren van externe gegevens met waarden die nog niet in zo'n lijst staan. + +`AppConfig[:allow_other_unmapped] = false` + +#### `AppConfig[:db_url_redacted]` + +Hiermee bepaalt u hoe de database-URL (met de databasegebruikersnaam en het +wachtwoord) in de logboeken wordt weergegeven. Standaard worden de +gebruikersnaam en het wachtwoord vervangen door `REDACTED`, zodat: +`"user=john&password=secret123"` +wordt: +`"user=[REDACTED]&password=[REDACTED]"` + +`AppConfig[:db_url_redacted] = proc { AppConfig[:db_url].gsub(/(user|password)=(.*?)(&|$)/, '\1=[REDACTED]\3') }` + +#### `AppConfig[:demo_db_backup_schedule]` + +Bij gebruik van de ingebouwde demodatabase (Apache Derby in plaats van MySQL) +bepaalt dit het schema van de geautomatiseerde back-ups in cron-indeling. +Standaard worden deze elke dag om 4.00 uur uitgevoerd. + +`AppConfig[:demo_db_backup_schedule] = "0 4 * * *"` + +#### `AppConfig[:demo_db_backup_number_to_keep] = 7` + +Het aantal back-ups dat beschikbaar blijft bij gebruik van de ingebouwde demodatabase. + +`AppConfig[:demo_db_backup_number_to_keep] = 7` + +#### `AppConfig[:allow_unsupported_database]` + +Stel dit in op true als u beslist een andere database te gebruiken dan MySQL of de op Apache Derby gebaseerde ingebouwde demodatabase (niet aanbevolen!). + +`AppConfig[:allow_unsupported_database] = false` + +#### `AppConfig[:allow_non_utf8_mysql_database]` + +Stel dit in op true om de standaardcontrole over te slaan die nagaat of de tekencodering van MySQL-tabellen is ingesteld op UTF8 (niet aanbevolen!). + +`AppConfig[:allow_non_utf8_mysql_database] = false` + +### Proxy-URL's + +Als u gebruikersgerichte applicaties via een proxy aanbiedt +(bijvoorbeeld via een ander domein of een andere poort, via https of met een +voorvoegsel), wordt aanbevolen deze URL's in uw configuratie op te nemen. + +#### `AppConfig[:frontend_proxy_url] = proc { AppConfig[:frontend_url] }` + +Proxy-URL voor de frontend (medewerkersinterface) + +`AppConfig[:frontend_proxy_url] = proc { AppConfig[:frontend_url] }` + +#### `AppConfig[:public_proxy_url]` + +Proxy-URL voor de publieke interface + +`AppConfig[:public_proxy_url] = proc { AppConfig[:public_url] }` + +#### `AppConfig[:oai_proxy_url]` + +Proxy-URL voor de OAI-service (indien openbaar gemaakt; zie het OAI-gedeelte) + +`AppConfig[:oai_proxy_url] = 'http://your-public-oai-url.example.com'` + +#### `AppConfig[:frontend_proxy_prefix]` + +Overschrijf deze instelling alleen als u weet wat u doet. + +`AppConfig[:frontend_proxy_prefix] = proc { "#{URI(AppConfig[:frontend_proxy_url]).path}/".gsub(%r{/+$}, "/") }` + +#### `AppConfig[:public_proxy_prefix]` + +Overschrijf deze instelling alleen als u weet wat u doet. + +`AppConfig[:public_proxy_prefix] = proc { "#{URI(AppConfig[:public_proxy_url]).path}/".gsub(%r{/+$}, "/") }` + +### Componentapplicaties inschakelen + +Als u een van deze instellingen op false zet, wordt de bijbehorende applicatie +niet gestart. Het tijdelijk uitschakelen van de frontend en de publieke +interfaces en/of het indexeerproces kan helpen bij geheugenproblemen tijdens +een migratie. + +#### `AppConfig[:enable_backend]` + +`AppConfig[:enable_backend] = true` + +#### `AppConfig[:enable_frontend]` + +`AppConfig[:enable_frontend] = true` + +#### `AppConfig[:enable_public]` + +`AppConfig[:enable_public] = true` + +#### `AppConfig[:enable_solr]` + +`AppConfig[:enable_solr] = true` + +#### `AppConfig[:enable_indexer]` + +`AppConfig[:enable_indexer] = true` + +#### `AppConfig[:enable_docs]` + +`AppConfig[:enable_docs] = true` + +#### `AppConfig[:enable_oai]` + +`AppConfig[:enable_oai] = true` + +### Jetty afsluiten + +In sommige situaties is het nodig de Jetty-service te kunnen afsluiten met +Jetty's ShutdownHandler. Hiermee kan een POST-aanvraag naar een specifieke URI +worden gestuurd om aan te geven dat de server moet worden afgesloten. Het +voorvoegsel voor dit URI-pad is ingesteld op `/xkcd` om de kans op een conflict +met een ander pad in de configuratie te verkleinen. Het volledige pad is dus: + +`/xkcd/shutdown?token={randomly generated password}` + +De launcher maakt hiervoor een wachtwoord aan en slaat dit op in de datamap. +Deze functie is standaard niet ingeschakeld. + +#### `AppConfig[:use_jetty_shutdown_handler]` + +`AppConfig[:use_jetty_shutdown_handler] = false` + +#### `AppConfig[:jetty_shutdown_path]` + +`AppConfig[:jetty_shutdown_path] = "/xkcd"` + +### Meerdere backendinstanties beheren + +Als u meerdere instanties van de backend achter een load balancer uitvoert, +vermeldt u hier de URL van elke backendinstantie. Deze instelling wordt +gebruikt voor realtime indexering, die rechtstreeks verbinding moet maken met +elke actieve instantie. + +Standaard gaan we ervan uit dat u geen load balancer gebruikt. In dat geval +maken we alleen verbinding met de gewone backend-URL. + +#### `AppConfig[:backend_instance_urls]` + +`AppConfig[:backend_instance_urls] = proc { [AppConfig[:backend_url]] }` + +### Thema + +Zie https://docs.archivesspace.org/customization/theming/ voor aanpassingen aan thema's. + +#### `AppConfig[:frontend_theme]` + +Naam van het thema voor de medewerkersinterface + +`AppConfig[:frontend_theme] = "default"` + +#### `AppConfig[:public_theme]` + +Naam van het thema voor de publieke interface + +`AppConfig[:public_theme] = "default"` + +### Sessie-expiratie + +#### `AppConfig[:session_expire_after_seconds]` + +Sessies waarvoor expiratie is ingeschakeld, verlopen na dit aantal seconden inactiviteit. + +`AppConfig[:session_expire_after_seconds] = 3600` + +#### `AppConfig[:session_nonexpirable_force_expire_after_seconds]` + +Ook sessies waarvoor expiratie is uitgeschakeld, verlopen uiteindelijk, maar pas na een langere periode. + +`AppConfig[:session_nonexpirable_force_expire_after_seconds] = 604800` + +### Systeemgebruikersnamen + +Er worden automatisch verborgen systeemgebruikers aangemaakt (niet zichtbaar +in Gebruikersbeheer van de medewerkersinterface) die het indexeerproces, de +PUI en de medewerkersinterface gebruiken om toegang te krijgen tot de backend-API. + +#### `AppConfig[:search_username]` + +De gebruikersnaam van de verborgen systeemgebruiker die het indexeerproces gebruikt om toegang te krijgen tot de backend-API. +`AppConfig[:search_username] = "search_indexer"` + +#### `AppConfig[:public_username]` + +De gebruikersnaam van de verborgen systeemgebruiker die de PUI gebruikt om toegang te krijgen tot de backend-API. + +`AppConfig[:public_username] = "public_anonymous"` + +#### `AppConfig[:staff_username]` + +De gebruikersnaam van de verborgen systeemgebruiker die de medewerkersinterface gebruikt om toegang te krijgen tot de backend-API. + +`AppConfig[:staff_username] = "staff_system"` + +### Authenticatiebronnen + +ArchivesSpace heeft eigen functionaliteit voor gebruikersbeheer, maar kan ook +worden geconfigureerd om gebruikers te authenticeren aan de hand van een of +meer [LDAP-directory's](../customization/ldap). OAuth-authenticatie is mogelijk +met de [aspace-oauth-plug-in](https://github.com/lyrasis/aspace-oauth). + +`AppConfig[:authentication_sources] = []` + +### Overige instellingen voor achterstand en momentopnamen + +#### `AppConfig[:realtime_index_backlog_ms]` + +> TODO - Meer documentatie nodig + +`AppConfig[:realtime_index_backlog_ms] = 60000` + +### Meldingen configureren + +Een intern meldingssysteem houdt gebruikersvoorkeuren, enumeratiewaarden +(waarden uit gecontroleerde waardelijsten), informatie over collectiebeherende +instellingen enzovoort actueel in de interface en beperkt tegelijkertijd het +aantal aanvragen aan de backend-API. + +#### `AppConfig[:notifications_backlog_ms]` + +Meldingen die ouder zijn dan dit aantal milliseconden, worden als verlopen beschouwd en niet meer weergegeven. + +`AppConfig[:notifications_backlog_ms] = 60000` + +#### `AppConfig[:notifications_poll_frequency_ms]` + +Hoe vaak meldingen moeten worden weergegeven. + +`AppConfig[:notifications_poll_frequency_ms] = 1000` + +#### `AppConfig[:max_usernames_per_source]` + +> TODO - Meer documentatie nodig + +`AppConfig[:max_usernames_per_source] = 50` + +#### `AppConfig[:demodb_snapshot_flag]` + +> TODO - Meer documentatie nodig + +`AppConfig[:demodb_snapshot_flag] = proc { File.join(AppConfig[:data_directory], "create_demodb_snapshot.txt") }` + +### Rapporten configureren + +#### `AppConfig[:report_page_layout]` + +Gebruikt geldige waarden voor de eigenschap size van de CSS3-richtlijn @page: +http://www.w3.org/TR/css3-page/#page-size-prop + +`AppConfig[:report_page_layout] = "letter"` + +#### `AppConfig[:report_pdf_font_paths]` + +> TODO - Meer documentatie nodig + +`AppConfig[:report_pdf_font_paths] = proc { ["#{AppConfig[:backend_url]}/reports/static/fonts/dejavu/DejaVuSans.ttf"] }` + +#### `AppConfig[:report_pdf_font_family]` + +> TODO - Meer documentatie nodig + +`AppConfig[:report_pdf_font_family] = "\"DejaVu Sans\", sans-serif"` + +### Plug-inmap + +#### `AppConfig[:plugins_directory]` + +Standaard staat de plug-inmap in de hoofdmap van ASpace. +Als u dit wilt wijzigen, geeft u hier een absoluut pad op. + +`AppConfig[:plugins_directory] = "plugins"` + +### Feedback + +#### `AppConfig[:feedback_url]` + +URL waarnaar de feedbacklink verwijst. +U kunt deze link uit de voettekst verwijderen door de waarde leeg te laten. + +`AppConfig[:feedback_url] = "http://archivesspace.org/contact"` + +### Gebruikersregistratie + +#### `AppConfig[:allow_user_registration]` + +Sta niet-geauthenticeerde gebruikers toe een account aan te maken. + +`AppConfig[:allow_user_registration] = true` + +### Help configureren + +#### `AppConfig[:help_enabled]` + +> TODO - Meer documentatie nodig + +`AppConfig[:help_enabled] = true` + +#### `AppConfig[:help_url]` + +> TODO - Meer documentatie nodig + +`AppConfig[:help_url] = "https://archivesspace.atlassian.net/wiki/spaces/ArchivesSpaceUserManual/overview"`` + +#### `AppConfig[:help_topic_base_url]` + +> TODO - Meer documentatie nodig + +`AppConfig[:help_topic_base_url] = "https://archivesspace.atlassian.net/wiki/spaces/ArchivesSpaceUserManual/pages/"`` + +### Gedeelde opslag + +#### `AppConfig[:shared_storage]` + +`AppConfig[:shared_storage] = proc { File.join(AppConfig[:data_directory], "shared") }` + +### Achtergrondtaken + +#### `AppConfig[:job_file_path]` + +Voorheen bekend als :import_job_path + +> TODO - Meer documentatie nodig + +`AppConfig[:job_file_path] = proc { AppConfig.has_key?(:import_job_path) ? AppConfig[:import_job_path] : File.join(AppConfig[:shared_storage], "job_files") }` + +#### `AppConfig[:job_poll_seconds]` + +> TODO - Meer documentatie nodig + +`AppConfig[:job_poll_seconds] = proc { AppConfig.has_key?(:import_poll_seconds) ? AppConfig[:import_poll_seconds] : 5 }` + +#### `AppConfig[:job_timeout_seconds]` + +> TODO - Meer documentatie nodig + +`AppConfig[:job_timeout_seconds] = proc { AppConfig.has_key?(:import_timeout_seconds) ? AppConfig[:import_timeout_seconds] : 300 }` + +#### `AppConfig[:jobs_cancelable]` + +Sta standaard alleen toe dat taken worden geannuleerd wanneer MySQL wordt gebruikt (omdat we wijzigingen kunnen terugdraaien). + +`AppConfig[:jobs_cancelable] = proc { (AppConfig[:db_url] != AppConfig.demo_db_url).to_s }` + +### Locaties + +#### `AppConfig[:max_location_range]` + +> TODO - Meer documentatie nodig + +`AppConfig[:max_location_range] = 1000` + +### Controle van Schema Info + +#### `AppConfig[:ignore_schema_info_check]` + +De ASpace-backend start niet als de versie van schema_info in de database niet +correct is ingesteld voor deze versie van ASPACE. Dit zorgt ervoor dat alle +migraties zijn uitgevoerd en voltooid voordat de applicatie start. U kunt deze +controle hier overslaan, maar doet dit op eigen risico. + +`AppConfig[:ignore_schema_info_check] = false` + +### Demogegevens + +#### `AppConfig[:demo_data_url]` + +Dit is een URL naar demogegevens die kunnen worden gebruikt voor tests, +onderwijs enzovoort. Stel om deze gegevens te gebruiken de OS-omgevingsvariabele ASPACE_DEMO = true in. + +`AppConfig[:demo_data_url] = "https://s3-us-west-2.amazonaws.com/archivesspacedemo/latest-demo-data.zip"` + +### Externe ID's + +#### `AppConfig[:show_external_ids]` + +Toon externe ID's in de frontend. + +`AppConfig[:show_external_ids] = false` + +### Jetty-aanvraag-/antwoordbuffer + +Stel de toegestane grootte in van de aanvraag-/antwoordheader die Jetty +accepteert (grotere headers leiden tot een 403-fout). Als u deze limiet wilt +verhogen, moet u ook Nginx/Apache configureren als u die gebruikt. + +#### `AppConfig[:jetty_response_buffer_size_bytes]` + +`AppConfig[:jetty_response_buffer_size_bytes] = 64 * 1024` + +#### `AppConfig[:jetty_request_buffer_size_bytes]` + +`AppConfig[:jetty_request_buffer_size_bytes] = 64 * 1024` + +### Configuratievelden voor containerbeheer + +#### `AppConfig[:container_management_barcode_length]` + +Definieert globale en instellingsspecifieke validatie van barcodes (alleen op +lengte). Barcodes zonder waarde of met een waarde tussen :min en :max worden +bij het opslaan goedgekeurd. +Stel globale beperkingen in via :system_default en gebruik de waarde repo_code +voor beperkingen op instellingsniveau. +De waarden van :system_default worden waar mogelijk altijd overgenomen op lagere niveaus. + +`AppConfig[:container_management_barcode_length] = {:system_default => {:min => 5, :max => 10}, 'repo' => {:min => 9, :max => 12}, 'other_repo' => {:min => 9, :max => 9} }` + +#### `AppConfig[:container_management_extent_calculator]` + +Definieert het gedrag van de omvangcalculator voor het hele systeem. +Gebruik :report_volume (true/false) om aan te geven of de ruimte in kubieke +of lineaire maten moet worden weergegeven. +Gebruik :unit (:feet, :inches, :meters, :centimeters) om de eenheid te bepalen +waarin de calculator de omvang weergeeft. +Gebruik :decimal_places om het aantal decimalen in te stellen dat de calculator teruggeeft. + +Voorbeeld: + +`AppConfig[:container_management_extent_calculator] = { :report_volume => true, :unit => :feet, :decimal_places => 3 }` + +### Recordovererving in de publieke interface + +#### `AppConfig[:record_inheritance]` + +Definieer de velden die een recordtype overneemt van bovenliggende records +wanneer deze velden geen waarde hebben in het record zelf. +Deze instelling wordt gebruikt in common/record_inheritance.rb en is +ontwikkeld ter ondersteuning van de nieuwe publieke interface. +Let op: wijzigingen aan de configuratie van record_inheritance worden pas van +kracht nadat de PUI-records opnieuw zijn geïndexeerd. Verwijder hiervoor de +bestanden uit indexer_pui_state. + +```ruby +AppConfig[:record_inheritance] = { + :archival_object => { + :inherited_fields => [ + { + :property => 'title', + :inherit_directly => true + }, + { + :property => 'component_id', + :inherit_directly => false + }, + { + :property => 'language', + :inherit_directly => true + }, + { + :property => 'dates', + :inherit_directly => true + }, + { + :property => 'extents', + :inherit_directly => false + }, + { + :property => 'linked_agents', + :inherit_if => proc {|json| json.select {|j| j['role'] == 'creator'} }, + :inherit_directly => false + }, + { + :property => 'notes', + :inherit_if => proc {|json| json.select {|j| j['type'] == 'accessrestrict'} }, + :inherit_directly => true + }, + { + :property => 'notes', + :inherit_if => proc {|json| json.select {|j| j['type'] == 'scopecontent'} }, + :inherit_directly => false + }, + { + :property => 'notes', + :inherit_if => proc {|json| json.select {|j| j['type'] == 'langmaterial'} }, + :inherit_directly => false + }, + ] + } +} +``` + +Samengestelde identificaties inschakelen; deze worden als eigenschap aan het +samengevoegde record toegevoegd: +`\_composite_identifier` + +De hier weergegeven waarden voor `:include_level` en `:identifier_delimiter` zijn de standaardwaarden. + +Als `:include_level` is ingesteld op true, worden niveauwaarden (bijvoorbeeld Series) opgenomen in `\_composite_identifier`. + +De `:identifier_delimiter` wordt gebruikt om de vierdelige identificatie van collecties samen te voegen. + +```ruby +AppConfig[:record_inheritance][:archival_object][:composite_identifiers] = { + :include_level => false, + :identifier_delimiter => ' ' +} +``` + +Gebruik dit patroon in uw configuratie om aanvullende elementen te laten overerven. + +```ruby +AppConfig[:record_inheritance][:archival_object][:inherited_fields] << + { + :property => 'linked_agents', + :inherit_if => proc {|json| json.select {|j| j['role'] == 'subject'} }, + :inherit_directly => true + } +``` + +... of gebruik dit patroon om meerdere nieuwe elementen tegelijk toe te voegen. + +```ruby +AppConfig[:record_inheritance][:archival_object][:inherited_fields].concat( + [ + { + :property => 'subjects', + :inherit_if => proc {|json| + json.select {|j| + ! j['_resolved']['terms'].select { |t| t['term_type'] == 'topical'}.empty? } + }, + :inherit_directly => true + }, + { + :property => 'external_documents', + :inherit_directly => false + }, + { + :property => 'rights_statements', + :inherit_directly => false + }, + { + :property => 'instances', + :inherit_directly => false + }, + ]) +``` + +Als u een van de standaardregels wilt wijzigen, kunt u het beste de volledige +standaardconfiguratie van record_inheritance uit commentaar halen en uw +wijzigingen aanbrengen. +Als u bijvoorbeeld wilt voorkomen dat scopecontent-aantekeningen worden +overgenomen in records van het type file of item, haalt u de volledige +standaardconfiguratie van record_inheritance hierboven uit commentaar en voegt +u een skip_if-clausule toe aan de scopecontent-regel, zoals hier: + +```ruby + { + :property => 'notes', + :skip_if => proc {|json| ['file', 'item'].include?(json['level']) }, + :inherit_if => proc {|json| json.select {|j| j['type'] == 'scopecontent'} }, + :inherit_directly => false + }, +``` + +### PUI-configuraties + +#### `AppConfig[:pui_search_results_page_size]` + +`AppConfig[:pui_search_results_page_size] = 10` + +#### `AppConfig[:pui_branding_img]` + +`AppConfig[:pui_branding_img] = 'archivesspace.small.png'` + +#### `AppConfig[:pui_block_referrer]` + +`AppConfig[:pui_block_referrer] = true # patron privacy; blocks full 'referer' when going outside the domain` + +#### `AppConfig[:pui_max_concurrent_pdfs]` + +Het aantal PDF's dat we tegelijkertijd (op de achtergrond) genereren. + +Het genereren van PDF's kan bij grote collecties veel geheugen verbruiken. Daarom +is deze waarde standaard vrij laag ingesteld. + +`AppConfig[:pui_max_concurrent_pdfs] = 2` + +#### `AppConfig[:pui_pdf_timeout]` + +U kunt dit instellen op nil of nul om een time-out te voorkomen. + +`AppConfig[:pui_pdf_timeout] = 600` + +#### `AppConfig[:pui_hide]` + +`AppConfig[:pui_hide] = {}` + +De volgende instellingen bepalen welke 'tabbladen' in het hoofdmenu staan: + +```ruby +AppConfig[:pui_hide][:repositories] = false +AppConfig[:pui_hide][:resources] = false +AppConfig[:pui_hide][:digital_objects] = false +AppConfig[:pui_hide][:accessions] = false +AppConfig[:pui_hide][:subjects] = false +AppConfig[:pui_hide][:agents] = false +AppConfig[:pui_hide][:classifications] = false +AppConfig[:pui_hide][:search_tab] = false +``` + +De volgende instellingen bepalen globaal of de verschillende 'badges' op de +pagina van de collectiebeherende instelling worden weergegeven. U kunt ze +hieronder per instelling overschrijven (bijvoorbeeld: +`AppConfig[:repos][{repo_code}][:hide][:counts] = true` + +```ruby +AppConfig[:pui_hide][:resource_badge] = false +AppConfig[:pui_hide][:record_badge] = true # hide by default +AppConfig[:pui_hide][:digital_object_badge] = false +AppConfig[:pui_hide][:accession_badge] = false +AppConfig[:pui_hide][:subject_badge] = false +AppConfig[:pui_hide][:agent_badge] = false +AppConfig[:pui_hide][:classification_badge] = false +AppConfig[:pui_hide][:counts] = false +``` + +De volgende instelling bepaalt globaal of het navigatietabblad/-element +'containerinventaris' wordt verborgen op de collectiepagina. + +``` +AppConfig[:pui_hide][:container_inventory] = false +``` + +#### `AppConfig[:pui_requests_permitted_for_types]` + +Bepaal wanneer de aanvraagknop wordt weergegeven. + +`AppConfig[:pui_requests_permitted_for_types] = [:resource, :archival_object, :accession, :digital_object, :digital_object_component]` + +#### `AppConfig[:pui_requests_permitted_for_containers_only]` + +Stel in op 'true' als u aanvragen wilt uitschakelen wanneer er geen topcontainer is. + +`AppConfig[:pui_requests_permitted_for_containers_only] = false` + +#### `AppConfig[:pui_repos]` + +Voorbeelden voor een specifieke collectiebeherende instelling. Vervang +{repo_code} door de code van uw instelling, bijvoorbeeld 'foo' (let op: gebruik +kleine letters). + +`AppConfig[:pui_repos] = {}` + +Voorbeelden: + +Schakel aanvragen voor een bepaalde collectiebeherende instelling alleen in +voor bepaalde recordtypen (let op: deze configuratie overschrijft voor die +instelling AppConfig[:pui_requests_permitted_for_types]). + +```ruby +AppConfig[:pui_repos]['foo'][:requests_permitted_for_types] = [:resource, :archival_object, :accession, :digital_object, :digital_object_component] +``` + +Schakel aanvragen voor een bepaalde collectiebeherende instelling uit. + +```ruby +AppConfig[:pui_repos]['foo'][:requests_permitted_for_containers_only] = true +``` + +Stel het e-mailadres in waarnaar aanvragen voor de collectiebeherende instelling worden verstuurd: + +```ruby +AppConfig[:pui_repos]['foo'][:request_email] = {email address} +``` + +> TODO - Meer documentatie hierover nodig + +```ruby +AppConfig[:pui_repos]['foo'][:hide] = {} +AppConfig[:pui_repos]['foo'][:hide][:counts] = true +``` + +#### `AppConfig[:pui_display_deaccessions]` + +> TODO - Meer documentatie nodig + +`AppConfig[:pui_display_deaccessions] = true` + +#### `AppConfig[:pui_page_actions_cite]` + +Schakel de actie 'citeren' in of uit op de PUI-pagina van een collectie of archiefonderdeel. + +`AppConfig[:pui_page_actions_cite] = true` + +#### `AppConfig[:pui_page_actions_bookmark]` + +Schakel de actie 'bladwijzer' in of uit op de PUI-pagina van een collectie of archiefonderdeel. + +`AppConfig[:pui_page_actions_bookmark] = true` + +#### `AppConfig[:pui_page_actions_request]` + +Schakel de actie 'aanvragen' in of uit op de PUI-pagina van een collectie of archiefonderdeel. + +`AppConfig[:pui_page_actions_request] = true` + +#### `AppConfig[:pui_page_actions_print]` + +Schakel de actie 'afdrukken' in of uit op de PUI-pagina van een collectie of archiefonderdeel. + +`AppConfig[:pui_page_actions_print] = true` + +#### `AppConfig[:pui_enable_staff_link]` + +Voeg voor geauthenticeerde gebruikers vanuit het opgegeven record een link naar de medewerkersinterface toe. + +`AppConfig[:pui_enable_staff_link] = true` + +#### `AppConfig[:pui_staff_link_mode]` + +Standaard opent de link het record in de medewerkersinterface in de bewerkingsmodus. +Wijzig dit in 'readonly' om het record in de alleen-lezenmodus te openen. + +`AppConfig[:pui_staff_link_mode] = 'edit'` + +#### `AppConfig[:pui_page_custom_actions]` + +Voeg pagina-acties toe via de configuratie. + +`AppConfig[:pui_page_custom_actions] = []` + +Voorbeeld van een JavaScript-actie: + +```ruby +AppConfig[:pui_page_custom_actions] << { + 'record_type' => ['resource', 'archival_object'], # the jsonmodel type to show for + 'label' => 'actions.do_something', # the I18n path for the action button + 'icon' => 'fa-paw', # the font-awesome icon CSS class + 'onclick_javascript' => 'alert("do something grand");', +} +``` + +Voorbeeld van een hyperlinkactie: + +```ruby +AppConfig[:pui_page_custom_actions] << { + 'record_type' => ['resource', 'archival_object'], # the jsonmodel type to show for + 'label' => 'actions.do_something', # the I18n path for the action button + 'icon' => 'fa-paw', # the font-awesome icon CSS class + 'url_proc' => proc {|record| 'http://example.com/aspace?uri='+record.uri}, +} +``` + +Voorbeeld van een formulieractie via POST: + +```ruby +AppConfig[:pui_page_custom_actions] << { + 'record_type' => ['resource', 'archival_object'], # the jsonmodel type to show for + 'label' => 'actions.do_something', # the I18n path for the action button + 'icon' => 'fa-paw', # the font-awesome icon CSS class + # 'post_params_proc' returns a hash of params which populates a form with hidden inputs ('name' => 'value') + 'post_params_proc' => proc {|record| {'uri' => record.uri, 'display_string' => record.display_string} }, + # 'url_proc' returns the URL for the form to POST to + 'url_proc' => proc {|record| 'http://example.com/aspace?uri='+record.uri}, + # 'form_id' as string to be used as the form's ID + 'form_id' => 'my_grand_action', +} +``` + +Voorbeeld van een ERB-actie: + +```ruby +AppConfig[:pui_page_custom_actions] << { + 'record_type' => ['resource', 'archival_object'], + # the jsonmodel type to show for + # 'erb_partial' returns the path to an erb template from which the action will be rendered + 'erb_partial' => 'shared/my_special_action', +} +``` + +#### `AppConfig[:pui_email_enabled]` + +E-mailinstellingen voor de PUI (e-mails worden gelogd als deze instelling is uitgeschakeld) + +`AppConfig[:pui_email_enabled] = false` + +#### `AppConfig[:pui_email_override]` + +Zie hierboven AppConfig[:pui_repos][{repo_code}][:request_email] voor het +instellen van e-mailadressen per collectiebeherende instelling. Gebruik +'pui_email_override' voor tests; dit e-mailadres is het adres van alle verzonden e-mails. + +`AppConfig[:pui_email_override] = 'testing@example.com'` + +#### `AppConfig[:pui_request_email_fallback_to_address]` + +Het 'aan'-e-mailadres voor collectiebeherende instellingen die geen eigen e-mailadres hebben ingesteld. + +`AppConfig[:pui_request_email_fallback_to_address] = 'testing@example.com'` + +#### `AppConfig[:pui_request_email_fallback_from_address]` + +Het 'van'-e-mailadres voor collectiebeherende instellingen die geen eigen e-mailadres hebben ingesteld. + +`AppConfig[:pui_request_email_fallback_from_address] = 'testing@example.com'` + +#### `AppConfig[:pui_request_use_repo_email]` + +Gebruik voor aanvragen het e-mailadres uit het record van de collectiebeherende instelling (overschrijft het configuratie-e-mailadres). + +`AppConfig[:pui_request_use_repo_email] = false` + +#### `AppConfig[:pui_email_delivery_method]` + +`AppConfig[:pui_email_delivery_method] = :sendmail` + +#### `AppConfig[:pui_email_sendmail_settings]` + +```ruby +AppConfig[:pui_email_sendmail_settings] = { + location: '/usr/sbin/sendmail', + arguments: '-i' +} +``` + +#### `AppConfig[:pui_email_smtp_settings]` + +Van toepassing wanneer `AppConfig[:pui_email_delivery_method]` is ingesteld op `:smtp`. + +Voorbeeld van een SMTP-configuratie: + +```ruby +AppConfig[:pui_email_smtp_settings] = { + address: 'smtp.gmail.com', + port: 587, + domain: 'gmail.com', + user_name: '<username>', + password: '<password>', + authentication: 'plain', + enable_starttls_auto: true, +} +``` + +#### `AppConfig[:pui_email_perform_deliveries]` + +`AppConfig[:pui_email_perform_deliveries] = true` + +#### `AppConfig[:pui_email_raise_delivery_errors]` + +`AppConfig[:pui_email_raise_delivery_errors] = true` + +#### `AppConfig[:pui_readmore_max_characters]` + +Het aantal tekens waarna aantekeningen worden afgebroken en de link 'Meer lezen' wordt weergegeven. + +`AppConfig[:pui_readmore_max_characters] = 450` + +#### `AppConfig[:pui_expand_all]` + +Of standaard alle blokken met aanvullende informatie onderaan recordpagina's moeten worden uitgevouwen. Met `true` worden alle blokken uitgevouwen; met `false` worden ze ingeklapt. + +`AppConfig[:pui_expand_all] = false` + +#### `AppConfig[:max_search_columns]` + +Gebruik dit om het maximumaantal kolommen op te geven dat wordt weergegeven bij zoeken of bladeren. + +`AppConfig[:max_search_columns] = 7` diff --git a/src/content/docs/nl/customization/index.md b/src/content/docs/nl/customization/index.md new file mode 100644 index 0000000..94661cc --- /dev/null +++ b/src/content/docs/nl/customization/index.md @@ -0,0 +1,13 @@ +--- +title: Aanpassing en configuratie +description: Overzicht van de pagina's in de sectie Aanpassing van de website. +--- + +- [ArchivesSpace configureren](./configuration) +- [LDAP-authenticatie configureren](./ldap) +- [Ondersteuning toevoegen voor extra authenticatiebackends op basis van gebruikersnaam/wachtwoord](./authentication) +- [Tekst in ArchivesSpace aanpassen](./locales) +- [ArchivesSpace-plug-ins](./plugins) +- [ArchivesSpace thematiseren](./theming) +- [Frontend-assets beheren met Bower](./bower) +- [Aangepaste rapporten toevoegen](./reports) diff --git a/src/content/docs/nl/customization/ldap.md b/src/content/docs/nl/customization/ldap.md new file mode 100644 index 0000000..a325905 --- /dev/null +++ b/src/content/docs/nl/customization/ldap.md @@ -0,0 +1,70 @@ +--- +title: LDAP-authenticatie +description: Instructies voor het beheren van authenticatie via een of meer LDAP-directory's. +--- + +ArchivesSpace kan zijn eigen gebruikersdirectory beheren, maar kan ook worden +geconfigureerd om gebruikers te authenticeren via een of meer LDAP-directory's +door deze op te geven in het configuratiebestand van de applicatie. Wanneer +een gebruiker probeert in te loggen, wordt elke authenticatiebron geprobeerd +totdat er een overeenkomt. + +Een minimale LDAP-configuratie ziet er als volgt uit: + +```ruby +AppConfig[:authentication_sources] = [{ + :model => 'LDAPAuth', + :hostname => 'ldap.example.com', + :port => 389, + :base_dn => 'ou=people,dc=example,dc=com', + :username_attribute => 'uid', + :attribute_map => {:cn => :name}, +}] +``` + +Met deze configuratie authenticeert ArchivesSpace door verbinding te maken +met `ldap://ldap.example.com:389/`, een anonieme bind uit te voeren en in de +boom `ou=people,dc=example,dc=com` te zoeken naar `uid = <username>`. + +Als de gebruiker wordt gevonden, authenticeert ArchivesSpace deze door een +bind uit te voeren met het opgegeven wachtwoord. Tot slot geeft de +`:attribute_map`-vermelding aan hoe LDAP-attributen moeten worden gekoppeld +aan gebruikersattributen van ArchivesSpace (in het bovenstaande voorbeeld +wordt LDAP's `cn` gekoppeld aan ArchivesSpace' `name`). + +Veel LDAP-directory's ondersteunen geen anonieme bind. Om met zo'n directory +te integreren, moet u de gebruikersnaam en het wachtwoord opgeven van een +gebruiker die toestemming heeft om verbinding te maken met de directory en +andere gebruikers te zoeken. Als u de vorige configuratie voor dit geval aanpast, ziet deze er als volgt +uit: + +```ruby +AppConfig[:authentication_sources] = [{ + :model => 'LDAPAuth', + :hostname => 'ldap.example.com', + :port => 389, + :base_dn => 'ou=people,dc=example,dc=com', + :username_attribute => 'uid', + :attribute_map => {:cn => :name}, + :bind_dn => 'uid=archivesspace_auth,ou=system,dc=example,dc=com', + :bind_password => 'secretsquirrel', +}] +``` + +Tot slot vereisen sommige LDAP-directory's dat SSL-versleuteling wordt +gebruikt. Om ArchivesSpace te configureren voor verbinding via LDAPS, wijzigt +u de poort indien nodig en geeft u de optie `encryption` op: + +```ruby +AppConfig[:authentication_sources] = [{ + :model => 'LDAPAuth', + :hostname => 'ldap.example.com', + :port => 636, + :base_dn => 'ou=people,dc=example,dc=com', + :username_attribute => 'uid', + :attribute_map => {:cn => :name}, + :bind_dn => 'uid=archivesspace_auth,ou=system,dc=example,dc=com', + :bind_password => 'secretsquirrel', + :encryption => :simple_tls, +}] +``` diff --git a/src/content/docs/nl/customization/locales.md b/src/content/docs/nl/customization/locales.md new file mode 100644 index 0000000..6b6528c --- /dev/null +++ b/src/content/docs/nl/customization/locales.md @@ -0,0 +1,73 @@ +--- +title: Tekst aanpassen +description: Instructies voor het aanpassen van tekst in ArchivesSpace met locale-bestanden, waaronder het overschrijven van labels, berichten, knopinfo en tijdelijke aanduidingen via de Rails I18n-API. +--- + +ArchivesSpace heeft alle labels, berichten en knopinfo uit de applicatie ondergebracht in de locale-bestanden, die deel uitmaken van de +[Rails Internationalization (I18n)](http://guides.rubyonrails.org/i18n.html)-API. +De locales in deze map vormen de basis voor vertalingen die door alle +ArchivesSpace-applicaties worden gebruikt. Elke applicatie kan deze waarden +vervolgens aanvullen of overschrijven met eigen locale-bestanden. + +Raadpleeg voor een handleiding over het beheren van deze "i18n"-bestanden http://guides.rubyonrails.org/i18n.html + +U vindt de bronbestanden voor zowel de [medewerkersinterface](https://github.com/archivesspace/archivesspace/tree/master/frontend/config/locales) als de +[publieke applicatie](https://github.com/archivesspace/archivesspace/tree/master/public/config/locales). Er is ook een [gemeenschappelijk locale-bestand](https://github.com/archivesspace/archivesspace/blob/master/common/locales/en.yml) voor enkele waarden die in de ArchivesSpace-applicaties worden gebruikt. + +De basisvertalingen zijn als volgt onderverdeeld: + +- Het bovenste bestand "en.yml" bevat de Engelse vertalingen van alle recordlabels, berichten en knopinfo +- "enums/en.yml" bevat de waarden voor de dynamische enumeratiecodes — voeg uw vertalingen aan dit bestand toe nadat u uw enumeratiecodes hebt geïmporteerd + +Deze waarden worden in de weergaven opgehaald met de methode I18n.t(), zoals I18n.t("brand.welcome_message"). + +Als de waarde die u wilt overschrijven in het gemeenschappelijke locale-bestand staat (zoals bijvoorbeeld het veldlabel "titel digitaal object"), kunt u dit wijzigen door het bestand locales/en.yml in de distributiemap van ArchivesSpace eenvoudig aan te passen. U moet ArchivesSpace opnieuw starten om de wijzigingen toe te passen. + +Als de waarde die u wilt wijzigen in het specifieke bestand en.yml voor de publieke applicatie of de medewerkersinterface staat, kunt u deze waarden overschrijven met behulp van de map plugins. Als u bijvoorbeeld het welkomstbericht op de publieke frontend wilt wijzigen, maakt u in uw ArchivesSpace-distributie een bestand met de naam 'plugins/local/public/locales/en.yml' en voegt u de volgende waarden toe: + +```yaml +en: + brand: + title: My Archive + home: Home + +welcome_message: HEY HEY HEY!! +``` + +Start ArchivesSpace opnieuw om deze waarden toe te passen. + +Als u een nieuwe waarde toevoegt, moet u deze ook aan de medewerkersinterface toevoegen door in het vervolgkeuzemenu Systeem de optie Gecontroleerde waardelijsten beheren te kiezen. Selecteer de lijst en voeg de waarde toe. Start ArchivesSpace opnieuw; de vertaling die u in het yml-bestand hebt ingesteld, wordt dan weergegeven. + +Als u een andere taal gebruikt, vervangt u en.yml door een ander bestand (zoals fr.yml) en werkt u de locale-instelling in het bestand config.rb bij (bijvoorbeeld: AppConfig[:locale] = :fr). + +## Knopinfo + +U voegt knopinfo aan een recordlabel toe door een nieuwe vermelding te maken met "\_tooltip" achter de code van het label. Voorbeeld: knopinfo toevoegen aan het veld Titel van een record voor nog niet ontsloten materiaal: + +```yaml +en: + accession: + title: Title + title_tooltip: | + <p>The title assigned to an accession or resource. The accession title + need not be the same as the resource title. Moreover, a title need not + be expressed for the accession record, as it can be implicitly + inherited from the resource record to which the accession is + linked.</p> +``` + +## Tijdelijke aanduidingen + +Voor tekstvelden of tekstgebieden kunt u tijdelijke aanduidingstekst instellen die wordt weergegeven wanneer het veld leeg is (zie voor meer informatie +http://www.w3.org/html/wg/drafts/html/master/forms.html#the-placeholder-attribute). +Houd er rekening mee dat hoewel de meeste moderne browserversies deze functie ondersteunen, +oudere versies dat niet doen. + +U voegt een tijdelijke aanduiding aan een tekstveld van een record toe door een nieuwe vermelding te maken met "\_placeholder" achter de code van het label. Bijvoorbeeld: + +```yaml +en: + accession: + title: Title + title_placeholder: See DACS 2.3.18-2.3.22 +``` diff --git a/src/content/docs/nl/customization/plugins.md b/src/content/docs/nl/customization/plugins.md new file mode 100644 index 0000000..b43a2f2 --- /dev/null +++ b/src/content/docs/nl/customization/plugins.md @@ -0,0 +1,331 @@ +--- +title: Plug-ins +description: Een overzicht van het ontwikkelen, structureren, inschakelen en configureren van plug-ins in ArchivesSpace om het gedrag, de interface, de huisstijl en de zoekfunctionaliteit van de applicatie aan te passen zonder de kerncode te wijzigen. +--- + +Plug-ins zijn een krachtige functie waarmee u de meeste aspecten van het gedrag +van de applicatie kunt wijzigen. + +Met plug-ins kunt u ArchivesSpace aanpassen door functies te overschrijven of uit te breiden, +zonder de kerncodebase te wijzigen. Omdat plug-ins zelfstandige pakketten zijn, kunt u +aanpassingspakketten eenvoudig delen tussen ArchivesSpace-instanties. + +De ArchivesSpace-distributie bevat de voorbeeldplug-in `hello_world`. Raadpleeg het [README-bestand](https://github.com/archivesspace/archivesspace/blob/master/plugins/hello_world/README.md) voor een gedetailleerde beschrijving van de opbouw en implementatie. + +U vindt andere voorbeelden in de volgende repositories met plug-ins. De ArchivesSpace-plug-ins die officieel worden ondersteund en onderhouden door het ArchivesSpace Program Team staan in archivesspace-plugins (https://github.com/archivesspace-plugins). Verouderde code die niet meer wordt ondersteund maar ter referentie is bewaard, staat in archivesspace-deprecated (https://github.com/archivesspace-deprecated). Er is ook een open, niet-beheerde GitHub-repository waar communityleden hun code kunnen delen: archivesspace-labs (https://github.com/archivesspace-labs). De door de community ontwikkelde Python-bibliotheek voor interactie met de ArchivesSpace-API, ArchivesSnake, wordt beheerd in de repository archivesspace-labs. + +## Plug-ins inschakelen + +U schakelt plug-ins in door ze in de map `plugins` te plaatsen en ernaar te verwijzen in de +ArchivesSpace-configuratie, `config/config.rb`. Bijvoorbeeld: + +```ruby +AppConfig[:plugins] = ['local', 'hello_world', 'my_plugin'] +``` + +Deze configuratie gaat ervan uit dat de volgende mappen bestaan: + + plugins + hello_world + local + my_plugin + +De volgorde waarin de plug-ins in de configuratieoptie `:plugins` worden vermeld, +bepaalt de volgorde waarin de applicatie ze laadt. + +## Structuur van plug-ins + +De directorystructuur binnen een plug-in is vergelijkbaar met die van de kernapplicatie. +Hieronder ziet u de ondersteunde structuur van een plug-in. Bestanden in deze mappen kunnen +worden gebruikt om het gedrag van de kernapplicatie te overschrijven of uit te breiden. + + backend + controllers ......... backend endpoints + model ............... database mapping models + converters .......... classes for importing data + job_runners ......... classes for defining background jobs + plugin_init.rb ...... if present, loaded when the backend first starts + lib/bulk_import ..... bulk import processor + frontend + assets .............. static assets (such as images, javascript) in the staff interface + controllers ......... controllers for the staff interface + locales ............. locale translations for the staff interface + views ............... templates for the staff interface + plugin_init.rb ...... if present, loaded when the staff interface first starts + public + assets .............. static assets (such as images, javascript) in the public interface + controllers ......... controllers for the public interface + locales ............. locale translations for the public interface + views ............... templates for the public interface + plugin_init.rb ...... if present, loaded when the public interface first starts + migrations ............ database migrations + schemas ............... JSONModel schema definitions + search_definitions.rb . Advanced search fields + +**Let op:** `backend/lib/bulk_import` is de enige directory in `backend/lib/` die door de plug-inbeheerder wordt geladen. Andere bestanden in `backend/lib/` worden niet geladen tijdens het opstarten. + +**Let op:** Om het gedrag van kernmodellen en controllers te overschrijven of uit te breiden, kunt u niet simpelweg uw vervanging met dezelfde naam in het overeenkomstige directorypad plaatsen. U kunt kernmodellen en controllers overschrijven door een `after_initialize`-blok toe te voegen aan `plugin_init.rb` (bijvoorbeeld [aspace-hvd-pui](https://github.com/harvard-library/aspace-hvd-pui/blob/master/public/plugin_init.rb#L43)). + +## Gedrag overschrijven + +Een algemene regel is: om gedrag te overschrijven in plaats van uit te breiden, gebruikt u het pad +naar het bestand met het gedrag dat u wilt overschrijven. + +Een plug-in hoeft niet al deze mappen te bevatten. Om bijvoorbeeld een deel van een localebestand +voor de medewerkersinterface te overschrijven, kunt u deze structuur aan de lokale plug-in toevoegen: + + plugins/local/frontend/locales/en.yml + +Meer informatie over het overschrijven van localebestanden vindt u in [Tekst aanpassen in ArchivesSpace](/customization/locales). + +## De visuele (web)presentatie overschrijven + +U kunt elk viewbestand in de kernapplicatie rechtstreeks overschrijven door op het overeenkomstige pad een erb-bestand met dezelfde naam te plaatsen. +Als u bijvoorbeeld het uiterlijk van de pagina "Welcome" [startpagina] in de publieke gebruikersinterface (PUI) wilt aanpassen, kunt u wijzigingen aanbrengen in een bestand `show.html.erb` en dat plaatsen in `plugins/my_fine_plugin/public/views/welcome/show.html.erb`. (Waar _my_fine_plugin_ de naam van uw plug-in is.) + +### Een breed toegepaste stijl- of JavaScript-wijziging implementeren + +Tenzij u inline stijl of JavaScript wilt schrijven (wat voor een of twee templates praktisch kan zijn), is de aanbevolen aanpak om `plugins/my_fine_plugin/public/views/layout_head.html.erb` of `plugins/my_fine_plugin/frontend/views/layout_head.html.erb` te maken. Dit bestand bevat HTML-instructies om uw JavaScript of CSS op te nemen in het element `<HEAD>` van de template. Hier volgt een voorbeeld: + +- Voor de publieke interface wil ik de tekstgrootte wijzigen van alle links waar de gebruiker met de aanwijzer boven zweeft. + - Ik maak `plugins/my_fine_plugin/public/assets/my.css`: + ```css + a:hover { + font-size: 2em; + } + ``` + - Ik maak `plugins/my_fine_plugin/public/views/layout_head.html.erb` en voeg het volgende toe: + ```ruby + <%= stylesheet_link_tag "#{@base_url}/assets/my.css", media: :all %> + ``` +- Voor de publieke interface wil ik JavaScript-gedrag toevoegen waardoor er sterretjes verschijnen wanneer de gebruiker met de aanwijzer boven een lijstitem zweeft. + - Ik maak `plugins/my_fine_plugin/public/assets/my.js`" + ```javascript + $(function () { + $('li').hover( + function () { + $(this).append($('<span> ***</span>')) + }, + function () { + $(this).find('span:last').remove() + } + ) + }) + ``` + - Ik voeg het volgende toe aan `plugins/my_fine_plugin/public/views/layout_head.html.erb`: + ```ruby + <%= javascript_include_tag "#{@base_url}/assets/my.js" %> + ``` + +## Uw eigen huisstijl toevoegen + +U kunt bijvoorbeeld de huisstijl van de medewerkersinterface overschrijven door +uw eigen template op deze locatie toe te voegen: + + plugins/local/frontend/views/site/\_branding.html.erb + +Bestanden zoals afbeeldingen, stylesheets en PDF's kunnen als statische bronnen beschikbaar worden gemaakt +door ze in een map `assets` onder een ingeschakelde plug-in te plaatsen. Bijvoorbeeld, het volgende bestand: + + plugins/local/frontend/assets/my_logo.png + +is beschikbaar via de volgende URL: + + http://your.frontend.domain.and:port/assets/my_logo.png + +Gebruik bijvoorbeeld in het bestand voor de aangepaste huisstijl markup zoals deze om naar het logo te verwijzen: + +```erb + <div class="container branding"> + <img src="<%= #{AppConfig[:frontend_proxy_prefix]} %>assets/my_logo.png" alt="My logo" /> + </div> +``` + +## Een favicon aanpassen + +Een favicon is een pictogram dat bij een webpagina hoort en door browsers en besturingssystemen wordt weergegeven (bijvoorbeeld in de adresbalk of het tabblad van een browser, naast de webpaginanaam in een bladwijzerlijst enzovoort). + +### Standaardafbeeldingen + +De ArchivesSpace-favicons zijn opgeslagen in de map `public/` op het hoogste niveau van de frontend- en publieke applicaties. + +1. `frontend/public/favicon-AS.png` +2. `frontend/public/favicon-AS.svg` +3. `public/public/favicon-AS.png` +4. `public/public/favicon-AS.svg` + +### Markup + +De favicon-markup staat in de partial-template voor favicons van elke applicatie: + +1. `frontend/app/views/site/\_favicon.html.erb` +2. `public/app/views/shared/\_favicon.html.erb` + +### Configuratie + +Favicons worden standaard weergegeven via de configuratieopties in `config.rb` (of `common/config/config-defaults.rb` tijdens ontwikkeling). Stel de betreffende optie in op `false` om geen favicon weer te geven. + +```rb +# config.rb +AppConfig[:pui_show_favicon] = true # whether or not to show a favicon +AppConfig[:frontend_show_favicon] = true # whether or not to show a favicon +``` + +### Voorbeelden van plug-ins + +Vervang de standaardfavicon door uw eigen favicon via een plug-in. + +:::caution[Bestandsnamen voor favicons die zijn gereserveerd] +Bestanden met aangepaste favicons moeten een andere naam hebben dan `favicon-AS.png` en `favicon-AS.svg` om de standaardfavicon te overschrijven. +::: + +#### Frontend + +De frontend-plug-in moet de volgende directorystructuur hebben: + +``` +plugins/local/frontend/ +├── assets +│   ├── favicon.png +│   └── favicon.svg +└── views + └── site + └── _favicon.html.erb +``` + +De favicon-template voor de frontend ziet er ongeveer zo uit: + +```erb +<!-- plugins/local/frontend/views/site/_favicon.html.erb --> +<link rel="icon" type="image/png" href="<%= AppConfig[:frontend_proxy_prefix] %>assets/favicon.png"> +<link rel="icon" type="text/svg+xml" href="<%= AppConfig[:frontend_proxy_prefix] %>assets/favicon.svg"> +``` + +#### Publieke applicatie + +De plug-in voor de publieke applicatie moet de volgende directorystructuur hebben: + +``` +plugins/local/public/ +├── assets +│   ├── favicon.png +│   └── favicon.svg +└── views + └── shared + └── _favicon.html.erb +``` + +De favicon-template voor de publieke applicatie ziet er ongeveer zo uit: + +```erb +<!-- plugins/local/public/views/shared/_favicon.html.erb --> +<link rel="icon" type="image/png" href="<%= asset_path('favicon.png', skip_pipeline: true) %>"> +<link rel="icon" type="image/svg+xml" href="<%= asset_path('favicon.svg', skip_pipeline: true) %>"> +``` + +## Plug-inconfiguratie + +Plug-ins kunnen optioneel een configuratiebestand bevatten op `plugins/[plugin-name]/config.yml`. +Dit configuratiebestand ondersteunt de volgende opties: + + system_menu_controller + The name of a controller that will be accessible via a Plugins menu in the System toolbar + repository_menu_controller + The name of a controller that will be accessible via a Plugins menu in the Repository toolbar + parents + [record-type] + name + cardinality + ... + +`system_menu_controller` en `repository_menu_controller` geven de namen op van frontend-controllers +die respectievelijk toegankelijk zijn via de werkbalk Systeem en de werkbalk voor de collectiebeherende instelling. Als ingeschakelde plug-ins +een van deze configuratieopties hebben opgegeven, verschijnt er een vervolgkeuzemenu `Plugins` in de werkbalken. De +controllernaam volgt de gebruikelijke naamgevingsconventies, bijvoorbeeld: + +```ruby +repository_menu_controller: hello_world +``` + +Dit verwijst naar een controllerbestand op `plugins/hello_world/frontend/controllers/hello_world_controller.rb` +waarin een controllerklasse met de naam `HelloWorldController` is geïmplementeerd. Wanneer de gebruiker het menu-item selecteert, +wordt de actie `index` op de controller aangeroepen. + +De URL's voor plug-incontrollers vallen onder `plugins`. De URL voor het bovenstaande +voorbeeld is daarom: + + http://your.frontend.domain.and:port/plugins/hello_world + +De vertaling van de naam van de plug-in in het vervolgkeuzemenu `Plugins` wordt ook opgegeven in een localebestand in de directory `frontend/locales` van de plug-in. In het voorbeeld `hello_world` staat bijvoorbeeld een Engels localebestand op: + + plugins/hello_world/frontend/locales/en.yml + +De vertaling van de naam van de plug-in in de vervolgkeuzemenu's `Plugins` wordt opgegeven met de sleutel `label` onder de plug-in, zoals hier: + +```yaml +en: + plugins: + hello_world: + label: Hello World +``` + +Het voorbeeld-localebestand bevat ook andere sleutels voor vertalingen van tekst die deel uitmaakt van de gebruikersinterface van de plug-in. Plaats de vertalingen van uw plug-in op de aangegeven manier onder `plugins.[your_plugin_name]` om te voorkomen dat u per ongeluk vertalingen van andere interface-elementen overschrijft. In het bovenstaande voorbeeld kan de vertaling voor de sleutel `label` rechtstreeks vanuit een erb-viewbestand worden opgevraagd: + +```ruby +<%= I18n.t("plugins.hello_world.label") %> +``` + +Elke vermelding onder `parents` specificeert een recordtype waarvoor deze plug-in een nieuw subrecord aanbiedt. +`[record-type]` is de naam van het bestaande recordtype, bijvoorbeeld `accession`. `name` is de +naam van de plug-in in de rol van subrecord van deze ouder, bijvoorbeeld `hello_worlds`. +`cardinality` specificeert de cardinaliteit van de plug-inrecords. De momenteel ondersteunde waarden zijn +`zero-to-many` en `zero-to-one`. + +## Zoekgedrag wijzigen + +Een plug-in kan extra velden aan de interface voor geavanceerd zoeken toevoegen door +een bestand `search_definitions.rb` op het hoogste niveau van de +plug-indirectory op te nemen. Dit bestand kan definities bevatten zoals: + +```ruby +AdvancedSearch.define_field(:name => 'payment_fund_code', :type => :enum, :visibility => [:staff], :solr_field => 'payment_fund_code_u_utext') +AdvancedSearch.define_field(:name => 'payment_authorizers', :type => :text, :visibility => [:staff], :solr_field => 'payment_authorizers_u_utext') +``` + +Elk gedefinieerd veld verschijnt als doorzoekbaar veld in de interface voor geavanceerd zoeken. +De optie `:visibility` bepaalt of het veld wordt weergegeven in de medewerkersinterface of de publieke interface (of allebei), terwijl +de parameter `:type` bepaalt welk soort zoekopdracht wordt uitgevoerd. +Geldige waarden zijn `:text:`, `:boolean`, `:date` en `:enum`. Tot slot +bepaalt de parameter `:solr_field` welk veld uit de onderliggende index wordt gebruikt. + +## Aangepaste rapporten toevoegen + +U kunt aangepaste rapporten aan plug-ins toevoegen door een nieuw rapportmodel als subklasse van `AbstractReport` toe te voegen aan `plugins/[plugin-name]/backend/model/` en de vertalingen voor dat model aan `plugins/[plugin-name]/frontend/locales/[language].yml`. Raadpleeg bestaande rapporten in de subdirectory reports van de hoofdmap van ArchivesSpace voor voorbeelden van de structuur van een rapportmodel. + +Er zijn verschillende beperkingen voor het toevoegen van rapporten aan plug-ins. Zo kunnen rapporten uit plug-ins alleen de generieke rapportsjabloon gebruiken. ArchivesSpace zoekt alleen naar rapportsjablonen in de subdirectory reports van de hoofdmap van ArchivesSpace, niet in plug-indirectories. Als u een aangepast rapport met een eigen sjabloon wilt implementeren, kunt u overwegen het rapport toe te voegen aan `archivesspace/reports/` in plaats van `archivesspace/plugins/[plugin-name]/backend/model/`. + +## Specifieke hooks voor de frontend + +Om via uw plug-in eenvoudiger nieuwe recordvelden en -secties aan recordformulieren toe te voegen, biedt de ArchivesSpace-frontend een reeks hooks via de module `frontend/config/initializers/plugin.rb`. Dit zijn: + +- `Plugins.add_search_base_facets(*facets)` - voegt extra facetten toe aan de basislijst met facetten voor alle recordzoekopdrachten en lijstpagina's. + +- `Plugins.add_search_facets(jsonmodel_type, *facets)` - voegt facetten toe voor een bepaald JSONModel-type, zodat ze worden opgenomen in zoekopdrachten en lijstpagina's voor dat recordtype. + +- `Plugins.add_resolve_field(field_name)` - gebruik dit wanneer u een nieuw veld of een nieuwe relatie hebt toegevoegd en wilt dat deze wordt opgelost wanneer het record uit de API wordt opgehaald. + +- `Plugins.register_edit_role_for_type(jsonmodel_type, role)` - registreert een nieuw JSONModel op het hoogste niveau en de bijbehorende bewerkingsrol, zodat de lijstweergave kan bepalen of de gebruiker de knop "Edit" kan zien. + +- `Plugins.register_note_types_handler(proc)` waarbij proc de parameters `jsonmodel_type, note_types, context` verwerkt - hiermee kan een plug-in de notitietypen aanpassen die voor een bepaald JSONModel-type worden weergegeven. U kunt bijvoorbeeld de notitietypen filteren die niet van toepassing zijn op uw instelling. + +- `Plugins.register_plugin_section(section)` - hiermee kunt u een template definiëren die als sectie wordt ingevoegd in een bepaald JSONModel-record. Een sectie is van het type `Plugins::AbstractPluginSection` en definieert de bronplug-in `plugin`, de sectienaam `name`, de `jsonmodel_types` waarvoor de sectie moet worden weergegeven en eventuele `opts` die de templates nodig hebben tijdens het weergeven. Deze nieuwe secties (toevoegingen voor alleen-lezen, bewerken en de zijbalk) worden weergegeven via de render-methoden van `PluginHelper`. + + U kunt `Plugins::AbstractPluginSection` subclassen om willekeurige HTML flexibel op te nemen. ArchivesSpace bevat twee voorbeelden: + - `Plugins::PluginSubRecord` - gebruikt de partial `shared/subrecord` om een standaard opgemaakte ArchivesSpace-sectie weer te geven. Voor `opts` moet het JSONModel-veld zijn gedefinieerd. + + - `Plugins::PluginReadonlySearch` - gebruikt de partial `search/embedded` om een zoekresultatenlijst als sectie weer te geven. Voor `opts` moeten de aangepaste filtertermen voor deze zoekopdracht zijn gedefinieerd. + +## Meer informatie + +**Test uw plug-in grondig, want deze kan onvoorziene gevolgen hebben voor uw +ArchivesSpace-applicatie.** diff --git a/src/content/docs/nl/customization/reports.md b/src/content/docs/nl/customization/reports.md new file mode 100644 index 0000000..2e79cec --- /dev/null +++ b/src/content/docs/nl/customization/reports.md @@ -0,0 +1,51 @@ +--- +title: Rapporten +description: Instructies voor het maken van aangepaste rapporten en subrapporten in ArchivesSpace, inclusief de vereiste structuur, SQL-gebruik, vertalingen, optionele aanpassingsmethoden en integratie met het rapportageframework. +--- + +Een rapport toevoegen is bedoeld als een vrij eenvoudig proces. Hieronder worden de vereisten voor het maken van een rapport beschreven. + +## Een rapport toevoegen + +### Vereist + +- Maak een klasse voor uw rapport die een subklasse is van AbstractReport. +- Roep register_report aan. Als uw rapport parameters heeft, geeft u die hier op. +- Implementeer query_string + - Dit moet een onbewerkte SQL-tekenreeks zijn. + - Om SQL-injectie te voorkomen, gebruikt u db.literal voor alle gebruikersinvoer; gebruik bijvoorbeeld `"select * from table where column = #{db.literal(value)}" ` in plaats van `"select * from table where column = '#{value}'"` +- Geef vertalingen op voor de kolomkoppen en de titel van uw rapport. + - Deze moeten in yml-bestanden staan onder _language_.reports._report name_ + - De vertaling van title mag de naam van het rapport zijn die u zelf kiest. + - Als de gewenste vertaling al voorkomt in _language_.reports.translation_defaults (te vinden in de map static), hoeft u deze niet op te geven. + - Vertalingen die specifiek zijn voor het afzonderlijke rapport krijgen voorrang op standaardvertalingen. + +### Optioneel + +- Implementeer uw eigen initialisatiemethode als uw rapport parameters heeft. +- Implementeer fix_row om gegevens op te schonen en subrapporten toe te voegen. + - Elk resultaat wordt als een hash aan fix_row doorgegeven. + - ReportUtils biedt verschillende klassenmethoden om het opschonen van gegevens te vereenvoudigen. + - U kunt hier ook subrapporten toevoegen met iets als `row[:subreport_name] = SubreportClassName.new(self, row[:id]).get_content`, waarbij row het resultaat is in de vorm van een hash die als parameter aan fix_row is doorgegeven. Zie [Een subrapport toevoegen](#adding-a-subreport) voor meer informatie over het toevoegen van subrapporten. + - Soms wilt u iets uit het resultaat verwijderen dat u nodig had om een subrapport te genereren, maar dat niet in het uiteindelijke rapport moet worden weergegeven (zoals id). Gebruik hiervoor `row.delete(:id)`. +- Speciale implementatie van query: de standaardimplementatie is simpelweg `db.fetch(query_string)`, maar door deze zelf te implementeren kunt u meer flexibiliteit krijgen. Uiteindelijk moet deze een resultaatset retourneren. +- Er is een hash met de naam info die bepaalt wat er in de koptekst bovenaan het rapport wordt weergegeven. Voorbeelden zijn het totale aantal records, de totale omvang of parameters die de gebruiker voor uw rapport heeft opgegeven. Voeg alles wat u in de rapportkoptekst wilt weergeven toe aan info. De naam van de collectiebeherende instelling wordt automatisch opgenomen. Zorg dat u vertalingen opgeeft voor de sleutels die u aan info toevoegt. +- after_tasks wordt uitgevoerd nadat fix_row op alle resultaten is uitgevoerd. Implementeer dit als u nog iets moet doen voordat het rapport wordt weergegeven. +- Geef identifier_field op als u voor elk afzonderlijk record een kop wilt toevoegen. Voor een rapport over nog niet ontsloten materiaal zou identifier_field bijvoorbeeld `:accession_number` kunnen zijn. +- Implementeer page_break zo dat deze false is als u geen pagina-einde na elk record in de PDF van het rapport wilt. +- Implementeer special_translation als u iets op een speciale manier wilt vertalen (d.w.z. als dit niet met het yml-bestand kan worden bereikt). + +## Een subrapport toevoegen + +### Vereist + +- Maak een klasse voor uw subrapport die een subklasse is van AbstractSubreport. +- Maak een initialisatiemethode die het bovenliggende rapport/subrapport en alle parameters ontvangt die nodig zijn om het subrapport uit te voeren (meestal is dit alleen een id uit het resultaat van het bovenliggende rapport/subrapport). De initialisatiemethode moet `super(parent_report)` aanroepen. +- Implementeer query_string. Dit werkt net als bij rapporten. +- Geef de benodigde vertalingen op. + +### Optioneel + +- Speciale implementatie van query +- fix_row werkt net als bij rapporten. + - Houd er rekening mee dat u geneste subrapporten kunt toevoegen. diff --git a/src/content/docs/nl/customization/theming.md b/src/content/docs/nl/customization/theming.md new file mode 100644 index 0000000..bc1b622 --- /dev/null +++ b/src/content/docs/nl/customization/theming.md @@ -0,0 +1,110 @@ +--- +title: Thema's aanpassen +description: Een handleiding voor het aanpassen van het uiterlijk van ArchivesSpace met plug-ins of een volledige herbouw van het thema, inclusief instructies voor het wijzigen van logo's, CSS en lay-outelementen in zowel de publieke als de medewerkersinterface. +--- + +## Kleine aanpassingen + +Voor kleine wijzigingen aan het thema van uw site kunt u het best een plug-in gebruiken. Met een plug-in kunnen we standaardweergaven, controllers, modellen enzovoort overschrijven zonder de broncode volledig opnieuw op te bouwen. Verwijder het `#` aan het begin van elke regel die u wilt aanpassen. Regels die met een `#` beginnen, worden genegeerd. + +Stel dat we het logo voor de publieke gebruikersinterface willen wijzigen. Dat kan eenvoudig in uw `config.rb`-bestand: + +```ruby +AppConfig[:pui_branding_img] +``` + +Deze instelling wordt gebruikt door het bestand `public/app/views/shared/_header.html.erb` om het logo voor de PUI weer te geven. U hoeft dat bestand niet aan te passen; alleen de instelling in uw `config.rb`-bestand. + +U kunt de afbeelding opslaan in `plugins/local/public/assets/images/logo.png`. Waarschijnlijk moet u een of meer mappen aanmaken. + +De instelling `AppConfig[:pui_branding_img]` ziet er ongeveer zo uit: + +```ruby +AppConfig[:pui_branding_img] = '/assets/images/logo.png' +``` + +U kunt en moet ook alternatieve tekst voor de PUI-logoafbeelding opgeven via: + +```ruby +AppConfig[:pui_branding_img_alt_text] = 'My alt text' +``` + +Verwijder het `#` aan het begin van elke regel die u wilt aanpassen. Regels die met een `#` beginnen, worden genegeerd. + +Als u wilt dat de afbeelding in de PUI naar een andere locatie linkt, moet u het bestand `public/app/views/shared/_header.html.erb` aanpassen. Aan de regel die het logo aanmaakt, hoeft alleen een `a href` te worden toegevoegd. U moet ook `AppConfig[:pui_branding_img_alt_text]` aanpassen, zodat duidelijk is dat de afbeelding ook als link werkt (bijvoorbeeld `AppConfig[:pui_branding_img_alt_text] = 'Back to Example College Home'`). Het resultaat ziet er ongeveer zo uit: + +```erb +<div class="col-sm-3 hidden-xs"><a href="https://example.com"><img class="logo" src="<%= asset_path(AppConfig[:pui_branding_img]) %>" alt="<%= AppConfig[:pui_branding_img_alt_text] %>" /></a></div> +``` + +Voor het logo van de medewerkersinterface is een klein plug-inbestand nodig; dit kan niet worden ingesteld in uw `config.rb`-bestand. U moet dit wijzigen in het bestand `plugins/local/frontend/views/site/_branding.html.erb`. Waarschijnlijk moet u een of meer mappen aanmaken. Maak vervolgens het bestand `_branding.html.erb` aan en plak de volgende code erin: + +```erb +<div class="container-fluid navbar-branding"> + <%= image_tag "archivesspace/archivesspace.small.png", :class=>"img-responsive", :alt=>"My image alt text" %> +</div> +``` + +Wijzig `"archivesspace/archivesspace.small.png"` in het pad naar uw afbeelding `/assets/images/logo.png` en plaats uw logo in de map `plugins/local/frontend/assets/images/`. Waarschijnlijk moet u een of meer mappen aanmaken. + +**Opmerking:** Omdat bestanden die we aan de plug-inmap toevoegen niet worden voorgecompileerd door de assetpipeline van Rails, kunnen we sommige taghelpers (zoals img_tag ) niet gebruiken: die gaan ervan uit dat de asset door de assetpipeline wordt beheerd. + +Start de applicatie opnieuw; daarna zou uw logo in de standaardweergave zichtbaar moeten zijn. + +## CSS-regels toevoegen + +U kunt CSS ook aanpassen via het plug-insysteem. Als u geen volledig nieuwe plug-in wilt maken, kunt u het eenvoudigst de plug-in 'local' aanpassen die met ArchivesSpace wordt meegeleverd (deze is bedoeld voor dit soort sitespecifieke wijzigingen). Zolang 'local' nog in de lijst AppConfig[:plugins] staat, worden uw wijzigingen toegepast. + +Maak daarvoor het bestand +`archivesspace/plugins/local/frontend/views/layout_head.html.erb` voor de medewerkersinterface of `archivesspace/plugins/local/public/views/layout_head.html.erb` voor de publieke interface aan. Voeg vervolgens de regel toe waarmee de CSS op de site wordt ingeladen: + +```erb +<%= stylesheet_link_tag "#{@base_url}/assets/custom.css" %> +``` + +Plaats uw CSS vervolgens in het bestand: + + staff side: + archivesspace/plugins/local/frontend/assets/custom.css + or public side: + archivesspace/plugins/local/public/assets/custom.css + +De CSS wordt dan op elke pagina geladen. + +U kunt ook wijzigingen willen aanbrengen aan de hoofdpagina, de koptekst of de voettekst. Voor de publieke interface van uw site plaatst u die overschrijvingen op de volgende locaties: + + archivesspace/plugins/local/public/views/welcome/show.html.erb + archivesspace/plugins/local/public/views/shared/_header.html.erb + archivesspace/plugins/local/public/views/shared/_footer.html.erb + +## Ingrijpende wijzigingen aan het thema + +Als u het uiterlijk van uw site ingrijpend wilt aanpassen, kunt u dat met een plug-in doen, met de hierboven beschreven overschrijvingsmethoden. Dit heeft echter enkele belangrijke nadelen. Ten eerste worden assets niet gecompileerd door de assetpipeline van Rails. Bovendien kunt u geen gebruikmaken van de variabelen en mixins die Bootstrap en Less als framework bieden; die helpen uw assets overzichtelijk te houden. + +Een betere aanpak is een kopie van de ArchivesSpace-code op te halen en een nieuw thema op te bouwen. [Deze video](https://www.youtube.com/watch?v=Uny736mZVnk) is een goede informatiebron hiervoor. Deze video behandelt de gebruikersinterface van de medewerkersapplicatie, maar u kunt dezelfde stappen toepassen op de publieke interface. + +Maak uzelf ook enigszins vertrouwd met de [instructies voor het buildsysteem ](/development/dev) + +Haal eerst met git een nieuwe kopie van ArchivesSpace op en zorg ervoor dat u een tag uitcheckt die overeenkomt met de versie die u gebruikt of wilt gebruiken. + +```shell +$ git clone https://github.com/archivesspace/archivesspace.git +$ git checkout v2.5.2 +``` + +U kunt de ontwikkelserver van de applicatie starten met: + +```shell +$ ./build/run bootstrap +$ ./build/run backend:devserver +$ ./build/run frontend:devserver +$ ./build/run public:devserver +``` + +**Opmerking:** U hoeft deze opdrachten niet steeds allemaal uit te voeren. De opdracht bootstrap hoeft alleen de eerste keer te worden uitgevoerd nadat u de code hebt opgehaald; dit kan ook even duren. U hoeft frontend of public niet te starten als u niet aan die interfaces werkt. Backend moet wel worden gestart om de publieke interface of de frontend te laten werken. ) + +Volg de instructies in de video om een nieuw thema te maken. U kunt het bestaande standaardthema het best naar een nieuwe map kopiëren en daar uw wijzigingen aanbrengen. Maak gebruik van de bestaande variabelen in de Less-bestanden om uw assets overzichtelijk te organiseren. + +Wanneer u uw thema hebt bijgewerkt en het naar behoren werkt, kunt u uw applicatie verpakken. U kunt ./scripts/build_release gebruiken om een volledig nieuwe AS-distributie te bouwen, maar dat is niet nodig als u alleen kleine wijzigingen aan de gebruikersinterface hebt aangebracht. Gebruik in plaats daarvan "./build/run public:war " om uw assets te compileren en een WAR-bestand te verpakken. U kunt dit bestand public.war vervolgens gebruiken om het WAR-bestand in uw ASpace-distributie te vervangen. + +Werk de thema-instelling in het bestand config.rb bij en start ASpace opnieuw. diff --git a/src/content/docs/nl/customization/xsl.md b/src/content/docs/nl/customization/xsl.md new file mode 100644 index 0000000..99f5587 --- /dev/null +++ b/src/content/docs/nl/customization/xsl.md @@ -0,0 +1,17 @@ +--- +title: XSL-stijlbladen +description: Biedt informatie over XSL-stijlbladen waarmee met Saxon ArchivesSpace-gegevens uit EAC-CPF- en EAD-exportbestanden worden omgezet naar HTML of PDF. +--- + +ArchivesSpace bevat drie stijlbladen waarmee u geëxporteerde gegevens kunt +omzetten naar leesbare formaten. De meegeleverde stijlbladen zijn: + +- `as-eac-cpf-html.xsl`: Genereert HTML op basis van EAC-CPF-records +- `as-ead-html.xsl`: Genereert HTML op basis van EAD-records +- `as-ead-pdf.xsl`: Genereert XSL:FO-uitvoer op basis van EAD voor omzetting naar PDF + +Deze stijlbladen zijn getest en werken met +[Saxon](http://saxonica.com/download/download_page.xml) 9.5.1.1 en hoger. + +Het stijlblad `as-helper-functions.xsl` is vereist door de andere drie +hierboven genoemde stijlbladen. diff --git a/src/content/docs/nl/development/dev.md b/src/content/docs/nl/development/dev.md new file mode 100644 index 0000000..c5ac0a8 --- /dev/null +++ b/src/content/docs/nl/development/dev.md @@ -0,0 +1,469 @@ +--- +title: Ontwikkelingsomgeving +description: Instructies voor het opzetten van een ontwikkelomgeving voor ArchivesSpace, inclusief systeemeisen, ondersteunde ontwikkelplatforms, een snelle start en stapsgewijze instructies. +--- + +Systeemeisen: + +- Java 17 +- [Docker](https://www.docker.com/) en [Docker Compose](https://docs.docker.com/compose/) zijn optioneel, maar maken het draaien van MySQL en Solr handiger +- [Supervisord](http://supervisord.org/) is optioneel, maar maakt het draaien van de ontwikkelservers handiger +- [mysql-client](https://www.bytebase.com/reference/mysql/how-to/how-to-install-mysql-client-on-mac-ubuntu-centos-windows/) is vereist om demo-gegevens of andere SQL-dumps in de database te laden + +Op dit moment ondersteunde platforms voor ontwikkeling: + +- Linux (hoewel in de praktijk meestal alleen Ubuntu daadwerkelijk wordt gebruikt / getest) +- macOS op Intel (x86_64) +- macOS op Apple silicon (ARM64) _sinds v4.0.0_ + +:::note[Apple silicon en ArchivesSpace vóór v4.0.0] +Voor het installeren van versies van ArchivesSpace vóór v4.0.0 op macOS met Apple silicon, zie [https://teaspoon-consulting.com/articles/archivesspace-on-the-m1.html](https://teaspoon-consulting.com/articles/archivesspace-on-the-m1.html). +::: + +:::danger[Ontwikkelen op Windows niet ondersteund] +Windows wordt niet ondersteund vanwege problemen bij het bouwen van gems met C-extensies (zoals sassc). +::: + +Bij het installeren van Java wordt [OpenJDK](https://openjdk.org/) sterk aanbevolen. Andere leveranciers kunnen werken, maar OpenJDK wordt het meest uitgebreid gebruikt en getest. Het wordt sterk aanbevolen om een versiebeheerder te gebruiken, zoals [mise](https://mise.jdx.dev/lang/java.html), om Java (OpenJDK) te installeren. Dit heeft zich als een betrouwbare manier bewezen om problemen met platformoverstijgende compatibiliteit op te lossen die via andere installatiemethoden zijn ontstaan. + +Het installeren van OpenJDK met mise ziet er ongeveer zo uit: + +```bash +mise use -g java@openjdk-17 +``` + +Op Linux/Ubuntu is het doorgaans prima om vanuit systeempackages te installeren: + +```bash +sudo apt install openjdk-$VERSION-jdk-headless +# voorbeeld: installeer 17 +sudo apt install openjdk-17-jdk-headless +# update-java-alternatives kan worden gebruikt om tussen versies te schakelen +sudo update-java-alternatives --list +sudo update-java-alternatives --set $version +``` + +Voor [Homebrew](https://brew.sh/)-gebruikers (macOS, Linux) is de OpenJDK-distributie van Azul gerapporteerd als werkend: + +```bash +# installeer Java v17 bijvoorbeeld +brew install --cask zulu@17 +``` + +Als je Docker en Docker Compose gebruikt, installeer deze dan volgens de officiële documentatie: + +- [https://docs.docker.com/get-docker/](https://docs.docker.com/get-docker/) +- [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/) + +_Gebruik geen systeempackages of andere niet-officiële bronnen, omdat deze inconsistent zijn gebleken met standaard Docker._ + +_De aanbevolen manier om ArchivesSpace te ontwikkelen is om de repository te forken en lokaal te klonen._ + +_Noot: alle opdrachten in de volgende instructies gaan ervan uit dat je je in de hoofdmap van je lokale fork bevindt, tenzij anders vermeld._ + +**Snelle start** + +Dit is een beknopte referentie voor het starten, met een beperkte uitleg van de stappen: + +```bash +# Bouw de images (eenmalig vereist voor de meeste gebruikssituaties) +docker-compose -f docker-compose-dev.yml build +# Start MySQL en Solr op de achtergrond +docker-compose -f docker-compose-dev.yml up --detach +# Download de MySQL-connector +cd ./common/lib && wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar && cd - +# Download alle applicatie-afhankelijkheden +./build/run bootstrap +# OPTIONAL: laad dev-database +gzip -dc ./build/mysql_db_fixtures/demo.sql.gz | mysql --host=127.0.0.1 --port=3306 -u root -p123456 archivesspace +# Stel de ontwikkeldatabase in +./build/run db:migrate +# Wis eventuele bestaande Solr-status (alleen nodig na een database-instelling / herstel na eerdere ontwikkeling) +./build/run solr:reset +# Start de ontwikkelservers +supervisord -c supervisord/archivesspace.conf +# OPTIONAL: voer een backend (api)-test uit (voor controle van de installatie) +./build/run backend:test -Dexample="User model" +``` + +## Stap voor stap uitgelegd + +### MySQL en Solr uitvoeren + +Voor de ontwikkeling van ArchivesSpace moeten MySQL en Solr draaien. De gemakkelijkste en aanbevolen manier om ze te starten is via de Docker Compose-configuratie die door ArchivesSpace wordt geleverd. + +Begin met het bouwen van de images. Hiermee wordt een aangepaste Solr-image gemaakt die ArchivesSpace's configuratie bevat: + +```bash +docker-compose -f docker-compose-dev.yml build +``` + +_Noot: je hoeft bovenstaande opdracht slechts één keer uit te voeren. Je hoeft deze opdracht alleen opnieuw uit te voeren als a) je de image hebt verwijderd en deze daarom opnieuw moet aanmaken, of b) je een wijziging hebt gemaakt in de Solr-configuratie van ArchivesSpace en de image daarom opnieuw moet bouwen om de bijgewerkte configuratie op te nemen._ + +Start MySQL en Solr op de achtergrond: + +```bash +docker-compose -f docker-compose-dev.yml up --detach +``` + +Door Docker Compose te gebruiken om MySQL en Solr uit te voeren, heb je gegarandeerd de juiste verbindingsinstellingen en hoef je anders geen verbindingsinstellingen voor MySQL of Solr te definiëren. + +Controleer of MySQL en Solr draaien: `docker ps`. Het zou de draaiende containers moeten vermelden: + +```txt +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +ec76bd09d73b mysql:8.0 "docker-entrypoint.s…" 8 hours ago Up 8 hours 33060/tcp, 0.0.0.0:3307->3306/tcp as_test_db +30574171530f archivesspace/solr:latest "docker-entrypoint.s…" 8 hours ago Up 8 hours 0.0.0.0:8984->8983/tcp as_test_solr +d84a6a183bb0 archivesspace/solr:latest "docker-entrypoint.s…" 8 hours ago Up 8 hours 0.0.0.0:8983->8983/tcp as_dev_solr +7df930293875 mysql:8.0 "docker-entrypoint.s…" 8 hours ago Up 8 hours 0.0.0.0:3306->3306/tcp, 33060/tcp as_dev_db +``` + +Om te controleren of de servers online zijn: + +- MYSQL: `mysql -h 127.0.0.1 -u as -pas123 archivesspace` +- SOLR: `curl http://localhost:8983/solr/admin/cores` + +Om de servers te stoppen en/of te verwijderen: + +```bash +docker-compose -f docker-compose-dev.yml stop # stopt de servers (gegevens worden bewaard) +docker-compose -f docker-compose-dev.yml rm # verwijdert de containers (alle gegevens worden verwijderd) +``` + +**Geavanceerd: MySQL en Solr buiten Docker uitvoeren** + +Je bent niet verplicht om Docker te gebruiken voor MySQL en Solr. Als je ze op een andere manier uitvoert, zijn de standaardvereisten: + +- dev MySQL, localhost:3306, database aanmaken: archivesspace, gebruikersnaam: as, wachtwoord: as123 +- test MySQL, localhost:3307, database aanmaken: archivesspace, gebruikersnaam: as, wachtwoord: as123 +- dev Solr, localhost:8983, core `archivesspace` aanmaken met de ArchivesSpace-configuratie +- test Solr, localhost:8984, core `archivesspace` aanmaken met de ArchivesSpace-configuratie + +De standaardinstellingen kunnen worden gewijzigd met [omgevingsvariabelen](https://github.com/archivesspace/archivesspace/blob/master/build/build.xml#L43-L46) in het buildbestand. + +### Download de MySQL-connector + +Om licentie redenen moet de MySQL-connector afzonderlijk worden gedownload: + +```bash +cd ./common/lib +wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar +cd - +``` + +### Bootstrap uitvoeren + +De bootstrap-taak: + + ./build/run bootstrap + +Zal je ontwikkelomgeving bootstrappen door alle +afhankelijkheden te downloaden--JRuby, Gems, enz. Met één opdracht wordt een volledig +zelfvoorzienende ontwikkelomgeving aangemaakt waarin alles binnen de `build`-map van het ArchivesSpace-project wordt gedownload. + +_Het is niet nodig en over het algemeen onjuist om JRuby +& bundler etc. handmatig te installeren voor ArchivesSpace (zowel met een versiebeheerder als anderszins)._ + +_De zelfvoorzienende ontwikkelomgeving van ArchivesSpace werkt normaal gesproken niet samen met andere J/Ruby-omgevingen die je op je systeem hebt (zoals die worden beheerd door rbenv of vergelijkbare tools)._ + +Dit is het startpunt voor alle ArchivesSpace-ontwikkeling. Je moet deze opdracht mogelijk opnieuw uitvoeren nadat je updates hebt opgehaald, of wanneer je wijzigingen aanbrengt in Gemfiles of andere afhankelijkheden zoals die in het `./build/build.xml`-bestand. + +**Fouten bij het uitvoeren van bootstrap** + +```txt + [java] INFO: jetty-9.4.44.v20210927; built: 2021-09-27T23:02:44.612Z; git: 8da83308eeca865e495e53ef315a249d63ba9332; jvm 11+28 + [java] Exiting + [java] LoadError: no such file to load -- rails/commands + [java] require at org/jruby/RubyKernel.java:974 + [java] <main> at script/rails:8 +``` + + ./build/run backend:devserver + ./build/run frontend:devserver + ./build/run public:devserver + ./build/run indexer + +Er zijn verschillende vormen van dezelfde `LoadError` geweest. Het is een tijdelijke fout +die wordt opgelost door bootstrap opnieuw uit te voeren. + +```txt + [java] org.jruby.Main -I uri:classloader://META-INF/jruby.home/lib/ruby/stdlib -r + [java] ./siteconf20220407-5224-13f6qi7.rb extconf.rb + [java] sh: /Library/Internet: No such file or directory + [java] sh: line 0: exec: /Library/Internet: cannot execute: No such file or directory + [java] + [java] extconf failed, exit code 126 +``` + +Dit is gezien op Mac-platforms als gevolg van de installatiewijze van Java. Het installeren van OpenJDK via Jabba heeft deze fout effectief opgelost. + +**Geavanceerd: bootstrap en de build-map** + +Bij het uitvoeren van bootstrap worden jars gedownload naar de build-map, waaronder: + +- jetty-runner +- jruby +- jruby-rack + +Gems worden gedownload naar: `./build/gems/jruby/$version/gems/`. + +### De ontwikkeldatabase instellen + +De migratie-taak: + +```bash +./build/run db:migrate +``` + +Stelt de ontwikkeldatabase in en maakt de tabellen enz. aan die +voor de toepassing vereist zijn. + +Er is een taak om de database opnieuw in te stellen: + +```bash +./build/run db:nuke +``` + +Welke eerst de database verwijdert en daarna opnieuw migreert. + +### Gegevensfixtures in de dev-database laden + +Bij het laden van een database in de ontwikkel-MySQL-instantie moet je er altijd voor zorgen dat ArchivesSpace +**niet** actief is. Stop ArchivesSpace als het draait. Voer `./build/run solr:reset` uit om +de indexeerstatus te wissen (een grondigere uitleg van deze stap staat hieronder). + +Als je een database laadt en MySQL is al voor ontwikkeling gebruikt, wil je waarschijnlijk eerst een lege database verwijderen en opnieuw aanmaken. + +```bash +mysql -h 127.0.0.1 -u as -pas123 -e "DROP DATABASE archivesspace" +mysql -h 127.0.0.1 -u as -pas123 -e "CREATE DATABASE IF NOT EXISTS archivesspace DEFAULT CHARACTER SET utf8mb4" +``` + +_Noot: je kunt bovenstaande stap overslaan als MySQL net voor de eerste keer is gestart of als je een lege ArchivesSpace hebt (een instantie waarin `db:migrate` nog niet is uitgevoerd)._ + +Uitgaande van een draaiende MySQL en een lege `archivesspace`-database kun je doorgaan met herstellen: + +```bash +gzip -dc ./build/mysql_db_fixtures/blank.sql.gz | mysql --host=127.0.0.1 --port=3306 -u root -p123456 archivesspace +./build/run db:migrate +``` + +_Noot: de bovenstaande instructies zouden out-of-the-box moeten werken. Als je je eigen database wilt gebruiken en/of MySQL anders hebt geconfigureerd, pas de opdrachten dan naar behoefte aan._ + +Na het herstellen wordt `./build/run db:migrate` uitgevoerd om migratie-updates op te vangen. Je kunt nu +doorgaan met het starten van de ontwikkelservers, zoals hieronder beschreven, met data die al in ArchivesSpace is geladen. + +### Bestaande Solr-status wissen + +De Solr-resettaak: + +```bash +./build/run solr:reset +``` + +Wist alle bestaande Solr-status. Dit is niet nodig bij de eerste installatie, maar is vaak nodig na een database-reset (bijvoorbeeld +na het uitvoeren van de taak `./build/run db:nuke`). + +_Meer specifiek: hiermee wordt een `delete all`-verzoek aan Solr verzonden en wordt de inhoud van de `./build/dev/indexer*_state`-mappen geleegd, zoals hieronder wordt beschreven._ + +### De ontwikkelservers starten + +Gebruik [Supervisord](http://supervisord.org/) voor een eenvoudigere manier om de ontwikkelservers uit te voeren met output +voor alle servers in één terminalvenster: + +```bash +# voer alle services uit +supervisord -c supervisord/archivesspace.conf + +# voer in api-modus uit (backend + indexer) +supervisord -c supervisord/api.conf + +# voer alleen de backend uit (handig om endpoints uit te proberen die geen Solr nodig hebben) +supervisord -c supervisord/backend.conf +``` + +ArchivesSpace wordt gestart met: + +- de medewerkersinterface op [http://localhost:3000/](http://localhost:3000/) +- de PUI op [http://localhost:3001/](http://localhost:3001/) +- de API op [http://localhost:4567/](http://localhost:4567/) + +Om supervisord te stoppen: `Ctrl-c`. + +#### Geavanceerd: de ontwikkelservers direct uitvoeren + +Supervisord is niet vereist, of ideaal voor elke situatie. Je kunt de ontwikkelservers direct uitvoeren via build-taken: + +```bash +./build/run backend:devserver # Dit is de REST API +./build/run frontend:devserver # Dit is de medewerkersinterface +./build/run public:devserver # Dit is de publieke gebruikersinterface +./build/run indexer # Dit is de indexeerder (zet ASpace-records om in Solr-docs en stuurt ze naar Solr) +``` + +Deze moeten in verschillende terminalsessies worden uitgevoerd en hoeven niet in een specifieke volgorde te worden uitgevoerd of allemaal vereist te zijn. + +_Een voorbeeld van een gebruikssituatie voor het direct starten van een server is het gebruik van de pry-debugger._ + +#### Geavanceerd: debuggen met pry + +Om te debuggen met pry kun je Supervisord niet gebruiken om de devserver van de toepassing te starten, +maar je kunt wel combineren: + +```bash +# start de backend en indexeerder met supervisord +supervisord -c supervisord/api.conf + +# in een apart terminalvenster start je de frontend direct +./build/run frontend:devserver +``` + +Voeg `require 'pry-debugger-jruby'; binding.pry` toe om breakpoints in de code in te stellen. Dit kan ook in views worden gebruikt: +`<% require 'pry-debugger-jruby'; binding.pry %>`. Met pry kun je gemakkelijk de `request`, `params` en +in-scope variabelen inspecteren die beschikbaar zijn. Typische debugger-opdrachten zijn beschikbaar: + +- `step`: Stap uitvoering naar de volgende regel of methode. Accepteert een optioneel numeriek argument om meerdere stappen te zetten. +- `next`: Stap over naar de volgende regel in hetzelfde frame. Accepteert een optioneel numeriek argument om meerdere stappen te zetten. Verschilt van `step` doordat het altijd binnen hetzelfde frame blijft (bijv. gaat niet naar andere method calls). +- `finish`: Voer uit totdat het huidige stack frame terugkeert. +- `continue`: Ga door en beëindig de Pry-sessie. +- `puts caller.join("\n")`: Haal de huidige stacktrace op. + +Zie ook de [pry-debugger-jruby docs](https://gitlab.com/ivoanjo/pry-debugger-jruby). + +#### Geavanceerd: ontwikkelservers en de build-map + + ./build/run db:migrate + +Het draaien van de ontwikkelservers maakt mappen aan in `./build/dev`: + +- indexer_pui_state: nieuwste tijdstempels voor PUI-indexeeractiviteit +- indexer_state: nieuwste tijdstempels voor (SUI)-indexeeractiviteit +- shared: bestanden voor achtergrondtaken + + ./build/run db:nuke + +_Noot: de mappen worden aangemaakt zodra ze nodig zijn, dus ze zijn mogelijk niet allemaal tegelijk aanwezig._ + +#### Toegang tot ontwikkelservers vanaf andere apparaten op hetzelfde lokale netwerk + +Je kunt toegang krijgen tot de ArchivesSpace-ontwikkelservers vanaf andere apparaten op hetzelfde lokale netwerk. Dit is vooral handig voor testen op mobiele besturingssystemen. + +##### Vereisten + +1. Je ontwikkelmachine en het andere apparaat moeten op hetzelfde WiFi-netwerk zitten +2. De ArchivesSpace-ontwikkelservers moeten op de ontwikkelmachine actief zijn + +##### Stappen + +1. Verkrijg het lokale IP-adres van je ontwikkelmachine + + Op macOS: + + ```bash + ipconfig getifaddr en0 + ``` + + Op Linux: + + ```bash + hostname -I | awk '{print $1}' + ``` + + Dit levert iets dergelijks op als `134.192.0.47`. + +2. Start de [ontwikkelservers](#de-ontwikkelservers-starten) + + De ontwikkelservers binden standaard aan `0.0.0.0`, waardoor ze vanaf andere apparaten op het netwerk toegankelijk zijn (zie het [voorbeeld van de binding van de frontend](https://github.com/archivesspace/archivesspace/blob/f77dec627cd1feac77e4b67f9242d617efe80e94/build/build.xml#L899)). + +3. **Toegang vanaf een ander apparaat** + + Op het andere apparaat open je een webbrowser en ga je naar het IP-adres van je ontwikkelmachine met de juiste poort, d.w.z.: `http://<your-local-ip>:<port>/`. + + Dus voor IP-adres `134.192.0.47`: + - Medewerkersinterface: `http://134.192.0.47:3000/` + - Publieke gebruikersinterface: `http://134.192.0.47:3001/` + - API: `http://134.192.0.47:4567/` + +## Tests uitvoeren + +### Backend-tests + +_Standaard zijn de tests geconfigureerd om uit te voeren met een aparte MySQL en Solr dan de +developelservers. Dit betekent dat de ontwikkel- en testomgevingen elkaar niet +in de weg zitten._ + +```bash +# voer de backend-/api-tests uit +./build/run backend:test +``` + +Je kunt ook één spec-bestand uitvoeren met: + +```bash +./build/run backend:test -Dspec="myfile_spec.rb" +``` + +Of één voorbeeld met: + +```bash +./build/run backend:test -Dexample="does something important" +``` + +Of per regel met: + +```bash +./build/run backend:test -Dspec="myfile_spec.rb:123" +``` + +Er zijn specifieke instructies en vereisten voor het laten werken van de [UI tests](/development/ui_test). + +**Geavanceerd: tests en de build-map** + +Het uitvoeren van de tests kan mappen aanmaken in `./build/test`. Deze zullen +hetzelfde zijn als voor de ontwikkelservers, zoals hierboven beschreven. + +## Coverage-rapporten + +Je kunt de coverage-rapporten uitvoeren met: + + ./build/run coverage + +Dit voert alle bovenstaande tests uit in coverage-modus en, wanneer de run +is voltooid, genereert het een set HTML-rapporten binnen de `coverage` +-map in je ArchivesSpace-projectmap. + +## Linting en formattering met Rubocop + +Als je bronbestanden bewerkt of toevoegt die je via een pull request wilt bijdragen, +moet je ervoor zorgen dat je wijzigingen voldoen aan de lay-out- en stijlregels door het volgende uit te voeren: + + ./build/run rubocop + +De meeste fouten kunnen automatisch worden gecorrigeerd door het volgende uit te voeren: + + ./build/run rubocop -Dcorrect=true + +## Een pull request indienen + +Wanneer je code klaar is voor review, open je een pull request om te vragen om deze +in de codebase te laten samenvoegen. + +Om de review soepel te laten verlopen, volgen hier enkele algemene richtlijnen: + +- **Je pull request moet één issue behandelen.** + Het is beter om grote of ingewikkelde PR's te splitsen in discrete stappen als dat mogelijk is. Dit + maakt review beter hanteerbaar en verkleint het risico op conflicten met andere wijzigingen. +- **Geef je pull request een korte titel, met verwijzing naar eventuele JIRA- of GitHub-issues die door de pull request worden opgelost.** + Het expliciet opnemen van JIRA-nummers (bijv. 'ANW-123') in de titel van je pull request zorgt ervoor dat + de PR wordt gekoppeld aan het oorspronkelijke issue in JIRA. Op dezelfde manier zorgt het verwijzen naar GitHub-issue-nummers + (bijv. 'Fixes #123') ervoor dat het issue automatisch wordt gesloten wanneer de PR wordt samengevoegd. +- **Vul zoveel mogelijk van het Pull Request-sjabloon in.** + Dit maakt het gemakkelijker om de volledige context te begrijpen, inclusief eventuele discussies of ondersteunende documentatie die bij de ontwikkeling van de functionaliteit of het oplossen van de bug zijn gebruikt. + +## Een distributie bouwen + +Zie: [Bouwen van een ArchivesSpace-release](/development/release) voor informatie over het bouwen van een distributie. + +## API-documentatie genereren + +Zie: [Bouwen van een ArchivesSpace-release](/development/release) voor informatie over het bouwen van de documentatie. diff --git a/src/content/docs/nl/development/docker.md b/src/content/docs/nl/development/docker.md new file mode 100644 index 0000000..18f415f --- /dev/null +++ b/src/content/docs/nl/development/docker.md @@ -0,0 +1,41 @@ +--- +title: Docker +description: Een gids voor het gebruik van de Docker-configuratie met ArchivesSpace. +--- + +De [Docker](https://www.docker.com/)-configuratie wordt gebruikt om [automatische builds](https://hub.docker.com/r/archivesspace/archivesspace/) op Docker Hub te maken, die worden gedeployed naar [de nieuwste versie](http://test.archivesspace.org) wanneer de build is voltooid. + +## Aangepaste builds + +Voer ArchivesSpace uit met MySQL, externe Solr en een Web Proxy. Schakel over naar de branch die je wilt bouwen: + +```bash +#if you already have running containers and want to clear them out +docker-compose stop +docker-compose rm + +#build the local image +docker-compose build # needed whenever the branch is changed and ready to test +docker-compose up + +#running specific containers +docker-compose up -d db solr # in background +docker-compose up app web # in foreground +>to access running container +docker exec -it archivesspace_app_1 bash +``` + +## Een image delen + +Om de build-image op de eenvoudigste manier te delen, maak je het gemakkelijkst een account aan op [Docker Hub](https://hub.docker.com/). Herlabel daarna de image en push deze naar het Docker Hub-account: + +```bash +DOCKER_ID_USER=example +TAG=awesome-updates +docker tag archivesspace_app:latest $DOCKER_ID_USER/archivesspace:$TAG +docker push $DOCKER_ID_USER/archivesspace:$TAG +``` + +Om de image te downloaden: `docker pull example/archivesspace:awesome-updates`. + +--- diff --git a/src/content/docs/nl/development/e2e_tests.md b/src/content/docs/nl/development/e2e_tests.md new file mode 100644 index 0000000..4243a75 --- /dev/null +++ b/src/content/docs/nl/development/e2e_tests.md @@ -0,0 +1,152 @@ +--- +title: End-to-endtestsuite van ArchivesSpace +description: Instructies voor het uitvoeren van de end-to-endtestsuite. +--- + +Zie voor meer informatie over de [end-to-endtestsuite](https://github.com/archivesspace/archivesspace/tree/master/e2e-tests) en het bijdragen van tests onze [wikipagina](https://archivesspace.atlassian.net/wiki/spaces/ADC/pages/4606590990/How+to+contribute+End+to+End+test+scenarios). + +## Aanbevolen inrichting + +### Een versiebeheerder gebruiken + +De vereiste Ruby-versie voor de e2e-testapplicatie staat vermeld in `[./.ruby-version](./.ruby-version)`. + +Het wordt sterk aanbevolen een versiebeheerder (zoals [mise](https://mise.jdx.dev/)) te gebruiken, zodat u kunt overschakelen naar elke versie die een project vereist. + +#### mise + +We raden aan [mise](https://mise.jdx.dev/) te gebruiken om Ruby (en andere runtimes) te beheren. Installatie-instructies vindt u bij [Aan de slag](https://mise.jdx.dev/getting-started.html). + +#### Alternatieven voor `mise` + +Als u een andere Ruby-beheerder of installatiemethode wilt gebruiken, raadpleeg dan de [installatiedocumentatie van Ruby](https://www.ruby-lang.org/en/documentation/installation/). + +### Installatie + +Navigeer vanuit de hoofdmap van ArchivesSpace naar de e2e-testapplicatie en installeer vervolgens Ruby, Bundler en de afhankelijkheden van de applicatie: + +```sh +# 1. Navigate to e2e-tests directory +cd e2e-tests + +# 2. Install Ruby at the version specified in ./.tool-versions +mise install + +# 3. Install the Bundler dependency manager +gem install bundler + +# 4. Install project dependencies +bundle install +``` + +## Tests lokaal uitvoeren + +### Alleen aan de e2e-tests werken met Docker + +Als u alleen aan e2e-tests werkt en niets aan de ArchivesSpace-applicatie wijzigt, kunt u de tests lokaal met Docker uitvoeren tegen de meest recente build van de `master`-branch van ArchivesSpace. + +#### Docker Desktop installeren + +[Docker Desktop](https://www.docker.com/get-started/) is een applicatie die met één klik kan worden geïnstalleerd voor Linux, Mac en Windows. De applicatie biedt toegang tot Docker via zowel de terminal als een grafische interface. Download en installeer via de bovenstaande link de juiste versie voor uw besturingssysteem. U kunt ook alternatieve software gebruiken om Docker-containers uit te voeren, zoals [OrbStack](https://orbstack.dev/) voor macOS. + +#### De meest recente Docker-image van ArchivesSpace uitvoeren + +```sh +# Get the latest ArchivesSpace `master` branch build +docker compose pull + +# Start ArchivesSpace servers +docker compose up +``` + +Controleer of de servers actief zijn door [http://localhost:8080](http://localhost:8080) in een browser te openen. + +### Werken met een ontwikkelomgeving voor ArchivesSpace + +U kunt de e2e-testsuite uitvoeren tegen uw lokale ArchivesSpace-ontwikkelomgeving. Houd er echter rekening mee dat u uw database, Solr-index en eventuele configuratiewijzigingen moet terugzetten. + +#### Uw database en Solr-index terugzetten + +Zorg ervoor dat uw ArchivesSpace-instantie een [lege database](https://docs.archivesspace.org/development/dev/#loading-data-fixtures-into-dev-database) en een [lege Solr-index](https://docs.archivesspace.org/development/dev/#clear-out-existing-solr-state) heeft. + +#### De standaardconfiguratieopties herstellen (behalve `AppConfig[:db_url]`) + +Zorg ervoor dat u eventuele lokale wijzigingen in de standaardconfiguratieopties (via ../common/config/config.rb) ongedaan maakt door ze van commentaar te voorzien of te verwijderen, behalve `AppConfig[:db_url]` (die nodig is om de MySQL-database te gebruiken). + +#### De ontwikkelserver voor de medewerkersinterface starten + +Start `frontend:devserver` zoals [hier](https://docs.archivesspace.org/development/dev/#run-the-development-servers) beschreven. Controleer of deze actief is door [http://localhost:3000/](http://localhost:3000/) in uw browser te openen. + +#### De ontwikkelserver voor de publieke gebruikersinterface starten + +Start `public:devserver` zoals [hier](https://docs.archivesspace.org/development/dev/#run-the-development-servers) beschreven. Controleer of deze actief is door [http://localhost:3001/](http://localhost:3001/) in uw browser te openen. + +#### De omgevingsvariabele `STAFF_URL` instellen + +Stel de omgevingsvariabele `STAFF_URL` zo in dat de e2e-tests naar de lokale ontwikkelserver verwijzen: + +```sh +export STAFF_URL='http://localhost:3000' +``` + +#### De omgevingsvariabele `PUBLIC_URL` instellen + +Stel de omgevingsvariabele `PUBLIC_URL` zo in dat de e2e-tests naar de lokale publieke gebruikersinterface verwijzen: + +```sh +export PUBLIC_URL='http://localhost:3001' +``` + +## Tests uitvoeren + +Nadat u de juiste omgevingsvariabelen `STAFF_URL` en `PUBLIC_URL` hebt ingesteld zoals hierboven beschreven, voert u de gewenste tests uit met de volgende opdrachten. + +### Alle testbestanden tegelijk + +```sh +bundle exec cucumber staff_features/ +``` + +### Alle scenario's in een specifiek bestand + +```sh +bundle exec cucumber staff_features/assessments/assessment_create.feature +``` + +### Een specifiek scenario in een specifiek bestand + +```sh +bundle exec cucumber staff_features/assessments/assessment_create.feature --name 'Assessment is created' +``` + +## Foutopsporing + +Voeg een `byebug`-instructie toe in een willekeurig `.rb`-bestand om tijdens het uitvoeren een breekpunt in te stellen en in de console een foutopsporingssessie te starten. Zie voor meer informatie [hier](https://github.com/deivid-rodriguez/byebug). Vergeet niet eventuele `byebug`-instructies te verwijderen voordat u `git push` uitvoert... + +Als u tijdens het uitvoeren en debuggen van een testscenario de browser wilt zien, voegt u het argument `HEADLESS=''` toe, bijvoorbeeld: + +```sh +bundle exec cucumber HEADLESS='' staff_features/ +``` + +## Linters + +Deze testsuite gebruikt twee linters, [`cuke_linter`](https://github.com/enkessler/cuke_linter) en [`rubocop`](https://rubocop.org/), om de codekwaliteit te bewaken. + +```sh +# Lints Cucumber .feature files +bundle exec cuke_linter + +# Lints Ruby .rb files +bundle exec rubocop +``` + +## Integratie met de editor (optioneel) + +ArchivesSpace biedt optionele VS Code-werkruimtetaken waarmee u de end-to-endtestsuite kunt uitvoeren zonder handmatig omgevingsvariabelen in te stellen of van map te wisselen. + +Deze taken voeren dezelfde cucumber-opdrachten uit als hierboven beschreven en zijn slechts een handige aanvulling op de beschreven workflow via de opdrachtregel. + +De installatie-instructies staan in de **VS Code-handleiding** [hier](https://docs.archivesspace.org/development/vscode/). + +Bijdragers die VS Code niet gebruiken, kunnen dit onderdeel overslaan en de tests rechtstreeks vanaf de opdrachtregel uitvoeren. diff --git a/src/content/docs/nl/development/ead-exporter.md b/src/content/docs/nl/development/ead-exporter.md new file mode 100644 index 0000000..2eace3c --- /dev/null +++ b/src/content/docs/nl/development/ead-exporter.md @@ -0,0 +1,33 @@ +--- +title: EAD-export van een collectiebeherende instelling +description: Een handleiding voor het exporteren van de EAD-bestanden van alle gepubliceerde collecties binnen een opgegeven collectiebeherende instelling naar één ziparchief. +--- + +Exporteert alle EAD-XML-bestanden van gepubliceerde collecties die bij één +collectiebeherende instelling horen naar een ziparchief. Dit zipbestand wordt +opgeslagen in de datamap van ArchivesSpace (zoals gedefinieerd in `config.rb`). +De bestandsnaam bevat de ID van de collectiebeherende instelling. + +## Gebruik + +```sh +./scripts/ead_export.sh user password repository_id +``` + +Een goede werkwijze is om het wachtwoord in een verborgen bestand te plaatsen, +bijvoorbeeld: + +```sh +touch ~/.aspace_password +chmod 0600 ~/.aspace_password +vi ~/.aspace_password # enter your password +``` + +Voer het script vervolgens als volgt uit: + +```sh +./scripts/ead_export.sh user $(cat /home/user/.aspace_password) repository_id +``` + +Zo voorkomt u dat u het wachtwoord rechtstreeks via de opdrachtregel, in crontab +enzovoort blootstelt. diff --git a/src/content/docs/nl/development/index.md b/src/content/docs/nl/development/index.md new file mode 100644 index 0000000..57c11a2 --- /dev/null +++ b/src/content/docs/nl/development/index.md @@ -0,0 +1,13 @@ +--- +title: Ontwikkeling +description: Het overzicht van de ontwikkelsectie van de technische documentatie van ArchivesSpace. +--- + +- [Een ontwikkelversie van ArchivesSpace uitvoeren](./dev.html) +- [Een ArchivesSpace-release bouwen](./release.html) +- [Docker](./docker.html) +- [DB-versies per release](./release_schema_versions.html) +- [Gebruikersinterfacetestsuite](./ui_test.html) +- [Rack upgraden voor ArchivesSpace](./development/jruby-rack-build.html) +- [ArchivesSpace-uitgaven](./releases.html) +- [De VS Code-editor gebruiken voor lokale ontwikkeling](./vscode.html) diff --git a/src/content/docs/nl/development/jruby-rack-build.md b/src/content/docs/nl/development/jruby-rack-build.md new file mode 100644 index 0000000..c4b3b68 --- /dev/null +++ b/src/content/docs/nl/development/jruby-rack-build.md @@ -0,0 +1,96 @@ +--- +title: Rack upgraden +description: Een handleiding voor het upgraden van Rack. +--- + +- Installeer JRuby lokaal (gebruik dezelfde versie als de aspace-versie, momenteel: 9.2.12.0) en schakel ernaar over. +- Installeer Maven. +- Download jruby-rack. + +```shell +git checkout 1.1-stable +# install bundler version to match 1.1-stable Gemfile.lock +gem install bundler --version=1.14.6 +``` + +Dit zou het volgende moeten opleveren: + +``` +Fetching bundler-1.14.6.gem +Successfully installed bundler-1.14.6 +Parsing documentation for bundler-1.14.6 +Installing ri documentation for bundler-1.14.6 +Done installing documentation for bundler after 5 seconds +1 gem installed +``` + +Stel de omgeving in op de beoogde Rack-versie (de versie waarnaar u wilt upgraden): + +```shell +export RACK_VERSION=2.2.3 +bundle +``` + +Dit zou het volgende moeten opleveren: + +``` +Fetching gem metadata from https://rubygems.org/............. +Fetching version metadata from https://rubygems.org/.. +Resolving dependencies... +Installing rake 10.4.2 +Using bundler 1.14.6 +Using diff-lcs 1.2.5 +Installing jruby-openssl 0.9.21 (java) +Using rack 2.2.3 (was 1.6.8) +Using rspec-core 2.14.8 +Using rspec-mocks 2.14.6 +Using appraisal 0.5.2 +Using rspec-expectations 2.14.5 +Using rspec 2.14.1 +Bundle complete! 5 Gemfile dependencies, 10 gems now installed. +Use `bundle show [gemname]` to see where a bundled gem is installed. +``` + +Hiermee is de Rack-versie in Gemfile.lock verhoogd: + +```diff +diff --git a/Gemfile.lock b/Gemfile.lock +index 493c667..f016925 100644 +--- a/Gemfile.lock ++++ b/Gemfile.lock +@@ -6,7 +6,7 @@ GEM + rake + diff-lcs (1.2.5) + jruby-openssl (0.9.21-java) +- rack (1.6.8) ++ rack (2.2.3) + rake (10.4.2) + rspec (2.14.1) + rspec-core (~> 2.14.0) +@@ -23,7 +23,7 @@ PLATFORMS + DEPENDENCIES + appraisal + jruby-openssl (~> 0.9.20) +- rack (~> 1.6.8) ++ rack (= 2.2.3) + rake (~> 10.4.2) + rspec (~> 2.14.1) +``` + +Bouw het jruby-rack-jarbestand: + +```bash +bundle exec jruby -S rake clean gem SKIP_SPECS=true +``` + +Hiermee wordt `target/jruby-rack-1.1.21.jar` gemaakt met Rack 2.2.3. + +Upload het jarbestand naar de openbare S3-bucket en geef de Rack-versie op: + +```bash +aws s3 cp target/jruby-rack-1.1.21.jar \ + s3://as-public-shared-files/jruby-rack-1.1.21_rack-2.2.3.jar \ + --profile archivesspace +``` + +Werk ten slotte `rack_version` bij in het aspace-bestand `build.xml`. diff --git a/src/content/docs/nl/development/release.md b/src/content/docs/nl/development/release.md new file mode 100644 index 0000000..3adb181 --- /dev/null +++ b/src/content/docs/nl/development/release.md @@ -0,0 +1,264 @@ +--- +title: Een uitgave bouwen +description: Hoe je een ArchivesSpace-uitgave bouwt. +--- + +- [Voor de uitgave](#pre-release-steps) +- [Documentatie bouwen](#build-and-publish-the-api-and-yard-docs) +- [De uitgave bouwen](#building-a-release-yourself) +- [De uitgave plaatsen met release-opmerkingen](#create-the-release-with-notes) +- [Updates na publicatie](#post-release-updates) + +## Kloon de Git-repository + +Bij het bouwen van een uitgave is het belangrijk om vanuit een schone repository te beginnen. +De veiligste manier om dit te garanderen is door de repository te klonen: + +```shell +git clone https://github.com/archivesspace/archivesspace.git +``` + +## Controleer de release-branch uit en maak de release-tag aan + +Als u een grote of kleine versie bouwt (zie [https://semver.org](https://semver.org)), +start u door een branch voor de uitgave en alle toekomstige patchversies aan te maken: + +```shell +git checkout -b release-v1.0.x +git tag v1.0.0 +``` + +Als u een patchversie bouwt, controleert u gewoon de bestaande branch uit en gaat u hieronder verder: + +```shell +git checkout release-v1.0.x +``` + +Patchversies ontstaan meestal omdat er sinds de laatste grote of kleine versie een regressie +of een kritieke bug is ontstaan. We proberen ervoor te zorgen dat de "hotfix" zowel in de +master- als in de release-branch wordt samengevoegd zonder dat er commits van de ene naar de +andere branch hoeven te worden gecherry-picked. De reden is dat cherry-picking een nieuwe +commit (met een nieuwe commit-id) creëert die identieke wijzigingen bevat, wat niet optimaal is +voor de repositorygeschiedenis. + +Het is daarom preferabel om vanuit de release-branch te starten bij het maken van een "hotfix" +waaraan zowel de release-branch als master moeten worden samengevoegd. De pull request moet +dan ook gebaseerd zijn op de release-branch. Nadat die pull request door code review, +QA en merge is gegaan, moet een tweede pull request worden gemaakt om de bijgewerkte +release-branch naar master te mergen. + +Beschouw het volgende scenario. De huidige productie-uitgave is v1.0.0 en een kritieke +bug is ontdekt. In de tijd sinds v1.0.0 is uitgebracht, zijn er nieuwe functies +aan de master-branch toegevoegd, bedoeld voor uitgave in v1.1.0: + +```shell +git checkout -b oh-no-some-migration-corrupts-some-data origin/release-v1.0.0 +( fixes problem ) +git commit -m "fix bad migration and add a migration to repair corrupted data" +gh pr create -B release-v1.0.x --web +( PR is reviewed and merged to the release branch) +git checkout release-v1.0.x +git pull +git tag v1.0.1 +gh pr create -B master --web +( PR is reviewed and merged to the master branch) +``` + +## Voor de uitgave + +### Voer de rake-taken van ArchivesSpace uit om problemen te controleren + +Voordat u verdergaat, is het een goed idee om te controleren of er ontbrekende +vertalingen of meerdere gem-versies zijn. + +1. Bootstrap uw huidige ontwikkelomgeving op de nieuwste master-branch + door alle afhankelijkheden te downloaden--JRuby, Gems, Solr, enz. + + ```shell + build/run bootstrap + ``` + +2. Voer de volgende controles uit (aanbevolen): + + ```shell + build/run rake -Dtask=check:multiple_gem_versions + ``` + +3. Als er meerdere gem-versies worden gemeld, moet dat worden aangepakt voordat u verdergaat. + +## Documentatie bouwen en publiceren + +API-documentatie wordt gemaakt met behulp van de submodule in `docs/slate` en Docker. +YARD-documentatie wordt gemaakt met behulp van de YARD-gem. Op dit moment behandelt het slechts +een klein percentage van de code en is het niet bijzonder nuttig. + +### API-documentatie bouwen + +1. API-documentatie hangt af van de [archivesspace/slate](https://github.com/archivesspace/slate)-submodule + en van Docker. Slate kan niet op JRuby draaien. + + ```shell + git submodule init + git submodule update + ``` + +2. Voer de `doc:api`-taak uit om Slate API- en YARD-documentatie te genereren. (Opmerking: de + API-generatie vereist een databaseverbinding met standaard enumeratiewaarden.) + + ```shell + ARCHIVESSPACE_VERSION=X.Y.Z APPCONFIG_DB_URL=$APPCONFIG_DB_URL build/run doc:api + ``` + + Dit genereert `docs/slate/source/index.html.md` (Slate-brondocument). + +3. (Optioneel) Start een docker-container om de API-documentatie te bekijken. + + ```shell + docker-compose -f docker-compose-docs.yml up + ``` + + Bezoek `http://localhost:4568` om de API-documentatie te bekijken. + +4. Bouw de statische API-bestanden. Het API-markdown-document zou al in `docs/slate/source` aanwezig moeten zijn (stap 2 hierboven). + Het API-markdown wordt naar HTML gerenderd en verplaatst naar `docs/build/api`. + ```shell + docker run --rm --name slate -v $(pwd)/docs/build/api:/srv/slate/build -v $(pwd)/docs/slate/source:/srv/slate/source slatedocs/slate build + ``` + +### YARD-documentatie bouwen + +1. Bouw de YARD-documentatie in de `docs/build/doc`-directory: + + ```shell + ./build/run doc:yardoc + ``` + +### Bouw de documenten en zet ze in GitHub Pages + +1. Controleer nogmaals of u zich op een release-branch bevindt (we hebben dit niet nodig in master). Commit de nieuw gebouwde documentatie en zet deze alleen in de `gh-pages`-branch: + + ```shell + git add docs/build + git commit -m "release-vx.y.z api and yard documentation" + ``` + + Gebruik `git subtree` om de documentatie naar de `gh-pages`-branch te pushen: + + ```shell + git subtree push --prefix docs/build origin gh-pages + ``` + + Gepubliceerde documenten zouden een korte tijd later verschijnen op: + [http://archivesspace.github.io/archivesspace/api](http://archivesspace.github.io/archivesspace/api) + [http://archivesspace.github.io/archivesspace/doc](http://archivesspace.github.io/archivesspace/doc) + + Opmerking: als de push-opdracht mislukt, moet u mogelijk `gh-pages` in de externe repository verwijderen: + + ```shell + git push origin :gh-pages + ``` + + **Opmerking:** push de map `docs/build` niet naar de release-branch, omdat deze alleen bedoeld is om in de `gh-pages`-branch te worden onderhouden. + +## De uitgave zelf bouwen + +1. Het bouwen van de daadwerkelijke uitgave is erg eenvoudig. Voer het volgende uit: + + ```shell + ./scripts/build_release vX.X.X + ``` + + Vervang X.X.X door het versienummer. Hierdoor wordt een uitgave gebouwd en verpakt + in een zip-bestand. + +## De uitgave bouwen op GitHub + +1. Het is niet nodig om de uitgave zelf te bouwen. Push gewoon uw tag naar GitHub + en trigger de `release`-workflow: + ```shell + git push vX.X.X + ``` + Vervang X.X.X door het versienummer. De uitgave wordt gemaakt als een **concept**, deze wordt niet automatisch gepubliceerd. + +## De uitgave met release-opmerkingen aanmaken + +### Bouw de release-opmerkingen + +**Vanaf v3.4.0 is het niet langer nodig om release-opmerkingen handmatig te bouwen.** + +Om release-opmerkingen handmatig te genereren: + +Maak een deploy-token aan op uw [GitHub-ontwikkelaarsinstellingen](https://github.com/settings/tokens). + +```shell +export GITHUB_TOKEN={YOUR DEPLOYMENT TOKEN ON GITHUB} +./build/run doc:release_notes -Dcurrent_tag=v3.4.0 -Doutfile=RELEASE_NOTES.md -Dtoken=$GITHUB_TOKEN +``` + +#### Releasepagina indien nodig bewerken + +Als er speciale overwegingen zijn, voeg deze dan handmatig toe aan de releasepagina. Speciale overwegingen +kunnen onder meer wijzigingen omvatten die vereisen dat derdepartijplug-ins moeten worden bijgewerkt of dat +een volledige herindexering vereist is. + +Voorbeeldinhoud: + +```md +This release requires a **full reindex** of ArchivesSpace for all functionality to work +correctly. Please follow the [instructions for reindexing](/administration/indexes) +before starting ArchivesSpace with the new version. +``` + +## Updates na publicatie + +Nadat een uitgave is vrijgegeven, is het tijd voor onderhoud voordat de volgende +ontwikkelingscyclus weer op volle toeren draait. Houd rekening met het volgende, afhankelijk van +het huidige teamconsensus: + +### Branches + +Verwijder samengevoegde en verouderde branches in GitHub, zoals passend. + +### Milestones + +Sluit de zojuist vrijgegeven milestone, met als vervaldatum de datum van vandaag. Maak een +nieuwe milestone voor de verwachte volgende uitgave (dit kan later worden gewijzigd als de +versienummering om welke reden dan ook wordt gewijzigd). + +### Testservers + +Bekijk bestaande testservers en vraag om verwijdering van servers die niet langer nodig zijn +(bijvoorbeeld feature-branches die al zijn samengevoegd voor de uitgave). + +### GitHub-issues + +Controleer bestaande openstaande GH-issues en sluit alle issues die door de +nieuwe uitgave zijn opgelost (bij voorkeur met een specifieke PR). Voor de overige open +issues, controleer of ze nog steeds een probleem zijn, voeg labels toe, koppel ze aan bekende JIRA +issues en voeg indien nodig relevante opmerkingen toe. + +### Toegankelijkheidscontrole + +Voer toegankelijkheidscontroles uit voor zowel de openbare als de medewerkerswebsite en maak een ticket +aan voor nieuwe en voortdurende toegankelijkheidsfouten. + +### PR-toewijzingen + +Begin met het toewijzen van in de wachtrij geplaatste PR's aan leden van de Core Committers-groep, +met inachtneming van de juiste milestone voor de verwachte volgende uitgave. + +### Afhankelijkheden + +#### Gems + +Kijk naar alle Gemfile.lock-bestanden (in backend, frontend, public, +enz.) en controleer de gem-versies. Besteed bijzondere aandacht aan de Rails & Friends +(ActiveSupport, ActionPack, enz.), Rack en Sinatra-versies en controleer of er geen +beveiligingspatchversies zijn. Dat komt meestal voor, vooral omdat Rails relatief vaak +oplossingen voor beveiligingsproblemen uitbrengt. + +Om de gems bij te werken, werkt u de versie in Gemfile bij, verwijdert u Gemfile.lock en +roept u `./build/run bootstrap` aan om alles te downloaden. Controleer daarna of uw test +suite slaagt. + +Zodra alles is gelukt, commit uw Gemfiles en Gemfile.lock-bestanden. diff --git a/src/content/docs/nl/development/release_schema_versions.md b/src/content/docs/nl/development/release_schema_versions.md new file mode 100644 index 0000000..5a7528d --- /dev/null +++ b/src/content/docs/nl/development/release_schema_versions.md @@ -0,0 +1,41 @@ +--- +title: Databaseschemaversies per release +description: Een overzicht van ArchivesSpace-releases en de bijbehorende databaseschemaversies. +--- + +| Release | Databaseschemaversie | +| ------- | -------------------- | +| 1.1.0 | 33 | +| 1.1.1 | 35 | +| 1.1.2 | 35 | +| 1.2.0 | 38 | +| 1.3.0 | 56 | +| 1.4.0 | 59 | +| 1.4.1 | 59 | +| 1.4.2 | 59 | +| 1.5.0 | 74 | +| 1.5.1 | 74 | +| 1.5.2 | 75 | +| 1.5.3 | 75 | +| 1.5.4 | 75 | +| 2.0.0 | 84 | +| 2.0.1 | 84 | +| 2.1.0 | 92 | +| 2.1.1 | 92 | +| 2.1.2 | 92 | +| 2.2.0 | 93 | +| 2.2.1 | 94 | +| 2.2.2 | 95 | +| 2.3.0 | 97 | +| 2.3.1 | 97 | +| 2.3.2 | 97 | +| 2.4.0 | 100 | +| 2.4.1 | 100 | +| 2.5.0 | 102 | +| 2.5.1 | 102 | +| 2.5.2 | 108 | +| 2.6.0 | 120 | +| 2.7.0 | 126 | +| 2.7.1 | 129 | +| 2.8.0 | 135 | +| 2.8.1 | 138 | diff --git a/src/content/docs/nl/development/releases.md b/src/content/docs/nl/development/releases.md new file mode 100644 index 0000000..17edab3 --- /dev/null +++ b/src/content/docs/nl/development/releases.md @@ -0,0 +1,192 @@ +--- +title: Uitgaven +description: Een lijst met ArchivesSpace-uitgaven, de uitgavedatums, schemaversies en links naar de betreffende uitgave op GitHub. +--- + +3.4.0 24 mei 2023 +De schemaversie voor deze uitgave is 172. +https://github.com/archivesspace/archivesspace/tree/v3.4.0 + +3.3.1 4 oktober 2022 +De schemaversie voor deze uitgave is 164 +https://github.com/archivesspace/archivesspace/tree/v3.3.1 + +3.2.0 4 februari 2022 +De schemaversie voor deze uitgave is 159. +https://github.com/archivesspace/archivesspace/releases/download/v3.2.0/archivesspace-v3.2.0.zip + +3.1.1 19 november 2021 +De schemaversie voor deze uitgave is 157 +https://github.com/archivesspace/archivesspace/releases/download/v3.1.0/archivesspace-v3.1.1.zip + +3.1.0 20 september 2021 +De schemaversie voor deze uitgave is 157. +https://github.com/archivesspace/archivesspace/releases/download/v3.1.0/archivesspace-v3.1.0.zip + +3.0.2 11 augustus 2021 +De schemaversie voor deze uitgave is 148. +https://github.com/archivesspace/archivesspace/releases/download/v3.0.2/archivesspace-v3.0.2.zip + +3.0.1 4 juni 2021 +De schemaversie voor deze uitgave is 147. +https://github.com/archivesspace/archivesspace/releases/download/v3.0.1/archivesspace-v3.0.1.zip + +3.0.0 10 mei 2021 +De schemaversie voor deze uitgave is 147. +[Fout in de uitgave] + +2.8.1 11 november 2020. +De schemaversie voor deze uitgave is 138. +https://github.com/archivesspace/archivesspace/releases/download/v2.8.1/archivesspace-v2.8.1.zip + +2.8.0 16 juli 2020. +De schemaversie voor deze uitgave is 135. +https://github.com/archivesspace/archivesspace/releases/download/v2.8.0/archivesspace-v2.8.0.zip + +2.7.1 14 februari 2020. +De schemaversie voor deze uitgave is 129. +https://github.com/archivesspace/archivesspace/releases/download/v2.7.1/archivesspace-v2.7.1.zip + +2.7.0 9 oktober 2019. +De schemaversie voor deze uitgave is 126. +https://github.com/archivesspace/archivesspace/releases/download/v2.7.0/archivesspace-v2.7.0.zip + +2.6.0 30 mei 2019. +De schemaversie voor deze uitgave is 120. +https://github.com/archivesspace/archivesspace/releases/download/v2.6.0/archivesspace-v2.6.0.zip + +2.5.2 15 januari 2019. +De schemaversie voor deze uitgave is 108. +https://github.com/archivesspace/archivesspace/releases/download/v2.5.2/archivesspace-v2.5.2.zip + +2.5.1 17 oktober 2018. +Deze uitgave bevat geen nieuwe databasemigraties. +https://github.com/archivesspace/archivesspace/releases/download/v2.5.1/archivesspace-v2.5.1.zip + +2.5.0 10 augustus 2018. +De schemaversie voor deze uitgave is 102. +https://github.com/archivesspace/archivesspace/releases/download/v2.5.0/archivesspace-v2.5.0.zip + +2.4.1 22 juni 2018. +Deze uitgave bevat geen nieuwe databasemigraties. +https://github.com/archivesspace/archivesspace/releases/download/v2.4.1/archivesspace-v2.4.1.zip + +2.4.0 7 juni 2018. +De schemaversie voor deze uitgave is 100. +https://github.com/archivesspace/archivesspace/releases/download/v2.4.0/archivesspace-v2.4.0.zip + +2.3.2 27 maart 2018. +Deze uitgave bevat geen nieuwe databasemigraties. +https://github.com/archivesspace/archivesspace/releases/download/v2.3.2/archivesspace-v2.3.2.zip + +2.3.1 28 februari 2018. +Deze uitgave bevat geen nieuwe databasemigraties. +https://github.com/archivesspace/archivesspace/releases/download/v2.3.1/archivesspace-v2.3.1.zip + +2.3.0 5 februari 2018. +De schemaversie voor deze uitgave is 97. +https://github.com/archivesspace/archivesspace/releases/download/v2.3.0/archivesspace-v2.3.0.zip + +2.2.2 13 december 2017. +De schemaversie voor deze uitgave is 95. +https://github.com/archivesspace/archivesspace/releases/download/v2.2.2/archivesspace-v2.2.2.zip + +2.2.0 12 oktober 2017. +De schemaversie voor deze uitgave is 93. +https://github.com/archivesspace/archivesspace/releases/download/v2.2.0/archivesspace-v2.2.0.zip + +2.1.2 1 september 2017. +De schemaversie voor deze uitgave is 92. +https://github.com/archivesspace/archivesspace/releases/download/v2.1.2/archivesspace-v2.1.2.zip + +2.1.1 16 augustus 2017. +De schemaversie voor deze uitgave is 92. +https://github.com/archivesspace/archivesspace/releases/download/v2.1.1/archivesspace-v2.1.1.zip + +2.1.0 18 juli 2017. +De schemaversie voor deze uitgave is 92. +https://github.com/archivesspace/archivesspace/releases/download/v2.1.0/archivesspace-v2.1.0.zip + +2.0.1 2 mei 2017. +De schemaversie voor deze uitgave is 84. +https://github.com/archivesspace/archivesspace/releases/download/v2.0.1/archivesspace-v2.0.1.zip + +2.0.0 18 april 2017. +De schemaversie voor deze uitgave is 84. +https://github.com/archivesspace/archivesspace/releases/download/v2.0.0/archivesspace-v2.0.0.zip + +1.5.4 16 maart 2017. +De schemaversie voor deze uitgave is 75. +https://github.com/archivesspace/archivesspace/releases/download/v1.5.4/archivesspace-v1.5.4.zip + +1.5.3 15 februari 2017. +De schemaversie voor deze uitgave is 75. +https://github.com/archivesspace/archivesspace/releases/download/v1.5.3/archivesspace-v1.5.3.zip + +1.5.2 8 december 2016. +De schemaversie voor deze uitgave is 75. +https://github.com/archivesspace/archivesspace/releases/download/v1.5.2/archivesspace-v1.5.2.zip + +1.5.1 29 juli 2016. +De schemaversie voor deze uitgave is 74. +https://github.com/archivesspace/archivesspace/releases/download/v1.5.1/archivesspace-v1.5.1.zip + +1.5.0 20 juli 2016. +De schemaversie voor deze uitgave is 74. +https://github.com/archivesspace/archivesspace/releases/download/v1.5.0/archivesspace-v1.5.0.zip + +1.4.2 27 oktober 2015. +De schemaversie voor deze uitgave is 59. +https://github.com/archivesspace/archivesspace/releases/download/v1.4.2/archivesspace-v1.4.2.zip + +1.4.1 13 oktober 2015. +De schemaversie voor deze uitgave is 59. +https://github.com/archivesspace/archivesspace/releases/download/v1.4.1/archivesspace-v1.4.1.zip + +1.4.0 29 september 2015. +De schemaversie voor deze uitgave is 59. +https://github.com/archivesspace/archivesspace/releases/download/v1.4.0/archivesspace-v1.4.0.zip + +1.3.0 30 juni 2015. +De schemaversie voor deze uitgave is 56. +https://github.com/archivesspace/archivesspace/releases/download/v1.3.0/archivesspace-v1.3.0.zip + +1.2.0 30 maart 2015. +De schemaversie voor deze uitgave is 38. +https://github.com/archivesspace/archivesspace/releases/download/v1.2.0/archivesspace-v1.2.0.zip + +1.1.2 21 januari 2015. +De schemaversie voor deze uitgave is 35. +https://github.com/archivesspace/archivesspace/releases/download/v1.1.2/archivesspace-v1.1.2.zip + +1.1.1 6 januari 2015. +De schemaversie voor deze uitgave is 35. +https://github.com/archivesspace/archivesspace/archive/refs/tags/v1.1.1.zip (alleen de broncode is beschikbaar) + +1.1.0 20 oktober 2014. +De schemaversie voor deze uitgave is 33. +https://github.com/archivesspace/archivesspace/releases/download/v1.1.0/archivesspace-v1.1.0.zip + +1.0.9 13 mei 2014. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.9/archivesspace-v1.0.9.zip + +1.0.7.1 7 maart 2014. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.7.1/archivesspace-v1.0.7.1.zip + +1.0.4 14 januari 2014. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.4/archivesspace-v1.0.4.zip + +1.0.2 26 november 2013. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.2/archivesspace-v1.0.2.zip + +1.0.1 1 november 2013. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.1/archivesspace-v1.0.1.zip + +1.0.0 4 oktober 2013. +De schemaversie voor deze uitgave is ??? +https://github.com/archivesspace/archivesspace/releases/download/v1.0.0/archivesspace-v1.0.0.zip diff --git a/src/content/docs/nl/development/ui_test.md b/src/content/docs/nl/development/ui_test.md new file mode 100644 index 0000000..e465fd9 --- /dev/null +++ b/src/content/docs/nl/development/ui_test.md @@ -0,0 +1,138 @@ +--- +title: UI-tests +description: Instructies voor het uitvoeren van geautomatiseerde browsertests met Selenium op de ArchivesSpace-interface, zowel in Firefox als in Chrome. +--- + +De medewerkersinterface en publieke gebruikersinterface van ArchivesSpace gebruiken [Selenium](http://docs.seleniumhq.org/) voor geautomatiseerde browsertests. Deze tests kunnen worden uitgevoerd met [Firefox via geckodriver](https://firefox-source-docs.mozilla.org/testing/geckodriver/geckodriver/index.html) en [Chrome](https://sites.google.com/a/chromium.org/chromedriver/home) (de gewone versie van Chrome of Chrome in headlessmodus). + +## UI-tests met Firefox (standaard) + +Firefox is de standaardbrowser in onze [CI-workflows](https://github.com/archivesspace/archivesspace/actions). + +In Ubuntu Linux 22.04 en hoger is het meegeleverde Firefox-debpakket een overgangspakket dat Firefox in feite via [snap](https://snapcraft.io/) installeert. Snap heeft beveiligingsbeperkingen die zonder extra configuratie niet werken bij geautomatiseerde tests. + +Verwijder het Firefox-snap-pakket en installeer Firefox opnieuw als een traditioneel deb-pakket in Ubuntu Linux: + +```bash +# remove old snap firefox package (if installed) +sudo snap remove firefox + +# create a keyring directory (if not existing) +sudo install -d -m 0755 /etc/apt/keyrings + +# download mozilla key and add it to the keyring +wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null + +# set high priority for the mozilla pakcages +echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null +echo ' +Package: * +Pin: origin packages.mozilla.org +Pin-Priority: 1000 +' | sudo tee /etc/apt/preferences.d/mozilla + +# install firefox +sudo apt update && sudo apt install firefox +``` + +Wanneer u Firefox gebruikt, moet u controleren of de versie van geckodriver die u gebruikt compatibel is met uw Firefox-versie. Raadpleeg hiervoor deze [compatibiliteitstabel](https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html). U kunt de geïnstalleerde Firefox-versie opvragen met: `firefox --version`. + +Op Linux kunt u [hier](https://github.com/mozilla/geckodriver/releases) de geckodriver-versie downloaden die overeenkomt met uw Firefox-versie. + +Op een Mac kunt u `brew install geckodriver` gebruiken. + +## UI-tests met Chrome + +Als u Chrome wilt gebruiken, moet u eerst het juiste [ChromeDriver-uitvoerbare bestand +downloaden](https://sites.google.com/a/chromium.org/chromedriver/downloads) +en dit op een locatie in het systeempad van uw besturingssysteem plaatsen. Mac-gebruikers met Homebrew kunnen dit doen met `brew cask install chromedriver`. + +**Let op: om deze tests uit te voeren, moet Firefox of Chrome op uw systeem zijn geïnstalleerd. Raadpleeg de documentatie van [Firefox WebDriver](https://developer.mozilla.org/en-US/docs/Web/WebDriver) +of [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/home) +om te controleren of uw Selenium-, driver-, browser- en besturingssysteemversies bij elkaar passen en compatibel zijn.** + +## Voorbereiding: + +Voer de bootstrap-buildtaak uit om JRuby en alle vereiste afhankelijkheden te configureren: + +```bash +$ cd .. +$ build/run bootstrap +``` + +Opmerking: in alle codevoorbeelden wordt ervan uitgegaan dat u vanuit de projectmap van ArchivesSpace werkt. + +## De tests uitvoeren: + +```bash +#Frontend tests +./build/run frontend:selenium # Firefox, headless +FIREFOX_OPTS= ./build/run frontend:selenium # Firefox, no-opts = heady + +SELENIUM_CHROME=true ./build/run frontend:selenium # Chrome, headless +SELENIUM_CHROME=true CHROME_OPTS= ./build/run frontend:selenium # Chrome, no-opts = heady + +#Public tests +./build/run public:test # Firefox, headless +FIREFOX_OPTS= ./build/run public:test # Firefox, no-opts = heady + +SELENIUM_CHROME=true ./build/run public:test # Chrome, headless +SELENIUM_CHROME=true CHROME_OPTS= ./build/run public:test # Chrome, no-opts = heady +``` + +U kunt tests beperken tot specifieke bestanden of groepen: + +```bash +./build/run .. -Dspec='path/to/spec/from/spec/directory' # single file +./build/run .. -Dexample='[description from it block]' # specific block + +#EXAMPLES +./build/run frontend:selenium -Dexample='Repository model' +FIREFOX_OPTS= ./build/run frontend:selenium -Dexample='Repository model'# Firefox, heady + +./build/run public:test -Dspec='features/accessibility_spec.rb' +SELENIUM_CHROME=true CHROME_OPTS= ./build/run public:test -Dspec='features/accessibility_spec.rb' # Chrome, heady +``` + +Voor de tests moeten een backend en een frontendservice actief zijn. Om de overhead van het starten en stoppen ervan tijdens het ontwikkelen te vermijden, kunt u tests uitvoeren tegen een ontwikkelbackend: + +```bash +# start mysql and solr containers: +docker-compose -f docker-compose-dev.yml up + +# start services: + supervisord -c supervisord/archivesspace.conf + +# run a spec using the started backend: +ASPACE_TEST_BACKEND_URL='http://localhost:4567' ./build/run frontend:test -Dpattern="./features/events_spec.rb" + +# run all examples that contain "can spawn" in their description: +./build/run frontend:test -Dpattern="./features/accessions_spec.rb" -Dexample="can spawn" +``` + +Sommige tests zijn echter afhankelijk van een reeks geordende stappen en kunnen mogelijk niet altijd afzonderlijk worden uitgevoerd. In dat geval kunnen er meer voorbeelden worden uitgevoerd dan het gegeven voorbeeld en/of kunnen onverwachte fouten optreden. + +### Opgeslagen pagina's bij mislukte specs + +Wanneer frontend-specs mislukken, worden voor elk mislukt voorbeeld een schermafbeelding en een HTML-pagina opgeslagen in `frontend/tmp/capybara`. In CI is voor elke mislukte CI-taak een zipbestand beschikbaar onder Samenvatting -> Artefacten. Om de assets te laden (en geen gewone HTML weer te geven) wanneer u de opgeslagen HTML-pagina's bekijkt, moet er lokaal een ontwikkelserver actief zijn op poort 3000. Zie [Een ontwikkelversie van ArchivesSpace uitvoeren](/development/dev). + +### De testdatabase actueel houden + +Wanneer u `./build/run frontend:test` uitvoert om frontend-specs uit te voeren, worden de volgende stappen uitgevoerd voordat de specs zelf starten: + +- Alle tabellen van de testdatabase worden verwijderd: `./build/run db:nuke:test` +- `frontend/spec/fixtures/archivesspace-test.sql` wordt in de testdatabase geladen: `./build/run db:load:test` +- Alle migraties die nog niet zijn toegepast, worden uitgevoerd: `./build/run db:migrate:test` + +#### De database-dump van de testdatabase bijwerken + +Als er migraties worden toegepast wanneer u een of meer frontend-specs uitvoert, betekent dit dat de database-dump van de testdatabase `frontend/spec/fixtures/archivesspace-test.sql` verouderd is. U kunt een nieuwe database-dump van de testdatabase maken met: + +```bash +./build/run db:nuke:test +./build/run db:load:test +./build/run db:migrate:test +./build/run db:dump:test +``` + +Er wordt een bijgewerkt bestand `frontend/spec/fixtures/archivesspace-test.sql` gemaakt dat kan worden vastgelegd en naar een pullrequest kan worden gepusht. diff --git a/src/content/docs/nl/development/vscode.md b/src/content/docs/nl/development/vscode.md new file mode 100644 index 0000000..009d256 --- /dev/null +++ b/src/content/docs/nl/development/vscode.md @@ -0,0 +1,70 @@ +--- +title: De VS Code-editor gebruiken +description: Instructies voor het gebruik van de VS Code-editor met ArchivesSpace, inclusief vereisten en configuratie. +--- + +ArchivesSpace biedt een [instellingenbestand voor VS Code](https://github.com/archivesspace/archivesspace/blob/master/.vscode/settings.json) waarmee bijdragers die VS Code gebruiken eenvoudig de codestijl van het project kunnen volgen en met de end-to-endtests kunnen werken. Met deze toolchain in uw editor kunt u fouten in de codeopmaak en linterfouten oplossen _voordat_ u bestanden commit of tests uitvoert. In veel gevallen worden dergelijke fouten automatisch opgelost wanneer het bestand waaraan u werkt, wordt opgeslagen. Fouten die niet automatisch kunnen worden opgelost, worden gemarkeerd met golvende lijnen. Als u de aanwijzer boven deze lijnen houdt, wordt een beschrijving van de fout weergegeven die u helpt een oplossing te vinden. + +## Vereisten + +1. [Node.js](https://nodejs.org) +2. [Ruby](https://www.ruby-lang.org/) +3. [VS Code](https://code.visualstudio.com/) + +## VS Code instellen + +### Systeemafhankelijkheden toevoegen + +1. [ESLint](https://eslint.org/) +2. [Prettier](https://prettier.io/) +3. [Rubocop](https://rubocop.org/) +4. [Stylelint](https://stylelint.io/) + +#### Rubocop + +```bash +gem install rubocop +``` + +Zie https://docs.rubocop.org/rubocop/installation.html voor meer informatie, onder andere over het gebruik van Bundler. + +#### ESLint, Prettier, Stylelint + +Voer de volgende opdracht uit vanuit de hoofdmap van ArchivesSpace. + +```bash +npm install +``` + +Zie [package.json](https://github.com/archivesspace/archivesspace/blob/master/package.json) voor meer informatie over hoe deze tools in ArchivesSpace worden gebruikt. + +### VS Code-extensies toevoegen + +Voeg de volgende extensies toe via het opdrachtpalet van VS Code of het deelvenster Extensies. (Zie deze [documentatie over het installeren en beheren van extensies](https://code.visualstudio.com/learn/get-started/extensions)). + +1. [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) (dbaeumer.vscode-eslint) +2. [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) (esbenp.prettier-vscode) +3. [Ruby Rubocop Revised](https://marketplace.visualstudio.com/items?itemName=LoranKloeze.ruby-rubocop-revived) (LoranKloeze.ruby-rubocop-revived) +4. [Stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) (stylelint.vscode-stylelint) + +Optioneel — voor betere ondersteuning bij het werken met de end-to-endtests: + +5. [Cucumber](https://marketplace.visualstudio.com/items?itemName=CucumberOpen.cucumber-official) (CucumberOpen.cucumber-official) — zie [Integratie van end-to-endtests](#integratie-van-end-to-endtests), met name de navigatie naar stapdefinities. + +Het is belangrijk om te weten dat deze extensies samenwerken met het [instellingenbestand voor VS Code](https://github.com/archivesspace/archivesspace/blob/master/.vscode/settings.json). Deze instellingen zijn daarom alleen van invloed op uw ArchivesSpace-werkruimte in VS Code, niet op uw algemene gebruikersinstellingen voor VS Code. + +De extensies zouden nu direct moeten werken: ze geven foutmeldingen en corrigeren fouten die kunnen worden opgelost automatisch wanneer u een bestand opslaat! + +### Integratie van end-to-endtests + +De ArchivesSpace-repository bevat een optionele VS Code-werkruimteconfiguratie die de Cucumber-end-to-endtestsuite met de editor integreert. De bestanden [`.vscode/example.tasks.json`](https://github.com/archivesspace/archivesspace/blob/master/.vscode/example.tasks.json) en [`.vscode/example.settings.json`](https://github.com/archivesspace/archivesspace/blob/master/.vscode/example.settings.json) zijn standaard niet ingeschakeld, zodat ze uw persoonlijke editorconfiguratie niet overschrijven. + +**De taken inschakelen** + +Kopieer het voorbeeldbestand met taken naar `.vscode/tasks.json`. Hiermee voegt u een taak toe die de e2e-testsuite uitvoert met de juiste werkmap, Ruby-omgeving en omgevingsvariabelen. Voer de taak uit via **Terminal → Run Task… → Cucumber: Run e2e-test** (dezelfde opdracht als in de [documentatie voor e2e-tests](/development/e2e_tests)). U kunt desgewenst een pad naar een featurebestand opgeven, `file.feature:line`. + +**Naar stapdefinities navigeren** + +Voeg de inhoud van `example.settings.json` samen met uw bestaande `.vscode/settings.json` (vervang het bestaande bestand niet, maar voeg de Cucumber-gerelateerde instellingen samen als u deze wilt gebruiken, zodat uw huidige werkruimte-instellingen behouden blijven). + +Hiermee configureert u de Cucumber-extensie voor `e2e-tests/**/*.feature` en gedeelde Ruby-stapdefinities, zodat u naar definities kunt navigeren, ongedefinieerde stappen kunt detecteren en gedeelde stappen kunt vinden. Dit maakt het eenvoudiger om nieuwe end-to-endtests bij te dragen. diff --git a/src/content/docs/nl/index.mdx b/src/content/docs/nl/index.mdx new file mode 100644 index 0000000..60b92b7 --- /dev/null +++ b/src/content/docs/nl/index.mdx @@ -0,0 +1,14 @@ +--- +title: Technische documentatie voor ArchivesSpace +description: Technische documentatie voor ArchivesSpace, de opensourcesoftware voor archiefbeheer. +tableOfContents: false +editUrl: false +issueUrl: false +lastUpdated: false +prev: false +next: false +--- + +import Homepage from '@components/HomePage.astro' + +<Homepage /> diff --git a/src/content/docs/nl/migrations/migrate_from_archivists_toolkit.md b/src/content/docs/nl/migrations/migrate_from_archivists_toolkit.md new file mode 100644 index 0000000..2979dad --- /dev/null +++ b/src/content/docs/nl/migrations/migrate_from_archivists_toolkit.md @@ -0,0 +1,113 @@ +--- +title: Migreren vanuit Archivists' Toolkit +description: Richtlijnen voor het migreren van gegevens uit Archivists' Toolkit 2.0 Update 16 naar alle ArchivesSpace 2.1.x- of 2.2.x-uitgaven met behulp van de migratietool van ArchivesSpace. +--- + +Deze richtlijnen beschrijven hoe u gegevens migreert uit Archivists' Toolkit 2.0 Update 16 naar alle ArchivesSpace 2.1.x- of 2.2.x-uitgaven met behulp van de migratietool van ArchivesSpace. Deze richtlijnen en migratietool ondersteunen geen migraties van eerdere versies van Archivists' Toolkit (AT) of andere versies van ArchivesSpace. + +> Opmerking: Voer een migratie van Archivists' Toolkit naar ArchivesSpace niet uit op een actieve productiedatabase. + +## Migratie voorbereiden + +- Maak een kopie van de AT-instantie, inclusief de database, die u wilt migreren en gebruik die als bron voor de migratie. Het wordt sterk aanbevolen om uw AT-productie-instantie en -database niet als bron voor de migratie te gebruiken, zodat u de productieversie beschermt tegen eventuele afwijkingen die tijdens het migratieproces kunnen optreden. +- Controleer de kwaliteit van de gegevens in de brondatabase. Zoek naar ongeldige records, dubbele naam- en onderwerprecords en dubbele gecontroleerde waarden. Onregelmatige gegevens worden overgenomen in de ArchivesSpace-instantie of kunnen in sommige gevallen het migratieproces blokkeren. +- Selecteer een representatieve steekproef van records voor nog niet ontsloten materiaal, collecties en digitale objecten om na afloop van de migratie grondig te onderzoeken. Zorg ervoor dat de steekproef zowel de eenvoudigste als de meest ingewikkelde of uitgebreide records uit de gehele gegevensverzameling bevat. + +### Opmerkingen + +- Een AT-onderwerprecord krijgt het type 'topical' als het geen geldige AT-typeaanduiding heeft of als het type niet voorkomt tussen de typen in ArchivesSpace. Verschillende andere AT LookupList-waarden zijn niet beschikbaar in ArchivesSpace. Deze LookupList-waarden kunnen niet tijdens de AT-migratie worden toegevoegd en moeten daarom vóór de migratie in AT worden gewijzigd. Raadpleeg de datamap voor alle details over de toewijzingen van enumeraties (lijsten met gecontroleerde waarden). U kunt de AT Lookup List-tool gebruiken om waarden te wijzigen die volgens de datamap niet correct worden toegewezen. +- Auditgegevens van records (aangemaakt door, aanmaakdatum, gewijzigd door en wijzigingsdatum) worden niet van AT naar ArchivesSpace gemigreerd. ArchivesSpace kent nieuwe auditgegevens toe aan elk record wanneer het wordt geïmporteerd. De uitzondering hierop is de gebruikersnaam van de gebruiker die een record voor nog niet ontsloten materiaal aanmaakt; deze wordt gemigreerd naar het algemene notitieveld voor dat materiaal. +- Implementeer een productieversie van ArchivesSpace, inclusief de configuratie van een MySQL-database waarnaar u kunt migreren. Instructies vindt u in [Aan de slag met ArchivesSpace](/administration/getting_started) en [ArchivesSpace gebruiken met MySQL](/provisioning/mysql). + +## AT-gegevens voorbereiden op migratie + +- Het migratieproces verloopt iteratief. Aan het einde van elke migratieronde wordt een migratierapport gegenereerd. Het rapport bevat fouten en problemen die tijdens de migratie zijn opgetreden. (Aan het einde van dit document vindt u een voorbeeld van een AT-migratierapport.) Gebruik dit rapport om te bepalen of problemen in de migratieresultaten het best kunnen worden opgelost in de brongegevens of in de gemigreerde gegevens in de ArchivesSpace-instantie. Als u de problemen in de brongegevens oplost, kunt u de migratie eenvoudig opnieuw uitvoeren. +- Nadat u de migratie hebt geaccepteerd en problemen in de gemigreerde gegevens hebt opgelost, kunt u de brongegevens niet opnieuw migreren zonder een nieuwe doelinstantie van ArchivesSpace in te stellen. Migratie naar een ArchivesSpace-database waarnaar al eerder is gemigreerd, kan veel foutmeldingen over dubbele records opleveren en onherstelbare schade aan de ArchivesSpace-database veroorzaken. +- Houd er rekening mee dat gegevensmigratie veel geheugen en tijd kan vergen, omdat er een groot aantal records wordt overgezet. Daarom raden we aan de AT-migratie uit te voeren op een computer met ten minste 2 GB beschikbaar geheugen. +- Zorg ervoor dat uw ArchivesSpace MySQL-database correct is ingesteld volgens de documentatie in het README-bestand van ArchivesSpace. Bij het aanmaken van een MySQL-database MOET u de standaardtekencodering van de database instellen op UTF8. Dit is vooral belangrijk als u een MySQL-client zoals Navicat, MySQL Workbench of phpMyAdmin gebruikt om de database aan te maken. Zie [ArchivesSpace gebruiken met MySQL](/provisioning/mysql) voor meer informatie. +- Verhoog de maximale Java-heapruimte als er time-outs optreden. Doe dit als volgt: + - Stop de huidige ArchivesSpace-instantie. + - Open het bestand "archivesspace.sh" (Linux / Mac OSX) of archivesspace.bat (Windows) in een teksteditor. Het bestand staat in de installatiemap van ArchivesSpace. + - Zoek de tekenreeks "-Xmx512m" en wijzig deze in "-Xmx1024m". + - Sla het bestand op. + - Start de ArchivesSpace-instantie opnieuw. + - Start het AT-migratieproces opnieuw. + +## De migratietool uitvoeren als AT-plug-in + +- Zorg ervoor dat de AT-instantie waaruit u wilt migreren is afgesloten. Download vervolgens het bestand "scriptAT.zip" van de uitgavepagina voor at-migration (https://github.com/archivesspace/at-migration/releases) en kopieer het bestand naar de map plugins van de AT-instantie. Overschrijf het bestaande bestand indien nodig. +- Zorg ervoor dat de ArchivesSpace-instantie waarnaar u migreert actief is. +- Start de AT-instantie opnieuw om de nieuw geïnstalleerde plug-in te laden. Open het menu "Hulpmiddelen" om de plug-in uit te voeren, selecteer vervolgens "Script Runtime v1.0" en ten slotte "ArchivesSpace Data Migrator". Het venster van de plug-in wordt dan weergegeven. + +![AT-migratietool](../../../../images/at_migrator.jpg) + +- Wijzig de standaardgegevens in de gebruikersinterface van de migratietool: + - **Threads** – Hiermee geeft u het aantal clients op dat wordt gebruikt om records voor collecties gelijktijdig te kopiëren. Het maximumaantal clients hangt af van de recordgrootte en het toegewezen geheugen. Een aantal van 4 tot 6 is doorgaans een goede keuze, maar u kunt dit verlagen als er een "Out of Memory Exception" optreedt. + - **Host** – De URL en het poortnummer van de ArchivesSpace-backendserver. + - **Selectievakje "Copy records when done"** – Hiermee geeft u aan dat de records moeten worden gekopieerd zodra de controle van de collectiebeherende instelling is voltooid. + - **Password** – Het wachtwoord voor het ArchivesSpace-account "admin". De standaardwaarde "admin" zou moeten werken, tenzij deze door de ArchivesSpace-beheerder is gewijzigd. + - **Reset Password** – Het wachtwoord van elke overgezette gebruikersaccount wordt hiermee opnieuw ingesteld. Gebruikers moeten hun wachtwoord wijzigen wanneer ze zich voor het eerst aanmelden, tenzij LDAP wordt gebruikt voor authenticatie. + - **Keuzerondje "Specify Type of Extent Data"** – Selecteer deze optie als u de BYU-plug-in gebruikt. Laat anders de standaardinstelling staan: Normal of Harvard Plugin. + - **Selectievakjes "Specify Unlinked Records to NOT Copy"** – Als u naam- of onderwerprecords hebt die niet zijn gekoppeld aan records voor nog niet ontsloten materiaal, collecties of digitale objecten, kunt u ervoor kiezen deze niet naar ArchivesSpace te migreren. + - **Selectievakjes "Records to Publish?"** – Hiermee geeft u aan welke typen records na de migratie naar ArchivesSpace moeten worden gepubliceerd. + - **Tekstvak met -refid_unique, -term_default** – Dit is nodig om de migratietool te laten werken. Breng geen wijzigingen aan in dit gedeelte. + - **Output Console** – Gedeelte waarin u de migratie kunt volgen terwijl deze wordt uitgevoerd. + - **View Error Log** – Hiermee kunt u een overzicht bekijken van alle fouten die tijdens het migratieproces zijn opgetreden. U kunt dit ook bekijken terwijl het migratieproces nog bezig is. +- Nadat u de gewenste wijzigingen in de gebruikersinterface hebt aangebracht, kunt u het migratieproces starten met een van de drie knoppen. + - **Copy to ArchivesSpace** – Hiermee start u de migratie naar de ArchivesSpace-instantie die wordt aangegeven door de Host-URL en waarvoor u de gewenste wijzigingen in de gebruikersinterface hebt aangebracht. Er zijn drie knoppen om het migratieproces te starten. + - **Run Repository Check** – De controle van de collectiebeherende instelling zoekt naar onjuiste koppelingen tussen collecties en gekoppelde records voor nog niet ontsloten materiaal of digitale objecten, en probeert deze te herstellen. De herstelactie kopieert het gekoppelde record voor nog niet ontsloten materiaal of digitale object naar de collectiebeherende instelling van het collectierecord in de ArchivesSpace-database (de posities van die records worden niet gewijzigd in de AT-database). + + De herstelactie is geldig zolang records voor nog niet ontsloten materiaal niet aan meerdere collectierecords in verschillende collectiebeherende instellingen zijn gekoppeld. Anders ontvangt u een waarschuwing. In dat geval worden de records voor de collectie en het nog niet ontsloten materiaal wel gemigreerd, maar niet aan elkaar gekoppeld. U moet die koppelingen in ArchivesSpace opnieuw aanbrengen. + + Dit probleem met onjuiste koppelingen betreft alleen records voor nog niet ontsloten materiaal en collecties, niet records voor digitale objecten, omdat records voor nog niet ontsloten materiaal en collecties een veel-op-veelrelatie hebben. Beoordelingen kunnen ook een veel-op-veelrelatie hebben met collecties, records voor nog niet ontsloten materiaal en digitale objecten. Omdat beoordelingen echter klein en snel te kopiëren zijn, worden ze gewoon naar zoveel mogelijk collectiebeherende instellingen gekopieerd om alle juiste koppelingen tot stand te brengen. + + Als het selectievakje "Copy Records When Done" is ingeschakeld, worden de records na afloop van de controle naar de ArchivesSpace-instantie gemigreerd. + + - **Continue Previous Migration** – Als het migratieproces mislukt, kunt u hiermee verdergaan vanaf het punt waar de vorige mislukte migratie is gestopt. Hierdoor zou het migratieproces voor collectierecords op een gecontroleerde manier opnieuw moeten kunnen worden gestart, zonder dat u de ArchivesSpace-backenddatabase hoeft op te schonen en helemaal opnieuw hoeft te beginnen. + +- Het gegevensmigratieproces verloopt grotendeels automatisch en genereert na afloop een foutenlogboek. Afhankelijk van de gegevens kunnen er echter verschillende fouten optreden. Nadat u deze hebt opgelost, moet u de migratie mogelijk opnieuw uitvoeren. De duur van een migratie hangt af van verschillende factoren (zoals de databasegrootte en netwerkprestaties) en kan variëren van enkele uren tot enkele dagen. +- De gegevens van de volgende AT-modules worden gemigreerd: + - Opzoeklijsten + - Collectiebeherende instellingen + - Locaties + - Gebruikers + - Onderwerpen + - Namen + - Records voor nog niet ontsloten materiaal + - Digitale objecten en componenten van digitale objecten + - Collecties en collectieonderdelen + - Beoordelingen +- Gegevens + - Rapporten uit de volgende AT-modules worden niet gemigreerd + > INFORMATIE ONTBREEKT IN HET BRONDOCUMENT - MOET WORDEN GECONTROLEERD!!! + +## De migratie beoordelen en gegevens opschonen + +Gebruik het migratierapport om de getrouwheid van de migratie te beoordelen en te bepalen of u: + +- gegevens in de AT-broninstantie wilt corrigeren en de migratie opnieuw wilt uitvoeren, of +- gegevens in de ArchivesSpace-doelinstantie wilt corrigeren. + +Als u ervoor kiest de gegevens in AT te corrigeren en de migratie opnieuw uit te voeren, moet u alle inhoud in de ArchivesSpace-instantie verwijderen. + +Als u de migratie in de ArchivesSpace-instantie accepteert, kunt u uw gegevens als volgt controleren en corrigeren. + +- Stel gebruikerswachtwoorden opnieuw in. Gebruikersrecords worden wel gemigreerd, maar de bijbehorende wachtwoorden niet. U moet de wachtwoorden opnieuw toewijzen volgens het beleid of de conventies van uw collectiebeherende instellingen. +- Controleer de steekproef van records die u hebt geselecteerd zorgvuldig: + - Records voor nog niet ontsloten materiaal + - Collecties + - Digitale objecten +- Controleer de volgende groepen records en verifieer of het juiste aantal records is gemigreerd: + - Records voor nog niet ontsloten materiaal + - Beoordelingen + - Collecties + - Digitale objecten + - Lijsten met gecontroleerde waarden + - Onderwerpen + - Agenten (naamrecords in AT) + - Locaties + - Classificaties voor collectiebeheer + - Er kunnen enkele extra agentrecords zijn vanwege standaardinstellingen van ArchivesSpace, of extra beoordelingsrecords als deze waren gekoppeld aan records van meer dan één collectiebeherende instelling. +- Let tijdens de controles op dubbele of onvolledige records, verbroken koppelingen en afgekorte gegevens. +- Controleer de containergegevens en locaties extra zorgvuldig. Het model hiervoor verschilt aanzienlijk tussen AT en ArchivesSpace (waar locaties aan een container zijn gekoppeld in plaats van rechtstreeks aan een collectie of record voor nog niet ontsloten materiaal), wat de migratie ingewikkelder maakt. +- Voeg enumeratiewaarden zo nodig samen. Als u bijvoorbeeld zowel 'local' als 'local sources' als bron voor namen hebt, kan het verstandig zijn deze waarden samen te voegen. diff --git a/src/content/docs/nl/migrations/migrate_from_archon.md b/src/content/docs/nl/migrations/migrate_from_archon.md new file mode 100644 index 0000000..355e9d9 --- /dev/null +++ b/src/content/docs/nl/migrations/migrate_from_archon.md @@ -0,0 +1,176 @@ +--- +title: Migreren vanuit Archon +description: Richtlijnen voor het migreren van gegevens van Archon 3.21-rev3 naar ArchivesSpace 2.2.2 met de migratietool van ArchivesSpace. +--- + +Deze richtlijnen beschrijven het migreren van gegevens van Archon 3.21-rev3 naar ArchivesSpace 2.2.2 met de migratietool van ArchivesSpace. Deze richtlijnen en migratietool ondersteunen geen migraties van gegevens uit eerdere versies van Archon of andere versies van ArchivesSpace. + +> Opmerking: Voer een migratie van Archon naar ArchivesSpace niet uit op een actieve productiedatabase. + +## Voorbereiding van de migratie + +Selecteer een representatieve steekproef van records over nog niet ontsloten materiaal, classificaties, collecties, collectie-inhoud en digitale objecten om na afloop van de migratie zorgvuldig te onderzoeken. Zorg ervoor dat de steekproef zowel eenvoudige als ingewikkeldere of uitgebreidere records bevat. + +Controleer de gegevenskwaliteit van uw Archon-database + +### Records over nog niet ontsloten materiaal + +- Geef indien mogelijk voor alle records een datum van binnenkomst op. Als in Archon geen datum van binnenkomst is vastgelegd, wordt tijdens de migratie de datum 01/01/9999 ingevuld. Als u deze standaardwaarde wilt wijzigen, kunt u vóór de migratie het volgende bestand in de nieuwe Archon-distributie bewerken: + `packages/core/templates/default/accession-list.inc.php` +- Geef indien mogelijk voor alle records een identificatiecode op. Als in Archon geen identificatiecode is vastgelegd, wordt tijdens de migratie een identificatiecode samengesteld op basis van de datum en de afgekorte titel van het record. + +### Classificatierecords + +Zorg ervoor dat er op hetzelfde niveau in de classificatiehiërarchie geen dubbele classificatietitels voorkomen. Als de migratietool een dubbele waarde tegenkomt, mislukken mogelijk enkele opslagbewerkingen voor classificaties en moet u de migratie opnieuw uitvoeren. + +### Collectierecords + +Als genormaliseerde datums niet correct zijn vastgelegd (bijvoorbeeld als de einddatum en begindatum zijn omgewisseld), worden ze niet gemigreerd of kan de migratie mislukken. Een systeembeheerder kan de volgende query op de database uitvoeren om zulke vermeldingen te vinden: + +`SELECT ID, Title, NormalDateBegin, NormalDateEnd FROM tblCollections_Collections WHERE NormalDateBegin > NormalDateEnd;` + +### Niveau-/containermanager + +Controleer de instellingen en zorg ervoor dat voor elke 'niveaucontainer' de juiste waarden zijn ingesteld bij 'Intellectueel niveau' en 'Fysieke container' en dat de EAD-waarden correct zijn vastgelegd. + +![Niveau-/containermanager](../../../../images/archon_level.jpg) + +Als de waarden van niveaucontainers niet correct zijn gecodeerd, kunnen archiefonderdelen in ArchivesSpace verkeerd worden genest. U hoeft de volgende informatie niet vóór de migratie te verwerken, maar houd er rekening mee als de inhoud na de migratie niet correct is genest: + +- Records met collectie-inhoud waarvan de niveaucontainer is ingesteld op 'Alleen intellectueel' worden als archiefonderdelen naar ArchivesSpace gemigreerd. Voor elk niveau/container waarvoor 'intellectueel niveau' is aangevinkt, moet in het veld 'EAD-niveau' een geldige waarde zijn vastgelegd (bijvoorbeeld class, collection, file, fonds, item, otherlevel, recordgrp, series, subfonds, subgrp, subseries). Deze waarden zijn hoofdlettergevoelig. Alle andere waarden worden voor de betreffende records met collectie-inhoud/archiefonderdelen gemigreerd als "otherlevel". +- Records met collectie-inhoud waarvan de niveaucontainer is ingesteld op 'Alleen fysiek' worden gemigreerd als instantierecords van het type 'text', gekoppeld aan een container in ArchivesSpace. Deze instantie-/containerrecords worden gekoppeld aan het intellectuele niveau of de intellectuele niveaus die in Archon eerder als directe onderliggende niveaus van de container waren vastgelegd. Als de instantie/container geen onderliggende niveaus heeft, wordt deze gekoppeld aan het bovenliggende intellectuele niveau. Ter illustratie tonen de volgende schermafbeeldingen een containerrecord vóór en na de migratie. + ![Voorbeeld van een Archon-container](../../../../images/archon_container.jpg) +- Records met collectie-inhoud die zowel fysieke als intellectuele niveaus hebben, worden zowel als archiefonderdelen als instanties gemigreerd. In dat geval wordt de instantie aan het archiefonderdeel gekoppeld. +- Records met collectie-inhoud die geen fysiek of intellectueel niveau hebben, worden behandeld alsof ze zijn ingesteld op 'Alleen intellectueel'. Dit wordt afgeraden en moet vóór de migratie worden hersteld. + +### Records met collectie-inhoud + +- Als in Archon geen waarde is ingesteld voor het veld 'Titel' of 'Inclusieve datums' van een 'intellectueel' niveau/container, krijgt het te migreren record met collectie-inhoud een titel op basis van de waarde van 'label' en het in Archon ingestelde type 'niveau/container'. + ![Records met collectie-inhoud](../../../../images/archon_collection.jpg) +- Controleer eventueel, als een migratie mislukt, of records met collectie-inhoud verwijzen naar ongeldige 'niveaus/containers'. Deze records staan in de databasetabellen, maar zijn niet zichtbaar voor medewerkers of eindgebruikers en moeten vóór de migratie worden verwijderd. Als ze niet worden verwijderd, mislukt de migratie. Volg deze stappen om deze records te identificeren. **Wees zeer voorzichtig. Maak eerst een back-up van de database of raadpleeg een systeembeheerder als u niet zeker weet wat u doet!** +- Open in MySQL of SQL Server de tabel 'tblCollections_LevelContainers'. Noteer de 'ID'-waarde van elke rij (d.w.z. LevelContainer). +- Voer een query uit op tblCollections_Content om records te vinden waarvan de kolom LevelID naar een ongeldige waarde verwijst. Als tblCollections_Level Containers bijvoorbeeld 'ID'-waarden 1-6 en 8-22 bevat: + `SELECT * FROM tblCollections_Content WHERE LevelContainerID > 22 OR (LevelContainerID > 6 AND LevelContainerID < 8);` + Hiermee wordt een lijst weergegeven van alle records met een ongeldige 'LevelID' (d.w.z. records waarvoor de primaire sleutel waarnaar een vreemde sleutel verwijst niet kan worden gevonden). Controleer deze lijst zorgvuldig en bepaal of u de records wilt verwijderen, of wijzig de LevelID in een geldig geheel getal als u de records wilt behouden. Als u de records verwijdert, moet u dit rechtstreeks in de database doen (zie hieronder). Als u de records wilt behouden, moet u mogelijk aanvullende stappen rechtstreeks in de database uitvoeren om deze records aan een geldig bovenliggend inhoudsrecord of een geldige collectie te koppelen; aanvullende instructies zijn op verzoek beschikbaar. +- Voer een query uit om de ongeldige records uit de tabel met collectie-inhoud te verwijderen. Bijvoorbeeld: + `DELETE FROM tblCollections_Content WHERE LevelContainerID > 22 OR (LevelContainerID > 6 AND LevelContainerID < 8);` +- Controleer eventueel, als de migratie mislukt, of er 'dubbele' records met collectie-inhoud zijn. 'Dubbele' records bevinden zich op hetzelfde knooppunt in de hiërarchie van collectie-inhoud. Voer de volgende query uit in mysql of sql server om zulke records te controleren. + `SELECT ParentID, SortOrder, COUNT (*) FROM tblCollections_Content GROUP BY ParentID, SortOrder HAVING COUNT(*) > 1;` +- De bovenstaande query controleert op records die zich op dezelfde vertakking en dezelfde positie in de inhoudshiërarchie bevinden. Als u zulke records vindt, moet u de sorteerwaarde van een van de records wijzigen, zodat beide records een unieke positie innemen. Voer hiervoor een query uit om alle records te vinden die aan het bovenliggende record zijn gekoppeld en voer daarna een updatequery uit om de sorteerwaarde van een van de betreffende records te wijzigen, zodat elk record een unieke sorteerwaarde heeft. Als de bovenstaande query bijvoorbeeld een 'dubbele' ParentID-waarde oplevert, voert u query één uit met de betreffende ParentID-waarde om de records te identificeren en query twee om het probleem op te lossen: + **Query één:** + + `SELECT ID, ParentID, SortOrder, Title FROM tblCollections_Content WHERE ParentID=8619;` + + | ID | ParentID | SortOrder | Title | + | ---- | -------- | --------- | ----------- | + | 8620 | 8619 | 1 | naar moeder | + | 8621 | 8619 | 1 | van moeder | + | 8622 | 8619 | 3 | naar vader | + | 6823 | 8619 | 4 | van vader | + + **Query twee:** + + `UPDATE tblCollections_Content SET SortOrder=2 WHERE ID=8621;` + +## Voorbereiding voor de migratie van Archon-gegevens + +Het migratieproces verloopt iteratief. Plan meerdere testmigraties en sluit af met een definitieve migratie. Voor de migratie is doorgaans hulp van een systeembeheerder nodig. + +De migratietool maakt verbinding met uw Archon-installatie, leest gegevens van gedefinieerde 'eindpunten' en plaatst de informatie in een doelinstantie van ArchivesSpace. + +Na elke migratieronde wordt een migratierapport gegenereerd dat u vanuit de applicatie kunt downloaden. Het rapport vermeldt fouten en problemen die tijdens de migratie zijn opgetreden. Voorbeeldgegevens uit een migratierapport staan in [Bijlage A](#Appendix-A%3A-Migration-Log-Review). + +Gebruik dit rapport om te bepalen of problemen in de migratieresultaten het best kunnen worden opgelost in de brongegevens of in de gemigreerde gegevens in de ArchivesSpace-instantie. Als u de problemen in de brongegevens oplost, kunt u de database leegmaken en de migratie opnieuw uitvoeren. Zodra u de migratie echter accepteert en de gemigreerde gegevens in ArchivesSpace wijzigt, kunt u de brongegevens niet opnieuw migreren zonder de vorige migratie te overschrijven of een nieuwe doelinstantie van ArchivesSpace in te stellen. + +Houd er rekening mee dat gegevensmigratie veel geheugen en tijd kan kosten vanwege de grote hoeveelheid records die wordt overgezet. Daarom raden we aan de Archon-migratietool uit te voeren op een server met ten minste 2 GB beschikbaar geheugen. Testmigraties duurden minder dan een uur, maar bij complexe en grote Archon-instanties ook twaalf uur of langer. + +Controleer vóór de migratie of uw huidige Archon-installatie up-to-date is: u moet versie 3.21 rev3 gebruiken. Als u een eerdere versie van Archon gebruikt, maakt u een kopie van de Archon-instantie die moet worden gemigreerd, inclusief de database, en gebruikt u die als migratiebron. We raden ten zeerste af om uw productie-instantie van Archon en de bijbehorende database als migratiebron te gebruiken, om de productieversie te beschermen tegen eventuele afwijkingen tijdens het migratieproces. Werk de kopie van de Archon-instantie bij naar versie 3.21 rev3 voordat u met de migratie begint. + +### De migratietool van Archon naar ArchivesSpace verkrijgen + +Download de nieuwste JAR-release via https://github.com/archivesspace-deprecated/ArchonMigrator/releases/latest. Dit is een uitvoerbaar JAR-bestand: dubbelklik erop om het uit te voeren. + +### ArchivesSpace-instantie installeren + +Implementeer een productieversie van ArchivesSpace en stel daarbij een MySQL-database in waarnaar u kunt migreren. Instructies staan bij [Aan de slag met ArchivesSpace](/administration/getting_started) en [ArchivesSpace uitvoeren met MySQL](/provisioning/mysql). + +### Voorbereiding op het starten van de migratie + +> **Belangrijke opmerking:** Start de migratie vanaf een computer met een stabiele netwerkverbinding (bijvoorbeeld een bekabelde verbinding) en schakel de energiebesparingsinstellingen uit op de clientcomputer waarmee u de migratie start. Om de migratie ongestoord te laten verlopen, opent u de ArchivesSpace- of Archon-frontend of publieke interface pas nadat de migratie is voltooid. **Als u deze instructies niet opvolgt, geeft de migratietool mogelijk geen bruikbare feedback en is het moeilijk vast te stellen hoe succesvol de migratie was.** + +Het migratieproces verloopt grotendeels automatisch. Tijdens de migratie worden fouten weergegeven en na afloop is een logboek beschikbaar. Afhankelijk van de gegevens die worden gemigreerd, kunnen verschillende fouten optreden. Mogelijk moet u de migratie opnieuw uitvoeren nadat u deze fouten hebt opgelost. In dat geval moet een systeembeheerder de MySQL-database leegmaken en moet u de migratie opnieuw uitvoeren nadat u de oorzaak van de fout hebt verholpen. + +De duur van de migratie hangt af van verschillende factoren (zoals de databasegrootte en netwerkprestaties), maar kan variëren van een half uur tot tien of twaalf uur. Waarschijnlijk wordt het grootste deel van deze tijd besteed aan het migreren van collectierecords. + +De volgende gegevenstypen van Archon worden gemigreerd. Alle relaties tussen deze gegevenstypen blijven in ArchivesSpace behouden, behalve waar hieronder vetgedrukt aangegeven. Voor elk gegevenstype staan aanbevelingen voor opschoning na de migratie tussen haakjes: + +- Bewerkbare lijsten met gecontroleerde waarden: + - Onderwerpsbronnen (controleer deze na de migratie en voeg waarden waar mogelijk samen met ArchivesSpace-standaardwaarden of functioneel dubbele waarden) + - Bronnen voor archiefvormers (controleer deze na de migratie en voeg waarden waar mogelijk samen met ArchivesSpace-standaardwaarden of functioneel dubbele waarden) + - Eenheden/typen voor omvang (voeg functioneel dubbele waarden samen) o Materiaaltypen + - Containertypen + - Bestandstypen + - Verwerkingsprioriteiten +- Collectiebeherende instellingen +- Gebruikers/aanmeldingen (gebruikers moeten hun wachtwoord opnieuw instellen) +- Onderwerpen (onderwerpen van het type persoonsnaam, organisatienaam of familienaam worden als agentrecords gemigreerd en in de rol van onderwerp aan collecties en digitale objecten gekoppeld. Controleer deze records en voeg ze waar mogelijk samen met dubbele agentnamen uit de migratie van archiefvormers.) +- Archiefvormers/namen +- Records voor nog niet ontsloten materiaal (de migratietool vult identificatiecodes in voor records waarvoor deze in Archon ontbreken. Controleer en wijzig de waarden indien nodig.) +- Digitale objecten: voor elke digitale bibliotheekvermelding in uw Archon-instantie maakt de migratietool een record met metagegevens over een digitaal object in ArchivesSpace aan. Voor elk bestand met een gekoppelde digitale bibliotheekvermelding maakt de migratietool een component van digitaal object en een bestandsinstantierecord aan. Daarnaast levert de migratietool een map met het bronbestand dat u naar Archon hebt geüpload toen u de vermelding aanmaakte. Om deze bestanden aan de digitale bestandsrecords in ArchivesSpace te koppelen, plaatst u de bestanden in één map op een webserver. + **Om de koppeling tussen de metadata van het bestand in ArchivesSpace te behouden, moet u de basis-URL opgeven van de map waarin de objecten worden geplaatst.** De migratietool voegt deze URL vóór de bestandsnaam in om voor elk geëxporteerd bestand een volledig pad naar de objectlocatie te maken, zoals in de onderstaande schermafbeelding. (In versie 2.2.2 van ArchivesSpace zijn deze bestanden met de standaardsjablonen voor digitale objecten via een koppeling beschikbaar in de publieke interface.) +- Locaties (locatierecords zijn in ArchivesSpace veel gedetailleerder dan in Archon. U hebt een locatierecord nodig voor elke unieke combinatie van locatielijst, bereik, sectie en plank in Archon. Deze records moeten worden gekoppeld aan topcontainers, die op hun beurt worden gekoppeld aan een instantie voor elke collectie waarop ze van toepassing zijn.) +- Collecties en archiefonderdelen (zie hierboven bij locaties). + Gegevens uit de volgende Archon-modules worden niet naar ArchivesSpace gemigreerd +- Boeken (boekgegevens kunnen later worden gemigreerd als er een plug-in wordt ontwikkeld die deze gegevens ondersteunt). +- AVSAP/beoordelingen + +## Migratie starten + +Zorg ervoor dat de ArchivesSpace-instantie waarnaar u migreert actief is en open vervolgens de migratietool. + +![Archon-migratietool](../../../../images/archon_migrator.jpg) + +1. Wijzig de standaardgegevens in de gebruikersinterface van de migratietool: + - ArchonSource – Geef de basis-URL van de Archon-instantie op. + - Archon User – Gebruikersnaam voor een account met volledige beheerdersrechten. + - Password – Wachtwoord voor hetzelfde account. + - Download Digital Object Files checkbox – Schakel dit selectievakje in als u gekoppelde digitale objectbestanden wilt verplaatsen en geef een webpad op naar een via het web toegankelijke map waarin u de digitale objecten na afloop van de migratie wilt plaatsen. + - Set Download Folder – Hiermee opent u een bestandsverkenner waarin u de map kunt opgeven waarnaar de digitale bestanden uit Archon moeten worden gedownload. + - Set Default Repository checkbox -- Schakel het selectievakje "Set Default Repository" in om in te stellen naar welke collectiebeherende instelling records voor nog niet ontsloten materiaal en niet-gekoppelde digitale objecten worden gekopieerd. De standaardinstelling is "Based on Linked Collection": records voor nog niet ontsloten materiaal worden dan gekopieerd naar dezelfde collectiebeherende instelling als de collectierecords waaraan ze zijn gekoppeld, of naar de eerste collectiebeherende instelling als ze niet aan een collectie zijn gekoppeld. U kunt ook een specifieke collectiebeherende instelling selecteren in de vervolgkeuzelijst. + - Host – De URL en het poortnummer van de ArchivesSpace-backendserver. + - ASpace admin – Gebruikersnaam voor het ArchivesSpace-account "admin". De standaardwaarde "admin" zou moeten werken, tenzij de ArchivesSpace-beheerder deze heeft gewijzigd. + - Password – Wachtwoord voor het ArchivesSpace-account "admin". De standaardwaarde "admin" zou moeten werken, tenzij de ArchivesSpace-beheerder deze heeft gewijzigd. + - Reset Password – Het wachtwoord waarop het wachtwoord van elke overgezette gebruikersaccount wordt ingesteld. Gebruikers moeten hun wachtwoord wijzigen wanneer ze zich voor het eerst aanmelden, tenzij LDAP wordt gebruikt voor authenticatie. + - Migration Options – Nodig om de migratietool te laten werken. Wijzig deze opties niet. + - Output Console – Weergavegedeelte om de migratie tijdens de uitvoering te volgen. + - View Error Log – Hiermee kunt u een overzicht bekijken van alle fouten die tijdens de migratie zijn opgetreden. Dit kan ook terwijl de migratie wordt uitgevoerd. +2. Klik op de knop "Copy to ArchivesSpace" om de migratie te starten. Hiermee wordt de migratie gestart naar de ArchivesSpace-instantie die is aangegeven met de Host-URL. +3. Als de migratie mislukt: controleer het weergegeven foutbericht en/of het migratielogboek. Los de gevonden problemen op, maak de doel-MySQL-database leeg en probeer het opnieuw. +4. Nadat het proces is voltooid: + - Download het migratierapport. + - Verplaats de digitale objecten naar de map die overeenkomt met de URL die u aan de migratietool hebt opgegeven. + +## De migratie beoordelen en gegevens opschonen + +1. Gebruik het migratierapport om de volledigheid van de migratie te beoordelen en te bepalen of u gegevens in de Archon-broninstantie moet herstellen en de migratie opnieuw moet uitvoeren, of gegevens in de doelinstantie van ArchivesSpace moet herstellen. Als u ervoor kiest de gegevens in Archon te herstellen, moet u alle inhoud in de ArchivesSpace-instantie verwijderen en de migratie opnieuw uitvoeren nadat u de ArchivesSpace-database hebt leeggemaakt. +2. Controleer de volgende recordtypen en ga na of het juiste aantal records is gemigreerd. Let bij deze controles op dubbele of onvolledige records, verbroken koppelingen en afgebroken gegevens. + - Lijsten met gecontroleerde waarden + - Classificaties + - Records voor nog niet ontsloten materiaal + - Collecties + - Digitale objecten + - Onderwerpen (geen personen, families en organisaties) + - Archiefvormers (in ArchivesSpace bekend als agenten) + - Locaties +3. Controleer de door u geselecteerde steekproefrecords zorgvuldig en vergelijk de gegevens in Archon met de gegevens in ArchivesSpace. +4. Als u de migratie in de ArchivesSpace-instantie accepteert, stelt u vervolgens de gebruikerswachtwoorden opnieuw in. Gebruikersrecords worden wel gemigreerd, maar de bijbehorende wachtwoorden niet. Wijs wachtwoorden opnieuw toe volgens het beleid of de conventies van uw collectiebeherende instelling. + +## Bijlage A: Migratielogboek controleren + +Het migratielogboek beschrijft eventuele onregelmatigheden tijdens een migratie en moet op een veilige locatie worden bewaard voor later gebruik. Het logboek bevat opslagfouten en waarschuwingen. Controleer de waarschuwingen na de migratie ter informatie en om te bepalen of actie nodig is. + +Voor de meeste waarschuwingen is geen vervolgactie nodig. Zo kan er worden vermeld dat een waarde is ingevuld om aan een vereiste van het gegevensmodel van ArchivesSpace te voldoen. Dit gebeurt bij alle collecties met lege identificatiecodes. Soms geven waarschuwingen aan dat een koppeling tussen twee records niet kon worden gelegd, bijvoorbeeld omdat een archiefonderdeel niet is gevonden. Dergelijke waarschuwingen moeten worden onderzocht, omdat ze erop kunnen wijzen dat gegevens verloren zijn gegaan. + +Opslagfouten vermelden dat bepaalde gegevens niet konden worden gemigreerd omdat ze niet worden ondersteund in het gegevensmodel van ArchivesSpace of om een andere reden. Controleer in dat geval het record in Archon en, als het is gemigreerd, in ArchivesSpace. Dit komt vaak door dubbele records (bijvoorbeeld als een archiefvormer ook als persoonsonderwerp voorkomt). Een opslagfout door een dubbel record is meestal geen probleem, maar moet wel worden onderzocht om er zeker van te zijn dat er geen gegevens verloren zijn gegaan. Als een opslagfout een andere oorzaak heeft, moet de migratie doorgaans opnieuw worden uitgevoerd (tenzij het betreffende record niet nodig is of eenvoudiger handmatig kan worden gemigreerd). + +Wanneer er een opslagfout of waarschuwing optreedt, vermeldt het migratielogboek doorgaans de interne Archon-ID's van het oorspronkelijke Archon-object dat wordt gemigreerd. Zo kunt u de betreffende records eenvoudiger vinden en corrigeren. diff --git a/src/content/docs/nl/migrations/migration_tools.md b/src/content/docs/nl/migrations/migration_tools.md new file mode 100644 index 0000000..d3f009a --- /dev/null +++ b/src/content/docs/nl/migrations/migration_tools.md @@ -0,0 +1,59 @@ +--- +title: Migratietools +description: Links naar hulpmiddelen voor het migreren van gegevens van en naar ArchivesSpace. +--- + +## Archivists' Toolkit + +- [Instructies voor de AT-migratietool](/migrations/migrate_from_archivists_toolkit) +- [AT-migratieplug-in](https://github.com/archivesspace/at-migration/releases) +- [Broncode van de AT-migratieplug-in](https://github.com/archivesspace/at-migration) +- [AT-migratiemapping (voor versies 2.x van de tool en ArchivesSpace](https://github.com/archivesspace/at-migration/blob/master/docs/ATMappingDocument.xlsx) + +### Oudere informatie + +- [AT-migratierichtlijnen (voor migraties met de oorspronkelijke migratietool tot en met versie 1.4.2; ondersteunt alleen migraties naar versie 1.4.2 of lager van ArchivesSpace)](http://archivesspace.org/wp-content/uploads/2016/08/ATMigrationGuidelines-REV-20140417.pdf) +- [AT-migratiemapping (voor migraties met versie 1.4.2 of lager van de tool en ArchivesSpace)](http://archivesspace.org/wp-content/uploads/2016/08/ATMappingDocument_AT-ASPACE_BETA.xls) + +## Archon + +- [Instructies voor de Archon-migratietool](/migrations/migrate_from_archon) +- [Archon-migratietool](https://github.com/archivesspace/archon-migration/releases/latest) +- [Broncode van de Archon-migratieplug-in](https://github.com/archivesspace/archon-migration/) +- [Archon-migratiemapping (voor versies 2.x van de tool en ArchivesSpace)](https://docs.google.com/spreadsheets/d/13soN5djk16QYmRoSajtyAc_nBrNldyL58ViahKFJAog/edit?usp=sharing) + +### Oudere informatie + +- [Herstructureerde Archon-migratieplug-in](https://github.com/archivesspace-deprecated/ArchonMigrator/releases) +- [Informatie over het herstructureringsproject](https://archivesspace.atlassian.net/browse/AR-1278) +- [Eerdere Archon-migratieplug-in](https://github.com/archivesspace/archon-migration/releases) +- [README-tekst van de plug-in](https://github.com/archivesspace-deprecated/ArchonMigrator/blob/master/README.md) +- [Migratierichtlijnen voor Archon](http://archivesspace.org/wp-content/uploads/2016/05/Archon_Migration_Guidelines-7_13_2017.docx) +- [Archon-migratiemapping](http://archivesspace.org/wp-content/uploads/2016/08/ArchonSchemaMappingsPublic.xlsx) + +## Mappings voor gegevensimport en -export + +- [CSV-mapping voor nog niet ontsloten materiaal](http://archivesspace.org/wp-content/uploads/2016/05/Accession-CSV-mapping-2013-08-05.xlsx) +- [CSV-sjabloon voor nog niet ontsloten materiaal](https://github.com/archivesspace/archivesspace/tree/master/templates) +- [Archiefonderdelen uit Excel of CSV laden via spreadsheet](https://github.com/archivesspace/archivesspace/tree/master/templates) +- [CSV-sjabloon voor beoordelingen](https://github.com/archivesspace/archivesspace/tree/master/templates) +- [CSV-mapping voor digitale objecten](http://archivesspace.org/wp-content/uploads/2016/08/DigitalObject-CSV-mapping-2013-02-26.xlsx) +- [CSV-sjabloon voor digitale objecten](https://github.com/archivesspace/archivesspace/tree/master/templates) +- [Exportmappings voor digitale objecten](http://archivesspace.org/wp-content/uploads/2016/08/ASpace-Dig-Object-Exports.xlsx) +- [EAD-import-/exportmapping](https://archivesspace.org/wp-content/uploads/2021/06/EAD-Import-Export-Mapping-20171030.xlsx) +- [CSV-sjabloon voor locatierecords](https://github.com/archivesspace/archivesspace/tree/master/templates) +- (recent beoordeeld) [MARCXML-importmapping](https://archivesspace.org/wp-content/uploads/2021/06/AS-MARC-import-mappings-2021-06-15.xlsx) +- [MARCXML-exportmapping](https://archivesspace.org/wp-content/uploads/2021/06/MARCXML-Export-Mapping-20130715.xlsx) +- [MARCXML-import-/exportmapping voor agenten](https://archivesspace.org/wp-content/uploads/2021/05/Agents-ASpace-to-MARCXMLMay2021.xlsx) +- [EAC-CPF-import-/exportmapping](https://archivesspace.org/wp-content/uploads/2021/05/Agents-ASpace-to-EAC-CPFMay2021.xlsx) + +(recent beoordeeld) MARCXML-importmapping +MARCXML-exportmapping + +### Mappings die alleen via OAI-PMH beschikbaar zijn + +De meeste OAI-PMH-responsen van ArchivesSpace zijn gebaseerd op de bovenstaande exportmappings, maar enkele zijn alleen beschikbaar via OAI-PMH. + +[MODS voor collecties en archiefonderdelen](https://archivesspace.org/wp-content/uploads/2019/06/MODS-OAI-Export-Mapping-20190610.xlsx) +[Dublin Core voor collecties en archiefonderdelen](https://archivesspace.org/wp-content/uploads/2019/06/DC-OAI-Export-Mapping-20190610.xlsx) +[DCMI-metadatatermen voor collecties en archiefonderdelen](https://archivesspace.org/wp-content/uploads/2019/06/DCTerms-OAI-Export-Mapping-20190611.xlsx) diff --git a/src/content/docs/nl/provisioning/clustering.md b/src/content/docs/nl/provisioning/clustering.md new file mode 100644 index 0000000..bd03a0d --- /dev/null +++ b/src/content/docs/nl/provisioning/clustering.md @@ -0,0 +1,348 @@ +--- +title: Loadbalancing en meerdere tenants +description: Richtlijnen voor het uitvoeren van ArchivesSpace in een clusteromgeving voor loadbalancing en voor ondersteuning van meerdere tenants. +--- + +Dit document beschrijft twee aspecten van het uitvoeren van ArchivesSpace in +een clusteromgeving: loadbalancing en ondersteuning van meerdere tenants +(geïsoleerde installaties van het systeem in een gedeelde implementatieomgeving). + +De configuratie die in dit document wordt beschreven, is een mogelijke aanpak, +maar is niet bedoeld als voorschrift: de applicatielaag van ArchivesSpace is +stateless, dus elk mechanisme dat u voor loadbalancing tussen webapplicaties +kiest, zou net zo goed moeten werken als het mechanisme dat hier wordt +beschreven. + +Tenzij anders vermeld, gaan we ervan uit dat u root-toegang hebt op uw machines +en dat alle opdrachten als root moeten worden uitgevoerd (of met sudo). + +## Architectuuroverzicht + +Dit document gaat uit van een architectuur met de volgende componenten: + +- Een loadbalancermachine waarop de Nginx-webserver draait +- Twee applicatieservers, waarop elk een volledige ArchivesSpace-applicatiestack draait +- Een MySQL-server +- Een gedeeld NFS-volume dat op elke machine onder `/aspace` is gekoppeld + +## Overzicht van bestanden + +De map `files` in deze repository (in dezelfde map als deze `README.md`) +bevat de bestanden die samen de inhoud van de map `/aspace` vormen, die door +alle servers wordt gedeeld. De map heeft de volgende indeling: + + /aspace + ├── archivesspace + │   ├── config + │   │   ├── config.rb + │   │   └── tenant.rb + │   ├── software + │   └── tenants + │   └── \_template + │   └── archivesspace + │   ├── config + │   │   ├── config.rb + │   │   └── instance_hostname.rb.example + │   └── init_tenant.sh + └── nginx + └── conf + ├── common + │   └── server.conf + └── tenants + └── \_template.conf.example + +De belangrijkste onderdelen: + +- `/aspace/archivesspace/config/config.rb` -- Een globaal configuratiebestand voor alle ArchivesSpace-instanties. Alle configuratieopties die u aan dit bestand toevoegt, worden toegepast op alle tenants op alle machines. +- `/aspace/archivesspace/software/` -- In deze map staan de hoofdkopieën van de distributie `archivesspace.zip`. Elke tenant verwijst naar een van de versies van de ArchivesSpace-software in deze map. +- `/aspace/archivesspace/tenants/` -- Elke tenant krijgt hier een submap op basis van de meegeleverde map `_template`. Hierin staan de configuratiebestanden voor elke tenant. +- `/aspace/archivesspace/tenants/[tenant name]/config/config.rb` -- Het globale configuratiebestand voor [tenant name]. Dit bevat tenantspecifieke opties die voor alle ArchivesSpace-instanties van de tenant moeten gelden (zoals de databaseverbindingsinstellingen). +- `/aspace/archivesspace/tenants/[tenant name]/config/instance_[hostname].rb` -- Het configuratiebestand voor de ArchivesSpace-instantie van een tenant die op een bepaalde machine draait. Hiermee kunnen configuratieopties per machine worden ingesteld (bijvoorbeeld verschillende poorten voor verschillende applicatieservers). +- `/aspace/nginx/conf/common/server.conf` -- Globale Nginx-configuratie-instellingen (van toepassing op alle tenants) +- `/aspace/nginx/conf/tenants/[tenant name].conf` -- Een tenantspecifiek Nginx-configuratiebestand. Dit bestand wordt gebruikt om de URL's van de ArchivesSpace-instanties van elke tenant in te stellen. + +## Aan de slag + +We gaan ervan uit dat u het volgende al klaar hebt staan: + +- Drie pas geïnstalleerde machines met RedHat (of CentOS) Linux (we noemen ze `loadbalancer`, `apps1` en `apps2`). +- Een MySQL-server. +- Een NFS-volume dat op elke machine als `/aspace` is gekoppeld. Alle machines moeten volledige lees- en schrijftoegang tot deze map hebben. +- Een map onder `/aspace.local` voor instantiespecifieke bestanden (zoals logbestanden en Solr-indexen). Idealiter is dit een map op een lokale schijf. +- Java 1.6 (of hoger) geïnstalleerd op elke machine. + +### De map /aspace/ vullen + +Kopieer eerst de mapstructuur uit `files/` naar uw `/aspace`-volume. Deze +bevat alle configuratiebestanden die door de servers worden gedeeld: + +```shell +mkdir /var/tmp/aspace/ +cd /var/tmp/aspace/ +unzip -x /path/to/archivesspace.zip +cp -av archivesspace/clustering/files/* /aspace/ +``` + +U kunt dit doen op elke machine die toegang heeft tot het gedeelde volume +`/aspace/`. + +### Het initialisatiescript voor het cluster installeren + +Op uw applicatieservers (`apps1` en `apps2`) moet u het meegeleverde +initialisatiescript installeren: + +```shell +cp -a /aspace/aspace-cluster.init /etc/init.d/aspace-cluster +chkconfig --add aspace-cluster +``` + +Hiermee worden bij het opstarten van het systeem alle geconfigureerde +instanties gestart. Het script kan ook worden gebruikt om afzonderlijke +instanties te starten en te stoppen. + +### Nginx installeren en configureren + +U moet Nginx installeren op uw `loadbalancer`-machine. Dat kan volgens de +instructies op http://nginx.org/en/download.html. U kunt hiervoor de +voorgebouwde pakketten voor uw platform gebruiken. Op het moment van schrijven +zijn de stappen voor CentOS als volgt: + +```shell +wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm +rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm +yum install nginx +``` + +Nginx plaatst de configuratiebestanden onder `/etc/nginx/`. Voor nu hoeven we +alleen Nginx zo in te stellen dat het de configuratiebestanden van onze tenants +laadt. Bewerk hiervoor `/etc/nginx/conf.d/default.conf` en voeg de volgende +regel toe: + +``` +include /aspace/nginx/conf/tenants/\*.conf; +``` + +_Opmerking:_ de locatie van het hoofdconfiguratiebestand van Nginx kan per +systeem verschillen. Een andere waarschijnlijke locatie is +`/etc/nginx/nginx.conf`. + +### De ArchivesSpace-distributie downloaden + +In plaats van elke tenant een eigen kopie van de ArchivesSpace-software te +laten beheren, plaatsen we een gedeelde kopie onder +`/aspace/archivesspace/software/` en laten we elke tenantinstantie daarnaar +verwijzen. Voer hiervoor de volgende opdrachten uit op een van de servers: + +```shell +cd /aspace/archivesspace/software/ +unzip -x /path/to/downloaded/archivesspace-x.y.z.zip +mv archivesspace archivesspace-x.y.z +ln -s archivesspace-x.y.z stable +``` + +De distributie wordt uitgepakt in een map met het versienummer. Vervolgens +geven we die versie de symbolische naam "stable". Zo kunnen we eenvoudig naar +specifieke versies van de software verwijzen. We gebruiken dit later bij het +instellen van de tenant. + +We gebruiken MySQL. Daarom moet de MySQL-connectorbibliotheek beschikbaar +worden gemaakt. Plaats deze hiervoor in de map `lib/` van het +ArchivesSpace-pakket: + +```shell +cd /aspace/archivesspace/software/stable/lib +wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.24/mysql-connector-java-5.1.24.jar +``` + +## Een nieuwe tenant definiëren + +Nu de servers zijn ingesteld, kunnen we onze eerste tenant definiëren. Zoals +hierboven in _Overzicht van bestanden_ is aangegeven, heeft elke tenant een +eigen map onder `/aspace/archivesspace/tenants/` met alle configuratiebestanden. +Bij het definiëren van onze nieuwe tenant zullen we: + +- Een Unix-account voor de tenant aanmaken +- Een database voor de tenant aanmaken +- Een nieuwe set ArchivesSpace-configuratiebestanden voor de tenant aanmaken +- De database instellen + +De nieuw gedefinieerde tenant heeft aanvankelijk nog geen instanties van +ArchivesSpace; die stellen we later in. + +Voor de rest van dit proces hebt u een aantal gegevens nodig. U moet met name +het volgende weten: + +- De identificatie die u voor de tenant wilt gebruiken. In dit voorbeeld gebruiken we `exampletenant`. +- Welke poortnummers u gebruikt voor de backend van de applicatie, de Solr-instantie, de medewerkersinterface en de publieke gebruikersinterface (PUI). Deze poorten moeten vrij zijn op uw applicatieservers. +- Als elke tenant onder een afzonderlijk Unix-account draait, de UID en GID die u daarvoor gebruikt (deze moeten op elke server beschikbaar zijn). +- De openbare URL's van de nieuwe tenant. We gebruiken `staff.example.com` voor de medewerkersinterface en `public.example.com` voor de publieke gebruikersinterface. + +### Een Unix-account aanmaken + +Hoewel dit niet strikt noodzakelijk is, is het voor de beveiliging en het +eenvoudiger controleren van het systeem een goed idee om elke tenantinstantie +onder een eigen Unix-account te laten draaien. + +We noemen onze nieuwe tenant `exampletenant`. Maak nu een gebruiker en groep +voor deze tenant aan. Voer deze opdrachten uit op _beide_ applicatieservers +(`apps1` en `apps2`): + +```shell +groupadd --gid 2000 exampletenant +useradd --uid 2000 --gid 2000 exampletenant +``` + +We geven de UID en GID expliciet op, zodat ze op beide machines overeenkomen. + +### De database aanmaken + +ArchivesSpace gaat ervan uit dat elke tenant een eigen MySQL-database heeft. +U kunt deze aanmaken vanuit de MySQL-shell: + +```sql +create database exampletenant default character set utf8; +grant all on exampletenant.* to 'example'@'%' identified by 'example123'; +``` + +In dit voorbeeld hebben we een MySQL-database met de naam `exampletenant` en +geven we de gebruiker `example` volledige toegang met het wachtwoord +`example123`. Als onze databaseserver `db.example.com` is, hoort daar de +database-URL bij: + +``` +jdbc:mysql://db.example.com:3306/exampletenant?user=example&password=example123&useUnicode=true&characterEncoding=UTF-8 +``` + +We gebruiken deze URL in de volgende sectie. + +### De tenant configureren + +Elke tenant heeft een eigen set bestanden in de map +`/aspace/archivesspace/tenants/`. We definiëren onze nieuwe tenant (met de naam +`exampletenant`) door de configuratiesjabloon te kopiëren en het script +`init_tenant.sh` uit te voeren om de configuratie in te stellen. Dit kan op +`apps1` of `apps2`; het hoeft maar één keer te gebeuren: + +```shell +cd /aspace/archivesspace/tenants +cp -a \_template exampletenant +``` + +We hebben de tenant `exampletenant` genoemd, zodat de naam overeenkomt met het +Unix-account waaronder deze draait. Later gebruikt het opstartscript dit om +elke instantie als de juiste gebruiker uit te voeren. + +Voor nu bewerken we alleen het configuratiebestand voor deze tenant, in +`exampletenant/archivesspace/config/config.rb`. Wanneer u dit bestand opent, +ziet u twee tijdelijke aanduidingen die u moet invullen: één voor de +database-URL, in ons geval: + +``` +jdbc:mysql://db.example.com:3306/exampletenant?user=example&password=example123&useUnicode=true&characterEncoding=UTF-8 +``` + +en één voor de geheimen van de zoekfunctie, de medewerkersinterface en de +publieke gebruikersinterface van deze tenant. Deze moeten willekeurige, +moeilijk te raden wachtwoorden zijn. + +## Tenantinstanties toevoegen + +Om de instanties van onze tenant toe te voegen, hoeven we ze alleen op elk van +onze servers te initialiseren. Voer op zowel `apps1` als `apps2` het volgende +uit: + +```shell +cd /aspace/archivesspace/tenants/exampletenant/archivesspace +./init_tenant.sh stable +``` + +Als u de map nu weergeeft, ziet u dat het script `init_tenant.sh` een aantal +symbolische koppelingen heeft aangemaakt. De meeste verwijzen naar de eerder +uitgepakte versie `stable` van de ArchivesSpace-software. Sommige verwijzen +naar de mappen `data` en `logs` onder `/aspace.local`. + +Elke server heeft een eigen configuratiebestand dat aangeeft op welke poorten +de ArchivesSpace-applicatie moet luisteren. Maak hiervoor twee kopieën van het +voorbeeldconfiguratiebestand. Voer de volgende opdracht eerst op `apps1` en +vervolgens op `apps2` uit: + +```shell +cd /aspace/archivesspace/tenants/exampletenant/archivesspace +cp config/instance_hostname.rb.example config/instance_`hostname`.rb +``` + +Bewerk vervolgens elk bestand om de URL's in te stellen die de instantie moet +gebruiken. Dit is ons bestand `config/instance_apps1.example.com.rb`: + +```ruby +{ + :backend_url => "http://apps1.example.com:8089", + :frontend_url => "http://apps1.example.com:8080", + :solr_url => "http://apps1.example.com:8090", + :indexer_url => "http://apps1.example.com:8091", + :public_url => "http://apps1.example.com:8081", +} +``` + +De bestandsnaam is hierbij belangrijk: deze moet als volgt zijn: + +``` +instance_[server hostname].rb +``` + +Deze URL's bepalen op welke poorten de applicatie luistert wanneer deze wordt +gestart. Het indexeersysteem van ArchivesSpace gebruikt ze ook om updates in +het cluster bij te houden. + +### Opstarten + +Eenmalig moeten we de database van deze tenant vullen met de standaardset +tabellen. U kunt dit doen door het script `setup-database.sh` uit te voeren op +`apps1` of `apps2`: + +```shell +cd /aspace/archivesspace/tenants/exampletenant/archivesspace +scripts/setup-database.sh +``` + +Nu de twee instanties zijn geconfigureerd, kunt u het initialisatiescript +gebruiken om ze op elke server te starten: + +```shell +/etc/init.d/aspace-cluster start-tenant exampletenant +``` + +U kunt de logbestanden van elke instantie volgen in +`/aspace.local/tenants/exampletenant/logs/`. Nadat de instanties zijn gestart, +moet u vanuit uw webbrowser verbinding kunnen maken met elke instantie via de +geconfigureerde URL's. + +## De load balancer configureren + +Als laatste configureren we Nginx om verzoeken voor de medewerkersinterface en +de publieke gebruikersinterface te accepteren en door te sturen naar de +geschikte applicatie-instantie. Maak op de machine `loadbalancer` een nieuw +configuratiebestand voor onze tenant: + +```shell +cd /aspace/nginx/conf/tenants +cp -a \_template.conf.example exampletenant.conf +``` + +Open nu `/aspace/nginx/conf/tenants/exampletenant.conf` in een editor. U moet: + +- `<tenantname>` overal vervangen door `exampletenant`. +- De URL's van `server` aanpassen aan de hostnamen en poorten die u voor elke instantie hebt geconfigureerd. +- De hostnamen van de tenant invullen bij elke vermelding van `server_name`. In ons geval zijn dit `public.example.com` voor de publieke gebruikersinterface en `staff.example.com` voor de medewerkersinterface. + +Nadat u de configuratie hebt opgeslagen, kunt u deze testen met: + + /usr/sbin/nginx -t + +Als Nginx meldt dat alles in orde is, laadt u de configuratie opnieuw: + + /usr/sbin/nginx -s reload + +Ga ten slotte naar `http://public.example.com/` om te controleren of Nginx nu +verzoeken accepteert en doorstuurt naar uw applicatieservers. Daarmee zijn we +klaar! diff --git a/src/content/docs/nl/provisioning/domains.md b/src/content/docs/nl/provisioning/domains.md new file mode 100644 index 0000000..a161e3e --- /dev/null +++ b/src/content/docs/nl/provisioning/domains.md @@ -0,0 +1,84 @@ +--- +title: Beschikbaar stellen via subdomeinen +description: Hoe u ArchivesSpace en uw webserver configureert om de applicatie via subdomeinen beschikbaar te stellen. +--- + +In dit document wordt beschreven hoe u ArchivesSpace en uw webserver configureert om de applicatie via subdomeinen beschikbaar te stellen (bijv. `http://staff.myarchive.org/` en `http://public.myarchive.org/`), wat de aanbevolen werkwijze is. Er is afzonderlijke documentatie beschikbaar als u [ArchivesSpace onder een prefix wilt aanbieden](/provisioning/prefix) (bijv. `http://aspace.myarchive.org/staff` en +`http://aspace.myarchive.org/public`). + +1. [Uw firewall configureren](#Step-1%3A-Configuring-Your-Firewall) +2. [Uw webserver configureren](#Step-2%3A-Configuring-Your-Web-Server) + - [Apache](#Apache) + - [Nginx](#Nginx) +3. [ArchivesSpace configureren](#Step-3%3A-Configuring-ArchivesSpace) + +## Stap 1: Uw firewall configureren + +Omdat subdomeinen ervoor zorgen dat gebruikers de applicatie niet rechtstreeks via poorten 8080 en 8081 hoeven te benaderen, moeten deze poorten alleen toegankelijk zijn vanaf localhost. Op een Linux-server kan dit met iptables: + +```shell +iptables -A INPUT -p tcp -s localhost --dport 8080 -j ACCEPT +iptables -A INPUT -p tcp --dport 8080 -j DROP +iptables -A INPUT -p tcp -s localhost --dport 8081 -j ACCEPT +iptables -A INPUT -p tcp --dport 8081 -j DROP +``` + +## Stap 2: Uw webserver configureren + +### Apache + +De [module mod_proxy](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html) is nodig om Apache het openbare webverkeer te laten doorsturen naar de poorten van ArchivesSpace, zoals opgegeven in uw `config.rb`-bestand (standaard poort 8080 en 8081). + +U kunt dit als volgt instellen als reverse proxy in de Apache-configuratie: + +```apache +<VirtualHost *:80> +ServerName public.myarchive.org +ProxyPass / http://localhost:8081/ +ProxyPassReverse / http://localhost:8081/ +</VirtualHost> + +<VirtualHost *:80> +ServerName staff.myarchive.org +ProxyPass / http://localhost:8080/ +ProxyPassReverse / http://localhost:8080/ +</VirtualHost> +``` + +ProxyPass leidt _inkomend_ verkeer op de openbare URL (public.myarchive.org) door naar poort 8081 van uw server, waar de publieke gebruikersinterface van ArchivesSpace beschikbaar is. ProxyPassReverse onderschept _uitgaand_ verkeer en herschrijft de header zodat die overeenkomt met de URL die de browser verwacht (public.myarchive.org). + +### nginx + +Als u nginx als reverse proxy gebruikt, hebt u een configuratiebestand nodig zoals hieronder: + +```nginx +server { +listen 80; +listen [::]:80; +server_name staff.myarchive.org; +location / { + proxy_pass http://localhost:8080/; + } +} + server { +listen 80; +listen [::]:80; +server_name public.myarchive.org; +location / { + proxy_pass http://localhost:8081/; + } +} +``` + +## Stap 3: ArchivesSpace configureren + +De enige configuratie die u in ArchivesSpace hoeft uit te voeren, is uw domeinnamen toe te voegen aan de volgende regels in config.rb: + +```ruby +AppConfig[:frontend_proxy_url] = 'http://staff.myarchive.org' +AppConfig[:public_proxy_url] = 'http://public.myarchive.org' +``` + +Met deze configuratie kunnen bewerkingslinks voor medewerkers op de openbare website worden weergegeven aan gebruikers die zijn aangemeld bij de medewerkersinterface. + +Wijzig `AppConfig[:public_url]` of `AppConfig[:frontend_url]` **niet**; deze moeten hun poortnummers behouden om de applicatie te laten werken. diff --git a/src/content/docs/nl/provisioning/https.md b/src/content/docs/nl/provisioning/https.md new file mode 100644 index 0000000..e8df1a7 --- /dev/null +++ b/src/content/docs/nl/provisioning/https.md @@ -0,0 +1,157 @@ +--- +title: Via HTTPS aanbieden +description: ArchivesSpace zo installeren dat alle verzoeken van eindgebruikers via HTTPS worden afgehandeld. +--- + +In dit document wordt de aanpak beschreven voor wie ArchivesSpace zo wil installeren dat alle verzoeken van eindgebruikers (oftewel URL's) via HTTPS in plaats van HTTP worden afgehandeld. Voor deze documentatie zijn de URL's voor de medewerkersinterface en de publieke gebruikersinterface: + +- `https://staff.myarchive.org` - medewerkersinterface +- `https://public.myarchive.org` - publieke gebruikersinterface + +De configuratie in dit document is een mogelijke aanpak. Om het eenvoudig te houden, wordt uitgegaan van het volgende: + +- ArchivesSpace draait op één Linux-server +- De server draait Apache of Nginx +- U hebt een SSL-certificaat en -sleutel verkregen van een certificaatautoriteit +- U hebt ervoor gezorgd dat de benodigde firewallpoorten zijn geopend (80 en 443). + +1. [De webserver configureren](<#Step-1%3A-Configure-Web-Server-(Apache-or-Nginx)>) + - [Apache](#Apache) + - [SSL instellen](#Setting-up-SSL) + - [Omleidingen instellen](#Setting-up-Redirects) + - [Nginx](#Nginx) +2. [ArchivesSpace configureren](#Step-2%3A-Configure-ArchivesSpace) + +## Stap 1: webserver configureren (Apache of Nginx) + +### Apache + +Informatie over het configureren van Apache voor SSL vindt u op http://httpd.apache.org/docs/current/ssl/ssl_howto.html. Lees die documentatie voordat u probeert SSL te configureren. + +#### SSL instellen + +Gebruik de richtlijnen `NameVirtualHost` en `VirtualHost` om verzoeken door te sturen naar de daadwerkelijke URL's van de applicatie. Hiervoor is de Apache-module `mod_proxy` nodig. + +```apache +NameVirtualHost *:443 + +<VirtualHost *:443> + ServerName staff.myarchive.org + SSLEngine On + SSLCertificateFile "/path/to/your/cert.crt" + SSLCertificateKeyFile "/path/to/your/key.key" + RequestHeader set X-Forwarded-Proto "https" + ProxyPreserveHost On + ProxyPass / http://localhost:8080/ + ProxyPassReverse / http://localhost:8080/ +</VirtualHost> + +<VirtualHost *:443> + ServerName public.myarchive.org + SSLEngine On + SSLCertificateFile "/path/to/your/cert.crt" + SSLCertificateKeyFile "/path/to/your/key.key" + RequestHeader set X-Forwarded-Proto "https" + ProxyPreserveHost On + ProxyPass / http://localhost:8081/ + ProxyPassReverse / http://localhost:8081/ +</VirtualHost> +``` + +U kunt desgewenst het kenmerk `Set-Cookie: Secure attribute` instellen door `Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure` toe te voegen. Wanneer een cookie het kenmerk Secure heeft, neemt de useragent de cookie alleen op in een HTTP-verzoek als het verzoek via een beveiligd kanaal wordt verzonden. + +Gebruikers zien mogelijk een waarschuwing in de browserconsole dat `Cookie “archivesspace_session” does not have a proper “SameSite” attribute value. Soon, cookies without the “SameSite” attribute or with an invalid value will be treated as “Lax”. This means that the cookie will no longer be sent in third-party contexts` (voorbeeld uit Firefox 104), of een vergelijkbare waarschuwing. Sommige browsers, zoals Chrome versie 80 en hoger, dwingen dit al af. Standaardinstallaties van ArchivesSpace zouden hier geen last van moeten hebben. Als u echter problemen ondervindt met integraties en/of aanpassingen van uw installatie, kan de volgende richtlijn nodig zijn: `Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure`. Afhankelijk van uw functionele en/of beveiligingsvereisten kan `SameSite=Lax` (de standaardwaarde) of zelfs `SameSite=Strict` geschikter zijn. Raadpleeg https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite of andere bronnen voor meer informatie. + +#### Omleidingen instellen + +Wanneer een site via HTTPS wordt aangeboden, is het verstandig een omleiding in te stellen zodat verouderde HTTP-verzoeken naar de juiste URL worden doorgestuurd. Dit kan in Apache als volgt: + +```apache +<VirtualHost *:80> +ServerName staff.myarchive.org +RewriteEngine On +RewriteCond %{HTTPS} off +RewriteRule (.*) https://staff.myarchive.org$1 [R,L] +</VirtualHost> + +<VirtualHost *:80> +ServerName public.myarchive.org +RewriteEngine On +RewriteCond %{HTTPS} off +RewriteRule (.*) https://public.myarchive.org$1 [R,L] +</VirtualHost> +``` + +### Nginx + +Informatie over het configureren van nginx voor SSL vindt u op http://nginx.org/en/docs/http/configuring_https_servers.html. Lees die documentatie voordat u probeert SSL te configureren. + +```nginx + +server { + listen 80; + listen [::]:80; + server_name staff.myarchive.org; + return 301 https://staff.myarchive.org; +} + + +server { + listen 443 ssl; + server_name staff.myarchive.org; + charset utf-8; + } + + ssl_certificate /path/to/your/fullchain.pem; + ssl_certificate_key /path/to/your/key.pem + + location / { + allow 0.0.0.0/0; + deny all; + proxy_pass http://localhost:8081; + } +} + +server { + listen 80; + listen [::]:80; + server_name public.myarchive.org; + return 301 https://public.myarchive.org; +} + + +server { + listen 443 ssl; + server_name staff.myarchive.org; + charset utf-8; + } + + ssl_certificate /path/to/your/fullchain.pem; + ssl_certificate_key /path/to/your/key.pem + + location / { + allow 0.0.0.0/0; + deny all; + proxy_pass http://localhost:8080; + } +} + +``` + +## Stap 2: ArchivesSpace configureren + +De volgende regels moeten in het bestand config.rb worden aangepast: + +```ruby +AppConfig[:frontend_proxy_url] = "https://staff.myarchive.org" +AppConfig[:public_proxy_url] = "https://public.myarchive.org" +``` + +Deze regels hoeven niet te worden aangepast en moeten hun standaardwaarden behouden. Bijvoorbeeld: + +```ruby +AppConfig[:frontend_url] = "http://localhost:8080" +AppConfig[:public_url] = "http://localhost:8081" +AppConfig[:frontend_proxy_prefix] = proc { "#{URI(AppConfig[:frontend_proxy_url]).path}/".gsub(%r{/+$}, "/") } +AppConfig[:public_proxy_prefix] = proc { "#{URI(AppConfig[:public_proxy_url]).path}/".gsub(%r{/+$}, "/") } +``` diff --git a/src/content/docs/nl/provisioning/index.md b/src/content/docs/nl/provisioning/index.md new file mode 100644 index 0000000..719bb5e --- /dev/null +++ b/src/content/docs/nl/provisioning/index.md @@ -0,0 +1,15 @@ +--- +title: Inrichting en serverconfiguratie +description: De indexpagina van het onderdeel over de inrichting in de technische documentatie van ArchivesSpace. +--- + +- [Loadbalancing en meerdere tenants](./clustering.html) +- [ArchivesSpace beschikbaar stellen via subdomeinen](./domains.html) +- [Gebruikersgerichte toepassingen van ArchivesSpace via HTTPS aanbieden](./https.html) +- [Sjabloon voor een JMeter-testgroep](./jmeter.html) +- [ArchivesSpace uitvoeren met MySQL](./mysql.html) +- [Applicatiemonitoring met New Relic](./newrelic.html) +- [ArchivesSpace uitvoeren onder een prefix](./prefix.html) +- [robots.txt](./robots.html) +- [ArchivesSpace uitvoeren met externe Solr](./solr.html) +- [ArchivesSpace afstellen](./tuning.html) diff --git a/src/content/docs/nl/provisioning/jmeter.md b/src/content/docs/nl/provisioning/jmeter.md new file mode 100644 index 0000000..8f477bd --- /dev/null +++ b/src/content/docs/nl/provisioning/jmeter.md @@ -0,0 +1,13 @@ +--- +title: Sjabloon voor een JMeter-testgroep +description: Instructies voor het maken van een JMeter-testgroep. +--- + +## Een testgroep maken: + +Laad het bestand 'example_test_plan.jmx' in JMeter en zorg ervoor dat aan de volgende voorwaarden wordt voldaan om het voorbeeld correct uit te voeren: + +- De backend draait op localhost-poort 4567 +- Er is ten minste één collectiebeherende instelling, met als URL /repositories/2 + +Het voorbeeld meldt zich aan bij de backend, slaat de sessiesleutel op als JMeter-variabele en voert twee eenvoudige verzoeken uit, waarvan er één een sessiesleutel vereist. diff --git a/src/content/docs/nl/provisioning/mysql.md b/src/content/docs/nl/provisioning/mysql.md new file mode 100644 index 0000000..41596d5 --- /dev/null +++ b/src/content/docs/nl/provisioning/mysql.md @@ -0,0 +1,89 @@ +--- +title: MySQL gebruiken +description: Instructies voor het instellen van MySQL met ArchivesSpace. +--- + +Standaard draait de ArchivesSpace-distributie op een ingebouwde +database, maar deze is alleen geschikt voor demonstratiedoeleinden. +Wanneer u ArchivesSpace met echte gebruikers en gegevens gaat gebruiken, +moet u overstappen op MySQL. MySQL biedt aanzienlijk betere prestaties +wanneer meerdere personen het systeem gebruiken, en zorgt ervoor dat uw +gegevens veilig blijven. + +ArchivesSpace kan momenteel worden uitgevoerd met MySQL-versie 5.x en 8.x. + +## De MySQL-connector downloaden + +ArchivesSpace vereist de +[MySQL Connector for Java](http://dev.mysql.com/downloads/connector/j/), +die vanwege de licentieovereenkomst afzonderlijk moet worden gedownload. +Download de Connector en plaats deze op een locatie waar ArchivesSpace deze +op zijn classpath kan vinden: + +```shell +$ cd lib +$ curl -Oq https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/9.1.0/mysql-connector-j-9.1.0.jar +``` + +Houd er rekening mee dat de versie van de MySQL-connector anders kan zijn +tegen de tijd dat u dit leest. + +## Uw MySQL-database instellen + +Maak vervolgens een lege database in MySQL en verleen toegang aan een +specifieke ArchivesSpace-gebruiker. In het volgende voorbeeld worden de +gebruikersnaam `as` en het wachtwoord `as123` gebruikt. + +**OPMERKING: BIJ HET AANMAKEN VAN DE DATABASE MOET U DE STANDAARDTEKENCODERING +VAN DE DATABASE INSTELLEN OP `utf8`.** Dit is vooral belangrijk +als u een MySQL-client gebruikt om de database aan te maken (bijv. Navicat, MySQL +Workbench, phpMyAdmin enz.). + +<!-- This is also true of MySQL 8 in general... --> + +**OPMERKING: Als u AWS RDS MySQL-databases gebruikt, is binaire logboekregistratie niet standaard ingeschakeld en mislukken updates.** Om binaire logboekregistratie in te schakelen, moet u een aangepaste db-parametergroep voor de database aanmaken en `log_bin_trust_function_creators = 1` instellen. Zie [Werken met DB-parametergroepen](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html) voor informatie over RDS-parametergroepen. U kunt in een MySQL-sessie ook `SET GLOBAL log_bin_trust_function_creators = 1;` proberen. + +```shell +$ mysql -uroot -p + +mysql> create database archivesspace default character set utf8mb4; +Query OK, 1 row affected (0.08 sec) +``` + +Bij gebruik van MySQL 5.7 of ouder: + +```sql +mysql> grant all on archivesspace.* to 'as'@'localhost' identified by 'as123'; +Query OK, 0 rows affected (0.21 sec) +``` + +Bij gebruik van MySQL 8 of hoger: + +```sql +mysql> create user 'as'@'localhost' identified by 'as123'; +Query OK, 0 rows affected (0.08 sec) + +mysql> grant all privileges on archivesspace.* to 'as'@'localhost'; +Query OK, 0 rows affected (0.21 sec) +``` + +Pas vervolgens uw bestand `config/config.rb` aan zodat het naar uw MySQL-database +verwijst. Zorg er bij het aanpassen van uw configuratiebestand **voor dat u +opgeeft dat de tekencodering van de database `UTF-8` moet zijn**, zoals +hieronder wordt getoond: + +```ruby +AppConfig[:db_url] = "jdbc:mysql://localhost:3306/archivesspace?user=as&password=as123&useUnicode=true&characterEncoding=UTF-8" +``` + +Er is een databasescript dat alle tabellen aanmaakt die ArchivesSpace nodig +heeft. Voer dit uit met: + +```shell +scripts/setup-database.sh # or setup-database.bat under Windows +``` + +U kunt nu de instructies in het gedeelte ‘Aan de slag’ volgen om uw +ArchivesSpace-toepassing te starten. + +\*\*OPMERKING: Voor MySQL 8. MySQL 8 gebruikt standaard een nieuwe methode (caching_sha2_password) als authenticatieplug-in in plaats van de oude mysql_native_password die MySQL 5.7 en ouder gebruikten. Mogelijk moet u een MySQL 8-server starten met de optie `--default-authentication-plugin=mysql_native_password`. U kunt het authenticatiemechanisme mogelijk ook per gebruiker wijzigen door u aan te melden bij mysql en `ALTER USER 'as'@'localhost' IDENTIFIED WITH mysql_native_password BY 'as123';` uit te voeren. Zorg er ook voor dat u de nieuwste [MySQL Connector for Java](http://dev.mysql.com/downloads/connector/j/) van MySQL in uw /lib/ directory hebt staan voor ArchivesSpace. diff --git a/src/content/docs/nl/provisioning/newrelic.md b/src/content/docs/nl/provisioning/newrelic.md new file mode 100644 index 0000000..665d090 --- /dev/null +++ b/src/content/docs/nl/provisioning/newrelic.md @@ -0,0 +1,40 @@ +--- +title: Applicaties bewaken met New Relic +description: Instructies voor het instellen van New Relic voor het bewaken van ArchivesSpace-applicaties. +--- + +[New Relic](http://newrelic.com/) is onder meer een hulpmiddel voor het bewaken van applicatieprestaties. + +**Voor gebruik met ArchivesSpace moet u:** + +- Een account aanmaken bij New Relic (er is een gratis versie en er zijn betaalde abonnementen) +- config.rb aanpassen om: + - de `newrelic`-plugin te activeren + - de New Relic-licentiesleutel toe te voegen + - een applicatienaam toe te voegen waarmee u de ArchivesSpace-instantie in het New Relic-dashboard kunt herkennen + +Bijvoorbeeld, in config.rb: + +```ruby +## You may have other plugins +AppConfig[:plugins] = ['local', 'newrelic'] + +AppConfig[:newrelic_key] = "enteryourkeyhere" +AppConfig[:newrelic_app_name] = "ArchivesSpace" +``` + +- Installeer de New Relic-agentbibliotheek door de plugin te initialiseren: + +```shell +## For Linux/OSX +$ scripts/initialize-plugin.sh newrelic + +## For Windows +% scripts\initialize-plugin.bat newrelic +``` + +- Start of herstart ArchivesSpace zodat de configuratie wordt toegepast. + +Binnen enkele minuten zou de applicatie zichtbaar moeten zijn in het New Relic-dashboard en zouden er gegevens moeten worden verzameld. + +--- diff --git a/src/content/docs/nl/provisioning/prefix.md b/src/content/docs/nl/provisioning/prefix.md new file mode 100644 index 0000000..9324d98 --- /dev/null +++ b/src/content/docs/nl/provisioning/prefix.md @@ -0,0 +1,64 @@ +--- +title: Proxy-prefix +description: Instructies voor het aanbieden van elke voor gebruikers zichtbare ArchivesSpace-toepassing onder een prefix in plaats van als eigen subdomein. +--- + +**Belangrijke opmerking: prefixes werken niet goed in versies tussen 2.0.1 en 2.2.2** + +Dit document beschrijft een eenvoudige aanpak voor degenen die willen afwijken van de aanbevolen +praktijk om elke voor gebruikers zichtbare ArchivesSpace-toepassing op een eigen subdomein te draaien, +en in plaats daarvan elke toepassing onder een prefix aan te bieden, bijvoorbeeld: + +``` +http://aspace.myarchive.org/staff +http://aspace.myarchive.org/public +``` + +Deze configuratie die in dit document wordt beschreven, is één mogelijke aanpak, +en om het eenvoudig te houden, wordt ervan uitgegaan dat het volgende geldt: + +- ArchivesSpace draait op één Linux-server +- De server draait op de Apache 2.2+-webserver + +Tenzij anders vermeld, wordt ervan uitgegaan dat u root-toegang heeft op +uw machines, en dat alle opdrachten als root moeten worden uitgevoerd (of met sudo). + +## Stap 1: Zet proxies op in uw Apache-configuratie + +De volgende wijzigingen kunnen worden aangebracht in het bestand httpd.conf zelf, of in een inbegrepen bestand: + +```apache +ProxyPass /staff http://localhost:8080/staff +ProxyPassReverse /staff http://localhost:8080/ +ProxyPass /public http://localhost:8081/public +ProxyPassReverse /public http://localhost:8081/ +``` + +Start Apache nu opnieuw. + +## Stap 2: Installeer en configureer ArchivesSpace + +Volg de instructies in de hoofd-README om ArchivesSpace te downloaden en te installeren. + +Open het bestand `archivesspace/config/config.rb` en voeg de volgende regels toe: + +```ruby +AppConfig[:frontend_proxy_url] = 'http://aspace.myarchive.org/staff' +AppConfig[:public_proxy_url] = 'http://aspace.myarchive.org/public' +``` + +(Opmerking: Deze regels mogen niet beginnen met een '#' teken.) + +Start ArchivesSpace. + +## Stap 3: (optioneel) Sluit poorten 8080 en 8081 af + +Standaard zijn de medewerkers- en publieke toepassingen toegankelijk via de poorten 8080 en 8081 + +``` +http://aspace.myarchive.org:8080 +http://aspace.myarchive.org:8081 +``` + +Aangezien dit niet de URL's zijn waarop gebruikers toegang moeten hebben tot de toepassing, wilt u deze +waarschijnlijk afsluiten. Zie README_HTTPS voor meer informatie over het afsluiten van poorten met iptables. diff --git a/src/content/docs/nl/provisioning/robots.md b/src/content/docs/nl/provisioning/robots.md new file mode 100644 index 0000000..f1afc57 --- /dev/null +++ b/src/content/docs/nl/provisioning/robots.md @@ -0,0 +1,43 @@ +--- +title: robots.txt +description: Instructies voor het toevoegen van een robots.txt aan uw ArchivesSpace-site. +--- + +De eenvoudigste manier om een `robots.txt`-bestand aan uw site toe te voegen, is door er gewoon een aan te maken in de map `/config/`. Dit bestand wordt als een standaardbestand `robots.txt` aangeboden wanneer u uw site start. + +Als dat niet mogelijk is, kunt u een apart bestand en uw proxy gebruiken. + +Voor Apache ziet de configuratie er als volgt uit: + +```apache +<Location "/robots.txt"> + SetHandler None + Require all granted +</Location> +Alias /robots.txt /var/www/robots.txt +``` + +Voor nginx bijvoorbeeld: + +```nginx +location /robots.txt { + alias /var/www/robots.txt; +} +``` + +U kunt ook robots-metatags toevoegen aan uw `layout_head.html.erb`, zodat deze in de header van uw site worden opgenomen. + +Voorbeeld: + +`<meta name="robots" content="noindex, nofollow">` + +Een goed uitgangspunt voor een `robots.txt`-bestand ziet er bijvoorbeeld als volgt uit: + +``` +Disallow: /search* +Disallow: /inventory/* +Disallow: /collection_organization/* +Disallow: /repositories/*/top_containers/* +Disallow: /check_session* +Disallow: /repositories/*/resources/*/tree/* +``` diff --git a/src/content/docs/nl/provisioning/solr.md b/src/content/docs/nl/provisioning/solr.md new file mode 100644 index 0000000..09fe8ee --- /dev/null +++ b/src/content/docs/nl/provisioning/solr.md @@ -0,0 +1,184 @@ +--- +title: Externe Solr +description: Instructies voor het installeren en gebruiken van externe Solr met ArchivesSpace. +--- + +:::note +Vanaf ArchivesSpace > 3.1.1 is externe Solr **vereist**. Voor eerdere versies is dit optioneel. +::: + +## Ondersteunde Solr-versies + +Zie de [opmerkingen over Solr-vereisten](/administration/getting_started#solr) + +## Solr installeren + +Raadpleeg de [Solr-documentatie](https://solr.apache.org/guide/solr/latest/) voor instructies over het instellen van Solr op uw server. + +U downloadt het Solr-pakket en pakt het uit in een map naar keuze. Start Solr pas nadat u de ArchivesSpace-configuratiebestanden hebt toegevoegd. + +**We raden ten zeerste aan Solr in de zelfstandige modus te installeren. Er wordt geen ondersteuning geboden voor Solr Cloud-implementaties in het bijzonder (we kunnen u bijvoorbeeld niet helpen bij het oplossen van problemen met Zookeeper).** + +## Een configset maken + +Voordat u Solr uitvoert, moet u een [configuratieset](https://solr.apache.org/guide/8_10/config-sets.html#configsets-in-standalone-mode) instellen. + +### Een nieuwe map maken + +#### Linux + +Gebruik de opdrachtregel: + +```shell +mkdir -p /$path/$to/$solr/server/solr/configsets/archivesspace/conf +``` + +Vervang `/$path/$to/$solr` door de daadwerkelijke locatie van Solr, bijvoorbeeld: + +```shell +mkdir -p /opt/solr/server/solr/configsets/archivesspace/conf +``` + +#### Windows + +Klik met de rechtermuisknop op uw Solr-map en open deze in Windows Terminal (Powershell). + +``` +mkdir -p .\server\solr\configsets\archivesspace\conf +``` + +U zou ongeveer het volgende als uitvoer moeten zien: + +``` +Directory: C:\Users\archivesspace\Projects\solr-8.10.1\server\solr\configsets\archivesspace +Mode LastWriteTime Length Name +---- ------------- ------ ---- +d----- 10/25/2021 12:15 PM conf +``` + +### De configuratiebestanden kopiëren + +Kopieer de configuratiebestanden voor ArchivesSpace Solr uit de map `solr` in het zipbestand van de release naar de map `$SOLR_HOME/server/solr/configsets/archivesspace/conf`. + +Er moeten vier bestanden zijn: + +- schema.xml +- solrconfig.xml +- stopwords.txt +- synonyms.txt + +```shell +ls .\server\solr\configsets\archivesspace\conf\ + +Directory: C:\Users\archivesspace\Projects\solr-8.10.1\server\solr\configsets\archivesspace\conf + +Mode LastWriteTime Length Name +---- ------------- ------ ---- +-a---- 10/25/2021 12:18 PM 18291 schema.xml +-a---- 10/25/2021 12:18 PM 3046 solrconfig.xml +-a---- 10/25/2021 12:18 PM 0 stopwords.txt +-a---- 10/25/2021 12:18 PM 0 synonyms.txt +``` + +_Opmerking: uw uitvoer kan er iets anders uitzien._ + +## De omgeving instellen + +Bij gebruik van Solr v9 of hoger zijn [Solr-modules](https://solr.apache.org/guide/solr/latest/configuration-guide/solr-modules.html) vereist. +We raden aan de omgevingsvariabele te gebruiken om op te geven welke modules moeten worden gebruikt: + +```shell +SOLR_MODULES=analysis-extras +``` + +Deze omgevingsvariabele moet tijdens runtime beschikbaar zijn voor de Solr-instantie. + +Hieronder staan enkele aanbevolen artikelen met instructies voor het instellen van een omgevingsvariabele: + +- Bij gebruik van [Linux](https://www.freecodecamp.org/news/how-to-set-an-environment-variable-in-linux) +- Bij gebruik van een [Mac](https://phoenixnap.com/kb/set-environment-variable-mac) +- Bij gebruik van [Windows](https://docs.oracle.com/cd/E83411_01/OREAD/creating-and-modifying-environment-variables-on-windows.htm#OREAD158). Let op: in Windows moet de variabelenaam `SOLR_MODULES` zijn en de variabelewaarde `analysis-extras`. + +## Een Solr-core instellen + +Voer de opdracht uit om een ArchivesSpace-core te maken zodra de `configset` is ingesteld: + +```bash +bin/solr start +``` + +Wacht tot Solr is gestart (uitgevoerd als niet-beheerdersgebruiker): + +```shell +.\bin\solr start +"java version info is 11.0.12" +"Extracted major version is 11" +OpenJDK 64-Bit Server VM warning: JVM cannot use large page memory because it does not have enough privilege to lock pages in memory. +Waiting up to 30 to see Solr running on port 8983 +Started Solr server on port 8983. Happy searching! +``` + +U kunt controleren of Solr actief is via [http://localhost:8983](http://localhost:8983). + +Maak nu de core: + +```shell +bin/solr create -c archivesspace -d archivesspace +``` + +U zou een bevestiging moeten zien: + +```shell +"java version info is 11.0.12" +"Extracted major version is 11" + +Created new core 'archivesspace' +``` + +In de browser zou u toegang moeten hebben tot het [ArchivesSpace-schema](http://localhost:8983/solr/#/archivesspace/files?file=schema.xml). + +## De ingebouwde Solr-serverinstantie uitschakelen (optioneel, alleen voor versies <= 3.1.1) + +Bewerk het ArchivesSpace-config.rb-bestand: + +```ruby +AppConfig[:enable_solr] = false +``` + +Houd er rekening mee dat u Solr dan handmatig moet back-uppen. + +## De Solr-URL instellen in uw config.rb-bestand + +Deze configuratie-instelling moet verwijzen naar uw Solr-instantie: + +```ruby +AppConfig[:solr_url] = "http://localhost:8983/solr/archivesspace" +``` + +Als ArchivesSpace en Solr niet op dezelfde server draaien, vervangt u `localhost` door het adres van Solr. + +Standaard controleert ArchivesSpace bij het opstarten of de Solr-configuratie correct lijkt te zijn en wordt er een fout gegenereerd als dat niet zo is. U kunt deze controle uitschakelen door `AppConfig[:solr_verify_checksums] = false` in `config.rb` in te stellen. + +Let op: als u een bestaande ArchivesSpace-installatie bijwerkt om externe Solr te gebruiken, moet u een volledige herindexering uitvoeren. +Zie [Indexen](/administration/indexes) voor meer informatie. + +--- + +U kunt nu de instructies in het gedeelte [Aan de slag](/administration/getting_started) volgen om uw ArchivesSpace-applicatie te starten. + +--- + +## Solr upgraden + +Als u een oudere versie van Solr gebruikt dan aanbevolen, moet u deze mogelijk upgraden (als dit in de release-opmerkingen wordt vermeld) of wilt u dat misschien doen. Voordat u een upgrade uitvoert, wordt aanbevolen het volgende te raadplegen: + +- [Opmerkingen over Solr-upgrades](https://solr.apache.org/guide/solr/latest/upgrade-notes/solr-upgrade-notes.html) +- [Release-opmerkingen van ArchivesSpace](https://github.com/archivesspace/archivesspace/releases) + +U moet ook dit document raadplegen, omdat de installatiestappen instructies kunnen bevatten die voorheen niet nodig waren. Sinds Solr v9 is het bijvoorbeeld verplicht Solr-modules te gebruiken, met instructies om deze modules via omgevingsvariabelen te configureren. + +Het belangrijkste is dat wordt gecontroleerd of het schema van ArchivesSpace wordt gebruikt voor de ArchivesSpace-Solr-index. Met de configuratie-instelling `AppConfig[:solr_verify_checksums] = true` wordt bij het opstarten gecontroleerd of dit het geval is. Als dat niet zo is, kan ArchivesSpace niet worden gestart. + +Vanaf ArchivesSpace 3.5+ controleert `AppConfig[:solr_verify_checksums]` het bestand `solrconfig.xml` niet. U kunt dit bestand daarom wijzigen zonder dat ArchivesSpace bij het opstarten een fout geeft. Bij een upgrade moet u echter ten minste het ArchivesSpace-`solrconfig.xml`-bestand vergelijken met het bestand dat in gebruik is, voor het geval er wijzigingen nodig zijn om met de bijgewerkte Solr-versie te werken. Zo werkt het ArchivesSpace Solr v8-`solrconfig.xml`-bestand niet zonder aanpassingen met Solr v9. + +Na het upgraden van Solr moet u een volledige herindexering uitvoeren. De instructies hiervoor vindt u in [Indexen](/administration/indexes). diff --git a/src/content/docs/nl/provisioning/tuning.md b/src/content/docs/nl/provisioning/tuning.md new file mode 100644 index 0000000..69fac59 --- /dev/null +++ b/src/content/docs/nl/provisioning/tuning.md @@ -0,0 +1,51 @@ +--- +title: Prestatieoptimalisatie +description: Richtlijnen voor het optimaliseren van de prestaties van de ArchivesSpace-stack. +--- + +ArchivesSpace bestaat uit een stack van webapplicaties die mogelijk speciale afstemming vereisen om zo effectief mogelijk te werken. Dit geldt met name voor instellingen met veel gegevens of veel gelijktijdige gebruikers die metadata bewerken. +Houd er rekening mee dat ArchivesSpace op meerdere servers kan worden gehost, hetzij in een [multi-tenantconfiguratie](/provisioning/clustering), hetzij door de verschillende applicaties (d.w.z. backend, frontend, public, solr en indexer) op afzonderlijke servers te implementeren. + +## Applicatie-instellingen + +De applicatie zelf kan op tal van manieren worden afgestemd. Het is een goed idee om de [configuratiedocumentatie](/customization/configuration) te lezen, omdat er veel instellingen zijn die u aan uw behoeften kunt aanpassen. + +Houd er rekening mee dat het, omdat ArchivesSpace een Java-applicatie is, mogelijk is om de geheugentoewijzing voor de JVM in te stellen. Op internet zijn veel artikelen te vinden met informatie over optimale instellingen. Welke instellingen optimaal zijn, hangt sterk af van de belasting van uw server en de hardware. Het is een goed idee om de applicatie te monitoren en ervoor te zorgen dat deze niet tegen de bovengrens van de ingestelde heap aanloopt. + +Deze instellingen zijn: + +- ASPACE_JAVA_XMX : Maximale heapruimte (komt overeen met Java's Xmx, standaard "Xmx1024m") +- ASPACE_JAVA_XSS : Stackgrootte van threads (komt overeen met Xss, standaard "Xss2m") +- ASPACE_GC_OPTS : Opties voor de garbagecollector van Java (standaard: "-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:NewRatio=1") + +Linux-gebruikers kunnen deze instellingen wijzigen door een omgevingsvariabele te exporteren (bijvoorbeeld $ export ASPACE_JAVA_XMX="Xmx2048m") of door het opstartscript archivesspace.sh te bewerken en de standaardwaarden aan te passen. + +Windows-gebruikers moeten het bestand archivesspace.bat bewerken. + +Als u problemen ondervindt met fouten zoals `java.lang.OutOfMemoryError`, probeer dan de waarde van `ASPACE_JAVA_XMX` te verdubbelen. Op Linux kunt u dit doen door een omgevingsvariabele in te stellen, zoals `$ export ASPACE_JAVA_XMX="Xmx2048m"`, of door archivsspace.sh te bewerken: + +```shell +if [ "$ASPACE_JAVA_XMX" = "" ]; then + ASPACE_JAVA_XMX="-Xmx2048m" +fi +``` + +Voor Windows wijzigt u archivesspace.bat: + +```shell +java -Darchivesspace-daemon=yes %JAVA_OPTS% -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:NewRatio=1 -Xss2m -X +mx2048m -Dfile.encoding=UTF-8 -cp "%GEM_HOME%\gems\jruby-rack-1.1.12\lib\*;lib\*;launcher\lib\*!JRUBY!" org.jruby.Main "la +uncher/launcher.rb" > "logs/archivesspace.out" 2>&1 +``` + +**LET OP: DE APPLICATIE GEBRUIKT HET BESCHIKBARE GEHEUGEN NIET TENZIJ U DE MAXIMALE HEAPGROOTTE INSTELT** Als uw server bijvoorbeeld 4 GB RAM heeft, maar u de ArchivesSpace-instellingen niet hebt aangepast, gebruikt u slechts 1 GB. + +## MySQL + +De ArchivesSpace-applicatie kan een databaseserver behoorlijk zwaar belasten, omdat het een toepassing is die veel met metadata werkt. Op internet zijn veel artikelen te vinden over het afstemmen van een MySQL-database. Een goed begin is een tool zoals [MySQL Tuner](http://mysqltuner.com/) of [Tuning Primer](https://rtcamp.com/tutorials/mysql/tuning-primer/); deze kunnen nuttige aanwijzingen geven over mogelijke aanpassingen aan de configuratie van uw MySQL-server. + +Houd de hoeveelheid beschikbaar geheugen op de server en de InnoDB-bufferpool goed in de gaten. + +## Solr + +Op internet zijn veel suggesties te vinden voor het optimaliseren van een Solr-index. Een [externe Solr-index gebruiken](/provisioning/solr) kan de prestaties van ArchivesSpace verbeteren, omdat de index dan op een eigen server staat. diff --git a/src/content/docs/nl/release-notes/v4.0.0.md b/src/content/docs/nl/release-notes/v4.0.0.md new file mode 100644 index 0000000..6a96cc4 --- /dev/null +++ b/src/content/docs/nl/release-notes/v4.0.0.md @@ -0,0 +1,89 @@ +--- +title: v4.0.0 +--- + +## Releaseoverzicht van ArchivesSpace v4.0.0 + +Deze uitgave wordt gekenmerkt door grote upgrades van de technische infrastructuur en verbeteringen aan de gebruikersinterfaces. De belangrijkste wijzigingen zijn: + +## Incompatibele wijzigingen + +- **Incompatibele wijziging**: [OAI-identifiers gebruiken nu een dubbele punt als scheidingsteken tussen de naamruimte en de identifier](#api-and-integration-updates) +- **Incompatibele wijziging**: [Solr 9 is nu vereist](#major-infrastructure-updates) +- **Incompatibele wijziging**: [de Sequence-module is verwijderd uit de kern van ArchivesSpace](#plugins-and-configuration) + +## Belangrijke updates van de infrastructuur + +- **Incompatibele wijziging**: Solr 9 is nu vereist +- Bijgewerkt naar nieuwere versies van: + - Bootstrap (4.3) + - jQuery (3.7.0) + - Rails (6.1.6) + - JRuby (9.3.x.x) + - Nokogiri (1.13.10) + - Sequel (5.9.0) +- De ontwikkelwebserver voor de medewerkersinterface en de publieke gebruikersinterface is gemigreerd van Jetty naar Puma (6.4.2) +- De CSS van de medewerkersapplicatie is gemigreerd van Less naar Sass +- Java 8 wordt niet langer ondersteund; Java 11 of 17 is vereist +- Docker wordt nu ondersteund als aanbevolen implementatiemethode + +## Verbeteringen aan de publieke gebruikersinterface (PUI) + +- De zijbalk voor de indeling van collecties kan nu in config.rb links of rechts worden geplaatst +- Nieuwe informatie en opties voor omvangrijke collectiebeschrijvingen + - Toont bij oneindig scrollen welk percentage van de records is geladen + - Optie om alle onderliggende records van een collectie in één keer te laden (in plaats van oneindig te scrollen) +- Zoektermen worden nu gemarkeerd in de resultaten +- Probleem opgelost waardoor extra regels werden weergegeven in aantekeningen +- Het PDF-label gewijzigd van "Afdrukken" in "PDF downloaden" +- PDF's gebruiken standaard Kurinto-lettertypen +- De weergave van hyperlinks in classificatiebeschrijvingen is verbeterd + +## Verbeteringen aan de medewerkersinterface + +- De plug-in voor bulkupdates maakt nu deel uit van de kernapplicatie +- Nieuwe mogelijkheid om volledige records voor collecties of archiefonderdelen te dupliceren +- Importfuncties voor spreadsheets verbeterd + - Nieuwe velden toegevoegd voor digitale objecten aan de spreadsheet voor bulkimport van digitale objecten + - Locatie-imports kunnen een collectiebeherende instelling bevatten + - CSV-imports van archiefonderdelen houden nu rekening met de publicatiestatus + - Nieuwe optie om een gedeeltelijk ingevuld spreadsheetsjabloon voor digitale objecten te downloaden +- Voorbeeldpagina voor het samenvoegen van agents gerepareerd +- De vervolgkeuzelijst met plug-ins in de instellingen van een collectiebeherende instelling is verbeterd +- Problemen met het dialoogvenster Rapid Data Entry opgelost +- Problemen met knopinfo opgelost +- De lay-out van de statussen van achtergrondtaken is verbeterd + +## Wijzigingen in EAD-export + +- Speciale tekens worden nu in meer velden geëscapet +- Komma's en punten verwijderd uit aantekeningen over langmaterial +- Voorloop-XML-tags in de revisiebeschrijving leiden niet langer tot ongeldige XML + +## Documentatie en testen + +- Nieuwe technische documentatiesite gelanceerd op docs.archivesspace.org +- Alle Selenium-tests overgezet naar Capybara +- Functionaliteit toegevoegd voor schermafbeeldingen bij mislukte tests + +## API- en integratie-updates + +- **Incompatibele wijziging**: OAI-identifiers gebruiken nu een dubbele punt als scheidingsteken tussen de naamruimte en de identifier + +## Beveiliging en beheer + +- Nieuwe optie in config.rb waarmee gebruikers met de rol Administrator toegang kunnen krijgen tot de pagina met systeeminformatie +- Optie in config.rb toegevoegd om de favicon weer te geven +- PDF's van de PUI geven nu duidelijkere foutmeldingen wanneer het genereren mislukt +- Mogelijkheden voor bulkimport en -updates uitgebreid met nieuwe configuratieopties + +## Plug-ins en configuratie + +- **Incompatibele wijziging**: de Sequence-module is verwijderd uit de kern van ArchivesSpace + +## Bijdragen van de gemeenschap + +- 76 bijdragen van de gemeenschap geaccepteerd +- 134 pull requests samengevoegd +- 146 Jira-tickets gesloten +- Bijdragen van meerdere leden van de gemeenschap en organisaties diff --git a/src/lib/remark-localize-links.ts b/src/lib/remark-localize-links.ts new file mode 100644 index 0000000..0232f5e --- /dev/null +++ b/src/lib/remark-localize-links.ts @@ -0,0 +1,78 @@ +import { visit } from 'unist-util-visit' +import type { Root } from 'mdast' +import type { VFile } from 'vfile' + +/** + * Locale folders under `src/content/docs/` for translated content, in + * addition to the `en.yml` languages listed in `TD-21-i18n_project.md`. + * Keep in sync with the `locales` configured for Starlight once i18n is + * enabled in `astro.config.mjs`. + */ +const LOCALE_CODES = ['fr', 'de', 'ja', 'es', 'uk', 'nl'] as const + +type LocaleCode = (typeof LOCALE_CODES)[number] + +const DOCS_COLLECTION_SEGMENT = 'content/docs/' + +/** + * Remark plugin that rewrites internal documentation links so they point at + * the current file's own locale instead of always pointing at the English + * (root) path. + * + * Starlight does not localize plain Markdown/MDX link hrefs on its own -- + * that only happens for helpers like `getRelativeLocaleUrl()` used inside + * `.astro` components. Without this plugin, a link such as + * `[Public user interface](/architecture/public)` written in a translated + * page would keep sending readers back to the English page. + * + * English is the `root` locale (unprefixed paths, e.g. `/architecture/public` + * stays as-is), so files outside a locale folder are left untouched. Files + * under `src/content/docs/<locale>/` get every internal, non-blog doc link + * prefixed with `/<locale>`. This is safe even before a page has been + * translated: Starlight generates a route for every locale-prefixed path and + * automatically falls back to the English content (with a "not yet + * translated" notice) until a real translation exists -- see "Fallback + * content" in `TD-21-i18n_project.md`. + */ +export function remarkLocalizeLinks() { + return (tree: Root, file: VFile) => { + const locale = getFileLocale(file.path) + if (!locale) return // root (English) content -- links are already correct + + visit(tree, 'link', (node) => { + if (shouldLocalize(node.url)) { + node.url = `/${locale}${node.url}` + } + }) + } +} + +function getFileLocale(filePath: string | undefined): LocaleCode | undefined { + if (!filePath) return undefined + + const normalizedPath = filePath.replaceAll('\\', '/') + const collectionIndex = normalizedPath.indexOf(DOCS_COLLECTION_SEGMENT) + if (collectionIndex === -1) return undefined + + const relativePath = normalizedPath.slice( + collectionIndex + DOCS_COLLECTION_SEGMENT.length + ) + const [firstSegment] = relativePath.split('/') + + return (LOCALE_CODES as readonly string[]).includes(firstSegment) + ? (firstSegment as LocaleCode) + : undefined +} + +function shouldLocalize(url: string): boolean { + if (!url.startsWith('/')) return false // relative, anchor-only, or external + if (url.startsWith('/blog/')) return false // blog is not a localized collection + + return !isAlreadyLocalized(url) +} + +function isAlreadyLocalized(url: string): boolean { + return LOCALE_CODES.some( + (locale) => url === `/${locale}` || url.startsWith(`/${locale}/`) + ) +}