From 5a69b9eb6e2dc8581adff18da0196b2efd7c41cf Mon Sep 17 00:00:00 2001 From: pispis Date: Thu, 5 Oct 2023 15:44:42 +0300 Subject: [PATCH] Added FAIR Guidelines for literature v4. media Types file updated Minor updates to the FAIR Guidelines --- .../validation/guideline/openaire/F2_01M.java | 2 +- .../guideline/openaire/F2_01M_LIT.java | 121 ++ .../guideline/openaire/F3_01M_LIT.java | 75 + .../FAIR_Literature_GuidelinesProfile.java | 364 ---- .../FAIR_Literature_GuidelinesV4Profile.java | 752 ++++++++ .../guideline/openaire/I2_01M_LIT.java | 67 + .../validation/guideline/openaire/R1_01M.java | 37 +- .../guideline/openaire/R1_01M_LIT.java | 125 ++ .../guideline/openaire/R1_2_01M_LIT.java | 187 ++ src/main/resources/mediaTypes.csv | 1560 ++++++++++++++++- .../validator2/engine/Test_FAIR_LIT.java | 17 +- .../validator2/engine/Test_v2_data.java | 72 + 12 files changed, 3004 insertions(+), 375 deletions(-) create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M_LIT.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F3_01M_LIT.java delete mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesProfile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesV4Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/I2_01M_LIT.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M_LIT.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_2_01M_LIT.java create mode 100644 src/test/java/eu/dnetlib/validator2/engine/Test_v2_data.java diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M.java index 391c356..59c7319 100644 --- a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M.java +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M.java @@ -42,7 +42,7 @@ public final class F2_01M extends AbstractOpenAireProfile { .build(); private static final ElementSpec F2_01M_SPEC_3 = Builders. - forMandatoryElement("publisher", ONE). + forMandatoryElement("publisher", ONE_TO_N). build(); private static final ElementSpec F2_01M_SPEC_4 = Builders. diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M_LIT.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M_LIT.java new file mode 100644 index 0000000..7ff42d9 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F2_01M_LIT.java @@ -0,0 +1,121 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.SyntheticGuideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public final class F2_01M_LIT extends AbstractOpenAireProfile { + + private static final String[] TITLE_TYPES = { + "AlternativeTitle", "Subtitle", "TranslatedTitle", "Other" + }; + + private static final String[] NAME_TYPES = { + "Organizational", "Personal" + }; + + private static final ElementSpec F2_01M_LIT_SPEC_1 = Builders. + forMandatoryElement("datacite:creator", ONE_TO_N). + withSubElement(Builders. + forMandatoryElement("datacite:creatorName", ONE). + withRecommendedAttribute("nameType", NAME_TYPES)). + withSubElement(Builders. + forRecommendedElement("datacite:givenName")). + withSubElement(Builders. + forRecommendedElement("datacite:familyName")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:nameIdentifier"). + withMandatoryAttribute("nameIdentifierScheme"). + withRecommendedAttribute("schemeURI")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:affiliation")). + build(); + + private static final ElementSpec F2_01M_LIT_SPEC_2 = Builders. + forMandatoryElement("datacite:title", ONE_TO_N). + withOptionalAttribute("xml:lang", new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)). + withOptionalAttribute("titleType", TITLE_TYPES). + build(); + + private static final ElementSpec F2_01M_LIT_SPEC_3 = Builders. + forMandatoryElement("dc:publisher", ONE_TO_N). + build(); + + private static final ElementSpec F2_01M_LIT_SPEC_4 = Builders. + forMandatoryElement("datacite:date", ONE). + withMandatoryAttribute("dateType", "Issued"). + allowedValues(new RegexValuePredicate(COMPILED_PUBLICATION_DATE_REG_EX).or(new RegexValuePredicate(COMPILED_YYYY_MM_DD_RANGE_REGEX).or(new RegexValuePredicate(COMPILED_YEAR_YYYY_REG_EX)))). + build(); + + private static final ElementSpec F2_01M_LIT_SPEC_5 = Builders. + forMandatoryElement("dc:description", ONE_TO_N). + withMandatoryAttribute("descriptionType", "Abstract"). + withOptionalAttribute("xml:lang", new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)). + build(); + + private static final ElementSpec F2_01M_LIT_SPEC_6 = Builders. + forMandatoryElement("datacite:subject", ONE_TO_N). + withOptionalAttribute("subjectScheme"). + withOptionalAttribute("schemeURI"). + withOptionalAttribute("valueURI"). + build(); + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static SyntheticGuideline F2_01M_LIT_1 = SyntheticGuideline.of("Creator", 2, F2_01M_LIT_SPEC_1); + public static SyntheticGuideline F2_01M_LIT_2 = SyntheticGuideline.of("Title", 2, F2_01M_LIT_SPEC_2); + public static SyntheticGuideline F2_01M_LIT_3 = SyntheticGuideline.of("Publisher", 2, F2_01M_LIT_SPEC_3); + public static SyntheticGuideline F2_01M_LIT_4 = SyntheticGuideline.of("Date", 2, F2_01M_LIT_SPEC_4); + public static SyntheticGuideline F2_01M_LIT_5 = SyntheticGuideline.of("Summary (Description with descriptionType)", 2, F2_01M_LIT_SPEC_5); + public static SyntheticGuideline F2_01M_LIT_6 = SyntheticGuideline.of("Keywords (Subjects)", 2, F2_01M_LIT_SPEC_6); + + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + F2_01M_LIT_1, + F2_01M_LIT_2, + F2_01M_LIT_3, + F2_01M_LIT_4, + F2_01M_LIT_5, + F2_01M_LIT_6 + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public F2_01M_LIT() { + super("Rich metadata is provided to allow discovery"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F3_01M_LIT.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F3_01M_LIT.java new file mode 100644 index 0000000..462d7a0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/F3_01M_LIT.java @@ -0,0 +1,75 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.SyntheticGuideline; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; + +public final class F3_01M_LIT extends AbstractOpenAireProfile { + + private static final String[] RESOURCE_IDENTIFIER_TYPES = { + "ARK", "DOI", "Handle", "IGSN", "arXiv", "PURL", "URL", "URN", "PMID" + }; + + private static final String[] PERSISTENT_IDENTIFIER_TYPES = { + "IGSN", "QID", "ARK", "IVOA", "CAS RN", "RRID", "URL", "RInChi", "ERM", "ISO 27729:2012 ISNI", + "EC Number", "PURL", "LSID", "TFClass Schema", "InChI", "w3id", "Handle", "DOI", "ORCID iD", "arXiv" + }; + + private static final ElementSpec F3_01M_LIT_SPEC_1 = Builders. + forMandatoryElement("datacite:identifier", ONE). +// withMandatoryAttribute("identifierType", new PIDCheckValuePredicate()). + withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES). + build(); + + private static final ElementSpec F3_01M_LIT_SPEC_2 = Builders. + forMandatoryElement("datacite:alternateIdentifier", ONE_TO_N). +// withMandatoryAttribute("identifierType", new PIDCheckValuePredicate()). + withMandatoryAttribute("alternateIdentifierType", PERSISTENT_IDENTIFIER_TYPES). + build(); + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static SyntheticGuideline F3_01M_LIT_1 = SyntheticGuideline.of("Identifier", 2, F3_01M_LIT_SPEC_1); + public static SyntheticGuideline F3_01M_LIT_2 = SyntheticGuideline.of("AlternateIdentifier", 2, F3_01M_LIT_SPEC_2); + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + F3_01M_LIT_1, + F3_01M_LIT_2 + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public F3_01M_LIT() { + super("Metadata includes the identifier for the data"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { return MAX_SCORE; } +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesProfile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesProfile.java deleted file mode 100644 index 8afd3c7..0000000 --- a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesProfile.java +++ /dev/null @@ -1,364 +0,0 @@ -package eu.dnetlib.validator2.validation.guideline.openaire; - -//import com.google.gson.Gson; - -import eu.dnetlib.validator2.validation.guideline.*; -import org.w3c.dom.Document; - -import java.util.*; -import java.util.stream.Collectors; - -import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; -import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; - -public final class FAIR_Literature_GuidelinesProfile extends AbstractOpenAireProfile { - - private static final String[] TITLE_TYPES = { - "AlternativeTitle", "Subtitle", "TranslatedTitle", "Other" - }; - - private static final String[] NAME_TYPES = { - "Organizational", "Personal" - }; - - private static final String[] CONTRIBUTOR_TYPES = { - "ContactPerson", "DataCollector", "DataCurator", "DataManager", "Distributor", - "Editor", "HostingInstitution", "Producer", "ProjectLeader", "ProjectManager", "ProjectMember", - "RegistrationAgency", "RegistrationAuthority", "RelatedPerson", "Researcher", "ResearchGroup", - "RightsHolder", "Sponsor", "Supervisor", "WorkPackageLeader", "Other" - }; - - private static final String[] FUNDER_IDENTIFIER_TYPES = { - "ISNI", "GRID", "Crossref Funder" - }; - - private static final String[] CONTRIBUTOR_NAME_IDENTIFIER_TYPES = { - "Funder", "FundingProgramme", "ProjectID", "Jurisdiction", "ProjectName", "ProjectAcronym" - }; - - private static final String[] rightsURIList = { - "info:eu-repo/semantics/closedAccess", - "info:eu-repo/semantics/embargoedAccess", - "info:eu-repo/semantics/restrictedAccess", - "info:eu-repo/semantics/openAccess" - }; - - private static final String[] IDENTIFIER_TYPES = { - "ARK", "arXiv", "bibcode", "DOI", "EAN13", "EISSN", "Handle", "IGSN", "ISBN", - "ISSN", "ISTC", "LISSN", "LSID", "PISSN", "PMID", "PURL", "UPC", "URL", "URN", "WOS", - }; - - private static final String[] PERSISTENT_IDENTIFIER_TYPES = { - "IGSN", "QID", "ARK", "IVOA", "CAS RN", "RRID", "URL", "RInChi", "ERM", "ISO 27729:2012 ISNI", - "EC Number", "PURL", "LSID", "TFClass Schema", "InChI", "w3id", "Handle", "DOI", "ORCID iD", "arXiv" - }; - - private static final String[] RELATION_TYPES = { - "IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", - "Continues", "IsDescribedBy", "Describes", "HasMetadata", "IsMetadataFor", "HasVersion", - "IsVersionOf", "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsReferencedBy", - "References", "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", - "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf", - "IsRequiredBy", "Requires" - }; - - private static final String[] RELATION_TYPES_LIMITED = { - "IsSupplementTo", "Describes", "IsMetadataFor", "IsPartOf" - }; - - private static final String[] RELATED_RESOURCE_GENERAL_TYPES = { - "Audiovisual", "Collection", "DataPaper", "Dataset", "Event", "Image", "InteractiveResource", - "Model", "PhysicalObject", "Service", "Software", "Sound", "Text", "Workflow", "Other" - }; - - private static final String[] EMBARGO_DATE_TYPES = { - "Created", "Collected" - }; - - private static final String[] NAME_IDENTIFIER_SCHEMES = { - "ORCID", "ISNI", "ROR", "GRID" - }; - - private static final String[] NAME_IDENTIFIER_SCHEMES_URIS = { - "https://orcid.org/", "http://www.isni.org/", "https://ror.org/", "https://www.grid.ac/" - }; - - private static final String[] RESOURCE_GENERAL_TYPES = { - "literature", "dataset", "software", "other research product" - }; - - private static final String[] RESOURCE_CONCEPT_URIS = { - "http://purl.org/coar/resource_type/c_1162", "http://purl.org/coar/resource_type/c_6501", - "http://purl.org/coar/resource_type/c_545b", "http://purl.org/coar/resource_type/c_b239", - "http://purl.org/coar/resource_type/c_2df8fbb1", "http://purl.org/coar/resource_type/c_dcae04bc", - "http://purl.org/coar/resource_type/c_beb9", "http://purl.org/coar/resource_type/c_3e5a", - "http://purl.org/coar/resource_type/c_ba08", "http://purl.org/coar/resource_type/c_3248", - "http://purl.org/coar/resource_type/c_2f33", "http://purl.org/coar/resource_type/c_86bc", - "http://purl.org/coar/resource_type/c_816b", "http://purl.org/coar/resource_type/c_8042", - "http://purl.org/coar/resource_type/c_71bd", "http://purl.org/coar/resource_type/c_18gh", - "http://purl.org/coar/resource_type/c_18ws", "http://purl.org/coar/resource_type/c_18hj", - "http://purl.org/coar/resource_type/c_18op", "http://purl.org/coar/resource_type/c_186u", - "http://purl.org/coar/resource_type/c_18wq", "http://purl.org/coar/resource_type/c_18wz", - "http://purl.org/coar/resource_type/c_18ww", "http://purl.org/coar/resource_type/c_efa0", - "http://purl.org/coar/resource_type/c_baaf", "http://purl.org/coar/resource_type/c_ba1f", - "http://purl.org/coar/resource_type/c_93fc", "http://purl.org/coar/resource_type/c_15cd", - "http://purl.org/coar/resource_type/c_18co", "http://purl.org/coar/resource_type/c_18cp", - "http://purl.org/coar/resource_type/c_6670", "http://purl.org/coar/resource_type/c_5794", - "http://purl.org/coar/resource_type/c_c94f", "http://purl.org/coar/resource_type/c_f744", - "http://purl.org/coar/resource_type/c_7a1f", "http://purl.org/coar/resource_type/c_bdcc", - "http://purl.org/coar/resource_type/c_db06", "http://purl.org/coar/resource_type/c_46ec", - "http://purl.org/coar/resource_type/c_0857", "http://purl.org/coar/resource_type/c_8544", - "http://purl.org/coar/resource_type/c_18cf", "http://purl.org/coar/resource_type/c_18cw", - "http://purl.org/coar/resource_type/c_18cd", "http://purl.org/coar/resource_type/c_18cc", - "http://purl.org/coar/resource_type/c_12ce", "http://purl.org/coar/resource_type/c_8a7e", - "http://purl.org/coar/resource_type/c_ecc8", "http://purl.org/coar/resource_type/c_c513", - "http://purl.org/coar/resource_type/c_12cd", "http://purl.org/coar/resource_type/c_12cc", - "http://purl.org/coar/resource_type/c_5ce6", "http://purl.org/coar/resource_type/c_ddb1", - "http://purl.org/coar/resource_type/c_e9a0", "http://purl.org/coar/resource_type/c_7ad9", - "http://purl.org/coar/resource_type/c_393c", "http://purl.org/coar/resource_type/c_1843" - }; - - private static final String[] RESOURCE_IDENTIFIER_TYPES = { - "ARK", "DOI", "Handle", "IGSN", "arXiv", "PURL", "URL", "URN", "PMID" - }; - - private static final String[] ACCESS_RIGHTS_URIS = { - "http://purl.org/coar/access_right/c_abf2", "http://purl.org/coar/access_right/c_abf2", - "http://purl.org/coar/access_right/c_16ec", "http://purl.org/coar/access_right/c_f1cf", - "http://purl.org/coar/access_right/c_16ec", "http://purl.org/coar/access_right/c_16ec", - "http://purl.org/coar/access_right/c_16ec", "http://purl.org/coar/access_right/c_14cb" - }; - - private static final String[] RESOURCE_VERSION_URIS = { - "http://purl.org/coar/version/c_b1a7d7d4d402bcce", "http://purl.org/coar/version/c_71e4c1898caa6e32", - "http://purl.org/coar/version/c_ab4af688f83e57aa", "http://purl.org/coar/version/c_fa2ee174bc00049f", - "http://purl.org/coar/version/c_970fb48d4fbd8a85", "http://purl.org/coar/version/c_e19f295774971610", - "http://purl.org/coar/version/c_dc82b40f9837b551", "http://purl.org/coar/version/c_be7fb7dd8ff6fe43" - }; - - private static final String[] RESOURCE_VERSION_LABELS = { - "AO", "SMUR", "AM", "P", "VoR", "CVoR", "EVoR", "NA" - }; - - private static final String[] DATE_TYPES = { - "Accepted", "Available", "Copyrighted", "Collected", "Created", "Issued", "Submitted", "Updated", "Valid" - }; - - private static final String[] FILE_OBJECT_TYPES = { - "fulltext", "dataset", "software", "other" - }; - - private static final String[] AUDIENCE_VOCABULARY = { - "Administrators", "Community Groups", "Counsellors", "Federal Funds Recipients and Applicants", - "Librarians", "News Media", "Other", "Parents and Families", "Policymakers", "Researchers", - "School Support Staff", "Student Financial Aid Providers", "Students", "Teachers" - }; - - // globally unique identifier - private static final ElementSpec F1_01D_SPEC = Builders. - forMandatoryElement("identifier", ONE). -// withMandatoryAttribute("identifierType", new PIDCheckValuePredicate()). - withMandatoryAttribute("identifierType", PERSISTENT_IDENTIFIER_TYPES). - build(); - - // persistent identifier - private static final ElementSpec F1_02D_SPEC = Builders. - forMandatoryElement("identifier", ONE). - withMandatoryAttribute("identifierType", IDENTIFIER_TYPES). - build(); - -// // To be implemented: In the case of OpenAIRE we suppose it succeeds -// private static final ElementSpec F4_01M_SPEC = Builders. -// forMandatoryElement("identifier", ONE). -// withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES). -// build(); - - private static final ElementSpec A1_01M_SPEC = Builders. - forMandatoryElement("rights", ONE_TO_N). - withMandatoryAttribute("rightsURI", rightsURIList). - build(); - -// // To be implemented -// private static final ElementSpec A2_01M_SPEC = Builders. -// forMandatoryElement("subject", ONE_TO_N). -// withMandatoryAttribute("subjectScheme"). -// withMandatoryAttribute("schemeURI"). -// build(); - -// // To be implemented -// private static final ElementSpec I1_01M_SPEC = Builders. -// forMandatoryElement("subject", ONE_TO_N). -// build(); - -// // To be implemented -// // I1_02M Metadata uses semantic resources -// private static final ElementSpec I1_02M_SPEC = Builders. -// forMandatoryElement("subject", ONE). -// build(); - - private static final ElementSpec I3_01M_SPEC_1 = Builders. - forMandatoryElement("relatedIdentifier", ONE_TO_N). - withMandatoryAttribute("relatedIdentifierType", IDENTIFIER_TYPES). - withMandatoryAttribute("relationType", RELATION_TYPES). - build(); - -// private static final ElementSpec I3_01M_SPEC_2 = Builders. -// forMandatoryElement("creator", ONE_TO_N). -// withMandatoryAttribute("creatorName"). -// withMandatoryAttribute("nameIdentifier", NAME_IDENTIFIER_SCHEMES). -// withMandatoryAttribute("nameIdentifierScheme", NAME_IDENTIFIER_SCHEMES). -// withMandatoryAttribute("schemeURI", NAME_IDENTIFIER_SCHEMES_URIS). -// withMandatoryAttribute("affiliation", NAME_IDENTIFIER_SCHEMES). -// build(); - - // TO BE IMPLEMENTED - - private static final ElementSpec R1_1_01M_SPEC = Builders. - forMandatoryElement("rights", ONE_TO_N) - .atPosition(ElementPosition.FIRST) - .withMandatoryAttribute("rightsURI") // Not in the rightsURIList HOW TO IMPLEMENT????? -// .withMandatoryAttribute("rightsURI", rightsURIList) // Not in the rightsURIList HOW TO IMPLEMENT????? - .build(); - - //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 10. - public static SyntheticGuideline F1_01D = SyntheticGuideline.of("Data is identified by a persistent identifier", 10, F1_01D_SPEC); - public static SyntheticGuideline F1_02D = SyntheticGuideline.of("Data is identified by a globally unique identifier", 10, F1_02D_SPEC); - // public static SyntheticGuideline F4_01M = SyntheticGuideline.of("F4_01M", 10, F4_01M_SPEC); - public static SyntheticGuideline A1_01M = SyntheticGuideline.of("Metadata contains information to enable the user to get access to the data", 10, A1_01M_SPEC); - // public static SyntheticGuideline A2_01M = SyntheticGuideline.of("A2_01M", 10, A2_01M_SPEC); -// public static SyntheticGuideline I1_01M = SyntheticGuideline.of("I1_01M", 10, I1_01M_SPEC); -// public static SyntheticGuideline I1_02M = SyntheticGuideline.of("I1_02M", 10, I1_02M_SPEC); - public static SyntheticGuideline I3_01M_1 = SyntheticGuideline.of("Metadata includes references to other metadata", 10, I3_01M_SPEC_1); - // public static SyntheticGuideline I3_01M_2 = SyntheticGuideline.of("I3_01M_2", 5, I3_01M_SPEC_2); -// public static SyntheticGuideline R1_01M = SyntheticGuideline.of("R1_01M", 10, R1_01M_SPEC); - public static SyntheticGuideline R1_1_01M = SyntheticGuideline.of("Metadata includes information about the licence under which the data can be reused", 10, R1_1_01M_SPEC); - - private static final List> GUIDELINES = Collections.unmodifiableList( - Arrays.asList( - F1_01D, - F1_02D, - new F2_01M_SPEC(), - new F3_01M_SPEC(), -// F4_01M, - A1_01M, -// A2_01M, -// I1_01M, -// I1_02M, - new I2_01M_SPEC(), - I3_01M_1, -// I3_01M_2, -// R1_01M, - new R1_01M_SPEC(), - R1_1_01M, - new R1_2_01M_SPEC() -// new MetadataCompleteness() -// new I3_01M() - ) - ); - - private static final Map GUIDELINE_MAP = GUIDELINES. - stream(). - collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); - - private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); - - public FAIR_Literature_GuidelinesProfile() { - super("OpenAIRE FAIR Guidelines for Data Repositories Profile"); - } - - @Override - public Collection> guidelines() { - return GUIDELINES; - } - - /** - * - * @param guidelineName - * @return - */ - @Override - public Guideline guideline(String guidelineName) { - return GUIDELINE_MAP.get(guidelineName); - } - - @Override - public int maxScore() { - return MAX_SCORE; - } -} - - -//// TODO this goes to FAIRProfile -//class MetadataCompleteness extends AbstractGuideline { -// -// public MetadataCompleteness() { -// super("MetadataCompleteness", 40); -// } -// -// @Override -// public Result validate(String id, Document t) { -// DataArchiveGuidelinesV2Profile profile = new DataArchiveGuidelinesV2Profile(); -// -// // <>ODO: iterate over results and build one Guideline.Result -// try { -//// System.out.println("Processing MetadataCompleteness..."); -// XMLApplicationProfile.ValidationResult res = profile.validate(id, t); -// Map results = res.results(); -// int MaxScoreMetadataCompleteness = (int) ((res.score()*getWeight())/100); -// -//// System.out.println("Max score DataValidator(%): " + res.score()); -//// System.out.println("Weight FAIRG: " + getWeight()); -//// System.out.println("Max score MetadataCompleteness: " + MaxScoreMetadataCompleteness); -//// System.out.println("\n\n\n\n"); -// -//// for (Map.Entry entry : results.entrySet()) { -//// System.out.println(entry.getKey() + " = " + entry.getValue()); -//// } -//// System.out.println(score); -// return getResult(MaxScoreMetadataCompleteness); -// -//// System.out.println(tempp.status() + " - " + tempp.score()); -//// String printout = results.entrySet().stream(). -//// map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n")); -//// System.out.println(printout); -// -//// System.out.println("\n\n\n\n"); -// } catch (Exception e) { -// System.out.println(e.getMessage()); -// System.out.println(e); -// e.printStackTrace(); -// } -// -// return null; -// } -// -// private static Result getResult(int score) { -// String aa; -// aa = (score > 0) ? "SUCCESS" : "FAILURE"; -// return new Result() { -// @Override -// public int score() { -// return score; -// } -// -// @Override -// public Status status() { -//// return null; -// return Status.valueOf(aa); -// } -// -// @Override -// public Iterable warnings() { return null; } -// -// @Override -// public Iterable errors() { -// return null; -// } -// -// @Override -// public String internalError() { -// return null; -// } -// }; -// } -//} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesV4Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesV4Profile.java new file mode 100644 index 0000000..3d27efd --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/FAIR_Literature_GuidelinesV4Profile.java @@ -0,0 +1,752 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +//import com.google.gson.Gson; + +import eu.dnetlib.validator2.engine.Status; +import eu.dnetlib.validator2.validation.XMLApplicationProfile; +import eu.dnetlib.validator2.validation.guideline.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; + +public final class FAIR_Literature_GuidelinesV4Profile extends AbstractOpenAireProfile { + + + private static final String[] TITLE_TYPES = { + "AlternativeTitle", "Subtitle", "TranslatedTitle", "Other" + }; + + private static final String[] NAME_TYPES = { + "Organizational", "Personal" + }; + + private static final String[] CONTRIBUTOR_TYPES = { + "ContactPerson", "DataCollector", "DataCurator", "DataManager", "Distributor", + "Editor", "HostingInstitution", "Producer", "ProjectLeader", "ProjectManager", "ProjectMember", + "RegistrationAgency", "RegistrationAuthority", "RelatedPerson", "Researcher", "ResearchGroup", + "RightsHolder", "Sponsor", "Supervisor", "WorkPackageLeader", "Other" + }; + + private static final String[] FUNDER_IDENTIFIER_TYPES = { + "ISNI", "GRID", "Crossref Funder" + }; + + private static final String[] IDENTIFIER_TYPES = { + "ARK", "arXiv", "bibcode", "DOI", "EAN13", "EISSN", "Handle", "IGSN", "ISBN", + "ISSN", "ISTC", "LISSN", "LSID", "PISSN", "PMID", "PURL", "UPC", "URL", "URN", "WOS", + }; + + private static final String[] RELATION_TYPES = { + "IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", + "Continues", "IsDescribedBy", "Describes", "HasMetadata", "IsMetadataFor", "HasVersion", + "IsVersionOf", "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsReferencedBy", + "References", "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", + "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf", + "IsRequiredBy", "Requires" + }; + + private static final String[] RELATED_RESOURCE_GENERAL_TYPES = { + "Audiovisual", "Collection", "DataPaper", "Dataset", "Event", "Image", "InteractiveResource", + "Model", "PhysicalObject", "Service", "Software", "Sound", "Text", "Workflow", "Other" + }; + + private static final String[] EMBARGO_DATE_TYPES = { + "Accepted", "Available" + }; + + private static final String[] PUBLICATION_DATE_TYPE = { + "Issued" + }; + + private static final String[] RESOURCE_GENERAL_TYPES = { + "literature", "dataset", "software", "other research product" + }; + + private static final String[] RESOURCE_CONCEPT_URIS = { + "http://purl.org/coar/resource_type/c_1162", "http://purl.org/coar/resource_type/c_6501", + "http://purl.org/coar/resource_type/c_545b", "http://purl.org/coar/resource_type/c_b239", + "http://purl.org/coar/resource_type/c_2df8fbb1", "http://purl.org/coar/resource_type/c_dcae04bc", + "http://purl.org/coar/resource_type/c_beb9", "http://purl.org/coar/resource_type/c_3e5a", + "http://purl.org/coar/resource_type/c_ba08", "http://purl.org/coar/resource_type/c_3248", + "http://purl.org/coar/resource_type/c_2f33", "http://purl.org/coar/resource_type/c_86bc", + "http://purl.org/coar/resource_type/c_816b", "http://purl.org/coar/resource_type/c_8042", + "http://purl.org/coar/resource_type/c_71bd", "http://purl.org/coar/resource_type/c_18gh", + "http://purl.org/coar/resource_type/c_18ws", "http://purl.org/coar/resource_type/c_18hj", + "http://purl.org/coar/resource_type/c_18op", "http://purl.org/coar/resource_type/c_186u", + "http://purl.org/coar/resource_type/c_18wq", "http://purl.org/coar/resource_type/c_18wz", + "http://purl.org/coar/resource_type/c_18ww", "http://purl.org/coar/resource_type/c_efa0", + "http://purl.org/coar/resource_type/c_baaf", "http://purl.org/coar/resource_type/c_ba1f", + "http://purl.org/coar/resource_type/c_93fc", "http://purl.org/coar/resource_type/c_15cd", + "http://purl.org/coar/resource_type/c_18co", "http://purl.org/coar/resource_type/c_18cp", + "http://purl.org/coar/resource_type/c_6670", "http://purl.org/coar/resource_type/c_5794", + "http://purl.org/coar/resource_type/c_c94f", "http://purl.org/coar/resource_type/c_f744", + "http://purl.org/coar/resource_type/c_7a1f", "http://purl.org/coar/resource_type/c_bdcc", + "http://purl.org/coar/resource_type/c_db06", "http://purl.org/coar/resource_type/c_46ec", + "http://purl.org/coar/resource_type/c_0857", "http://purl.org/coar/resource_type/c_8544", + "http://purl.org/coar/resource_type/c_18cf", "http://purl.org/coar/resource_type/c_18cw", + "http://purl.org/coar/resource_type/c_18cd", "http://purl.org/coar/resource_type/c_18cc", + "http://purl.org/coar/resource_type/c_12ce", "http://purl.org/coar/resource_type/c_8a7e", + "http://purl.org/coar/resource_type/c_ecc8", "http://purl.org/coar/resource_type/c_c513", + "http://purl.org/coar/resource_type/c_12cd", "http://purl.org/coar/resource_type/c_12cc", + "http://purl.org/coar/resource_type/c_5ce6", "http://purl.org/coar/resource_type/c_ddb1", + "http://purl.org/coar/resource_type/c_e9a0", "http://purl.org/coar/resource_type/c_7ad9", + "http://purl.org/coar/resource_type/c_393c", "http://purl.org/coar/resource_type/c_1843" + }; + + private static final String[] RESOURCE_IDENTIFIER_TYPES = { + "ARK", "DOI", "Handle", "PURL", "URL", "URN" + }; + + private static final String[] ACCESS_RIGHTS_TYPES = { + "open access", "embargoed access", + "restricted access", "metadata only access" + }; + + private static final String[] ACCESS_RIGHTS_URIS = { + "http://purl.org/coar/access_right/c_abf2", "http://purl.org/coar/access_right/c_f1cf", + "http://purl.org/coar/access_right/c_16ec", "http://purl.org/coar/access_right/c_14cb" + }; + + private static final String[] RESOURCE_VERSION_URIS = { + "http://purl.org/coar/version/c_b1a7d7d4d402bcce", "http://purl.org/coar/version/c_71e4c1898caa6e32", + "http://purl.org/coar/version/c_ab4af688f83e57aa", "http://purl.org/coar/version/c_fa2ee174bc00049f", + "http://purl.org/coar/version/c_970fb48d4fbd8a85", "http://purl.org/coar/version/c_e19f295774971610", + "http://purl.org/coar/version/c_dc82b40f9837b551", "http://purl.org/coar/version/c_be7fb7dd8ff6fe43" + }; + + private static final String[] RESOURCE_VERSION_LABELS = { + "AO", "SMUR", "AM", "P", "VoR", "CVoR", "EVoR", "NA" + }; + + private static final String[] FILE_OBJECT_TYPES = { + "fulltext", "dataset", "software", "other" + }; + + private static final String[] AUDIENCE_VOCABULARY = { + "Administrators", "Community Groups", "Counsellors", "Federal Funds Recipients and Applicants", + "Librarians", "News Media", "Other", "Parents and Families", "Policymakers", "Researchers", + "School Support Staff", "Student Financial Aid Providers", "Students", "Teachers" + }; + + // persistent identifier + private static final ElementSpec F1_01D_SPEC = Builders. + forMandatoryElement("datacite:identifier", ONE). + withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES). + build(); + + // persistent identifier + private static final ElementSpec F1_02D_SPEC = Builders. + forMandatoryElement("identifier", ONE). + withMandatoryAttribute("identifierType", IDENTIFIER_TYPES). + build(); + +// // To be implemented: In the case of OpenAIRE we suppose it succeeds +// private static final ElementSpec F4_01M_SPEC = Builders. +// forMandatoryElement("identifier", ONE). +// withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES). +// build(); + + private static final ElementSpec A1_01M_SPEC = Builders. + forMandatoryElement("datacite:rights", ONE_TO_N). + withMandatoryAttribute("rightsURI", ACCESS_RIGHTS_URIS). + build(); + +// // To be implemented +// private static final ElementSpec A2_01M_SPEC = Builders. +// forMandatoryElement("subject", ONE_TO_N). +// withMandatoryAttribute("subjectScheme"). +// withMandatoryAttribute("schemeURI"). +// build(); + +// // To be implemented +// private static final ElementSpec I1_01M_SPEC = Builders. +// forMandatoryElement("subject", ONE_TO_N). +// build(); + +// // To be implemented +// // I1_02M Metadata uses semantic resources +// private static final ElementSpec I1_02M_SPEC = Builders. +// forMandatoryElement("subject", ONE). +// build(); + + + private static final ElementSpec I3_01M_SPEC_1 = Builders. + forRecommendedRepeatableElement("datacite:relatedIdentifier"). + withMandatoryAttribute("relatedIdentifierType", IDENTIFIER_TYPES). + withMandatoryAttribute("relationType", RELATION_TYPES). + //TODO: For following 3 attributes. Need a way to target relationType attribute of current element + // - Should be used only with relation type (HasMetadata/IsMetadataFor). + withOptionalAttribute("relatedMetadataScheme"). + withOptionalAttribute("schemeURI"). + withOptionalAttribute("schemeType"). + withOptionalAttribute("resourceTypeGeneral", RELATED_RESOURCE_GENERAL_TYPES). + build(); + +// private static final ElementSpec I3_01M_SPEC_2 = Builders. +// forMandatoryElement("creator", ONE_TO_N). +// withMandatoryAttribute("creatorName"). +// withMandatoryAttribute("nameIdentifier", NAME_IDENTIFIER_SCHEMES). +// withMandatoryAttribute("nameIdentifierScheme", NAME_IDENTIFIER_SCHEMES). +// withMandatoryAttribute("schemeURI", NAME_IDENTIFIER_SCHEMES_URIS). +// withMandatoryAttribute("affiliation", NAME_IDENTIFIER_SCHEMES). +// build(); + + // TO BE IMPLEMENTED + + private static final ElementSpec R1_1_01M_SPEC = Builders. + forRecommendedElement("oaire:licenseCondition"). + withMandatoryIfApplicableAttribute("uri", elementIsPresent("oaire:licenseCondition")). + withMandatoryIfApplicableAttribute("startDate", elementIsPresent("oaire:licenseCondition")). + build(); + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 10. + public static SyntheticGuideline F1_01D = SyntheticGuideline.of("Data is identified by a persistent identifier", 10, F1_01D_SPEC); + public static SyntheticGuideline F1_02D = SyntheticGuideline.of("Data is identified by a globally unique identifier", 10, F1_02D_SPEC); + // public static SyntheticGuideline F4_01M = SyntheticGuideline.of("F4_01M", 10, F4_01M_SPEC); + public static SyntheticGuideline A1_01M = SyntheticGuideline.of("Metadata contains information to enable the user to get access to the data", 10, A1_01M_SPEC); + // public static SyntheticGuideline A2_01M = SyntheticGuideline.of("A2_01M", 10, A2_01M_SPEC); +// public static SyntheticGuideline I1_01M = SyntheticGuideline.of("I1_01M", 10, I1_01M_SPEC); +// public static SyntheticGuideline I1_02M = SyntheticGuideline.of("I1_02M", 10, I1_02M_SPEC); + public static SyntheticGuideline I3_01M_1 = SyntheticGuideline.of("Metadata includes references to other metadata", 10, I3_01M_SPEC_1); + // public static SyntheticGuideline I3_01M_2 = SyntheticGuideline.of("I3_01M_2", 5, I3_01M_SPEC_2); +// public static SyntheticGuideline R1_01M = SyntheticGuideline.of("R1_01M", 10, R1_01M_SPEC); + public static SyntheticGuideline R1_1_01M = SyntheticGuideline.of("Metadata includes information about the licence under which the data can be reused", 10, R1_1_01M_SPEC); + + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + F1_01D, + F1_02D, + new F2_01M_SPEC(), + new F3_01M_SPEC(), +// F4_01M, + A1_01M, +// A2_01M, +// I1_01M, +// I1_02M, + new I2_01M_SPEC(), + I3_01M_1, +// I3_01M_2, +// R1_01M, + new R1_01M_SPEC(), + R1_1_01M, + new R1_2_01M_SPEC() +// new MetadataCompleteness() +// new I3_01M() + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public FAIR_Literature_GuidelinesV4Profile() { + super("OpenAIRE FAIR Guidelines for Data Repositories Profile"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} + + +//// TODO this goes to FAIRProfile +//class MetadataCompleteness extends AbstractGuideline { +// +// public MetadataCompleteness() { +// super("MetadataCompleteness", 40); +// } +// +// @Override +// public Result validate(String id, Document t) { +// DataArchiveGuidelinesV2Profile profile = new DataArchiveGuidelinesV2Profile(); +// +// // <>ODO: iterate over results and build one Guideline.Result +// try { +//// System.out.println("Processing MetadataCompleteness..."); +// XMLApplicationProfile.ValidationResult res = profile.validate(id, t); +// Map results = res.results(); +// int MaxScoreMetadataCompleteness = (int) ((res.score()*getWeight())/100); +// +//// System.out.println("Max score DataValidator(%): " + res.score()); +//// System.out.println("Weight FAIRG: " + getWeight()); +//// System.out.println("Max score MetadataCompleteness: " + MaxScoreMetadataCompleteness); +//// System.out.println("\n\n\n\n"); +// +//// for (Map.Entry entry : results.entrySet()) { +//// System.out.println(entry.getKey() + " = " + entry.getValue()); +//// } +//// System.out.println(score); +// return getResult(MaxScoreMetadataCompleteness); +// +//// System.out.println(tempp.status() + " - " + tempp.score()); +//// String printout = results.entrySet().stream(). +//// map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n")); +//// System.out.println(printout); +// +//// System.out.println("\n\n\n\n"); +// } catch (Exception e) { +// System.out.println(e.getMessage()); +// System.out.println(e); +// e.printStackTrace(); +// } +// +// return null; +// } +// +// private static Result getResult(int score) { +// String aa; +// aa = (score > 0) ? "SUCCESS" : "FAILURE"; +// return new Result() { +// @Override +// public int score() { +// return score; +// } +// +// @Override +// public Status status() { +//// return null; +// return Status.valueOf(aa); +// } +// +// @Override +// public Iterable warnings() { return null; } +// +// @Override +// public Iterable errors() { +// return null; +// } +// +// @Override +// public String internalError() { +// return null; +// } +// }; +// } +//} + +class F2_01M_SPEC_LIT extends AbstractGuideline { + + private static final Logger logger = LoggerFactory.getLogger(F2_01M_SPEC.class); + + public F2_01M_SPEC_LIT() { + super("Rich metadata is provided to allow discovery", 2*6); + } + + @Override + public Result validate(String id, Document t) { + F2_01M_LIT profile = new F2_01M_LIT(); + + // TODO: iterate over results and build one Guideline.Result + try { + XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t); + Map results = res_F.results(); + +// Get actual score and not (%) to incorporate to FAIR score + final int MaxScoreF2_01M_LIT_SPEC = (int) ((res_F.score()*getWeight())/100); + + logger.debug("Max score DataValidator(%): " + res_F.score()); + logger.debug("Weight FAIRG: " + getWeight()); + logger.debug("Max score F2_01M_SPEC: " + MaxScoreF2_01M_LIT_SPEC); + + List warnings2 = new ArrayList<>(); + List errors2 = new ArrayList<>(); + int score = 0; + for (Map.Entry entry : results.entrySet()) { + String key = entry.getKey(); + String warningsStr = results.get(key).warnings().toString(); + String errorsStr = results.get(key).errors().toString(); + if ( warningsStr.length() > 2 ) { + warnings2.add(warningsStr); + } + if ( errorsStr.length() > 2 ) { + errors2.add(errorsStr); + } + if (entry.getValue().toString().contains("SUCCESS")) { + score += 2; + } + if ( logger.isTraceEnabled() ) { + logger.trace(String.valueOf(results.get(key).warnings().getClass())); + logger.trace(String.valueOf(warnings2.getClass())); + } + } + + + final Result ress = getResult(warnings2, errors2, score); + + return new StandardResult(ress.score(), ress.status(), (List) ress.warnings(), (List) ress.errors(), ress.internalError()); + + } catch (Exception e) { + logger.error("", e); + return null; + } + } + + + private static Result getResult(List warnings2, List errors2, int score) { + + return new Result() { + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return Status.valueOf((score > 0) ? "SUCCESS" : "FAILURE"); + } + + @Override + public Iterable warnings() { + return warnings2; + } + + @Override + public Iterable errors() { + return errors2; + } + + @Override + public String internalError() { + return null; + } + }; + } +} + +class F3_01M_SPEC_LIT extends AbstractGuideline { + + private static final Logger logger = LoggerFactory.getLogger(F3_01M_SPEC.class); + + + public F3_01M_SPEC_LIT() { super("Metadata includes the identifier for the data", 2*2); } + + @Override + public Result validate(String id, Document t) { + F3_01M_LIT profile = new F3_01M_LIT(); + + // TODO: iterate over results and build one Guideline.Result + try { +// System.out.println("\nMetadata includes the identifier for the data"); + XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t); + Map results = res_F.results(); +// int MaxScoreF3_01M_LIT_SPEC = (int) ((res_F.score()*getWeight())/100); + + int MaxScoreF3_01M_LIT_SPEC; + if ((int) res_F.score() == 50 ) { + MaxScoreF3_01M_LIT_SPEC = (int) (((2*res_F.score())*getWeight())/100); + } + else { + MaxScoreF3_01M_LIT_SPEC = (int) ((res_F.score()*getWeight())/100); + } + + ArrayList warnings2 = new ArrayList<>(); + ArrayList errors2 = new ArrayList<>(); + for (Map.Entry entry : results.entrySet()) { + String key = entry.getKey(); + String warningsStr = results.get(key).warnings().toString(); + String errorsStr = results.get(key).errors().toString(); + if ( warningsStr.length() > 2 ) { + warnings2.add(warningsStr); + } + if ( errorsStr.length() > 2 ) { + errors2.add(errorsStr); + } + } + + final Result ress = getResult(warnings2, errors2, MaxScoreF3_01M_LIT_SPEC); + + return new StandardResult(ress.score(), ress.status(), (List) ress.warnings(), (List) ress.errors(), ress.internalError()); + + } catch (Exception e) { + logger.error("", e); + return null; + } + } + private static Result getResult(ArrayList warnings2, ArrayList errors2, int score) { + + return new Result() { + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return Status.valueOf((score > 0) ? "SUCCESS" : "FAILURE"); + } + + @Override + public Iterable warnings() { + return warnings2; + } + + @Override + public Iterable errors() { + return errors2; + } + + @Override + public String internalError() { + return null; + } + }; + } +} + +class I2_01M_SPEC_LIT extends AbstractGuideline { + + private static final Logger logger = LoggerFactory.getLogger(I2_01M_SPEC_LIT.class); + + public I2_01M_SPEC_LIT() { super("Metadata uses FAIR-compliant vocabularies", 5*2); } + + @Override + public Result validate(String id, Document t) { + I2_01M_LIT profile = new I2_01M_LIT(); + + // TODO: iterate over results and build one Guideline.Result + try { + logger.debug("Metadata uses FAIR-compliant vocabularies"); + XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t); + Map results = res_F.results(); +// int MaxScoreI2_01M_SPEC = (int) ((res_F.score()*getWeight())/100); + + int MaxScoreI2_01M_LIT_SPEC; + if ((int) res_F.score() == 50 ) { + MaxScoreI2_01M_LIT_SPEC = (int) (((2*res_F.score())*getWeight())/100); + } + else { + MaxScoreI2_01M_LIT_SPEC = (int) ((res_F.score()*getWeight())/100); + } + + ArrayList warnings2 = new ArrayList<>(); + ArrayList errors2 = new ArrayList<>(); + for (Map.Entry entry : results.entrySet()) { + String key = entry.getKey(); + String warningsStr = results.get(key).warnings().toString(); + String errorsStr = results.get(key).errors().toString(); + if ( warningsStr.length() > 2 ) { + warnings2.add(warningsStr); + } + if ( errorsStr.length() > 2 ) { + errors2.add(errorsStr); + } + } + + final Result ress = getResult(warnings2, errors2, MaxScoreI2_01M_LIT_SPEC); + + return new StandardResult(ress.score(), ress.status(), (List) ress.warnings(), (List) ress.errors(), ress.internalError()); + + } catch (Exception e) { + logger.error("", e); + } + return null; + } + + private static Result getResult(ArrayList warnings2, ArrayList errors2, int score) { + + return new Result() { + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return Status.valueOf((score > 0) ? "SUCCESS" : "FAILURE"); + } + + @Override + public Iterable warnings() { + return warnings2; + } + + @Override + public Iterable errors() { + return errors2; + } + + @Override + public String internalError() { + return null; + } + }; + } +} + +class R1_01M_SPEC_LIT extends AbstractGuideline { + + private static final Logger logger = LoggerFactory.getLogger(R1_01M_SPEC_LIT.class); + + + public R1_01M_SPEC_LIT() { super("Plurality of accurate and relevant attributes are provided to allow reuse", 3*4); } + + @Override + public Result validate(String id, Document t) { + R1_01M_LIT profile = new R1_01M_LIT(); + + // TODO: iterate over results and build one Guideline.Result + try { +// System.out.println("\nPlurality of accurate and relevant attributes are provided to allow reuse"); + XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t); + Map results = res_F.results(); + int MaxScoreR1_01M_SPEC = (int) ((res_F.score()*getWeight())/100); + + ArrayList warnings2 = new ArrayList<>(); + ArrayList errors2 = new ArrayList<>(); + int score = 0; + for (Map.Entry entry : results.entrySet()) { + String key = entry.getKey(); + String warningsStr = results.get(key).warnings().toString(); + String errorsStr = results.get(key).errors().toString(); + if ( warningsStr.length() > 2 ) { + warnings2.add(warningsStr); + } + if ( errorsStr.length() > 2 ) { + errors2.add(errorsStr); + } + if (entry.getValue().toString().contains("SUCCESS")) { + score += 3; + } + } + + final Result ress = getResult(warnings2, errors2, score); + + return new StandardResult(ress.score(), ress.status(), (List) ress.warnings(), (List) ress.errors(), ress.internalError()); + + } catch (Exception e) { + logger.error("", e); + } + return null; + } + + private static Result getResult(ArrayList warnings2, ArrayList errors2, int score) { + + return new Result() { + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return Status.valueOf((score > 0) ? "SUCCESS" : "FAILURE"); + } + + @Override + public Iterable warnings() { + return warnings2; + } + + @Override + public Iterable errors() { + return errors2; + } + + @Override + public String internalError() { + return null; + } + }; + } +} + +class R1_2_01M_SPEC_LIT extends AbstractGuideline { + + private static final Logger logger = LoggerFactory.getLogger(R1_2_01M_SPEC_LIT.class); + + + public R1_2_01M_SPEC_LIT() { super("Metadata includes provenance information according to a cross-community language", 2*5); } + + @Override + public Result validate(String id, Document t) { + R1_2_01M_LIT profile = new R1_2_01M_LIT(); + + // TODO: iterate over results and build one Guideline.Result + try { +// System.out.println("\nMetadata includes provenance information according to a cross-community language"); + XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t); + Map results = res_F.results(); + int MaxScoreR1_2_01M_SPEC = (int) ((res_F.score()*getWeight())/100); + + ArrayList warnings2 = new ArrayList<>(); + ArrayList errors2 = new ArrayList<>(); + int score = 0; + for (Map.Entry entry : results.entrySet()) { + String key = entry.getKey(); + String warningsStr = results.get(key).warnings().toString(); + String errorsStr = results.get(key).errors().toString(); + if ( warningsStr.length() > 2 ) { + warnings2.add(warningsStr); + } + if ( errorsStr.length() > 2 ) { + errors2.add(errorsStr); + } + if (entry.getValue().toString().contains("SUCCESS")) { + score += 3; + } + } + + final Result ress = getResult(warnings2, errors2, score); + + return new StandardResult(ress.score(), ress.status(), (List) ress.warnings(), (List) ress.errors(), ress.internalError()); + + } catch (Exception e) { + logger.error("", e); + } + return null; + } + + private static Result getResult(ArrayList warnings2, ArrayList errors2, int score) { + + return new Result() { + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return Status.valueOf((score > 0) ? "SUCCESS" : "FAILURE"); + } + + @Override + public Iterable warnings() { + return warnings2; + } + + @Override + public Iterable errors() { + return errors2; + } + + @Override + public String internalError() { + return null; + } + }; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/I2_01M_LIT.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/I2_01M_LIT.java new file mode 100644 index 0000000..07bf4aa --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/I2_01M_LIT.java @@ -0,0 +1,67 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.validation.guideline.*; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; + +public final class I2_01M_LIT extends AbstractOpenAireProfile { + + private static final ElementSpec I2_01M_LIT_SPEC_1 = Builders. + forMandatoryElement("datacite:subject", ONE_TO_N). + withOptionalAttribute("subjectScheme"). + withOptionalAttribute("schemeURI"). + withOptionalAttribute("valueURI"). + build(); + + private static final ElementSpec I2_01M_LIT_SPEC_2 = Builders. +// forMandatoryElement("rights", ONE_TO_N). +// withMandatoryAttribute("rightsURI"). +// build(); + forMandatoryIfApplicableElement("datacite:rights", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("rights")). + atPosition(ElementPosition.FIRST). + withMandatoryAttribute("uri"). + build(); + + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static SyntheticGuideline I2_01M_LIT_1 = SyntheticGuideline.of("Subject", 5, I2_01M_LIT_SPEC_1); + public static SyntheticGuideline I2_01M_LIT_2 = SyntheticGuideline.of("Rights", 5, I2_01M_LIT_SPEC_2); + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + I2_01M_LIT_1, + I2_01M_LIT_2 + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public I2_01M_LIT() { + super("Metadata uses FAIR-compliant vocabularies"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { return MAX_SCORE; } +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M.java index a1c80ef..942f0a0 100644 --- a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M.java +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M.java @@ -19,9 +19,44 @@ public final class R1_01M extends AbstractOpenAireProfile { "Model", "PhysicalObject", "Service", "Software", "Sound", "Text", "Workflow", "Other" }; + private static final String[] RESOURCE_CONCEPT_URIS = { + "http://purl.org/coar/resource_type/c_1162", "http://purl.org/coar/resource_type/c_6501", + "http://purl.org/coar/resource_type/c_545b", "http://purl.org/coar/resource_type/c_b239", + "http://purl.org/coar/resource_type/c_2df8fbb1", "http://purl.org/coar/resource_type/c_dcae04bc", + "http://purl.org/coar/resource_type/c_beb9", "http://purl.org/coar/resource_type/c_3e5a", + "http://purl.org/coar/resource_type/c_ba08", "http://purl.org/coar/resource_type/c_3248", + "http://purl.org/coar/resource_type/c_2f33", "http://purl.org/coar/resource_type/c_86bc", + "http://purl.org/coar/resource_type/c_816b", "http://purl.org/coar/resource_type/c_8042", + "http://purl.org/coar/resource_type/c_71bd", "http://purl.org/coar/resource_type/c_18gh", + "http://purl.org/coar/resource_type/c_18ws", "http://purl.org/coar/resource_type/c_18hj", + "http://purl.org/coar/resource_type/c_18op", "http://purl.org/coar/resource_type/c_186u", + "http://purl.org/coar/resource_type/c_18wq", "http://purl.org/coar/resource_type/c_18wz", + "http://purl.org/coar/resource_type/c_18ww", "http://purl.org/coar/resource_type/c_efa0", + "http://purl.org/coar/resource_type/c_baaf", "http://purl.org/coar/resource_type/c_ba1f", + "http://purl.org/coar/resource_type/c_93fc", "http://purl.org/coar/resource_type/c_15cd", + "http://purl.org/coar/resource_type/c_18co", "http://purl.org/coar/resource_type/c_18cp", + "http://purl.org/coar/resource_type/c_6670", "http://purl.org/coar/resource_type/c_5794", + "http://purl.org/coar/resource_type/c_c94f", "http://purl.org/coar/resource_type/c_f744", + "http://purl.org/coar/resource_type/c_7a1f", "http://purl.org/coar/resource_type/c_bdcc", + "http://purl.org/coar/resource_type/c_db06", "http://purl.org/coar/resource_type/c_46ec", + "http://purl.org/coar/resource_type/c_0857", "http://purl.org/coar/resource_type/c_8544", + "http://purl.org/coar/resource_type/c_18cf", "http://purl.org/coar/resource_type/c_18cw", + "http://purl.org/coar/resource_type/c_18cd", "http://purl.org/coar/resource_type/c_18cc", + "http://purl.org/coar/resource_type/c_12ce", "http://purl.org/coar/resource_type/c_8a7e", + "http://purl.org/coar/resource_type/c_ecc8", "http://purl.org/coar/resource_type/c_c513", + "http://purl.org/coar/resource_type/c_12cd", "http://purl.org/coar/resource_type/c_12cc", + "http://purl.org/coar/resource_type/c_5ce6", "http://purl.org/coar/resource_type/c_ddb1", + "http://purl.org/coar/resource_type/c_e9a0", "http://purl.org/coar/resource_type/c_7ad9", + "http://purl.org/coar/resource_type/c_393c", "http://purl.org/coar/resource_type/c_1843" + }; + + private static final String[] RESOURCE_GENERAL_TYPES = { + "literature", "dataset", "software", "other research product" + }; private static final ElementSpec R1_01M_SPEC_1 = Builders. forMandatoryElement("resourceType", ONE). - withMandatoryAttribute("resourceTypeGeneral", RELATED_RESOURCE_GENERAL_TYPES). + withMandatoryAttribute("resourceTypeGeneral", RESOURCE_GENERAL_TYPES). + withMandatoryAttribute("uri", RESOURCE_CONCEPT_URIS). build(); private static final ElementSpec R1_01M_SPEC_2 = Builders. diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M_LIT.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M_LIT.java new file mode 100644 index 0000000..262da75 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_01M_LIT.java @@ -0,0 +1,125 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.SyntheticGuideline; +import eu.dnetlib.validator2.validation.utils.MediaTypesValuePredicate; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_BCP47_LANG_TAGS_REG_EX; + +public final class R1_01M_LIT extends AbstractOpenAireProfile { + + private static final String[] RELATED_RESOURCE_GENERAL_TYPES = { + "Audiovisual", "Collection", "DataPaper", "Dataset", "Event", "Image", "InteractiveResource", + "Model", "PhysicalObject", "Service", "Software", "Sound", "Text", "Workflow", "Other" + }; + + private static final String[] RESOURCE_CONCEPT_URIS = { + "http://purl.org/coar/resource_type/c_1162", "http://purl.org/coar/resource_type/c_6501", + "http://purl.org/coar/resource_type/c_545b", "http://purl.org/coar/resource_type/c_b239", + "http://purl.org/coar/resource_type/c_2df8fbb1", "http://purl.org/coar/resource_type/c_dcae04bc", + "http://purl.org/coar/resource_type/c_beb9", "http://purl.org/coar/resource_type/c_3e5a", + "http://purl.org/coar/resource_type/c_ba08", "http://purl.org/coar/resource_type/c_3248", + "http://purl.org/coar/resource_type/c_2f33", "http://purl.org/coar/resource_type/c_86bc", + "http://purl.org/coar/resource_type/c_816b", "http://purl.org/coar/resource_type/c_8042", + "http://purl.org/coar/resource_type/c_71bd", "http://purl.org/coar/resource_type/c_18gh", + "http://purl.org/coar/resource_type/c_18ws", "http://purl.org/coar/resource_type/c_18hj", + "http://purl.org/coar/resource_type/c_18op", "http://purl.org/coar/resource_type/c_186u", + "http://purl.org/coar/resource_type/c_18wq", "http://purl.org/coar/resource_type/c_18wz", + "http://purl.org/coar/resource_type/c_18ww", "http://purl.org/coar/resource_type/c_efa0", + "http://purl.org/coar/resource_type/c_baaf", "http://purl.org/coar/resource_type/c_ba1f", + "http://purl.org/coar/resource_type/c_93fc", "http://purl.org/coar/resource_type/c_15cd", + "http://purl.org/coar/resource_type/c_18co", "http://purl.org/coar/resource_type/c_18cp", + "http://purl.org/coar/resource_type/c_6670", "http://purl.org/coar/resource_type/c_5794", + "http://purl.org/coar/resource_type/c_c94f", "http://purl.org/coar/resource_type/c_f744", + "http://purl.org/coar/resource_type/c_7a1f", "http://purl.org/coar/resource_type/c_bdcc", + "http://purl.org/coar/resource_type/c_db06", "http://purl.org/coar/resource_type/c_46ec", + "http://purl.org/coar/resource_type/c_0857", "http://purl.org/coar/resource_type/c_8544", + "http://purl.org/coar/resource_type/c_18cf", "http://purl.org/coar/resource_type/c_18cw", + "http://purl.org/coar/resource_type/c_18cd", "http://purl.org/coar/resource_type/c_18cc", + "http://purl.org/coar/resource_type/c_12ce", "http://purl.org/coar/resource_type/c_8a7e", + "http://purl.org/coar/resource_type/c_ecc8", "http://purl.org/coar/resource_type/c_c513", + "http://purl.org/coar/resource_type/c_12cd", "http://purl.org/coar/resource_type/c_12cc", + "http://purl.org/coar/resource_type/c_5ce6", "http://purl.org/coar/resource_type/c_ddb1", + "http://purl.org/coar/resource_type/c_e9a0", "http://purl.org/coar/resource_type/c_7ad9", + "http://purl.org/coar/resource_type/c_393c", "http://purl.org/coar/resource_type/c_1843" + }; + + private static final String[] RESOURCE_GENERAL_TYPES = { + "literature", "dataset", "software", "other research product" + }; + + private static final ElementSpec R1_01M_LIT_SPEC_1 = Builders. + forMandatoryElement("oaire:resourceType", ONE). + withMandatoryAttribute("resourceTypeGeneral", RESOURCE_GENERAL_TYPES). + withMandatoryAttribute("uri", RESOURCE_CONCEPT_URIS). + build(); + + private static final ElementSpec R1_01M_LIT_SPEC_2 = Builders. + forMandatoryElement("format", ONE). + allowedValues(new MediaTypesValuePredicate()). + build(); + +// Method for data Not applicable in Literature +// private static final ElementSpec R1_01M_LIT_SPEC_3 = Builders. // With very low weight +// forMandatoryElement("dc:description", ONE_TO_N). +// withOptionalAttribute("xml:lang", new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)). +// build(); + + private static final ElementSpec R1_01M_LIT_SPEC_4 = Builders. // With very low weight + forMandatoryElement("size", ONE_TO_N). + build(); + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static SyntheticGuideline R1_01M_LIT_1 = SyntheticGuideline.of("ResourceType", 3, R1_01M_LIT_SPEC_1); + public static SyntheticGuideline R1_01M_LIT_2 = SyntheticGuideline.of("Format", 3, R1_01M_LIT_SPEC_2); +// public static SyntheticGuideline R1_01M_LIT_3 = SyntheticGuideline.of("Description", 3, R1_01M_SPEC_3); + public static SyntheticGuideline R1_01M_LIT_4 = SyntheticGuideline.of("Size", 3, R1_01M_LIT_SPEC_4); + + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + R1_01M_LIT_1, + R1_01M_LIT_2, +// R1_01M_LIT_3, + R1_01M_LIT_4 + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public R1_01M_LIT() { + super("Plurality of accurate and relevant attributes are provided to allow reuse"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_2_01M_LIT.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_2_01M_LIT.java new file mode 100644 index 0000000..7d0c63f --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/R1_2_01M_LIT.java @@ -0,0 +1,187 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.builtins.XMLVocabularyRule; +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.SyntheticGuideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.*; +import java.util.stream.Collectors; + +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE; +import static eu.dnetlib.validator2.validation.guideline.Cardinality.ONE_TO_N; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public final class R1_2_01M_LIT extends AbstractOpenAireProfile { + + private static final String[] NAME_IDENTIFIER_SCHEMES = { + "ORCID", "ISNI", "ROR", "GRID" + }; + + private static final String[] CONTRIBUTOR_TYPES = { + "ContactPerson", "DataCollector", "DataCurator", "DataManager", "Distributor", + "Editor", "HostingInstitution", "Producer", "ProjectLeader", "ProjectManager", "ProjectMember", + "RegistrationAgency", "RegistrationAuthority", "RelatedPerson", "Researcher", "ResearchGroup", + "RightsHolder", "Sponsor", "Supervisor", "WorkPackageLeader", "Other" + }; + + private static final String[] PUBLICATION_DATE_TYPE = { + "Issued" + }; + + private static final String[] CONTRIBUTOR_NAME_IDENTIFIER_TYPES = { + "Funder", "FundingProgramme", "ProjectID", "Jurisdiction", "ProjectName", "ProjectAcronym" + }; + + private static final String[] IDENTIFIER_TYPES = { + "ARK", "arXiv", "bibcode", "DOI", "EAN13", "EISSN", "Handle", "IGSN", "ISBN", + "ISSN", "ISTC", "LISSN", "LSID", "PISSN", "PMID", "PURL", "UPC", "URL", "URN", "WOS", + }; + + private static final String[] RELATION_TYPES_LIMITED = { + "IsSupplementTo", "Describes", "IsMetadataFor", "IsPartOf" + }; + + private static final String[] NAME_TYPES = { + "Organizational", "Personal" + }; + + private static final String[] RESOURCE_VERSION_URIS = { + "http://purl.org/coar/version/c_b1a7d7d4d402bcce", "http://purl.org/coar/version/c_71e4c1898caa6e32", + "http://purl.org/coar/version/c_ab4af688f83e57aa", "http://purl.org/coar/version/c_fa2ee174bc00049f", + "http://purl.org/coar/version/c_970fb48d4fbd8a85", "http://purl.org/coar/version/c_e19f295774971610", + "http://purl.org/coar/version/c_dc82b40f9837b551", "http://purl.org/coar/version/c_be7fb7dd8ff6fe43" + }; + private static final String[] RELATION_TYPES = { + "IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", + "Continues", "IsDescribedBy", "Describes", "HasMetadata", "IsMetadataFor", "HasVersion", + "IsVersionOf", "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsReferencedBy", + "References", "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", + "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf", + "IsRequiredBy", "Requires" + }; + private static final String[] RESOURCE_VERSION_LABELS = { + "AO", "SMUR", "AM", "P", "VoR", "CVoR", "EVoR", "NA" + }; + private static final String[] RELATED_RESOURCE_GENERAL_TYPES = { + "Audiovisual", "Collection", "DataPaper", "Dataset", "Event", "Image", "InteractiveResource", + "Model", "PhysicalObject", "Service", "Software", "Sound", "Text", "Workflow", "Other" + }; + + private static final ElementSpec R1_2_01M_LIT_SPEC_1 = Builders. + forMandatoryElement("datacite:creator", ONE_TO_N). + withSubElement(Builders. + forMandatoryElement("datacite:creatorName", ONE). + withRecommendedAttribute("nameType", NAME_TYPES)). + withSubElement(Builders. + forRecommendedElement("datacite:givenName")). + withSubElement(Builders. + forRecommendedElement("datacite:familyName")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:nameIdentifier"). + withMandatoryAttribute("nameIdentifierScheme"). + withRecommendedAttribute("schemeURI")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:affiliation")). + build(); + + private static final ElementSpec R1_2_01M_LIT_SPEC_2 = Builders. + forMandatoryElement("datacite:contributor", ONE_TO_N). + withMandatoryAttribute("contributorType", CONTRIBUTOR_TYPES). + withSubElement(Builders. + forMandatoryElement("datacite:contributorName", ONE). + withRecommendedAttribute("nameType", NAME_TYPES)). + withSubElement(Builders. + forOptionalElement("datacite:familyName")). + withSubElement(Builders. + forOptionalElement("datacite:givenName")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:nameIdentifier"). + withMandatoryAttribute("nameIdentifierScheme"). + withRecommendedAttribute("schemeURI")). + withSubElement(Builders. + forRecommendedRepeatableElement("datacite:affiliation")). + build(); + + + private static final ElementSpec R1_2_01M_LIT_SPEC_3 = Builders. + forMandatoryElement("datacite:date", ONE). + withMandatoryAttribute("dateType", PUBLICATION_DATE_TYPE). + allowedValues(new RegexValuePredicate(COMPILED_PUBLICATION_DATE_REG_EX).or(new RegexValuePredicate(COMPILED_YYYY_MM_DD_RANGE_REGEX).or(new RegexValuePredicate(COMPILED_YEAR_YYYY_REG_EX)))). + build(); + + private static final ElementSpec R1_2_01M_LIT_SPEC_4 = Builders. + forMandatoryElement("oaire:version", ONE). + withMandatoryIfApplicableAttribute("uri", applicabilityRuleForURIAttributeOfResourceVersion(), RESOURCE_VERSION_URIS). + build(); + + private static final ElementSpec R1_2_01M_LIT_SPEC_5 = Builders. + forMandatoryElement("relatedIdentifier", ONE_TO_N). + withMandatoryAttribute("relatedIdentifierType", IDENTIFIER_TYPES). + withMandatoryAttribute("relationType", RELATION_TYPES). + withOptionalAttribute("relatedMetadataScheme"). + withOptionalAttribute("schemeURI"). + withOptionalAttribute("schemeType"). + withOptionalAttribute("resourceTypeGeneral", RELATED_RESOURCE_GENERAL_TYPES). + build(); + + private static Rule applicabilityRuleForURIAttributeOfResourceVersion() { + return XMLVocabularyRule.builder(). + setId(ElementSpec.APPLICABILITY_RULE_ID). + setXPathExpression("//*[name()='oaire:version']/text()"). + setNodeListAction("1"). + setVocabularyTermsAndTermsType(String.join(", ", RESOURCE_VERSION_LABELS), "whitelist"). + build(); + } + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static SyntheticGuideline R1_2_01M_LIT_1 = SyntheticGuideline.of("Creator", 2, R1_2_01M_LIT_SPEC_1); + public static SyntheticGuideline R1_2_01M_LIT_2 = SyntheticGuideline.of("Contributor", 2, R1_2_01M_LIT_SPEC_2); + public static SyntheticGuideline R1_2_01M_LIT_3 = SyntheticGuideline.of("Date", 2, R1_2_01M_LIT_SPEC_3); + public static SyntheticGuideline R1_2_01M_LIT_4 = SyntheticGuideline.of("Version", 2, R1_2_01M_LIT_SPEC_4); + public static SyntheticGuideline R1_2_01M_LIT_5 = SyntheticGuideline.of("RelatedIdentifier", 2, R1_2_01M_LIT_SPEC_5); + + private static final List> GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + R1_2_01M_LIT_1, + R1_2_01M_LIT_2, + R1_2_01M_LIT_3, + R1_2_01M_LIT_4, + R1_2_01M_LIT_5 + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(Guideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(Guideline::getWeight).reduce(0, Integer::sum); + + public R1_2_01M_LIT() { + super("Metadata includes provenance information according to a cross-community language"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + /** + * + * @param guidelineName + * @return + */ + @Override + public Guideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} \ No newline at end of file diff --git a/src/main/resources/mediaTypes.csv b/src/main/resources/mediaTypes.csv index c295daa..08121ec 100644 --- a/src/main/resources/mediaTypes.csv +++ b/src/main/resources/mediaTypes.csv @@ -1,3 +1,1561 @@ +application/1d-interleaved-parityfec, +application/3gpdash-qoe-report+xml, +application/3gppHal+json, +application/3gppHalForms+json, +application/3gpp-ims+xml, +application/A2L, +application/ace+cbor, +application/ace+json, application/activemessage, +application/activity+json, +application/aif+cbor, +application/aif+json, +application/alto-cdni+json, +application/alto-cdnifilter+json, +application/alto-costmap+json, +application/alto-costmapfilter+json, +application/alto-directory+json, +application/alto-endpointprop+json, +application/alto-endpointpropparams+json, +application/alto-endpointcost+json, +application/alto-endpointcostparams+json, +application/alto-error+json, +application/alto-networkmapfilter+json, +application/alto-networkmap+json, +application/alto-propmap+json, +application/alto-propmapparams+json, +application/alto-updatestreamcontrol+json, +application/alto-updatestreamparams+json, +application/AML, application/andrew-inset, -application/applefile,application/atom+xml,application/atomicmail,application/atomcat+xml,application/atomsvc+xml,application/auth-policy+xml,application/batch-SMTP,application/beep+xml,application/cals-1840,application/ccxml+xml,application/cea-2018+xml,application/cellml+xml,application/cnrp+xml,application/commonground,application/conference-info+xml,application/cpl+xml,application/csta+xml,application/CSTAdata+xml,application/cybercash,application/davmount+xml,application/dca-rft,application/dec-dx,application/dialog-info+xml,application/dicom,application/dns,application/dvcs,application/ecmascript,application/EDI-Consent,application/EDIFACT,application/EDI-X12,application/emma+xml,application/epp+xml,application/eshop,application/example,application/fastinfoset,application/fastsoap,application/fits,application/font-tdpfr,application/H224,application/http,application/hyperstudio,application/ibe-key-request+xml,application/ibe-pkg-reply+xml,application/ibe-pp-data,application/iges,application/im-iscomposing+xml,application/index,application/index.cmd,application/index.obj,application/index.response,application/index.vnd,application/iotp,application/ipp,application/isup,application/javascript,application/json,application/kpml-request+xml,application/kpml-response+xml,application/lost+xml,application/mac-binhex40,application/macwriteii,application/marc,application/mathematica,application/mbms-associated-procedure-description+xml,application/mbms-deregister+xml,application/mbms-envelope+xml,application/mbms-msk-response+xml,application/mbms-msk+xml,application/mbms-protection-description+xml,application/mbms-reception-report+xml,application/mbms-register-response+xml,application/mbms-register+xml,application/mbms-user-service-description+xml,application/mbox,application/media_control+xml,application/mediaservercontrol+xml,application/mikey,application/moss-keys,application/moss-signature,application/mosskey-data,application/mosskey-request,application/mpeg4-generic,application/mpeg4-iod,application/mpeg4-iod-xmt,application/mp4,application/msword,application/mxf,application/nasdata,application/news-checkgroups,application/news-groupinfo,application/news-transmission,application/nss,application/ocsp-request,application/ocsp-response,application/octet-stream,application/oda,application/oebps-package+xml,application/ogg,application/parityfec,application/patch-ops-error+xml,application/pdf,application/pgp-encrypted,application/pgp-keys,application/pgp-signature,application/pidf+xml,application/pidf-diff+xml,application/pkcs10,application/pkcs7-mime,application/pkcs7-signature,application/pkix-cert,application/pkixcmp,application/pkix-crl,application/pkix-pkipath,application/pls+xml,application/poc-settings+xml,application/postscript,application/prs.alvestrand.titrax-sheet,application/prs.cww,application/prs.nprend,application/prs.plucker,application/rdf+xml,application/qsig,application/reginfo+xml,application/relax-ng-compact-syntax,application/remote-printing,application/resource-lists-diff+xml,application/resource-lists+xml,application/riscos,application/rlmi+xml,application/rls-services+xml,application/rtf,application/rtx,application/samlassertion+xml,application/samlmetadata+xml,application/sbml+xml,application/scvp-cv-request,application/scvp-cv-response,application/scvp-vp-request,application/scvp-vp-response,application/sdp,application/set-payment,application/set-payment-initiation,application/set-registration,application/set-registration-initiation,application/sgml,application/sgml-open-catalog,application/shf+xml,application/sieve,application/simple-filter+xml,application/simple-message-summary,application/simpleSymbolContainer,application/slate,application/smil,application/smil+xml,application/soap+fastinfoset,application/soap+xml,application/sparql-query,application/sparql-results+xml,application/spirits-event+xml,application/srgs,application/srgs+xml,application/ssml+xml,application/timestamp-query,application/timestamp-reply,application/tve-trigger,application/ulpfec,application/vemmi,application/vnd.3gpp.bsf+xml,application/vnd.3gpp.pic-bw-large,application/vnd.3gpp.pic-bw-small,application/vnd.3gpp.pic-bw-var,application/vnd.3gpp.sms,application/vnd.3gpp2.bcmcsinfo+xml,application/vnd.3gpp2.sms,application/vnd.3gpp2.tcap,application/vnd.3M.Post-it-Notes,application/vnd.accpac.simply.aso,application/vnd.accpac.simply.imp,application/vnd.acucobol,application/vnd.acucorp,application/vnd.adobe.xdp+xml,application/vnd.adobe.xfdf,application/vnd.aether.imp,application/vnd.airzip.filesecure.azf,application/vnd.airzip.filesecure.azs,application/vnd.americandynamics.acc,application/vnd.amiga.ami,application/vnd.anser-web-certificate-issue-initiation,application/vnd.antix.game-component,application/vnd.apple.installer+xml,application/vnd.arastra.swi,application/vnd.audiograph,application/vnd.autopackage,application/vnd.avistar+xml,application/vnd.blueice.multipass,application/vnd.bluetooth.ep.oob,application/vnd.bmi,application/vnd.businessobjects,application/vnd.cab-jscript,application/vnd.canon-cpdl,application/vnd.canon-lips,application/vnd.cendio.thinlinc.clientconf,application/vnd.chemdraw+xml,application/vnd.chipnuts.karaoke-mmd,application/vnd.cinderella,application/vnd.cirpack.isdn-ext,application/vnd.claymore,application/vnd.clonk.c4group,application/vnd.commerce-battelle,application/vnd.commonspace,application/vnd.cosmocaller,application/vnd.contact.cmsg,application/vnd.crick.clicker,application/vnd.crick.clicker.keyboard,application/vnd.crick.clicker.palette,application/vnd.crick.clicker.template,application/vnd.crick.clicker.wordbank,application/vnd.criticaltools.wbs+xml,application/vnd.ctc-posml,application/vnd.ctct.ws+xml,application/vnd.cups-pdf,application/vnd.cups-postscript,application/vnd.cups-ppd,application/vnd.cups-raster,application/vnd.cups-raw,application/vnd.curl,application/vnd.cybank,application/vnd.data-vision.rdz,application/vnd.denovo.fcselayout-link,application/vnd.dir-bi.plate-dl-nosuffix,application/vnd.dna,application/vnd.dolby.mobile.1,application/vnd.dolby.mobile.2,application/vnd.dpgraph,application/vnd.dreamfactory,application/vnd.dvb.esgcontainer,application/vnd.dvb.ipdcdftnotifaccess,application/vnd.dvb.ipdcesgaccess,application/vnd.dvb.ipdcroaming,application/vnd.dvb.iptv.alfec-base,application/vnd.dvb.iptv.alfec-enhancement,application/vnd.dvb.notif-aggregate-root+xml,application/vnd.dvb.notif-container+xml,application/vnd.dvb.notif-generic+xml,application/vnd.dvb.notif-ia-msglist+xml,application/vnd.dvb.notif-ia-registration-request+xml,application/vnd.dvb.notif-ia-registration-response+xml,application/vnd.dvb.notif-init+xml,application/vnd.dxr,application/vnd.dynageo,application/vnd.ecdis-update,application/vnd.ecowin.chart,application/vnd.ecowin.filerequest,application/vnd.ecowin.fileupdate,application/vnd.ecowin.series,application/vnd.ecowin.seriesrequest,application/vnd.ecowin.seriesupdate,application/vnd.emclient.accessrequest+xml,application/vnd.enliven,application/vnd.epson.esf,application/vnd.epson.msf,application/vnd.epson.quickanime,application/vnd.epson.salt,application/vnd.epson.ssf,application/vnd.ericsson.quickcall,application/vnd.eszigno3+xml,application/vnd.etsi.aoc+xml,application/vnd.etsi.cug+xml,application/vnd.etsi.iptvcommand+xml,application/vnd.etsi.iptvdiscovery+xml,application/vnd.etsi.iptvprofile+xml,application/vnd.etsi.iptvsad-bc+xml,application/vnd.etsi.iptvsad-cod+xml,application/vnd.etsi.iptvsad-npvr+xml,application/vnd.etsi.iptvueprofile+xml,application/vnd.etsi.mcid+xml,application/vnd.etsi.sci+xml,application/vnd.etsi.simservs+xml,application/vnd.eudora.data,application/vnd.ezpix-album,application/vnd.ezpix-package,application/vnd.f-secure.mobile,application/vnd.fdf,application/vnd.fdsn.mseed,application/vnd.fdsn.seed,application/vnd.ffsns,application/vnd.fints,application/vnd.FloGraphIt,application/vnd.fluxtime.clip,application/vnd.font-fontforge-sfd,application/vnd.framemaker,application/vnd.frogans.fnc,application/vnd.frogans.ltf,application/vnd.fsc.weblaunch,application/vnd.fujitsu.oasys,application/vnd.fujitsu.oasys2,application/vnd.fujitsu.oasys3,application/vnd.fujitsu.oasysgp,application/vnd.fujitsu.oasysprs,application/vnd.fujixerox.ART4,application/vnd.fujixerox.ART-EX,application/vnd.fujixerox.ddd,application/vnd.fujixerox.docuworks,application/vnd.fujixerox.docuworks.binder,application/vnd.fujixerox.HBPL,application/vnd.fut-misnet,application/vnd.fuzzysheet,application/vnd.genomatix.tuxedo,application/vnd.geogebra.file,application/vnd.geogebra.tool,application/vnd.geometry-explorer,application/vnd.gmx,application/vnd.google-earth.kml+xml,application/vnd.google-earth.kmz,application/vnd.grafeq,application/vnd.gridmp,application/vnd.groove-account,application/vnd.groove-help,application/vnd.groove-identity-message,application/vnd.groove-injector,application/vnd.groove-tool-message,application/vnd.groove-tool-template,application/vnd.groove-vcard,application/vnd.HandHeld-Entertainment+xml,application/vnd.hbci,application/vnd.hcl-bireports,application/vnd.hhe.lesson-player,application/vnd.hp-HPGL,application/vnd.hp-hpid,application/vnd.hp-hps,application/vnd.hp-jlyt,application/vnd.hp-PCL,application/vnd.hp-PCLXL,application/vnd.httphone,application/vnd.hydrostatix.sof-data,application/vnd.hzn-3d-crossword,application/vnd.ibm.afplinedata,application/vnd.ibm.electronic-media,application/vnd.ibm.MiniPay,application/vnd.ibm.modcap,application/vnd.ibm.rights-management,application/vnd.ibm.secure-container,application/vnd.iccprofile,application/vnd.igloader,application/vnd.immervision-ivp,application/vnd.immervision-ivu,application/vnd.informedcontrol.rms+xml,application/vnd.informix-visionary,application/vnd.intercon.formnet,application/vnd.intertrust.digibox,application/vnd.intertrust.nncp,application/vnd.intu.qbo,application/vnd.intu.qfx,application/vnd.iptc.g2.conceptitem+xml,application/vnd.iptc.g2.knowledgeitem+xml,application/vnd.iptc.g2.newsitem+xml,application/vnd.iptc.g2.packageitem+xml,application/vnd.ipunplugged.rcprofile,application/vnd.irepository.package+xml,application/vnd.is-xpr,application/vnd.jam,application/vnd.japannet-directory-service,application/vnd.japannet-jpnstore-wakeup,application/vnd.japannet-payment-wakeup,application/vnd.japannet-registration,application/vnd.japannet-registration-wakeup,application/vnd.japannet-setstore-wakeup,application/vnd.japannet-verification,application/vnd.japannet-verification-wakeup,application/vnd.jcp.javame.midlet-rms,application/vnd.jisp,application/vnd.joost.joda-archive,application/vnd.kahootz,application/vnd.kde.karbon,application/vnd.kde.kchart,application/vnd.kde.kformula,application/vnd.kde.kivio,application/vnd.kde.kontour,application/vnd.kde.kpresenter,application/vnd.kde.kspread,application/vnd.kde.kword,application/vnd.kenameaapp,application/vnd.kidspiration,application/vnd.Kinar,application/vnd.koan,application/vnd.kodak-descriptor,application/vnd.liberty-request+xml,application/vnd.llamagraphics.life-balance.desktop,application/vnd.llamagraphics.life-balance.exchange+xml,application/vnd.lotus-1-2-3,application/vnd.lotus-approach,application/vnd.lotus-freelance,application/vnd.lotus-notes,application/vnd.lotus-organizer,application/vnd.lotus-screencam,application/vnd.lotus-wordpro,application/vnd.macports.portpkg,application/vnd.marlin.drm.actiontoken+xml,application/vnd.marlin.drm.conftoken+xml,application/vnd.marlin.drm.license+xml,application/vnd.marlin.drm.mdcf,application/vnd.mcd,application/vnd.medcalcdata,application/vnd.mediastation.cdkey,application/vnd.meridian-slingshot,application/vnd.MFER,application/vnd.mfmp,application/vnd.micrografx.flo,application/vnd.micrografx.igx,application/vnd.mif,application/vnd.minisoft-hp3000-save,application/vnd.mitsubishi.misty-guard.trustweb,application/vnd.Mobius.DAF,application/vnd.Mobius.DIS,application/vnd.Mobius.MBK,application/vnd.Mobius.MQY,application/vnd.Mobius.MSL,application/vnd.Mobius.PLC,application/vnd.Mobius.TXF,application/vnd.mophun.application,application/vnd.mophun.certificate,application/vnd.motorola.flexsuite,application/vnd.motorola.flexsuite.adsi,application/vnd.motorola.flexsuite.fis,application/vnd.motorola.flexsuite.gotap,application/vnd.motorola.flexsuite.kmr,application/vnd.motorola.flexsuite.ttc,application/vnd.motorola.flexsuite.wem,application/vnd.motorola.iprm,application/vnd.mozilla.xul+xml,application/vnd.ms-artgalry,application/vnd.ms-asf,application/vnd.ms-cab-compressed,application/vnd.mseq,application/vnd.ms-excel,application/vnd.ms-fontobject,application/vnd.ms-htmlhelp,application/vnd.msign,application/vnd.ms-ims,application/vnd.ms-lrm,application/vnd.ms-playready.initiator+xml,application/vnd.ms-powerpoint,application/vnd.ms-project,application/vnd.ms-tnef,application/vnd.ms-wmdrm.lic-chlg-req,application/vnd.ms-wmdrm.lic-resp,application/vnd.ms-wmdrm.meter-chlg-req,application/vnd.ms-wmdrm.meter-resp,application/vnd.ms-works,application/vnd.ms-wpl,application/vnd.ms-xpsdocument,application/vnd.multiad.creator,application/vnd.multiad.creator.cif,application/vnd.musician,application/vnd.music-niff,application/vnd.muvee.style,application/vnd.ncd.control,application/vnd.ncd.reference,application/vnd.nervana,application/vnd.netfpx,application/vnd.neurolanguage.nlu,application/vnd.noblenet-directory,application/vnd.noblenet-sealer,application/vnd.noblenet-web,application/vnd.nokia.catalogs,application/vnd.nokia.conml+wbxml,application/vnd.nokia.conml+xml,application/vnd.nokia.iptv.config+xml,application/vnd.nokia.iSDS-radio-presets,application/vnd.nokia.landmark+wbxml,application/vnd.nokia.landmark+xml,application/vnd.nokia.landmarkcollection+xml,application/vnd.nokia.ncd,application/vnd.nokia.n-gage.ac+xml,application/vnd.nokia.n-gage.data,application/vnd.nokia.n-gage.symbian.install,application/vnd.nokia.pcd+wbxml,application/vnd.nokia.pcd+xml,application/vnd.nokia.radio-preset,application/vnd.nokia.radio-presets,application/vnd.novadigm.EDM,application/vnd.novadigm.EDX,application/vnd.novadigm.EXT,application/vnd.oasis.opendocument.chart,application/vnd.oasis.opendocument.chart-template,application/vnd.oasis.opendocument.database,application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.formula-template,application/vnd.oasis.opendocument.graphics,application/vnd.oasis.opendocument.graphics-template,application/vnd.oasis.opendocument.image,application/vnd.oasis.opendocument.image-template,application/vnd.oasis.opendocument.presentation,application/vnd.oasis.opendocument.presentation-template,application/vnd.oasis.opendocument.spreadsheet,application/vnd.oasis.opendocument.spreadsheet-template,application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.text-master,application/vnd.oasis.opendocument.text-template,application/vnd.oasis.opendocument.text-web,application/vnd.obn,application/vnd.olpc-sugar,application/vnd.oma.bcast.associated-procedure-parameter+xml,application/vnd.oma.bcast.drm-trigger+xml,application/vnd.oma.bcast.imd+xml,application/vnd.oma.bcast.ltkm,application/vnd.oma.bcast.notification+xml,application/vnd.oma.bcast.provisioningtrigger,application/vnd.oma.bcast.sgboot,application/vnd.oma.bcast.sgdd+xml,application/vnd.oma.bcast.sgdu,application/vnd.oma.bcast.simple-symbol-container,application/vnd.oma.bcast.smartcard-trigger+xml,application/vnd.oma.bcast.sprov+xml,application/vnd.oma.bcast.stkm,application/vnd.oma.dcd,application/vnd.oma.dcdc,application/vnd.oma.dd2+xml,application/vnd.oma.drm.risd+xml,application/vnd.oma.group-usage-list+xml,application/vnd.oma.poc.detailed-progress-report+xml,application/vnd.oma.poc.final-report+xml,application/vnd.oma.poc.groups+xml,application/vnd.oma.poc.invocation-descriptor+xml,application/vnd.oma.poc.optimized-progress-report+xml,application/vnd.oma.xcap-directory+xml,application/vnd.omads-email+xml,application/vnd.omads-file+xml,application/vnd.omads-folder+xml,application/vnd.omaloc-supl-init,application/vnd.oma-scws-config,application/vnd.oma-scws-http-request,application/vnd.oma-scws-http-response,application/vnd.openofficeorg.extension,application/vnd.osa.netdeploy,application/vnd.osgi.bundle,application/vnd.osgi.dp,application/vnd.otps.ct-kip+xml,application/vnd.palm,application/vnd.paos.xml,application/vnd.pg.format,application/vnd.pg.osasli,application/vnd.piaccess.application-licence,application/vnd.picsel,application/vnd.poc.group-advertisement+xml,application/vnd.pocketlearn,application/vnd.powerbuilder6,application/vnd.powerbuilder6-s,application/vnd.powerbuilder7,application/vnd.powerbuilder75,application/vnd.powerbuilder75-s,application/vnd.powerbuilder7-s,application/vnd.preminet,application/vnd.previewsystems.box,application/vnd.proteus.magazine,application/vnd.publishare-delta-tree,application/vnd.pvi.ptid1,application/vnd.pwg-multiplexed,application/vnd.pwg-xhtml-print+xml,application/vnd.qualcomm.brew-app-res,application/vnd.Quark.QuarkXPress,application/vnd.rapid,application/vnd.recordare.musicxml,application/vnd.recordare.musicxml+xml,application/vnd.RenLearn.rlprint,application/vnd.route66.link66+xml,application/vnd.ruckus.download,application/vnd.s3sms,application/vnd.sbm.cid,application/vnd.sbm.mid2,application/vnd.scribus,application/vnd.sealed.3df,application/vnd.sealed.csf,application/vnd.sealed.doc,application/vnd.sealed.eml,application/vnd.sealed.mht,application/vnd.sealed.net,application/vnd.sealed.ppt,application/vnd.sealed.tiff,application/vnd.sealed.xls,application/vnd.sealedmedia.softseal.html,application/vnd.sealedmedia.softseal.pdf,application/vnd.seemail,application/vnd.sema,application/vnd.semd,application/vnd.semf,application/vnd.shana.informed.formdata,application/vnd.shana.informed.formtemplate,application/vnd.shana.informed.interchange,application/vnd.shana.informed.package,application/vnd.SimTech-MindMapper,application/vnd.smaf,application/vnd.smart.teacher,application/vnd.software602.filler.form+xml,application/vnd.software602.filler.form-xml-zip,application/vnd.solent.sdkm+xml,application/vnd.spotfire.dxp,application/vnd.spotfire.sfs,application/vnd.sss-cod,application/vnd.sss-dtf,application/vnd.sss-ntf,application/vnd.street-stream,application/vnd.sun.wadl+xml,application/vnd.sus-calendar,application/vnd.svd,application/vnd.swiftview-ics,application/vnd.syncml.dm.notification,application/vnd.syncml.dm+wbxml,application/vnd.syncml.dm+xml,application/vnd.syncml.ds.notification,application/vnd.syncml+xml,application/vnd.tao.intent-module-archive,application/vnd.tmobile-livetv,application/vnd.trid.tpt,application/vnd.triscape.mxs,application/vnd.trueapp,application/vnd.truedoc,application/vnd.ufdl,application/vnd.uiq.theme,application/vnd.umajin,application/vnd.unity,application/vnd.uoml+xml,application/vnd.uplanet.alert,application/vnd.uplanet.alert-wbxml,application/vnd.uplanet.bearer-choice,application/vnd.uplanet.bearer-choice-wbxml,application/vnd.uplanet.cacheop,application/vnd.uplanet.cacheop-wbxml,application/vnd.uplanet.channel,application/vnd.uplanet.channel-wbxml,application/vnd.uplanet.list,application/vnd.uplanet.listcmd,application/vnd.uplanet.listcmd-wbxml,application/vnd.uplanet.list-wbxml,application/vnd.uplanet.signal,application/vnd.vcx,application/vnd.vd-study,application/vnd.vectorworks,application/vnd.vidsoft.vidconference,application/vnd.visio,application/vnd.visionary,application/vnd.vividence.scriptfile,application/vnd.vsf,application/vnd.wap.sic,application/vnd.wap.slc,application/vnd.wap.wbxml,application/vnd.wap.wmlc,application/vnd.wap.wmlscriptc,application/vnd.webturbo,application/vnd.wfa.wsc,application/vnd.wmc,application/vnd.wmf.bootstrap,application/vnd.wordperfect,application/vnd.wqd,application/vnd.wrq-hp3000-labelled,application/vnd.wt.stf,application/vnd.wv.csp+xml,application/vnd.wv.csp+wbxml,application/vnd.wv.ssp+xml,application/vnd.xara,application/vnd.xfdl,application/vnd.xfdl.webform,application/vnd.xmi+xml,application/vnd.xmpie.cpkg,application/vnd.xmpie.dpkg,application/vnd.xmpie.plan,application/vnd.xmpie.ppkg,application/vnd.xmpie.xlim,application/vnd.yamaha.hv-dic,application/vnd.yamaha.hv-script,application/vnd.yamaha.hv-voice,application/vnd.yamaha.openscoreformat.osfpvg+xml,application/vnd.yamaha.openscoreformat,application/vnd.yamaha.smaf-audio,application/vnd.yamaha.smaf-phrase,application/vnd.yellowriver-custom-menu,application/vnd.zul,application/vnd.zzazz.deck+xml,application/voicexml+xml,application/watcherinfo+xml,application/whoispp-query,application/whoispp-response,application/wita,application/wordperfect5.1,application/wsdl+xml,application/wspolicy+xml,application/x400-bp,application/xcap-att+xml,application/xcap-caps+xml,application/xcap-el+xml,application/xcap-error+xml,application/xcap-ns+xml,application/xcon-conference-info-diff+xml,application/xcon-conference-info+xml,application/xenc+xml,application/xhtml-voice+xml,application/xhtml+xml,application/xml,application/xml-dtd,application/xml-external-parsed-entity,application/xmpp+xml,application/xop+xml,application/xv+xml,application/zip,audio/32kadpcm,audio/3gpp,audio/3gpp2,audio/ac3,audio/AMR,audio/AMR-WB,audio/amr-wb+,audio/asc,audio/basic,audio/BV16,audio/BV32,audio/clearmode,audio/CN,audio/DAT12,audio/dls,audio/dsr-es201108,audio/dsr-es202050,audio/dsr-es202211,audio/dsr-es202212,audio/eac3,audio/DVI4,audio/EVRC,audio/EVRC0,audio/EVRC1,audio/EVRCB,audio/EVRCB0,audio/EVRCB1,audio/EVRC-QCP,audio/EVRCWB,audio/EVRCWB0,audio/EVRCWB1,audio/example,audio/G719,audio/G722,audio/G7221,audio/G723,audio/G726-16,audio/G726-24,audio/G726-32,audio/G726-40,audio/G728,audio/G729,audio/G7291,audio/G729D,audio/G729E,audio/GSM,audio/GSM-EFR,audio/iLBC,audio/L8,audio/L16,audio/L20,audio/L24,audio/LPC,audio/mobile-xmf,audio/MPA,audio/mp4,audio/MP4A-LATM,audio/mpa-robust,audio/mpeg,audio/mpeg4-generic,audio/ogg,audio/parityfec,audio/PCMA,audio/PCMA-WB,audio/PCMU,audio/PCMU-WB,audio/prs.sid,audio/QCELP,audio/RED,audio/rtp-enc-aescm128,audio/rtp-midi,audio/rtx,audio/SMV,audio/SMV0,audio/SMV-QCP,audio/sp-midi,audio/t140c,audio/t38,audio/telephone-event,audio/tone,audio/ulpfec,audio/VDVI,audio/VMR-WB,audio/vnd.3gpp.iufp,audio/vnd.4SB,audio/vnd.audiokoz,audio/vnd.CELP,audio/vnd.cisco.nse,audio/vnd.cmles.radio-events,audio/vnd.cns.anp1,audio/vnd.cns.inf1,audio/vnd.digital-winds,audio/vnd.dlna.adts,audio/vnd.dolby.heaac.1,audio/vnd.dolby.heaac.2,audio/vnd.dolby.mlp,audio/vnd.dolby.mps,audio/vnd.dolby.pl2,audio/vnd.dolby.pl2x,audio/vnd.dolby.pl2z,audio/vnd.dts,audio/vnd.dts.hd,audio/vnd.everad.plj,audio/vnd.hns.audio,audio/vnd.lucent.voice,audio/vnd.ms-playready.media.pya,audio/vnd.nokia.mobile-xmf,audio/vnd.nortel.vbk,audio/vnd.nuera.ecelp4800,audio/vnd.nuera.ecelp7470,audio/vnd.nuera.ecelp9600,audio/vnd.octel.sbc,audio/vnd.qcelp,audio/vnd.rhetorex.32kadpcm,audio/vnd.sealedmedia.softseal.mpeg,audio/vnd.vmx.cvsd,audio/vorbis,audio/vorbis-config,image/cgm,image/example,image/fits,image/g3fax,image/gif,image/ief,image/jp2,image/jpeg,image/jpm,image/jpx,image/naplps,image/png,image/prs.btif,image/prs.pti,image/t38,image/tiff,image/tiff-fx,image/vnd.adobe.photoshop,image/vnd.cns.inf2,image/vnd.djvu,image/vnd.dwg,image/vnd.dxf,image/vnd.fastbidsheet,image/vnd.fpx,image/vnd.fst,image/vnd.fujixerox.edmics-mmr,image/vnd.fujixerox.edmics-rlc,image/vnd.globalgraphics.pgb,image/vnd.microsoft.icon,image/vnd.mix,image/vnd.ms-modi,image/vnd.net-fpx,image/vnd.radiance,image/vnd.sealed.png,image/vnd.sealedmedia.softseal.gif,image/vnd.sealedmedia.softseal.jpg,image/vnd.svf,image/vnd.wap.wbmp,image/vnd.xiff,message/CPIM,message/delivery-status,message/disposition-notification,message/example,message/external-body,message/global,message/global-delivery-status,message/global-disposition-notification,message/global-headers,message/http,message/imdn+xml,message/news,message/partial,message/rfc822,message/s-http,message/sip,message/sipfrag,message/tracking-status,message/vnd.si.simp,model/example,model/iges,model/mesh,model/vnd.dwf,model/vnd.flatland.3dml,model/vnd.gdl,model/vnd.gs-gdl,model/vnd.gtw,model/vnd.moml+xml,model/vnd.mts,model/vnd.parasolid.transmit.binary,model/vnd.parasolid.transmit.text,model/vnd.vtu,model/vrml,multipart/alternative,multipart/appledouble,multipart/byteranges,multipart/digest,multipart/encrypted,multipart/example,multipart/form-data,multipart/header-set,multipart/mixed,multipart/parallel,multipart/related,multipart/report,multipart/signed,multipart/voice-message,text/calendar,text/css,text/csv,text/directory,text/dns,text/ecmascript,text/enriched,text/example,text/html,text/javascript,text/parityfec,text/plain,text/prs.fallenstein.rst,text/prs.lines.tag,text/RED,text/rfc822-headers,text/richtext,text/rtf,text/rtp-enc-aescm128,text/rtx,text/sgml,text/t140,text/tab-separated-values,text/troff,text/ulpfec,text/uri-list,text/vnd.abc,text/vnd.curl,text/vnd.DMClientScript,text/vnd.esmertec.theme-descriptor,text/vnd.fly,text/vnd.fmi.flexstor,text/vnd.graphviz,text/vnd.in3d.3dml,text/vnd.in3d.spot,text/vnd.IPTC.NewsML,text/vnd.IPTC.NITF,text/vnd.latex-z,text/vnd.motorola.reflex,text/vnd.ms-mediapackage,text/vnd.net2phone.commcenter.command,text/vnd.si.uricatalogue,text/vnd.sun.j2me.app-descriptor,text/vnd.trolltech.linguist,text/vnd.wap.si,text/vnd.wap.sl,text/vnd.wap.wml,text/vnd.wap.wmlscript,text/xml,text/xml-external-parsed-entity,video/3gpp2,video/3gpp-tt,video/BMPEG,video/BT656,video/CelB,video/DV,video/example,video/H261,video/H263,video/H263-1998,video/H263-2000,video/H264,video/JPEG,video/jpeg2000,video/MJ2,video/MP1S,video/MP2P,video/MP2T,video/mp4,video/MP4V-ES,video/MPV,video/mpeg,video/mpeg4-generic,video/nv,video/ogg,video/parityfec,video/pointer,video/quicktime,video/raw,video/rtp-enc-aescm128,video/rtx,video/SMPTE292M,video/ulpfec,video/vc1,video/vnd.CCTV,video/vnd.dlna.mpeg-tts,video/vnd.fvt,video/vnd.hns.video,video/vnd.iptvforum.1dparityfec-1010,video/vnd.iptvforum.1dparityfec-2005,video/vnd.iptvforum.2dparityfec-1010,video/vnd.iptvforum.2dparityfec-2005,video/vnd.iptvforum.ttsavc,video/vnd.iptvforum.ttsmpeg2,video/vnd.motorola.video,video/vnd.motorola.videop,video/vnd.mpegurl,video/vnd.ms-playready.media.pyv,video/vnd.nokia.interleaved-multimedia,video/vnd.nokia.videovoip,video/vnd.objectvideo,video/vnd.sealed.mpeg1,video/vnd.sealed.mpeg4,video/vnd.sealed.swf,video/vnd.sealedmedia.softseal.mov,video/vnd.vivo +application/applefile, +application/at+jwt, +application/ATF, +application/ATFX, +application/atom+xml, +application/atomcat+xml, +application/atomdeleted+xml, +application/atomicmail, +application/atomsvc+xml, +application/atsc-dwd+xml, +application/atsc-dynamic-event-message, +application/atsc-held+xml, +application/atsc-rdt+json, +application/atsc-rsat+xml, +application/ATXML, +application/auth-policy+xml, +application/automationml-aml+xml, +application/automationml-amlx+zip, +application/bacnet-xdd+zip, +application/batch-SMTP, +application/beep+xml, +application/c2pa, +application/calendar+json, +application/calendar+xml, +application/call-completion, +application/CALS-1840, +application/captive+json, +application/cbor, +application/cbor-seq, +application/cccex, +application/ccmp+xml, +application/ccxml+xml, +application/cda+xml, +application/CDFX+XML, +application/cdmi-capability, +application/cdmi-container, +application/cdmi-domain, +application/cdmi-object, +application/cdmi-queue, +application/cdni, +application/CEA, +application/cea-2018+xml, +application/cellml+xml, +application/cfw, +application/cid-edhoc+cbor-seq, +application/city+json, +application/clr, +application/clue_info+xml, +application/clue+xml, +application/cms, +application/cnrp+xml, +application/coap-group+json, +application/coap-payload, +application/commonground, +application/concise-problem-details+cbor, +application/conference-info+xml, +application/cpl+xml, +application/cose, +application/cose-key, +application/cose-key-set, +application/cose-x509, +application/csrattrs, +application/csta+xml, +application/CSTAdata+xml, +application/csvm+json, +application/cwl, +application/cwl+json, +application/cwt, +application/cybercash, +application/dash+xml, +application/dash-patch+xml, +application/dashdelta, +application/davmount+xml, +application/dca-rft, +application/DCD, +application/dec-dx, +application/dialog-info+xml, +application/dicom, +application/dicom+json, +application/dicom+xml, +application/DII, +application/DIT, +application/dns, +application/dns+json, +application/dns-message, +application/dots+cbor, +application/dpop+jwt, +application/dskpp+xml, +application/dssc+der, +application/dssc+xml, +application/dvcs, +application/ecmascript, +application/edhoc+cbor-seq, +application/EDI-consent, +application/EDIFACT, +application/EDI-X12, +application/efi, +application/elm+json, +application/elm+xml, +application/EmergencyCallData.cap+xml, +application/EmergencyCallData.Comment+xml, +application/EmergencyCallData.Control+xml, +application/EmergencyCallData.DeviceInfo+xml, +application/EmergencyCallData.eCall.MSD, +application/EmergencyCallData.LegacyESN+json, +application/EmergencyCallData.ProviderInfo+xml, +application/EmergencyCallData.ServiceInfo+xml, +application/EmergencyCallData.SubscriberInfo+xml, +application/EmergencyCallData.VEDS+xml, +application/emma+xml, +application/emotionml+xml, +application/encaprtp, +application/epp+xml, +application/epub+zip, +application/eshop, +application/example, +application/exi, +application/expect-ct-report+json, +application/express, +application/fastinfoset, +application/fastsoap, +application/fdf, +application/fdt+xml, +application/fhir+json, +application/fhir+xml, +application/fits, +application/flexfec, +application/font-sfnt, +application/font-tdpfr, +application/font-woff, +application/framework-attributes+xml, +application/geo+json, +application/geo+json-seq, +application/geopackage+sqlite3, +application/geoxacml+xml, +application/gltf-buffer, +application/gml+xml, +application/gzip, +application/H224, +application/held+xml, +application/hl7v2+xml, +application/http, +application/hyperstudio, +application/ibe-key-request+xml, +application/ibe-pkg-reply+xml, +application/ibe-pp-data, +application/iges, +application/im-iscomposing+xml, +application/index, +application/index.cmd, +application/index.obj, +application/index.response, +application/index.vnd, +application/inkml+xml, +application/IOTP, +application/ipfix, +application/ipp, +application/ISUP, +application/its+xml, +application/java-archive, +application/javascript, +application/jf2feed+json, +application/jose, +application/jose+json, +application/jrd+json, +application/jscalendar+json, +application/json, +application/json-patch+json, +application/json-seq, +application/jsonpath, +application/jwk+json, +application/jwk-set+json, +application/jwt, +application/kpml-request+xml, +application/kpml-response+xml, +application/ld+json, +application/lgr+xml, +application/link-format, +application/linkset, +application/linkset+json, +application/load-control+xml, +application/logout+jwt, +application/lost+xml, +application/lostsync+xml, +application/lpf+zip, +application/LXF, +application/mac-binhex40, +application/macwriteii, +application/mads+xml, +application/manifest+json, +application/marc, +application/marcxml+xml, +application/mathematica, +application/mathml+xml, +application/mathml-content+xml, +application/mathml-presentation+xml, +application/mbms-associated-procedure-description+xml, +application/mbms-deregister+xml, +application/mbms-envelope+xml, +application/mbms-msk-response+xml, +application/mbms-msk+xml, +application/mbms-protection-description+xml, +application/mbms-reception-report+xml, +application/mbms-register-response+xml, +application/mbms-register+xml, +application/mbms-schedule+xml, +application/mbms-user-service-description+xml, +application/mbox, +application/media_control+xml, +application/media-policy-dataset+xml, +application/mediaservercontrol+xml, +application/merge-patch+json, +application/metalink4+xml, +application/mets+xml, +application/MF4, +application/mikey, +application/mipc, +application/missing-blocks+cbor-seq, +application/mmt-aei+xml, +application/mmt-usd+xml, +application/mods+xml, +application/moss-keys, +application/moss-signature, +application/mosskey-data, +application/mosskey-request, +application/mp21, +application/mp4, +application/mpeg4-generic, +application/mpeg4-iod, +application/mpeg4-iod-xmt, +application/mrb-consumer+xml, +application/mrb-publish+xml, +application/msc-ivr+xml, +application/msc-mixer+xml, +application/msword, +application/mud+json, +application/multipart-core, +application/mxf, +application/n-quads, +application/n-triples, +application/nasdata, +application/news-checkgroups, +application/news-groupinfo, +application/news-transmission, +application/nlsml+xml, +application/node, +application/nss, +application/oauth-authz-req+jwt, +application/oblivious-dns-message, +application/ocsp-request, +application/ocsp-response, +application/octet-stream, +application/ODA, +application/odm+xml, +application/ODX, +application/oebps-package+xml, +application/ogg, +application/ohttp-keys, +application/opc-nodeset+xml, +application/oscore, +application/oxps, +application/p21, +application/p21+zip, +application/p2p-overlay+xml, +application/parityfec, +application/passport, +application/patch-ops-error+xml, +application/pdf, +application/PDX, +application/pem-certificate-chain, +application/pgp-encrypted, +application/pgp-keys, +application/pgp-signature, +application/pidf-diff+xml, +application/pidf+xml, +application/pkcs10, +application/pkcs7-mime, +application/pkcs7-signature, +application/pkcs8, +application/pkcs8-encrypted, +application/pkcs12, +application/pkix-attr-cert, +application/pkix-cert, +application/pkix-crl, +application/pkix-pkipath, +application/pkixcmp, +application/pls+xml, +application/poc-settings+xml, +application/postscript, +application/ppsp-tracker+json, +application/problem+json, +application/problem+xml, +application/provenance+xml, +application/prs.alvestrand.titrax-sheet, +application/prs.cww, +application/prs.cyn, +application/prs.hpub+zip, +application/prs.implied-document+xml, +application/prs.implied-executable, +application/prs.implied-structure, +application/prs.nprend, +application/prs.plucker, +application/prs.rdf-xml-crypt, +application/prs.vcfbzip2, +application/prs.xsf+xml, +application/pskc+xml, +application/pvd+json, +application/rdf+xml, +application/route-apd+xml, +application/route-s-tsid+xml, +application/route-usd+xml, +application/QSIG, +application/raptorfec, +application/rdap+json, +application/reginfo+xml, +application/relax-ng-compact-syntax, +application/remote-printing, +application/reputon+json, +application/resource-lists-diff+xml, +application/resource-lists+xml, +application/rfc+xml, +application/riscos, +application/rlmi+xml, +application/rls-services+xml, +application/rpki-checklist, +application/rpki-ghostbusters, +application/rpki-manifest, +application/rpki-publication, +application/rpki-roa, +application/rpki-updown, +application/rtf, +application/rtploopback, +application/rtx, +application/samlassertion+xml, +application/samlmetadata+xml, +application/sarif-external-properties+json, +application/sarif+json, +application/sbe, +application/sbml+xml, +application/scaip+xml, +application/scim+json, +application/scvp-cv-request, +application/scvp-cv-response, +application/scvp-vp-request, +application/scvp-vp-response, +application/sdp, +application/secevent+jwt, +application/senml-etch+cbor, +application/senml-etch+json, +application/senml-exi, +application/senml+cbor, +application/senml+json, +application/senml+xml, +application/sensml-exi, +application/sensml+cbor, +application/sensml+json, +application/sensml+xml, +application/sep-exi, +application/sep+xml, +application/session-info, +application/set-payment, +application/set-payment-initiation, +application/set-registration, +application/set-registration-initiation, +application/SGML, +application/sgml-open-catalog, +application/shf+xml, +application/sieve, +application/simple-filter+xml, +application/simple-message-summary, +application/simpleSymbolContainer, +application/sipc, +application/slate, +application/smil, +application/smil+xml, +application/smpte336m, +application/soap+fastinfoset, +application/soap+xml, +application/sparql-query, +application/spdx+json, +application/sparql-results+xml, +application/spirits-event+xml, +application/sql, +application/srgs, +application/srgs+xml, +application/sru+xml, +application/ssml+xml, +application/stix+json, +application/swid+cbor, +application/swid+xml, +application/tamp-apex-update, +application/tamp-apex-update-confirm, +application/tamp-community-update, +application/tamp-community-update-confirm, +application/tamp-error, +application/tamp-sequence-adjust, +application/tamp-sequence-adjust-confirm, +application/tamp-status-query, +application/tamp-status-response, +application/tamp-update, +application/tamp-update-confirm, +application/taxii+json, +application/td+json, +application/tei+xml, +application/TETRA_ISI, +application/thraud+xml, +application/timestamp-query, +application/timestamp-reply, +application/timestamped-data, +application/tlsrpt+gzip, +application/tlsrpt+json, +application/tm+json, +application/tnauthlist, +application/token-introspection+jwt, +application/trickle-ice-sdpfrag, +application/trig, +application/ttml+xml, +application/tve-trigger, +application/tzif, +application/tzif-leap, +application/ulpfec, +application/urc-grpsheet+xml, +application/urc-ressheet+xml, +application/urc-targetdesc+xml, +application/urc-uisocketdesc+xml, +application/vcard+json, +application/vcard+xml, +application/vemmi, +application/vnd.1000minds.decision-model+xml, +application/vnd.1ob, +application/vnd.3gpp.5gnas, +application/vnd.3gpp.access-transfer-events+xml, +application/vnd.3gpp.bsf+xml, +application/vnd.3gpp.crs+xml, +application/vnd.3gpp.current-location-discovery+xml, +application/vnd.3gpp.GMOP+xml, +application/vnd.3gpp.gtpc, +application/vnd.3gpp.interworking-data, +application/vnd.3gpp.lpp, +application/vnd.3gpp.mc-signalling-ear, +application/vnd.3gpp.mcdata-affiliation-command+xml, +application/vnd.3gpp.mcdata-info+xml, +application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml, +application/vnd.3gpp.mcdata-payload, +application/vnd.3gpp.mcdata-regroup+xml, +application/vnd.3gpp.mcdata-service-config+xml, +application/vnd.3gpp.mcdata-signalling, +application/vnd.3gpp.mcdata-ue-config+xml, +application/vnd.3gpp.mcdata-user-profile+xml, +application/vnd.3gpp.mcptt-affiliation-command+xml, +application/vnd.3gpp.mcptt-floor-request+xml, +application/vnd.3gpp.mcptt-info+xml, +application/vnd.3gpp.mcptt-location-info+xml, +application/vnd.3gpp.mcptt-mbms-usage-info+xml, +application/vnd.3gpp.mcptt-regroup+xml, +application/vnd.3gpp.mcptt-service-config+xml, +application/vnd.3gpp.mcptt-signed+xml, +application/vnd.3gpp.mcptt-ue-config+xml, +application/vnd.3gpp.mcptt-ue-init-config+xml, +application/vnd.3gpp.mcptt-user-profile+xml, +application/vnd.3gpp.mcvideo-affiliation-command+xml, +application/vnd.3gpp.mcvideo-affiliation-info+xml, +application/vnd.3gpp.mcvideo-info+xml, +application/vnd.3gpp.mcvideo-location-info+xml, +application/vnd.3gpp.mcvideo-mbms-usage-info+xml, +application/vnd.3gpp.mcvideo-regroup+xml, +application/vnd.3gpp.mcvideo-service-config+xml, +application/vnd.3gpp.mcvideo-transmission-request+xml, +application/vnd.3gpp.mcvideo-ue-config+xml, +application/vnd.3gpp.mcvideo-user-profile+xml, +application/vnd.3gpp.mid-call+xml, +application/vnd.3gpp.ngap, +application/vnd.3gpp.pfcp, +application/vnd.3gpp.pic-bw-large, +application/vnd.3gpp.pic-bw-small, +application/vnd.3gpp.pic-bw-var, +application/vnd.3gpp-prose-pc3a+xml, +application/vnd.3gpp-prose-pc3ach+xml, +application/vnd.3gpp-prose-pc3ch+xml, +application/vnd.3gpp-prose-pc8+xml, +application/vnd.3gpp-prose+xml, +application/vnd.3gpp.s1ap, +application/vnd.3gpp.seal-group-doc+xml, +application/vnd.3gpp.seal-info+xml, +application/vnd.3gpp.seal-location-info+xml, +application/vnd.3gpp.seal-mbms-usage-info+xml, +application/vnd.3gpp.seal-network-QoS-management-info+xml, +application/vnd.3gpp.seal-ue-config-info+xml, +application/vnd.3gpp.seal-unicast-info+xml, +application/vnd.3gpp.seal-user-profile-info+xml, +application/vnd.3gpp.sms, +application/vnd.3gpp.sms+xml, +application/vnd.3gpp.srvcc-ext+xml, +application/vnd.3gpp.SRVCC-info+xml, +application/vnd.3gpp.state-and-event-info+xml, +application/vnd.3gpp.ussd+xml, +application/vnd.3gpp.vae-info+xml, +application/vnd.3gpp-v2x-local-service-information, +application/vnd.3gpp2.bcmcsinfo+xml, +application/vnd.3gpp2.sms, +application/vnd.3gpp2.tcap, +application/vnd.3gpp.v2x, +application/vnd.3lightssoftware.imagescal, +application/vnd.3M.Post-it-Notes, +application/vnd.accpac.simply.aso, +application/vnd.accpac.simply.imp, +application/vnd.acm.addressxfer+json, +application/vnd.acm.chatbot+json, +application/vnd.acucobol, +application/vnd.acucorp, +application/vnd.adobe.flash.movie, +application/vnd.adobe.formscentral.fcdt, +application/vnd.adobe.fxp, +application/vnd.adobe.partial-upload, +application/vnd.adobe.xdp+xml, +application/vnd.aether.imp, +application/vnd.afpc.afplinedata, +application/vnd.afpc.afplinedata-pagedef, +application/vnd.afpc.cmoca-cmresource, +application/vnd.afpc.foca-charset, +application/vnd.afpc.foca-codedfont, +application/vnd.afpc.foca-codepage, +application/vnd.afpc.modca, +application/vnd.afpc.modca-cmtable, +application/vnd.afpc.modca-formdef, +application/vnd.afpc.modca-mediummap, +application/vnd.afpc.modca-objectcontainer, +application/vnd.afpc.modca-overlay, +application/vnd.afpc.modca-pagesegment, +application/vnd.age, +application/vnd.ah-barcode, +application/vnd.ahead.space, +application/vnd.airzip.filesecure.azf, +application/vnd.airzip.filesecure.azs, +application/vnd.amadeus+json, +application/vnd.amazon.mobi8-ebook, +application/vnd.americandynamics.acc, +application/vnd.amiga.ami, +application/vnd.amundsen.maze+xml, +application/vnd.android.ota, +application/vnd.anki, +application/vnd.anser-web-certificate-issue-initiation, +application/vnd.antix.game-component, +application/vnd.apache.arrow.file, +application/vnd.apache.arrow.stream, +application/vnd.apache.thrift.binary, +application/vnd.apache.thrift.compact, +application/vnd.apache.thrift.json, +application/vnd.apexlang, +application/vnd.api+json, +application/vnd.aplextor.warrp+json, +application/vnd.apothekende.reservation+json, +application/vnd.apple.installer+xml, +application/vnd.apple.keynote, +application/vnd.apple.mpegurl, +application/vnd.apple.numbers, +application/vnd.apple.pages, +application/vnd.arastra.swi, +application/vnd.aristanetworks.swi, +application/vnd.artisan+json, +application/vnd.artsquare, +application/vnd.astraea-software.iota, +application/vnd.audiograph, +application/vnd.autopackage, +application/vnd.avalon+json, +application/vnd.avistar+xml, +application/vnd.balsamiq.bmml+xml, +application/vnd.banana-accounting, +application/vnd.bbf.usp.error, +application/vnd.bbf.usp.msg, +application/vnd.bbf.usp.msg+json, +application/vnd.balsamiq.bmpr, +application/vnd.bekitzur-stech+json, +application/vnd.belightsoft.lhzd+zip, +application/vnd.belightsoft.lhzl+zip, +application/vnd.bint.med-content, +application/vnd.biopax.rdf+xml, +application/vnd.blink-idb-value-wrapper, +application/vnd.blueice.multipass, +application/vnd.bluetooth.ep.oob, +application/vnd.bluetooth.le.oob, +application/vnd.bmi, +application/vnd.bpf, +application/vnd.bpf3, +application/vnd.businessobjects, +application/vnd.byu.uapi+json, +application/vnd.cab-jscript, +application/vnd.canon-cpdl, +application/vnd.canon-lips, +application/vnd.capasystems-pg+json, +application/vnd.cendio.thinlinc.clientconf, +application/vnd.century-systems.tcp_stream, +application/vnd.chemdraw+xml, +application/vnd.chess-pgn, +application/vnd.chipnuts.karaoke-mmd, +application/vnd.ciedi, +application/vnd.cinderella, +application/vnd.cirpack.isdn-ext, +application/vnd.citationstyles.style+xml, +application/vnd.claymore, +application/vnd.cloanto.rp9, +application/vnd.clonk.c4group, +application/vnd.cluetrust.cartomobile-config, +application/vnd.cluetrust.cartomobile-config-pkg, +application/vnd.cncf.helm.chart.content.v1.tar+gzip, +application/vnd.cncf.helm.chart.provenance.v1.prov, +application/vnd.cncf.helm.config.v1+json, +application/vnd.coffeescript, +application/vnd.collabio.xodocuments.document, +application/vnd.collabio.xodocuments.document-template, +application/vnd.collabio.xodocuments.presentation, +application/vnd.collabio.xodocuments.presentation-template, +application/vnd.collabio.xodocuments.spreadsheet, +application/vnd.collabio.xodocuments.spreadsheet-template, +application/vnd.collection.doc+json, +application/vnd.collection+json, +application/vnd.collection.next+json, +application/vnd.comicbook-rar, +application/vnd.comicbook+zip, +application/vnd.commerce-battelle, +application/vnd.commonspace, +application/vnd.coreos.ignition+json, +application/vnd.cosmocaller, +application/vnd.contact.cmsg, +application/vnd.crick.clicker, +application/vnd.crick.clicker.keyboard, +application/vnd.crick.clicker.palette, +application/vnd.crick.clicker.template, +application/vnd.crick.clicker.wordbank, +application/vnd.criticaltools.wbs+xml, +application/vnd.cryptii.pipe+json, +application/vnd.crypto-shade-file, +application/vnd.cryptomator.encrypted, +application/vnd.cryptomator.vault, +application/vnd.ctc-posml, +application/vnd.ctct.ws+xml, +application/vnd.cups-pdf, +application/vnd.cups-postscript, +application/vnd.cups-ppd, +application/vnd.cups-raster, +application/vnd.cups-raw, +application/vnd.curl, +application/vnd.cyan.dean.root+xml, +application/vnd.cybank, +application/vnd.cyclonedx+json, +application/vnd.cyclonedx+xml, +application/vnd.d2l.coursepackage1p0+zip, +application/vnd.d3m-dataset, +application/vnd.d3m-problem, +application/vnd.dart, +application/vnd.data-vision.rdz, +application/vnd.datalog, +application/vnd.datapackage+json, +application/vnd.dataresource+json, +application/vnd.dbf, +application/vnd.debian.binary-package, +application/vnd.dece.data, +application/vnd.dece.ttml+xml, +application/vnd.dece.unspecified, +application/vnd.dece.zip, +application/vnd.denovo.fcselayout-link, +application/vnd.desmume.movie, +application/vnd.dir-bi.plate-dl-nosuffix, +application/vnd.dm.delegation+xml, +application/vnd.dna, +application/vnd.document+json, +application/vnd.dolby.mobile.1, +application/vnd.dolby.mobile.2, +application/vnd.doremir.scorecloud-binary-document, +application/vnd.dpgraph, +application/vnd.dreamfactory, +application/vnd.drive+json, +application/vnd.dtg.local, +application/vnd.dtg.local.flash, +application/vnd.dtg.local.html, +application/vnd.dvb.ait, +application/vnd.dvb.dvbisl+xml, +application/vnd.dvb.dvbj, +application/vnd.dvb.esgcontainer, +application/vnd.dvb.ipdcdftnotifaccess, +application/vnd.dvb.ipdcesgaccess, +application/vnd.dvb.ipdcesgaccess2, +application/vnd.dvb.ipdcesgpdd, +application/vnd.dvb.ipdcroaming, +application/vnd.dvb.iptv.alfec-base, +application/vnd.dvb.iptv.alfec-enhancement, +application/vnd.dvb.notif-aggregate-root+xml, +application/vnd.dvb.notif-container+xml, +application/vnd.dvb.notif-generic+xml, +application/vnd.dvb.notif-ia-msglist+xml, +application/vnd.dvb.notif-ia-registration-request+xml, +application/vnd.dvb.notif-ia-registration-response+xml, +application/vnd.dvb.notif-init+xml, +application/vnd.dvb.pfr, +application/vnd.dvb.service, +application/vnd.dxr, +application/vnd.dynageo, +application/vnd.dzr, +application/vnd.easykaraoke.cdgdownload, +application/vnd.ecip.rlp, +application/vnd.ecdis-update, +application/vnd.eclipse.ditto+json, +application/vnd.ecowin.chart, +application/vnd.ecowin.filerequest, +application/vnd.ecowin.fileupdate, +application/vnd.ecowin.series, +application/vnd.ecowin.seriesrequest, +application/vnd.ecowin.seriesupdate, +application/vnd.efi.img, +application/vnd.efi.iso, +application/vnd.eln+zip, +application/vnd.emclient.accessrequest+xml, +application/vnd.enliven, +application/vnd.enphase.envoy, +application/vnd.eprints.data+xml, +application/vnd.epson.esf, +application/vnd.epson.msf, +application/vnd.epson.quickanime, +application/vnd.epson.salt, +application/vnd.epson.ssf, +application/vnd.ericsson.quickcall, +application/vnd.espass-espass+zip, +application/vnd.eszigno3+xml, +application/vnd.etsi.aoc+xml, +application/vnd.etsi.asic-s+zip, +application/vnd.etsi.asic-e+zip, +application/vnd.etsi.cug+xml, +application/vnd.etsi.iptvcommand+xml, +application/vnd.etsi.iptvdiscovery+xml, +application/vnd.etsi.iptvprofile+xml, +application/vnd.etsi.iptvsad-bc+xml, +application/vnd.etsi.iptvsad-cod+xml, +application/vnd.etsi.iptvsad-npvr+xml, +application/vnd.etsi.iptvservice+xml, +application/vnd.etsi.iptvsync+xml, +application/vnd.etsi.iptvueprofile+xml, +application/vnd.etsi.mcid+xml, +application/vnd.etsi.mheg5, +application/vnd.etsi.overload-control-policy-dataset+xml, +application/vnd.etsi.pstn+xml, +application/vnd.etsi.sci+xml, +application/vnd.etsi.simservs+xml, +application/vnd.etsi.timestamp-token, +application/vnd.etsi.tsl+xml, +application/vnd.etsi.tsl.der, +application/vnd.eu.kasparian.car+json, +application/vnd.eudora.data, +application/vnd.evolv.ecig.profile, +application/vnd.evolv.ecig.settings, +application/vnd.evolv.ecig.theme, +application/vnd.exstream-empower+zip, +application/vnd.exstream-package, +application/vnd.ezpix-album, +application/vnd.ezpix-package, +application/vnd.f-secure.mobile, +application/vnd.fastcopy-disk-image, +application/vnd.familysearch.gedcom+zip, +application/vnd.fdsn.mseed, +application/vnd.fdsn.seed, +application/vnd.ffsns, +application/vnd.ficlab.flb+zip, +application/vnd.filmit.zfc, +application/vnd.fints, +application/vnd.firemonkeys.cloudcell, +application/vnd.FloGraphIt, +application/vnd.fluxtime.clip, +application/vnd.font-fontforge-sfd, +application/vnd.framemaker, +application/vnd.freelog.comic, +application/vnd.frogans.fnc, +application/vnd.frogans.ltf, +application/vnd.fsc.weblaunch, +application/vnd.fujifilm.fb.docuworks, +application/vnd.fujifilm.fb.docuworks.binder, +application/vnd.fujifilm.fb.docuworks.container, +application/vnd.fujifilm.fb.jfi+xml, +application/vnd.fujitsu.oasys, +application/vnd.fujitsu.oasys2, +application/vnd.fujitsu.oasys3, +application/vnd.fujitsu.oasysgp, +application/vnd.fujitsu.oasysprs, +application/vnd.fujixerox.ART4, +application/vnd.fujixerox.ART-EX, +application/vnd.fujixerox.ddd, +application/vnd.fujixerox.docuworks, +application/vnd.fujixerox.docuworks.binder, +application/vnd.fujixerox.docuworks.container, +application/vnd.fujixerox.HBPL, +application/vnd.fut-misnet, +application/vnd.futoin+cbor, +application/vnd.futoin+json, +application/vnd.fuzzysheet, +application/vnd.genomatix.tuxedo, +application/vnd.genozip, +application/vnd.gentics.grd+json, +application/vnd.gentoo.catmetadata+xml, +application/vnd.gentoo.ebuild, +application/vnd.gentoo.eclass, +application/vnd.gentoo.gpkg, +application/vnd.gentoo.manifest, +application/vnd.gentoo.xpak, +application/vnd.gentoo.pkgmetadata+xml, +application/vnd.geo+json, +application/vnd.geocube+xml, +application/vnd.geogebra.file, +application/vnd.geogebra.slides, +application/vnd.geogebra.tool, +application/vnd.geometry-explorer, +application/vnd.geonext, +application/vnd.geoplan, +application/vnd.geospace, +application/vnd.gerber, +application/vnd.globalplatform.card-content-mgt, +application/vnd.globalplatform.card-content-mgt-response, +application/vnd.gmx, +application/vnd.gnu.taler.exchange+json, +application/vnd.gnu.taler.merchant+json, +application/vnd.google-earth.kml+xml, +application/vnd.google-earth.kmz, +application/vnd.gov.sk.e-form+xml, +application/vnd.gov.sk.e-form+zip, +application/vnd.gov.sk.xmldatacontainer+xml, +application/vnd.gpxsee.map+xml, +application/vnd.grafeq, +application/vnd.gridmp, +application/vnd.groove-account, +application/vnd.groove-help, +application/vnd.groove-identity-message, +application/vnd.groove-injector, +application/vnd.groove-tool-message, +application/vnd.groove-tool-template, +application/vnd.groove-vcard, +application/vnd.hal+json, +application/vnd.hal+xml, +application/vnd.HandHeld-Entertainment+xml, +application/vnd.hbci, +application/vnd.hc+json, +application/vnd.hcl-bireports, +application/vnd.hdt, +application/vnd.heroku+json, +application/vnd.hhe.lesson-player, +application/vnd.hp-HPGL, +application/vnd.hp-hpid, +application/vnd.hp-hps, +application/vnd.hp-jlyt, +application/vnd.hp-PCL, +application/vnd.hp-PCLXL, +application/vnd.hsl, +application/vnd.httphone, +application/vnd.hydrostatix.sof-data, +application/vnd.hyper-item+json, +application/vnd.hyper+json, +application/vnd.hyperdrive+json, +application/vnd.hzn-3d-crossword, +application/vnd.ibm.afplinedata, +application/vnd.ibm.electronic-media, +application/vnd.ibm.MiniPay, +application/vnd.ibm.modcap, +application/vnd.ibm.rights-management, +application/vnd.ibm.secure-container, +application/vnd.iccprofile, +application/vnd.ieee.1905, +application/vnd.igloader, +application/vnd.imagemeter.folder+zip, +application/vnd.imagemeter.image+zip, +application/vnd.immervision-ivp, +application/vnd.immervision-ivu, +application/vnd.ims.imsccv1p1, +application/vnd.ims.imsccv1p2, +application/vnd.ims.imsccv1p3, +application/vnd.ims.lis.v2.result+json, +application/vnd.ims.lti.v2.toolconsumerprofile+json, +application/vnd.ims.lti.v2.toolproxy.id+json, +application/vnd.ims.lti.v2.toolproxy+json, +application/vnd.ims.lti.v2.toolsettings+json, +application/vnd.ims.lti.v2.toolsettings.simple+json, +application/vnd.informedcontrol.rms+xml, +application/vnd.infotech.project, +application/vnd.infotech.project+xml, +application/vnd.informix-visionary, +application/vnd.innopath.wamp.notification, +application/vnd.insors.igm, +application/vnd.intercon.formnet, +application/vnd.intergeo, +application/vnd.intertrust.digibox, +application/vnd.intertrust.nncp, +application/vnd.intu.qbo, +application/vnd.intu.qfx, +application/vnd.ipfs.ipns-record, +application/vnd.ipld.car, +application/vnd.ipld.dag-cbor, +application/vnd.ipld.dag-json, +application/vnd.ipld.raw, +application/vnd.iptc.g2.catalogitem+xml, +application/vnd.iptc.g2.conceptitem+xml, +application/vnd.iptc.g2.knowledgeitem+xml, +application/vnd.iptc.g2.newsitem+xml, +application/vnd.iptc.g2.newsmessage+xml, +application/vnd.iptc.g2.packageitem+xml, +application/vnd.iptc.g2.planningitem+xml, +application/vnd.ipunplugged.rcprofile, +application/vnd.irepository.package+xml, +application/vnd.is-xpr, +application/vnd.isac.fcs, +application/vnd.jam, +application/vnd.iso11783-10+zip, +application/vnd.japannet-directory-service, +application/vnd.japannet-jpnstore-wakeup, +application/vnd.japannet-payment-wakeup, +application/vnd.japannet-registration, +application/vnd.japannet-registration-wakeup, +application/vnd.japannet-setstore-wakeup, +application/vnd.japannet-verification, +application/vnd.japannet-verification-wakeup, +application/vnd.jcp.javame.midlet-rms, +application/vnd.jisp, +application/vnd.joost.joda-archive, +application/vnd.jsk.isdn-ngn, +application/vnd.kahootz, +application/vnd.kde.karbon, +application/vnd.kde.kchart, +application/vnd.kde.kformula, +application/vnd.kde.kivio, +application/vnd.kde.kontour, +application/vnd.kde.kpresenter, +application/vnd.kde.kspread, +application/vnd.kde.kword, +application/vnd.kenameaapp, +application/vnd.kidspiration, +application/vnd.Kinar, +application/vnd.koan, +application/vnd.kodak-descriptor, +application/vnd.las, +application/vnd.las.las+json, +application/vnd.las.las+xml, +application/vnd.laszip, +application/vnd.leap+json, +application/vnd.liberty-request+xml, +application/vnd.llamagraphics.life-balance.desktop, +application/vnd.llamagraphics.life-balance.exchange+xml, +application/vnd.logipipe.circuit+zip, +application/vnd.loom, +application/vnd.lotus-1-2-3, +application/vnd.lotus-approach, +application/vnd.lotus-freelance, +application/vnd.lotus-notes, +application/vnd.lotus-organizer, +application/vnd.lotus-screencam, +application/vnd.lotus-wordpro, +application/vnd.macports.portpkg, +application/vnd.mapbox-vector-tile, +application/vnd.marlin.drm.actiontoken+xml, +application/vnd.marlin.drm.conftoken+xml, +application/vnd.marlin.drm.license+xml, +application/vnd.marlin.drm.mdcf, +application/vnd.mason+json, +application/vnd.maxar.archive.3tz+zip, +application/vnd.maxmind.maxmind-db, +application/vnd.mcd, +application/vnd.mdl, +application/vnd.mdl-mbsdf, +application/vnd.medcalcdata, +application/vnd.mediastation.cdkey, +application/vnd.medicalholodeck.recordxr, +application/vnd.meridian-slingshot, +application/vnd.mermaid, +application/vnd.MFER, +application/vnd.mfmp, +application/vnd.micro+json, +application/vnd.micrografx.flo, +application/vnd.micrografx.igx, +application/vnd.microsoft.portable-executable, +application/vnd.microsoft.windows.thumbnail-cache, +application/vnd.miele+json, +application/vnd.mif, +application/vnd.minisoft-hp3000-save, +application/vnd.mitsubishi.misty-guard.trustweb, +application/vnd.Mobius.DAF, +application/vnd.Mobius.DIS, +application/vnd.Mobius.MBK, +application/vnd.Mobius.MQY, +application/vnd.Mobius.MSL, +application/vnd.Mobius.PLC, +application/vnd.Mobius.TXF, +application/vnd.modl, +application/vnd.mophun.application, +application/vnd.mophun.certificate, +application/vnd.motorola.flexsuite, +application/vnd.motorola.flexsuite.adsi, +application/vnd.motorola.flexsuite.fis, +application/vnd.motorola.flexsuite.gotap, +application/vnd.motorola.flexsuite.kmr, +application/vnd.motorola.flexsuite.ttc, +application/vnd.motorola.flexsuite.wem, +application/vnd.motorola.iprm, +application/vnd.mozilla.xul+xml, +application/vnd.ms-artgalry, +application/vnd.ms-asf, +application/vnd.ms-cab-compressed, +application/vnd.ms-3mfdocument, +application/vnd.ms-excel, +application/vnd.ms-excel.addin.macroEnabled.12, +application/vnd.ms-excel.sheet.binary.macroEnabled.12, +application/vnd.ms-excel.sheet.macroEnabled.12, +application/vnd.ms-excel.template.macroEnabled.12, +application/vnd.ms-fontobject, +application/vnd.ms-htmlhelp, +application/vnd.ms-ims, +application/vnd.ms-lrm, +application/vnd.ms-office.activeX+xml, +application/vnd.ms-officetheme, +application/vnd.ms-playready.initiator+xml, +application/vnd.ms-powerpoint, +application/vnd.ms-powerpoint.addin.macroEnabled.12, +application/vnd.ms-powerpoint.presentation.macroEnabled.12, +application/vnd.ms-powerpoint.slide.macroEnabled.12, +application/vnd.ms-powerpoint.slideshow.macroEnabled.12, +application/vnd.ms-powerpoint.template.macroEnabled.12, +application/vnd.ms-PrintDeviceCapabilities+xml, +application/vnd.ms-PrintSchemaTicket+xml, +application/vnd.ms-project, +application/vnd.ms-tnef, +application/vnd.ms-windows.devicepairing, +application/vnd.ms-windows.nwprinting.oob, +application/vnd.ms-windows.printerpairing, +application/vnd.ms-windows.wsd.oob, +application/vnd.ms-wmdrm.lic-chlg-req, +application/vnd.ms-wmdrm.lic-resp, +application/vnd.ms-wmdrm.meter-chlg-req, +application/vnd.ms-wmdrm.meter-resp, +application/vnd.ms-word.document.macroEnabled.12, +application/vnd.ms-word.template.macroEnabled.12, +application/vnd.ms-works, +application/vnd.ms-wpl, +application/vnd.ms-xpsdocument, +application/vnd.msa-disk-image, +application/vnd.mseq, +application/vnd.msign, +application/vnd.multiad.creator, +application/vnd.multiad.creator.cif, +application/vnd.musician, +application/vnd.music-niff, +application/vnd.muvee.style, +application/vnd.mynfc, +application/vnd.nacamar.ybrid+json, +application/vnd.ncd.control, +application/vnd.ncd.reference, +application/vnd.nearst.inv+json, +application/vnd.nebumind.line, +application/vnd.nervana, +application/vnd.netfpx, +application/vnd.neurolanguage.nlu, +application/vnd.nimn, +application/vnd.nintendo.snes.rom, +application/vnd.nintendo.nitro.rom, +application/vnd.nitf, +application/vnd.noblenet-directory, +application/vnd.noblenet-sealer, +application/vnd.noblenet-web, +application/vnd.nokia.catalogs, +application/vnd.nokia.conml+wbxml, +application/vnd.nokia.conml+xml, +application/vnd.nokia.iptv.config+xml, +application/vnd.nokia.iSDS-radio-presets, +application/vnd.nokia.landmark+wbxml, +application/vnd.nokia.landmark+xml, +application/vnd.nokia.landmarkcollection+xml, +application/vnd.nokia.ncd, +application/vnd.nokia.n-gage.ac+xml, +application/vnd.nokia.n-gage.data, +application/vnd.nokia.n-gage.symbian.install, +application/vnd.nokia.pcd+wbxml, +application/vnd.nokia.pcd+xml, +application/vnd.nokia.radio-preset, +application/vnd.nokia.radio-presets, +application/vnd.novadigm.EDM, +application/vnd.novadigm.EDX, +application/vnd.novadigm.EXT, +application/vnd.ntt-local.content-share, +application/vnd.ntt-local.file-transfer, +application/vnd.ntt-local.ogw_remote-access, +application/vnd.ntt-local.sip-ta_remote, +application/vnd.ntt-local.sip-ta_tcp_stream, +application/vnd.oasis.opendocument.base, +application/vnd.oasis.opendocument.chart, +application/vnd.oasis.opendocument.chart-template, +application/vnd.oasis.opendocument.database, +application/vnd.oasis.opendocument.formula, +application/vnd.oasis.opendocument.formula-template, +application/vnd.oasis.opendocument.graphics, +application/vnd.oasis.opendocument.graphics-template, +application/vnd.oasis.opendocument.image, +application/vnd.oasis.opendocument.image-template, +application/vnd.oasis.opendocument.presentation, +application/vnd.oasis.opendocument.presentation-template, +application/vnd.oasis.opendocument.spreadsheet, +application/vnd.oasis.opendocument.spreadsheet-template, +application/vnd.oasis.opendocument.text, +application/vnd.oasis.opendocument.text-master, +application/vnd.oasis.opendocument.text-master-template, +application/vnd.oasis.opendocument.text-template, +application/vnd.oasis.opendocument.text-web, +application/vnd.obn, +application/vnd.ocf+cbor, +application/vnd.oci.image.manifest.v1+json, +application/vnd.oftn.l10n+json, +application/vnd.oipf.contentaccessdownload+xml, +application/vnd.oipf.contentaccessstreaming+xml, +application/vnd.oipf.cspg-hexbinary, +application/vnd.oipf.dae.svg+xml, +application/vnd.oipf.dae.xhtml+xml, +application/vnd.oipf.mippvcontrolmessage+xml, +application/vnd.oipf.pae.gem, +application/vnd.oipf.spdiscovery+xml, +application/vnd.oipf.spdlist+xml, +application/vnd.oipf.ueprofile+xml, +application/vnd.oipf.userprofile+xml, +application/vnd.olpc-sugar, +application/vnd.oma.bcast.associated-procedure-parameter+xml, +application/vnd.oma.bcast.drm-trigger+xml, +application/vnd.oma.bcast.imd+xml, +application/vnd.oma.bcast.ltkm, +application/vnd.oma.bcast.notification+xml, +application/vnd.oma.bcast.provisioningtrigger, +application/vnd.oma.bcast.sgboot, +application/vnd.oma.bcast.sgdd+xml, +application/vnd.oma.bcast.sgdu, +application/vnd.oma.bcast.simple-symbol-container, +application/vnd.oma.bcast.smartcard-trigger+xml, +application/vnd.oma.bcast.sprov+xml, +application/vnd.oma.bcast.stkm, +application/vnd.oma.cab-address-book+xml, +application/vnd.oma.cab-feature-handler+xml, +application/vnd.oma.cab-pcc+xml, +application/vnd.oma.cab-subs-invite+xml, +application/vnd.oma.cab-user-prefs+xml, +application/vnd.oma.dcd, +application/vnd.oma.dcdc, +application/vnd.oma.dd2+xml, +application/vnd.oma.drm.risd+xml, +application/vnd.oma.group-usage-list+xml, +application/vnd.oma.lwm2m+cbor, +application/vnd.oma.lwm2m+json, +application/vnd.oma.lwm2m+tlv, +application/vnd.oma.pal+xml, +application/vnd.oma.poc.detailed-progress-report+xml, +application/vnd.oma.poc.final-report+xml, +application/vnd.oma.poc.groups+xml, +application/vnd.oma.poc.invocation-descriptor+xml, +application/vnd.oma.poc.optimized-progress-report+xml, +application/vnd.oma.push, +application/vnd.oma.scidm.messages+xml, +application/vnd.oma.xcap-directory+xml, +application/vnd.omads-email+xml, +application/vnd.omads-file+xml, +application/vnd.omads-folder+xml, +application/vnd.omaloc-supl-init, +application/vnd.oma-scws-config, +application/vnd.oma-scws-http-request, +application/vnd.oma-scws-http-response, +application/vnd.onepager, +application/vnd.onepagertamp, +application/vnd.onepagertamx, +application/vnd.onepagertat, +application/vnd.onepagertatp, +application/vnd.onepagertatx, +application/vnd.onvif.metadata, +application/vnd.openblox.game-binary, +application/vnd.openblox.game+xml, +application/vnd.openeye.oeb, +application/vnd.openstreetmap.data+xml, +application/vnd.opentimestamps.ots, +application/vnd.openxmlformats-officedocument.custom-properties+xml, +application/vnd.openxmlformats-officedocument.customXmlProperties+xml, +application/vnd.openxmlformats-officedocument.drawing+xml, +application/vnd.openxmlformats-officedocument.drawingml.chart+xml, +application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml, +application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml, +application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml, +application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml, +application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml, +application/vnd.openxmlformats-officedocument.extended-properties+xml, +application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml, +application/vnd.openxmlformats-officedocument.presentationml.comments+xml, +application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml, +application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml, +application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml, +application/vnd.openxmlformats-officedocument.presentationml.presentation, +application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml, +application/vnd.openxmlformats-officedocument.presentationml.presProps+xml, +application/vnd.openxmlformats-officedocument.presentationml.slide, +application/vnd.openxmlformats-officedocument.presentationml.slide+xml, +application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml, +application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml, +application/vnd.openxmlformats-officedocument.presentationml.slideshow, +application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml, +application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml, +application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml, +application/vnd.openxmlformats-officedocument.presentationml.tags+xml, +application/vnd.openxmlformats-officedocument.presentationml.template, +application/vnd.openxmlformats-officedocument.presentationml.template.main+xml, +application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.template, +application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml, +application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml, +application/vnd.openxmlformats-officedocument.theme+xml, +application/vnd.openxmlformats-officedocument.themeOverride+xml, +application/vnd.openxmlformats-officedocument.vmlDrawing, +application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.document, +application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.template, +application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml, +application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml, +application/vnd.openxmlformats-package.core-properties+xml, +application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml, +application/vnd.openxmlformats-package.relationships+xml, +application/vnd.oracle.resource+json, +application/vnd.orange.indata, +application/vnd.osa.netdeploy, +application/vnd.osgeo.mapguide.package, +application/vnd.osgi.bundle, +application/vnd.osgi.dp, +application/vnd.osgi.subsystem, +application/vnd.otps.ct-kip+xml, +application/vnd.oxli.countgraph, +application/vnd.pagerduty+json, +application/vnd.palm, +application/vnd.panoply, +application/vnd.paos.xml, +application/vnd.patentdive, +application/vnd.patientecommsdoc, +application/vnd.pawaafile, +application/vnd.pcos, +application/vnd.pg.format, +application/vnd.pg.osasli, +application/vnd.piaccess.application-licence, +application/vnd.picsel, +application/vnd.pmi.widget, +application/vnd.poc.group-advertisement+xml, +application/vnd.pocketlearn, +application/vnd.powerbuilder6, +application/vnd.powerbuilder6-s, +application/vnd.powerbuilder7, +application/vnd.powerbuilder75, +application/vnd.powerbuilder75-s, +application/vnd.powerbuilder7-s, +application/vnd.preminet, +application/vnd.previewsystems.box, +application/vnd.proteus.magazine, +application/vnd.psfs, +application/vnd.pt.mundusmundi, +application/vnd.publishare-delta-tree, +application/vnd.pvi.ptid1, +application/vnd.pwg-multiplexed, +application/vnd.pwg-xhtml-print+xml, +application/vnd.qualcomm.brew-app-res, +application/vnd.quarantainenet, +application/vnd.Quark.QuarkXPress, +application/vnd.quobject-quoxdocument, +application/vnd.radisys.moml+xml, +application/vnd.radisys.msml-audit-conf+xml, +application/vnd.radisys.msml-audit-conn+xml, +application/vnd.radisys.msml-audit-dialog+xml, +application/vnd.radisys.msml-audit-stream+xml, +application/vnd.radisys.msml-audit+xml, +application/vnd.radisys.msml-conf+xml, +application/vnd.radisys.msml-dialog-base+xml, +application/vnd.radisys.msml-dialog-fax-detect+xml, +application/vnd.radisys.msml-dialog-fax-sendrecv+xml, +application/vnd.radisys.msml-dialog-group+xml, +application/vnd.radisys.msml-dialog-speech+xml, +application/vnd.radisys.msml-dialog-transform+xml, +application/vnd.radisys.msml-dialog+xml, +application/vnd.radisys.msml+xml, +application/vnd.rainstor.data, +application/vnd.rapid, +application/vnd.rar, +application/vnd.realvnc.bed, +application/vnd.recordare.musicxml, +application/vnd.recordare.musicxml+xml, +application/vnd.relpipe, +application/vnd.RenLearn.rlprint, +application/vnd.resilient.logic, +application/vnd.restful+json, +application/vnd.rig.cryptonote, +application/vnd.route66.link66+xml, +application/vnd.rs-274x, +application/vnd.ruckus.download, +application/vnd.s3sms, +application/vnd.sailingtracker.track, +application/vnd.sar, +application/vnd.sbm.cid, +application/vnd.sbm.mid2, +application/vnd.scribus, +application/vnd.sealed.3df, +application/vnd.sealed.csf, +application/vnd.sealed.doc, +application/vnd.sealed.eml, +application/vnd.sealed.mht, +application/vnd.sealed.net, +application/vnd.sealed.ppt, +application/vnd.sealed.tiff, +application/vnd.sealed.xls, +application/vnd.sealedmedia.softseal.html, +application/vnd.sealedmedia.softseal.pdf, +application/vnd.seemail, +application/vnd.seis+json, +application/vnd.sema, +application/vnd.semd, +application/vnd.semf, +application/vnd.shade-save-file, +application/vnd.shana.informed.formdata, +application/vnd.shana.informed.formtemplate, +application/vnd.shana.informed.interchange, +application/vnd.shana.informed.package, +application/vnd.shootproof+json, +application/vnd.shopkick+json, +application/vnd.shp, +application/vnd.shx, +application/vnd.sigrok.session, +application/vnd.SimTech-MindMapper, +application/vnd.siren+json, +application/vnd.smaf, +application/vnd.smart.notebook, +application/vnd.smart.teacher, +application/vnd.smintio.portals.archive, +application/vnd.snesdev-page-table, +application/vnd.software602.filler.form+xml, +application/vnd.software602.filler.form-xml-zip, +application/vnd.solent.sdkm+xml, +application/vnd.spotfire.dxp, +application/vnd.spotfire.sfs, +application/vnd.sqlite3, +application/vnd.sss-cod, +application/vnd.sss-dtf, +application/vnd.sss-ntf, +application/vnd.stepmania.package, +application/vnd.stepmania.stepchart, +application/vnd.street-stream, +application/vnd.sun.wadl+xml, +application/vnd.sus-calendar, +application/vnd.svd, +application/vnd.swiftview-ics, +application/vnd.sybyl.mol2, +application/vnd.sycle+xml, +application/vnd.syft+json, +application/vnd.syncml.dm.notification, +application/vnd.syncml.dmddf+xml, +application/vnd.syncml.dmtnds+wbxml, +application/vnd.syncml.dmtnds+xml, +application/vnd.syncml.dmddf+wbxml, +application/vnd.syncml.dm+wbxml, +application/vnd.syncml.dm+xml, +application/vnd.syncml.ds.notification, +application/vnd.syncml+xml, +application/vnd.tableschema+json, +application/vnd.tao.intent-module-archive, +application/vnd.tcpdump.pcap, +application/vnd.think-cell.ppttc+json, +application/vnd.tml, +application/vnd.tmd.mediaflex.api+xml, +application/vnd.tmobile-livetv, +application/vnd.tri.onesource, +application/vnd.trid.tpt, +application/vnd.triscape.mxs, +application/vnd.trueapp, +application/vnd.truedoc, +application/vnd.ubisoft.webplayer, +application/vnd.ufdl, +application/vnd.uiq.theme, +application/vnd.umajin, +application/vnd.unity, +application/vnd.uoml+xml, +application/vnd.uplanet.alert, +application/vnd.uplanet.alert-wbxml, +application/vnd.uplanet.bearer-choice, +application/vnd.uplanet.bearer-choice-wbxml, +application/vnd.uplanet.cacheop, +application/vnd.uplanet.cacheop-wbxml, +application/vnd.uplanet.channel, +application/vnd.uplanet.channel-wbxml, +application/vnd.uplanet.list, +application/vnd.uplanet.listcmd, +application/vnd.uplanet.listcmd-wbxml, +application/vnd.uplanet.list-wbxml, +application/vnd.uri-map, +application/vnd.uplanet.signal, +application/vnd.valve.source.material, +application/vnd.vcx, +application/vnd.vd-study, +application/vnd.vectorworks, +application/vnd.vel+json, +application/vnd.verimatrix.vcas, +application/vnd.veritone.aion+json, +application/vnd.veryant.thin, +application/vnd.ves.encrypted, +application/vnd.vidsoft.vidconference, +application/vnd.visio, +application/vnd.visionary, +application/vnd.vividence.scriptfile, +application/vnd.vsf, +application/vnd.wap.sic, +application/vnd.wap.slc, +application/vnd.wap.wbxml, +application/vnd.wap.wmlc, +application/vnd.wap.wmlscriptc, +application/vnd.wasmflow.wafl, +application/vnd.webturbo, +application/vnd.wfa.dpp, +application/vnd.wfa.p2p, +application/vnd.wfa.wsc, +application/vnd.windows.devicepairing, +application/vnd.wmc, +application/vnd.wmf.bootstrap, +application/vnd.wolfram.mathematica, +application/vnd.wolfram.mathematica.package, +application/vnd.wolfram.player, +application/vnd.wordlift, +application/vnd.wordperfect, +application/vnd.wqd, +application/vnd.wrq-hp3000-labelled, +application/vnd.wt.stf, +application/vnd.wv.csp+xml, +application/vnd.wv.csp+wbxml, +application/vnd.wv.ssp+xml, +application/vnd.xacml+json, +application/vnd.xara, +application/vnd.xfdl, +application/vnd.xfdl.webform, +application/vnd.xmi+xml, +application/vnd.xmpie.cpkg, +application/vnd.xmpie.dpkg, +application/vnd.xmpie.plan, +application/vnd.xmpie.ppkg, +application/vnd.xmpie.xlim, +application/vnd.yamaha.hv-dic, +application/vnd.yamaha.hv-script, +application/vnd.yamaha.hv-voice, +application/vnd.yamaha.openscoreformat.osfpvg+xml, +application/vnd.yamaha.openscoreformat, +application/vnd.yamaha.remote-setup, +application/vnd.yamaha.smaf-audio, +application/vnd.yamaha.smaf-phrase, +application/vnd.yamaha.through-ngn, +application/vnd.yamaha.tunnel-udpencap, +application/vnd.yaoweme, +application/vnd.yellowriver-custom-menu, +application/vnd.youtube.yt, +application/vnd.zul, +application/vnd.zzazz.deck+xml, +application/voicexml+xml, +application/voucher-cms+json, +application/vq-rtcpxr, +application/wasm, +application/watcherinfo+xml, +application/webpush-options+json, +application/whoispp-query, +application/whoispp-response, +application/widget, +application/wita, +application/wordperfect5.1, +application/wsdl+xml, +application/wspolicy+xml, +application/x-pki-message, +application/x-www-form-urlencoded, +application/x-x509-ca-cert, +application/x-x509-ca-ra-cert, +application/x-x509-next-ca-cert, +application/x400-bp, +application/xacml+xml, +application/xcap-att+xml, +application/xcap-caps+xml, +application/xcap-diff+xml, +application/xcap-el+xml, +application/xcap-error+xml, +application/xcap-ns+xml, +application/xcon-conference-info-diff+xml, +application/xcon-conference-info+xml, +application/xenc+xml, +application/xfdf, +application/xhtml+xml, +application/xliff+xml, +application/xml, +application/xml-dtd, +application/xml-external-parsed-entity, +application/xml-patch+xml, +application/xmpp+xml, +application/xop+xml, +application/xslt+xml, +application/xv+xml, +application/yaml, +application/yang, +application/yang-data+cbor, +application/yang-data+json, +application/yang-data+xml, +application/yang-patch+json, +application/yang-patch+xml, +application/yin+xml, +application/zip, +application/zlib, +application/zstd \ No newline at end of file diff --git a/src/test/java/eu/dnetlib/validator2/engine/Test_FAIR_LIT.java b/src/test/java/eu/dnetlib/validator2/engine/Test_FAIR_LIT.java index e4cfbff..f982c81 100644 --- a/src/test/java/eu/dnetlib/validator2/engine/Test_FAIR_LIT.java +++ b/src/test/java/eu/dnetlib/validator2/engine/Test_FAIR_LIT.java @@ -2,7 +2,7 @@ package eu.dnetlib.validator2.engine; import eu.dnetlib.validator2.validation.XMLApplicationProfile; import eu.dnetlib.validator2.validation.guideline.Guideline; -import eu.dnetlib.validator2.validation.guideline.openaire.FAIR_Literature_GuidelinesProfile; +import eu.dnetlib.validator2.validation.guideline.openaire.FAIR_Literature_GuidelinesV4Profile; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -19,18 +19,19 @@ public class Test_FAIR_LIT { private static final String[] FILES = new String[]{ - "src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml", - "src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml", - "src/test/resources/openaireguidelinesV3/cris.vtt.fi/01_data.xml", - "src/test/resources/openaireguidelinesV3/cris.vtt.fi/02_data.xml", - "src/test/resources/openaireguidelinesV3/cris.vtt.fi/04_data.xml", +// "src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml", +// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml", +// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/01_data.xml", +// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/02_data.xml", +// "src/test/resources/openaireguidelinesV3/cris.vtt.fi/04_data.xml", // "src/test/resources/openaireguidelinesV3/cris.vtt.fi/03_data.xml", -// "src/test/resources/openaireguidelinesV4/01_gv4.xml" +// "src/test/resources/openaireguidelinesV4/01_gv4.xml", + "src/test/resources/openaireguidelinesV4/v4_literature_all_guidelines_record.xml" }; public static void main(String[] args) { // String xmlFile = args[0]; - FAIR_Literature_GuidelinesProfile profile = new FAIR_Literature_GuidelinesProfile(); + FAIR_Literature_GuidelinesV4Profile profile = new FAIR_Literature_GuidelinesV4Profile(); logger.info("Max score: " + profile.maxScore()); Map scorePerDoc = new LinkedHashMap<>(); DocumentBuilder builder = TestUtils.getDocumentBuilder(); diff --git a/src/test/java/eu/dnetlib/validator2/engine/Test_v2_data.java b/src/test/java/eu/dnetlib/validator2/engine/Test_v2_data.java new file mode 100644 index 0000000..26c0745 --- /dev/null +++ b/src/test/java/eu/dnetlib/validator2/engine/Test_v2_data.java @@ -0,0 +1,72 @@ +package eu.dnetlib.validator2.engine; + +import eu.dnetlib.validator2.validation.XMLApplicationProfile; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; +import eu.dnetlib.validator2.validation.guideline.openaire.DataArchiveGuidelinesV2Profile; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; + +import javax.xml.parsers.DocumentBuilder; +import java.io.File; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.OptionalDouble; +import java.util.stream.Collectors; + +public class Test_v2_data { + + private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Test_v2_data.class); + + + private static final String[] FILES = new String[] { +// "src/test/resources/openaireguidelinesV4/v4_literature_all_invalid_guidelines_record.xml", + "src/test/resources/openaireguidelinesV4/v4_literature_all_guidelines_record.xml", +// "src/test/resources/openaireguidelinesV4/oai_mediarep_org_doc_2534.xml", +// "src/test/resources/openaireguidelinesV4/01_gv4.xml" + }; + + public static void main(String[] args) { + // String xmlFile = args[0]; + AbstractOpenAireProfile profile = new DataArchiveGuidelinesV2Profile(); + logger.info("Max score: " + profile.maxScore()); + Map scorePerDoc = new LinkedHashMap<>(); + DocumentBuilder builder = TestUtils.getDocumentBuilder(); + if ( builder == null ) + return; + for ( String fileName : FILES ) { + try { + logger.info("Processing \"" + fileName + "\""); + Document doc = builder.parse(new File(fileName)); + XMLApplicationProfile.ValidationResult result = profile.validate(fileName, doc); + scorePerDoc.put(fileName, result.score()); + Map results = result.results(); + for ( Map.Entry entry : results.entrySet() ) { + String key = entry.getKey(); + Guideline.Result value = entry.getValue(); + logger.debug(key + " = " + value); + if ( key.contains("Date")) { + logger.info("Warnings: " + results.get(key).warnings().toString()); + logger.info("Errors: " + results.get(key).errors().toString()); + logger.info("Result: " + key + " = " + value + "\n"); + } + } + } catch (Exception e) { + logger.error("", e); + } + } + + // Individual scores + String printout = scorePerDoc.entrySet().stream(). + map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n")); + + logger.info(printout); + + // Average Score + OptionalDouble optionalFinalScore = scorePerDoc.values().stream().mapToDouble(aDouble -> aDouble).average(); + double finalScore = (optionalFinalScore.isPresent() ? optionalFinalScore.getAsDouble() : -1 ); + + logger.info("Validation Score: " + finalScore); + } + +}