From 75458ca47156b582db220336f83d9a17d738ae47 Mon Sep 17 00:00:00 2001
From: "Lange, Dr. Herbert" <herbert.lange@uni-hamburg.de>
Date: Mon, 16 May 2022 10:42:30 +0200
Subject: [PATCH] add feature to load criteria file from resource and place all
 criteria files in the proper place in resources

---
 .../quest/CMDIGenericMetadataChecker.java     |  3 ++
 .../quest/ChildesGenericMetadataChecker.java  |  5 +++
 .../quest/ComaGenericMetadataChecker.java     | 12 +++++++
 .../quest/GenericMetadataChecker.java         | 23 ++++++++++++
 .../quest/IMDIGenericMetadataChecker.java     |  4 ++-
 .../quest/TEIGenericMetadataChecker.java      |  5 +++
 .../quest/resources/imdi-generic.csv          | 35 -------------------
 .../{ => metadata}/childes-generic.csv        |  0
 .../quest/resources/metadata/cmdi-blam.csv    | 34 ++++++++++++++++++
 .../quest/resources/metadata/cmdi-sign.csv    | 34 ++++++++++++++++++
 .../resources/{ => metadata}/coma-generic.csv |  0
 .../quest/resources/metadata/imdi-generic.csv | 35 +++++++++++++++++++
 .../resources/{ => metadata}/tei-generic.csv  |  0
 13 files changed, 154 insertions(+), 36 deletions(-)
 delete mode 100644 src/main/java/de/uni_hamburg/corpora/validation/quest/resources/imdi-generic.csv
 rename src/main/java/de/uni_hamburg/corpora/validation/quest/resources/{ => metadata}/childes-generic.csv (100%)
 create mode 100644 src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-blam.csv
 create mode 100644 src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-sign.csv
 rename src/main/java/de/uni_hamburg/corpora/validation/quest/resources/{ => metadata}/coma-generic.csv (100%)
 create mode 100644 src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/imdi-generic.csv
 rename src/main/java/de/uni_hamburg/corpora/validation/quest/resources/{ => metadata}/tei-generic.csv (100%)

diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/CMDIGenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/CMDIGenericMetadataChecker.java
index 3d177e91..6310efec 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/CMDIGenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/CMDIGenericMetadataChecker.java
@@ -25,6 +25,9 @@ public class CMDIGenericMetadataChecker extends GenericMetadataChecker implement
         super(properties);
         if (properties != null && !properties.isEmpty() && properties.containsKey("cmdi-criteria-file"))
             setCriteriaFile(properties.getProperty("cmdi-criteria-file"));
