{
  "access": {
    "embargo": {
      "active": false,
      "reason": null
    },
    "files": "public",
    "record": "public",
    "status": "open"
  },
  "created": "2026-06-10T06:31:41.592869+00:00",
  "custom_fields": {
    "code:codeRepository": "https://gitlab.gwdg.de/aqinda/constrainify",
    "code:developmentStatus": {
      "id": "active",
      "title": {
        "en": "Active"
      }
    }
  },
  "deletion_status": {
    "is_deleted": false,
    "status": "P"
  },
  "files": {
    "count": 1,
    "default_preview": "constrainify-v0.9.0.zip",
    "enabled": true,
    "entries": {
      "constrainify-v0.9.0.zip": {
        "access": {
          "hidden": false
        },
        "checksum": "md5:e3048874368e100357c5e7625059fa97",
        "ext": "zip",
        "id": "4c14b3fb-f4a7-4947-92d7-2d9e5fb1ce48",
        "key": "constrainify-v0.9.0.zip",
        "links": {
          "content": "https://zenodo.org/api/records/20560540/files/constrainify-v0.9.0.zip/content",
          "self": "https://zenodo.org/api/records/20560540/files/constrainify-v0.9.0.zip"
        },
        "metadata": {},
        "mimetype": "application/zip",
        "size": 2586021,
        "storage_class": "L"
      }
    },
    "order": [],
    "total_bytes": 2586021
  },
  "id": "20560540",
  "is_draft": false,
  "is_published": true,
  "links": {
    "access": "https://zenodo.org/api/records/20560540/access",
    "access_grants": "https://zenodo.org/api/records/20560540/access/grants",
    "access_links": "https://zenodo.org/api/records/20560540/access/links",
    "access_request": "https://zenodo.org/api/records/20560540/access/request",
    "access_users": "https://zenodo.org/api/records/20560540/access/users",
    "archive": "https://zenodo.org/api/records/20560540/files-archive",
    "archive_media": "https://zenodo.org/api/records/20560540/media-files-archive",
    "communities": "https://zenodo.org/api/records/20560540/communities",
    "communities-suggestions": "https://zenodo.org/api/records/20560540/communities-suggestions",
    "doi": "https://doi.org/10.5281/zenodo.20560540",
    "draft": "https://zenodo.org/api/records/20560540/draft",
    "file_modification": "https://zenodo.org/api/records/20560540/file-modification",
    "files": "https://zenodo.org/api/records/20560540/files",
    "latest": "https://zenodo.org/api/records/20560540/versions/latest",
    "latest_html": "https://zenodo.org/records/20560540/latest",
    "media_files": "https://zenodo.org/api/records/20560540/media-files",
    "parent": "https://zenodo.org/api/records/20560539",
    "parent_doi": "https://doi.org/10.5281/zenodo.20560539",
    "parent_doi_html": "https://zenodo.org/doi/10.5281/zenodo.20560539",
    "parent_html": "https://zenodo.org/records/20560539",
    "preview_html": "https://zenodo.org/records/20560540?preview=1",
    "quota_increase": "https://zenodo.org/api/records/20560540/quota-increase",
    "request_deletion": "https://zenodo.org/api/records/20560540/request-deletion",
    "requests": "https://zenodo.org/api/records/20560540/requests",
    "reserve_doi": "https://zenodo.org/api/records/20560540/draft/pids/doi",
    "self": "https://zenodo.org/api/records/20560540",
    "self_doi": "https://doi.org/10.5281/zenodo.20560540",
    "self_doi_html": "https://zenodo.org/doi/10.5281/zenodo.20560540",
    "self_html": "https://zenodo.org/records/20560540",
    "self_iiif_manifest": "https://zenodo.org/api/iiif/record:20560540/manifest",
    "self_iiif_sequence": "https://zenodo.org/api/iiif/record:20560540/sequence/default",
    "versions": "https://zenodo.org/api/records/20560540/versions"
  },
  "media_files": {
    "count": 0,
    "enabled": false,
    "entries": {},
    "order": [],
    "total_bytes": 0
  },
  "metadata": {
    "contributors": [
      {
        "affiliations": [
          {
            "name": "GWDG"
          }
        ],
        "person_or_org": {
          "family_name": "Kir\u00e1ly",
          "given_name": "P\u00e9ter",
          "identifiers": [
            {
              "identifier": "0000-0002-8749-4597",
              "scheme": "orcid"
            }
          ],
          "name": "Kir\u00e1ly, P\u00e9ter",
          "type": "personal"
        },
        "role": {
          "id": "projectmember",
          "title": {
            "de": "Projektmitglied",
            "en": "Project member"
          }
        }
      },
      {
        "affiliations": [
          {
            "name": "VZG"
          }
        ],
        "person_or_org": {
          "family_name": "Sch\u00e4fer",
          "given_name": "Domenic",
          "identifiers": [
            {
              "identifier": "0000-0001-7118-3295",
              "scheme": "orcid"
            }
          ],
          "name": "Sch\u00e4fer, Domenic",
          "type": "personal"
        },
        "role": {
          "id": "projectmember",
          "title": {
            "de": "Projektmitglied",
            "en": "Project member"
          }
        }
      },
      {
        "affiliations": [
          {
            "id": "edmo:4341",
            "identifiers": [
              {
                "identifier": "edmo:4341",
                "scheme": "edmo"
              }
            ],
            "name": "Philipps-Universit\u00e4t Marburg"
          }
        ],
        "person_or_org": {
          "family_name": "Taentzer",
          "given_name": "Gabriele",
          "identifiers": [
            {
              "identifier": "0000-0002-3975-5238",
              "scheme": "orcid"
            }
          ],
          "name": "Taentzer, Gabriele",
          "type": "personal"
        },
        "role": {
          "id": "projectmember",
          "title": {
            "de": "Projektmitglied",
            "en": "Project member"
          }
        }
      },
      {
        "affiliations": [
          {
            "id": "048vdhs48",
            "identifiers": [
              {
                "identifier": "048vdhs48",
                "scheme": "ror"
              },
              {
                "identifier": "grid.461834.c",
                "scheme": "grid"
              },
              {
                "identifier": "0000 0000 8847 1181",
                "scheme": "isni"
              }
            ],
            "name": "Verbundzentrale des GBV"
          }
        ],
        "person_or_org": {
          "family_name": "Vo\u00df",
          "given_name": "Jakob",
          "identifiers": [
            {
              "identifier": "0000-0002-7613-4123",
              "scheme": "orcid"
            }
          ],
          "name": "Vo\u00df, Jakob",
          "type": "personal"
        },
        "role": {
          "id": "projectmember",
          "title": {
            "de": "Projektmitglied",
            "en": "Project member"
          }
        }
      }
    ],
    "creators": [
      {
        "affiliations": [
          {
            "id": "edmo:4341",
            "identifiers": [
              {
                "identifier": "edmo:4341",
                "scheme": "edmo"
              }
            ],
            "name": "Philipps-Universit\u00e4t Marburg"
          },
          {
            "id": "048vdhs48",
            "identifiers": [
              {
                "identifier": "048vdhs48",
                "scheme": "ror"
              },
              {
                "identifier": "grid.461834.c",
                "scheme": "grid"
              },
              {
                "identifier": "0000 0000 8847 1181",
                "scheme": "isni"
              }
            ],
            "name": "Verbundzentrale des GBV"
          }
        ],
        "person_or_org": {
          "family_name": "Matoni",
          "given_name": "Markus",
          "identifiers": [
            {
              "identifier": "0000-0003-4389-5871",
              "scheme": "orcid"
            }
          ],
          "name": "Matoni, Markus",
          "type": "personal"
        }
      },
      {
        "affiliations": [
          {
            "id": "048vdhs48",
            "identifiers": [
              {
                "identifier": "048vdhs48",
                "scheme": "ror"
              },
              {
                "identifier": "grid.461834.c",
                "scheme": "grid"
              },
              {
                "identifier": "0000 0000 8847 1181",
                "scheme": "isni"
              }
            ],
            "name": "Verbundzentrale des GBV"
          },
          {
            "id": "edmo:4341",
            "identifiers": [
              {
                "identifier": "edmo:4341",
                "scheme": "edmo"
              }
            ],
            "name": "Philipps-Universit\u00e4t Marburg"
          }
        ],
        "person_or_org": {
          "family_name": "Kesper",
          "given_name": "Arno",
          "identifiers": [
            {
              "identifier": "0000-0002-5042-1087",
              "scheme": "orcid"
            }
          ],
          "name": "Kesper, Arno",
          "type": "personal"
        }
      }
    ],
    "description": "<p>Constrainify is an open-source application that enables domain experts to&nbsp;define data quality requirements as controlled-natural-language constraints and to run quality analyses independently, without knowledge of data models or query&nbsp;languages, producing human-readable quality reports.</p>\n<p>This repository constitutes the environment (orchestration) layer of Constrainify. It does not contain the application logic itself. Instead it defines the Docker Compose services, environment variables, web-server configuration,<br>constraint templates, and supported data models required to deploy and operate the full Constrainify stack as a self-hosted service. The application logic resides in separate repositories, in particular <a href=\"https://gitlab.gwdg.de/aqinda/constrainify-core\">constrainify-core</a> and&nbsp;<a href=\"https://github.com/Project-KONDA/pattern-based-quality-analysis\">Quality Pattern</a><br><a href=\"https://github.com/Project-KONDA/pattern-based-quality-analysis\">Model (QPM)</a>.</p>",
    "languages": [
      {
        "id": "eng",
        "title": {
          "en": "English"
        }
      }
    ],
    "publication_date": "2026-06-05",
    "publisher": "Zenodo",
    "related_identifiers": [
      {
        "identifier": "https://gitlab.gwdg.de/aqinda/constrainify-core",
        "relation_type": {
          "id": "requires",
          "title": {
            "de": "Setzt voraus",
            "en": "Requires"
          }
        },
        "resource_type": {
          "id": "software",
          "title": {
            "de": "Software",
            "en": "Software"
          }
        },
        "scheme": "url"
      },
      {
        "identifier": "https://github.com/Project-KONDA/pattern-based-quality-analysis",
        "relation_type": {
          "id": "requires",
          "title": {
            "de": "Setzt voraus",
            "en": "Requires"
          }
        },
        "resource_type": {
          "id": "software",
          "title": {
            "de": "Software",
            "en": "Software"
          }
        },
        "scheme": "url"
      }
    ],
    "resource_type": {
      "id": "software",
      "title": {
        "de": "Software",
        "en": "Software"
      }
    },
    "rights": [
      {
        "description": {
          "en": ""
        },
        "id": "agpl-3.0-or-later",
        "props": {
          "scheme": "spdx",
          "url": "https://www.gnu.org/licenses/agpl.txt"
        },
        "title": {
          "en": "GNU Affero General Public License v3.0 or later"
        }
      }
    ],
    "subjects": [
      {
        "subject": "data quality"
      },
      {
        "subject": "quality constraints"
      },
      {
        "subject": "controlled natural language"
      },
      {
        "subject": "domain experts"
      },
      {
        "subject": "Docker Compose"
      },
      {
        "subject": "quality reports"
      },
      {
        "subject": "cultural heritage"
      },
      {
        "subject": "digital humanities"
      },
      {
        "subject": "quality analysis"
      }
    ],
    "title": "Constrainify: Environment",
    "version": "0.9.0"
  },
  "parent": {
    "access": {
      "owned_by": {
        "user": "102183"
      },
      "settings": {
        "accept_conditions_text": null,
        "allow_guest_requests": false,
        "allow_user_requests": false,
        "secret_link_expiration": 0
      }
    },
    "communities": {
      "default": "c00e8c79-9638-4e48-9d09-2280c65af971",
      "entries": [
        {
          "access": {
            "member_policy": "open",
            "members_visibility": "public",
            "record_submission_policy": "open",
            "review_policy": "closed",
            "visibility": "public"
          },
          "children": {
            "allow": false
          },
          "created": "2025-10-20T14:34:57.595229+00:00",
          "custom_fields": {
            "subjects": [
              {
                "id": "mesh:D000071253"
              },
              {
                "id": "mesh:D000071253Q000592"
              },
              {
                "id": "gemet:concept/1912"
              },
              {
                "id": "mesh:D066295"
              },
              {
                "id": "gemet:concept/1975"
              }
            ]
          },
          "deletion_status": {
            "is_deleted": false,
            "status": "P"
          },
          "id": "c00e8c79-9638-4e48-9d09-2280c65af971",
          "links": {},
          "metadata": {
            "curation_policy": "",
            "description": "In\u202fAQinDa entwickeln wir einen agilen Workflow und eine Open\u2011Source\u2011Webanwendung zur Qualit\u00e4tssicherung von Metadaten kultureller Objekte",
            "organizations": [
              {
                "id": "048vdhs48"
              },
              {
                "id": "00cd95c65"
              },
              {
                "id": "01rdrb571"
              }
            ],
            "page": "<h3>Teaser</h3>\n<p><strong>AQinDa entwickelt einen agilen Workflow und eine Open\u2011Source\u2011Webanwendung zur Qualit&auml;tssicherung von Metadaten kultureller Objekte. Dom&auml;nenexpert*innen k&ouml;nnen damit unabh&auml;ngig von technischem Know\u2011how die Qualit&auml;t von Daten analysieren und verbessern</strong></p>\n<h3>&nbsp;</h3>\n<h3>Projektbeschreibung</h3>\n<p>Die Qualit&auml;t der Daten zu Kulturg&uuml;tern ist entscheidend f&uuml;r deren Zug&auml;nglichkeit und sp&auml;tere Nutzung. Dies gilt f&uuml;r alle Datenanbieter, insbesondere aber f&uuml;r gemeinsame Plattformen wie die <a href=\"https://www.deutsche-digitale-bibliothek.de/\">Deutsche Digitale Bibliothek (DDB)</a>&nbsp;und das&nbsp;<a href=\"https://www.graphikportal.org/\">Graphikportal</a>&nbsp;sowie f&uuml;r die wachsenden Datensammlungen der NFDI-Konsortien, wie beispielsweise&nbsp;<a href=\"https://nfdi4culture.de/index.html\">NFDI4Culture</a>&nbsp;und&nbsp;<a href=\"https://text-plus.org/\">Text+</a>.</p>\n<p>Oftmals entsprechen die zu integrierenden Daten nicht den Qualit&auml;tsanforderungen der Zielsysteme. Vor der Integration m&uuml;ssen die Daten analysiert und gegebenenfalls angepasst werden. Die Definition der Datenqualit&auml;t (DQ) erfordert jedoch fundierte Fachkenntnisse, technisches Know-how (z. B. Abfragesprachen) und die Koordination zwischen Dom&auml;nenexpert*innen, Dateningenieur*innen und Datenmodellspezialist*innen. Infolgedessen sind Dom&auml;nenexpert*innen oft nicht in der Lage, die Qualit&auml;tssicherung selbstst&auml;ndig zu definieren und umzusetzen.</p>\n<p>Das Ziel dieses Projekts ist die Entwicklung eines Workflows, mit dem Dom&auml;nenexpert*innen unabh&auml;ngig von ihren technischen Kenntnissen die DQ bewerten k&ouml;nnen. Das Herzst&uuml;ck bildet Constrainify, eine Open-Source-Webanwendung, die einen agilen, eigenst&auml;ndigen QA-Prozess unterst&uuml;tzt. Sie kann in bestehende Pipelines integriert oder unabh&auml;ngig verwendet werden.</p>\n<p>Constrainify erm&ouml;glicht es Dom&auml;nenexpert*innen, Qualit&auml;tsanforderungen in kontrollierter nat&uuml;rlicher Sprache zu spezifizieren, wodurch der Bedarf an technischem Wissen minimiert wird. Der Ansatz zur Qualit&auml;tsanalyse baut auf den Ergebnissen von <a href=\"https://zenodo.org/communities/konda-project/about\">KONDA</a>&nbsp;und&nbsp;<a href=\"https://doi.org/10.5281/zenodo.15788411\">MQAF</a>&nbsp;(verwendet von&nbsp;<a href=\"https://www.europeana.eu/de\">Europeana</a>&nbsp;und&nbsp;<a href=\"https://www.deutsche-digitale-bibliothek.de/\">DDB</a>) auf und wandelt Beschr&auml;nkungen in nat&uuml;rlicher Sprache in maschinenlesbare Abfragen um.</p>\n<p>Anwendungsf&auml;lle umfassen die Qualit&auml;tssicherung von&nbsp;<a href=\"https://lido-schema.org/\">LIDO</a>-Daten f&uuml;r die Integration in die&nbsp;<a href=\"https://www.deutsche-digitale-bibliothek.de/\">DDB</a>&nbsp;und das&nbsp;<a href=\"https://www.graphikportal.org/\">Graphikportal</a>&nbsp;sowie&nbsp;<a href=\"https://tei-c.org/\">TEI</a>-Header-Daten im&nbsp;<a href=\"https://textgridrep.org/\">TextGrid-Repository</a>. Die Evaluierung des Ansatzes ist in die NFDI-Konsortien&nbsp;<a href=\"https://nfdi4culture.de/index.html\">NFDI4Culture</a>&nbsp;und&nbsp;<a href=\"https://text-plus.org/\">Text+</a>&nbsp;eingebettet. Da der Ansatz unabh&auml;ngig von spezifischen Datenformaten und Technologien ist und somit generisch ist, kann er auf die Datenqualit&auml;tssicherung in anderen Dom&auml;nen angewendet werden.</p>\n<h3>Projektziele</h3>\n<ol>\n<li>Entwicklung eines Prozesses zur agilen Qualit&auml;tssicherung von Daten des kulturellen Erbes im Kontext von Datenintegrationsprozessen.</li>\n<li>Entwicklung einer Software f&uuml;r eine benutzerfreundliche, dom&auml;nenspezifische Qualit&auml;tssicherung auf Basis der im KONDA-Projekt und MQAF entwickelten Software. Dadurch k&ouml;nnen Dom&auml;nenexpert*innen fachspezifische Qualit&auml;tssicherung unabh&auml;ngig definieren und durchf&uuml;hren.</li>\n<li>Evaluierung des Prozesses und der unterst&uuml;tzenden Software f&uuml;r die Qualit&auml;tssicherung unter Verwendung von (1)&nbsp;<a href=\"https://lido-schema.org/\">LIDO</a>-Daten f&uuml;r die Integration in die&nbsp;<a href=\"https://www.deutsche-digitale-bibliothek.de/\">Deutsche Digitale Bibliothek (DDB)</a>, (2)&nbsp;<a href=\"https://lido-schema.org/\">LIDO</a>-Daten f&uuml;r die Integration in das&nbsp;<a href=\"https://www.graphikportal.org/\">Graphikportal</a>&nbsp;und (3)&nbsp;<a href=\"https://tei-c.org/\">TEI</a>-Header-Daten im&nbsp;<a href=\"https://textgridrep.org/\">TextGrid-Repository</a>.</li>\n</ol>\n<h3>Weblinks</h3>\n<p>Demo-Instanz: <a href=\"https://aqinda.gwdg.de/\">https://aqinda.gwdg.de/</a></p>\n<p>Screencast: <a href=\"https://gitlab.gwdg.de/aqinda/constrainify/-/raw/main/img/constrainify_demo.mp4\">https://gitlab.gwdg.de/aqinda/constrainify/-/raw/main/img/constrainify_demo.mp4</a></p>\n<p>GitLab-Seite zu Constrainify:&nbsp;<a href=\"https://gitlab.gwdg.de/aqinda/constrainify\">https://gitlab.gwdg.de/aqinda/constrainify</a></p>\n<p>GitHub-Seite zum Quality Pattern Model: <a href=\"https://github.com/Project-KONDA/pattern-based-quality-analysis/\">https://github.com/Project-KONDA/pattern-based-quality-analysis/&nbsp;</a></p>\n<p>Projektseite GWDG: <a href=\"https://gwdg.de/en/projects/aqinda/\">https://gwdg.de/en/projects/aqinda/&nbsp;</a></p>\n<p>Projektbeschreibung Gepris:&nbsp;<a href=\"https://gepris.dfg.de/gepris/projekt/521659096\">https://gepris.dfg.de/gepris/projekt/521659096</a></p>",
            "title": "AQinDa (Agile Qualit\u00e4tssicherung von Metadaten zu kulturellen Objekten im Kontext von Datenintegrationsprozessen)",
            "type": {
              "id": "organization"
            },
            "website": "https://gitlab.gwdg.de/aqinda/constrainify"
          },
          "revision_id": 28,
          "slug": "aqinda",
          "updated": "2026-03-04T16:27:03.572966+00:00"
        }
      ],
      "ids": [
        "c00e8c79-9638-4e48-9d09-2280c65af971"
      ]
    },
    "id": "20560539",
    "pids": {
      "doi": {
        "client": "datacite",
        "identifier": "10.5281/zenodo.20560539",
        "provider": "datacite"
      }
    }
  },
  "pids": {
    "doi": {
      "client": "datacite",
      "identifier": "10.5281/zenodo.20560540",
      "provider": "datacite"
    },
    "oai": {
      "identifier": "oai:zenodo.org:20560540",
      "provider": "oai"
    }
  },
  "revision_id": 4,
  "stats": {
    "all_versions": {
      "data_volume": 20688168.0,
      "downloads": 8,
      "unique_downloads": 8,
      "unique_views": 23,
      "views": 25
    },
    "this_version": {
      "data_volume": 20688168.0,
      "downloads": 8,
      "unique_downloads": 8,
      "unique_views": 23,
      "views": 25
    }
  },
  "status": "published",
  "swh": {
    "swhid": "swh:1:dir:edd05f63e1efbe956a75459e3793ceb83acee4dd;origin=https://doi.org/10.5281/zenodo.20560539;visit=swh:1:snp:a19e6dcc6708cef6aff3133845c46e014e174e71;anchor=swh:1:rel:16767647c08169d531539fdf457109a543540016;path=constrainify-v0.9.0"
  },
  "updated": "2026-06-10T06:31:41.876315+00:00",
  "versions": {
    "index": 1,
    "is_latest": true
  }
}