Suggested OCR-D System Architecture
architecture, which greatly improves the scalability, flexibility, and reliability of the system compared to
the CLI and the Distributed Processor REST Calls approach.
-
In this architecture, all servers are implemented using FastAPI. Behind the scene, it
runs Uvicorn, an ASGI web server implementation
diff --git a/docs/feed.xml b/docs/feed.xml
index ad33d0363..b0b51ed12 100644
--- a/docs/feed.xml
+++ b/docs/feed.xml
@@ -1,4 +1,4 @@
-Jekyll2023-06-16T10:54:32+02:00https://ocr-d.de/feed.xmlOCR-DWrite an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.OCR-D Phase III gestartet2021-08-06T00:00:00+02:002021-08-06T00:00:00+02:00https://ocr-d.de/de/2021/08/06/kick-off-phase3Am 30. Juli fand unser Kick-off-Workshop statt, der die Phase III von OCR-D einläutete.
+Jekyll2023-06-16T16:10:39+02:00https://ocr-d.de/feed.xmlOCR-DWrite an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.OCR-D Phase III gestartet2021-08-06T00:00:00+02:002021-08-06T00:00:00+02:00https://ocr-d.de/de/2021/08/06/kick-off-phase3Am 30. Juli fand unser Kick-off-Workshop statt, der die Phase III von OCR-D einläutete.
diff --git a/docs/search-index.json b/docs/search-index.json
index 9ba884fcf..ce7a25d9a 100644
--- a/docs/search-index.json
+++ b/docs/search-index.json
@@ -12,7 +12,7 @@
{
"slug": "en-spec-changelog-html",
"title": "Change Log",
- "content" : "Change LogAll notable changes to the specs will be documented in this file.Versioned according to Semantic Versioning.Unreleased[3.22.0] - 2023-03-03Added: QA Spec: defining metrics for evaluation of OCR against Ground Truth, #225 Web API Spec: Defining the components and interactions of the Web API, #222Fixed: ocrd-tool.json: Wording on size attribute of resources, #2333.21.0 - 2022-11-30Fixed: web api: GET /workflow/{workflow-id} should return a workflow, not a workspace, #223Changed: web api: POST /workflow/{workflow-id} accepts a WorkflowArgs object with workspace ID and workflow parameters, #220 mets: Reorganize structure of the document, add numbered section headings, #155, #207Added: cli: --page-id/-g option accepts regular expressions as well, #221, OCR-D/core#856 mets: conventions for providing document-wide files (FULLDOWNLOAD_...), #154, #207 cli: clarify the semantics and order of preference for multi-value/regex/range param values, #232, OCR-D/core#9213.20.0 - 2022-08-14Changed: web api: /workspace: support content-negotiation for either OcrdZip or JSON description, #210 web api: POST/PUT /workspace: return OcrdZip, #209 ocrd-tool.json schema: default for parameters is an empty object {}Removed: logging: obsolete docs better described in cli, #2193.19.0 - 2022-05-23Fixed: typos in the web OCR-D Web API, #199 typo in the OCRD-ZIP spec, #203 fix bagit-profile URL, #205Changed: Drop Ocrd-Manifestation-Depth and disallow fetch.txt bagit mechanism, #182 Drop unclear has_docker attribute in discovery response in OCR-D Web API, #201Added: Parameters can now be described with most JSON-Schema constructs, #206, OCR-D/core#8483.18.0 - 2022-04-06Added: Initial version of the OCR-D Web API, #1733.17.0 - 2022-02-14Added: ocrd-tool.json: Support processors listing their own resources and restrict resource_locations, OCR-D/spec#181, OCR-D/spec#1903.16.0 - 2022-01-30Changed: --page-id can accept the .. numerical range operator, #172, OCR-D/core#672 ocrd-tool.json: Parameters that accept a directory must have content-type == "text/dirctory", #189, OCR-D/core#750, OCR-D/core#691Added: German translation of the glossary, OCR-D/ocrd-website#2903.15.0 - 2021-12-07Changed: mets:fileGrp/@USE must be valid xs:ID, #1853.14.0 - 2021-11-03Changed: Resource lookup: for --location cwd look directly in <cwd>, no subdirectory, OCR-D/core#7273.13.0 - 2021-09-20Changed: CLI: Logging should go to STDERR, parseable output to STDOUT, #183, OCR-D/core#7133.12.0 - 2021-01-26Changed: Resource lookup: Remove XDG_CONFIG_HOME and XDG_CACHE_HOME Resource lookup: Add /usr/local/share/ocrd-resources3.11.0 - 2021-01-20Changed: Resource lookup in an intermediary ocrd-resources directory Drop python-specific resource locations Drop /usr/local/share resource location3.10.0 - 2020-12-02Changed: Revise glossary, mostly by @bertsky3.9.1 - 2020-10-12Changed: processor parameter values can be arrays, #1743.9.0 - 2020-07-21Changed: CLI: Processors being called without valid METS file -> show help, #1563.8.0 - 2020-07-13Added: Parameter JSON files may contain #-prefixed comments, #161 Processor resources, encompassing bundled/user-provided parameter JSON files and file parameter values like models, #158, #162 Mechanism for resolving file parameter values to actual filenames, #163 CLI: -P/--parameter-override to override single key-value pairs of parameter JSON, #166Changed: mets:file representing page:AlternativeImage should not be added to separate mets:fileGrp but rather to the PAGE-XML whence they originate, #164 Recommendation how file IDs should be derived from existing mets:file, #164 CLI: -p/--parameter option repeatable, results are merged right to left, #161 METS: Simplify the convention for mets:file/@ID for derived images, #164 mets:fileGrp for prerprocessing steps should use the qualifier PRE instead of IMG, #164Removed: Recommendations on fileGrp/@USE for images, #1643.7.0 - 2020-06-07Added: ocrd-tool.json: Parameter values may be objects, #143 glossary: definitions of “print space” and “border”, #1143.6.0 - 2020-04-30Added: CLI: --overwrite flag to delete existing output files before processing, #1513.5.0 - 2020-04-20Changed: CLI: clarify requirements on processors, ht @bertsky, #148 Use region instead of block for areas on the page, #135 PAGE: imageFilename must NOT be a URL but a relative filename, #140 Updated URLs to point to https://ocr-d.de instead of https://ocr-d.github.io, #149Added: docker: instructions on naming and labelling images, #139 CLI tools must implement -h/--help, #1153.4.2 - 2020-01-08Changed: bagit-profile accepts metadata as non-payload dir, #133 Relaxed the requirement for the mets:fileGrp/@USE syntax, #1383.4.1 - 2020-01-03Added: No multi-page TIFF, #1323.4.0 - 2019-11-05Fixed Various typos, #128Changed: Dockerfile: no CMD, no ENTRYPOINT, #130 Processors should assume 300 dpi if image metadata cannot be trusted, #129Added: Spec for provenance, #1263.3.0 - 2019-10-23Added: Draft spec for logging Draft spec for provenanceChanged: ocrd-tool: Additional additional category layout/segmentation/text-image ocrd-tool: Remove syntactical restriction for content-type ocrd-tool: output_file_grp no longer required CLI: --mets and --working-dir are optional not required CLI: --output-file-grp is optional, OCR-D/core#2963.2.1 - 2019-06-25Added: glossary: “MP”, #112 glossary: “font family”, #100 #109 cli: allow JSON strings for -p, OCR-D/core#239 #110Fixed: bagit: path of OcrdMets must be relative to /data, fix #107, #1133.2.0 - 2019-02-27Added:Convention for columnsFixed:PAGE: link to the page xml docs3.1.0 - 2018-12-20Added: Consistency check level ‘lax’Fixed: Example in ocrd_tool.md is from ocrd_kraken, not ocrd_tesserocr3.0.0 - 2018-12-13Added: PAGE text result and consistency checks, #82, OCR-D/assets#16Changed: :fire: Drop recommendation on reusing source file ID for page grouping :fire: Drop GROUPID and replace with mets:structMap[@TYPE=”PHYSICAL”] throughout :fire: CLI: Replace -g/-group-id with -g/--page-id CLI: Mark possible comma-separated multi-value parameters as such CLI: Update ocrd process example OCRD-ZIP: Set BagIt-Profile-Version to 1.22.7.0 - 2018-12-04Added: Font information, #76, #962.6.3 - 2018-11-23Changed: OCRD-ZIP: Ocrd-Mets and mets:FLocat URI/paths must be relative to /data, #99 OCRD-ZIP: Ocrd-Mets only relevant for extraction OCRD-ZIP: Filenames MUST be relative to mets.xml METS: Filenames MAY/SHOULD be relative to mets.xml OCRD-ZIP: Allow a limited set of files in the bag basedir (readme, build files), #972.6.2 - 2018-11-22Changed: OCRD-ZIP bagit profile: Add empty list requirement for Tag-Manifest-Required, Tag-Files-Required OCRD-ZIP bagit profile: Contact info OCRD-ZIP allow fetch.txt, #982.6.1 - 2018-11-09Fixed: OCRD-ZIP: typo in bagit-profile: Bagit- –> BagIt- OCRD-ZIP: Require BagIt-Profile-Identifier OCRD-ZIP: Version number must be a string, bagit-profile/bagit-profile#132.6.0 - 2018-11-06Changed: Base workspace and workspace serialization mechanics on bagit, #702.5.0 - 2018-10-30Added: Recording processing information in METS, #89 Input and output file groups can be provided in ocrd-tool.json, #91Changed :fire: METS: grouping pages by physical structMap not GROUPID, #812.4.0 - 2018-10-19Added: File parameters, #69 Step for post-correction, #642.3.1 - 2018-10-10Fixed CLI: Example used repeated options2.3.0 - 2018-09-26Changed: CLI: filtering by log level required, OCR-D/core#173, #74 CLI: log messages must adhere to uniform pattern, #78Added: CLI: Convention to prefer comma-separated values over repeated flags, #682.2.2 - 2018-08-14Fixed: Missed description for parameters2.2.1 - 2018-07-25Changed spell out parameter properties in ocrd-tool.json schem2.2.0 - 2018-07-23Added: CLI: Conventions for handling URL on the command line2.1.2 - 2018-07-19Added: Reference PAGE media type in PAGE conventions, #652.1.1 - 2018-06-18Fixed: ocrd-tool: regex for version had a YAML error2.1.0 - 2018-06-18Added: ocrd-tool: Must define version METS: mets:file must have ID METS: mets:fileGrp must have consistent MIMETYPE METS: mets:file GROUPID must be unique with a mets:fileGrp2.0.0 - 2018-06-18Removed: –output-mets CLI option1.3.0 - 2018-06-15Added: Glossary, #56Removed: drop OCR-D-GT-PAGE, #61Fixed: explain GT- prefix for fileGrp@USE of ground truth files, #58 various typos1.2.0 - 2018-05-25Fixed: Fix example for ocrd_tool Fix TIFF media typeAdded: -J/–dump-json, #30Changed ocrd-tool: tags -> category, #44 ocrd-tool: step -> steps (now an array), #44 ocrd-tool: parameterSchema -> parameters, #48 ocrd-tool: ‘tools’ is an object now, not an array, #431.1.5 - 2018-05-15Added: ocrd-tool: Steps: preprocessing/optimization/grayscale_normalization and layout/segmentation/word PAGE conventions1.1.4 - 2018-05-02Added: PAGE/XML media type, #33 mets:file@GROUPID == pg:pcGtsId, #311.1.3 - 2018-04-28Added: Add OCR-D-SEG-WORD and OCR-D-SEG-GLYPH as USE attributes1.1.2 - 2018-04-23Changed: rename repo OCR-D/pyocrd -> OCR-D/core rename repo OCR-D/ocrd-assets -> OCR-D/assets renamed docker base image ocrd/pyocrd -> ocrd/coreFixed: In ocrd_tool example: renamed parameter structure-level -> level-of-operation1.1.1 - 2018-04-19Fixed: typo: exceutable -> executable disallow custom properties1.1.0 - 2018-04-19Added Spec for OCRD-ZIPChanged Use executable instead of binary to reduce confusionFixed typos (@stweil)Removed1.0.0 - 2018-04-16Initial Release",
+ "content" : "Change LogAll notable changes to the specs will be documented in this file.Versioned according to Semantic Versioning.Unreleased3.23.0 - 2023-03-16Added: JSON-schema for QUIVER / QA Spec, #2363.22.0 - 2023-03-03Added: QA Spec: defining metrics for evaluation of OCR against Ground Truth, #225 Web API Spec: Defining the components and interactions of the Web API, #222Fixed: ocrd-tool.json: Wording on size attribute of resources, #2333.21.0 - 2022-11-30Fixed: web api: GET /workflow/{workflow-id} should return a workflow, not a workspace, #223Changed: web api: POST /workflow/{workflow-id} accepts a WorkflowArgs object with workspace ID and workflow parameters, #220 mets: Reorganize structure of the document, add numbered section headings, #155, #207Added: cli: --page-id/-g option accepts regular expressions as well, #221, OCR-D/core#856 mets: conventions for providing document-wide files (FULLDOWNLOAD_...), #154, #207 cli: clarify the semantics and order of preference for multi-value/regex/range param values, #232, OCR-D/core#9213.20.0 - 2022-08-14Changed: web api: /workspace: support content-negotiation for either OcrdZip or JSON description, #210 web api: POST/PUT /workspace: return OcrdZip, #209 ocrd-tool.json schema: default for parameters is an empty object {}Removed: logging: obsolete docs better described in cli, #2193.19.0 - 2022-05-23Fixed: typos in the web OCR-D Web API, #199 typo in the OCRD-ZIP spec, #203 fix bagit-profile URL, #205Changed: Drop Ocrd-Manifestation-Depth and disallow fetch.txt bagit mechanism, #182 Drop unclear has_docker attribute in discovery response in OCR-D Web API, #201Added: Parameters can now be described with most JSON-Schema constructs, #206, OCR-D/core#8483.18.0 - 2022-04-06Added: Initial version of the OCR-D Web API, #1733.17.0 - 2022-02-14Added: ocrd-tool.json: Support processors listing their own resources and restrict resource_locations, OCR-D/spec#181, OCR-D/spec#1903.16.0 - 2022-01-30Changed: --page-id can accept the .. numerical range operator, #172, OCR-D/core#672 ocrd-tool.json: Parameters that accept a directory must have content-type == "text/dirctory", #189, OCR-D/core#750, OCR-D/core#691Added: German translation of the glossary, OCR-D/ocrd-website#2903.15.0 - 2021-12-07Changed: mets:fileGrp/@USE must be valid xs:ID, #1853.14.0 - 2021-11-03Changed: Resource lookup: for --location cwd look directly in <cwd>, no subdirectory, OCR-D/core#7273.13.0 - 2021-09-20Changed: CLI: Logging should go to STDERR, parseable output to STDOUT, #183, OCR-D/core#7133.12.0 - 2021-01-26Changed: Resource lookup: Remove XDG_CONFIG_HOME and XDG_CACHE_HOME Resource lookup: Add /usr/local/share/ocrd-resources3.11.0 - 2021-01-20Changed: Resource lookup in an intermediary ocrd-resources directory Drop python-specific resource locations Drop /usr/local/share resource location3.10.0 - 2020-12-02Changed: Revise glossary, mostly by @bertsky3.9.1 - 2020-10-12Changed: processor parameter values can be arrays, #1743.9.0 - 2020-07-21Changed: CLI: Processors being called without valid METS file -> show help, #1563.8.0 - 2020-07-13Added: Parameter JSON files may contain #-prefixed comments, #161 Processor resources, encompassing bundled/user-provided parameter JSON files and file parameter values like models, #158, #162 Mechanism for resolving file parameter values to actual filenames, #163 CLI: -P/--parameter-override to override single key-value pairs of parameter JSON, #166Changed: mets:file representing page:AlternativeImage should not be added to separate mets:fileGrp but rather to the PAGE-XML whence they originate, #164 Recommendation how file IDs should be derived from existing mets:file, #164 CLI: -p/--parameter option repeatable, results are merged right to left, #161 METS: Simplify the convention for mets:file/@ID for derived images, #164 mets:fileGrp for prerprocessing steps should use the qualifier PRE instead of IMG, #164Removed: Recommendations on fileGrp/@USE for images, #1643.7.0 - 2020-06-07Added: ocrd-tool.json: Parameter values may be objects, #143 glossary: definitions of “print space” and “border”, #1143.6.0 - 2020-04-30Added: CLI: --overwrite flag to delete existing output files before processing, #1513.5.0 - 2020-04-20Changed: CLI: clarify requirements on processors, ht @bertsky, #148 Use region instead of block for areas on the page, #135 PAGE: imageFilename must NOT be a URL but a relative filename, #140 Updated URLs to point to https://ocr-d.de instead of https://ocr-d.github.io, #149Added: docker: instructions on naming and labelling images, #139 CLI tools must implement -h/--help, #1153.4.2 - 2020-01-08Changed: bagit-profile accepts metadata as non-payload dir, #133 Relaxed the requirement for the mets:fileGrp/@USE syntax, #1383.4.1 - 2020-01-03Added: No multi-page TIFF, #1323.4.0 - 2019-11-05Fixed Various typos, #128Changed: Dockerfile: no CMD, no ENTRYPOINT, #130 Processors should assume 300 dpi if image metadata cannot be trusted, #129Added: Spec for provenance, #1263.3.0 - 2019-10-23Added: Draft spec for logging Draft spec for provenanceChanged: ocrd-tool: Additional additional category layout/segmentation/text-image ocrd-tool: Remove syntactical restriction for content-type ocrd-tool: output_file_grp no longer required CLI: --mets and --working-dir are optional not required CLI: --output-file-grp is optional, OCR-D/core#2963.2.1 - 2019-06-25Added: glossary: “MP”, #112 glossary: “font family”, #100 #109 cli: allow JSON strings for -p, OCR-D/core#239 #110Fixed: bagit: path of OcrdMets must be relative to /data, fix #107, #1133.2.0 - 2019-02-27Added:Convention for columnsFixed:PAGE: link to the page xml docs3.1.0 - 2018-12-20Added: Consistency check level ‘lax’Fixed: Example in ocrd_tool.md is from ocrd_kraken, not ocrd_tesserocr3.0.0 - 2018-12-13Added: PAGE text result and consistency checks, #82, OCR-D/assets#16Changed: :fire: Drop recommendation on reusing source file ID for page grouping :fire: Drop GROUPID and replace with mets:structMap[@TYPE=”PHYSICAL”] throughout :fire: CLI: Replace -g/-group-id with -g/--page-id CLI: Mark possible comma-separated multi-value parameters as such CLI: Update ocrd process example OCRD-ZIP: Set BagIt-Profile-Version to 1.22.7.0 - 2018-12-04Added: Font information, #76, #962.6.3 - 2018-11-23Changed: OCRD-ZIP: Ocrd-Mets and mets:FLocat URI/paths must be relative to /data, #99 OCRD-ZIP: Ocrd-Mets only relevant for extraction OCRD-ZIP: Filenames MUST be relative to mets.xml METS: Filenames MAY/SHOULD be relative to mets.xml OCRD-ZIP: Allow a limited set of files in the bag basedir (readme, build files), #972.6.2 - 2018-11-22Changed: OCRD-ZIP bagit profile: Add empty list requirement for Tag-Manifest-Required, Tag-Files-Required OCRD-ZIP bagit profile: Contact info OCRD-ZIP allow fetch.txt, #982.6.1 - 2018-11-09Fixed: OCRD-ZIP: typo in bagit-profile: Bagit- –> BagIt- OCRD-ZIP: Require BagIt-Profile-Identifier OCRD-ZIP: Version number must be a string, bagit-profile/bagit-profile#132.6.0 - 2018-11-06Changed: Base workspace and workspace serialization mechanics on bagit, #702.5.0 - 2018-10-30Added: Recording processing information in METS, #89 Input and output file groups can be provided in ocrd-tool.json, #91Changed :fire: METS: grouping pages by physical structMap not GROUPID, #812.4.0 - 2018-10-19Added: File parameters, #69 Step for post-correction, #642.3.1 - 2018-10-10Fixed CLI: Example used repeated options2.3.0 - 2018-09-26Changed: CLI: filtering by log level required, OCR-D/core#173, #74 CLI: log messages must adhere to uniform pattern, #78Added: CLI: Convention to prefer comma-separated values over repeated flags, #682.2.2 - 2018-08-14Fixed: Missed description for parameters2.2.1 - 2018-07-25Changed spell out parameter properties in ocrd-tool.json schem2.2.0 - 2018-07-23Added: CLI: Conventions for handling URL on the command line2.1.2 - 2018-07-19Added: Reference PAGE media type in PAGE conventions, #652.1.1 - 2018-06-18Fixed: ocrd-tool: regex for version had a YAML error2.1.0 - 2018-06-18Added: ocrd-tool: Must define version METS: mets:file must have ID METS: mets:fileGrp must have consistent MIMETYPE METS: mets:file GROUPID must be unique with a mets:fileGrp2.0.0 - 2018-06-18Removed: –output-mets CLI option1.3.0 - 2018-06-15Added: Glossary, #56Removed: drop OCR-D-GT-PAGE, #61Fixed: explain GT- prefix for fileGrp@USE of ground truth files, #58 various typos1.2.0 - 2018-05-25Fixed: Fix example for ocrd_tool Fix TIFF media typeAdded: -J/–dump-json, #30Changed ocrd-tool: tags -> category, #44 ocrd-tool: step -> steps (now an array), #44 ocrd-tool: parameterSchema -> parameters, #48 ocrd-tool: ‘tools’ is an object now, not an array, #431.1.5 - 2018-05-15Added: ocrd-tool: Steps: preprocessing/optimization/grayscale_normalization and layout/segmentation/word PAGE conventions1.1.4 - 2018-05-02Added: PAGE/XML media type, #33 mets:file@GROUPID == pg:pcGtsId, #311.1.3 - 2018-04-28Added: Add OCR-D-SEG-WORD and OCR-D-SEG-GLYPH as USE attributes1.1.2 - 2018-04-23Changed: rename repo OCR-D/pyocrd -> OCR-D/core rename repo OCR-D/ocrd-assets -> OCR-D/assets renamed docker base image ocrd/pyocrd -> ocrd/coreFixed: In ocrd_tool example: renamed parameter structure-level -> level-of-operation1.1.1 - 2018-04-19Fixed: typo: exceutable -> executable disallow custom properties1.1.0 - 2018-04-19Added Spec for OCRD-ZIPChanged Use executable instead of binary to reduce confusionFixed typos (@stweil)Removed1.0.0 - 2018-04-16Initial Release",
"url": " /en/spec/CHANGELOG.html"
},
@@ -273,14 +273,6 @@
},
- {
- "slug": "slides-2019-03-25-dhd",
- "title": "",
- "content" : "Workshop DHD 2019Theorie: Einführung in OCR allgemein20’ @kbaSlidesTheorie: OCR-D Projektuebersicht10’ @ehrmnSlidesTheorie: OCR-D Ground Truth10’ @tboenigSlidesTheorie: OCR-D Repository15’ @VolkerHartmannSlides (Google Slides)Slides (PowerPoint)Demo (hackmd)Theorie: OCR-D Spezifikationen und Software15’ @kbaSlidesPraxis: Installation des OCR-D Stack30’ @kba, @VolkerHartmannSetup guidePause (30’)Praxis: Erstellen von Ground Truth30’ @tboenigGuidePraxis: OCR-D auf existierendes METS anwenden30’ @kbaGuidePraxis: OCR-D auf willkürliche Bilder anwenden15’ @kbaGuidePraxis: OCRD-ZIP erzeugen und untersuchenGuide",
- "url": " /slides/2019-03-25-dhd/"
- },
-
-
{
"slug": "en-spec",
"title": "Specifications",
@@ -289,6 +281,14 @@
},
+ {
+ "slug": "slides-2019-03-25-dhd",
+ "title": "",
+ "content" : "Workshop DHD 2019Theorie: Einführung in OCR allgemein20’ @kbaSlidesTheorie: OCR-D Projektuebersicht10’ @ehrmnSlidesTheorie: OCR-D Ground Truth10’ @tboenigSlidesTheorie: OCR-D Repository15’ @VolkerHartmannSlides (Google Slides)Slides (PowerPoint)Demo (hackmd)Theorie: OCR-D Spezifikationen und Software15’ @kbaSlidesPraxis: Installation des OCR-D Stack30’ @kba, @VolkerHartmannSetup guidePause (30’)Praxis: Erstellen von Ground Truth30’ @tboenigGuidePraxis: OCR-D auf existierendes METS anwenden30’ @kbaGuidePraxis: OCR-D auf willkürliche Bilder anwenden15’ @kbaGuidePraxis: OCRD-ZIP erzeugen und untersuchenGuide",
+ "url": " /slides/2019-03-25-dhd/"
+ },
+
+
{
"slug": "de-spec",
"title": "",
@@ -612,7 +612,7 @@
{
"slug": "en-spec-web-api-html",
"title": "Web API",
- "content" : "# Web API## Terminology* **Processing Worker**: a Processing Worker is an [OCR-D Processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor) running as a worker, i.e. listening to the Process Queue, pulling new jobs when available, processing them, and pushing the updated job statuses back to the queue if necessary.* **Workflow Server**: a Workflow Server is a server which exposes REST endpoints in the `Workflow` section of the [Web API specification](openapi.yml). In particular, for each `POST /workflow/{workflow-id}` request, the corresponding Nextflow script is executed. The script comprises a chain of call to the `POST /processor/{executable}` endpoint in an appropriate order.* **Processing Server**: a Processing Server is a server which exposes REST endpoints in the `Processing` section of the [Web API specification](openapi.yml). In particular, for each `POST /processor/{executable}` request, a Processing Message is added to the respective Job Queue.* **Process Queue**: a Process Queue is a queueing system for workflow jobs (i.e. single processor runs on one workspace) to be executed by Processing Workers and to be enqueued by the Workflow Server via the Processing Server. In our implementation, it's [RabbitMQ](https://www.rabbitmq.com/).* **Job queue**: one or many queues in the Process Queue, which contains processing messages. Processing Workers listen to the job queues.* **Result queue**: one or many queues in the Process Queue, which contains result messages. Depending on the configuration in the processing messages, Processing Workers might publish result messages to these queues. A 3rd-party service can listen to these queues to get updated about the job status.* **Processing message**: a message published to the job queue. This message contains necessary information for the Processing Worker to process data and perform actions after the processing has finished. These actions include `POST` ing the result message to the provided callback URL, or publishing the result message to the result queue. The schema of processing messages can be found [here](web_api/processing-message.schema.yml).* **Result message**: a message published to the result queue. This message contains information about a job (ID, status, etc.). Depending on the configuration in the processing message, a result message can be `POST`ed to the callback URL, published to the result queue, or both. The schema for result messages can be found [here](web_api/result-message.schema.yml).## Why do we need a Web API?After having processors running locally via the [CLI](https://ocr-d.de/en/spec/cli), communication over network is thenatural extension. This feature will improve the flexibility, scalability and reliability of the system. Thisspecification presents ideas behind the endpoints, how to use them, and technical details happening in the background.## The SpecificationThe Web API specification can be found [here](openapi.yml). It followsthe [OpenAPI specification](https://swagger.io/specification/). There are 4 parts to be implemented: discovery,processing, workflow, and workspace.**Discovery**: The service endpoints in this section provide information about the server. They include, but are notlimited to, hardware configuration, installed processors, and information about each processor.**Processing**: Via the service endpoints in this section, one can get information about aspecific [processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor), trigger a processor run, and check the statusof a running processor. By exposing these endpoints, the server can encapsulate the detailed setup of the system andoffer users a single entry to the processors. The implementation of this section is providedby [OCR-D/core](https://github.com/OCR-D/core). Implementors do not need to implement it themselves, they can reuseand/or extend the reference implementation from OCR-D/core.**Workflow**: Beyond single processors, one can manageentire [workflows](https://ocr-d.de/en/spec/glossary#ocr-d-workflow), i.e. a series of connected processorinstances. In this spec, a workflow amounts to a [Nextflow](https://www.nextflow.io/) script. Some informationabout Nextflow and how to use it in OCR-D is documented [in the Nextflow spec](nextflow).**Workspace**: The service endpoints in this section concern data management, which in OCR-D is handledvia [workspaces](https://ocr-d.de/en/spec/glossary#workspace). (A workspace is the combination ofa [METS](https://ocr-d.de/en/spec/mets) file and any number of referenced files already downloaded, i.e. with locationsrelative to the METS file path.) Processing (via single processors or workflows) always refers to existing workspaces,i.e. workspaces residing in the server's filesystem.## UsageWhen a system implements the Web API completely, it can be used as follows:1. Retrieve information about the system via endpoints in the `Discovery` section.2. Create a workspace (from an [OCRD-ZIP](https://ocr-d.de/en/spec/ocrd_zip) or METS URL) via the `POST /workspace` endpoint and get back a workspace ID.3. Create a workflow by uploading a Nextflow script to the system via the `POST /workflow` endpoint and get back a workflow ID.4. One can either: * Trigger a single processor on a workspace by calling the `POST /processor/{executable}` endpoint with the chosen processor name, workspace ID and parameters, or * Start a workflow on a workspace by calling the `POST /workflow/{workflow-id}` endpoint with the chosen workflow ID and workspace ID. * In both cases, a job ID is returned.5. With the given job ID, it is possible to check the job status by calling: * `GET /processor/{executable}/{job-id}` for a single processor, or * `GET /workflow/{workflow-id}/{job-id}` for the workflow.6. Download the resulting workspace via the `GET /workspace/{workspace-id}` endpoint and get back an OCRD-ZIP. Set the request header to `Accept: application/json` in case you only want the meta-data of the workspace but not the files.## Suggested OCR-D System ArchitectureThere are various ways to build a system which implements this Web API. In this section, we describe a distributedarchitecture, which greatly improves the scalability, flexibility, and reliability of the system compared tothe [CLI](https://ocr-d.de/en/spec/cli) and the Distributed Processor REST Calls approach. Fig. 1: OCR-D System Architecture In this architecture, all servers are implemented using [FastAPI](https://fastapi.tiangolo.com/). Behind the scene, itruns [Uvicorn](https://www.uvicorn.org/), an [ASGI](https://asgi.readthedocs.io/en/latest/) web server implementationfor Python. [RabbitMQ](https://www.rabbitmq.com/) is used for the Process Queue, and [MongoDB](https://www.mongodb.com/)is the database system. There are many options for a reverse proxy, such as Nginx, Apache, or HAProxy. From our side, werecommend using [Traefik](https://doc.traefik.io/traefik/).### DescriptionAs shown in Fig. 1, each section in the [Web API specification](#the-specification) is implemented by different servers,which are Discovery Server, Processing Server, Workflow Server, and Workspace Server respectively. Although each serverin the figure is deployed on its own machine, it is completely up to the implementors to decide which machines run whichservers. However, having each processor run on its own machine reduces the risk of version and resource conflicts.Furthermore, the machine can be customized to best fit the processor's hardware requirements and throughput demand. Forexample, some processors need GPU computation, while others do not, or some need more CPU capacity while others needmore memory.**Processing**: since the `Processing` section is provided by [OCR-D Core](https://github.com/OCR-D/core), implementorsdo not need to implement Processing Server, Process Queue, and Processing Worker themselves, they can reuse/customizethe existing implementation. Once a request arrives, it will be pushed to a job queue. A job queue always has the samename as its respective processors. For example, `ocrd-olena-binarize`processors listen only to the queuenamed `ocrd-olena-binarize`. A Processing Worker, which isan [OCR-D Processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor) running as a worker, listens to the queue, pullsnew jobs when available, processes them, and push the job statuses back to the queue if necessary. One normally does notrun a Processing Worker directly, but via a Processing Server. Job statuses can be pushed back to the queue, dependingon the [job configuration](#process-queue), so that other services get updates and act accordingly.**Database**: in this architecture, a database is required to store information such as users requests, jobs statuses,workspaces, etc. [MongoDB](https://www.mongodb.com/) is required here.**Network File System**: in order to avoid file transfer between different machines, it is highly recommended to havea [Network File System (NFS)](https://en.wikipedia.org/wiki/Network_File_System) set up. With NFS, all ProcessingServers(specifically processors) can work in a shared storage environment and access files as if they are local files.To get data into the NFS, one could use the `POST /workspace` endpoint toupload [OCRD-ZIP](https://ocr-d.de/en/spec/ocrd_zip)files. However, this approach is only appropriate for testing orvery limited data sizes. Usually, Workspace Server should be able to pull data from other storages.### Processing ServerThe Processing Server is a server which exposes REST endpoints in the `Processing` section ofthe [Web API specification](openapi.yml). In the queue-based system architecture, a Processing Server is responsible fordeployment management and enqueueing workflow jobs. For the former, a Processing Server can deploy, re-use, and shutdownProcessing Workers, Process Queue, and Database, depending on the configuration. For the latter, it decodes requests anddelegates them to the Process Queue.To start a Processing Server, run```shell$ ocrd processing-server --address=: /path/to/config.yml```This command starts a Processing Server on the provided IP address and port. It accepts only one argument, which is thepath to a configuration file. The schema of a configuration file can be found [here](web_api/config.schema.yml). Belowis a small example of how the file might look like.```yamlprocess_queue: address: localhost port: 5672 credentials: username: admin password: admin ssh: username: cloud path_to_privkey: /path/to/filedatabase: address: localhost port: 27017 credentials: username: admin password: admin ssh: username: cloud password: "1234"hosts: - address: localhost username: cloud password: "1234" workers: - name: ocrd-cis-ocropy-binarize number_of_instance: 2 deploy_type: native - name: ocrd-olena-binarize number_of_instance: 1 deploy_type: docker - address: 134.76.1.1 username: tdoan path_to_privkey: /path/to/file workers: - name: ocrd-eynollah-segment number_of_instance: 1 deploy_type: native```There are three main sections in the configuration file.1. `process_queue`: it contains the `address` and `port`, where the Process Queue was deployed, or will be deployed with the specified `credentials`. If the `ssh` property is presented, the Processing Server will try to connect to the `address` via `ssh` with provided `username` and `password` and deploy [RabbitMQ](https://www.rabbitmq.com/) at the specified `port`. The remote machine must have [Docker](https://www.docker.com/) installed since the deployment is done via Docker. Make sure that the provided `username` has enough rights to run Docker commands. In case the `ssh` property is not presented, the Processing Server assumes that RabbitMQ was already deployed and just uses it.2. `database`: this section also contains the `address` and `port`, where the [MongoDB](https://www.mongodb.com/) is running, or will run. If `credentials` is presented, it will be used when deploying and connecting to the database. The `ssh` section behaves exactly the same as described in the `process_queue` section above.3. `hosts`: this section contains a list of hosts, usually virtual machines, where Processing Workers should be deployed. To be able to connect to a host, an `address` and `username` are required, then comes either `password` or `path_to_privkey` (path to a private key). All Processing Workers, which will be deployed, must be declared under the `workers` property. In case `deploy_type` is `docker`, make sure that [Docker](https://www.docker.com/) is installed in the target machine and the provided `username` has enough rights to execute Docker commands.Among three sections, only the `process_queue` is required. However, if `hosts` is present, `database` must be thereas well. For more information, please check the [configuration file schema](web_api/config.schema.yml).### Process QueueBy using a queuing system for individual per-workspace per-job processor runs, specifically as message queueingwith [RabbitMQ](https://www.rabbitmq.com/), the reliability and flexibility of the Processing Server are greatlyimproved over a system directly coupling the workflow engine and distributed processor instances.In our implementation of the Process Queue, manual acknowledgement mode is used. This means, when a Processing Workerfinishes successfully, it sends a positive ACK signal to RabbitMQ. In case of failure, it tries again three times beforesending a negative ACK signal. When a negative signal is received, RabbitMQ will re-queue the message. If there is notany ACK signal sent for any reason (e.g. consumer crash, power outage, network problem, etc.), RabbitMQ willautomatically re-queue the message after timeout, which is 30 minutes by default. This behavior, however, canbe [overridden](https://www.rabbitmq.com/consumers.html#acknowledgement-timeout) by setting another value forthe `consumer_timeout` property in the [`rabbitmq.conf`](https://www.rabbitmq.com/configure.html#config-file) file.To avoid processing the same input twice (in case of re-queuing), a Processing Worker first checksthe [`redeliver`](https://www.rabbitmq.com/confirms.html#automatic-requeueing) property to see if this message wasre-queued. If yes, and the status of this process in the database is not `SUCCESS`, it will process the data describedin the message again.When a Processing Server receives a request, it creates a message based on the request content, then push it to ajob queue. A job queue always has the same name as its respective processors. Forexample, `ocrd-olena-binarize` processors listen only to the job queue named `ocrd-olena-binarize`. Below is an exampleof how a message looks like. For a detailed schema, please checkthe [message schema](web_api/processing-message.schema.yml).```yamljob_id: uuidprocessor_name: ocrd-cis-ocropy-binarizepath_to_mets: /path/to/mets.xmlinput_file_grps: - OCR-D-DEFAULToutput_file_grps: - OCR-D-BINpage_id: PHYS_001,PHYS_002parameters: params_1: 1 params_2: 2result_queue_name: ocrd-cis-ocropy-binarize-resultcallback_url: https://my.domain.com/callbackcreated_time: 1668782988590```In the message content, `job_id`, `processor_name`, and `created_time` are added by the Processing Server, while therest comes from the body of the `POST /processor/{executable}` request.Instead of `path_to_mets`, one can also use `workspace_id` to specify a workspace. An ID of a workspace can be obtainedfrom the Workspace Server.In case `result_queue_name` property is presented, the result of the processing will be pushed to the queue with theprovided name. If the queue does not exist yet, it will be created on the fly. This is useful when there is anotherservice waiting for the results of processing. That service can simply listen to that queue and will be immediatelynotified when the results are available. Below is a simple Python script to demonstrate how a service can listen tothe `result_queue_name` and act accordingly.```pythonimport pika, sys, osdef main(): credentials = pika.PlainCredentials('username', 'password') connection = pika.BlockingConnection(pika.ConnectionParameters(host='my.domain.name', port=5672, credentials=credentials)) channel = connection.channel() # Create the result queue, in case it does not exist yet result_queue_name = 'ocrd-cis-ocropy-binarize-result' channel.queue_declare(queue=result_queue_name) def callback(ch, method, properties, body): print(' [x] Received %r' % body) channel.basic_consume(queue=result_queue_name, on_message_callback=callback, auto_ack=True) print(' [*] Waiting for job results.) channel.start_consuming()```It is important that the result queue exists before one starts listening on it, otherwise an error is thrown. The bestway to ensure this is trying to create the result queue in the listener service, as shown in the Python script above. InRabbitMQ, this action is idempotent, which means that the creation only happens if the queue doesn't exist yet,otherwise nothing will happen. For more information, please checkthe [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html).If the `callback_url` in the processing message is set, a `POST` request will be made to the provided endpoint when theprocessing is finished. The body of the request is the result message described below.The schema for result messages can be found [here](web_api/result-message.schema.yml). This message is sent to thecallback URL or to the result queue, depending on the configuration in the processing message. An example of the messagelooks like this:```yamljob_id: uuidstatus: SUCCESSpath_to_mets: /path/to/mets.xml```With the returned `job_id`, one can retrieve more information by sending a `GET` request tothe `/processor/{executable}/{job_id}` endpoint, or to `/processor/{executable}/{job_id}/log` to get all logs of thatjob.### Processing WorkerThere is normally no need to start (or stop) a Processing Worker manually, since it can be managed by a ProcessingServer via a [configuration file](#processing-server). However, if it is necessary to do so, there are two ways to starta Processing Worker:```shell# 1. Use ocrd CLI bundled with OCR-D/core$ ocrd server --type=worker --queue= --database=# 2. Use processor name$ --server --type=worker --queue= --database=```* `--queue`: a [Rabbit MQ connection string](https://www.rabbitmq.com/uri-spec.html) to a running instance.* `--database`: a [MongoDB connection string](https://www.mongodb.com/docs/manual/reference/connection-string/) to a running instance.### DatabaseA database is required to store necessary information such as users requests, jobs statuses, workspaces,etc. [MongoDB](https://www.mongodb.com/) is used in this case. To connect to MongoDB via a Graphical UserInterface, [MongoDB Compass](https://www.mongodb.com/products/compass) is recommended.When a Processing Worker connects to the database for the first time, it will create a database called `ocrd`.For collections, each processor creates and works on a collection with the same name as its own. For example,all `ocrd-olena-binarize` processors will read and write to the `ocrd-olena-binarize` collection only.",
+ "content" : "# Web API## Terminology* **Processing Worker**: a Processing Worker is an [OCR-D Processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor) running as a worker, i.e. listening to the Process Queue, pulling new jobs when available, processing them, and pushing the updated job statuses back to the queue if necessary.* **Workflow Server**: a Workflow Server is a server which exposes REST endpoints in the `Workflow` section of the [Web API specification](openapi.yml). In particular, for each `POST /workflow/{workflow-id}` request, the corresponding Nextflow script is executed. The script comprises a chain of call to the `POST /processor/{executable}` endpoint in an appropriate order.* **Processing Server**: a Processing Server is a server which exposes REST endpoints in the `Processing` section of the [Web API specification](openapi.yml). In particular, for each `POST /processor/{executable}` request, a Processing Message is added to the respective Job Queue.* **Process Queue**: a Process Queue is a queueing system for workflow jobs (i.e. single processor runs on one workspace) to be executed by Processing Workers and to be enqueued by the Workflow Server via the Processing Server. In our implementation, it's [RabbitMQ](https://www.rabbitmq.com/).* **Job queue**: one or many queues in the Process Queue, which contains processing messages. Processing Workers listen to the job queues.* **Result queue**: one or many queues in the Process Queue, which contains result messages. Depending on the configuration in the processing messages, Processing Workers might publish result messages to these queues. A 3rd-party service can listen to these queues to get updated about the job status.* **Processing message**: a message published to the job queue. This message contains necessary information for the Processing Worker to process data and perform actions after the processing has finished. These actions include `POST` ing the result message to the provided callback URL, or publishing the result message to the result queue. The schema of processing messages can be found [here](web_api/processing-message.schema.yml).* **Result message**: a message published to the result queue. This message contains information about a job (ID, status, etc.). Depending on the configuration in the processing message, a result message can be `POST`ed to the callback URL, published to the result queue, or both. The schema for result messages can be found [here](web_api/result-message.schema.yml).## Why do we need a Web API?After having processors running locally via the [CLI](https://ocr-d.de/en/spec/cli), communication over network is thenatural extension. This feature will improve the flexibility, scalability and reliability of the system. Thisspecification presents ideas behind the endpoints, how to use them, and technical details happening in the background.## The SpecificationThe Web API specification can be found [here](openapi.yml). It followsthe [OpenAPI specification](https://swagger.io/specification/). There are 4 parts to be implemented: discovery,processing, workflow, and workspace.**Discovery**: The service endpoints in this section provide information about the server. They include, but are notlimited to, hardware configuration, installed processors, and information about each processor.**Processing**: Via the service endpoints in this section, one can get information about aspecific [processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor), trigger a processor run, and check the statusof a running processor. By exposing these endpoints, the server can encapsulate the detailed setup of the system andoffer users a single entry to the processors. The implementation of this section is providedby [OCR-D/core](https://github.com/OCR-D/core). Implementors do not need to implement it themselves, they can reuseand/or extend the reference implementation from OCR-D/core.**Workflow**: Beyond single processors, one can manageentire [workflows](https://ocr-d.de/en/spec/glossary#ocr-d-workflow), i.e. a series of connected processorinstances. In this spec, a workflow amounts to a [Nextflow](https://www.nextflow.io/) script. Some informationabout Nextflow and how to use it in OCR-D is documented [in the Nextflow spec](nextflow).**Workspace**: The service endpoints in this section concern data management, which in OCR-D is handledvia [workspaces](https://ocr-d.de/en/spec/glossary#workspace). (A workspace is the combination ofa [METS](https://ocr-d.de/en/spec/mets) file and any number of referenced files already downloaded, i.e. with locationsrelative to the METS file path.) Processing (via single processors or workflows) always refers to existing workspaces,i.e. workspaces residing in the server's filesystem.## UsageWhen a system implements the Web API completely, it can be used as follows:1. Retrieve information about the system via endpoints in the `Discovery` section.2. Create a workspace (from an [OCRD-ZIP](https://ocr-d.de/en/spec/ocrd_zip) or METS URL) via the `POST /workspace` endpoint and get back a workspace ID.3. Create a workflow by uploading a Nextflow script to the system via the `POST /workflow` endpoint and get back a workflow ID.4. One can either: * Trigger a single processor on a workspace by calling the `POST /processor/{executable}` endpoint with the chosen processor name, workspace ID and parameters, or * Start a workflow on a workspace by calling the `POST /workflow/{workflow-id}` endpoint with the chosen workflow ID and workspace ID. * In both cases, a job ID is returned.5. With the given job ID, it is possible to check the job status by calling: * `GET /processor/{executable}/{job-id}` for a single processor, or * `GET /workflow/{workflow-id}/{job-id}` for the workflow.6. Download the resulting workspace via the `GET /workspace/{workspace-id}` endpoint and get back an OCRD-ZIP. Set the request header to `Accept: application/json` in case you only want the meta-data of the workspace but not the files.## Suggested OCR-D System ArchitectureThere are various ways to build a system which implements this Web API. In this section, we describe a distributedarchitecture, which greatly improves the scalability, flexibility, and reliability of the system compared tothe [CLI](https://ocr-d.de/en/spec/cli) and the Distributed Processor REST Calls approach. Fig. 1: OCR-D System Architecture In this architecture, all servers are implemented using [FastAPI](https://fastapi.tiangolo.com/). Behind the scene, itruns [Uvicorn](https://www.uvicorn.org/), an [ASGI](https://asgi.readthedocs.io/en/latest/) web server implementationfor Python. [RabbitMQ](https://www.rabbitmq.com/) is used for the Process Queue, and [MongoDB](https://www.mongodb.com/)is the database system. There are many options for a reverse proxy, such as Nginx, Apache, or HAProxy. From our side, werecommend using [Traefik](https://doc.traefik.io/traefik/).### DescriptionAs shown in Fig. 1, each section in the [Web API specification](#the-specification) is implemented by different servers,which are Discovery Server, Processing Server, Workflow Server, and Workspace Server respectively. Although each serverin the figure is deployed on its own machine, it is completely up to the implementors to decide which machines run whichservers. However, having each processor run on its own machine reduces the risk of version and resource conflicts.Furthermore, the machine can be customized to best fit the processor's hardware requirements and throughput demand. Forexample, some processors need GPU computation, while others do not, or some need more CPU capacity while others needmore memory.**Processing**: since the `Processing` section is provided by [OCR-D Core](https://github.com/OCR-D/core), implementorsdo not need to implement Processing Server, Process Queue, and Processing Worker themselves, they can reuse/customizethe existing implementation. Once a request arrives, it will be pushed to a job queue. A job queue always has the samename as its respective processors. For example, `ocrd-olena-binarize`processors listen only to the queuenamed `ocrd-olena-binarize`. A Processing Worker, which isan [OCR-D Processor](https://ocr-d.de/en/spec/glossary#ocr-d-processor) running as a worker, listens to the queue, pullsnew jobs when available, processes them, and push the job statuses back to the queue if necessary. One normally does notrun a Processing Worker directly, but via a Processing Server. Job statuses can be pushed back to the queue, dependingon the [job configuration](#process-queue), so that other services get updates and act accordingly.**Database**: in this architecture, a database is required to store information such as users requests, jobs statuses,workspaces, etc. [MongoDB](https://www.mongodb.com/) is required here.**Network File System**: in order to avoid file transfer between different machines, it is highly recommended to havea [Network File System (NFS)](https://en.wikipedia.org/wiki/Network_File_System) set up. With NFS, all ProcessingServers(specifically processors) can work in a shared storage environment and access files as if they are local files.To get data into the NFS, one could use the `POST /workspace` endpoint toupload [OCRD-ZIP](https://ocr-d.de/en/spec/ocrd_zip)files. However, this approach is only appropriate for testing orvery limited data sizes. Usually, Workspace Server should be able to pull data from other storages.### Processing ServerThe Processing Server is a server which exposes REST endpoints in the `Processing` section ofthe [Web API specification](openapi.yml). In the queue-based system architecture, a Processing Server is responsible fordeployment management and enqueueing workflow jobs. For the former, a Processing Server can deploy, re-use, and shutdownProcessing Workers, Process Queue, and Database, depending on the configuration. For the latter, it decodes requests anddelegates them to the Process Queue.To start a Processing Server, run```shell$ ocrd processing-server --address=: /path/to/config.yml```This command starts a Processing Server on the provided IP address and port. It accepts only one argument, which is thepath to a configuration file. The schema of a configuration file can be found [here](web_api/config.schema.yml). Belowis a small example of how the file might look like.```yamlprocess_queue: address: localhost port: 5672 credentials: username: admin password: admin ssh: username: cloud path_to_privkey: /path/to/filedatabase: address: localhost port: 27017 credentials: username: admin password: admin ssh: username: cloud password: "1234"hosts: - address: localhost username: cloud password: "1234" workers: - name: ocrd-cis-ocropy-binarize number_of_instance: 2 deploy_type: native - name: ocrd-olena-binarize number_of_instance: 1 deploy_type: docker - address: 134.76.1.1 username: tdoan path_to_privkey: /path/to/file workers: - name: ocrd-eynollah-segment number_of_instance: 1 deploy_type: native```There are three main sections in the configuration file.1. `process_queue`: it contains the `address` and `port`, where the Process Queue was deployed, or will be deployed with the specified `credentials`. If the `ssh` property is presented, the Processing Server will try to connect to the `address` via `ssh` with provided `username` and `password` and deploy [RabbitMQ](https://www.rabbitmq.com/) at the specified `port`. The remote machine must have [Docker](https://www.docker.com/) installed since the deployment is done via Docker. Make sure that the provided `username` has enough rights to run Docker commands. In case the `ssh` property is not presented, the Processing Server assumes that RabbitMQ was already deployed and just uses it.2. `database`: this section also contains the `address` and `port`, where the [MongoDB](https://www.mongodb.com/) is running, or will run. If `credentials` is presented, it will be used when deploying and connecting to the database. The `ssh` section behaves exactly the same as described in the `process_queue` section above.3. `hosts`: this section contains a list of hosts, usually virtual machines, where Processing Workers should be deployed. To be able to connect to a host, an `address` and `username` are required, then comes either `password` or `path_to_privkey` (path to a private key). All Processing Workers, which will be deployed, must be declared under the `workers` property. In case `deploy_type` is `docker`, make sure that [Docker](https://www.docker.com/) is installed in the target machine and the provided `username` has enough rights to execute Docker commands.Among three sections, only the `process_queue` is required. However, if `hosts` is present, `database` must be thereas well. For more information, please check the [configuration file schema](web_api/config.schema.yml).### Process QueueBy using a queuing system for individual per-workspace per-job processor runs, specifically as message queueingwith [RabbitMQ](https://www.rabbitmq.com/), the reliability and flexibility of the Processing Server are greatlyimproved over a system directly coupling the workflow engine and distributed processor instances.In our implementation of the Process Queue, manual acknowledgement mode is used. This means, when a Processing Workerfinishes successfully, it sends a positive ACK signal to RabbitMQ. In case of failure, it tries again three times beforesending a negative ACK signal. When a negative signal is received, RabbitMQ will re-queue the message. If there is notany ACK signal sent for any reason (e.g. consumer crash, power outage, network problem, etc.), RabbitMQ willautomatically re-queue the message after timeout, which is 30 minutes by default. This behavior, however, canbe [overridden](https://www.rabbitmq.com/consumers.html#acknowledgement-timeout) by setting another value forthe `consumer_timeout` property in the [`rabbitmq.conf`](https://www.rabbitmq.com/configure.html#config-file) file.To avoid processing the same input twice (in case of re-queuing), a Processing Worker first checksthe [`redeliver`](https://www.rabbitmq.com/confirms.html#automatic-requeueing) property to see if this message wasre-queued. If yes, and the status of this process in the database is not `SUCCESS`, it will process the data describedin the message again.When a Processing Server receives a request, it creates a message based on the request content, then push it to ajob queue. A job queue always has the same name as its respective processors. Forexample, `ocrd-olena-binarize` processors listen only to the job queue named `ocrd-olena-binarize`. Below is an exampleof how a message looks like. For a detailed schema, please checkthe [message schema](web_api/processing-message.schema.yml).```yamljob_id: uuidprocessor_name: ocrd-cis-ocropy-binarizepath_to_mets: /path/to/mets.xmlinput_file_grps: - OCR-D-DEFAULToutput_file_grps: - OCR-D-BINpage_id: PHYS_001,PHYS_002parameters: params_1: 1 params_2: 2result_queue_name: ocrd-cis-ocropy-binarize-resultcallback_url: https://my.domain.com/callbackcreated_time: 1668782988590```In the message content, `job_id`, `processor_name`, and `created_time` are added by the Processing Server, while therest comes from the body of the `POST /processor/{executable}` request.Instead of `path_to_mets`, one can also use `workspace_id` to specify a workspace. An ID of a workspace can be obtainedfrom the Workspace Server.In case `result_queue_name` property is presented, the result of the processing will be pushed to the queue with theprovided name. If the queue does not exist yet, it will be created on the fly. This is useful when there is anotherservice waiting for the results of processing. That service can simply listen to that queue and will be immediatelynotified when the results are available. Below is a simple Python script to demonstrate how a service can listen tothe `result_queue_name` and act accordingly.```pythonimport pika, sys, osdef main(): credentials = pika.PlainCredentials('username', 'password') connection = pika.BlockingConnection(pika.ConnectionParameters(host='my.domain.name', port=5672, credentials=credentials)) channel = connection.channel() # Create the result queue, in case it does not exist yet result_queue_name = 'ocrd-cis-ocropy-binarize-result' channel.queue_declare(queue=result_queue_name) def callback(ch, method, properties, body): print(' [x] Received %r' % body) channel.basic_consume(queue=result_queue_name, on_message_callback=callback, auto_ack=True) print(' [*] Waiting for job results.) channel.start_consuming()```It is important that the result queue exists before one starts listening on it, otherwise an error is thrown. The bestway to ensure this is trying to create the result queue in the listener service, as shown in the Python script above. InRabbitMQ, this action is idempotent, which means that the creation only happens if the queue doesn't exist yet,otherwise nothing will happen. For more information, please checkthe [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html).If the `callback_url` in the processing message is set, a `POST` request will be made to the provided endpoint when theprocessing is finished. The body of the request is the result message described below.The schema for result messages can be found [here](web_api/result-message.schema.yml). This message is sent to thecallback URL or to the result queue, depending on the configuration in the processing message. An example of the messagelooks like this:```yamljob_id: uuidstatus: SUCCESSpath_to_mets: /path/to/mets.xml```With the returned `job_id`, one can retrieve more information by sending a `GET` request tothe `/processor/{executable}/{job_id}` endpoint, or to `/processor/{executable}/{job_id}/log` to get all logs of thatjob.### Processing WorkerThere is normally no need to start (or stop) a Processing Worker manually, since it can be managed by a ProcessingServer via a [configuration file](#processing-server). However, if it is necessary to do so, there are two ways to starta Processing Worker:```shell# 1. Use ocrd CLI bundled with OCR-D/core$ ocrd server --type=worker --queue= --database=# 2. Use processor name$ --server --type=worker --queue= --database=```* `--queue`: a [Rabbit MQ connection string](https://www.rabbitmq.com/uri-spec.html) to a running instance.* `--database`: a [MongoDB connection string](https://www.mongodb.com/docs/manual/reference/connection-string/) to a running instance.### DatabaseA database is required to store necessary information such as users requests, jobs statuses, workspaces,etc. [MongoDB](https://www.mongodb.com/) is used in this case. To connect to MongoDB via a Graphical UserInterface, [MongoDB Compass](https://www.mongodb.com/products/compass) is recommended.When a Processing Worker connects to the database for the first time, it will create a database called `ocrd`.For collections, each processor creates and works on a collection with the same name as its own. For example,all `ocrd-olena-binarize` processors will read and write to the `ocrd-olena-binarize` collection only.",
"url": " /en/spec/web_api.html"
},
diff --git a/docs/sitemap.xml b/docs/sitemap.xml
index 439941923..29529e97e 100644
--- a/docs/sitemap.xml
+++ b/docs/sitemap.xml
@@ -268,10 +268,10 @@
https://ocr-d.de/
-https://ocr-d.de/slides/2019-03-25-dhd/
+https://ocr-d.de/en/spec/
-https://ocr-d.de/en/spec/
+https://ocr-d.de/slides/2019-03-25-dhd/https://ocr-d.de/de/spec/
@@ -401,2506 +401,2506 @@
https://ocr-d.de/assets/kick-off/gt.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T15:04:35+02:00https://ocr-d.de/assets/kick-off/lightning-talks.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T16:28:03+02:00https://ocr-d.de/assets/kick-off/phase3.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T15:04:35+02:00https://ocr-d.de/assets/kick-off/software-development.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T15:04:35+02:00https://ocr-d.de/assets/kick-off/spec_core_ocrd_all.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T15:04:35+02:00https://ocr-d.de/assets/kick-off/web-api.pdf
-2022-11-23T11:49:53+01:00
+2021-08-06T15:04:35+02:00https://ocr-d.de/assets/poster/DFKI.pdf
-2022-11-23T11:49:53+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/G%C3%B6ttingen.pdf
-2022-11-23T11:49:53+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/Leipzig.pdf
-2022-11-23T11:49:53+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/Mainz.pdf
-2022-11-23T11:49:53+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/Mannheim.pdf
-2022-11-23T11:49:54+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/M%C3%BCnchen.pdf
-2022-11-23T11:49:54+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/assets/poster/Wuerzburg.pdf
-2022-11-23T11:49:54+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/cli/
-2022-11-23T11:49:54+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/core/_modules/
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/cli/log.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/cli/ocrd_tool.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/cli/resmgr.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/cli/workspace.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/decorators.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/decorators/loglevel_option.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/decorators/mets_find_options.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/decorators/ocrd_cli_options.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/processor/base.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/processor/builtin/dummy_processor.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/processor/helpers.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/resolver.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/resource_manager.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/task_sequence.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/workspace.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/workspace_backup.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd/workspace_bagger.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_modelfactory.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_agent.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_exif.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_file.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_mets.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_page.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_page_generateds.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/ocrd_xml_base.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/report.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_models/utils.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/deprecate.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/image.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/introspect.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/logging.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/os.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/package_resources.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_utils/str.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/json_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/ocrd_tool_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/ocrd_zip_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/page_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/parameter_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/resource_list_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/workspace_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/xsd_mets_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/xsd_page_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/_modules/ocrd_validators/xsd_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/modules.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.bashlib.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.log.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.ocrd_tool.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.process.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.resmgr.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.validate.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.workspace.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.cli.zip.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.constants.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.decorators.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.decorators.loglevel_option.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.decorators.mets_find_options.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.decorators.ocrd_cli_options.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.decorators.parameter_option.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.processor.base.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.processor.builtin.dummy_processor.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.processor.builtin.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.processor.helpers.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.processor.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.resolver.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.resource_manager.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.task_sequence.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.workspace.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.workspace_backup.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd/ocrd.workspace_bagger.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_modelfactory/modules.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_modelfactory/ocrd_modelfactory.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/modules.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.constants.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_agent.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_exif.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_file.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_mets.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_page.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.ocrd_xml_base.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.report.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_models/ocrd_models.utils.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/modules.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.constants.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.deprecate.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.image.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.introspect.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.logging.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.os.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.package_resources.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_utils/ocrd_utils.str.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/modules.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.constants.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.json_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.ocrd_tool_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.ocrd_zip_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.page_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.parameter_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.resource_list_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.workspace_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.xsd_mets_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.xsd_page_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/api/ocrd_validators/ocrd_validators.xsd_validator.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/genindex.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/py-modindex.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/core/search.html
-2023-02-21T13:47:00+01:00
+2022-12-13T18:29:25+01:00https://ocr-d.de/daten/
-2022-11-23T11:49:54+01:00
+2021-03-18T13:20:15+01:00https://ocr-d.de/de/contact/
-2022-11-23T11:49:54+01:00
+2021-12-09T12:12:51+01:00https://ocr-d.de/de/data/
-2022-11-23T11:49:54+01:00
+2021-12-09T12:12:51+01:00https://ocr-d.de/de/gt-guidelines/labeling/Attribute.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/labeling/Element.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/labeling/Main_schema.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/labeling/OCR-D_GT_labeling_schema_xsd_Element_gt_gt.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:23+01:00https://ocr-d.de/de/gt-guidelines/labeling/OCR-D_GT_labeling_schema_xsd_Main_schema_OCR-D_GT_labeling_schema_xsd.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/Complex_Type.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/Element.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/Main_schema.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/Simple_Type.html
-2022-11-23T11:49:54+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_AdvertRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_AlternativeImageType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_BaselineType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_BorderType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ChartRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ChemRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_CoordsType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_CustomRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GlyphType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeBaseType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeGroupType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemesType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphicRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GridPointsType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GridType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ImageRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LabelType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LabelsType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LayerType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:25+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LayersType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LineDrawingRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MapRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MathsRegionType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MetadataItemType.html
-2022-11-23T11:49:55+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MetadataType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MusicRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_NoiseRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_NonPrintingCharType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_OrderedGroupIndexedType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_OrderedGroupType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PageType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PcGtsType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PrintSpaceType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ReadingOrderType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionRefIndexedType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionRefType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RelationType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RelationsType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RolesType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_SeparatorRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TableCellRoleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TableRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextEquivType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextLineType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:35+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:25+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextStyleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnknownRegionType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnorderedGroupIndexedType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnorderedGroupType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UserAttributeType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UserDefinedType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_WordType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Element_pc_PcGts.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Main_schema_pagecontent_xsd.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_AlignSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ChartTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ColourDepthSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ColourSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ConfSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_GraphicsTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_GroupTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_LanguageSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:23+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_PageTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_PointsType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ProductionSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ReadingDirectionSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ScriptSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextDataTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:21+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextLineOrderSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextTypeSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_UnderlineStyleSimpleType.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/toc.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:35+01:00https://ocr-d.de/de/gt-guidelines/trans/exif_pagexml_konkordanz.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/fa.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/impressum.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/layout.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/trans/leerzeichen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:23+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_4.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_5.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_6.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_7.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/level_1_8.html
-2022-11-23T11:49:56+01:00
+2021-11-02T16:38:07+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_3.html
-2022-11-23T11:49:56+01:00
+2021-11-02T16:38:07+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_und_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_und_3_0.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_und_3_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_und_3_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/level_2_und_3_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/level_3_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/level_3_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/lyAbsatz.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/lyAllgemein.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lyBildbereiche.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/lyBogensignatur.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lyChemische_Symbole.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/lyDiskontinuierlich.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/trans/lyFussnote.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/lyGraphik.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/trans/lyInhaltsverzeichnis.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/lyInitiale.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/lyKarten.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/lyKolumnentitel.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lyKustode.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/lyLeserichtung.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/lyLigatur.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/lyMarginalie.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/lyMathematische_Zeichen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/trans/lyNotenzeichen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lyRand.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/lyRauschen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/lyRelationen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/trans/lySatzspiegel.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/lySchriftarten.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lySeitentypen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/lySeitenzahl.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/lySeparatoren.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:21+01:00https://ocr-d.de/de/gt-guidelines/trans/lySonstiges.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/trans/lyTabellen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/trans/lyTextregionen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/lyTypographie.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lyUeberschrift.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/lyWerbung.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/ly_level_1_5.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/ly_level_2_5.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/lytextregion.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/ocr_d_koordinationsgremium_codierung.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:27+01:00https://ocr-d.de/de/gt-guidelines/trans/page_xml_erweiterungen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/structur_gt.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/trans/structur_gtdefinition.html
-2022-11-23T11:49:56+01:00
+2021-11-02T16:38:07+01:00https://ocr-d.de/de/gt-guidelines/trans/structur_gtgrundlage.html
-2022-11-23T11:49:56+01:00
+2021-11-02T16:38:07+01:00https://ocr-d.de/de/gt-guidelines/trans/structur_gtlevel1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/structur_gtpageformat.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/structurmets2page.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trAnfZeichen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trBeispiele.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/trans/trBruch.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/trDiakritika.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trDokuKonventionen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trErsetzungen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:22+01:00https://ocr-d.de/de/gt-guidelines/trans/trFremdsprache.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:23+01:00https://ocr-d.de/de/gt-guidelines/trans/trGedankenstrich.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trGrundsaetze.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trHandschrift.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trHochgestellteZahl.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trLabeling.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trLevels.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trLigatur.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/trans/trLigaturen2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/trNasalstrich.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/trPage.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trRom.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:23+01:00https://ocr-d.de/de/gt-guidelines/trans/trSchreibungIJ.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trSchreibungR.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trSchreibungS.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trSchreibungUV.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/trSchreibweisen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trSilbentrennung.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/trSonderzeichen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:32+01:00https://ocr-d.de/de/gt-guidelines/trans/trTabellen.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/trUmlaute.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:25+01:00https://ocr-d.de/de/gt-guidelines/trans/trZeichensetzung.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_compareLevel1_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_dia_level_1_0.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:21+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_dia_level_2_0.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_dia_level_3_0.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:31+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:28+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_1_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_1_4.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_2_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_2_4.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:29+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:26+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_level_3_4.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_nasal_level_1.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:34+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_nasal_level_2.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/tr_nasal_level_3.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:24+01:00https://ocr-d.de/de/gt-guidelines/trans/transkription.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/gt-guidelines/trans/trtiefgestellteZahl.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:51:33+01:00https://ocr-d.de/de/module-projects/
-2022-11-23T11:49:56+01:00
+2021-08-06T16:28:03+02:00https://ocr-d.de/de/platforms/
-2022-11-23T11:49:56+01:00
+2021-10-08T12:40:00+02:00https://ocr-d.de/de/publications/
-2022-11-23T11:49:56+01:00
+2021-12-09T12:12:51+01:00https://ocr-d.de/de/user_survey/
-2022-11-23T11:49:56+01:00
+2021-12-09T12:12:51+01:00https://ocr-d.de/docs/
-2022-11-23T11:49:56+01:00
+2021-07-05T12:15:12+02:00https://ocr-d.de/docs/setup/
-2022-11-23T11:49:56+01:00
+2021-07-05T12:15:12+02:00https://ocr-d.de/en/gt-guidelines/labeling/Attribute.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/labeling/Element.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/labeling/Main_schema.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/labeling/OCR-D_GT_labeling_schema_xsd_Element_gt_gt.html
-2022-11-23T11:49:56+01:00
+2022-04-07T15:25:13+02:00https://ocr-d.de/en/gt-guidelines/labeling/OCR-D_GT_labeling_schema_xsd_Main_schema_OCR-D_GT_labeling_schema_xsd.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:06+01:00https://ocr-d.de/en/gt-guidelines/pagexml/Complex_Type.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/Element.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/Main_schema.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/Simple_Type.html
-2022-11-23T11:49:56+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_AdvertRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_AlternativeImageType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_BaselineType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_BorderType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ChartRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ChemRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_CoordsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_CustomRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GlyphType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:08+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeBaseType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeGroupType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemeType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphemesType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GraphicRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GridPointsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_GridType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ImageRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LabelType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LabelsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LayerType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LayersType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_LineDrawingRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MapRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MathsRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MetadataItemType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MetadataType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_MusicRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_NoiseRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_NonPrintingCharType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_OrderedGroupIndexedType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_OrderedGroupType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PageType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PcGtsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_PrintSpaceType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:10+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_ReadingOrderType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionRefIndexedType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionRefType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RelationType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:06+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RelationsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_RolesType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_SeparatorRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TableCellRoleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TableRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextEquivType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextLineType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:10+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_TextStyleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnknownRegionType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:10+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnorderedGroupIndexedType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UnorderedGroupType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UserAttributeType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_UserDefinedType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Complex_Type_pc_WordType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Element_pc_PcGts.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Main_schema_pagecontent_xsd.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_AlignSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ChartTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ColourDepthSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ColourSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ConfSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_GraphicsTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_GroupTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_LanguageSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:08+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_PageTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_PointsType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ProductionSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ReadingDirectionSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_ScriptSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextDataTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:06+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextLineOrderSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_TextTypeSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/pagexml/pagecontent_xsd_Simple_Type_pc_UnderlineStyleSimpleType.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/toc.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:20+01:00https://ocr-d.de/en/gt-guidelines/trans/exif_pagexml_konkordanz.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/fa.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/impressum.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/layout.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/trans/leerzeichen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:08+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_4.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_5.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_6.html
-2022-11-23T11:49:57+01:00
+2022-04-07T15:25:13+02:00https://ocr-d.de/en/gt-guidelines/trans/level_1_7.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/level_1_8.html
-2022-11-23T11:49:57+01:00
+2021-11-01T12:52:48+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_3.html
-2022-11-23T11:49:57+01:00
+2021-11-01T12:52:50+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_4.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_und_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_und_3_0.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:06+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_und_3_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/level_2_und_3_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/level_3_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/level_3_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/lyAbsatz.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/lyAllgemein.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lyBildbereiche.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/lyBogensignatur.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lyChemische_Symbole.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/lyDiskontinuierlich.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/lyFussnote.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/lyGraphik.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/trans/lyInhaltsverzeichnis.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/lyInitiale.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/lyKarten.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/lyKolumnentitel.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lyKustode.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/lyLeserichtung.html
-2022-11-23T11:49:57+01:00
+2022-04-07T15:25:13+02:00https://ocr-d.de/en/gt-guidelines/trans/lyLigatur.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/lyMarginalie.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/lyMathematische_Zeichen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/lyNotenzeichen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lyRand.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/lyRauschen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:10+01:00https://ocr-d.de/en/gt-guidelines/trans/lyRelationen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/trans/lySatzspiegel.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/lySchriftarten.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lySeitentypen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/lySeitenzahl.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/lySeparatoren.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:06+01:00https://ocr-d.de/en/gt-guidelines/trans/lySonstiges.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/trans/lyTabellen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/trans/lyTextregionen.html
-2022-11-23T11:49:57+01:00
+2022-04-07T15:25:13+02:00https://ocr-d.de/en/gt-guidelines/trans/lyTypographie.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lyUeberschrift.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/lyWerbung.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/ly_level_1_5.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/ly_level_2_5.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/lytextregion.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/ocr_d_koordinationsgremium_codierung.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:12+01:00https://ocr-d.de/en/gt-guidelines/trans/page_xml_erweiterungen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/structur_gt.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/trans/structur_gtdefinition.html
-2022-11-23T11:49:57+01:00
+2021-11-01T12:52:57+01:00https://ocr-d.de/en/gt-guidelines/trans/structur_gtgrundlage.html
-2022-11-23T11:49:57+01:00
+2021-11-01T12:52:58+01:00https://ocr-d.de/en/gt-guidelines/trans/structur_gtlevel1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/structur_gtpageformat.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/structurmets2page.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trAnfZeichen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/trBeispiele.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/trBruch.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/trDiakritika.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trDokuKonventionen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trErsetzungen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:07+01:00https://ocr-d.de/en/gt-guidelines/trans/trFremdsprache.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:08+01:00https://ocr-d.de/en/gt-guidelines/trans/trGedankenstrich.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/trGrundsaetze.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/trHandschrift.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trHochgestellteZahl.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trLabeling.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trLevels.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trLigatur.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:19+01:00https://ocr-d.de/en/gt-guidelines/trans/trLigaturen2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/trNasalstrich.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/trPage.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/trRom.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:08+01:00https://ocr-d.de/en/gt-guidelines/trans/trSchreibungIJ.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trSchreibungR.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/trSchreibungS.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trSchreibungUV.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/trSchreibweisen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trSilbentrennung.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/trSonderzeichen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:17+01:00https://ocr-d.de/en/gt-guidelines/trans/trTabellen.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/trUmlaute.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/trZeichensetzung.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_compareLevel1_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_dia_level_1_0.html
-2022-11-23T11:49:57+01:00
+2022-04-07T15:25:13+02:00https://ocr-d.de/en/gt-guidelines/trans/tr_dia_level_2_0.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_dia_level_3_0.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:16+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:13+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_1_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_1_4.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_2_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_2_4.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:14+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:11+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_level_3_4.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_nasal_level_1.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_nasal_level_2.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/tr_nasal_level_3.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:09+01:00https://ocr-d.de/en/gt-guidelines/trans/transkription.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/gt-guidelines/trans/trtiefgestellteZahl.html
-2022-11-23T11:49:57+01:00
+2022-02-28T13:52:18+01:00https://ocr-d.de/en/module-projects/
-2022-11-23T11:49:57+01:00
+2021-08-06T16:28:03+02:00https://ocr-d.de/en/ocrd.html
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/en/platforms/
-2022-11-23T11:49:57+01:00
+2021-10-08T12:40:00+02:00https://ocr-d.de/en/user_survey/
-2022-11-23T11:49:57+01:00
+2021-12-09T12:12:51+01:00https://ocr-d.de/en/workflow/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/goto/apidocs/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/calendar/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/gitter/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/gt-call/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:25+01:00https://ocr-d.de/goto/gt-guidelines/
-2023-02-21T13:47:08+01:00
+2023-03-24T15:19:25+01:00https://ocr-d.de/goto/gt-repo/
-2023-04-04T10:39:02+02:00
+2023-03-24T15:52:55+01:00https://ocr-d.de/goto/logo/
-2023-02-21T13:47:00+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/mindmap/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/tech-call/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:25+01:00https://ocr-d.de/goto/wiki/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/goto/zenhub/
-2022-11-23T11:49:57+01:00
+2023-03-24T15:19:26+01:00https://ocr-d.de/gt-repo/
-2022-11-21T11:19:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/mets/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/ocrd-calendar.html
-2022-11-23T11:49:57+01:00
+2021-10-18T12:23:07+02:00https://ocr-d.de/page/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/sites/all/GTDaten/IndexGT.html
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2018-09-18/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2018-10-05-baltica/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2018-10-05-baltica/slides.pdf
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/
-2022-11-23T11:49:57+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/demo.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/auto-animate.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/backgrounds.html
-2022-03-21T15:36:57+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/barebones.html
-2022-03-21T15:36:57+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/layout-helpers.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/markdown.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/math.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/media.html
-2022-03-21T15:36:57+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/multiple-presentations.html
-2022-03-21T15:36:57+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/examples/transitions.html
-2022-03-21T15:36:57+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/plugin/notes/speaker-view.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-auto-animate.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-dependencies-async.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-dependencies.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-grid-navigation.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-iframe-backgrounds.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-iframes.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-markdown.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-multiple-instances-es5.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-multiple-instances.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-pdf.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-plugins.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test-state.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-02-27-ocrd-dev-ws/reveal/test/test.html
-2023-03-23T15:18:49+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/2019-03-25-dhd/intro-ocr.html
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2019-03-25-dhd/intro-ocrd-software.html
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/2019-05-09-gt/
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Abschlussworkshop-2020/Abschlussworkshop_%C3%9Cberblick.pdf
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Abschlussworkshop-2020/OCR-D_Spezifikationen_Lessons_Learned.pdf
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Abschlussworkshop-2020/OCR-D_in_Bibliotheken.pdf
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Akademienunion_2017/slides/figures/workflow.pdf
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Akademienunion_2017/slides/ocr-perspektiven.pdf
-2022-11-23T11:49:58+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/DH-Kolloquium-2017/dh-kolloquium-2017.pdf
-2022-11-23T11:49:59+01:00
+2021-03-18T13:20:16+01:00https://ocr-d.de/slides/Ground%20Truth_%20Grundwahrheit%20oder%20Ad-Hoc-L%C3%B6sung_%20Wo%20stehen%20die%20Digital%20Humanities_.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/MWW-2018/MWW-Workshop_Wieviel%20sind%2085%25%20wert_2018-05-24.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/OCR-Workshop-2017/slides/census1961/Digitalisierung%20von%20historischen%20Zensus-Tabellen%20-%20Berlin%202017.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/OCR-Workshop-2017/slides/synthetic-training/synthetic-training.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/OCR-Workshop-2017/slides/systemarchitektur/OCR-D-Workshop-Prabhune-Neudecker.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/OCR-Workshop-2017/slides/tesseract/OCR-Workshop-Tesseract.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/PhilTag-2016/OCR-D_Wurzburg-13PhilTag.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/PhilTag-2018/
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/Retrodigitalisierung-2020-02-18/TIB_Retrodigitalisierung.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/Rostock-2016-02-09/OCR-D_Rostock_09-02-2016.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/Slides-2018-06-26/
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/Transkribus-WS-2017/slides/gt_compilation.pdf
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/ocrd-2018-07-11/demo-gocr.html
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/ocrd-2018-07-11/demo-ocrad.html
-2022-11-23T11:50:00+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/ocrd-2018-07-11/
-2022-11-23T11:50:01+01:00
+2021-03-18T13:20:17+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/demo.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/auto-animate.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/backgrounds.html
-2022-03-21T15:36:58+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/barebones.html
-2022-03-21T15:36:58+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/layout-helpers.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/markdown.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/math.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/media.html
-2022-03-21T15:36:58+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/multiple-presentations.html
-2022-03-21T15:36:58+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/examples/transitions.html
-2022-03-21T15:36:58+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/plugin/notes/speaker-view.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-auto-animate.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-dependencies-async.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-dependencies.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-grid-navigation.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-iframe-backgrounds.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-iframes.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-markdown.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-multiple-instances-es5.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-multiple-instances.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-pdf.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-plugins.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test-state.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00https://ocr-d.de/slides/ocrd-2018-07-11/reveal/test/test.html
-2023-03-23T15:18:50+01:00
+2021-03-18T13:41:00+01:00
diff --git a/repo/ocr-d.github.io b/repo/ocr-d.github.io
index 50b91e07d..d8b488c3d 160000
--- a/repo/ocr-d.github.io
+++ b/repo/ocr-d.github.io
@@ -1 +1 @@
-Subproject commit 50b91e07daa3fc950f9392037fd5e0ec4122921d
+Subproject commit d8b488c3d285acca377b083e27aee117cee5b374
diff --git a/repo/spec b/repo/spec
index 1868cde6c..3e7335cd9 160000
--- a/repo/spec
+++ b/repo/spec
@@ -1 +1 @@
-Subproject commit 1868cde6c1452319eeb25d6ad3c9abaea98ad7c1
+Subproject commit 3e7335cd968c936c7f7f924f593710588e980742
diff --git a/site/en/spec/CHANGELOG.md b/site/en/spec/CHANGELOG.md
index 7013249d6..2c9731e21 100644
--- a/site/en/spec/CHANGELOG.md
+++ b/site/en/spec/CHANGELOG.md
@@ -14,6 +14,12 @@ Versioned according to [Semantic Versioning](http://semver.org/).
## Unreleased
+## [3.23.0] - 2023-03-16
+
+Added:
+
+ * JSON-schema for QUIVER / QA Spec, #236
+
## [3.22.0] - 2023-03-03
Added:
@@ -495,6 +501,8 @@ Removed
Initial Release
+[3.23.0]: ../../compare/v3.23.0...v3.22.0
+[3.22.0]: ../../compare/v3.22.0...v3.21.0
[3.21.0]: ../../compare/v3.21.0...v3.20.0
[3.20.0]: ../../compare/v3.20.0...v3.19.0
[3.19.0]: ../../compare/v3.19.0...v3.18.0
diff --git a/site/en/spec/web_api.md b/site/en/spec/web_api.md
index eed77b27b..8c9c33089 100644
--- a/site/en/spec/web_api.md
+++ b/site/en/spec/web_api.md
@@ -98,14 +98,12 @@ There are various ways to build a system which implements this Web API. In this
architecture, which greatly improves the scalability, flexibility, and reliability of the system compared to
the [CLI](https://ocr-d.de/en/spec/cli) and the Distributed Processor REST Calls approach.
-
+
In this architecture, all servers are implemented using [FastAPI](https://fastapi.tiangolo.com/). Behind the scene, it
runs [Uvicorn](https://www.uvicorn.org/), an [ASGI](https://asgi.readthedocs.io/en/latest/) web server implementation