Added FAIR Data Guidelines for FAIR Accessor.

This commit is contained in:
pispis 2022-11-16 11:39:06 +02:00
parent 0fa27b4c2e
commit 59046b7b8e
12 changed files with 1534 additions and 0 deletions

View File

@ -0,0 +1,113 @@
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.COMPILED_ISO_8601_DATE_REG_EX;
public final class F2_01M 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_SPEC_1 = Builders.
forMandatoryElement("creator", ONE_TO_N)
.withSubElement(Builders.forMandatoryElement("creatorName", ONE))
.withSubElement(Builders
.forRecommendedElement("nameIdentifier")
.withRecommendedAttribute("nameIdentifierScheme")
.withRecommendedAttribute("schemeURI")
)
.withSubElement(Builders.forRecommendedRepeatableElement("affiliation"))
.build();
private static final ElementSpec F2_01M_SPEC_2 = Builders.
forMandatoryElement("title", ONE_TO_N)
.withOptionalAttribute("titleType", TITLE_TYPES)
.build();
private static final ElementSpec F2_01M_SPEC_3 = Builders.
forMandatoryElement("publisher", ONE).
build();
private static final ElementSpec F2_01M_SPEC_4 = Builders.
forMandatoryElement("date", ONE_TO_N).allowedValues(new RegexValuePredicate(COMPILED_ISO_8601_DATE_REG_EX))
// We need the publication date. So, according to the guidelines we use Issued for the date the resource is published or distributed
.withMandatoryAttribute("dateType", "Issued")
.build();
private static final ElementSpec F2_01M_SPEC_5 = Builders.
forMandatoryElement("description", ONE_TO_N).
withMandatoryAttribute("descriptionType", "Abstract").
build();
private static final ElementSpec F2_01M_SPEC_6 = Builders.
forMandatoryElement("subject", ONE_TO_N).
withOptionalAttribute("subjectScheme").
withOptionalAttribute("schemeURI").
build();
//TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1.
public static SyntheticGuideline F2_01M_1 = SyntheticGuideline.of("Creator", 2, F2_01M_SPEC_1);
public static SyntheticGuideline F2_01M_2 = SyntheticGuideline.of("Title", 2, F2_01M_SPEC_2);
public static SyntheticGuideline F2_01M_3 = SyntheticGuideline.of("Publisher", 2, F2_01M_SPEC_3);
public static SyntheticGuideline F2_01M_4 = SyntheticGuideline.of("Date", 2, F2_01M_SPEC_4);
public static SyntheticGuideline F2_01M_5 = SyntheticGuideline.of("Summary (Description with descriptionType)", 2, F2_01M_SPEC_5);
public static SyntheticGuideline F2_01M_6 = SyntheticGuideline.of("Keywords (Subject)", 2, F2_01M_SPEC_6);
private static final List<Guideline<Document>> GUIDELINES = Collections.unmodifiableList(
Arrays.asList(
F2_01M_1,
F2_01M_2,
F2_01M_3,
F2_01M_4,
F2_01M_5,
F2_01M_6
)
);
private static final Map<String, Guideline> 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() {
super("F2_01M Guideline for the OpenAIRE FAIR Guidelines for Data Repositories Profile v4");
}
@Override
public Collection<? extends Guideline<Document>> guidelines() {
return GUIDELINES;
}
/**
*
* @param guidelineName
* @return
*/
@Override
public Guideline guideline(String guidelineName) {
return GUIDELINE_MAP.get(guidelineName);
}
@Override
public int maxScore() {
return MAX_SCORE;
}
}

View File

@ -0,0 +1,76 @@
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.PIDCheckValuePredicate;
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 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_SPEC_1 = Builders.
forMandatoryElement("identifier", ONE).
// withMandatoryAttribute("identifierType", new PIDCheckValuePredicate()).
withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES).
build();
private static final ElementSpec F3_01M_SPEC_2 = Builders.
forMandatoryElement("alternateIdentifier", ONE_TO_N).
// withMandatoryAttribute("identifierType", new PIDCheckValuePredicate()).
withMandatoryAttribute("identifierType", 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_1 = SyntheticGuideline.of("Identifier", 2, F3_01M_SPEC_1);
public static SyntheticGuideline F3_01M_2 = SyntheticGuideline.of("AlternateIdentifier", 2, F3_01M_SPEC_2);
private static final List<Guideline<Document>> GUIDELINES = Collections.unmodifiableList(
Arrays.asList(
F3_01M_1,
F3_01M_2
)
);
private static final Map<String, Guideline> 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() {
super("F3_01M Guideline for the OpenAIRE FAIR Guidelines for Data Repositories Profile v4");
}
@Override
public Collection<? extends Guideline<Document>> guidelines() {
return GUIDELINES;
}
/**
*
* @param guidelineName
* @return
*/
@Override
public Guideline guideline(String guidelineName) {
return GUIDELINE_MAP.get(guidelineName);
}
@Override
public int maxScore() { return MAX_SCORE; }
}