+        else {
+            loadCriteriaResource("cmdi-generic.csv");
+        }
     }
 
 
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/ChildesGenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/ChildesGenericMetadataChecker.java
index eabc7ae6..bc108ec0 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/ChildesGenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/ChildesGenericMetadataChecker.java
@@ -16,6 +16,11 @@ public class ChildesGenericMetadataChecker extends GenericMetadataChecker implem
 
     public ChildesGenericMetadataChecker(Properties properties) {
         super(properties);
+        if (properties != null && !properties.isEmpty() && properties.containsKey("childes-criteria-file"))
+            setCriteriaFile(properties.getProperty("childes-criteria-file"));
+        else {
+            loadCriteriaResource("childes-generic.csv");
+        }
     }
 
 
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/ComaGenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/ComaGenericMetadataChecker.java
index 0ce0d481..f3786038 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/ComaGenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/ComaGenericMetadataChecker.java
@@ -22,6 +22,11 @@ public class ComaGenericMetadataChecker extends GenericMetadataChecker {
      */
     public ComaGenericMetadataChecker(Properties properties) {
         super(properties);
+        if (properties != null && !properties.isEmpty() && properties.containsKey("coma-criteria-file"))
+            setCriteriaFile(properties.getProperty("coma-criteria-file"));
+        else {
+            loadCriteriaResource("coma-generic.csv");
+        }
     }
     /**
      * Function providing a description of a checker
@@ -100,4 +105,11 @@ public class ComaGenericMetadataChecker extends GenericMetadataChecker {
         Optional<String> optPath = path.stream().reduce((s1, s2) -> s1 + "/" + s2);
         return optPath.orElse("") ;
     }
+
+    @Override
+    public Map<String, String> getParameters() {
+        Map<String,String> p = super.getParameters();
+        p.put("coma-criteria-file", "The file for Coma generic metadata criteria");
+        return p;
+    }
 }
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/GenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/GenericMetadataChecker.java
index 7e3e6587..e05054f4 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/GenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/GenericMetadataChecker.java
@@ -13,6 +13,8 @@ import javax.xml.transform.TransformerException;
 import javax.xml.xpath.XPathExpressionException;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -376,6 +378,27 @@ abstract class GenericMetadataChecker extends Checker implements CorpusFunction
         }
     }
 
+    /**
+     * Loads the criteria as a resource
+     * @param name the name of the resource
+     */
+    public void loadCriteriaResource(String name) {
+        try {
+            InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("metadata/"+name);
+            if (resourceStream != null) {
+                // Read CSV file
+                criteria = new CsvToBeanBuilder<GenericMetadataCriterion>(new InputStreamReader(resourceStream))
+                        .withType(GenericMetadataCriterion.class)
+                        .withSkipLines(1) // skip header
+                        .build()
+                        .parse();
+                setUp = true;
+            }
+        } catch (Exception e) {
+            logger.log(Level.SEVERE, "Encountered exception when loading criteria ", e);
+        }
+    }
+
     @Override
     public Map<String, String> getParameters() {
         Map<String, String> params = super.getParameters();
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/IMDIGenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/IMDIGenericMetadataChecker.java
index 2c16918d..ea6b0a25 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/IMDIGenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/IMDIGenericMetadataChecker.java
@@ -24,9 +24,11 @@ public class IMDIGenericMetadataChecker extends GenericMetadataChecker implement
      */
     public IMDIGenericMetadataChecker(Properties properties) {
         super(properties);
-        logger.info(properties.toString());
         if (properties != null && !properties.isEmpty() && properties.containsKey("imdi-criteria-file"))
             setCriteriaFile(properties.getProperty("imdi-criteria-file"));
+        else {
+            loadCriteriaResource("imdi-generic.csv");
+        }
     }
 
     /**
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/TEIGenericMetadataChecker.java b/src/main/java/de/uni_hamburg/corpora/validation/quest/TEIGenericMetadataChecker.java
index 4d171de9..0a038850 100644
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/TEIGenericMetadataChecker.java
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/TEIGenericMetadataChecker.java
@@ -21,6 +21,11 @@ public class TEIGenericMetadataChecker extends GenericMetadataChecker implements
      */
     public TEIGenericMetadataChecker(Properties properties) {
         super(properties);
+        if (properties != null && !properties.isEmpty() && properties.containsKey("tei-criteria-file"))
+            setCriteriaFile(properties.getProperty("tei-criteria-file"));
+        else {
+            loadCriteriaResource("tei-generic.csv");
+        }
     }
 
     /**
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/imdi-generic.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/imdi-generic.csv
deleted file mode 100644
index ad13a447..00000000
--- a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/imdi-generic.csv
+++ /dev/null
@@ -1,35 +0,0 @@
-Property,Requirement,Value type,IMDI,Comments
-Identifier,1 - unbounded,URI,/imdi:METATRANSCRIPT/@ArchiveHandle,imdi: is making the implicit namespace http://www.mpi.nl/IMDI/Schema/IMDI exmplicit
-Session,1 - 1, N/A,//imdi:Session,There is only one session supposed to be in an IMDI metadata file
-Title,1 - unbounded,string,//imdi:Session//imdi:Name OR //imdi:Session//imdi:Title,Could be /imdi:METATRANSCRIPT/imdi:Session/imdi:Title or /imdi:METATRANSCRIPT/imdi:Session/imdi:MDGroup/imdi:Project/imdi:Title
-Description,1 - unbounded,string,//imdi:Session/imdi:Description,
-Version,0 - 1,string,/imdi:METATRANSCRIPT/@Version,
-Keywords,0 - 1,string,//imdi:Session/imdi:Keys OR Session//imdi:Content/imdi:Keys,
-License,1 - 1,URI OR string,//imdi:Session/imdi:Access/imdi:Description,Access does not seem to be a valid element directly within session; only for ressources
-Rightsholder,0 - 1,string,//imdi:Session/imdi:Access/imdi:Owner,Access does not seem to be a valid element directly within session; only for ressources
-Access Rights,0 - 1,string,//imdi:Session/imdi:Access/imdi:Availability,Access does not seem to be a valid element directly within session; only for ressources
-PublicationYear,1 - 1,date,//imdi:Session/imdi:Date,
-Publisher,1 - 1,string,//imdi:Session/imdi:Access/imdi:Publisher,Access does not seem to be a valid element directly within session only for ressources
-Creator,1 - unbounded,string,//imdi:Session//imdi:Actors/imdi:Actor/imdi:Role[text()="Author" or text()="Researcher"],Limiting the roles of the actor; more roles could be suitable (see: https://www.mpi.nl/IMDI/Schema/Actor-Role.xml); IMDI schema guarantees that each creator has exactly one full name and so on
-CreatorName,0 - unbounded,string,//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:Name OR //imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:FullName,Only for the creator roles as above
-FamilyName,1 - 1,string,N/A,Not expressable in IMDI
-GivenName,0 - 1,string,N/A,Not expressable in IMDI
-CreatorIdentifier,1 - unbounded,URI,N/A,Not expressable in IMDI
-Affiliation,0 - unbounded,URI OR string,//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:Contact/imdi:Organization,Only for the creator roles as above
-CreatorEmail,0 - unbounded,URI OR string,//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:Contact/imdi:Email,Only for the creator roles as above
-Organisation,N/A,N/A,//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:Contact/imdi:Organisation OR //imdi:Session//imdi:Project/imdi:Contact/imdi:Organisation,Only for the creator roles as above or for the project
-OrganisationName,1 - unbound,string,//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()="Researcher" or imdi:Role/text()="Author"]/imdi:Contact/imdi:Organisation OR //imdi:Session//imdi:Project/imdi:Contact/imdi:Organisation,Only for the creator roles as above or for the project
-OrganisationIdentifier,0 - unbounded,N/A,N/A,Not expressable in IMDI
-OrganisationURL,0 - 1,URI,N/A,Not expressable in IMDI
-OrganisationEmail,0 - 1,URI OR string,N/A,Not expressable in IMDI
-sameAs,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference; Link only available in ExternalResourceReference
-isPartOf,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference; Link only available in ExternalResourceReference
-hasPart,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference; Link only available in ExternalResourceReference
-isBasedOn,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference; Link only available in ExternalResourceReference
-ObjectLanguage,1 - unbounded,string,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language,
-LinguisticDataType,0 - unbounded,string,N/A,Not expressable in IMDI
-Modality,0 - unbounded,string,//imdi:Session//imdi:Content/imdi:Modalities,
-Language,1 - unbounded,N/A,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language,
-LanguageName,1 - unbounded,string,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language/imdi:Name,
-LanguagePreferredLable,0 - 1,URI OR string,N/A,Not expressable in IMDI
-LanguageIdentifier,1 - unbounded,URI,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language/imdi:Id,
\ No newline at end of file
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/childes-generic.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/childes-generic.csv
similarity index 100%
rename from src/main/java/de/uni_hamburg/corpora/validation/quest/resources/childes-generic.csv
rename to src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/childes-generic.csv
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-blam.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-blam.csv
new file mode 100644
index 00000000..5c22a13f
--- /dev/null
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-blam.csv
@@ -0,0 +1,34 @@
+Property,Requirement,Value type,BLAM,,,,,,,Reference
+Identifier,1 - unbounded,URI,"/cmd:CMD/cmd:Components/*[fn:contains(fn:name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleID OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionID",,,,,,,https://github.com/fxru/blam-metadata/blob/master/BLAMBundleRepository.md
+Title,1 - unbounded,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleDisplayTitle OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionDisplayTitle",,,,,,,
+Description,1 - unbounded,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleDescription OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionDescription",,,,,,,
+Version,0 - 1,string,N/A,,,,,,,
+Keywords,0 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleKeywords OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionKeywords",,,,,,,
+License,1 - 1,URI OR string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleAdministrativeInfo/cmd:License OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionAdministrativeInfo/cmd:License",,,,,,,
+Rightsholder,0 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleAdministrativeInfo/cmd:Rightsholder OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionAdministrativeInfo/cmd:Rightsholder",,,,,,
+Access Rights,0 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleAdministrativeInfo/cmd:Access OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionAdministrativeInfo/cmd:Access",,,,,,
+PublicationYear,1 - 1,date,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundlePublicationYear OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionPublicationYear",,,,,,,
+Publisher,1 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleDataProvider OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionDataProvider",,,,,,
+Creator,1 - unbounded,N/A,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator",,,,,,
+CreatorName,0 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator/cmd:CreatorName OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator/cmd:CreatorName",,,,,,
+FamilyName,1 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator/cmd:CreatorName/cmd:CreatorFamilyName OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator/cmd:CreatorName/cmd:CreatorFamilyName",,,,,,
+GivenName,0 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator/cmd:CreatorName/cmd:CreatorGivenName OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator/cmd:CreatorName/cmd:CreatorGivenName",,,,,,
+CreatorIdentifier,1 - unbounded,URI,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator/cmd:CreatorNameIdentifier OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator/cmd:CreatorNameIdentifier",,,,,,
+Affiliation,0 - unbounded,URI OR string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundlePublicationInfo/cmd:BundleCreators/cmd:BundleCreator/cmd:CreatorAffiliation OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionPublicationInfo/cmd:CollectionCreators/cmd:CollectionCreator/cmd:CreatorAffiliation",,,,,,
+CreatorEmail,0 - unbounded,URI OR string,N/A,,,,,,,
+Organisation,N/A,N/A,N/A,,,,,,,
+OrganisationName,1 - 1,string,N/A,,,,,,,
+OrganisationIdentifier,0 - unbounded,N/A,N/A,,,,,,,
+OrganisationURL,0 - 1,URI,N/A,,,,,,,
+OrganisationEmail,0 - 1,URI OR string,N/A,,,,,,,
+sameAs,0 - unbounded,URI,N/A,,,,,,,
+isPartOf,0 - unbounded,URI,"/cmd:CMD/cmd:Resources/cmd:IsPartOfList/cmd:IsPartOf OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleStructuralInfo/cmd:BundleIsMemberOfCollection OR /cmd:CMD/cmd:Resources/cmd:IsPartOfList/cmd:IsPartOf OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionStructuralInfo/cmd:CollectionIsMemberOfCollection",,,,,,
+hasPart,0 - unbounded,URI,N/A,,,,,,,
+isBasedOn,0 - unbounded,URI,N/A,,,,,,,
+ObjectLanguage,1 - unbounded,N/A,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage",,,,,,
+LinguisticDataType,0 - unbounded,string,N/A,,,,,,,
+Modality,0 - unbounded,string,N/A,,,,,,,
+Language,N/A,N/A,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage",,,,,,
+LanguageName,1 - 1,string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage/cmd:ObjectLanguageName OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage/cmd:ObjectLanguageName",,,,,,
+LanguagePreferredLable,0 - 1,URI OR string,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage/cmd:ObjectLanguageDisplayName OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage/cmd:ObjectLanguageDisplayName",,,,,,
+LanguageIdentifier,1 - unbounded,URI,"/cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage/cmd:ObjectLanguageISO639-3Code OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-bundle')]/cmd:BundleGeneralInfo/cmd:BundleObjectLanguages/cmd:BundleObjectLanguage/cmd:ObjectLanguageGlottologCode OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage/cmd:ObjectLanguageISO639-3Code OR /cmd:CMD/cmd:Components/*[contains(name(),'BLAM-collection')]/cmd:CollectionGeneralInfo/cmd:CollectionObjectLanguages/cmd:CollectionObjectLanguage/cmd:ObjectLanguageGlottologCode",,,,,,
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-sign.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-sign.csv
new file mode 100644
index 00000000..76de1efd
--- /dev/null
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/cmdi-sign.csv
@@ -0,0 +1,34 @@
+Property,Requirement,Value type,CMDI,,Reference: https://catalog.clarin.eu/ds/ComponentRegistry#/?itemId=clarin.eu%3Acr1%3Ap_1417617523856&registrySpace=public
+Identifier,1 - unbounded,URI,//cmd:MdSelfLink,,
+Title,1 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Name OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Title,,
+Description,1 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Project/cmd:descriptions/cmd:Description OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:InfoLink/cmd:Description,,description seems to be a child of Project and InfoLink does not seem to appear in data
+Version,0 - 1,string,N/A,,
+Keywords,0 - 1,string,N/A,,
+License,1 - 1,URI OR string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL_CreativeCommonsLicense,,
+Rightsholder,0 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:MediaFile/cmd:Access/cmd:Owner OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:WrittenResource/cmd:Access/cmd:Owner OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:Anonyms/cmd:Access/cmd:Owner,,finds one result for each linked file -> changed to unbounded
+Access Rights,0 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL_CreativeCommonsLicense OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:MediaFile/cmd:Access/cmd:Availability OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:WrittenResource/cmd:Access/cmd:Availability OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:Anonyms/cmd:Access/cmd:Availability,,same cardinality as rightsholder
+PublicationYear,1 - 1,date,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Date,,
+Publisher,1 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:MediaFile/cmd:Access/cmd:Publisher OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:WrittenResource/cmd:Access/cmd:Publisher OR /cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Resources/cmd:Anonyms/cmd:Access/cmd:Publisher,,same cardinality as rightsholder
+Creator,1 - unbounded,string,N/A,,
+CreatorName,0 - 1,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Project/cmd:Contact/cmd:Name OR /cmd:CMD/cmd:Header/cmd:MdCreator,,
+FamilyName,1 - 1,string,N/A,,was the same as creator name
+GivenName,0 - 1,string,N/A,,was the same as creator name
+CreatorIdentifier,1 - unbounded,URI,N/A,,
+Affiliation,0 - unbounded,URI OR string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Project/cmd:Contact/cmd:Organisation,,
+CreatorEmail,0 - unbounded,URI OR string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Project/cmd:Contact/cmd:Email,,
+Organisation,N/A,N/A,N/A,,
+OrganisationName,1 - 1,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:Project/cmd:Contact/cmd:Organisation,,
+OrganisationIdentifier,0 - unbounded,N/A,N/A,,
+OrganisationURL,0 - 1,URI,N/A,,
+OrganisationEmail,0 - 1,URI OR string,N/A,,
+sameAs,0 - unbounded,URI,N/A,,
+isPartOf,0 - unbounded,URI,N/A,,
+hasPart,0 - unbounded,URI,N/A,,
+isBasedOn,0 - unbounded,URI,N/A,,
+ObjectLanguage,1 - unbounded,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL-Content/cmd:Content_Languages,,
+LinguisticDataType,0 - unbounded,string,N/A,,
+Modality,0 - unbounded,string,/cmd:CDM/cmd:Components/cmd:lat-SL-session/cmd:SL-Content/cmd:Modalities,,
+Language,N/A,N/A,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL-Content/cmd:Content_Languages/cmd:Content_Language,,
+LanguageName,1 - 1,string,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL-Content/cmd:Content_Languages/cmd:Content_Language/cmd:Name,,
+LanguagePreferredLable,0 - 1,URI OR string,N/A,,
+LanguageIdentifier,1 - unbounded,URI,/cmd:CMD/cmd:Components/cmd:lat-SL-session/cmd:SL-Content/cmd:Content_Languages/cmd:Content_Language/cmd:Id,,
\ No newline at end of file
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/coma-generic.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/coma-generic.csv
similarity index 100%
rename from src/main/java/de/uni_hamburg/corpora/validation/quest/resources/coma-generic.csv
rename to src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/coma-generic.csv
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/imdi-generic.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/imdi-generic.csv
new file mode 100644
index 00000000..49da7323
--- /dev/null
+++ b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/imdi-generic.csv
@@ -0,0 +1,35 @@
+Property,Requirement,Value type,IMDI,Comments,,
+Identifier,1 - unbounded,URI,/imdi:METATRANSCRIPT/@ArchiveHandle,imdi: is making the implicit namespace http://www.mpi.nl/IMDI/Schema/IMDI exmplicit,,
+Session,1 - 1, N/A,//imdi:Session,There is only one session supposed to be in an IMDI metadata file,,
+Title,1 - unbounded,string,//imdi:Session/imdi:Name OR //imdi:Session//imdi:Title,Could be /imdi:METATRANSCRIPT/imdi:Session/imdi:Title or /imdi:METATRANSCRIPT/imdi:Session/imdi:MDGroup/imdi:Project/imdi:Title,,
+Description,1 - unbounded,string,//imdi:Session/imdi:Description,,,
+Version,0 - 1,string,/imdi:METATRANSCRIPT/@Version,,,
+Keywords,0 - 1,string,//imdi:Session/imdi:Keys OR Session//imdi:Content/imdi:Keys,,,
+License,1 - 1,URI OR string,//imdi:Session/imdi:Access/imdi:Description,Access does not seem to be a valid element directly within session, only for ressources,
+Rightsholder,0 - 1,string,//imdi:Session/imdi:Access/imdi:Owner,Access does not seem to be a valid element directly within session, only for ressources,
+Access Rights,0 - 1,string,//imdi:Session/imdi:Access/imdi:Availability,Access does not seem to be a valid element directly within session, only for ressources,
+PublicationYear,1 - 1,date,//imdi:Session/imdi:Date,,,
+Publisher,1 - 1,string,//imdi:Session/imdi:Access/imdi:Publisher,Access does not seem to be a valid element directly within session only for ressources,,
+Creator,1 - unbounded,string,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Author"" or imdi:Role/text()=""Researcher""]",Limiting the roles of the actor, more roles could be suitable (see: https://www.mpi.nl/IMDI/Schema/Actor-Role.xml), IMDI schema guarantees that each creator has exactly one full name and so on
+CreatorName,0 - unbounded,string,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:Name OR //imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:FullName",Only for the creator roles as above,,
+FamilyName,1 - 1,string,N/A,Not expressable in IMDI,,
+GivenName,0 - 1,string,N/A,Not expressable in IMDI,,
+CreatorIdentifier,1 - unbounded,URI,N/A,Not expressable in IMDI,,
+Affiliation,0 - unbounded,URI OR string,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:Contact/imdi:Organization",Only for the creator roles as above,,
+CreatorEmail,0 - unbounded,URI OR string,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:Contact/imdi:Email",Only for the creator roles as above,,
+Organisation,N/A,N/A,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:Contact/imdi:Organisation OR //imdi:Session//imdi:Project/imdi:Contact/imdi:Organisation",Only for the creator roles as above or for the project,,
+OrganisationName,1 - unbound,string,"//imdi:Session//imdi:Actors/imdi:Actor[imdi:Role/text()=""Researcher"" or imdi:Role/text()=""Author""]/imdi:Contact/imdi:Organisation OR //imdi:Session//imdi:Project/imdi:Contact/imdi:Organisation",Only for the creator roles as above or for the project,,
+OrganisationIdentifier,0 - unbounded,N/A,N/A,Not expressable in IMDI,,
+OrganisationURL,0 - 1,URI,N/A,Not expressable in IMDI,,
+OrganisationEmail,0 - 1,URI OR string,N/A,Not expressable in IMDI,,
+sameAs,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference, Link only available in ExternalResourceReference,
+isPartOf,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference, Link only available in ExternalResourceReference,
+hasPart,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference, Link only available in ExternalResourceReference,
+isBasedOn,0 - unbounded,URI,//imdi:Session/imdi:Resource OR //imdi:Reference/imdi:Link,No tag Resource within Session and Link within Reference, Link only available in ExternalResourceReference,
+ObjectLanguage,1 - unbounded,string,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language,,,
+LinguisticDataType,0 - unbounded,string,N/A,Not expressable in IMDI,,
+Modality,0 - unbounded,string,//imdi:Session//imdi:Content/imdi:Modalities,,,
+Language,1 - unbounded,N/A,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language,,,
+LanguageName,1 - unbounded,string,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language/imdi:Name,,,
+LanguagePreferredLable,0 - 1,URI OR string,N/A,Not expressable in IMDI,,
+LanguageIdentifier,1 - unbounded,URI,//imdi:Session//imdi:Content/imdi:Languages/imdi:Language/imdi:Id,,,
diff --git a/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/tei-generic.csv b/src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/tei-generic.csv
similarity index 100%
rename from src/main/java/de/uni_hamburg/corpora/validation/quest/resources/tei-generic.csv
rename to src/main/java/de/uni_hamburg/corpora/validation/quest/resources/metadata/tei-generic.csv
-- 
GitLab