backend merge requestshttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests2024-02-19T12:44:41Zhttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/268fix: AnnotationAPI | target holds array2024-02-19T12:44:41ZMichelle Weidlingfix: AnnotationAPI | target holds arrayThis MR fixes the falsely implemented AnnotationAPI to comply to the specs.This MR fixes the falsely implemented AnnotationAPI to comply to the specs.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/266fix: missing white space after element2024-01-09T07:43:22ZMichelle Weidlingfix: missing white space after elementSee https://projects.academiccloud.de/work_packages/21813.
Usually, in `tei:choice` the `tei:sic` comes before the `tei:corr`. However, this isn't always the case. since a white space is inserted during the processing of `tei:corr`, it ...See https://projects.academiccloud.de/work_packages/21813.
Usually, in `tei:choice` the `tei:sic` comes before the `tei:corr`. However, this isn't always the case. since a white space is inserted during the processing of `tei:corr`, it might be missing in the HTML when `tei:corr` appears before `tei:sic`. This fix ensures the correct sequence in the HTML.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/265build: update textgrid-connect-standalone2024-01-08T09:38:39ZMichelle Weidlingbuild: update textgrid-connect-standaloneThis MR upgrade `textgrid-connect-standalone` to version 2.0.0 which is completely independent from SPARQL.
This step is necessary since TextGrid's triplestore seems to have some error which results in already deleted resources being re...This MR upgrade `textgrid-connect-standalone` to version 2.0.0 which is completely independent from SPARQL.
This step is necessary since TextGrid's triplestore seems to have some error which results in already deleted resources being returned. The REST interface which is used in `textgrid-connect-standalone` does not have this problem.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/264fix: consider only first ending motif of several2023-12-08T07:52:09ZMichelle Weidlingfix: consider only first ending motif of severalIn some cases we have motif annotations in the data that have an ending processing instruction, but not a matching starting one. This can happen during revision or due to copy and paste errors.
This leads to several ending motifs being ...In some cases we have motif annotations in the data that have an ending processing instruction, but not a matching starting one. This can happen during revision or due to copy and paste errors.
This leads to several ending motifs being detected for one starting motif during the creation of the motif expansion intermediate format.
To mitigate this effect, we now consider only the first ending motif.
Closes #269Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/263Resolve "ERROR on trigger:after-create-document(xs:anyURI) during import"2023-12-08T07:31:24ZMichelle WeidlingResolve "ERROR on trigger:after-create-document(xs:anyURI) during import"Sogdian and Neo-Aramaic are now considered as languages (but not delivered via TextAPI)
Closes #270Sogdian and Neo-Aramaic are now considered as languages (but not delivered via TextAPI)
Closes #270Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/262build: bump textgrid-connect-standalone2023-12-07T11:59:31ZMichelle Weidlingbuild: bump textgrid-connect-standaloneMichelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/259Fix ids from tokenizing2023-09-04T12:38:02ZMichelle WeidlingFix ids from tokenizingDuring the creation of the ZIP file used during the collation each word receives an ID. This ID can differ from the ID in the temporary files. To avoid this, the ZIP creation now relies on the temporary files as well.During the creation of the ZIP file used during the collation each word receives an ID. This ID can differ from the ID in the temporary files. To avoid this, the ZIP creation now relies on the temporary files as well.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/258fix: handle empty tokens2023-09-01T10:57:13ZMichelle Weidlingfix: handle empty tokensThis MR ignores empty token in the JSON creation.
During the normalization of the texts, some code points for diactrics and other special characters are removed in order to simplify the collation process. As a result, normalized tokens ...This MR ignores empty token in the JSON creation.
During the normalization of the texts, some code points for diactrics and other special characters are removed in order to simplify the collation process. As a result, normalized tokens are sometimes empty strings which cause CollateX to throw an exception.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/257Fix zip creation2023-09-01T06:42:22ZMichelle WeidlingFix zip creationMichelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/256fix: lookup of relevant pages2023-08-24T12:05:28ZMichelle Weidlingfix: lookup of relevant pagesThe lookup for relevant pages in a TEI file has not considered the cases where both transcription and transliteration have provided facsimiles.The lookup for relevant pages in a TEI file has not considered the cases where both transcription and transliteration have provided facsimiles.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/255Fix catchword display2023-08-22T06:16:02ZMichelle WeidlingFix catchword displayWith this MR catchwords are now mentioned in the AnnotationAPI (filed under editorial comments).With this MR catchwords are now mentioned in the AnnotationAPI (filed under editorial comments).Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/254Words break together with line break2023-08-18T10:23:38ZMichelle WeidlingWords break together with line breakIn some cases words are interrupted by a line break and continued in the next line.
This phenomenon is now indicated by adding a dash in angle brackets in accordance with the Leiden Conventions:
![image001](/uploads/a79a7ed6faea77038e9...In some cases words are interrupted by a line break and continued in the next line.
This phenomenon is now indicated by adding a dash in angle brackets in accordance with the Leiden Conventions:
![image001](/uploads/a79a7ed6faea77038e963ab1d112c69b/image001.png)Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/253Highlight inline verses2023-08-17T10:47:08ZMichelle WeidlingHighlight inline versesWith this MR, inline verses are rendered in italics, and an entry about them is added to the editorial part of the AnnotationAPI.With this MR, inline verses are rendered in italics, and an entry about them is added to the editorial part of the AnnotationAPI.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/252fix: retrieving last node for fragment2023-08-15T07:35:12ZMichelle Weidlingfix: retrieving last node for fragmentWhen creating the page fragments we now look for the very last node on a page, whatever its name, not explicitly a `tei:ab`.When creating the page fragments we now look for the very last node on a page, whatever its name, not explicitly a `tei:ab`.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/251fix: lookup of facsimile uri2023-08-15T06:56:26ZMichelle Weidlingfix: lookup of facsimile uriFormerly, we implicitly expected that only `tei:pb` within `tei:text[@type = 'transcription']` will have a `@facs` attribute. Page beginnings within other text types were not allowed to have `@facs`.
We now explicitly filter only for `t...Formerly, we implicitly expected that only `tei:pb` within `tei:text[@type = 'transcription']` will have a `@facs` attribute. Page beginnings within other text types were not allowed to have `@facs`.
We now explicitly filter only for `tei:pb[ancestor::tei:text[@type = 'transcription']]` in order to retrieve the facsimile URI. This helps us being more robust when `@facs` appears in other text types' `tei:pb`s.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/250Add columns2023-08-15T06:14:08ZMichelle WeidlingAdd columnsThis MR adds an HTML serialization for two-columned layouts, e.g. in Vat. sir. 159.This MR adds an HTML serialization for two-columned layouts, e.g. in Vat. sir. 159.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/249fix: poetic passages2023-08-08T05:56:26ZMichelle Weidlingfix: poetic passagesThe poetic parts of the texts had the CSS class `lg` which collides with CSS rules given by the TIDO viewer.
To avoid this, `lg` has been renamed to `tei-lg` and the CSS has been adjusted accordingly.
A re-import of the data is necessar...The poetic parts of the texts had the CSS class `lg` which collides with CSS rules given by the TIDO viewer.
To avoid this, `lg` has been renamed to `tei-lg` and the CSS has been adjusted accordingly.
A re-import of the data is necessary to update the HTML files.Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/248Fix textapi errors2023-07-11T06:36:19ZMichelle WeidlingFix textapi errorsWith this MR, the following errors are fixed (:warning: marks possibly breaking changes for TIDO):
- :warning: `role` holds an array (in `collection['collector'][n]['role']` and `manifest['actor'][n]['role']`)
- `"role": "editor"` -->...With this MR, the following errors are fixed (:warning: marks possibly breaking changes for TIDO):
- :warning: `role` holds an array (in `collection['collector'][n]['role']` and `manifest['actor'][n]['role']`)
- `"role": "editor"` --> `"role": [ "editor" ]`
- :warning: `idref` holds array (in `collection['collector'][n]['idref']`)
- `"idref": {...}` --> `"idref": [ {...} ]`
- `@context` for
- fonts (in manifests)
- licenses (in manifests and items)
## Examples
### collection.json
Then:
```json
{
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/collection.jsonld",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/syriac/collection.json",
"title" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/title.jsonld",
"title" : "Textual witnesses in Syriac",
"type" : "main"
} ],
"collector" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"name" : "Prof. Dr. theol. Kratz, Reinhard Gregor",
"role" : [ "collector" ],
"idref" : {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/idref.jsonld",
"base" : "http://d-nb.info/gnd/",
"id" : "115412700",
"type" : "GND"
}
}, {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"name" : "Birol, Simon",
"role" : [ "collector" ],
"idref" : {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/idref.jsonld",
"base" : "http://d-nb.info/gnd/",
"id" : "1150408537",
"type" : "GND"
}
} ],
"annotationCollection" : "https://ahikar-dev.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/annotationCollection.json",
"description" : "Syriac collection for the Ahiqar project. Funded by DFG, 2018–2021, University of Göttingen",
"sequence" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/sequence.jsonld",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/manifest.json",
"label" : "Paris, Bibliothèque Nationale de France, ms. syr. 434",
"type" : "manifest"
}]
}
```
Now:
```json
{
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/collection.jsonld",
"id" : "https://ahikar-test.sub.uni-goettingen.de/syriac/collection.json",
"title" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/title.jsonld",
"title" : "Textual witnesses in Syriac",
"type" : "main"
} ],
"collector" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"name" : "Prof. Dr. theol. Kratz, Reinhard Gregor",
"role" : [ "collector" ],
"idref" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/idref.jsonld",
"base" : "http://d-nb.info/gnd/",
"id" : "115412700",
"type" : "GND"
} ]
}, {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"name" : "Birol, Simon",
"role" : [ "collector" ],
"idref" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/idref.jsonld",
"base" : "http://d-nb.info/gnd/",
"id" : "1150408537",
"type" : "GND"
} ]
} ],
"annotationCollection" : "https://ahikar-test.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/annotationCollection.json",
"description" : "Syriac collection for the Ahiqar project. Funded by DFG, 2018–2021, University of Göttingen",
"sequence" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/sequence.jsonld",
"id" : "https://ahikar-test.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/manifest.json",
"label" : "Paris, Bibliothèque Nationale de France, ms. syr. 434",
"type" : "manifest"
}]
}
```
### manifest.json
Then:
```json
{
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/manifest.jsonld",
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/manifest.json",
"label" : "Paris, Bibliothèque Nationale de France, ms. syr. 434",
"metadata" : [],
"support" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/support.jsonld",
"type" : "css",
"mime" : "text/css",
"url" : "https://ahikar-dev.sub.uni-goettingen.de/api/content/ahiqar.css"
}, {
"type" : "font",
"mime" : "font/woff",
"url" : "https://ahikar-dev.sub.uni-goettingen.de/api/content/syrcomjerusalemitalic.woff"
} ],
"license" : [ {
"id" : "[CC-BY-SA-4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode)"
} ],
"annotationCollection" : "https://ahikar-dev.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/3r678/annotationCollection.json",
"sequence" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/sequence.jsonld",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/186v/latest/item.json",
"label" : "186v",
"type" : "item"
} ],
"actor" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"role" : "editor",
"name" : "Simon Birol"
} ]
}
```
Now:
```json
{
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/manifest.jsonld",
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"id" : "https://ahikar-test.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/manifest.json",
"label" : "Paris, Bibliothèque Nationale de France, ms. syr. 434",
"metadata" : [],
"support" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/support.jsonld",
"type" : "css",
"mime" : "text/css",
"url" : "https://ahikar-test.sub.uni-goettingen.de/api/content/ahiqar.css"
}, {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/support.jsonld",
"type" : "font",
"mime" : "font/woff",
"url" : "https://ahikar-dev.sub.uni-goettingen.de/api/content/syrcomjerusalemitalic.woff"
} ],
"license" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/license.jsonld",
"id" : "[CC-BY-SA-4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode)"
} ],
"annotationCollection" : "https://ahikar-test.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/3r678/annotationCollection.json",
"sequence" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/sequence.jsonld",
"id" : "https://ahikar-test.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/186v/latest/item.json",
"label" : "186v",
"type" : "item"
} ],
"actor" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/actor.jsonld",
"role" : [ "editor" ],
"name" : "Simon Birol"
} ]
}
```
### item.json
Then:
```json
{
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/item.jsonld",
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/186v/latest/item.json",
"title" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/title.jsonld",
"title" : "From the Proverbs of Ahiqar",
"type" : "main"
} ],
"type" : "page",
"n" : "186v",
"content" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/content.jsonld",
"url" : "https://ahikar-dev.sub.uni-goettingen.de/api/content/transcription/3r676-186v.html",
"type" : "application/xhtml+xml;type=transcription"
} ],
"lang" : [ "syc" ],
"langAlt" : [ ],
"x-langString" : "Classical Syriac",
"image" : {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/image.jsonld",
"id" : "https://ahikar-dev.sub.uni-goettingen.de/api/images/public/3r85p",
"license" : {
"id" : "Public domain",
"notes" : "Public domain. Link to original material: https://gallica.bnf.fr/ark:/12148/btv1b53110176r/f377.image.r=Syriaque"
}
},
"annotationCollection" : "https://ahikar-dev.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/3r678/186v/latest/annotationCollection.json"
}
```
Now:
```json
{
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/item.jsonld",
"textapi" : "1.3.0",
"x-app-version" : "11.4.3",
"id" : "https://ahikar-test.sub.uni-goettingen.de/api/textapi/ahiqar/syriac/3r678/186v/latest/item.json",
"title" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/title.jsonld",
"title" : "From the Proverbs of Ahiqar",
"type" : "main"
} ],
"type" : "page",
"n" : "186v",
"content" : [ {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/content.jsonld",
"url" : "https://ahikar-test.sub.uni-goettingen.de/api/content/transcription/3r676-186v.html",
"type" : "application/xhtml+xml;type=transcription"
} ],
"lang" : [ "syc" ],
"langAlt" : [ ],
"x-langString" : "Classical Syriac",
"image" : {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/image.jsonld",
"id" : "https://ahikar-test.sub.uni-goettingen.de/api/images/public/3r85p",
"license" : {
"@context" : "https://gitlab.gwdg.de/subugoe/emo/text-api/-/raw/main/jsonld/license.jsonld",
"id" : "Public domain",
"notes" : "Public domain. Link to original material: https://gallica.bnf.fr/ark:/12148/btv1b53110176r/f377.image.r=Syriaque"
}
},
"annotationCollection" : "https://ahikar-test.sub.uni-goettingen.de/api/annotations/ahiqar/syriac/3r678/186v/latest/annotationCollection.json"
}
```Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/247Fix errors in TextAPI implementation2023-07-10T06:14:04ZMichelle WeidlingFix errors in TextAPI implementationThis MR
* adds `@context` to the Support Object and Image Object
* lets `role` hold an array of strings (instead of a string)This MR
* adds `@context` to the Support Object and Image Object
* lets `role` hold an array of strings (instead of a string)Michelle WeidlingMichelle Weidlinghttps://gitlab.gwdg.de/subugoe/ahiqar/backend/-/merge_requests/246Test full API2024-01-08T10:05:12ZMichelle WeidlingTest full APIThis MR introduces a TextAPI Crawler that checks
* the TextAPI endpoints
* the HTML pages
* the availability of images and
* the AnnotationAPI
for the complete Ahiqar project. The server to which the request is sent depends on the trig...This MR introduces a TextAPI Crawler that checks
* the TextAPI endpoints
* the HTML pages
* the availability of images and
* the AnnotationAPI
for the complete Ahiqar project. The server to which the request is sent depends on the triggering branch.Michelle WeidlingMichelle Weidling