From 8dedbe251a07ae088abe1d931db55f3aac4b741a Mon Sep 17 00:00:00 2001 From: Johannes Nussbaum <39048939+jnussbaum@users.noreply.github.com> Date: Wed, 30 Oct 2024 20:42:00 +0100 Subject: [PATCH] chore: change default permissions to new standard (RDU-48) (#1180) --- docs/excel2xml-module.md | 17 +- docs/file-formats/excel2xml.md | 2 +- docs/file-formats/xml-data-file.md | 308 ++++++----- .../commands/excel2xml/excel2xml_cli.py | 7 +- .../commands/excel2xml/excel2xml_lib.py | 235 ++++----- .../commands/excel2xml/propertyelement.py | 8 +- .../resources/0100-template-repo/template.xml | 16 +- .../test_stash_circular_references.py | 2 +- .../commands/excel2xml/test_excel2xml_cli.py | 26 +- .../commands/xmlupload/test_upload_state.py | 2 +- .../excel2xml_lib/test_make_props.py | 94 ++-- .../excel2xml_lib/test_resource_types.py | 60 +-- .../ingest_xmlupload/test_apply_ingest_id.py | 18 +- .../deserialize/test_deserialise_value.py | 12 +- .../stash/test_construct_and_analyze_graph.py | 62 ++- .../stash/test_upload_stashed_xml_texts.py | 24 +- .../test_check_consistency_with_ontology.py | 98 ++-- .../xmlupload/test_resource_create_client.py | 12 +- test/unittests/utils/test_xml_validation.py | 74 +-- testdata/bitstreams/test.odd | 27 +- testdata/bitstreams/test.rng | 28 +- testdata/bitstreams/test.xml | 27 +- testdata/dsp-ingest-data/dsp-ingest.xml | 56 +- .../excel2xml/excel2xml-expected-output.xml | 132 +++-- testdata/excel2xml/excel2xml-testdata.csv | 66 +-- testdata/excel2xml/excel2xml-testdata.xls | Bin 41472 -> 41472 bytes testdata/excel2xml/excel2xml-testdata.xlsx | Bin 14374 -> 14508 bytes .../excel2xml/no-bitstream-permissions.xlsx | Bin 22608 -> 31490 bytes .../validate-data/data/minimal_correct.xml | 8 +- .../test_circular_references_1.xml | 315 ++++++----- testdata/xml-data/test-data-systematic.xml | 489 +++++++++--------- 31 files changed, 1067 insertions(+), 1158 deletions(-) diff --git a/docs/excel2xml-module.md b/docs/excel2xml-module.md index 68cfacd44d..9d19a9395f 100644 --- a/docs/excel2xml-module.md +++ b/docs/excel2xml-module.md @@ -86,12 +86,13 @@ Then, the root element is created, which represents the `` tag of the XML As first children of ``, some standard permissions are added. At the end, please carefully check the permissions of the finished XML file to ensure that they meet your requirements, and adapt them if necessary. -The standard permission of a resource is `res-default`, and of a property `prop-default`. If you don't specify it -otherwise, all resources and properties get these permissions. +The standard permission is `open` +(read more about this [here](./file-formats/xml-data-file.md#defining-permissions-with-the-permissions-element)). +If you don't specify it otherwise, all resources and properties get this permission. With `excel2xml`, it is not possible to create resources/properties that don't have permissions, because they would be -invisible for all users except project admins and system admins. [Read more about permissions -here](./file-formats/xml-data-file.md#using-permissions-with-the-permissions-attribute). +invisible for all users except project members. [Read more about permissions +here](./file-formats/xml-data-file.md#defining-permissions-with-the-permissions-element). ## 4. Create List Mappings @@ -224,7 +225,7 @@ Here's how the docstrings assist you: #### Fine-Tuning With the `PropertyElement` There are two possibilities how to create a property: The value can be passed as it is, or as a `PropertyElement`. If it -is passed as it is, the `permissions` are assumed to be `prop-default`, texts are assumed to be encoded as `utf8`, and +is passed as it is, the `permissions` are assumed to be `open`, texts are assumed to be encoded as `utf8`, and the value won't have a comment: ```python @@ -233,7 +234,7 @@ make_text_prop(":testproperty", "first text") ```xml - first text + first text ``` @@ -244,7 +245,7 @@ make_text_prop( ":testproperty", PropertyElement( value="first text", - permissions="prop-restricted", + permissions="restricted", encoding="xml", comment="some comment" ) @@ -253,7 +254,7 @@ make_text_prop( ```xml - first text + first text ``` diff --git a/docs/file-formats/excel2xml.md b/docs/file-formats/excel2xml.md index 12f9608deb..265425d168 100644 --- a/docs/file-formats/excel2xml.md +++ b/docs/file-formats/excel2xml.md @@ -18,5 +18,5 @@ Some notes: `LinkObj`, and `Region`. - The columns `ark`, `iri`, and `creation_date` are only used for DaSCH internal data migration. - If `file` is provided, but no `file permissions`, an attempt will be started to deduce them from the resource - permissions (`res-default` → `prop-default` and `res-restricted` → `prop-restricted`). If this attempt is not + permissions. If this attempt is not successful, a `BaseError` will be raised. diff --git a/docs/file-formats/xml-data-file.md b/docs/file-formats/xml-data-file.md index 3aadb43e66..8aebf649a6 100644 --- a/docs/file-formats/xml-data-file.md +++ b/docs/file-formats/xml-data-file.md @@ -92,30 +92,58 @@ Every right of this row includes all previous rights. The `` element defines a _permission ID_ that can subsequently be used in a [permissions attribute](#using-permissions-with-the-permissions-attribute) of a `` or `` tag. -It is optional to define permissions in the XML. If not defined, default permissions are applied, so that only project -and system administrators can view and edit resources. All other users have no rights at all, not even view or -restricted view permissions. +It is optional to define permission IDs in the XML. +If not defined, the project's default permissions are applied, +so that only project and system administrators can view and edit resources. +All other users have no rights at all, +not even view or restricted view permissions. -The `` element defines which rights are given to which groups: +(The project's default permission default to "restricted", but this can be changed on a per-project-basis via DSP-API.) + +If the resources/values in your XML should have permissions +that are different from the project's defaults, +you have to use the `` elements to define permission IDs. + +The `` element defines which rights are given to which groups. +The canonical standard that we recommend are these 3 permission IDs: ```xml - - RV - V - D + + V + V + D + CR + + + RV + RV + D + CR + + + D + CR ``` -In addition to the DSP built-in groups, [project specific groups](./json-project/overview.md#groups) -are supported as well. -A project specific group name has the form `project-shortname:groupname`. +This means that if a resource/value is marked as `open`, -If you don't want a group to have access at all, leave it out. In the following example, resources or properties with -permission `special-permission` can only be viewed by `ProjectAdmin`s: +- users who are not logged in can view the resource/value +- users who are logged in, but not members of your project can view the resource/value +- project members can modify and delete the resource/value +- project admins can modify, delete, and change the rights of the resource/value + +If you don't want a group to have access at all, leave it out: +If a resource/value is marked as `restricted`, +users who are not members of the project have no rights at all, not even view rights. + +In addition to the DSP built-in groups, +[project specific groups](./json-project/overview.md#groups) are supported as well. +A project specific group name has the form `project-shortname:groupname`: ```xml - - CR + + M ``` @@ -130,23 +158,36 @@ So, in the following example, the bitstreams don't inherit the permissions from their resource: ```xml + + V + V + D + CR + + + RV + RV + D + CR + - images/EURUS015a.jpg + images/EURUS015a.jpg - images/EURUS015a.jpg + images/EURUS015a.jpg images/EURUS015a.jpg ``` -To take as example `KnownUser`, i.e. a logged-in user who is not member of the project: +So if you upload this data, and then log in as `KnownUser`, i.e. a logged-in user who is not member of the project, +you will see the following: -- With `permissions="prop-default"`, he has `V` rights on the image: Normal view. -- With `permissions="prop-restricted"`, he has `RV` rights on the image: Blurred image. -- With a blank `` tag, he has no rights on the image: No view possible. Only users from `ProjectAdmin` - upwards are able to look at the image. +- With `permissions="open"`, you have `V` rights on the image: Normal view. +- With `permissions="restricted-view"`, you have `RV` rights on the image: Blurred image. +- With a blank `` tag, you have no rights on the image: No view possible. + Only users from `ProjectMember` upwards are able to look at the image. ## Describing Resources With the `` Element @@ -161,7 +202,7 @@ A `` element contains all necessary information to create a resource. and later replaced by the IRI used internally by DSP - `permissions` (optional, but if omitted, - users who are lower than a `ProjectAdmin` have no permissions at all, + users who are lower than a `ProjectMember` have no permissions at all, not even view rights): a reference to a permission ID - `iri` (optional): a custom IRI, used when migrating existing resources (DaSCH-internal only) @@ -190,8 +231,8 @@ Example of a property element of type integer with two values: ```xml - 4711 - 1 + 4711 + 1 ``` @@ -259,13 +300,13 @@ For more details, please consult the [API docs](https://docs.dasch.swiss/latest/ Attributes: - `permissions` : Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) Example of a public image inside a `StillImageRepresentation`: ```xml - - postcards/images/EURUS015a.jpg + + postcards/images/EURUS015a.jpg ``` @@ -289,14 +330,14 @@ Please consult the official documentation for details regarding the URI syntax: Attributes: - `permissions` : Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) Example of a public image inside a `StillImageRepresentation`: ```xml - - https://iiif.dasch.swiss/0811/1Oi7mdiLsG7-FmFgp0xz2xU.jp2/full/837,530/0/default.jp2 + + https://iiif.dasch.swiss/0811/1Oi7mdiLsG7-FmFgp0xz2xU.jp2/full/837,530/0/default.jp2 ``` @@ -318,14 +359,14 @@ The `` element must contain the string "true"/"True" or "false"/"False" Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a public and a hidden boolean property: ```xml - true + true 0 @@ -350,14 +391,14 @@ followed by 3 or 6 hex numerals. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden color value: ```xml - #00ff66 + #00ff66 #ff00ff ``` @@ -406,14 +447,14 @@ Notes: Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden date value: ```xml - GREGORIAN:CE:2014-01-31:CE:2014-01-31 + GREGORIAN:CE:2014-01-31:CE:2014-01-31 GREGORIAN:CE:1930-09-02:CE:1930-09-03 ``` @@ -436,14 +477,14 @@ The `` element contains a decimal number, they must be written with a d Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden decimal value: ```xml - 3.14159 + 3.14159 2.71828 ``` @@ -477,14 +518,14 @@ A geometry value is defined as a JSON object. It contains the following data: Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example: ```xml - + { "status": "active", "type": "rectangle", @@ -495,7 +536,7 @@ Example: ] } - + { "status": "active", "type": "circle", @@ -504,7 +545,7 @@ Example: "radius": {"x":0.1,"y":0.1} // vector (0.1, 0.1) } - + { "status": "active", "type": "polygon", @@ -542,14 +583,14 @@ Contains a valid [geonames.org](https://www.geonames.org/) ID. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public link to Vienna and a hidden link to Basel: ```xml - 2761369 + 2761369 2661604 ``` @@ -572,14 +613,14 @@ The `` element contains an integer value, these are whole numbers. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden integer value: ```xml - 4711 + 4711 1 ``` @@ -604,14 +645,14 @@ The `` element references a node in a (pull-down or hierarchical) list. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden list value: ```xml - physics + physics nature ``` @@ -634,7 +675,7 @@ existing resource on DSP. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public link to `` @@ -642,7 +683,7 @@ and a hidden link to ``: ```xml - res_1 + res_1 res_2 ``` @@ -665,15 +706,16 @@ The `` element has the following attributes: - `utf8`: simple text without markup - `xml`: complex text with markup. It must follow the XML format as defined by the [DSP standard mapping](https://docs.dasch.swiss/latest/DSP-API/03-endpoints/api-v2/text/standard-standoff/). -- `permissions`: Permission ID (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions - at all, not even view rights) +- `permissions`: Permission ID + (optional, but if omitted, users who are lower than a `ProjectMember` + have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a public and a hidden text: ```xml - Probe bei "Wimberger". Lokal in Wien? + Probe bei "Wimberger". Lokal in Wien? Bold text and a link to an ID.
And a link to an IRI. @@ -827,14 +869,14 @@ The timezone is defined as follows: Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden time value: ```xml - + ``` @@ -857,14 +899,14 @@ The `` element contains a syntactically valid URI. Attributes: - `permissions`: Permission ID - (optional, but if omitted, users who are lower than a `ProjectAdmin` have no permissions at all, not even view rights) + (optional, but if omitted, users who are lower than a `ProjectMember` have no permissions at all, not even view rights) - `comment`: a comment for this specific value (optional) Example of a property with a public and a hidden URI: ```xml - http://www.groove-t-gang.ch + http://www.groove-t-gang.ch http://dasch.swiss ``` @@ -889,12 +931,12 @@ See also [the related part of the JSON project documentation](./json-project/cav Example: ```xml - + - This is an annotation to a resource. + This is an annotation to a resource. - img_1 + img_1 ``` @@ -915,15 +957,15 @@ A `` resource defines a region of interest (ROI) in an image. It must ha Example: ```xml - + - #5d1f1e + #5d1f1e - img_1 + img_1 - + { "status": "active", "type": "rectangle", @@ -936,7 +978,7 @@ Example: - This is a rectangle-formed region of interest. + This is a rectangle-formed region of interest. ``` @@ -958,16 +1000,16 @@ predefined properties: Example: ```xml - + - + A link object can link together an arbitrary number of resources from any resource class. - doc_001 - img_obj_5 - audio_obj_0 + doc_001 + img_obj_5 + audio_obj_0 ``` @@ -998,19 +1040,19 @@ Example: ```xml - video_thing_1 + video_thing_1 - - Title of video segment - Comment of video segment - Description of video segment - Keyword of video segment - audio_segment_1 + + Title of video segment + Comment of video segment + Description of video segment + Keyword of video segment + audio_segment_1 ``` Allowed attributes in these property tags: `permissions`, `comment`. -Example: `Title of video segment` +Example: `Title of video segment` Technical notes: @@ -1042,168 +1084,156 @@ In addition, there is another complete example of an XML data file here: default-ontology="anything"> - + V V - CR + D CR - D - + RV - V - CR + RV + D CR - M - - V - V - CR - CR - D - - - RV - V - CR + + D CR - M + permissions="open"> - Tree list node 02 + Tree list node 02 - Tree list node 03 + Tree list node 03 - + The third object and a link to an ID and a link to an IRI. - Dies ist ein einfacher Text ohne Markup - Nochmals ein einfacher Text + Dies ist ein einfacher Text ohne Markup + Nochmals ein einfacher Text - JULIAN:CE:1401-05-17:CE:1402-01 + JULIAN:CE:1401-05-17:CE:1402-01 - 4711 + 4711 - 2.718281828459 + 2.718281828459 - true + true - http://dasch.swiss/gaga + http://dasch.swiss/gaga - #00ff00 + #00ff00 - 5416656 + 5416656 - obj_0002 + obj_0002 + permissions="open"> - Tree list node 10 + Tree list node 10 - Tree list node 11 + Tree list node 11 - What is this bold thing? + What is this bold thing? - aa bbb cccc ddddd + aa bbb cccc ddddd - 1888 + 1888 - 42 + 42 - 3.14159 + 3.14159 - false + false - http://unibas.ch/gugus + http://unibas.ch/gugus - #33ff77 + #33ff77 - 5416656 + 5416656 - obj_0003 + obj_0003 + permissions="open"> - Tree list node 01 + Tree list node 01 - Tree list node 02 + Tree list node 02 - This is italicized and bold text! + This is italicized and bold text! - aa bbb cccc ddddd + aa bbb cccc ddddd - 1888 + 1888 - 42 + 42 - 3.14159 + 3.14159 - false + false - http://unibas.ch/gugus + http://unibas.ch/gugus - #33ff77 + #33ff77 - 5416656 + 5416656 + permissions="open"> gaga.tif - This is the famous Lena + This is the famous Lena diff --git a/src/dsp_tools/commands/excel2xml/excel2xml_cli.py b/src/dsp_tools/commands/excel2xml/excel2xml_cli.py index da84579e83..9406685298 100644 --- a/src/dsp_tools/commands/excel2xml/excel2xml_cli.py +++ b/src/dsp_tools/commands/excel2xml/excel2xml_cli.py @@ -186,11 +186,8 @@ def _append_bitstream_to_resource( """ file_permissions = row.get("file permissions") if not check_notna(file_permissions): - resource_permissions = row.get("permissions") - if resource_permissions == "res-default": - file_permissions = "prop-default" - elif resource_permissions == "res-restricted": - file_permissions = "prop-restricted" + if resource_permissions := row.get("permissions"): + file_permissions = resource_permissions else: file_permissions = "" warnings.warn( diff --git a/src/dsp_tools/commands/excel2xml/excel2xml_lib.py b/src/dsp_tools/commands/excel2xml/excel2xml_lib.py index 41bc37b64d..aee189fb2e 100644 --- a/src/dsp_tools/commands/excel2xml/excel2xml_lib.py +++ b/src/dsp_tools/commands/excel2xml/excel2xml_lib.py @@ -384,15 +384,15 @@ def make_root( def append_permissions(root_element: etree._Element) -> etree._Element: """ - After having created a root element, call this method to append the four permissions "res-default", - "res-restricted", "prop-default", and "prop-restricted" to it. These four permissions are a good basis to + After having created a root element, call this function to append the standard permission definitions "open", + "restricted-view", and "restricted" to it. These definitions are a good basis to start with, but remember that they can be adapted, and that other permissions can be defined instead of these. Args: root_element: The XML root element `` created by make_root() Returns: - The root element with the four permission blocks appended + The root element with the permission definition blocks appended Examples: >>> root = excel2xml.make_root(shortcode=shortcode, default_ontology=default_ontology) @@ -406,33 +406,24 @@ def append_permissions(root_element: etree._Element) -> etree._Element: # lxml.builder.E is a more sophisticated element factory than etree.Element. # E.tag is equivalent to E("tag") and results in - res_default = etree.Element("{%s}permissions" % xml_namespace_map[None], id="res-default") - res_default.append(ALLOW("V", group="UnknownUser")) - res_default.append(ALLOW("V", group="KnownUser")) - res_default.append(ALLOW("D", group="ProjectMember")) - res_default.append(ALLOW("CR", group="ProjectAdmin")) - res_default.append(ALLOW("CR", group="Creator")) - root_element.append(res_default) - - res_restricted = PERMISSIONS(id="res-restricted") - res_restricted.append(ALLOW("M", group="ProjectMember")) - res_restricted.append(ALLOW("CR", group="ProjectAdmin")) - res_restricted.append(ALLOW("CR", group="Creator")) - root_element.append(res_restricted) - - prop_default = PERMISSIONS(id="prop-default") - prop_default.append(ALLOW("V", group="UnknownUser")) - prop_default.append(ALLOW("V", group="KnownUser")) - prop_default.append(ALLOW("D", group="ProjectMember")) - prop_default.append(ALLOW("CR", group="ProjectAdmin")) - prop_default.append(ALLOW("CR", group="Creator")) - root_element.append(prop_default) - - prop_restricted = PERMISSIONS(id="prop-restricted") - prop_restricted.append(ALLOW("M", group="ProjectMember")) - prop_restricted.append(ALLOW("CR", group="ProjectAdmin")) - prop_restricted.append(ALLOW("CR", group="Creator")) - root_element.append(prop_restricted) + _open = PERMISSIONS(id="open") + _open.append(ALLOW("V", group="UnknownUser")) + _open.append(ALLOW("V", group="KnownUser")) + _open.append(ALLOW("D", group="ProjectMember")) + _open.append(ALLOW("CR", group="ProjectAdmin")) + root_element.append(_open) + + _restricted_view = PERMISSIONS(id="restricted-view") + _restricted_view.append(ALLOW("RV", group="UnknownUser")) + _restricted_view.append(ALLOW("RV", group="KnownUser")) + _restricted_view.append(ALLOW("D", group="ProjectMember")) + _restricted_view.append(ALLOW("CR", group="ProjectAdmin")) + root_element.append(_restricted_view) + + _restricted = PERMISSIONS(id="restricted") + _restricted.append(ALLOW("D", group="ProjectMember")) + _restricted.append(ALLOW("CR", group="ProjectAdmin")) + root_element.append(_restricted) return root_element @@ -441,7 +432,7 @@ def make_resource( # noqa: D417 (undocumented-param) label: str, restype: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ark: Optional[str] = None, iri: Optional[str] = None, creation_date: Optional[str] = None, @@ -496,7 +487,7 @@ def make_resource( # noqa: D417 (undocumented-param) def make_bitstream_prop( path: Union[str, os.PathLike[Any]], - permissions: str = "prop-default", + permissions: str = "open", check: bool = False, calling_resource: str = "", ) -> etree._Element: @@ -540,7 +531,7 @@ def make_bitstream_prop( def make_iiif_uri_prop( iiif_uri: str, - permissions: str = "prop-default", + permissions: str = "open", calling_resource: str = "", ) -> etree._Element: """ @@ -622,7 +613,7 @@ def make_boolean_prop( - true: (True, "true", "True", "1", 1, "yes", "Yes") - false: (False, "false", "False", "0", 0, "no", "No") - Unless provided as PropertyElement, the permissions of the value default to "prop-default". + Unless provided as PropertyElement, the permissions of the value default to "open". Args: name: the name of this property as defined in the onto @@ -638,11 +629,11 @@ def make_boolean_prop( Examples: >>> excel2xml.make_boolean_prop(":testproperty", "no") - false + false - >>> excel2xml.make_boolean_prop(":testproperty", excel2xml.PropertyElement("1", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_boolean_prop(":testproperty", excel2xml.PropertyElement("1", permissions="restricted", comment="example")) - true + true See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#boolean-prop @@ -685,7 +676,7 @@ def make_color_prop( ) -> etree._Element: """ Make a `` from one or more colors. The color(s) can be provided as string or as PropertyElement with a - string inside. If provided as string, the permissions default to "prop-default". + string inside. If provided as string, the permissions default to "open". Args: name: the name of this property as defined in the onto @@ -701,16 +692,16 @@ def make_color_prop( Examples: >>> excel2xml.make_color_prop(":testproperty", "#00ff66") - #00ff66 + #00ff66 - >>> excel2xml.make_color_prop(":testproperty", excel2xml.PropertyElement("#00ff66", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_color_prop(":testproperty", excel2xml.PropertyElement("#00ff66", permissions="restricted", comment="example")) - #00ff66 + #00ff66 >>> excel2xml.make_color_prop(":testproperty", ["#00ff66", "#000000"]) - #00ff66 - #000000 + #00ff66 + #000000 See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#color-prop @@ -756,7 +747,7 @@ def make_date_prop( ) -> etree._Element: """ Make a `` from one or more dates/date ranges. The date(s) can be provided as string or as PropertyElement - with a string inside. If provided as string, the permissions default to "prop-default". + with a string inside. If provided as string, the permissions default to "open". Args: name: the name of this property as defined in the onto @@ -772,20 +763,20 @@ def make_date_prop( Examples: >>> excel2xml.make_date_prop(":testproperty", "GREGORIAN:CE:2014-01-31") - GREGORIAN:CE:2014-01-31 + GREGORIAN:CE:2014-01-31 - >>> excel2xml.make_date_prop(":testproperty", excel2xml.PropertyElement("GREGORIAN:CE:2014-01-31", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_date_prop(":testproperty", excel2xml.PropertyElement("GREGORIAN:CE:2014-01-31", permissions="restricted", comment="example")) - + GREGORIAN:CE:2014-01-31 >>> excel2xml.make_date_prop(":testproperty", ["GREGORIAN:CE:1930-09-02:CE:1930-09-03", "GREGORIAN:CE:1930-09-02:CE:1930-09-03"]) - + GREGORIAN:CE:1930-09-02:CE:1930-09-03 - + GREGORIAN:CE:1930-09-02:CE:1930-09-03 @@ -834,7 +825,7 @@ def make_decimal_prop( """ Make a `` from one or more decimal numbers. The decimal(s) can be provided as string, float, or as PropertyElement with a string/float inside. If provided as string/float, the permissions default to - "prop-default". + "open". Args: name: the name of this property as defined in the onto @@ -850,16 +841,16 @@ def make_decimal_prop( Examples: >>> excel2xml.make_decimal_prop(":testproperty", "3.14159") - 3.14159 + 3.14159 - >>> excel2xml.make_decimal_prop(":testproperty", excel2xml.PropertyElement("3.14159", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_decimal_prop(":testproperty", excel2xml.PropertyElement("3.14159", permissions="restricted", comment="example")) - 3.14159 + 3.14159 >>> excel2xml.make_decimal_prop(":testproperty", ["3.14159", "2.718"]) - 3.14159 - 2.718 + 3.14159 + 2.718 See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#decimal-prop @@ -907,7 +898,7 @@ def make_geometry_prop( ) -> etree._Element: """ Make a `` from one or more areas of an image. The area(s) can be provided as JSON-string or as - PropertyElement with the JSON-string inside. If provided as string, the permissions default to "prop-default". + PropertyElement with the JSON-string inside. If provided as string, the permissions default to "open". Args: name: the name of this property as defined in the onto @@ -923,16 +914,16 @@ def make_geometry_prop( Examples: >>> excel2xml.make_geometry_prop(":testproperty", json_string) - {JSON} + {JSON} - >>> excel2xml.make_geometry_prop(":testproperty", excel2xml.PropertyElement(json_string, permissions="prop-restricted", comment="example")) + >>> excel2xml.make_geometry_prop(":testproperty", excel2xml.PropertyElement(json_string, permissions="restricted", comment="example")) - {JSON} + {JSON} >>> excel2xml.make_geometry_prop(":testproperty", [json_string1, json_string2]) - {JSON} - {JSON} + {JSON} + {JSON} See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#geometry-prop @@ -992,7 +983,7 @@ def make_geoname_prop( """ Make a `` from one or more geonames.org IDs. The ID(s) can be provided as string, integer, or as PropertyElement with a string/integer inside. If provided as string/integer, the permissions default to - "prop-default". + "open". Args: name: the name of this property as defined in the onto @@ -1008,16 +999,16 @@ def make_geoname_prop( Examples: >>> excel2xml.make_geoname_prop(":testproperty", "2761369") - 2761369 + 2761369 - >>> excel2xml.make_geoname_prop(":testproperty", excel2xml.PropertyElement("2761369", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_geoname_prop(":testproperty", excel2xml.PropertyElement("2761369", permissions="restricted", comment="example")) - 2761369 + 2761369 >>> excel2xml.make_geoname_prop(":testproperty", ["2761369", "1010101"]) - 2761369 - 1010101 + 2761369 + 1010101 See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#geoname-prop @@ -1064,7 +1055,7 @@ def make_integer_prop( """ Make a `` from one or more integers. The integers can be provided as string, integer, or as PropertyElement with a string/integer inside. If provided as string/integer, the permissions default to - "prop-default". + "open". Args: name: the name of this property as defined in the onto @@ -1080,16 +1071,16 @@ def make_integer_prop( Examples: >>> excel2xml.make_integer_prop(":testproperty", "2761369") - 2761369 + 2761369 - >>> excel2xml.make_integer_prop(":testproperty", excel2xml.PropertyElement("2761369", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_integer_prop(":testproperty", excel2xml.PropertyElement("2761369", permissions="restricted", comment="example")) - 2761369 + 2761369 >>> excel2xml.make_integer_prop(":testproperty", ["2761369", "1010101"]) - 2761369 - 1010101 + 2761369 + 1010101 See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#integer-prop @@ -1138,7 +1129,7 @@ def make_list_prop( ) -> etree._Element: """ Make a `` from one or more list nodes. The name(s) of the list node(s) can be provided as string or as - PropertyElement with a string inside. If provided as string, the permissions default to "prop-default". + PropertyElement with a string inside. If provided as string, the permissions default to "open". Args: list_name: the name of the list as defined in the onto @@ -1155,16 +1146,16 @@ def make_list_prop( Examples: >>> excel2xml.make_list_prop("mylist", ":testproperty", "first_node") - first_node + first_node - >>> excel2xml.make_list_prop("mylist", ":testproperty", excel2xml.PropertyElement("first_node", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_list_prop("mylist", ":testproperty", excel2xml.PropertyElement("first_node", permissions="restricted", comment="example")) - first_node + first_node >>> excel2xml.make_list_prop("mylist", ":testproperty", ["first_node", "second_node"]) - first_node - second_node + first_node + second_node See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#list-prop @@ -1211,7 +1202,7 @@ def make_resptr_prop( ) -> etree._Element: """ Make a `` from one or more IDs of other resources. The ID(s) can be provided as string or as - PropertyElement with a string inside. If provided as string, the permissions default to "prop-default". + PropertyElement with a string inside. If provided as string, the permissions default to "open". Args: name: the name of this property as defined in the onto @@ -1227,16 +1218,16 @@ def make_resptr_prop( Examples: >>> excel2xml.make_resptr_prop(":testproperty", "resource_1") - resource_1 + resource_1 - >>> excel2xml.make_resptr_prop(":testproperty", excel2xml.PropertyElement("resource_1", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_resptr_prop(":testproperty", excel2xml.PropertyElement("resource_1", permissions="restricted", comment="example")) - resource_1 + resource_1 >>> excel2xml.make_resptr_prop(":testproperty", ["resource_1", "resource_2"]) - resource_1 - resource_2 + resource_1 + resource_2 See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#resptr-prop @@ -1282,7 +1273,7 @@ def make_text_prop( ) -> etree._Element: """ Make a `` from one or more strings. The string(s) can be provided as string or as PropertyElement with a - string inside. If provided as string, the encoding defaults to utf8, and the permissions to "prop-default". + string inside. If provided as string, the encoding defaults to utf8, and the permissions to "open". Args: name: the name of this property as defined in the onto @@ -1300,16 +1291,16 @@ def make_text_prop( Examples: >>> excel2xml.make_text_prop(":testproperty", "first text") - first text + first text - >>> excel2xml.make_text_prop(":testproperty", excel2xml.PropertyElement("first text", permissions="prop-restricted", encoding="xml")) + >>> excel2xml.make_text_prop(":testproperty", excel2xml.PropertyElement("first text", permissions="restricted", encoding="xml")) - first text + first text >>> excel2xml.make_text_prop(":testproperty", ["first text", "second text"]) - first text - second text + first text + second text See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#text-prop @@ -1436,7 +1427,7 @@ def make_time_prop( """ Make a `` from one or more datetime values of the form "2009-10-10T12:00:00-05:00". The time(s) can be provided as string or as PropertyElement with a string inside. If provided as string, the permissions default to - "prop-default". + "open". Args: name: the name of this property as defined in the onto @@ -1452,22 +1443,22 @@ def make_time_prop( Examples: >>> excel2xml.make_time_prop(":testproperty", "2009-10-10T12:00:00-05:00") - - >>> excel2xml.make_time_prop(":testproperty", excel2xml.PropertyElement("2009-10-10T12:00:00-05:00", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_time_prop(":testproperty", excel2xml.PropertyElement("2009-10-10T12:00:00-05:00", permissions="restricted", comment="example")) - >>> excel2xml.make_time_prop(":testproperty", ["2009-10-10T12:00:00-05:00", "1901-01-01T01:00:00-00:00"]) - @@ -1516,7 +1507,7 @@ def make_uri_prop( ) -> etree._Element: """ Make an `` from one or more URIs. The URI(s) can be provided as string or as PropertyElement with a string - inside. If provided as string, the permissions default to "prop-default". + inside. If provided as string, the permissions default to "open". Args: name: the name of this property as defined in the onto @@ -1532,16 +1523,16 @@ def make_uri_prop( Examples: >>> excel2xml.make_uri_prop(":testproperty", "www.test.com") - www.test.com + www.test.com - >>> excel2xml.make_uri_prop(":testproperty", excel2xml.PropertyElement("www.test.com", permissions="prop-restricted", comment="example")) + >>> excel2xml.make_uri_prop(":testproperty", excel2xml.PropertyElement("www.test.com", permissions="restricted", comment="example")) - www.test.com + www.test.com >>> excel2xml.make_uri_prop(":testproperty", ["www.1.com", "www.2.com"]) - www.1.com - www.2.com + www.1.com + www.2.com See https://docs.dasch.swiss/latest/DSP-TOOLS/file-formats/xml-data-file/#uri-prop @@ -1583,7 +1574,7 @@ def make_uri_prop( def make_region( # noqa: D417 (undocumented-param) label: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ark: Optional[str] = None, iri: Optional[str] = None, creation_date: Optional[str] = None, @@ -1640,7 +1631,7 @@ def make_region( # noqa: D417 (undocumented-param) def make_annotation( # noqa: D417 (undocumented-param) label: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ark: Optional[str] = None, iri: Optional[str] = None, creation_date: Optional[str] = None, @@ -1695,7 +1686,7 @@ def make_annotation( # noqa: D417 (undocumented-param) def make_link( # noqa: D417 (undocumented-param) label: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ark: Optional[str] = None, iri: Optional[str] = None, creation_date: Optional[str] = None, @@ -1750,7 +1741,7 @@ def make_link( # noqa: D417 (undocumented-param) def make_audio_segment( # noqa: D417 (undocumented-param) label: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ) -> etree._Element: """ Creates an empty `` element, with the attributes as specified by the arguments. @@ -1782,7 +1773,7 @@ def make_audio_segment( # noqa: D417 (undocumented-param) def make_video_segment( # noqa: D417 (undocumented-param) label: str, id: str, - permissions: str = "res-default", + permissions: str = "open", ) -> etree._Element: """ Creates an empty `` element, with the attributes as specified by the arguments. @@ -1812,14 +1803,14 @@ def make_video_segment( # noqa: D417 (undocumented-param) def make_isSegmentOf_prop( - target_id: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + target_id: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: target_id: ID of target video/audio resource - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -1849,14 +1840,14 @@ def make_isSegmentOf_prop( def make_relatesTo_prop( - target_id: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + target_id: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: target_id: ID of the related resource - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -1889,7 +1880,7 @@ def make_relatesTo_prop( def make_hasSegmentBounds_prop( segment_start: int | float, segment_end: int | float, - permissions: str = "prop-default", + permissions: str = "open", comment: str | None = None, calling_resource: str = "", ) -> etree._Element: @@ -1899,7 +1890,7 @@ def make_hasSegmentBounds_prop( Args: segment_start: start, in seconds, counted from the beginning of the audio/video segment_end: end, in seconds, counted from the beginning of the audio/video - permissions: Defaults to "prop-default". + permissions: Defaults to "open". comment: Optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -1950,14 +1941,14 @@ def make_hasSegmentBounds_prop( def make_hasTitle_prop( - title: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + title: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: title: the title of the segment - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -1987,14 +1978,14 @@ def make_hasTitle_prop( def make_hasKeyword_prop( - keyword: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + keyword: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: keyword: a keyword of the segment - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -2025,14 +2016,14 @@ def make_hasKeyword_prop( def make_hasComment_prop( - comment_text: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + comment_text: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: comment_text: a text with some background info about the segment. Can be formatted with tags. - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) @@ -2063,14 +2054,14 @@ def make_hasComment_prop( def make_hasDescription_prop( - description: str, permissions: str = "prop-default", comment: str | None = None, calling_resource: str = "" + description: str, permissions: str = "open", comment: str | None = None, calling_resource: str = "" ) -> etree._Element: """ Make a `` property for a `` or ``. Args: description: a text with some background info about the segment. Can be formatted with tags. - permissions: defaults to "prop-default". + permissions: defaults to "open". comment: optional comment for this property. Defaults to None. calling_resource: the name of the parent resource (for better error messages) diff --git a/src/dsp_tools/commands/excel2xml/propertyelement.py b/src/dsp_tools/commands/excel2xml/propertyelement.py index 4ad2a4159c..8e3059f371 100644 --- a/src/dsp_tools/commands/excel2xml/propertyelement.py +++ b/src/dsp_tools/commands/excel2xml/propertyelement.py @@ -25,20 +25,20 @@ class PropertyElement: >>> excel2xml.make_text_prop(":testproperty", "first text") - + first text - >>> excel2xml.make_text_prop(":testproperty", excel2xml.PropertyElement("first text", permissions="prop-restricted", encoding="xml")) + >>> excel2xml.make_text_prop(":testproperty", excel2xml.PropertyElement("first text", permissions="restricted", encoding="xml")) - + first text """ value: Union[str, int, float, bool] - permissions: str = "prop-default" + permissions: str = "open" comment: Optional[str] = None encoding: Optional[str] = None diff --git a/src/dsp_tools/resources/0100-template-repo/template.xml b/src/dsp_tools/resources/0100-template-repo/template.xml index 53a1ddd1d3..2a1f52d9f8 100644 --- a/src/dsp_tools/resources/0100-template-repo/template.xml +++ b/src/dsp_tools/resources/0100-template-repo/template.xml @@ -6,21 +6,9 @@ shortcode="0100" default-ontology="minimal"> - - RV - V - M - D - CR - CR - - - CR - - - + - Hello! + Hello! diff --git a/test/benchmarking/test_stash_circular_references.py b/test/benchmarking/test_stash_circular_references.py index e322bbe412..1f146de6b0 100644 --- a/test/benchmarking/test_stash_circular_references.py +++ b/test/benchmarking/test_stash_circular_references.py @@ -14,7 +14,7 @@ def test_get_length_ok_resources() -> None: test_root = parse_and_clean_xml_file(Path("testdata/xml-data/circular-references/test_circular_references_1.xml")) stash_lookup, _ = identify_circular_references(test_root) resources = _extract_resources_from_xml(test_root, "simcir") - stash = stash_circular_references(resources, stash_lookup, {"prop-default": Permissions()}) + stash = stash_circular_references(resources, stash_lookup, {"open": Permissions()}) len_standoff = len(stash.standoff_stash.res_2_stash_items) # type: ignore[union-attr] len_resptr = len(stash.link_value_stash.res_2_stash_items) # type: ignore[union-attr] stashed_links = len_standoff + len_resptr diff --git a/test/integration/commands/excel2xml/test_excel2xml_cli.py b/test/integration/commands/excel2xml/test_excel2xml_cli.py index 675f38fed0..643a157ac9 100644 --- a/test/integration/commands/excel2xml/test_excel2xml_cli.py +++ b/test/integration/commands/excel2xml/test_excel2xml_cli.py @@ -65,9 +65,7 @@ def test_missing_child(self) -> None: "At least one value per property is required, but resource 'person_0', property ':hasName' " "(Excel row 3) doesn't contain any values." ) - expected_validation = regex.escape( - "Line 28: Element 'text-prop': Missing child element(s). Expected is ( text )." - ) + expected_validation = regex.escape("Element 'text-prop': Missing child element(s). Expected is ( text ).") _, catched_warnings = excel2xml_cli.excel2xml(file, "1234", "excel2xml-invalid") assert len(catched_warnings) == 2 message_missing_prop = catched_warnings[0].message.args[0] # type:ignore[union-attr] @@ -87,7 +85,7 @@ def test_missing_label(self) -> None: file = f"{INVALID_EXCEL_DIRECTORY}/missing-resource-label.xlsx" expected_msg_missing = "Missing label for resource 'person_0' (Excel row 2)" expected_xml_validation = regex.escape( - "Line 27: Element 'resource', attribute 'label': [facet 'minLength'] The value '' has a length of '0'" + "Element 'resource', attribute 'label': [facet 'minLength'] The value '' has a length of '0'" ) _, catched_warnings = excel2xml_cli.excel2xml(file, "1234", "excel2xml-invalid") assert len(catched_warnings) == 2 @@ -100,8 +98,7 @@ def test_missing_resource_permission(self) -> None: file = f"{INVALID_EXCEL_DIRECTORY}/missing-resource-permissions.xlsx" expected_msg = "Missing permissions for resource 'person_0' (Excel row 2)" expected_xml_validation = regex.escape( - "Line 27: Element 'resource', attribute 'permissions': " - "'' is not a valid value of the atomic type 'xs:NCName'." + "Element 'resource', attribute 'permissions': " "'' is not a valid value of the atomic type 'xs:NCName'." ) _, catched_warnings = excel2xml_cli.excel2xml(file, "1234", "excel2xml-invalid") assert len(catched_warnings) == 2 @@ -120,21 +117,20 @@ def test_missing_restype(self) -> None: def test_missing_bitstream_permission(self) -> None: file = f"{INVALID_EXCEL_DIRECTORY}/no-bitstream-permissions.xlsx" + expected_res_perm_missing = "Missing permissions for resource 'test_thing_1' (Excel row 2)" expected_msg_missing = ( "Missing file permissions for file 'testdata/bitstreams/test.jpg' " "(Resource ID 'test_thing_1', Excel row 2)." " An attempt to deduce them from the resource permissions failed." ) expected_xml_validation = regex.escape( - "Line 28: Element 'bitstream', attribute 'permissions': " - "'' is not a valid value of the atomic type 'xs:NCName'." + "Element 'bitstream', attribute 'permissions': " "'' is not a valid value of the atomic type 'xs:NCName'." ) _, catched_warnings = excel2xml_cli.excel2xml(file, "1234", "excel2xml-invalid") - assert len(catched_warnings) == 2 - msg_missing_label = catched_warnings[0].message.args[0] # type:ignore[union-attr] - assert msg_missing_label == expected_msg_missing - msg_validation = catched_warnings[1].message.args[0] # type:ignore[union-attr] - assert regex.search(expected_xml_validation, msg_validation) + assert len(catched_warnings) == 3 + assert catched_warnings[0].message.args[0] == expected_res_perm_missing # type:ignore[union-attr] + assert catched_warnings[1].message.args[0] == expected_msg_missing # type:ignore[union-attr] + assert regex.search(expected_xml_validation, catched_warnings[2].message.args[0]) # type:ignore[union-attr] def test_invalid_prop_val(self) -> None: file = f"{INVALID_EXCEL_DIRECTORY}/single-invalid-value-for-property.xlsx" @@ -146,9 +142,7 @@ def test_invalid_prop_val(self) -> None: "At least one value per property is required, " "but resource 'person_0', property ':hasName' (Excel row 3) doesn't contain any values." ) - expected_xml_validation = regex.escape( - "Line 28: Element 'text-prop': Missing child element(s). Expected is ( text )." - ) + expected_xml_validation = regex.escape("Element 'text-prop': Missing child element(s). Expected is ( text ).") _, catched_warnings = excel2xml_cli.excel2xml(file, "1234", "excel2xml-invalid") assert len(catched_warnings) == 3 msg_missing_label = catched_warnings[0].message.args[0] # type:ignore[union-attr] diff --git a/test/integration/commands/xmlupload/test_upload_state.py b/test/integration/commands/xmlupload/test_upload_state.py index b31c127f77..5c0498d8d2 100644 --- a/test/integration/commands/xmlupload/test_upload_state.py +++ b/test/integration/commands/xmlupload/test_upload_state.py @@ -15,7 +15,7 @@ def test_save_upload_state(tmp_path: Path) -> None: resource_str = """ - This is an annotation to TestthingOhnePermissions. + This is an annotation to TestthingOhnePermissions. """ diff --git a/test/unittests/commands/excel2xml/excel2xml_lib/test_make_props.py b/test/unittests/commands/excel2xml/excel2xml_lib/test_make_props.py index 459dcfcf7e..772bb903f4 100644 --- a/test/unittests/commands/excel2xml/excel2xml_lib/test_make_props.py +++ b/test/unittests/commands/excel2xml/excel2xml_lib/test_make_props.py @@ -55,19 +55,19 @@ def run_test( testcases.extend( [ ( - f'<{prop}-prop name=":test"><{prop} permissions="prop-default">{val}', + f'<{prop}-prop name=":test"><{prop} permissions="open">{val}', dict(name=":test", value=val), ), ( - f'<{prop}-prop name=":test"><{prop} permissions="prop-restricted">{val}', - dict(name=":test", value=excel2xml.PropertyElement(val, permissions="prop-restricted")), + f'<{prop}-prop name=":test"><{prop} permissions="restricted">{val}', + dict(name=":test", value=excel2xml.PropertyElement(val, permissions="restricted")), ), ( - f'<{prop}-prop name=":test"><{prop} permissions="prop-restricted" comment="comment">{val}' + f'<{prop}-prop name=":test"><{prop} permissions="restricted" comment="comment">{val}' f"", dict( name=":test", - value=excel2xml.PropertyElement(val, permissions="prop-restricted", comment="comment"), + value=excel2xml.PropertyElement(val, permissions="restricted", comment="comment"), ), ), ] @@ -77,17 +77,17 @@ def run_test( [ ( f'<{prop}-prop name=":test">' - f'<{prop} permissions="prop-default">{identical_values[0]}' - f'<{prop} permissions="prop-default">{identical_values[1]}' - f'<{prop} permissions="prop-default">{identical_values[2]}' + f'<{prop} permissions="open">{identical_values[0]}' + f'<{prop} permissions="open">{identical_values[1]}' + f'<{prop} permissions="open">{identical_values[2]}' f"", dict(name=":test", value=identical_values), ), ( f'<{prop}-prop name=":test">' - f'<{prop} permissions="prop-default">{different_values[0 % maximum]}' - f'<{prop} permissions="prop-default">{different_values[1 % maximum]}' - f'<{prop} permissions="prop-default">{different_values[2 % maximum]}' + f'<{prop} permissions="open">{different_values[0 % maximum]}' + f'<{prop} permissions="open">{different_values[1 % maximum]}' + f'<{prop} permissions="open">{different_values[2 % maximum]}' f"", dict( name=":test", @@ -100,21 +100,21 @@ def run_test( ), ( f'<{prop}-prop name=":test">' - f'<{prop} permissions="prop-restricted" comment="comment1">{different_values[3 % maximum]}' - f'<{prop} permissions="prop-default" comment="comment2">{different_values[4 % maximum]}' - f'<{prop} permissions="prop-restricted" comment="comment3">{different_values[5 % maximum]}' + f'<{prop} permissions="restricted" comment="comment1">{different_values[3 % maximum]}' + f'<{prop} permissions="open" comment="comment2">{different_values[4 % maximum]}' + f'<{prop} permissions="restricted" comment="comment3">{different_values[5 % maximum]}' f"", dict( name=":test", value=[ excel2xml.PropertyElement( - different_values[3 % maximum], permissions="prop-restricted", comment="comment1" + different_values[3 % maximum], permissions="restricted", comment="comment1" ), excel2xml.PropertyElement( - different_values[4 % maximum], permissions="prop-default", comment="comment2" + different_values[4 % maximum], permissions="open", comment="comment2" ), excel2xml.PropertyElement( - different_values[5 % maximum], permissions="prop-restricted", comment="comment3" + different_values[5 % maximum], permissions="restricted", comment="comment3" ), ], ), @@ -308,12 +308,8 @@ def test_make_boolean_prop(self) -> None: ["True", "false"], ] - true_xml_expected = ( - 'true' - ) - false_xml_expected = ( - 'false' - ) + true_xml_expected = 'true' + false_xml_expected = 'false' for true_value in true_values: true_xml = etree.tostring(excel2xml.make_boolean_prop(":test", true_value), encoding="unicode") @@ -442,19 +438,19 @@ class TestBitstreamProp: def test_make_bitstream_prop_from_string(self) -> None: res = excel2xml.make_bitstream_prop("foo/bar/baz.txt") assert res.tag.endswith("bitstream") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert res.text == "foo/bar/baz.txt" def test_make_bitstream_prop_from_path(self) -> None: res = excel2xml.make_bitstream_prop(Path("foo/bar/baz.txt")) assert res.tag.endswith("bitstream") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert res.text == "foo/bar/baz.txt" def test_make_bitstream_prop_custom_permissions(self) -> None: - res = excel2xml.make_bitstream_prop("foo/bar/baz.txt", "prop-restricted") + res = excel2xml.make_bitstream_prop("foo/bar/baz.txt", "restricted") assert res.tag.endswith("bitstream") - assert res.attrib["permissions"] == "prop-restricted" + assert res.attrib["permissions"] == "restricted" assert res.text == "foo/bar/baz.txt" def test_make_bitstream_prop_valid_file(self) -> None: @@ -465,14 +461,14 @@ def test_make_bitstream_prop_valid_file(self) -> None: except UserWarning as e: raise AssertionError from e assert res.tag.endswith("bitstream") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert res.text == "testdata/bitstreams/test.jpg" def test_make_bitstream_prop_invalid_file(self) -> None: with pytest.warns(DspToolsUserWarning, match=".*Failed validation in bitstream tag.*"): res = excel2xml.make_bitstream_prop("foo/bar/baz.txt", check=True) assert res.tag.endswith("bitstream") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert res.text == "foo/bar/baz.txt" @@ -484,14 +480,14 @@ class Test_isSegmentOf_and_relatesTo_Prop: def test_defaults(self, tag: str, func: Callable[..., etree._Element]) -> None: res = func("target_id") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "target_id" def test_custom_params(self, tag: str, func: Callable[..., etree._Element]) -> None: - res = func("target_id", "prop-restricted", "my comment") + res = func("target_id", "restricted", "my comment") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-restricted" + assert res.attrib["permissions"] == "restricted" assert res.attrib["comment"] == "my comment" assert res.text == "target_id" @@ -499,7 +495,7 @@ def test_invalid(self, tag: str, func: Callable[..., etree._Element]) -> None: with pytest.warns(DspToolsUserWarning): res = func("") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "" @@ -508,16 +504,16 @@ class Test_hasSegmentBounds_Prop: def test_defaults(self) -> None: res = excel2xml.make_hasSegmentBounds_prop(100, 200) assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.attrib["segment_start"] == "100" assert res.attrib["segment_end"] == "200" assert res.text is None def test_custom_params(self) -> None: - res = excel2xml.make_hasSegmentBounds_prop(10, 20, "prop-restricted", "my comment") + res = excel2xml.make_hasSegmentBounds_prop(10, 20, "restricted", "my comment") assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-restricted" + assert res.attrib["permissions"] == "restricted" assert res.attrib["comment"] == "my comment" assert res.attrib["segment_start"] == "10" assert res.attrib["segment_end"] == "20" @@ -526,7 +522,7 @@ def test_custom_params(self) -> None: def test_floats(self) -> None: res = excel2xml.make_hasSegmentBounds_prop(1.2, 3.4) assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.attrib["segment_start"] == "1.2" assert res.attrib["segment_end"] == "3.4" @@ -535,7 +531,7 @@ def test_floats(self) -> None: def test_nums_as_strings(self) -> None: res = excel2xml.make_hasSegmentBounds_prop("1.2", "3") # type: ignore[arg-type] assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.attrib["segment_start"] == "1.2" assert res.attrib["segment_end"] == "3.0" # silent conversion to float is okay, since the db stores it that way @@ -545,7 +541,7 @@ def test_start_less_than_end(self) -> None: with pytest.warns(DspToolsUserWarning, match="must be less than"): res = excel2xml.make_hasSegmentBounds_prop(5, 3) assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.attrib["segment_start"] == "5" assert res.attrib["segment_end"] == "3" @@ -555,7 +551,7 @@ def test_not_a_number(self) -> None: with pytest.warns(DspToolsUserWarning, match="must be integers or floats"): res = excel2xml.make_hasSegmentBounds_prop(segment_start="foo", segment_end=2) # type: ignore[arg-type] assert res.tag.endswith("hasSegmentBounds") - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.attrib["segment_start"] == "foo" assert res.attrib["segment_end"] == "2" @@ -570,14 +566,14 @@ class Test_hasTitle_hasKeyword: def test_defaults(self, tag: str, func: Callable[..., etree._Element]) -> None: res = func("my text ...") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "my text ..." def test_custom_params(self, tag: str, func: Callable[..., etree._Element]) -> None: - res = func("my text ...", "prop-restricted", "my comment") + res = func("my text ...", "restricted", "my comment") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-restricted" + assert res.attrib["permissions"] == "restricted" assert res.attrib["comment"] == "my comment" assert res.text == "my text ..." @@ -585,7 +581,7 @@ def test_invalid(self, tag: str, func: Callable[..., etree._Element]) -> None: with pytest.warns(DspToolsUserWarning): res = func("") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "" @@ -598,14 +594,14 @@ class Test_hasComment_hasDescription: def test_defaults(self, tag: str, func: Callable[..., etree._Element]) -> None: res = func("my text ...") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "my text ..." def test_custom_params(self, tag: str, func: Callable[..., etree._Element]) -> None: - res = func("my text ...", "prop-restricted", "my comment") + res = func("my text ...", "restricted", "my comment") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-restricted" + assert res.attrib["permissions"] == "restricted" assert res.attrib["comment"] == "my comment" assert res.text == "my text ..." @@ -613,7 +609,7 @@ def test_invalid(self, tag: str, func: Callable[..., etree._Element]) -> None: with pytest.warns(DspToolsUserWarning): res = func("") assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib assert res.text == "" @@ -621,7 +617,7 @@ def test_richtext(self, tag: str, func: Callable[..., etree._Element]) -> None: text = "

my bold and italiziced text ...

" res = func(text) assert res.tag.endswith(tag) - assert res.attrib["permissions"] == "prop-default" + assert res.attrib["permissions"] == "open" assert "comment" not in res.attrib serialized_text = regex.sub(rf"|", "", etree.tostring(res, encoding="unicode")) assert serialized_text == text diff --git a/test/unittests/commands/excel2xml/excel2xml_lib/test_resource_types.py b/test/unittests/commands/excel2xml/excel2xml_lib/test_resource_types.py index 5746988bfd..4ba7b36c1c 100644 --- a/test/unittests/commands/excel2xml/excel2xml_lib/test_resource_types.py +++ b/test/unittests/commands/excel2xml/excel2xml_lib/test_resource_types.py @@ -14,27 +14,27 @@ class TestResourceTypes(unittest.TestCase): def test_make_annotation(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_annotation("label", "id")) self.assertEqual(expected, result) def test_make_annotation_with_permission(self) -> None: - expected = '' - result = _strip_namespace(excel2xml.make_annotation("label", "id", "res-restricted")) + expected = '' + result = _strip_namespace(excel2xml.make_annotation("label", "id", "restricted")) self.assertEqual(expected, result) def test_make_annotation_with_ark(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_annotation("label", "id", ark="ark")) self.assertEqual(expected, result) def test_make_annotation_with_iri(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_annotation("label", "id", iri="iri")) self.assertEqual(expected, result) def test_make_annotation_with_creation_date(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_annotation("label", "id", creation_date="2019-10-23T13:45:12Z")) self.assertEqual(expected, result) @@ -47,27 +47,27 @@ def test_fail_annotation_with_invalid_creation_date(self) -> None: excel2xml.make_annotation("label", "id", creation_date="2019-10-23T13:45:12") def test_make_link(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_link("label", "id")) self.assertEqual(expected, result) def test_make_link_with_permission(self) -> None: - expected = '' - result = _strip_namespace(excel2xml.make_link("label", "id", "res-restricted")) + expected = '' + result = _strip_namespace(excel2xml.make_link("label", "id", "restricted")) self.assertEqual(expected, result) def test_make_link_with_ark(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_link("label", "id", ark="ark")) self.assertEqual(expected, result) def test_make_link_with_iri(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_link("label", "id", iri="iri")) self.assertEqual(expected, result) def test_make_link_with_creation_date(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_link("label", "id", creation_date="2019-10-23T13:45:12Z")) self.assertEqual(expected, result) @@ -80,27 +80,27 @@ def test_fail_link_with_invalid_creation_date(self) -> None: excel2xml.make_link("label", "id", creation_date="2019-10-23T13:45:12") def test_make_region(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_region("label", "id")) self.assertEqual(expected, result) def test_make_region_with_permission(self) -> None: - expected = '' - result = _strip_namespace(excel2xml.make_region("label", "id", "res-restricted")) + expected = '' + result = _strip_namespace(excel2xml.make_region("label", "id", "restricted")) self.assertEqual(expected, result) def test_make_region_with_ark(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_region("label", "id", ark="ark")) self.assertEqual(expected, result) def test_make_region_with_iri(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_region("label", "id", iri="iri")) self.assertEqual(expected, result) def test_make_region_with_creation_date(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_region("label", "id", creation_date="2019-10-23T13:45:12Z")) self.assertEqual(expected, result) @@ -113,47 +113,47 @@ def test_fail_region_with_invalid_creation_date(self) -> None: excel2xml.make_region("label", "id", creation_date="2019-10-23T13:45:12") def test_make_audio_segment(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_audio_segment("label", "id")) self.assertEqual(expected, result) def test_make_audio_segment_with_custom_permissions(self) -> None: - expected = '' - result = _strip_namespace(excel2xml.make_audio_segment("label", "id", "res-restricted")) + expected = '' + result = _strip_namespace(excel2xml.make_audio_segment("label", "id", "restricted")) self.assertEqual(expected, result) def test_make_video_segment(self) -> None: - expected = '' + expected = '' result = _strip_namespace(excel2xml.make_video_segment("label", "id")) self.assertEqual(expected, result) def test_make_video_segment_with_custom_permissions(self) -> None: - expected = '' - result = _strip_namespace(excel2xml.make_video_segment("label", "id", "res-restricted")) + expected = '' + result = _strip_namespace(excel2xml.make_video_segment("label", "id", "restricted")) self.assertEqual(expected, result) def test_make_resource(self) -> None: test_cases: list[tuple[Callable[..., etree._Element], str]] = [ ( lambda: excel2xml.make_resource("label", "restype", "id"), - '', + '', ), ( - lambda: excel2xml.make_resource("label", "restype", "id", "res-restricted"), - '', + lambda: excel2xml.make_resource("label", "restype", "id", "restricted"), + '', ), ( lambda: excel2xml.make_resource("label", "restype", "id", ark="ark"), - '', + '', ), ( lambda: excel2xml.make_resource("label", "restype", "id", iri="iri"), - '', + '', ), ( lambda: excel2xml.make_resource("label", "restype", "id", creation_date="2019-10-23T13:45:12Z"), ( - '' ), ), diff --git a/test/unittests/commands/ingest_xmlupload/test_apply_ingest_id.py b/test/unittests/commands/ingest_xmlupload/test_apply_ingest_id.py index f8f8b5f58c..7c926af822 100644 --- a/test/unittests/commands/ingest_xmlupload/test_apply_ingest_id.py +++ b/test/unittests/commands/ingest_xmlupload/test_apply_ingest_id.py @@ -8,8 +8,8 @@ class TestReplaceBitstreamPaths: def test_all_good(self) -> None: xml = """ - - images/Fluffy.jpg + + images/Fluffy.jpg """ @@ -20,14 +20,14 @@ def test_all_good(self) -> None: assert not ingest_info.unused_mediafiles res_bitstream = res_root[0][0] assert res_bitstream.text == "fluffy_id" - assert res_bitstream.attrib["permissions"] == "prop-default" + assert res_bitstream.attrib["permissions"] == "open" assert res_bitstream.tag == "bitstream" def test_extra_paths(self) -> None: xml = """ - - images/Fluffy.jpg + + images/Fluffy.jpg """ @@ -38,14 +38,14 @@ def test_extra_paths(self) -> None: assert ingest_info.unused_mediafiles == ["extra_media"] res_bitstream = res_root[0][0] assert res_bitstream.text == "fluffy_id" - assert res_bitstream.attrib["permissions"] == "prop-default" + assert res_bitstream.attrib["permissions"] == "open" assert res_bitstream.tag == "bitstream" def test_missing_paths(self) -> None: xml = """ - - images/Fluffy.jpg + + images/Fluffy.jpg """ @@ -56,7 +56,7 @@ def test_missing_paths(self) -> None: assert ingest_info.unused_mediafiles == ["extra_media"] res_bitstream = res_root[0][0] assert res_bitstream.text == "images/Fluffy.jpg" - assert res_bitstream.attrib["permissions"] == "prop-default" + assert res_bitstream.attrib["permissions"] == "open" assert res_bitstream.tag == "bitstream" diff --git a/test/unittests/commands/xmlupload/models/deserialize/test_deserialise_value.py b/test/unittests/commands/xmlupload/models/deserialize/test_deserialise_value.py index 2a0c8dcf03..1e7f98e02e 100644 --- a/test/unittests/commands/xmlupload/models/deserialize/test_deserialise_value.py +++ b/test/unittests/commands/xmlupload/models/deserialize/test_deserialise_value.py @@ -76,8 +76,8 @@ def test_get_values_from_normal_props_invalid(self) -> None: XMLProperty._get_values_from_normal_props(etree.fromstring(string), "uri") def test_get_value_from_knora_base_prop_with_all_attributes(self) -> None: - string = """video_thing_1""" - expected = XMLValue("video_thing_1", permissions="prop-default", comment="cmt") + string = """video_thing_1""" + expected = XMLValue("video_thing_1", permissions="open", comment="cmt") res = XMLProperty._get_value_from_knora_base_prop(etree.fromstring(string)) assert res == expected @@ -114,8 +114,8 @@ def test_get_value_from_knora_base_prop_hasTitle(self) -> None: class Test_XMLValue: def test_from_node_integer_value(self) -> None: # test content, and these attributes: comments, permissions, and linkUUID (if existing) - node = etree.fromstring("""99""") - expected = XMLValue(value="99", comment="cmt", permissions="prop-default", link_uuid="foo") + node = etree.fromstring("""99""") + expected = XMLValue(value="99", comment="cmt", permissions="open", link_uuid="foo") res = XMLValue.from_node(node, "integer") assert res == expected @@ -157,7 +157,7 @@ def test_from_node_list_value(self) -> None: def test_cleanup_unformatted_text() -> None: """Test the removal of whitespaces and line breaks in utf8-encoded text values""" - orig = """ + orig = """ Poem with 1 line break: @@ -186,7 +186,7 @@ def test_cleanup_unformatted_text() -> None: def test_extract_formatted_text_from_node() -> None: - orig = """ + orig = """ This is italicized and bold text! """ expected = "This is italicized and bold text!" diff --git a/test/unittests/commands/xmlupload/stash/test_construct_and_analyze_graph.py b/test/unittests/commands/xmlupload/stash/test_construct_and_analyze_graph.py index d37c5d6846..9842c6effb 100644 --- a/test/unittests/commands/xmlupload/stash/test_construct_and_analyze_graph.py +++ b/test/unittests/commands/xmlupload/stash/test_construct_and_analyze_graph.py @@ -26,13 +26,13 @@ def test_create_info_from_xml_for_graph_from_one_resource() -> None: test_ele = etree.fromstring( - """ + """ - res_B_19 - res_C_19 + res_B_19 + res_C_19 - + res_B_19 res_C_19 @@ -49,14 +49,14 @@ def test_create_info_from_xml_for_graph_from_one_resource() -> None: def test_create_info_from_xml_for_graph_from_one_resource_one() -> None: test_ele = etree.fromstring( - """ + """ - + res_B_11 - res_B_11 + res_B_11 """ ) @@ -68,21 +68,19 @@ def test_create_info_from_xml_for_graph_from_one_resource_one() -> None: def test_create_info_from_xml_for_graph_from_one_resource_no_links() -> None: - test_ele = etree.fromstring( - '' - ) + test_ele = etree.fromstring('') res_resptr, res_xml = _create_info_from_xml_for_graph_from_one_resource(test_ele) assert (res_resptr, res_xml) == ([], []) def test_text_only_create_info_from_xml_for_graph_from_one_resource() -> None: test_ele = etree.fromstring( - """ + """ - + res_A_18 - + res_B_18 @@ -96,7 +94,7 @@ def test_text_only_create_info_from_xml_for_graph_from_one_resource() -> None: def test_extract_id_one_text_with_one_id() -> None: test_ele = etree.fromstring( - """ + """ res_A_11 """ ) @@ -106,7 +104,7 @@ def test_extract_id_one_text_with_one_id() -> None: def test_extract_id_one_text_with_iri() -> None: test_ele = etree.fromstring( - '' + '' 'res_A_11' ) res = _extract_ids_from_one_text_value(test_ele) @@ -115,7 +113,7 @@ def test_extract_id_one_text_with_iri() -> None: def test_extract_id_one_text_with_several_id() -> None: test_ele = etree.fromstring( - """ + """ res_A_11 res_B_11 res_B_11 @@ -128,10 +126,10 @@ def test_extract_id_one_text_with_several_id() -> None: def test_extract_ids_from_text_prop_with_several_text_links() -> None: test_ele = etree.fromstring( """ - + res_A_18 - + res_B_18 """ @@ -144,10 +142,10 @@ def test_extract_ids_from_text_prop_with_several_text_links() -> None: def test_extract_ids_from_text_prop_with_iris_and_ids() -> None: test_ele = etree.fromstring( """ - + foo - + res_B_18 """ @@ -164,7 +162,7 @@ def test_create_class_instance_resptr_link_one_link() -> None: test_ele = etree.fromstring( """ - res_C_15 + res_C_15 """ ) res = _create_resptr_link_objects("res_A_15", test_ele) @@ -174,9 +172,9 @@ def test_create_class_instance_resptr_link_one_link() -> None: def test_create_class_instance_resptr_link_several() -> None: test_ele = etree.fromstring( """ - res_A_13 - res_B_13 - res_C_13 + res_A_13 + res_B_13 + res_C_13 """ ) res = _create_resptr_link_objects("res_D_13", test_ele) @@ -189,9 +187,9 @@ def test_create_class_instance_resptr_link_several() -> None: def test_create_class_instance_resptr_link_with_iris() -> None: test_ele = etree.fromstring( """ - res_A_13 - res_B_13 - http://rdfh.ch/4123/vEpjk7zAQBC2j3pvTGSxcw + res_A_13 + res_B_13 + http://rdfh.ch/4123/vEpjk7zAQBC2j3pvTGSxcw """ ) res = _create_resptr_link_objects("foo", test_ele) @@ -207,19 +205,19 @@ def test_create_class_instance_resptr_link_with_iris() -> None: def test_create_info_from_xml_for_graph_check_UUID_in_root() -> None: root = etree.fromstring( """ - + - res_B_11 + res_B_11 - + - + Start textres_C_11end text. - + """ ) res_resptr_li, res_xml_li, res_all_ids = create_info_from_xml_for_graph(root) diff --git a/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py b/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py index 42b13b745a..fa29a4a0d1 100644 --- a/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py +++ b/test/unittests/commands/xmlupload/stash/test_upload_stashed_xml_texts.py @@ -7,8 +7,8 @@ def test_find_ids_referenced_in_salsah_links_one_link() -> None: one_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( - '' - '' + '' + '' 'r2_id' "" ) @@ -20,8 +20,8 @@ def test_find_ids_referenced_in_salsah_links_one_link() -> None: def test_find_ids_referenced_in_salsah_links_three_links() -> None: three_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( - '' - '' + '' + '' 'r2_idThis is normal text' 'r3_id' 'r2_id' @@ -36,16 +36,16 @@ def test__replace_internal_ids_with_iris_one_link() -> None: resolver = IriResolver({"r1_id": "r1_iri", "r2_id": "r2_iri", "r3_id": "r3_iri"}) one_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( - '' - '' + '' + '' 'r2_id' "" ) ) returned_instance = one_link_KnoraStandoffXml.with_iris(resolver) expected_str = ( - '' - '' + '' + '' 'r2_id' "" ) @@ -56,8 +56,8 @@ def test__replace_internal_ids_with_iris_three_links() -> None: resolver = IriResolver({"r1_id": "r1_iri", "r2_id": "r2_iri", "r3_id": "r3_iri"}) three_link_KnoraStandoffXml = FormattedTextValue( xmlstr=( - '' - '' + '' + '' 'r2_idThis is normal text' 'r3_id' 'r2_id' @@ -66,8 +66,8 @@ def test__replace_internal_ids_with_iris_three_links() -> None: ) returned_instance = three_link_KnoraStandoffXml.with_iris(resolver) expected_str = ( - '' - '' + '' + '' 'r2_idThis is normal text' 'r3_id' 'r2_id' diff --git a/test/unittests/commands/xmlupload/test_check_consistency_with_ontology.py b/test/unittests/commands/xmlupload/test_check_consistency_with_ontology.py index 81fb6df16c..876b6cdcc5 100644 --- a/test/unittests/commands/xmlupload/test_check_consistency_with_ontology.py +++ b/test/unittests/commands/xmlupload/test_check_consistency_with_ontology.py @@ -257,9 +257,9 @@ def test_get_prefix_and_prop_cls_identifier_error() -> None: def test_get_all_class_types_and_ids_from_data() -> None: test_ele = etree.fromstring( """ - - - + + + """ ) expected_classes = {":TestThing1": ["resA"], ":TestThing2": ["resB", "resC"]} @@ -271,12 +271,12 @@ def test_get_all_class_types_and_ids_from_data() -> None: def test_get_all_property_names_and_resource_ids_one_resource() -> None: test_ele = etree.fromstring( - """ + """ - resB + resB - resA + resA """ ) @@ -292,19 +292,19 @@ def test_get_all_property_names_and_resource_ids_one_resource() -> None: def test_get_all_classes_and_properties_from_data() -> None: test_ele = etree.fromstring( """ - + - resB + resB - + - + - resB + resB - resA + resA """ @@ -330,12 +330,12 @@ def test_get_id_and_props_and_encodings_from_one_resource_no_text() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true """ @@ -350,12 +350,12 @@ def test_get_id_and_props_and_encodings_from_one_resource_richtext() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true Text @@ -375,12 +375,12 @@ def test_get_id_and_props_and_encodings_from_one_resource_two_text_props() -> No + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true Text @@ -406,7 +406,7 @@ def test_richtext_several_text_ele(self) -> None: """ < - + This text contains links to all resources: test_thing_0 @@ -453,19 +453,19 @@ def test_simple_one_text_ele(self) -> None: def test_get_all_ids_and_props_and_encodings_from_root_no_text() -> None: test_ele = etree.fromstring( """ - + - resB + resB - + - + - resB + resB - resA + resA """ @@ -480,30 +480,30 @@ def test_get_all_ids_and_props_and_encodings_from_root_with_text() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text - + - resB + resB
""" @@ -548,31 +548,31 @@ def test_analyse_all_text_value_encodings_are_correct_all_good() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text Text - + - resB + resB
""" @@ -590,31 +590,31 @@ def test_analyse_all_text_value_encodings_are_correct_problems() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text Text - + - resB + resB
""" diff --git a/test/unittests/commands/xmlupload/test_resource_create_client.py b/test/unittests/commands/xmlupload/test_resource_create_client.py index 0fe928aeb9..611425aa32 100644 --- a/test/unittests/commands/xmlupload/test_resource_create_client.py +++ b/test/unittests/commands/xmlupload/test_resource_create_client.py @@ -399,10 +399,10 @@ def test_to_boolean() -> None: def test_make_iiif_uri_value_with_permissions() -> None: - permission = {"prop-default": Permissions({PermissionValue.CR: ["knora-admin:ProjectAdmin"]})} + permission = {"open": Permissions({PermissionValue.CR: ["knora-admin:ProjectAdmin"]})} xml_str = """ - http://example.org/prefix1/abcd1234/full/full/0/native.jpg + http://example.org/prefix1/abcd1234/full/full/0/native.jpg """ xmlresource = XMLResource.from_node(etree.fromstring(xml_str), "foo") @@ -412,7 +412,7 @@ def test_make_iiif_uri_value_with_permissions() -> None: def test_make_iiif_uri_value_no_permissions() -> None: - permission = {"prop-default": Permissions()} + permission = {"open": Permissions()} xml_str = """ http://example.org/prefix1/abcd1234/full/full/0/native.jpg @@ -428,7 +428,7 @@ def test_make_iiif_uri_value_raises() -> None: permission = {"": Permissions()} xml_str = """ - http://example.org/prefix1/abcd1234/full/full/0/native.jpg + http://example.org/prefix1/abcd1234/full/full/0/native.jpg """ xmlresource = XMLResource.from_node(etree.fromstring(xml_str), "foo") @@ -459,12 +459,12 @@ def test_make_iiif_uri_value_serialised() -> None: def test_make_boolean_value_with_permissions() -> None: - permissions_lookup = {"prop-default": Permissions({PermissionValue.CR: ["knora-admin:ProjectAdmin"]})} + permissions_lookup = {"open": Permissions({PermissionValue.CR: ["knora-admin:ProjectAdmin"]})} xml_str = """ - true + true """ diff --git a/test/unittests/utils/test_xml_validation.py b/test/unittests/utils/test_xml_validation.py index 520af5f0a7..a5721af3e9 100644 --- a/test/unittests/utils/test_xml_validation.py +++ b/test/unittests/utils/test_xml_validation.py @@ -101,19 +101,19 @@ def test_find_all_text_props_with_multiple_encodings_good() -> None: def test_get_all_ids_prop_encoding_from_root_no_text() -> None: test_ele = etree.fromstring( """ - + - resB + resB - + - + - resB + resB - resA + resA """ @@ -128,30 +128,30 @@ def test_get_all_ids_prop_encoding_from_root_with_text() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text - + - resB + resB """ @@ -175,12 +175,12 @@ def test_no_text(self) -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true """ @@ -194,12 +194,12 @@ def test_one_text_prop(self) -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true Text @@ -218,12 +218,12 @@ def test_two_text_prop(self) -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss - true + true Text @@ -250,7 +250,7 @@ def test_richtext_several_text_ele(self) -> None: """ < - + This text contains links to all resources: test_thing_0 @@ -297,31 +297,31 @@ def test_check_if_only_one_encoding_is_used_in_xml_good() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text 1 Text 2 - + - resB + resB """ @@ -336,31 +336,31 @@ def test_check_if_only_one_encoding_is_used_in_xml_problem() -> None: + permissions="open"> - https://dasch.swiss + https://dasch.swiss Text - + Text - + - resB + resB Text 1 Text 2 - + - resB + resB """ diff --git a/testdata/bitstreams/test.odd b/testdata/bitstreams/test.odd index f2430e5d16..b3ad4d6137 100644 --- a/testdata/bitstreams/test.odd +++ b/testdata/bitstreams/test.odd @@ -1,21 +1,6 @@ - - - - - - - RV - V - - - - - This is a test XML file - - - - + + Tove + Jani + Reminder + Don't forget me this weekend! + diff --git a/testdata/bitstreams/test.rng b/testdata/bitstreams/test.rng index f2430e5d16..5b786cc226 100644 --- a/testdata/bitstreams/test.rng +++ b/testdata/bitstreams/test.rng @@ -1,21 +1,7 @@ - - - - - - - RV - V - - - - - This is a test XML file - - - - + + + + + + + diff --git a/testdata/bitstreams/test.xml b/testdata/bitstreams/test.xml index f2430e5d16..b3ad4d6137 100644 --- a/testdata/bitstreams/test.xml +++ b/testdata/bitstreams/test.xml @@ -1,21 +1,6 @@ - - - - - - - RV - V - - - - - This is a test XML file - - - - + + Tove + Jani + Reminder + Don't forget me this weekend! + diff --git a/testdata/dsp-ingest-data/dsp-ingest.xml b/testdata/dsp-ingest-data/dsp-ingest.xml index bfb311cba6..69cad12e82 100644 --- a/testdata/dsp-ingest-data/dsp-ingest.xml +++ b/testdata/dsp-ingest-data/dsp-ingest.xml @@ -1,76 +1,68 @@ - + V V D CR - CR - - - V - V - D - CR - CR - - images/Fluffy.jpg + + images/Fluffy.jpg - Columbus Metropolitan Library, Public domain, via Wikimedia Commons + Columbus Metropolitan Library, Public domain, via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Siberian_Husky_dog_-_DPLA_-_b729034a262a5abba8f565574bb84dae.jpg + https://commons.wikimedia.org/wiki/File:Siberian_Husky_dog_-_DPLA_-_b729034a262a5abba8f565574bb84dae.jpg - - images/subFolder/Fluffy.jpg + + images/subFolder/Fluffy.jpg - Columbus Metropolitan Library, Public domain, via Wikimedia Commons + Columbus Metropolitan Library, Public domain, via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Siberian_Husky_dog_-_DPLA_-_5248117eea26fda68834d39ebc90f925.jpg + https://commons.wikimedia.org/wiki/File:Siberian_Husky_dog_-_DPLA_-_5248117eea26fda68834d39ebc90f925.jpg - - images/subFolder/ShibaInu.jpg + + images/subFolder/ShibaInu.jpg - Picography, CC0, via Wikimedia Commons + Picography, CC0, via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:Picography-shiba-inu-dog-forest-walk-sm-1.jpg + https://commons.wikimedia.org/wiki/File:Picography-shiba-inu-dog-forest-walk-sm-1.jpg - - images/GoodGirl.jpg + + images/GoodGirl.jpg - Oldsingerman20, CC0, via Wikimedia Commons + Oldsingerman20, CC0, via Wikimedia Commons - https://commons.wikimedia.org/wiki/File:New_Guinea_Singing_Dog_looking_up.jpg + https://commons.wikimedia.org/wiki/File:New_Guinea_Singing_Dog_looking_up.jpg - + - Fluffy1 - Fluffy2 + Fluffy1 + Fluffy2 - + - Shiba + Shiba - + - GoodGirlImage + GoodGirlImage diff --git a/testdata/excel2xml/excel2xml-expected-output.xml b/testdata/excel2xml/excel2xml-expected-output.xml index b32244ead3..aeba088726 100644 --- a/testdata/excel2xml/excel2xml-expected-output.xml +++ b/testdata/excel2xml/excel2xml-expected-output.xml @@ -1,117 +1,109 @@ - + V V D CR - CR - - M - CR - CR - - - V - V + + RV + RV D CR - CR - - M + + D CR - CR - + - Homer - Ὅμηρος - ?? + Homer + Ὅμηρος + ?? - https://en.wiktionary.org/wiki/Ῥόδος - https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default - https://reg-exr.com:3000 - https://reg-exr.com:3000/path/to/file_(%C3%89).htm + https://en.wiktionary.org/wiki/Ῥόδος + https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default + https://reg-exr.com:3000 + https://reg-exr.com:3000/path/to/file_(%C3%89).htm - https://reg-exr.com:3000/path/to/file#fragment,fragment - https://reg-exr.com:3000/path/to/file?query=test - https://reg-exr.com:3000/path/to/file?query=test#fragment - https://reg-exr.com/path/to/file?query=test#fragment + https://reg-exr.com:3000/path/to/file#fragment,fragment + https://reg-exr.com:3000/path/to/file?query=test + https://reg-exr.com:3000/path/to/file?query=test#fragment + https://reg-exr.com/path/to/file?query=test#fragment - http://www.168.1.1.0/path - http://www.168.1.1.0:4200/path - http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path - https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg + http://www.168.1.1.0/path + http://www.168.1.1.0:4200/path + http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path + https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg - http://datypic.com/prod.html#shirt - https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA.. - https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018 - http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016 + http://datypic.com/prod.html#shirt + https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA.. + https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018 + http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016 - https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478 + https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478 - + - This is an annotation to the resource Homer + This is an annotation to the resource Homer - person_0 + person_0 - - testdata/bitstreams/test.jpg + + testdata/bitstreams/test.jpg - Iliad Prooem ' and a single quote in utf8 + Iliad Prooem ' and a single quote in utf8 - Iliad Prooem ' and a single quote in xml + Iliad Prooem ' and a single quote in xml - © Library of Congress Collection of Manuscripts in St. Catherine's Monastery, Mt. Sinai. + © Library of Congress Collection of Manuscripts in St. Catherine's Monastery, Mt. Sinai. - artwork + artwork - + - Dies ist ein TestThing + Dies ist ein TestThing - test_thing_1 + test_thing_1 - + - This is an annotation to Testthing. - Second comment + This is an annotation to Testthing. + Second comment - #5d1f1e + #5d1f1e - {"type": "rectangle", "lineWidth": 2, "points": [{"x": 0.08, "y": 0.16}, {"x": 0.73, "y": 0.72}], "original_index": 0} + {"type": "rectangle", "lineWidth": 2, "points": [{"x": 0.08, "y": 0.16}, {"x": 0.73, "y": 0.72}], "original_index": 0} - img_obj_6 + img_obj_6 - - testdata/bitstreams/test.jpg + + testdata/bitstreams/test.jpg - Dies ist ein einfacher Text ohne Markup - Nochmals ein einfacher Text + Dies ist ein einfacher Text ohne Markup + Nochmals ein einfacher Text - This is bold and strong + This is bold and strong text! It contains links to all resources: test_thing_0 test_thing_1 @@ -126,31 +118,31 @@ audio_thing_1 test_thing_2 - Another text without salsah-links - Another text without salsah-links + Another text without salsah-links + Another text without salsah-links - https://dasch.swiss + https://dasch.swiss - true + true - JULIAN:BCE:0700:BCE:0600 - CE:1849:CE:1850 - 2022 + JULIAN:BCE:0700:BCE:0600 + CE:1849:CE:1850 + 2022 - 4711 + 4711 - + - This is a link between Homer and Iliad Prooem + This is a link between Homer and Iliad Prooem - person_0 - img_obj_6 + person_0 + img_obj_6 diff --git a/testdata/excel2xml/excel2xml-testdata.csv b/testdata/excel2xml/excel2xml-testdata.csv index d607f0c2a8..cadc69d234 100644 --- a/testdata/excel2xml/excel2xml-testdata.csv +++ b/testdata/excel2xml/excel2xml-testdata.csv @@ -1,29 +1,29 @@ id,restype,label,ark,iri,created,permissions,file,file permissions,prop name,prop type,prop list,1_value,1_encoding,1_permissions,1_comment,2_value,2_encoding,2_permissions,2_comment,3_value,3_encoding,3_permissions,3_comment,4_value,4_encoding,4_permissions,4_comment, ,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -person_0,:Person,Homer,,,1999-12-31T23:59:59.9999999+01:00,res-default,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasName,text-prop,,Homer,utf8,prop-default,,Ὅμηρος,utf8,prop-default,,??,utf8,prop-default,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasIdentifier,uri-prop,,https://en.wiktionary.org/wiki/Ῥόδος,,prop-default,,https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default,,prop-default,,https://reg-exr.com:3000,,prop-default,,https://reg-exr.com:3000/path/to/file_(%C3%89).htm,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasExternalLink,uri-prop,,"https://reg-exr.com:3000/path/to/file#fragment,fragment",,prop-default,,https://reg-exr.com:3000/path/to/file?query=test,,prop-default,,https://reg-exr.com:3000/path/to/file?query=test#fragment,,prop-default,,https://reg-exr.com/path/to/file?query=test#fragment,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasAnotherLink,uri-prop,,http://www.168.1.1.0/path,,prop-default,,http://www.168.1.1.0:4200/path,,prop-default,,http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path,,prop-default,,https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasThirdLink,uri-prop,,http://datypic.com/prod.html#shirt,,prop-default,,https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA..,,prop-default,,https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018,,prop-default,,http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasFourthLink,uri-prop,,https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -annotation_0,Annotation,Annotation to Homer,,,,res-default,,,,,,,,,,,,,,,,,,,,,,, ,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasComment,text-prop,,This is an annotation to the resource Homer,xml,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,isAnnotationOf,resptr-prop,,person_0,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -img_obj_6,:Image2D,Iliad Prooem,,,,res-default,testdata/bitstreams/test.jpg,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasTitle,text-prop,,Iliad Prooem ' and a single quote in utf8,utf8,prop-default,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasDescription,text-prop,,Iliad Prooem ' and a single quote in xml,xml,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasCopyright,text-prop,,"© Library of Congress Collection of Manuscripts in St. Catherine's Monastery, Mt. Sinai.",xml,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasCategory,list-prop,category,artwork,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -test_thing_0,:TestThing2,Testthing Zero,ark:/72163/4123-31ec6eab334-a.2022829,,,res-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasText,text-prop,,Dies ist ein TestThing,utf8,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasTestThing,resptr-prop,,test_thing_1,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -region_0,Region,Region of img_obj_6,,http://rdfh.ch/4123/54SYvWF0QUW6a,,res-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasComment,text-prop,,This is an annotation to Testthing.,xml,prop-restricted,,Second comment,xml,prop-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasColor,color-prop,,#5d1f1e,,prop-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasGeometry,geometry-prop,,"{""type"": ""rectangle"", ""lineWidth"": 2, ""points"": [{""x"": 0.08, ""y"": 0.16}, {""x"": 0.73, ""y"": 0.72}], ""original_index"": 0}",,prop-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,isRegionOf,resptr-prop,,img_obj_6,,prop-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -test_thing_1,:TestThing,First Testthing,,http://rdfh.ch/4123/54SYvWF0QUW6d,,res-default,testdata/bitstreams/test.jpg,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasText,text-prop,,Dies ist ein einfacher Text ohne Markup,utf8,prop-default,,Nochmals ein einfacher Text,utf8,prop-restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +person_0,:Person,Homer,,,1999-12-31T23:59:59.9999999+01:00,open,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasName,text-prop,,Homer,utf8,open,,Ὅμηρος,utf8,open,,??,utf8,open,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasIdentifier,uri-prop,,https://en.wiktionary.org/wiki/Ῥόδος,,open,,https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default,,open,,https://reg-exr.com:3000,,open,,https://reg-exr.com:3000/path/to/file_(%C3%89).htm,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasExternalLink,uri-prop,,"https://reg-exr.com:3000/path/to/file#fragment,fragment",,open,,https://reg-exr.com:3000/path/to/file?query=test,,open,,https://reg-exr.com:3000/path/to/file?query=test#fragment,,open,,https://reg-exr.com/path/to/file?query=test#fragment,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasAnotherLink,uri-prop,,http://www.168.1.1.0/path,,open,,http://www.168.1.1.0:4200/path,,open,,http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path,,open,,https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasThirdLink,uri-prop,,http://datypic.com/prod.html#shirt,,open,,https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA..,,open,,https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018,,open,,http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasFourthLink,uri-prop,,https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +annotation_0,Annotation,Annotation to Homer,,,,open,,,,,,,,,,,,,,,,,,,,,,, ,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasComment,text-prop,,This is an annotation to the resource Homer,xml,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,isAnnotationOf,resptr-prop,,person_0,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +img_obj_6,:Image2D,Iliad Prooem,,,,open,testdata/bitstreams/test.jpg,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasTitle,text-prop,,Iliad Prooem ' and a single quote in utf8,utf8,open,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasDescription,text-prop,,Iliad Prooem ' and a single quote in xml,xml,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasCopyright,text-prop,,"© Library of Congress Collection of Manuscripts in St. Catherine's Monastery, Mt. Sinai.",xml,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasCategory,list-prop,category,artwork,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +test_thing_0,:TestThing2,Testthing Zero,ark:/72163/4123-31ec6eab334-a.2022829,,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasText,text-prop,,Dies ist ein TestThing,utf8,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasTestThing,resptr-prop,,test_thing_1,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +region_0,Region,Region of img_obj_6,,http://rdfh.ch/4123/54SYvWF0QUW6a,,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasComment,text-prop,,This is an annotation to Testthing.,xml,restricted,,Second comment,xml,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasColor,color-prop,,#5d1f1e,,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasGeometry,geometry-prop,,"{""type"": ""rectangle"", ""lineWidth"": 2, ""points"": [{""x"": 0.08, ""y"": 0.16}, {""x"": 0.73, ""y"": 0.72}], ""original_index"": 0}",,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,isRegionOf,resptr-prop,,img_obj_6,,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +test_thing_1,:TestThing,First Testthing,,http://rdfh.ch/4123/54SYvWF0QUW6d,,open,testdata/bitstreams/test.jpg,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasText,text-prop,,Dies ist ein einfacher Text ohne Markup,utf8,open,,Nochmals ein einfacher Text,utf8,restricted,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,:hasRichtext,text-prop,,"This is bold and strong text! It contains links to all resources: test_thing_0 test_thing_1 @@ -36,14 +36,14 @@ test_thing_1,:TestThing,First Testthing,,http://rdfh.ch/4123/54SYvWF0QUW6d,,res- text_thing_1 zip_thing_1 audio_thing_1 - test_thing_2",xml,prop-default,,Another text without salsah-links,xml,prop-default,,Another text without salsah-links,xml,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasUri,uri-prop,,https://dasch.swiss,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasBoolean,boolean-prop,,true,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasDate,date-prop,,JULIAN:BCE:0700:BCE:0600,,prop-default,,CE:1849:CE:1850,,prop-default,,2022,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,:hasInteger,integer-prop,,4711,,prop-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -link_thing_0,LinkObj,Link between person_0 and img_obj_6,ark:/72163/4123-31ec6eab334-a.202280,,,res-default,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasComment,text-prop,,This is a link between Homer and Iliad Prooem,xml,prop-default,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,hasLinkTo,resptr-prop,,person_0,,prop-default,,img_obj_6,,prop-default,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + test_thing_2",xml,open,,Another text without salsah-links,xml,open,,Another text without salsah-links,xml,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasUri,uri-prop,,https://dasch.swiss,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasBoolean,boolean-prop,,true,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasDate,date-prop,,JULIAN:BCE:0700:BCE:0600,,open,,CE:1849:CE:1850,,open,,2022,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,:hasInteger,integer-prop,,4711,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +link_thing_0,LinkObj,Link between person_0 and img_obj_6,ark:/72163/4123-31ec6eab334-a.202280,,,open,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasComment,text-prop,,This is a link between Homer and Iliad Prooem,xml,open,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +,,,,,,,,,hasLinkTo,resptr-prop,,person_0,,open,,img_obj_6,,open,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,, ,,,,,,,,,,,,,,,,, ,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , ," ", ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/testdata/excel2xml/excel2xml-testdata.xls b/testdata/excel2xml/excel2xml-testdata.xls index a90a742457f5067b11f3a6b10d579d83c2f6cfae..e4ffd6b5285a86f69caf7cdeb621555548e1c07a 100644 GIT binary patch delta 2918 zcmY*bTWl0%6h5=t-FDmEPA^-gyY0X(ZK+T$Rv58rX=yFB7rGXxh%41fOS`>ocYC4s z0!0wFCYtCEPXsTCM18;z7h`-eJ`jB{#2Dg(A`*@9#q@#12Q`{_=FC5*yHB&{o9~?e zo9{p8|99o4W96pf`s6<4qKNNH6%@k1@M+1P0PtGc(e%C|ZZvO8uQfM$L}TZc^lWD= z*PjCrpBkFX2S^T0&m?0fW`+jE&%HZ`e%lA|hXQc08Q_Q$;H&)rw~*b|2GE@ca2uaL z;`8+b02e)owEQYr*DuG+hnQt4Ym9}}-4b(2hbCfLbPr>hI$W&7g*sF) zn3d^}3v7p6;D>|oFtaR&?!`29FJqPt*JwEUh{W7k4!PMOH#yY6tW0HYR^}#Uk21@0 z=^#Q`TQpX#)WYvVOIqqoP6b{uhfQ$R{_&}C#Q?c|7*a+C{w zI3G6Cob8l|OtiOlOU#?4*2_ESMYYGUBdkm>I=4R6Ua9tniT!+T_}C2}xq-(HsqVd-?6+i@zaO8z3 z^oixThHhSp*VjEQ-xQ&neQ=Z`2S(3ub~6QS$t>mv-m*N#!cOGke<4v+2j#Y=aY=W1i~kIp(CUidfQ6 z2PLD7RvHr5lA3ywF|(^z#qDI1IxMjb#2XReX-$2VF^kte9Wi1O(}-s~rEylBO6br>@e ztE9|XnOVu1m6VD9LTJw_rS7%4j_4_g>6AGyGj-0?Df1;}(VEP%UDwI=1!h@y%bTan zv-Go5jq0L&vk_P6fhFOb-{nam_63Asqi9T2iT-(a!?I*;qA5Jhk$K{t;mABARyd;G zN?)1(T4}Y%FhrkXUkM@pln{PO2b`6up{&6SNlQLhFq9T?cVVmgvgC!STDvG)tf@66 zn_Cj*!41>k+5-}n+dZ&Yr*D?|=CcjXapc12y!dF*P|k~ci@Wsm@=X=~1ssG|IC5fi zPSh=h^$QZK2J-;2`8A+p)FNU_5ydG!U)oaW#!CV9;pK_H^3rQdrHTkGZ-49bmt`yY rzuqkH+)WFVOzRk`(kpZa*btou2k9JU$`B3008e7ZShYPUll-ZcxKDc@W`Rr@jUyieY5HX zn960REMM{4_P8hDGjWK`=Q4-$!$VDMxnnJB?yL-`62H1vG&(bGb|t-a@$OE52MU1R z4zR%vFt`g~!~t+;H^A?1fbWt3-&X)k>;cGo0FoU5U6lYo1AD zZp`BcV7PvWYgZ3IZvfzMMIHX*wd7x&xfTca9q@X7I0*35F@Uqh>jNLTl}2`OBo%8y zgkp1n4Ju#{JcLSo@<0+cpx?AA(TcKfMxyFQ^7+sgW6G$Oew2KE^sOQS96`BjDR&T3 zu!&;Ul*QDEteMdr>Sl?sBcCKRv&*BJ@fi8U=`yz+RGHfjHLw@95K1s$4>58p`NRnn zsZnG-W@#Z*Snx<4i5QPdpTp!KBOOpBBOTy{PG}{RsmsM9TK^N|D^z*J#@j7gff}=GZEF0KBrV@S4K0QB44ROPEyE;3aPN2P^LoXG4g5hmGW>B z4=3_aVF#g19=9?P;~D95l_}&Rgv*VBN?p4ejKwMij4jH~8==#%jk}o3TxW zuL2aTiRa0(p_L%Zg;pcWj_r?OJBw31)J-1IP1xQdk4LB!Wp~Fk9a~-csxclLU0S9> zk@2*O%`SYEA}Ym}$D>M&T^ct!I^|B4;I)@5&Z~nTmnA~QJl&{(c?(rk!7F5Wp&$0MbXG%s zGuhUTSLIF(>f496H=}BBHuk}5WZBW`N9!u)t^o&Hec%*Y)_@D28`~z&rym$nH<^TX?2hcf27Z zYDJYCBFlzz@=dZF*x854;x#kGW~O@=t(py%@eUI2px`|$BZGpsRmDNUdj$75#~@9h zAnKHaQHtT;jMW%E2PlRmb6eCS61hfj$gt&{rXD39ue}j=DHk`!q_0lk#?j*E))Ch_ z!Sx)W%*eGfJ;sFeX(G~6Rij8vL|Xl(nfGEBXAFH%M%IfOnIwzXNS587(ex?um3Cr1 zP8jS&7R~oATD1`>(>O$@hs5dAGEboxq)t=dB~%)(PF_31voJ$H;>8=^}DL zM(Px)i^!9NG9%-2ntF=j!)xrb8YIP+<63ZcEb|8IoIOh8eD}2c!c?}HqeH>sy3E+Vp}*qwQP9krmTR`^cA_&grjl@-XqJ7)*1F+A)=p^z704qRj}|;(9zn>+7@~g8#}+S(Z?GPZ-^gy zeDW5rFVrd*PF-8`%Wu9ft2{p{?YOx#@bx|ZY%ktEwO+k&(tG8DzXG;Eq4>|oF6Dns CBHy6^ diff --git a/testdata/excel2xml/excel2xml-testdata.xlsx b/testdata/excel2xml/excel2xml-testdata.xlsx index 05019526c27f4ca97c83f19fa4685e7466b29a17..e980ad1d903dceb6e617ebf96c2e89ed43a1c104 100644 GIT binary patch delta 7612 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 Na4|--MB#td{tK1NIKKb@ diff --git a/testdata/invalid-testdata/excel2xml/no-bitstream-permissions.xlsx b/testdata/invalid-testdata/excel2xml/no-bitstream-permissions.xlsx index 0fb9807ea644d0bef0237567cd9551ad5883fe7e..15ded40b8c8232ba32eeff47652198d1442b8e33 100644 GIT binary patch literal 31490 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 c`%4sKfXpNEn500K8Q~&?~ literal 22608 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 - #5d1f1e + #5d1f1e - image_thing_0 + image_thing_0 - + { "status": "active", "type": "polygon", @@ -115,7 +115,7 @@ - + This is a polygon-formed region of interest of an image. It is also displayed as Annotation. diff --git a/testdata/xml-data/circular-references/test_circular_references_1.xml b/testdata/xml-data/circular-references/test_circular_references_1.xml index 7c52735362..7668172765 100644 --- a/testdata/xml-data/circular-references/test_circular_references_1.xml +++ b/testdata/xml-data/circular-references/test_circular_references_1.xml @@ -1,329 +1,306 @@ - - RV - V - M - CR - - - V - CR - CR - - - V - V - D - CR - - - V - CR - CR - - - + - Start textres_B_11end text. + Start textres_B_11end text. - res_B_11 + res_B_11 - + - Start textres_C_11end text. + Start textres_C_11end text. - res_C_11 + res_C_11 - + - Start textres_A_11end text. + Start textres_A_11end text. - res_A_11 + res_A_11 - + - Start textres_D_12.1end text. + Start textres_D_12.1end text. - + - Start textres_D_12.1end text. + Start textres_D_12.1end text. - + - Start textres_D_12.1end text. + Start textres_D_12.1end text. - + - res_E_12.1 + res_E_12.1 - + - res_A_12.1 - res_B_12.1 - res_C_12.1 + res_A_12.1 + res_B_12.1 + res_C_12.1 - + - Start textres_D_12.2end text. + Start textres_D_12.2end text. - + - Start textres_D_12.2end text. + Start textres_D_12.2end text. - + - Start textres_D_12.2end text. + Start textres_D_12.2end text. - + - res_E_12.2 + res_E_12.2 - res_E_12.2 + res_E_12.2 - res_E_12.2 + res_E_12.2 - res_E_12.2 + res_E_12.2 - res_E_12.2 + res_E_12.2 - + - res_A_12.2 - res_B_12.2 - res_C_12.2 + res_A_12.2 + res_B_12.2 + res_C_12.2 - + - Start textres_D_13end text. + Start textres_D_13end text. - + - Start textres_D_13end text. + Start textres_D_13end text. - + - Start textres_D_13end text. + Start textres_D_13end text. - + - res_E_13 + res_E_13 - Start textres_F_13end text. + Start textres_F_13end text. - + - res_A_13 - res_B_13 - res_C_13 + res_A_13 + res_B_13 + res_C_13 - + - res_E_13 + res_E_13 - + - res_B_14.1 + res_B_14.1 - + - Start textres_A_14.1end text. + Start textres_A_14.1end text. - + - res_B_14.2 + res_B_14.2 - res_B_14.2 + res_B_14.2 - + - Start textres_A_14.2end text. + Start textres_A_14.2end text. - + - res_B_15 + res_B_15 - + - res_C_15 + res_C_15 - + - res_D_15 + res_D_15 - + - res_E_15 + res_E_15 - - + + - res_D_16 + res_D_16 - + - res_D_16 + res_D_16 - + - res_D_16 + res_D_16 - + - Start textres_E_16end text. + Start textres_E_16end text. - + - Start textres_A_16blablares_B_16blablares_C_16end text. + Start textres_A_16blablares_B_16blablares_C_16end text. - + - res_B_17 - res_C_17 + res_B_17 + res_C_17 - + - Start textres_A_17end text. + Start textres_A_17end text. - - + + - res_B_18 - res_C_18 + res_B_18 + res_C_18 - - + + - Start textres_A_18end text. - Start textres_B_18end text. + Start textres_A_18end text. + Start textres_B_18end text. - + - res_B_19 - res_C_19 + res_B_19 + res_C_19 - Start textres_B_19blablares_C_19end text. + Start textres_B_19blablares_C_19end text. - - + + - Start textres_A_19end text. - Start textres_B_19end text. + Start textres_A_19end text. + Start textres_B_19end text. - + - Start textres_D_110end text. + Start textres_D_110end text. - + - Start textres_D_110end text. + Start textres_D_110end text. - + - Start textres_D_110end text. + Start textres_D_110end text. - + - res_E_110 + res_E_110 - Start textres_F_110end text. + Start textres_F_110end text. - + - res_A_110 - res_B_110 - res_C_110 + res_A_110 + res_B_110 + res_C_110 - + - res_E_110 + res_E_110 - Start textres_K_110end text. - Start textres_L_110end text. - Start textres_M_110end text. - Start textres_N_110end text. - Start textres_O_110end text. - Start textres_P_110end text. - Start textres_Q_110end text. - Start textres_R_110end text. - Start textres_S_110end text. - Start textres_T_110end text. - Start textres_U_110end text. - Start textres_V_110end text. - Start textres_W_110end text. - Start textres_X_110end text. - Start textres_Y_110end text. + Start textres_K_110end text. + Start textres_L_110end text. + Start textres_M_110end text. + Start textres_N_110end text. + Start textres_O_110end text. + Start textres_P_110end text. + Start textres_Q_110end text. + Start textres_R_110end text. + Start textres_S_110end text. + Start textres_T_110end text. + Start textres_U_110end text. + Start textres_V_110end text. + Start textres_W_110end text. + Start textres_X_110end text. + Start textres_Y_110end text. - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/testdata/xml-data/test-data-systematic.xml b/testdata/xml-data/test-data-systematic.xml index 8f78dd0c52..3fbb8b1394 100644 --- a/testdata/xml-data/test-data-systematic.xml +++ b/testdata/xml-data/test-data-systematic.xml @@ -7,29 +7,26 @@ default-ontology="testonto"> - - RV + + V V - M - M + D CR - - V - CR - M + + RV + RV + D CR - - V - V - D + + D CR - - V - CR - CR + + CR + M + M @@ -48,27 +45,27 @@ Dies ist ein TestThing ohne Angabe von permissions - test_thing_1 + test_thing_1 - This is an annotation to TestthingOhnePermissions. - Second comment + This is an annotation to TestthingOhnePermissions. + Second comment - test_thing_0 + test_thing_0 + permissions="open"> < &lt; @@ -95,7 +92,7 @@ text text <not a tag> text This is italicized and bold text! - + This text contains links to all resources: test_thing_0 test_thing_1 @@ -114,79 +111,79 @@ Text with an external link: Google - https://dasch.swiss + https://dasch.swiss - true + true - JULIAN:BCE:70:CE:1 - CE:1849:CE:1850 - GREGORIAN:1848-01:1849-02 - 2022 - GREGORIAN:AD:0476-09-04:AD:0476-09-04 - GREGORIAN:CE:2014-01-31 - ISLAMIC:1:100 + JULIAN:BCE:70:CE:1 + CE:1849:CE:1850 + GREGORIAN:1848-01:1849-02 + 2022 + GREGORIAN:AD:0476-09-04:AD:0476-09-04 + GREGORIAN:CE:2014-01-31 + ISLAMIC:1:100 - 4711 + 4711 - 2.718281828459 + 2.718281828459 - 5416656 + 5416656 - #00ff00 + #00ff00 - first subnode + first subnode - test_thing_0 + test_thing_0 - test_thing_0 - test_thing_2 - image_thing_0 - compound_thing_0 - partof_thing_1 - partof_thing_2 - partof_thing_3 - document_thing_1 - text_thing_1 - zip_thing_1 - audio_thing_1 - TestThing2Child1 - TestThing2Child2 - video_thing_1 - annotation_1 - region_1 - link_obj_1 + test_thing_0 + test_thing_2 + image_thing_0 + compound_thing_0 + partof_thing_1 + partof_thing_2 + partof_thing_3 + document_thing_1 + text_thing_1 + zip_thing_1 + audio_thing_1 + TestThing2Child1 + TestThing2Child2 + video_thing_1 + annotation_1 + region_1 + link_obj_1 - region_2 + region_2 - image_thing_0 - video_thing_1 - document_thing_1 - text_thing_1 - zip_thing_1 - audio_thing_1 + image_thing_0 + video_thing_1 + document_thing_1 + text_thing_1 + zip_thing_1 + audio_thing_1 - video_thing_1 + video_thing_1 + permissions="open"> - Dies ist ein einfacher Text ohne Markup + Dies ist ein einfacher Text ohne Markup _ ! ? @@ -195,7 +192,7 @@ This is italicized and bold text! - + This text contains links to all resources: test_thing_0 test_thing_1 @@ -210,7 +207,7 @@ audio_thing_1 test_thing_2 - + Another text without salsah-links @@ -218,41 +215,41 @@ false - https://en.wiktionary.org/wiki/Ῥόδος - https://www.test-case.ch/ - https://reg-exr.com:3000 - https://reg-exr.com:3000/path/to/file_(%C3%89).htm - https://reg-exr.com:3000/path/to/file#fragment - https://reg-exr.com:3000/path/to/file?query=test - https://reg-exr.com:3000/path/to/file?query=test#fragment - https://reg-exr.com/path/to/file?query=test#fragment - http://www.168.1.1.0/path - http://www.168.1.1.0:4200/path - http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path - https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg - http://datypic.com/prod.html#shirt - https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA.. - https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018 - http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016 - https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478 - https://geohack.toolforge.org/geohack.php?pagename=Adige&params=45_8_59_N_12_19_13_E_type:river - https://www.digitale-sammlungen.de/de/view/bsb00055375?page=,1 - https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default - https://books.google.ch/books?id=B0AVAAAAQAAJ&printsec=frontcover&hl=de&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false - https://www.google.com/maps/place/Necropolis+of+Cannicella/@42.7150588$12.1174224$15z/data=!4m12!1m6!3m5!1s0x0:0xab5f4587e69858d9!2sNecropolis+of+Cannicella!8m2!3d42.7149!4d12.1170832!3m4!1s0x0:0xab5f4587e69858d9!8m2!3d42.7149!4d12.1170832 - https://geohack.toolforge.org/geohack.php?pagename=Castel_Gandolfo&language=de&params=41.746388888889_N_12.650833333333_E_dim:10000_region:IT-RM_type:city(8869) + https://en.wiktionary.org/wiki/Ῥόδος + https://www.test-case.ch/ + https://reg-exr.com:3000 + https://reg-exr.com:3000/path/to/file_(%C3%89).htm + https://reg-exr.com:3000/path/to/file#fragment + https://reg-exr.com:3000/path/to/file?query=test + https://reg-exr.com:3000/path/to/file?query=test#fragment + https://reg-exr.com/path/to/file?query=test#fragment + http://www.168.1.1.0/path + http://www.168.1.1.0:4200/path + http://[2001:0db8:0000:0000:0000:8a2e:0370:7334]:4200/path + https://en.wikipedia.org/wiki/Haiku#/media/File:Basho_Horohoroto.jpg + http://datypic.com/prod.html#shirt + https://www.findagrave.com/memorial/171722836/krikor-madenician?_gl=1*100n0s5*_ga*NzIzMDQxNjc2LjE2Mjg2MDk1OTQ.*_ga_4QT8FMEX30*MTY1Mjc5OTI4OC4xNC4xLjE2NTI4MDA2MDQuMA.. + https://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=PLIN-29NOV1907-3-73-0018 + http://markarslan.org/ArmenianImmigrants/Public-ViewDetail-ArmenianImmigrants-Main.php?submit=View&Staging=&SourcePage=Public-ViewSummary-ArmenianImmigrants-Main-ByDestinationDate&SelectDestinationYear=1907&SelectLastNameStd=all&argument1=CRTH-12JAN1907-3-%404-0016 + https://www.ancestry.com/discoveryui-content/view/47577828:60525?ssrc=pt&tid=109007397&pid=410070328478 + https://geohack.toolforge.org/geohack.php?pagename=Adige&params=45_8_59_N_12_19_13_E_type:river + https://www.digitale-sammlungen.de/de/view/bsb00055375?page=,1 + https://digiliblt.uniupo.it/xtf/view?docId=dlt000521/dlt000521.xml;query=De%20taxone;brand=default + https://books.google.ch/books?id=B0AVAAAAQAAJ&printsec=frontcover&hl=de&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false + https://www.google.com/maps/place/Necropolis+of+Cannicella/@42.7150588$12.1174224$15z/data=!4m12!1m6!3m5!1s0x0:0xab5f4587e69858d9!2sNecropolis+of+Cannicella!8m2!3d42.7149!4d12.1170832!3m4!1s0x0:0xab5f4587e69858d9!8m2!3d42.7149!4d12.1170832 + https://geohack.toolforge.org/geohack.php?pagename=Castel_Gandolfo&language=de&params=41.746388888889_N_12.650833333333_E_dim:10000_region:IT-RM_type:city(8869) JULIAN:BCE:0700:BCE:0600 - - - - - - - + + + + + + + 4711 @@ -277,135 +274,135 @@ + permissions="open"> testdata/bitstreams/test.tif - This is a Imagething as TIF + This is a Imagething as TIF + permissions="open"> https://iiif.dasch.swiss/0811/1Oi7mdiLsG7-FmFgp0xz2xU.jp2/full/837,530/0/default.jp2 - This is a IIIFImageThing + This is a IIIFImageThing + permissions="open"> testdata/bitstreams/test.tiff - This is a Imagething as TIFF + This is a Imagething as TIFF + permissions="open"> testdata/bitstreams/test.jp2 - This is a Imagething as JP2 + This is a Imagething as JP2 + permissions="open"> testdata/bitstreams/test.jpeg - This is a Imagething as JPEG + This is a Imagething as JPEG + permissions="open"> testdata/bitstreams/test.jpg - This is a Imagething as JPG + This is a Imagething as JPG + permissions="open"> testdata/bitstreams/test.png - This is a Imagething as PNG + This is a Imagething as PNG + permissions="open"> testdata/bitstreams/test.with.multiple.dots.png - This is a Imagething, the name has multiple dots + This is a Imagething, the name has multiple dots + permissions="open"> testdata/bitstreams/test with whitespaces.png - This is a Imagething, the name has whitespaces + This is a Imagething, the name has whitespaces + permissions="open"> testdata/bitstreams/test with uppercase extension.JPG - This is a Imagething, with an uppercase extension + This is a Imagething, with an uppercase extension + permissions="open"> testdata/bitstreams/test,with,multiple,commas.png - This is a Imagething, the name has multiple commas + This is a Imagething, the name has multiple commas + permissions="open"> testdata/bitstreams/test with special chars àéèêëôû äöüß 0123456789 _-'()+=!?<>| 漢が글ርبيةб中.png - This is a Imagething, the name contains special chars + This is a Imagething, the name contains special chars - #5d1f1e + #5d1f1e - image_thing_0 + image_thing_0 - + { "status": "active", "type": "polygon", @@ -418,7 +415,7 @@ - + This is a polygon-formed region of interest of an image. It is also displayed as Annotation. @@ -427,339 +424,339 @@ + permissions="open"> - This is a Compoundthing + This is a Compoundthing + permissions="open"> - This is a Compoundthing + This is a Compoundthing + permissions="open"> testdata/bitstreams/test.jpg - compound_thing_0 + compound_thing_0 - 1 + 1 + permissions="open"> testdata/bitstreams/test.jpg - compound_thing_0 + compound_thing_0 - 2 + 2 + permissions="open"> testdata/bitstreams/test.jpg - compound_thing_1 + compound_thing_1 - 1 + 1 + permissions="open"> testdata/bitstreams/test.jpg - compound_thing_1 + compound_thing_1 - 1 + 1 + permissions="open"> testdata/bitstreams/test.pdf - This is a Documentthing as PDF + This is a Documentthing as PDF + permissions="open"> testdata/bitstreams/test.xls - This is a Documentthing as XLS + This is a Documentthing as XLS + permissions="open"> testdata/bitstreams/test.xlsx - This is a Documentthing as XLSX + This is a Documentthing as XLSX + permissions="open"> testdata/bitstreams/test.doc - This is a Documentthing as DOC + This is a Documentthing as DOC + permissions="open"> testdata/bitstreams/test.docx - This is a Documentthing as DOCX + This is a Documentthing as DOCX + permissions="open"> testdata/bitstreams/test.ppt - This is a Documentthing as PPT + This is a Documentthing as PPT + permissions="open"> testdata/bitstreams/test.pptx - This is a Documentthing as PPTX + This is a Documentthing as PPTX + permissions="open"> testdata/bitstreams/test.csv - This is a Textthing as CSV + This is a Textthing as CSV + permissions="open"> testdata/bitstreams/test.txt - This is a Textthing as TXT + This is a Textthing as TXT + permissions="open"> testdata/bitstreams/test.xml - This is a Textthing as XML + This is a Textthing as XML + permissions="open"> testdata/bitstreams/test.xsl - This is a Textthing as XSL + This is a Textthing as XSL + permissions="open"> testdata/bitstreams/test.xsd - This is a Textthing as XSD + This is a Textthing as XSD + permissions="open"> testdata/bitstreams/test.odd - This is a Textthing as ODD + This is a Textthing as ODD + permissions="open"> testdata/bitstreams/test.rng - This is a Textthing as RNG + This is a Textthing as RNG + permissions="open"> testdata/bitstreams/test.zip - This is a Zipthing as ZIP + This is a Zipthing as ZIP + permissions="open"> testdata/bitstreams/test.7z - This is a Zipthing as 7Z + This is a Zipthing as 7Z + permissions="open"> testdata/bitstreams/test.gzip - This is a Zipthing as gzip + This is a Zipthing as gzip + permissions="open"> testdata/bitstreams/test.tar.gz - This is a Zipthing as tar.gz + This is a Zipthing as tar.gz + permissions="open"> testdata/bitstreams/test.tar - This is a Zipthing as tar + This is a Zipthing as tar + permissions="open"> testdata/bitstreams/test.tgz - This is a Zipthing as tgz + This is a Zipthing as tgz + permissions="open"> testdata/bitstreams/test.z - This is a Zipthing as z + This is a Zipthing as z + permissions="open"> testdata/bitstreams/test.gz - This is a Zipthing as gz + This is a Zipthing as gz + permissions="open"> testdata/bitstreams/test.wav - This is a Audiothing as WAV + This is a Audiothing as WAV + permissions="open"> testdata/bitstreams/test.mp3 - This is a Audiothing as MP3 + This is a Audiothing as MP3 + permissions="restricted-view"> testdata/bitstreams/test.mp4 - Dummy video with music + Dummy video with music - + A link object can link together an arbitrary number of resources from any resource class. - + Second comment - test_thing_2 - compound_thing_0 - partof_thing_1 + test_thing_2 + compound_thing_0 + partof_thing_1 @@ -781,17 +778,17 @@ + permissions="restricted-view"> - + This is a rectangle-formed region of interest of an image. It is also displayed as Annotation. - + This is a second comment. - + { "status": "active", "type": "rectangle", @@ -804,23 +801,23 @@ - image_thing_0 + image_thing_0 - #5d1f1e + #5d1f1e + permissions="restricted-view"> - + This is a circle-formed region of interest of an image. It is also displayed as Annotation. - + { "status": "active", "type": "circle", @@ -831,66 +828,66 @@ - image_thing_0 + image_thing_0 - #5d1f1e + #5d1f1e - - video_thing_1 - - Title of video segment - Bold comment of video segment - Comment with link to test_thing_2 - Bold description of video segment - Description with link to test_thing_2 - Keyword 1 of video segment - Keyword 2 of video segment - audio_segment_0 - audio_segment_2 + + video_thing_1 + + Title of video segment + Bold comment of video segment + Comment with link to test_thing_2 + Bold description of video segment + Description with link to test_thing_2 + Keyword 1 of video segment + Keyword 2 of video segment + audio_segment_0 + audio_segment_2 - video_thing_1 - - Title of video segment - Description of video segment + video_thing_1 + + Title of video segment + Description of video segment - video_thing_1 - + video_thing_1 + - - audio_thing_1 - - Title of audio segment - Comment 1 of audio segment - Comment 2 of audio segment - Description 1 of audio segment - Description 2 of audio segment - Keyword 1 of audio segment - Keyword 2 of audio segment - video_segment_0 - video_segment_2 + + audio_thing_1 + + Title of audio segment + Comment 1 of audio segment + Comment 2 of audio segment + Description 1 of audio segment + Description 2 of audio segment + Keyword 1 of audio segment + Keyword 2 of audio segment + video_segment_0 + video_segment_2 - audio_thing_1 - - Title of audio segment - Description of audio segment - video_segment_0 + audio_thing_1 + + Title of audio segment + Description of audio segment + video_segment_0 - audio_thing_1 - + audio_thing_1 +