View File

@ -0,0 +1,737 @@
package eu.dnetlib.validator2.validation.guideline.openaire;
import eu.dnetlib.validator2.engine.Status;
import eu.dnetlib.validator2.validation.XMLApplicationProfile;
import eu.dnetlib.validator2.validation.guideline.*;
//import eu.dnetlib.validator2.validation.utils.PIDCheckValuePredicate;
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_Data_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<Guideline<Document>> 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<String, Guideline> 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_Data_GuidelinesProfile() {
super("OpenAIRE FAIR Guidelines for Data Repositories Profile");
}
@Override
public Collection<? extends Guideline<Document>> 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<Document> {
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<String, Result> 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<String> warnings() { return null; }
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}
class F2_01M_SPEC extends AbstractGuideline<Document> {
public F2_01M_SPEC() {
super("Rich metadata is provided to allow discovery", 2*6);
}
@Override
public Result validate(String id, Document t) {
F2_01M profile = new F2_01M();
// <></>ODO: iterate over results and build one Guideline.Result
try {
System.out.println("\nRich metadata is provided to allow discovery");
XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t);
Map<String, Result> results = res_F.results();
int MaxScoreF2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
// System.out.println("Max score DataValidator(%): " + res_F.score());
// System.out.println("Weight FAIRG: " + getWeight());
// System.out.println("Max score F2_01M_SPEC: " + MaxScoreF2_01M_SPEC);
// System.out.println("\n\n\n\n");
for (Map.Entry entry : results.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
return getResult(MaxScoreF2_01M_SPEC);
// 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<String> warnings() {
return null;
}
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}
class F3_01M_SPEC extends AbstractGuideline<Document> {
public F3_01M_SPEC() { super("Metadata includes the identifier for the data", 2*2); }
@Override
public Result validate(String id, Document t) {
F3_01M profile = new F3_01M();
// <></>ODO: 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<String, Result> results = res_F.results();
// int MaxScoreF3_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
int MaxScoreF3_01M_SPEC;
if ((int) res_F.score() == 50 ) {
MaxScoreF3_01M_SPEC = (int) (((2*res_F.score())*getWeight())/100);
}
else {
MaxScoreF3_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
}
// System.out.println("% score DataValidator: " + res_F.score());
// System.out.println("Weight FAIRG: " + getWeight());
// System.out.println("Max score F3_01M_SPEC: " + MaxScoreF3_01M_SPEC);
// System.out.println("\n\n\n\n");
for (Map.Entry entry : results.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
return getResult(MaxScoreF3_01M_SPEC);
// 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<String> warnings() {
return null;
}
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}
class I2_01M_SPEC extends AbstractGuideline<Document> {
public I2_01M_SPEC() { super("Metadata uses FAIR-compliant vocabularies", 5*2); }
@Override
public Result validate(String id, Document t) {
I2_01M profile = new I2_01M();
// <></>ODO: iterate over results and build one Guideline.Result
try {
System.out.println("\nMetadata uses FAIR-compliant vocabularies");
XMLApplicationProfile.ValidationResult res_F = profile.validate(id, t);
Map<String, Result> results = res_F.results();
// int MaxScoreI2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
int MaxScoreI2_01M_SPEC;
if ((int) res_F.score() == 50 ) {
MaxScoreI2_01M_SPEC = (int) (((2*res_F.score())*getWeight())/100);
}
else {
MaxScoreI2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
}
// System.out.println("% score DataValidator: " + res_F.score());
// System.out.println("Weight FAIRG: " + getWeight());
// System.out.println("Max score I2_01M_SPEC: " + MaxScoreI2_01M_SPEC);
// System.out.println("\n\n\n\n");
for (Map.Entry entry : results.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
return getResult(MaxScoreI2_01M_SPEC);
// 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<String> warnings() {
return null;
}
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}
class R1_01M_SPEC extends AbstractGuideline<Document> {
public R1_01M_SPEC() { super("Plurality of accurate and relevant attributes are provided to allow reuse", 3*4); }
@Override
public Result validate(String id, Document t) {
R1_01M profile = new R1_01M();
// <></>ODO: 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<String, Result> results = res_F.results();
int MaxScoreR1_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
// System.out.println("% score DataValidator: " + res_F.score());
// System.out.println("Weight FAIRG: " + getWeight());
// System.out.println("Max score R1_01M_SPEC: " + MaxScoreR1_01M_SPEC);
// System.out.println("\n\n\n\n");
for (Map.Entry entry : results.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
return getResult(MaxScoreR1_01M_SPEC);
// 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 = (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<String> warnings() {
return null;
}
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}
class R1_2_01M_SPEC extends AbstractGuideline<Document> {
public R1_2_01M_SPEC() { super("Metadata includes provenance information according to a cross-community language", 2*5); }
@Override
public Result validate(String id, Document t) {
R1_2_01M profile = new R1_2_01M();
// <></>ODO: 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<String, Result> results = res_F.results();
int MaxScoreR1_2_01M_SPEC = (int) ((res_F.score()*getWeight())/100);
// System.out.println("% score DataValidator: " + res_F.score());
// System.out.println("Weight FAIRG: " + getWeight());
// System.out.println("Max score R1_2_01M_SPEC: " + MaxScoreR1_2_01M_SPEC);
// System.out.println("\n\n\n\n");
for (Map.Entry entry : results.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
return getResult(MaxScoreR1_2_01M_SPEC);
// 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<String> warnings() {
return null;
}
@Override
public Iterable<String> errors() {
return null;
}
@Override
public String internalError() {
return null;
}
};
}
}

View File

@ -0,0 +1,66 @@
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 extends AbstractOpenAireProfile {
private static final ElementSpec I2_01M_SPEC_1 = Builders.
forMandatoryElement("subject", ONE_TO_N).
withOptionalAttribute("subjectScheme").
withOptionalAttribute("schemeURI").
build();
private static final ElementSpec I2_01M_SPEC_2 = Builders.
// forMandatoryElement("rights", ONE_TO_N).
// withMandatoryAttribute("rightsURI").
// build();
forMandatoryIfApplicableElement("rights", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("rights")).
atPosition(ElementPosition.FIRST).
withMandatoryAttribute("rightsURI").
build();
//TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1.
public static SyntheticGuideline I2_01M_1 = SyntheticGuideline.of("Subject", 5, I2_01M_SPEC_1);
public static SyntheticGuideline I2_01M_2 = SyntheticGuideline.of("Rights", 5, I2_01M_SPEC_2);
private static final List<Guideline<Document>> GUIDELINES = Collections.unmodifiableList(
Arrays.asList(
I2_01M_1,
I2_01M_2
)
);
private static final Map<String, Guideline> 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() {
super("I2_01M Guideline for the OpenAIRE FAIR Guidelines for Data Repositories Profile v4");
}
@Override
public Collection<? extends Guideline<Document>> guidelines() {
return GUIDELINES;
}
/**
*
* @param guidelineName
* @return
*/
@Override
public Guideline guideline(String guidelineName) {
return GUIDELINE_MAP.get(guidelineName);
}
@Override
public int maxScore() { return MAX_SCORE; }
}

View File

@ -0,0 +1,84 @@
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 R1_01M 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 ElementSpec R1_01M_SPEC_1 = Builders.
forMandatoryElement("resourceType", ONE).
withMandatoryAttribute("resourceTypeGeneral", RELATED_RESOURCE_GENERAL_TYPES).
build();
private static final ElementSpec R1_01M_SPEC_2 = Builders.
forMandatoryElement("format", ONE).
build();
private static final ElementSpec R1_01M_SPEC_3 = Builders. // With very low weight
forMandatoryElement("description", ONE_TO_N).
withMandatoryAttribute("descriptionType", "Methods").
build();
private static final ElementSpec R1_01M_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_1 = SyntheticGuideline.of("ResourceType", 3, R1_01M_SPEC_1);
public static SyntheticGuideline R1_01M_2 = SyntheticGuideline.of("Format", 3, R1_01M_SPEC_2);
public static SyntheticGuideline R1_01M_3 = SyntheticGuideline.of("Description", 3, R1_01M_SPEC_3);
public static SyntheticGuideline R1_01M_4 = SyntheticGuideline.of("Size", 3, R1_01M_SPEC_4);
private static final List<Guideline<Document>> GUIDELINES = Collections.unmodifiableList(
Arrays.asList(
R1_01M_1,
R1_01M_2,
R1_01M_3,
R1_01M_4
)
);
private static final Map<String, Guideline> 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() {
super("F2_01M Guideline for the OpenAIRE FAIR Guidelines for Data Repositories Profile v4");
}
@Override
public Collection<? extends Guideline<Document>> guidelines() {
return GUIDELINES;
}
/**
*
* @param guidelineName
* @return
*/
@Override
public Guideline guideline(String guidelineName) {
return GUIDELINE_MAP.get(guidelineName);
}
@Override
public int maxScore() {
return MAX_SCORE;
}
}

View File

@ -0,0 +1,127 @@
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 R1_2_01M 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[] DATE_TYPES = {
"Accepted", "Available", "Copyrighted", "Collected", "Created", "Issued", "Submitted", "Updated", "Valid"
};
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 ElementSpec R1_2_01M_SPEC_1 = Builders.
forMandatoryElement("creator", ONE_TO_N)
.withSubElement(Builders.forMandatoryElement("creatorName", ONE))
.withSubElement(Builders
.forRecommendedElement("nameIdentifier")
.withMandatoryAttribute("nameIdentifierScheme")
.withMandatoryAttribute("schemeURI")
)
.withSubElement(Builders.forRecommendedRepeatableElement("affiliation"))
.build();
private static final ElementSpec R1_2_01M_SPEC_2 = Builders.
forMandatoryElement("contributor", ONE_TO_N).
withMandatoryAttribute("contributorType", CONTRIBUTOR_TYPES).
withSubElement(Builders
.forMandatoryIfApplicableElement("contributorName", ONE, AbstractOpenAireProfile.elementIsPresent("contributor"))
).
withMandatoryAttribute("nameIdentifier", CONTRIBUTOR_NAME_IDENTIFIER_TYPES).
withMandatoryAttribute("affiliation").
build();
private static final ElementSpec R1_2_01M_SPEC_3 = Builders.
forMandatoryElement("date", ONE_TO_N).
withMandatoryAttribute("dateType", DATE_TYPES).
build();
private static final ElementSpec R1_2_01M_SPEC_4 = Builders.
forMandatoryElement("version", ONE).
build();
private static final ElementSpec R1_2_01M_SPEC_5 = Builders.
forMandatoryElement("relatedIdentifier", ONE_TO_N).
withMandatoryAttribute("relatedIdentifierType", IDENTIFIER_TYPES).
withMandatoryAttribute("relationType", RELATION_TYPES_LIMITED).
build();
//TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1.
public static SyntheticGuideline R1_2_01M_1 = SyntheticGuideline.of("Creator", 2, R1_2_01M_SPEC_1);
public static SyntheticGuideline R1_2_01M_2 = SyntheticGuideline.of("Contributor", 2, R1_2_01M_SPEC_2);
public static SyntheticGuideline R1_2_01M_3 = SyntheticGuideline.of("Date", 2, R1_2_01M_SPEC_3);
public static SyntheticGuideline R1_2_01M_4 = SyntheticGuideline.of("Version", 2, R1_2_01M_SPEC_4);
public static SyntheticGuideline R1_2_01M_5 = SyntheticGuideline.of("RelatedIdentifier", 2, R1_2_01M_SPEC_5);
private static final List<Guideline<Document>> GUIDELINES = Collections.unmodifiableList(
Arrays.asList(
R1_2_01M_1,
R1_2_01M_2,
R1_2_01M_3,
R1_2_01M_4,
R1_2_01M_5
)
);
private static final Map<String, Guideline> 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() {
super("R1_2_01M Guideline for the OpenAIRE FAIR Guidelines for Data Repositories Profile v4");
}
@Override
public Collection<? extends Guideline<Document>> guidelines() {
return GUIDELINES;
}
/**
*
* @param guidelineName
* @return
*/
@Override
public Guideline guideline(String guidelineName) {
return GUIDELINE_MAP.get(guidelineName);
}
@Override
public int maxScore() {
return MAX_SCORE;
}
}

View File

@ -0,0 +1,20 @@
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,
1 IGSN
2 QID
3 ARK
4 IVOA
5 CAS RN
6 RRID
7 URL
8 RInChi
9 ERM
10 ISO 27729:2012 ISNI
11 EC Number
12 PURL
13 LSID
14 TFClass Schema
15 InChI
16 w3id
17 Handle
18 DOI
19 ORCID iD
20 arXiv

View File

@ -0,0 +1,56 @@
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_Data_GuidelinesProfile;
import groovy.xml.DOMBuilder;
import org.w3c.dom.Document;
import java.io.FileReader;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Test_FAIR {
private static final String[] FILES = new String[]{
// "/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml",
// "/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml",
// "/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/cris.vtt.fi/01_data.xml",
// "/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/cris.vtt.fi/02_data.xml",
// "/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/cris.vtt.fi/04_data.xml",
"/Users/lpisp/Documents/OpenAIRE/MaDgIK/validator-engine/src/test/resources/openaireguidelinesV3/cris.vtt.fi/03_data.xml",
};
public static void main(String[] args) {
// String xmlFile = args[0];
FAIR_Data_GuidelinesProfile profile = new FAIR_Data_GuidelinesProfile();
System.out.println("Max score: " + profile.maxScore());
Map<String, Double> scorePerDoc = new LinkedHashMap<>();
for (String file : FILES) {
try {
System.out.println("Processing " + file);
// Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
Document doc = DOMBuilder.parse(new FileReader(file), false, true, true);
XMLApplicationProfile.ValidationResult result = profile.validate(file, doc);
scorePerDoc.put(file, result.score());
Map<String, Guideline.Result> results = result.results();
for (Map.Entry entry : results.entrySet()) {
if (!entry.getValue().toString().contains("eu.dnetlib.validator2")) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(e);
e.printStackTrace();
}
System.out.println("\n\n\n\n");
}
System.out.println("\n\n\n\n");
String printout = scorePerDoc.entrySet().stream().
map(entry -> entry.getValue() + ": " + entry.getKey()).collect(Collectors.joining("\n"));
System.out.println(printout);
}
}

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd http://www.openarchives.org/OAI/2.0/oai-identifier">
<responseDate>2021-02-04T17:00:52Z</responseDate>
<request identifier="oai:cris.vtt.fi:publications/b314f49f-a197-4eb4-bdec-86a26b266506" metadataPrefix="oai_dc" verb="GetRecord">https://cris.vtt.fi/ws/oai</request>
<GetRecord>
<record>
<header>
<identifier>oai:cris.vtt.fi:publications/b314f49f-a197-4eb4-bdec-86a26b266506</identifier>
<datestamp>2020-09-17T06:18:44Z</datestamp>
<setSpec>publications:all</setSpec>
<setSpec>publications:year2017</setSpec>
</header>
<metadata>
<oai_dc:dc xmlns="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:ns2="http://purl.org/dc/terms/">
<title xml:lang="eng">Report on challenges for SCIs:Smart Resilience Indicators for Smart Critical Infrastructures Deliverable D2.2</title>
<creator>Walther, G.</creator>
<creator>Jovanovic, M.</creator>
<creator>Vollmer, M.</creator>
<creator>Desmond, G.</creator>
<creator>Choudhary, A.</creator>
<creator>Auerkari, Pertti</creator>
<creator>Tuurna, Satu</creator>
<creator>Pohja, Rami</creator>
<creator>Koivisto, Raija</creator>
<creator>Molarius, Riitta</creator>
<creator>et al.,</creator>
<subject>smart critical infrastructure</subject>
<subject>challenge</subject>
<subject>threat</subject>
<subject>resilience</subject>
<subject>/fi/minedu/virta/publicationtypes/d4</subject>
<subject>D4 Report</subject>
<subject>/fi/minedu/virta/openaccess/1</subject>
<subject>1 Open Access</subject>
<subject>/fi/minedu/virta/scienceareas/212</subject>
<subject>212 Construction engineering, municipal and structural engineering</subject>
<description xml:lang="eng">The report discusses the challenges posed by four types of threats -terrorist attacks, cyber attacks, extreme weather and social unrest- on the SmartResilience case studies. The way this analysis was conducted was by assessing these threats using a 5x5 framework matrix. The two axes of the matrix were phases (understand risks, anticipate/prepare, absorb/withstand, respond/recover, adapt/learn) and dimensions (system/physical, information/data, organizational/business, societal/political, cognitive/decision-making). Each individual matrix block was discussed by subject experts who identified specific challenges and implications for each matrix element and rated its relevance (high, medium, low). In terms of the results, the system/physical dimension received the highest number of important challenges. Overall, the most important singular element was to understand risks in the organizational/business dimension. The least importance was attributed to the adapt/learn phase.</description>
<publisher>European Commission EC</publisher>
<date>2017</date>
<type>book</type>
<identifier>https://cris.vtt.fi/en/publications/b314f49f-a197-4eb4-bdec-86a26b266506</identifier>
<identifier>https://zenodo.org/record/438644#.WmXxTmdPrDA</identifier>
<source>Walther , G , Jovanovic , M , Vollmer , M , Desmond , G , Choudhary , A , Auerkari , P , Tuurna , S , Pohja , R , Koivisto , R , Molarius , R &amp; et al. 2017 , Report on challenges for SCIs : Smart Resilience Indicators for Smart Critical Infrastructures Deliverable D2.2 . European Commission EC . &lt; https://zenodo.org/record/438644#.WmXxTmdPrDA &gt;</source>
<language>eng</language>
<relation>info:eu-repo/grantAgreement/EC/H2020/700621</relation>
<rights>info:eu-repo/semantics/openAccess</rights>
</oai_dc:dc>
</metadata>
</record>
</GetRecord>
</OAI-PMH>

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<resource xmlns="http://datacite.org/schema/kernel-4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4.1/metadata.xsd">
<identifier identifierType="DOI">10.14749/1629884021</identifier>
<creators>
<creator>
<creatorName nameType="Personal">Struwig, Jare</creatorName>
</creator>
<creator>
<creatorName nameType="Personal">Roberts, Benjamin</creatorName>
</creator>
<creator>
<creatorName nameType="Organizational">Human Sciences Research Council</creatorName>
</creator>
</creators>
<titles>
<title xml:lang="en">South African Social Attitudes Survey (SASAS) 2018: Questionnaire 1 - All provinces</title>
</titles>
<publisher>HSRC - Human Science Research Council SA</publisher>
<publicationYear>2021</publicationYear>
<resourceType resourceTypeGeneral="Dataset"/>
<contributors>
<contributor contributorType="Producer">
<contributorName nameType="Organizational">Human Sciences Research Council</contributorName>
</contributor>
</contributors>
<dates>
<date dateType="Available">2021-04-04</date>
<date dateType="Collected">2018</date>
<date dateType="Collected">2018/2019</date>
</dates>
<version>1.0</version>
<rightsList>
<rights xml:lang="en">Other</rights>
<rights xml:lang="en">By accessing the data, you give assurance that The data and documentation will not be duplicated, redistributed or sold without prior approval from the rights holder. The data will be used for scientific research or educational purposes only. The data will only be used for the specified purpose. If it is used for another purpose the additional purpose will be registered. Redundant data files will be destroyed. The confidentiality of individuals/organisations in the data will be preserved at all times. No attempt will be made to obtain or derive information from the data to identify individuals/organisations. The HSRC will be acknowledged in all published and unpublished works based on the data according to the provided citation. The HSRC will be informed of any books, articles, conference papers, theses, dissertations, reports or other publications resulting from work based in whole or in part on the data and documentation. For archiving and bibliographic purposes an electronic copy of all reports and publications based on the requested data will be sent to the HSRC. To offer for deposit into the HSRC Data Collection any new data sets which have been derived from or which have been created by the combination of the data supplied with other data. The data team bears no responsibility for use of the data or for interpretations or inferences based upon such uses. Failure to comply with the End User License may result in sanctions being imposed.</rights>
</rightsList>
<descriptions>
<description xml:lang="en" descriptionType="Abstract">&lt;p&gt;Description:
Topics covered in the questionnaire are: democracy and governance, national identity and pride, intergroup relations, immigrant related attitudes and behaviour, education, moral issues, fatherhood, personal wellbeing index, poverty, taxation, crime and safety, batho pele, voting, respondent characteristics, household characteristics, personal and household income.
Of the targeted population of 3500, 2885 responses (82.4%) was realized.
The data set for dissemination contains 2885 cases and 484 variables.
&lt;/p&gt;&lt;p&gt;Abstract:
The primary objective of the South African Social Attitudes Survey (SASAS) is to design, develop and implement a conceptually and methodologically robust study of changing social attitudes and values in South Africa. In meeting this objective, the HSRC is carefully and consistently monitoring and providing insight into changes in attitudes among various socio-demographic groupings. SASAS is intended to provide a unique long-term account of the social fabric of modern South Africa, and of how it's changing political and institutional structures interact over time with changing social attitudes and values.
The survey is conducted annually and the 2018 survey is the sixteenth wave in the series.
The core module will remain constant for subsequent annual SASAS surveys with the aim of monitoring change and continuity in a variety of socio-economic and socio-political variables. In addition, a number of themes will be accommodated in rotation. The rotating element of the survey consists of two or more topic-specific modules in each round of interviewing and is directed at measuring a range of policy and academic concerns and issues that require more detailed examination at a specific point in time than the multi-topic core module would permit. This dataset focuses specifically on democracy and governance, national identity and pride, intergroup relations, immigrant related attitudes and behaviour, education, moral issues, personal wellbeing index, crime and security, poverty, batho pele, voting, respondent characteristics, household characteristics, personal and household income variables.
&lt;/p&gt;</description>
<description xml:lang="en" descriptionType="Methods">Face-to-face interview</description>
<description xml:lang="en" descriptionType="Methods">National Population: Adults (aged 16 and older).</description>
<description xml:lang="en" descriptionType="Methods">SASAS has been designed to yield a representative sample of 3500 adult South African citizens aged 16 and older (with no upper age limit), in households geographically spread across the country's nine provinces. The sampling frame used for the survey was based on the 2011 census and a set of small area layers (SALs). Estimates of the population numbers for various categories of the census variables were obtained per SAL. In this sampling frame special institutions (such as hospitals, military camps, old age homes, schools and university hostels), recreational areas, industrial areas and vacant SALs were excluded prior to the drawing of the sample.
Small area layers (SALs) were used as primary sampling units and the estimated number of dwelling units (taken as visiting points) in the SALs as secondary sampling units. In the first sampling stage the primary sampling units (SALs) were drawn with probability proportional to size, using the estimated number of dwelling units in an SAL as measure of size. The dwelling units as secondary sampling units were defined as separate (non-vacant) residential stands, addresses, structures, flats, homesteads, etc. In the second sampling stage a predetermined number of individual dwelling units (or visiting points) were drawn with equal probability in each of the drawn dwelling units. Finally, in the third sampling stage a person was drawn with equal probability from all 16 year and older persons in the drawn dwelling units.
Three explicit stratification variables were used, namely province, geographic type and majority population group. As stated earlier, within each stratum, the allocated number of primary sampling units (which could differ between different strata) was drawn using proportional to size probability sampling with the estimated number of dwelling units in the primary sampling units as measure of size. In each of these drawn primary sampling units, seven dwelling units were drawn. This resulted in a sample of 2885 individuals.
A list of the 500 drawn SALs were given to geographic information specialists and maps were then created for each of the 500 areas, indicating certain navigational beacons such as schools, roads churches etc.
Selection of individuals: For each of the SASAS samples interviewers visited each visiting point drawn in the SALs (PSU) and listed all eligible persons for inclusion in the sample, that is all persons currently aged 16 years or older and resident at the selected visiting point. The interviewer then selected one respondent using a random selection procedure based on a Kish grid.</description>
</descriptions>
<geoLocations>
<geoLocation>
<geoLocationPlace>South Africa</geoLocationPlace>
</geoLocation>
</geoLocations>
<fundingReferences>
<fundingReference>
<funderName>Human Sciences Research Council</funderName>
</fundingReference>
</fundingReferences>
</resource>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://datacite.org/schema/kernel-4" xsi:schemaLocation="http://datacite.org/schema/kernel-4 http://schema.datacite.org/meta/kernel-4.1/metadata.xsd">
<identifier identifierType="DOI">10.5281/ZENODO.3855313</identifier>
<creators>
<creator>
<creatorName>Malavazos A E</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
<creator>
<creatorName>Capitanio G</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
<creator>
<creatorName>Chessa M</creatorName>
<affiliation>Pediatric and Adult Congenital Heart Centre, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Matelloni IA</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
<creator>
<creatorName>Milani V</creatorName>
<affiliation>Scientific Directorate, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
<creator>
<creatorName>Stella E</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Al Kassem LF</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Sironi F</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Boveri S</creatorName>
<affiliation>Scientific Directorate, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
<creator>
<creatorName>Giamberti A</creatorName>
<affiliation>Pediatric and Adult Congenital Heart Centre, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Masocco M</creatorName>
<affiliation>Italian National Health Institute, Rome, Italy</affiliation>
</creator>
<creator>
<creatorName>Ranucci M</creatorName>
<affiliation>Department of Cardiothoracic, Vascular Anesthesia and Intensive Care, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Menicanti L</creatorName>
<affiliation>Department of Cardiac Surgery, I.R.C.C.S. Policlinico San Donato, San Donato Milanese, Italy</affiliation>
</creator>
<creator>
<creatorName>Morricone L</creatorName>
<affiliation>Clinical Nutrition and Cardiovascular Prevention Unit and High Speciality Center for Dietetics, Nutritional Education and Cardiometabolic Prevention, I.R.C.C.S.Policlinico San Donato, San Donato Milanese, Italy.</affiliation>
</creator>
</creators>
<titles>
<title>Data set from the article Malavazos AE, Capitanio G, Chessa M, Matelloni IA, Milani V, Stella E, Al Kassem LF, Sironi F, Boveri S, Giamberti A, Masocco M, Ranucci M, Menicanti L, Morricone L. Body mass index stratification in hospitalized Italian adults with congenital heart disease in relation to complexity, diagnosis, sex and age. Nutr Metab Cardiovasc Dis. 2019 Apr;29(4):367-377. doi: 10.1016/j.numecd.2019.01.009. Epub 2019 Jan 29. PMID: 30795994.</title>
</titles>
<publisher>Zenodo</publisher>
<publicationYear>2020</publicationYear>
<subjects>
<subject>Adult with congenital heart disease (ACHD);</subject>
<subject>Body mass index (BMI);</subject>
<subject>Italian population;</subject>
</subjects>
<dates>
<date dateType="Issued">2020-05-26</date>
</dates>
<resourceType resourceTypeGeneral="Dataset"/>
<alternateIdentifiers>
<alternateIdentifier alternateIdentifierType="url">https://zenodo.org/record/3855313</alternateIdentifier>
</alternateIdentifiers>
<relatedIdentifiers>
<relatedIdentifier relatedIdentifierType="DOI" relationType="IsVersionOf">10.5281/zenodo.3855312</relatedIdentifier>
<relatedIdentifier relatedIdentifierType="URL" relationType="IsPartOf">https://zenodo.org/communities/irccspoliclinicosandonato</relatedIdentifier>
</relatedIdentifiers>
<rightsList>
<rights rightsURI="info:eu-repo/semantics/restrictedAccess">Restricted Access</rights>
</rightsList>
<descriptions>
<description descriptionType="Abstract">&lt;p&gt;The data set refers on the article Malavazos AE, Capitanio G, Chessa M, Matelloni IA, Milani V, Stella E, Al Kassem LF, Sironi F, Boveri S, Giamberti A, Masocco M, Ranucci M, Menicanti L, Morricone L. Body mass index stratification in hospitalized Italian adults with congenital heart disease in relation to complexity, diagnosis, sex and age. Nutr Metab Cardiovasc Dis. 2019 Apr;29(4):367-377. doi: 10.1016/j.numecd.2019.01.009. Epub 2019 Jan 29. PMID: 30795994.&lt;/p&gt;
&lt;p&gt;This is the abstract:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Background and aims:&amp;nbsp;&lt;/strong&gt;Adults with congenital heart disease (ACHD) are at risk of overweight and obesity, two major health problems, though underweight can be a negative prognostic factor too. Awareness of the body mass index (BMI) in ACHD is very limited. The present study describes the use and prevalence of BMI in Italian symptomatic hospitalized ACHD patients in relation to complexity by Bethesda system classification, diagnosis, sex and age.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Methods and results:&amp;nbsp;&lt;/strong&gt;We classified 1388 ACHD patients, aged 18-69 years, on the basis of their BMI, and compared them to the Italian reference population. In our total ACHD population we found a significantly higher prevalence of underweight compared to the Italian reference population (6.34% vs 3.20%). ACHD women were more underweight than men. Underweight decreased with age. Overweight was significantly less frequent in the total ACHD population (26.73% compared to 31.70%) in the Italian reference population. Men were more likely to be overweight than women. In statistical terms obesity was similar in the Italian reference population (10.50%) and our ACHD population (9.58%). Both overweight and obesity increased with age. Results were comparable using a diagnostic anatomical-functional classification and the Bethesda system classification.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusions:&amp;nbsp;&lt;/strong&gt;In our cohort of ACHD the prevalence of underweight was double that of the Italian reference population. The prevalence of overweight was lower, while obesity was similar. Since BMI does not account for differences in body fat distribution, a future aim will be to quantify the visceral component of the adipose tissue in ACHD patients and examine their body composition in order to reflect their risk of acquired cardiovascular disease better, and either to maintain or achieve an adequate visceral component.&lt;/p&gt;</description>
</descriptions>
</resource>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mml="http://www.w3.org/1998/Math/MathML" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2022-02-24T06:44:30Z</responseDate>
<request verb="GetRecord" metadataPrefix="oai_dc" identifier="oai:hindawi.com:10.1155/2011/391971">http://oaipmh.hindawi.com/oai-pmh/oai.aspx</request>
<GetRecord>
<record>
<header>
<identifier>oai:hindawi.com:10.1155/2011/391971</identifier>
<datestamp>2014-12-02T09:11:48Z</datestamp>
<setSpec>HINDAWI.AAA:2011</setSpec>
</header>
<metadata>
<oai_dc:dc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:mml="http://www.w3.org/1998/Math/MathML" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<dc:title>
Existence of Positive Solutions for a Class of Delay Fractional Differential Equations with Generalization to N-Term
</dc:title>
<dc:creator>Azizollah Babakhani</dc:creator>
<dc:creator>Dumitru Baleanu</dc:creator>
<dc:description>
We established the existence of a positive solution of nonlinear fractional differential equations L(D)[x(t)x(0)]=f(t,xt), t∈(0,b] with finite delay x(t)=ω(t), t∈[−τ,0], where limt→0f(t,xt)=+∞, that is, f is singular at t=0 and xt∈C([−τ,0],≥0). The operator of L(D) involves the Riemann-Liouville fractional derivatives. In this problem, the initial conditions with fractional order and some relations among them were considered. The analysis rely on the alternative of the Leray-Schauder fixed point theorem, the Banach fixed point theorem, and the Arzela-Ascoli theorem in a cone.
</dc:description>
<dc:publisher>Abstract and Applied Analysis</dc:publisher>
<dc:date>2011</dc:date>
<dc:type>Research Article</dc:type>
<dc:identifier>https://doi.org/10.1155/2011/391971</dc:identifier>
<dc:language>en</dc:language>
<dc:rights>
Copyright © 2011 Azizollah Babakhani and Dumitru Baleanu.
</dc:rights>
</oai_dc:dc>
</metadata>
</record>
</GetRecord>
</OAI-PMH>