From 959f81dc73a1407fe73c94d23923fe90246db772 Mon Sep 17 00:00:00 2001 From: Antonis Lempesis Date: Fri, 16 Sep 2022 13:56:52 +0300 Subject: [PATCH] initial commit --- build.gradle | 51 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58702 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 183 + gradlew.bat | 100 + notes.txt | 127 + samples/openaire2+/GetRecord.xml | 41 + samples/openaire2+/Identify.xml | 1 + samples/openaire2+/ListRecords.xml | 143 + samples/openaire3/GetRecord.xml | 67 + samples/openaire3/ListIdentifiers.xml | 2 + samples/openaire3/ListRecords.xml | 1495 ++ samples/openaire3/identify.xml | 36 + .../dnetlib/validator2/engine/CrisClass.java | 85 + .../eu/dnetlib/validator2/engine/Helper.java | 304 + .../dnetlib/validator2/engine/Predicates.java | 89 + .../validator2/engine/PropertyDriven.java | 10 + .../dnetlib/validator2/engine/Reporter.java | 40 + .../eu/dnetlib/validator2/engine/Rule.java | 11 + .../validator2/engine/RuleBuilder.java | 10 + .../validator2/engine/RuleContext.java | 27 + .../validator2/engine/RuleDiagnostics.java | 11 + .../dnetlib/validator2/engine/RuleEngine.java | 22 + .../engine/RuleEvaluationException.java | 14 + .../validator2/engine/RuleProperty.java | 10 + .../eu/dnetlib/validator2/engine/Status.java | 7 + .../engine/builtins/AbstractRuleBuilder.java | 20 + .../engine/builtins/AlwaysErrRule.java | 9 + .../engine/builtins/AlwaysFailRule.java | 7 + .../engine/builtins/AlwaysSucceedRule.java | 8 + .../validator2/engine/builtins/AndRule.java | 12 + .../engine/builtins/ConditionalRule.java | 31 + .../engine/builtins/ForwardingRule.java | 24 + .../engine/builtins/SimpleContext.java | 9 + .../engine/builtins/SimpleRule.java | 39 + .../builtins/StandardBooleanRuleProperty.java | 34 + ...dardCrisClassXMLContextWithVocabulary.java | 28 + .../builtins/StandardFieldsProperty.java | 23 + .../builtins/StandardLongRuleProperty.java | 34 + .../StandardNodeListActionProperty.java | 150 + .../StandardRegularExpressionProperty.java | 29 + .../engine/builtins/StandardRuleContext.java | 23 + .../builtins/StandardRuleDiagnostics.java | 51 + .../engine/builtins/StandardRuleProperty.java | 51 + .../builtins/StandardTermsProperty.java | 26 + .../engine/builtins/StandardXMLContext.java | 35 + .../StandardXMLContextWithCardinality.java | 46 + ...andardXMLContextWithNotConfusedFields.java | 29 + ...andardXMLContextWithRegularExpression.java | 29 + .../StandardXMLContextWithVocabulary.java | 35 + .../StandardXPathExpressionProperty.java | 27 + .../engine/builtins/XMLCardinalityRule.java | 67 + .../builtins/XMLCrisClassVocabularyRule.java | 80 + .../engine/builtins/XMLFieldExistsRule.java | 64 + .../builtins/XMLNotConfusedFieldsRule.java | 89 + .../builtins/XMLRegularExpressionRule.java | 65 + .../validator2/engine/builtins/XMLRule.java | 49 + .../engine/builtins/XMLValidURLRule.java | 58 + .../engine/builtins/XMLVocabularyRule.java | 82 + .../builtins/XPathExpressionHelper.java | 104 + .../engine/contexts/BooleanRuleProperty.java | 11 + .../engine/contexts/CardinalityContext.java | 33 + .../contexts/CrisClassSchemeContext.java | 12 + .../engine/contexts/FieldsProperty.java | 9 + .../engine/contexts/LongRuleProperty.java | 11 + .../engine/contexts/NodeListAction.java | 9 + .../contexts/NodeListActionProperty.java | 7 + .../engine/contexts/NodeListContext.java | 10 + .../contexts/NotConfusedFieldsContext.java | 11 + .../contexts/RegularExpressionContext.java | 11 + .../contexts/RegularExpressionProperty.java | 10 + .../engine/contexts/TermsProperty.java | 9 + .../engine/contexts/VocabularyContext.java | 15 + .../engine/contexts/XMLContext.java | 6 + .../contexts/XMLContextWithCardinality.java | 4 + .../XMLContextWithNotConfusedFields.java | 4 + .../XMLContextWithRegularExpression.java | 4 + .../contexts/XMLContextWithVocabulary.java | 4 + ...LCrisClassSchemeContextWithVocabulary.java | 4 + .../contexts/XPathExpressionContext.java | 10 + .../contexts/XPathExpressionProperty.java | 13 + .../validation/StandardValidationResult.java | 34 + .../validator2/validation/Validator.java | 16 + .../validation/XMLApplicationProfile.java | 39 + .../guideline/AbstractGuideline.java | 22 + .../validation/guideline/AttributeSpec.java | 8 + .../validation/guideline/Builders.java | 429 + .../validation/guideline/Cardinality.java | 31 + .../guideline/CompilationResult.java | 24 + .../validation/guideline/ElementPosition.java | 14 + .../validation/guideline/ElementSpec.java | 27 + .../guideline/ElementSpecCompiler.java | 621 + .../validation/guideline/Guideline.java | 35 + .../guideline/GuidelineEvaluation.java | 164 + .../validation/guideline/NodeSpec.java | 20 + .../guideline/RequirementLevel.java | 11 + .../validation/guideline/RuleEvaluator.java | 10 + .../validation/guideline/StandardResult.java | 78 + .../guideline/SyntheticGuideline.java | 92 + .../validation/guideline/SyntheticRule.java | 11 + .../openaire/AbstractOpenAireProfile.java | 82 + .../DataArchiveGuidelinesV2Profile.java | 320 + .../LiteratureGuidelinesV3Profile.java | 298 + .../LiteratureGuidelinesV4Profile.java | 513 + .../openaire/cris/AbstractCrisProfile.java | 105 + .../cris/CrisEquipmentV111Profile.java | 54 + .../openaire/cris/CrisEventV111Profile.java | 80 + .../openaire/cris/CrisFundingV111Profile.java | 82 + .../openaire/cris/CrisOrgUnitV111Profile.java | 50 + .../openaire/cris/CrisPatentV111Profile.java | 118 + .../openaire/cris/CrisPersonV111Profile.java | 112 + .../openaire/cris/CrisProductV111Profile.java | 135 + .../openaire/cris/CrisProjectV111Profile.java | 138 + .../cris/CrisPublicationV111Profile.java | 225 + .../openaire/cris/CrisServiceV111Profile.java | 72 + .../task/AbstractValidationTask.java | 38 + .../task/ExecutorBasedValidationTask.java | 56 + .../validation/task/RuleEvaluationResult.java | 45 + .../validation/task/ValidationTask.java | 23 + .../validation/task/ValidationTaskOutput.java | 9 + .../validation/task/ValidatorDiagnostics.java | 41 + .../utils/EmbargoedEndDateValuePredicate.java | 17 + .../utils/ISO639ValuePredicate.java | 15 + .../validation/utils/ISOLangCodes.java | 42 + .../validation/utils/MediaTypes.java | 40 + .../utils/MediaTypesValuePredicate.java | 15 + .../validation/utils/RegexValuePredicate.java | 20 + .../validation/utils/SupportedRegExs.java | 100 + src/main/resources/iso639XLangCodes.csv | 1 + src/main/resources/mediaTypes.csv | 3 + .../engine/RuleEngineSpecification.groovy | 57 + .../validator2/engine/XMLHelper.groovy | 52 + ...ularExpressionPropertySpecification.groovy | 29 + ...PathExpressionPropertySpecification.groovy | 79 + .../XMLCardinalityRuleSpecification.groovy | 154 + .../XMLFieldExistsRuleSpecification.groovy | 170 + ...LNotConfusedFieldsRuleSpecification.groovy | 141 + ...LRegularExpressionRuleSpecification.groovy | 175 + .../XMLValidURLRuleSpecification.groovy | 161 + .../XMLVocabularyRuleSpecification.groovy | 233 + .../ElementSpecBuilderSpecification.groovy | 265 + .../ElementSpecCompilerSpecification.groovy | 134 + .../SyntheticGuidelineSpecification.groovy | 167 + ...iveGuidelinesV2ProfileSpecification.groovy | 103 + ...ureGuidelinesV3ProfileSpecification.groovy | 204 + ...ureGuidelinesV4ProfileSpecification.groovy | 165 + .../ZippedXMLRecordsSpecification.groovy | 153 + .../utils/ISOLangSpecification.groovy | 19 + .../utils/MediaTypesSpecification.groovy | 18 + .../utils/SupportedRegExSpecification.groovy | 199 + .../eu/dnetlib/validator2/engine/Example.java | 64 + .../eu/dnetlib/validator2/engine/Test.java | 50 + .../validator2/engine/xml-cardinality.xml | 13 + .../validator2/engine/xml-field-exists.xml | 15 + .../engine/xml-guideline-of-rules-spec.xml | 15 + .../engine/xml-not-confused-fields.xml | 29 + .../dnetlib/validator2/engine/xml-regex.xml | 15 + .../validator2/engine/xml-valid-url.xml | 17 + .../validator2/engine/xml-vocabulary.xml | 14 + .../synthetic-guideline-spec-failure.xml | 6 + ...c-guideline-spec-success-with-warnings.xml | 7 + .../synthetic-guideline-spec-success.xml | 7 + .../xml-element-spec-compiler-spec.xml | 10 + src/test/resources/log4j2.properties | 25 + .../cadmus.eui.eu/Identify.xml | 25 + ...s_prefix_oai_dc_set_ec_fundedresources.xml | 4336 ++++ .../cadmus.eui.eu/ListSets.xml | 268 + .../vbn.aau.dk/Identify.xml | 15 + ...s_prefix_oai_dc_set_ec_fundedresources.xml | 3138 +++ .../vbn.aau.dk/ListSets.xml | 17385 ++++++++++++++++ .../www.clarin.si/Identify.xml | 40 + .../ListRecords_oai_datacite.xml | 2195 ++ .../www.clarin.si/ListSets.xml | 24 + .../www.clarin.si/Record_1042.xml | 97 + .../www.clarin.si/Record_complete_invalid.xml | 99 + .../www.clarin.si/Record_complete_valid.xml | 94 + .../www.clarin.si/Record_title_order.xml | 99 + .../openaireguidelinesV3/cris.vtt.fi/01.xml | 52 + .../openaireguidelinesV3/cris.vtt.fi/02.xml | 43 + .../openaireguidelinesV3/cris.vtt.fi/03.xml | 50 + .../dia.library.tuc.gr/Identify.xml | 42 + .../ListRecords_prefix_oai_dc.xml | 10704 ++++++++++ .../ListRecords_prefix_oai_dc_set_driver.xml | 9223 ++++++++ ...s_prefix_oai_dc_set_ec_fundedresources.xml | 10508 ++++++++++ .../dia.library.tuc.gr/ListSets.xml | 689 + .../dia.library.tuc.gr/Record_21811.xml | 52 + .../dia.library.tuc.gr/Record_62524.xml | 47 + .../ngi.brage.unit.no/Identify.xml | 25 + .../ListRecords_prefix_oai_dc.xml | 4711 +++++ ...ListRecords_prefix_oai_dc_set_openaire.xml | 4712 +++++ .../ngi.brage.unit.no/ListSets.xml | 24 + ...Literature_all_valid_guidelines_record.xml | 108 + ...3Literature_no_valid_guidelines_record.xml | 98 + .../www.ai-journal.com/Identify.xml | 47 + ...s_prefix_oai_dc_set_ec_fundedresources.xml | 215 + .../www.ai-journal.com/ListSets.xml | 152 + .../oai_mediarep_org_doc_2534.xml | 55 + .../v4_literature_all_guidelines_record.xml | 251 + ...terature_all_invalid_guidelines_record.xml | 197 + 199 files changed, 81885 insertions(+) create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 notes.txt create mode 100644 samples/openaire2+/GetRecord.xml create mode 100644 samples/openaire2+/Identify.xml create mode 100644 samples/openaire2+/ListRecords.xml create mode 100644 samples/openaire3/GetRecord.xml create mode 100644 samples/openaire3/ListIdentifiers.xml create mode 100644 samples/openaire3/ListRecords.xml create mode 100644 samples/openaire3/identify.xml create mode 100644 src/main/java/eu/dnetlib/validator2/engine/CrisClass.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/Helper.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/Predicates.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/PropertyDriven.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/Reporter.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/Rule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleBuilder.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleDiagnostics.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleEngine.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleEvaluationException.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/RuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/Status.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/AbstractRuleBuilder.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysErrRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysFailRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysSucceedRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/AndRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/ConditionalRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/ForwardingRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardBooleanRuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardCrisClassXMLContextWithVocabulary.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardFieldsProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardLongRuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardNodeListActionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRegularExpressionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleDiagnostics.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardTermsProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithCardinality.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithNotConfusedFields.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithRegularExpression.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithVocabulary.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXPathExpressionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCardinalityRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCrisClassVocabularyRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLFieldExistsRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLNotConfusedFieldsRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRegularExpressionRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLValidURLRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XMLVocabularyRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/builtins/XPathExpressionHelper.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/BooleanRuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/CardinalityContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/CrisClassSchemeContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/FieldsProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/LongRuleProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListAction.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListActionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/NotConfusedFieldsContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/TermsProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/VocabularyContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithCardinality.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithNotConfusedFields.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithRegularExpression.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithVocabulary.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XMLCrisClassSchemeContextWithVocabulary.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionContext.java create mode 100644 src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionProperty.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/StandardValidationResult.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/Validator.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/XMLApplicationProfile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/AbstractGuideline.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/AttributeSpec.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/Builders.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/Cardinality.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/CompilationResult.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/ElementPosition.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpec.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpecCompiler.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/Guideline.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/NodeSpec.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/RequirementLevel.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/RuleEvaluator.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/StandardResult.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticGuideline.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticRule.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/AbstractOpenAireProfile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/DataArchiveGuidelinesV2Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV3Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV4Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/AbstractCrisProfile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEquipmentV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEventV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisFundingV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisOrgUnitV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPatentV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPersonV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProductV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProjectV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPublicationV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisServiceV111Profile.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/AbstractValidationTask.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/ExecutorBasedValidationTask.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/RuleEvaluationResult.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/ValidationTask.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/ValidationTaskOutput.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/task/ValidatorDiagnostics.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/EmbargoedEndDateValuePredicate.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/ISO639ValuePredicate.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/ISOLangCodes.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypes.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypesValuePredicate.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/RegexValuePredicate.java create mode 100644 src/main/java/eu/dnetlib/validator2/validation/utils/SupportedRegExs.java create mode 100644 src/main/resources/iso639XLangCodes.csv create mode 100644 src/main/resources/mediaTypes.csv create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/RuleEngineSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/XMLHelper.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/StandardRegularExpressionPropertySpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/StandardXPathExpressionPropertySpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLCardinalityRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLFieldExistsRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLNotConfusedFieldsRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLRegularExpressionRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLValidURLRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/engine/builtins/XMLVocabularyRuleSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/ElementSpecBuilderSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/ElementSpecCompilerSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/SyntheticGuidelineSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/openaire/DataArchiveGuidelinesV2ProfileSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV3ProfileSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV4ProfileSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/guideline/openaire/ZippedXMLRecordsSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/utils/ISOLangSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/utils/MediaTypesSpecification.groovy create mode 100644 src/test/groovy/eu/dnetlib/validator2/validation/utils/SupportedRegExSpecification.groovy create mode 100644 src/test/java/eu/dnetlib/validator2/engine/Example.java create mode 100644 src/test/java/eu/dnetlib/validator2/engine/Test.java create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-cardinality.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-field-exists.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-guideline-of-rules-spec.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-not-confused-fields.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-regex.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-valid-url.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/engine/xml-vocabulary.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/validation/guideline/synthetic-guideline-spec-failure.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/validation/guideline/synthetic-guideline-spec-success-with-warnings.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/validation/guideline/synthetic-guideline-spec-success.xml create mode 100644 src/test/resources/eu/dnetlib/validator2/validation/guideline/xml-element-spec-compiler-spec.xml create mode 100644 src/test/resources/log4j2.properties create mode 100644 src/test/resources/openaireguidelinesV2+/cadmus.eui.eu/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV2+/cadmus.eui.eu/ListRecords_prefix_oai_dc_set_ec_fundedresources.xml create mode 100644 src/test/resources/openaireguidelinesV2+/cadmus.eui.eu/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV2+/vbn.aau.dk/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV2+/vbn.aau.dk/ListRecords_prefix_oai_dc_set_ec_fundedresources.xml create mode 100644 src/test/resources/openaireguidelinesV2+/vbn.aau.dk/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/ListRecords_oai_datacite.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/Record_1042.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/Record_complete_invalid.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/Record_complete_valid.xml create mode 100644 src/test/resources/openaireguidelinesV2/www.clarin.si/Record_title_order.xml create mode 100644 src/test/resources/openaireguidelinesV3/cris.vtt.fi/01.xml create mode 100644 src/test/resources/openaireguidelinesV3/cris.vtt.fi/02.xml create mode 100644 src/test/resources/openaireguidelinesV3/cris.vtt.fi/03.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/ListRecords_prefix_oai_dc.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/ListRecords_prefix_oai_dc_set_driver.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/ListRecords_prefix_oai_dc_set_ec_fundedresources.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_21811.xml create mode 100644 src/test/resources/openaireguidelinesV3/dia.library.tuc.gr/Record_62524.xml create mode 100644 src/test/resources/openaireguidelinesV3/ngi.brage.unit.no/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV3/ngi.brage.unit.no/ListRecords_prefix_oai_dc.xml create mode 100644 src/test/resources/openaireguidelinesV3/ngi.brage.unit.no/ListRecords_prefix_oai_dc_set_openaire.xml create mode 100644 src/test/resources/openaireguidelinesV3/ngi.brage.unit.no/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV3/v3Literature_all_valid_guidelines_record.xml create mode 100644 src/test/resources/openaireguidelinesV3/v3Literature_no_valid_guidelines_record.xml create mode 100644 src/test/resources/openaireguidelinesV3/www.ai-journal.com/Identify.xml create mode 100644 src/test/resources/openaireguidelinesV3/www.ai-journal.com/ListRecords_prefix_oai_dc_set_ec_fundedresources.xml create mode 100644 src/test/resources/openaireguidelinesV3/www.ai-journal.com/ListSets.xml create mode 100644 src/test/resources/openaireguidelinesV4/oai_mediarep_org_doc_2534.xml create mode 100644 src/test/resources/openaireguidelinesV4/v4_literature_all_guidelines_record.xml create mode 100644 src/test/resources/openaireguidelinesV4/v4_literature_all_invalid_guidelines_record.xml diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..b37b9b2 --- /dev/null +++ b/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'groovy' + id 'maven-publish' +} + +group = 'eu.dnetlib' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + + +repositories { + + mavenCentral() + +} + +dependencies { + compile 'commons-io:commons-io:2.6', + 'com.google.guava:guava:29.0-jre', + 'org.apache.logging.log4j:log4j-api:2.13.3' + testCompile 'org.apache.logging.log4j:log4j-core:2.13.3' + testCompile 'org.spockframework:spock-core:1.3-groovy-2.5' +} + +publishing { + publications { + + jar(MavenPublication) { + groupId = "$group" + artifactId = "uoa-validator-engine2" + version = "0.9.0" + from components.java + } + } +} + +test { + + systemProperties(System.getProperties()) + + minHeapSize = "256m" + maxHeapSize = "4g" + + testLogging { + // Make sure output from + // standard out or error is shown + // in Gradle output. + showStandardStreams = true + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b GIT binary patch literal 58702 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

@up^y4&I8N>~wvL%f(S2W%NN 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 D613UA literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a2bf131 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..2fe81a7 --- /dev/null +++ b/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..9618d8d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..4358b80 --- /dev/null +++ b/notes.txt @@ -0,0 +1,127 @@ +DataFrame = (RecordId, TS, XMLRec) + +LiteratureGuidelinesV3Profile profile = new LiteratureGuidelinesV3Profile(); + +spark.sql("Select * from DataFrame").map( + String id = RecordId; + Document doc = parse(XMLRec); + profile.validate(id, doc); + profile.guidelines().forEach() { + + } +) + + +private static final ElementSpec TITLE_SPEC = Builders. + forElement("datacite:title", RequirementLevel.MANDATORY, Cardinality.ONE_TO_N). + //TODO: Add allowed values (IETF BCP 47, the IANA Language Subtag Registry) + withAttribute("xml:lang", RequirementLevel.OPTIONAL, Cardinality.ZERO_TO_N). + withAttribute("titleType", RequirementLevel.OPTIONAL, Cardinality.ZERO_TO_ONE, + "AlternativeTitle", "Subtitle", "TranslatedTitle", "Other"). + build(); + + + +Builders.forElement("foo").optional(upperBound).recommended(upperBound).mandatory(lower, upper). +mandatoryIfApplicable(lower, upper, XMLRule) + + +// Context is always full path to element +Builders.forContext("record", "metadata", "oai_dc:dc") // check for : to determine xpath "syntax" +Builders.forElement("foo").valueMustStartWith("eu:info:///asdadf").allowedValues("one", "two" | Predicate); +Builders.forElement("foo").valueMustMatchPredicate(Predicate)... +Builders.forElement("foo").valueMustNotMatchPredicate(Predicate)... +Builders.forElement("dc:type").firstOccurrence("...").other("..."); +Builders.forElement("foo").withCustomXpathValuePredicate(""); +Builders.forElement("foo").withFilter(); +Builders.forElement("foo", Req.Level.MANDATORY|REC|OPT|MandatoryIfApplicable(Predicate | Rule)) +Builders.forElement("foo", Req.LevelMandatoryIfApplicable).applicableWhen("...") (TITLE_SPEC). + +# CRIS + +## Spec builders + +### The general approach + +TYPE_SPEC = Builders.forElement("Type").mplah().mplah(); +FOO_SPEC = Builders.forElement("Foo").mplah().mplah(); +Builders.forElement("Publication").inContext("record", "metadata"). + withSubElement(TYPE_SPEC). + withSubElement(FOO_SPEC). + build(); + +### An element may contain "self-references" + +Builders.ElementSpecBuilder PUBLISHED_IN_SPEC = Builders. + forOptionalElement("PublishedIn"). + withSubElement(null); //TODO: Pass self + +>> Introduce a "magic" self-reference method: +Builders.ElementSpecBuilder PUBLISHED_IN_SPEC = Builders. + forOptionalElement("PublishedIn"). + withSubElement(rootSpec()); // or selfSpec() or thisSpec() + + +### An element may contain "supported classes" of sub-elements +Builders. + forOptionalRepeatableElement("References"). + //TODO: Optional 1 of 3 (Publication, Patent, Product) + withSubElement(PUBLICATION_SPEC). //TODO: Pass proper spec + withSubElement(null). //TODO: Pass self + withSubElement(PRODUCT_SPEC); //TODO: Pass proper spec + +>> Introduce a new withAllowedSubElements method, that accepts a list of element specs: +Builders. + forOptionalRepeatableElement("References"). + withAllowedSubElements(PUBLICATION_SPEC, rootSpec(), PRODUCT_SPEC); + + +>> Note: We can unify the above with a "magic" ref method, e.g. ref(FOO_SPEC). + +### Support namespaces +For example: + + http://purl.org/coar/resource_type/c_6501 + ... + + +>> TBD + +## CRIS Profile Set / Family + +class CRISProfileSet { +boolean enableCrossChecking = false +String baseURL = "oai:cris.example.org:" +XMLApplicationProfile[] +} + +class NewXMLApplicationProfile { +String baseURL = "oai:cris.example.org:" +Resolver resolver = new Resolver(baseURL) + validate(id, doc) { + Rule + } +} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/openaire2+/GetRecord.xml b/samples/openaire2+/GetRecord.xml new file mode 100644 index 0000000..f28f9cb --- /dev/null +++ b/samples/openaire2+/GetRecord.xml @@ -0,0 +1,41 @@ + + + 2020-04-01T09:31:11Z + + http://pandektisint.ekt.gr:8080/EIE_oai/request + + + +

+ oai:http://helios-eie.ekt.gr:10442/8495 + 2016-01-19T12:55:45Z + hdl_10442_62 + hdl_10442_11344 + ec_fundedresources + driver + video + all +
+ + + Greece + Rizakis, Athanassios D. + 1996 + Les colonies Romaines des côtes occidentales grecques. Population et territoires + LCC::D + LCC::J::JA + LCC::J::JC + LCC::K + LCC::H::HD1401 + Text + fra + http://hdl.handle.net/10442/8495 + + + + + diff --git a/samples/openaire2+/Identify.xml b/samples/openaire2+/Identify.xml new file mode 100644 index 0000000..4589993 --- /dev/null +++ b/samples/openaire2+/Identify.xml @@ -0,0 +1 @@ +2020-04-01T09:19:04Zhttp://pandektisint.ekt.gr:8080/EIE_oai/request${dspace.name}http://pandektisint.ekt.gr:8080/EIE_oai/request2.0${mail.admin}2001-01-01T00:00:00ZpersistentYYYY-MM-DDThh:mm:ssZgzipdeflateOCLC's OAICat Repository FrameworkJeffrey A. Youngjyoung@oclc.orgOCLC1.5.48http://alcme.oclc.org/oaicat/oaicat_icon.gifhttp://www.oclc.org/research/software/oai/cat.shtm diff --git a/samples/openaire2+/ListRecords.xml b/samples/openaire2+/ListRecords.xml new file mode 100644 index 0000000..23dd532 --- /dev/null +++ b/samples/openaire2+/ListRecords.xml @@ -0,0 +1,143 @@ +2020-04-01T09:29:08Zhttp://pandektisint.ekt.gr:8080/EIE_oai/request +
+ oai:http://helios-eie.ekt.gr:10442/11306 + 2015-12-16T11:24:00Z + hdl_10442_110hdl_10442_11348 + ec_fundedresourcesdrivervideoall
+ + 557: Πανελλήνια Ομοσπονδία Συλλόγων Διδακτικού και Ερευνητικού Προσωπικού (ΠΟΣΔΕΠ) + 557: Ομοσπονδία Συλλόγων Εκπαιδευτικού Προσωπικού Τ.Ε.Ι. (ΟΣΕΠ-ΤΕΙ) + 557: Ένωση Ελλήνων Ερευνητών (EEE) + Χαραλαμπίδης, Νικόλαος, + 2012-02-16 + 10442/8856 + Εισήγηση Νικόλαου Χαραλαμπίδη στην ημερίδα: Το Ελληνικό ερευνητικό σύστημα ως δημιουργός νέας γνώσης και + μοχλός ανάπτυξης + + LCC::L + LCC::Q + Text + ell + http://hdl.handle.net/10442/11306 +
+
oai:http://helios-eie.ekt.gr:10442/84952016-01-19T12:55:45Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
GreeceRizakis, Athanassios D.1996Les colonies Romaines des côtes occidentales grecques. Population et territoiresLCC::DLCC::J::JALCC::J::JCLCC::KLCC::H::HD1401Textfrahttp://hdl.handle.net/10442/8495
+
oai:http://helios-eie.ekt.gr:10442/84972016-04-01T09:13:26Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
GreecePelopenneseAchaiaPatrasΑχαϊαΠάτραΕλλάδαΠελοπόννησοςRizakis, Athanassios D.1990Munera gladiatoria a Patras IILCC::C::CCLCC::C::CNLCC::DTextfrahttp://hdl.handle.net/10442/8497
+
oai:http://helios-eie.ekt.gr:10442/84932016-01-19T12:52:28Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
GreecePeloponneseΕλλάδαΠελοπόννησοςRizakis, Athanassios D.1990Cadastres et Espace Rural dans le Nord-Ouest du PéloponnèseLCC::D::DF::DF10LCC::H::HD1401Textfrahttp://hdl.handle.net/10442/8493
+
oai:http://helios-eie.ekt.gr:10442/84392013-01-11T12:06:32Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Μιχαηλίδου, Άννα2005Η τεχνολογία του μετάλλου και εμπόριο στην εποχή του χαλκούLCC::DLCC::H::HFLCC::TTextellhttp://hdl.handle.net/10442/8439
+
oai:http://helios-eie.ekt.gr:10442/84982016-01-19T13:02:23Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
310: De Boccard EditionGreeceΕλλάδα169 b.C. -Rizakis, Athanassios D.1986Une fortresse Macédonienne dans l' OlympeLCC::D::D1::D25Textfrahttp://hdl.handle.net/10442/8498
+
oai:http://helios-eie.ekt.gr:10442/84232015-02-12T09:00:31Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
GreeceMacedoniaDion2nd century ADKremydi - Sicilianou, Sophia2005Multiple hoards of the second century AD from the sanctuary of Zeus Olympios at Dion (Macedonia)LCC::C::CJLCC::D::D1::D51LCC::D::DF::DF239Textenghttp://hdl.handle.net/10442/8423
+
oai:http://helios-eie.ekt.gr:10442/84462018-11-06T09:27:17Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Ρωμαϊκή ΑυτοκρατορίαΠασχίδης, Πασχάλης1994Τρείς νέες συνθετικές εργασίες για τη ρωμαϊκή ιστορίαLCC::D::DF::DF10Textellhttp://hdl.handle.net/10442/8446
+
oai:http://helios-eie.ekt.gr:10442/84472014-04-24T11:55:23Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
3ος αιώνας-Πασχίδης, Πασχάλης1996Ποσειδώνες και Αντίγονοι. Παρατηρήσεις στη νομισματική μαρτυρία για τη ναυτική δύναμη του Αντιγόνου Γονατά και του Αντιγόνου Δώσωνα*LCC::C::CJLCC::DLCC::VTextellhttp://hdl.handle.net/10442/8447
+
oai:http://helios-eie.ekt.gr:10442/84282015-02-12T08:59:28Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
MacedoniaKremydi - Sicilianou, Sophia2003yesVictoria Augusta on Μacedonian coins: Remarks on dating and interpretationLCC::C::CJLCC::DTextenghttp://hdl.handle.net/10442/8428
+
oai:http://helios-eie.ekt.gr:10442/84482015-01-22T12:56:20Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Αργυροπούλου, Ρωξάνη2004-12Η ηθική του ΑριστοτέληLCC::B::B1Textellhttp://hdl.handle.net/10442/8448
+
oai:http://helios-eie.ekt.gr:10442/84242015-02-12T09:00:20Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Kremydi - Sicilianou, Sophia1995Colonia Ιulia Diensis: The Numismatic EvidenceLCC::C::CJTextenghttp://hdl.handle.net/10442/8424
+
oai:http://helios-eie.ekt.gr:10442/84592012-10-29T10:21:50Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Μιχαηλίδου, Άννα1984Ενδείξεις για την οργάνωση και λειτουργία τριών νεοανακτορικών σπιτιών. Ένα μεθοδολογικό πείραμαLCC::N::NALCC::C::CCTextellhttp://hdl.handle.net/10442/8459
+
oai:http://helios-eie.ekt.gr:10442/80862016-01-19T16:09:30Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Τουράτσογλου, Ι.ΕλλάδαΜακεδονίαΡιζάκης, Αθανάσιος Δ.Τουράτσογλου, Ι.2000Mors Macedonica. Ο θάνατος στα επιτάφια μνημεία της Άνω ΜακεδονίαςLCC::C::CNLCC::D::D1::D51LCC::D::DF::DF10Textellhttp://hdl.handle.net/10442/8086
+
oai:http://helios-eie.ekt.gr:10442/84262015-02-12T09:00:15Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
MacedoniaKremydi - Sicilianou, Sophia2007Μακεδόνων Πρώτης Μερίδος: Evidence for a coinage under the AntigonidsLCC::C::CJLCC::D::DF::DF10Textellenghttp://hdl.handle.net/10442/8426
+
oai:http://helios-eie.ekt.gr:10442/84272015-02-12T09:00:20Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Macedonia44 BC- 42 BCKremydi - Sicilianou, Sophia1999yesQuintus Hortensius Hortalus in Macedonia (44-42 BC)LCC::DTextenghttp://hdl.handle.net/10442/8427
+
oai:http://helios-eie.ekt.gr:10442/84702012-10-24T23:40:54Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
AegeanThera islandMichailidou, Anna2001The indications of literacy in Bronze Age TheraLCC::C::CCLCC::LTextenghttp://hdl.handle.net/10442/8470
+
oai:http://helios-eie.ekt.gr:10442/84252015-02-12T09:00:31Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
MacedoniaKremydi - Sicilianou, Sophia2004Στο άρθρο αυτό παρουσιάζονται οι «θησαυροί» που έχουν βρεθεί στην περιοχή της Μακεδονίας κατά τους ρωμαϊκούς χρόνους με ιδιαίτερη έμφαση στα πρόσφατα ευρήματα. Συζητείται η διάδοση του ρωμαϊκού νομίσματος στην περιοχή και αντιδιαστέλλεται η σχετικά συχνή εμφάνιση των αργυρών υποδιαιρέσεων, κυρίως των δηναρίων, με την εξαιρετικά σπάνια εμφάνιση των χαλκών και την πλήρη απουσία των χρυσών. Οι «θησαυροί» που περιέχουν χάλκινες κοπές των επαρχιακών νομισματοκοπείων ταξινομούνται σε τέσσερεις γεωγραφικές ενότητες που αντιστοιχούν στις τέσσερεις μερίδες. Τα συμπεράσματα που προκύπτουν από το υλικό είναι τα ακόλουθα: Η συντριπτική πλειονότητα των χάλκινων κοπών που κυκλοφορούσαν στη περιοχή ανήκαν στα μακεδονικά νομισματοκοπεία ενώ, εντελώς εξαιρετικά, εμφανίζονται νομίσματα από τη Μικρά Ασία. Επιπλέον, παρόλο που οι «θησαυροί» του πρώτου αιώνα είναι ελάχιστοι, φαίνεται πως την περίοδο αυτή τα νομίσματα δεν απομακρύνονταν σχεδόν καθόλου από την περιοχή που κόπηκαν. Κατά τον δεύτερο αλλά κυρίως κατά τον τρίτο αιώνα, οι επαρχιακές κοπές κυκλοφορούσαν ευρύτερα μέσα στη Μακεδονία• οι κοπές της πρώτης μερίδας ωστόσο εξακολουθούσαν να μετακινούνται λιγότερο, τουλάχιστον προς δυσμάς. Η ευρύτερη κυκλοφορία των νομισμάτων του τρίτου αιώνα θα πρέπει να συνδέεται με την παρατηρημένη μετρολογική αλλά και τεχνοτροπική τους ομοιομορφία. Τέλος προτείνεται πως, αντίθετα με ότι συνέβαινε σε παλαιότερες περιόδους, οι κοπές των επαρχιακών πόλεων στους αυτοκρατορικούς χρόνους μπορούσαν να γίνουν αμοιβαία αποδεκτές ως νόμιμο μέσο συναλλαγής από γειτονικές πόλεις. Εάν η υπόθεση είναι ορθή, τότε η πρακτική αυτή αποτελεί ένα πρώτο βήμα προς την κατεύθυνση της νομισματικής ενοποίησης της αυτοκρατορίας που επεβλήθη με τις μεταρρυθμίσεις του Διοκλητιανού.Patterns of monetary circulation in Roman Macedonia: The hoard evidenceΝομισματική κυκλοφορία στη Ρωμαϊκή Μακεδονία: Η μαρτυρία των θησαυρώνLCC::C::CJLCC::D::D1::D51Textenghttp://hdl.handle.net/10442/8425
+
oai:http://helios-eie.ekt.gr:10442/84692012-10-24T23:51:39Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
AgeneanThera islandMichailidou, Anna1992Ostrakon with linear. A script from Akrotiri (Thera): a non - bureaucratic activity?LCC::C::CCLCC::DTextenghttp://hdl.handle.net/10442/8469
+
oai:http://helios-eie.ekt.gr:10442/84502018-11-14T11:31:26Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
ΜακεδονίαΡιζάκης, ΑθανάσιοςΤουρατσόγλου, Γ.1987La Haute Macédoine, une région délimitée par deux dépressions parallèles et enfermée de tous les côtés par les masses montagneuses de Pinde, Cambuniens, Olympe, Vermion et Caticica loin de la mer et des grands centres urbains des régions voisines de la Grèce du Sud et de la Basse Macédoine, elle resta toujours en marge de l'intérêt des historiens des temps anciens. D'autre part la pauvreté des vestiges archéologiques n'encouragea pas les spécialistes modernes à entreprendre son exploration et son étude systématique. Il est naturel que toute apparition d'étude, basée sur le matériel archéologique de la Haute Macédoine soit, donc, considérée comme une contribution bienvenue pour la connaissance de cette contrée isolée qui fut "le berceau des Macédoniens". Or les trois articles de D. Samsaris, parus dans Makedonika 22, 1982 (1984) 259-291; 295-306; 485-491 et traitant de l'anthroponymie, des institutions et comprenant des remarques sur la langue des inscriptions est un événement qui mérite l'attention des savants. La présente critique reflète l'intérêt qu'ont suscité ces études et sa seule ambition est d'aider à la meilleure compréhension de certains points épineux tout en apportant d'autres solutions. Sans pénétrer dans les détails, qui sont exposés dans notre article, il faut mettre l'accent sur une constatation générale: il est universellement adopté que les travaux de synthèse ne doivent pas précéder ceux de base, sinon l'auteur de tels projets doit mobiliser une très grande attention ainsi qu*un sens critique pour éviter les malentendus et les conclusions simplifiées. Toute entreprise, contraire à ces principes, contient un très grand danger que l'auteur η 'a pas pu éviter: les erreurs de lecture, la confusion dans les provenances et les interpretations parfois superficielles, l'ont conduit à des statistiques et à des conclusions qui sont à refaire. En effet la recherche historique ne peut s'effectuer qu ' après une étude simultanée et approfondie des documents littéraires, archéologiques et épigraphiques et les synthèses prématurées entraînent des risques de désorientation pour l'auteur lui-même et ses lecteurs.Τρεις μελέτες για την Άνω Μακεδονία. Μιά άλλη άποψηLCC::C::CNLCC::DTextellhttp://hdl.handle.net/10442/8450
+
oai:http://helios-eie.ekt.gr:10442/85092013-01-11T12:06:46Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
DelosMacedoniaElisEuboea4th - 1st centuries b.C.Andrianou, Dimitra2007Miniature furniture falls within the study of full-sized furniture and replicas on a much reduced scale. Greek Hellenistic miniature furniture, in particular, forms a small group of objects made mainly of lead and found in domestic, funerary and sacred areas. The precise context is often unknown. Various hypotheses, often influenced by modern habits of furniture use, have been put forward concerning their meaning and production. This study focuses on miniature chairs and tables excavated in Delos, Macedonia, Elis and Euboea and dated to between the 4th and 1st centuries BC. Evidence of miniature furniture in literary and epigraphical texts will be considered. Since there is no unique way of interpreting these artefacts, this study will evaluate their significance on the basis of the evidence available, while also attempting to shed light on aspects of daily- and afterlife.A World in Miniature: Greek Hellenistic Miniature Furniture in ContextLCC::C::CCTextenghttp://hdl.handle.net/10442/8509
+
oai:http://helios-eie.ekt.gr:10442/84882016-01-19T13:10:27Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
310: De Boccard EditionGreecePelopenneseAchaiaPatrasΕλλάδαΠελοπόννησοςRizakis, Athanassios D.1984Une série de stèles funéraires, qui proviennent de Patras, colonie romaine d'Achaïe, attestent la célébration des jeux de gladiateurs dans cette ville à l'époque impériale. Les représentations de ces stèles ainsi que les inscriptions évoquent les monuments similaires de l'Orient grec. Néanmoins elles constituent un élément original et digne d'intérêt pour notre connaissance de la vie socio-culturelle de la ville pendant cette période.Munera gladiatoria à PatrasLCC::C::CCLCC::C::CNLCC::DTextfrahttp://hdl.handle.net/10442/8488
+
oai:http://helios-eie.ekt.gr:10442/84572012-10-30T08:15:57Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
Μιχαηλίδου, Άννα1972Κρητική λάρνακα στο Μουσείο ΘεσσαλονίκηςLCC::C::CCLCC::DTextellhttp://hdl.handle.net/10442/8457
+
oai:http://helios-eie.ekt.gr:10442/84772012-10-24T23:41:10Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
AegeanThera islandMichailidou, Anna1995Investigating metal technology in a settlement. The case of Akrotiri at TheraLCC::D::DF::DF10LCC::TTextenghttp://hdl.handle.net/10442/8477
+
oai:http://helios-eie.ekt.gr:10442/84912016-01-19T12:41:52Zhdl_10442_62hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΠελοπόννησοςAchaiaPelopenneseRizakis, Athanassios D.1990La politela dans les cités de la confédération achéenneLCC::C::CNLCC::D::DF::DF10Textellfrahttp://hdl.handle.net/10442/8491
+
oai:http://helios-eie.ekt.gr:10442/1772019-12-19T11:37:11Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardΕλλάδαΜακεδονίαΠελοπόννησοςΒαλκάνια1990Συλλογή μελετών γύρω από τους Βαλκανικούς πολιτισμούς και την προϊστορία τους, καθώς και τομείς που σχετίζονται με τη Μακεδονία, τη Θράκη, τη Νότια Ελλάδα και την Εγγύς Ανατολή.10442/26110442/27510442/1529610442/1529710442/254ΠοικίλαLCC::DLCC::C::CCLCC::C::CNTextellfradeuhttp://hdl.handle.net/10442/177
+
oai:http://helios-eie.ekt.gr:10442/1692015-02-03T13:19:24Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardΑυτόνομα εδάφη της ΠαλαιστίνηςΜεϊμάρης, Ιωάννης1986Sacred names, saints, martyrs and church officials in the Greek inscriptions and papyri pertaining to the Christian Church of PalestineLCC::BLCC::C::CNTextenghttp://hdl.handle.net/10442/169
+
oai:http://helios-eie.ekt.gr:10442/1502012-10-19T10:30:03Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardΕλλάδαΣτερεά ΕλλάδαΜακεδονίαMari, Manuela2002Στο συγκεκριμένο βιβλίο περιγράφονται οι θρησκευτικές πρακτικές στην Ελλάδα κατά την περίοδο της αρχαϊκής περιόδου. Μέσα από μια διεξοδική μελέτη των τελετών θυσιών και εξαγνισμών που γίνονταν σε όλη την Ελλάδα παρέχονται πληροφορίες σχετικά με τις κοινωνικές διαστάσεις του ελληνικού και μακεδονικού πολιτισμού. Γίνεται αναφορά στη περιοχή του Ολύμπου, σε συγκεκριμένα μαντεία και τόπους λατρείας.Al di là dell 'Olimpo: macedoni e grandi santuari della grecia dall'età arcaica al primo ellenismoTextitahttp://hdl.handle.net/10442/150
+
oai:http://helios-eie.ekt.gr:10442/942013-01-11T12:06:56Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
589 - 1289 μ.Χ.Μεϊμάρης, Ιωάννης1985Κατάλογος των ευρεθέντων το 1975 αραβικών χειρογράφων στη Μονή Αγίας Αικατερίνης του Σινά. Περιλαμβάνει σε δύο γλώσσες, την ελληνική και την αραβική, την περιγραφή χειρογράφων κωδίκων. Πρόκειται για λειτουργικά, πατερικά και ασκητικά κυρίως χειρόγραφα τα οποία βρίσκονταν είτε στη βιβλιοθήκη είτε σε κάποια αποθήκη της Μονής. Η ανακάλυψή τους έγινε τυχαία από τον σκευοφύλακα της Μονής αρχιμανδρίτη Σωφρόνιο.Κατάλογος των νέων αραβικών χειρογράφων της Ιεράς Μονής Αγίας Αικατερίνης του όρους ΣινάTextellundhttp://hdl.handle.net/10442/94
+
oai:http://helios-eie.ekt.gr:10442/84372015-02-12T09:00:32Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
MacedoniaΜακεδονίαKremydi - Sicilianou, Sophia2009The Tauropolos tetradrachms of the first Macedonian meris: Provenance, iconography and datingLCC::C::CJLCC::DTextenghttp://hdl.handle.net/10442/8437
+
oai:http://helios-eie.ekt.gr:10442/84312015-02-12T08:59:36Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΜακεδονίαΚρεμύδη - Σισιλιάνου, Σοφία1998Κατάλογος νομισμάτων από την οχύρωση του ΔίουLCC::C::CJLCC::DTextellhttp://hdl.handle.net/10442/8431
+
oai:http://helios-eie.ekt.gr:10442/74432015-02-12T08:59:35Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Κρεμύδη - Σισιλιάνου, Σοφία1997Τα οικονομικά του Αλέξανδρου και η ασιατική εκστρατείαTextellhttp://hdl.handle.net/10442/7443
+
oai:http://helios-eie.ekt.gr:10442/84332015-02-12T08:58:56Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΚρεμύδη - Σισιλιάνου, Σοφία1999Η γλώσσα του κράτουςLCC::DLCC::PTextellhttp://hdl.handle.net/10442/8433
+
oai:http://helios-eie.ekt.gr:10442/84902015-02-12T09:00:33Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Δίον (αρχαίο)ΜακεδονίαΚρεμύδη - Σισιλιάνου, Σοφία2002Ένας νομισματικός θησαυρός από το ιερό του Διός στο ΔίονLCC::C::CJLCC::DTextellhttp://hdl.handle.net/10442/8490
+
oai:http://helios-eie.ekt.gr:10442/84362015-02-12T09:00:49Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Roman MacedoniaKremydi - Sicilianou, Sophia2005Belonging to Rome, remaining Greek: Coinage and Ιdentity in Roman MacedoniaLCC::C::CJLCC::DTextenghttp://hdl.handle.net/10442/8436
+
oai:http://helios-eie.ekt.gr:10442/2682013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαΣέρρεςΑυτοκρατορικοί χρόνοιLoukopoulou, Louiza1990Στην παρούσα μελέτη γίνεται αναδημοσίευση, με διορθώσεις και παρατηρήσεις, τριών επιγραφών από τη ρωμαϊκή νεκρόπολη των Σερρών (Αρχαιολογική Συλλογή Σερρών, αρ. κατ. Λ139, Λ140 και Λ141). Αναθεωρείται το γενεαλογικό στέμμα της οικογένειας της επιγραφής Λ139 ενώ, σύμφωνα με τη νέα ανθρωπωνυμική και προσωπογραφική ανάλυση, υποστηρίζεται ότι πρόκειται πιθανότατα, στις περισσότερες περιπτώσεις, για ελληνικής καταγωγής οικογένειες απελεύθερων, που είχαν χρηματίσει δούλοι Ρωμαίων πολιτών της γειτονικής ρωμαϊκής αποικίας των Φιλίππων.Sur la structure ethnique et sociale de Serres à l' époque impérialeLCC::H::HM::HM706LCC::C::CNLCC::C::CSLCC::H::HATextfrahttp://hdl.handle.net/10442/268
+
oai:http://helios-eie.ekt.gr:10442/4452013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Εγγύς ΑνατολήΕυρώπηΒαλκάνιαΕλλάδαΝεολιθική περίοδοςΕποχή του λίθουMarangou, Christina2001Το παρόν κεφάλαιο αναφέρεται σε μετρικά συστήματα και μεθόδους καταγραφής κατά τη μεσολιθική και νεολιθική περίοδο. Πιο συγκεκριμένα ασχολείται με τρισδιάστατα αντικείμενα των οποίων η χρήση δεν είναι γνωστή καθώς και με δισδιάστατα σύμβολα που εμφανίζονται πάνω σε αντικείμενα. Η παρούσα έρευνα στηρίζεται στην υπόθεση ότι αυτά τα αντικείμενα και σύμβολα αποτελούν ενδείξεις υπολογιστικών/ μετρικών συστημάτων.Evidence for counting and recording in the neolithic? Artefacts as signs and signs on artefactsLCC::G::GNTextenghttp://hdl.handle.net/10442/445
+
oai:http://helios-eie.ekt.gr:10442/74582014-05-16T06:34:10Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de Boccard080: Χατζόπουλος, Μιλτιάδης Β.080: Τριαντάφυλλος, Διαμαντής205: Υπουργείο Πολιτισμού - - ΙΘ Εφορεία Προϊστορικών και Κλασσικών Αρχαιοτήτων (Κομοτηνή)Ανατολική Μακεδονία και ΘράκηΛουκοπούλου, ΛουΐζαΖουρνατζή, ΑντιγόνηΠαρισάκη, Μαρία ΓαβριέλλαΨωμά, Σελήνη2005Η συγκέντρωση και η δημοσίευση των επιγραφών της Θράκης που συνοδεύεται από ένα ιστορικό της έρευνας, αλλά και από τις φιλολογικές και επιγραφικές μαρτυρίες, είναι σημαντικό γεγονός, το οποίο αποτελεί σταθμό στην ιστορική και αρχαιολογική έρευνα της Αρχαίας Θράκης. Πρόκειται για ένα πολύτιμο έργο, το οποίο μαζί με τη δημοσίευση των επιγραφών της Βουλγαρίας από τον Georgi Mihailov, καλύπτουν γεωγραφικά το μεγαλύτερο μέρος της Θράκης των ιστορικών χρόνων από τις ακτές του Αιγαίου ως τις όχθες του Δούναβη. Είναι βέβαιο δε ότι θα είναι πάντοτε χρησιμότατο όργανο στα χέρια των Ιστορικών και των Αρχαιολόγων του μέλλοντος, κάθε φορά που θα επιχειρούν να μελετήσουν ένα θέμα, σχετικό με την ιστορία και τα μνημεία της περιοχής.Επιγραφές της Θράκης του Αιγαίου: μεταξύ των ποταμών Νέστου και Έβρου (Νομοί Ξάνθης, Ροδόπης και Έβρου)Insciptiones antiquae partis Thraciae quae ad ora maris Aegaei sita est (praefecturae Xanthes, Rhodopes et Hebri)LCC::C::CNTextelllathttp://hdl.handle.net/10442/7458
+
oai:http://helios-eie.ekt.gr:10442/4532013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαDialismas, Alkis2001Η παρούσα μελέτη ασχολείται με μεταλλικά αντικείμενα τα οποία είναι καταγραμμένα σε πινακίδες της Γραμμικής Β΄.Metal artefacts as recorded in the Linear B tabletsTextenghttp://hdl.handle.net/10442/453
+
oai:http://helios-eie.ekt.gr:10442/4542013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜυκήνεςVoutsa, Katerina2001Το άρθρο ερευνά το θέμα των Μυκηναίων τεχνιτών μέσα από τα αρχεία του ανακτόρου αποδίδοντας ερμηνείες σε σχετικά τεκμήρια γραφής που έχουν εντοπιστεί.Mycenaean craftsmen in palace archives: problems in interpretationLCC::DTextenghttp://hdl.handle.net/10442/454
+
oai:http://helios-eie.ekt.gr:10442/4562013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΑιγαίο ΠέλαγοςΑνατολική ΜεσόγειοςΜεσόγειος θάλασσαΕποχή του χαλκούTzachili, Iris2001Το άρθρο πραγματεύεται το εμπόριο υφασμάτων στην περιοχή του Αιγαίου και της Ανατολικής Μεσογείου. Η συγκεκριμένη δραστηριότητα, όπως αναφέρεται στο κείμενο, έχει μελετηθεί σχετικά λίγο εξαιτίας του ότι τα υφάσματα δεν αφήνουν ίχνη, όπως άλλα υλικά (π.χ. μέταλλα, αγγεία) και λόγω του ότι οι ερμηνείες που δίνονται σε όποια ίχνη βρίσκονται είναι αμφιλεγόμενες.Circulation of textiles in the late Bronze age AegeanTextenghttp://hdl.handle.net/10442/456
+
oai:http://helios-eie.ekt.gr:10442/4602013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΚρήτηΚνωσσόςTzachili, Iris2001Το άρθρο έχει σκοπό τη μελέτη της ποσότητας των υφασμάτων που είναι καταγραμμένα στα αρχεία της Κνωσσού και την ένταξή τους στο ιστορικό τους πλαίσιο. Το συγκεκριμένο εγχείρημα είναι δύσκολο καθώς, όπως σημειώνεται στο κείμενο, η κατάσταση του αρχείου δεν είναι καλή.Counting and recording textiles in the mycenaean archives of KnossosTextenghttp://hdl.handle.net/10442/460
+
oai:http://helios-eie.ekt.gr:10442/4622013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΝότια Ελλάδα1450 - 1200 π.Χ.Sarpaki, Anaya2001Στόχος του κεφαλαίου είναι η επανεξέταση των αρχείων της Γραμμικής Β΄ σχετικά με καρυκεύματα, αρωματικά και φυτά που χρησιμεύουν για τη βαφή ώστε να επαναπροσδιοριστούν προβλήματα ταυτοποίησης. Επιπλέον, μέσα από κείμενα και τεκμήρια αρχαιοβοτανικής, βοτανικής και εθνοβοτανικής γίνεται προσπάθεια διερεύνησης κοινωνικών, πολιτικών και οικονομικών στοιχείων του μυκηναϊκού κόσμου.Condiments, perfume and dye plants in Linear B: a look at the textual and archaeobotanical evidenceLCC::Q::QKTextenghttp://hdl.handle.net/10442/462
+
oai:http://helios-eie.ekt.gr:10442/4642013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
+ + Ελλάδα + Βαλκάνια + Trantalidou, Katerina + 2001 + Το κείμενο πραγματεύεται τη σημασία των οργανικών υπολειμμάτων που έχουν έρθει στο φως από την + αρχαιολογική έρευνα σε συνδυασμό με άλλα αρχαιολογικά ευρήματα. Σκοπός είναι μέσα από την ανάλυση ιστορικών + ενδείξεων, να γίνει αναγωγή στο πώς γινόταν το εμπόριο κατά την προϊστορική και πρώιμη ιστορική περίοδο και να + κατανοηθεί η ιδεολογία των κοινωνικών και οικονομικών αλλαγών. + + Producing and recording leather and other animal products + LCC::H::HF + Text + eng + http://hdl.handle.net/10442/464 +
+
oai:http://helios-eie.ekt.gr:10442/4652013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Dialismas, Alkis2001Στο κείμενο γίνεται παρουσίαση της επιλογής, των περιεχομένων και της λειτουργίας της βάσης δεδομένων που δημιουργήθηκε για την καταγραφή των δεδομένων τα οποία συλλέχθηκαν στο πλαίσιο του προγράμματος που περιγράφεται. Γίνεται αναλυτική περιγραφή της δομής της βάσης καθώς και σχολιασμός των πρωτογενών δεδομένων και του τελικού αποτελέσματος. Τέλος, παρουσιάζεται και η βάση δεδομένων που φιλοξένησε τα δεδομένα της βιβλιογραφίας.The databases on the quantities recorded in Linear B tablets: appendixTextenghttp://hdl.handle.net/10442/465
+
oai:http://helios-eie.ekt.gr:10442/2642013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
6ος αι. π.Χ.Πετροπούλου, Αγγελική1990Το παρόν κείμενο πραγματεύεται τις σχέσεις των μελών της βασιλικής κοινωνίας των Σκυθών με τους νεκρούς τους, σχέσεις για τις οποίες υπάρχει ελάχιστη πληροφορία. Επισημαίνεται ότι ενώ στις περισσότερες των περιπτώσεων οι συγγενείς είναι εκείνοι οι οποίοι αναλαμβάνουν τη φροντίδα των νεκρών, ωστόσο, στη συγκεκριμένη περίπτωση αναλαμβάνουν οι φίλοι αυτό το έργο.Σκυθικά νεκρώσιμα έθιμα (Ηροδ. 4.73.1)LCC::G::GTTextellhttp://hdl.handle.net/10442/264
+
oai:http://helios-eie.ekt.gr:10442/4462013-01-11T12:06:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
1900-1650 π.Χ.Karnava, Artemis2001Η παρούσα συμβολή κάνει λόγο για την παρουσία συμβόλων στην κρητική ιερογλυφική γραφή τα οποία υποστηρίζεται ότι αντιπροσωπεύουν κλάσματα.Fractions and measurement units in the cretan hieroglyphic scriptTextenghttp://hdl.handle.net/10442/446
+
oai:http://helios-eie.ekt.gr:10442/2542019-12-19T11:37:11Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΒόρεια ΕλλάδαΘεσσαλίαΔιμήνιΒαλκάνιαΧαλκολιθική περίοδοςΝεολιθική περίοδοςΑσλάνης, Ιωάννης1990Το παρόν ερευνά την παρουσία οχυρώσεων σε οικισμούς της Χαλκολιθικής περιόδου στη Βόρεια Ελλάδα. Σε αυτό το πλαίσιο γίνεται διερεύνηση και του ποια οικήματα αποτελούν ή όχι οχυρώσεις και κατά ποια περίοδο κρίνεται αναγκαία η παρουσία οχυρώσεων. Τέλος, παρουσιάζεται εκτενέστερα η περίπτωση του Δημηνίου όπου γίνεται ιδιαίτερη διερεύνηση των διαφορετικών προσεγγίσεων που υπάρχουν σχετικά με το συγκεκριμένο οικισμό.10442/177Οι οχυρώσεις στους οικισμούς του βορειοελλαδικού χώρου κατά την χαλκολιθική περίοδο και η περίπτωση του ΔιμηνίουLCC::DLCC::UTextenghttp://hdl.handle.net/10442/254
+
oai:http://helios-eie.ekt.gr:10442/2752016-04-12T13:12:09Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion De BoccardΕλλάδαΠελοπόννησοςΡιζάκης, Αθανάσιος Δ.1990Πρόκειται για συμβολή στη μελέτη του ρωμαϊκού αποικισμού στη βορειοδυτική Πελοπόννησο. Στο κείμενο γίνονται αναφορές σε πηγές με κατά περίπτωση σχολιασμό τους.10442/177Συμβολή στην μελέτη του ρωμαϊκού αποικισμού της ΒΔ ΠελοποννήσουLCC::DTextellhttp://hdl.handle.net/10442/275
+
oai:http://helios-eie.ekt.gr:10442/2742015-02-12T09:00:21Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΑιγαίοΚυκλάδεςΚέαΕλληνιστική περίοδοςΠαπαγεωργιάδου-Μπάνη, Χαρίκλεια1990Η Ποιήεσσα και η χώρα της αποτελούν ένα από τα πιο χαρακτηριστικά παραδείγματα της διάστασης ανάμεσα στις μεταβολές που παρατηρούνται στα αστικά κέντρα και στην ύπαιθρο. Λόγω της θέσης της, στη δυτική ακτή του νησιού, όπου βρίσκεται και η ευφορότερη κοιλάδα όλης της Κέας, η οικονομία της πόλης ήταν προσανατολισμένη τόσο στις θαλάσσιες εμπορικές ανταλλαγές, όσο και στην εκμετάλλευση των γαιών της περιοχής. Όπως επισημαίνεται στο κείμενο, η πρώιμη πολιτειακή συρρίκνωση επιτρέπει την παρακολούθηση της οργάνωσης του αγροτικού χώρου της ανεξάρτητα από τις πολιτικές μεταβολές.Η οργάνωση του αγροτικού χώρου στην Ποιήεσσα της Κέας κατά την Ελληνιστική περίοδοLCC::H::HFLCC::G::G1LCC::G::GNLCC::H::HD1401Textellhttp://hdl.handle.net/10442/274
+
oai:http://helios-eie.ekt.gr:10442/2782013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΙερουσαλήμKhan el-AhmarΜέση και Εγγύς ΑνατολήΠαλαιστίνηΙσραήλMeimaris, Giannis1990Παρουσιάζεται η ανασκαφή που έλαβε χώρα κατά τα έτη 1976-1979 στα ερείπια της Μονής του Μεγάλου Ευθυμίου, τα οποία βρίσκονται στην έρημο, ανατολικά της Ιερουσαλήμ περίπου 17 χιλιόμετρα νοτίως της οδού Ιεροσολύμων - Ιεριχούς. Κατά το διάστημα αυτό ανασκάφηκαν και μελετήθηκαν, μεταξύ άλλων εργασιών, τόσο οι χώροι της κεντρικής εκκλησίας και του κοιμητηρίου όσο και έξι επιπλέον τάφοι εντός του κεντρικού θαλάμου, ένας δεύτερος νεκρικός θάλαμος δυτικά του κεντρικού, ένας μικρότερος καμαροειδής θάλαμος βορείως της προθέσεως της κεντρικής εκκλησίας, μία μεταγενέστερης περιόδου τράπεζα της μονής και οι χώροι εντός του βορείου τείχους κοντά στην σημερινή κεντρική είσοδο της Μονής.The monastery of saint Euthymios the Great at Khan el-Ahmar, in the wilderness of Judaea: rescue excavations and basic protection measures 1976-1979LCC::DTextenghttp://hdl.handle.net/10442/278
+
oai:http://helios-eie.ekt.gr:10442/2732013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΚυκλάδεςΚέαΑιγαίοΜενδώνη, Λίνα1990Με τη συστηματική καταγραφή των ενεπίγραφων λίθων στο Αρχαιολογικό Μουσείο της Κέας και την επιφανειακή έρευνα του νησιού αποκαλύφθηκαν αφ' ενός μεν αρκετές άγνωστες ως τώρα επιγραφές, αφ' ετέρου δε άλλες που για πολλά χρόνια θεωρείτο ότι είχαν χαθεί. Επτά τέτοιες επιγραφές παρουσιάζονται στο παρόν κείμενο.Addenda et corrigenda ad inscriptiones CeaeLCC::C::CNTextellhttp://hdl.handle.net/10442/273
+
oai:http://helios-eie.ekt.gr:10442/2672013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίατέλος 5ου αι. π.Χ.αρχές 4ου αι. π.Χ.Ρωμαιοκρατία3ος αι. μ.Χ.Liampi, Katerini1990Στο κείμενο γίνεται προσπάθεια να παρουσιαστεί συστηματικά η βαθμιαία εξελικτική πορεία της μακεδονικής ασπίδας σαν σύμβολο στους κόλπους της τέχνης, με βάση μια ερανιστική συγκέντρωση και παράθεση νομισμάτων και άλλων μνημείων - φορέων της παράστασής της. Η προβολή της μακεδονικής ασπίδας ανάγεται στο γενικότερο ενδιαφέρον χρήσης συμβόλων η οποία αποτέλεσε, ιδιαίτερα κατά τους ελληνιστικούς χρόνους, αδιαφιλονίκητο όργανο πολιτικής προπαγάνδας.Der makedonische schild als propagandistisches mittel in der hellenistischen zeitLCC::ULCC::DLCC::D::D1::D31LCC::C::CJTextdeuhttp://hdl.handle.net/10442/267
+
oai:http://helios-eie.ekt.gr:10442/2652013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαSakellariou, Michel B.1990Infiltrations balkaniques dans la peninsule helladique à l' HR III CTextfrahttp://hdl.handle.net/10442/265
+
oai:http://helios-eie.ekt.gr:10442/2722013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΉπειροςΆρταΔουκέλλης, Παναγιώτης Ν.1990Η παρούσα μελέτη άπτεται ανθρωπογεωγραφικών ζητημάτων. Όπως επισημαίνεται στο κείμενο, τα γεωγραφικά δεδομένα κατέχουν θέση και περιέχοντος ενώ αποτελούν ταυτόχρονα αντικείμενο ιστορικής μελέτης ως συνιστώσες που επέδρασαν ή που δεν επέδρασαν στην εγκατάσταση και την περαιτέρω εξέλιξη των ανθρώπινων κοινοτήτων που νέμονταν τον υπό εξέταση γεωγραφικό χώρο. Η μελέτη των μορφών που προσέλαβε η πεδιάδα της Άρτας κατά το παρελθόν θέτει μεθοδολογικά προβλήματα εντοπισμού και ανάγνωσης των δεδομένων.Ένα δίκτυο αγροτικών ορίων στην πεδιάδα της ΆρταςLCC::G::G1LCC::G::GNTextellhttp://hdl.handle.net/10442/272
+
oai:http://helios-eie.ekt.gr:10442/2662015-02-12T09:00:21Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΜακεδονίαΒέροιαHatzopoulos, Miltiades B.1990Στο άρθρο αυτό δημοσιεύεται συμπληρωμένο ένα ψήφισμα της Κασσανδρείας προς τιμήν του Σελευκέως Δωροθέου του Δώρου καθώς και ένα δεύτερο ψήφισμα της ίδιας πόλεως προς τιμήν του Αλεξανδρέως Αμμωνίου. Η επανεξέταση του συνόλου των δημοσίων εγγράφων της Κασσανδρείας επιτρέπει τη χρονολόγηση των νέων τεκμηρίων και τη συναγωγή συμπερασμάτων για την ιστορία των θεσμών της πόλεως αυτής. Επιπλέον, συνεξετάζονται άλλα κείμενα του 3ου αι. π.Χ. με ιδιαίτερη έμφαση στην απελευθερωτική πράξη της Βέροιας.Un nouveau document du regne d' Antigone GonatasLCC::C::CNLCC::C::CRLCC::DTextfrahttp://hdl.handle.net/10442/266
+
oai:http://helios-eie.ekt.gr:10442/2702013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαΜυγδονίαΚρηστωνίαΑνθεμούνταςΧαλκιδικήΠαπακωνσταντίνου - Διαμαντούρου, Δέσποινα1990Γίνεται πρώτη παρουσίαση επιγραφών της περιοχής μεταξύ Αξιού και Στρυμόνα, οι οποίες, όπως επισημαίνεται, μέχρι τη δεδομένη χρονική στιγμή δεν είχαν συγκεντρωθεί σε corpus. Συγκεκριμένα γίνεται παρουσίαση επιγραφών από τις περιοχές Μυγδονίας, Κρηστωνίας, Ανθεμούντος και Χαλκιδικής.Επιγραφές Μυγδονίας, Κρηστωνίας, Ανθεμούντος και Χαλκιδικής: πρώτη παρουσίασηLCC::C::CNTextellhttp://hdl.handle.net/10442/270
+
oai:http://helios-eie.ekt.gr:10442/2712013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαΒέροιαΕλληνιστικοί χρόνοιTataki, Argyro1990Το κείμενο παρουσιάζει το σημαντικότερο, όπως τονίζεται, γλυπτό από τη Βέροια, την κολοσσική κεφαλή της Μέδουσας, η οποία βρέθηκε 46 χρόνια πριν τη δημοσίευση του παρόντος κοντά σε έναν πύργο του αρχαίου τείχους. Οι διαστάσεις της (1,63μ. ύψος, 1,10μ. μέγιστο σωζόμενο πλάτος, 0,69μ. μέγιστο βάθος) καθιστούν την κεφαλή αυτή τη μεγαλύτερη που έχει σωθεί στον ελληνικό κόσμο από την αρχαιότητα. Συζητείται επίσης η χρονολόγηση του έργου στους ελληνιστικούς χρόνους.The Medusa of Beroea: a historical interpretationLCC::N::NBTextenghttp://hdl.handle.net/10442/271
+
oai:http://helios-eie.ekt.gr:10442/2762013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Μέση και Εγγύς ΑνατολήΛυκίαFowden, Garth1990Με το παρόν άρθρο εγκαινιάζεται μια σειρά μελετών, η οποία έχει σαν σκοπό την επανεξέταση της θρησκευτικής ιστορίας της υστερορωμαϊκής αυτοκρατορίας. Το πρώτο μέρος του άρθρου περιγράφει το λυκιακό χώρο - τοπία, επικοινωνίες και οικισμούς. Στο δεύτερο μέρος γίνεται ιδιαίτερη αναφορά στον θαλάσσιο δρόμο, ο οποίος επηρέαζε τα παράλια αλλά όχι ιδιαίτερα την ενδοχώρα, και στον άξονα Λαοδίκεια - Λίμυρα, που διευκόλυνε την επικοινωνία με άλλες περιοχές της δυτικής Μικράς Ασίας. Το τρίτο και τελευταίο μέρος αφορά τη μετατόπιση πληθυσμών, που παρατηρείται γύρω στις αρχές του έκτου αιώνα.Religious developments in late roman Lycia: topographical preliminariesLCC::B::BL::BRLCC::G::G1LCC::G::GNLCC::H::HFTextenghttp://hdl.handle.net/10442/276
+
oai:http://helios-eie.ekt.gr:10442/2692013-01-11T12:06:53Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαΧαλκιδικήPanayotou, Anna1990Πριν τη μακεδονική επέκταση στα μέσα περίπου του 4ου αι. π.Χ. η Χαλκιδική χερσόνησος αριθμεί ένα σημαντικό αριθμό πόλεων ή πολισμάτων, αποικίες ευβοϊκές κυρίως, κυκλαδικές κτλ. Ο διαλεκτικός χάρτης θα πρέπει να ήταν κατά την αρχαϊκή και κατά την πρώιμη κλασική περίοδο αρκετά διαφοροποιημένος. Κατά τα τέλη του 4ου αι. π.Χ. η Κοινή έχει παντελώς υποσκελίσει τις τοπικές διαλέκτους. Στην παρούσα μελέτη επιχειρείται η χάραξη αυτής της πορείας εξέλιξης και ο καθορισμός των παραγόντων που επέδρασαν και επιτάχυναν την εξαφάνιση των υπό εξέταση διαλέκτων.Des dialectes à la Koiné: l'exemple de la ChalcidiqueLCC::P::P1LCC::H::HMTextfrahttp://hdl.handle.net/10442/269
+
oai:http://helios-eie.ekt.gr:10442/84292015-02-12T08:59:09Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΜακεδονίαΚρεμύδη - Σισιλιάνου, Σοφία1996Θησαυροί έκτακτης ανάγκης: με αφορμή ένα μακεδονικό θησαυρό του 3ου μ.Χ. αιώναLCC::DTextellhttp://hdl.handle.net/10442/8429
+
oai:http://helios-eie.ekt.gr:10442/84382015-02-12T08:59:35Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
Kremydi - Sicilianou, Sophia2009Roman provincial coinageLCC::C::CJLCC::DTextenghttp://hdl.handle.net/10442/8438
+
oai:http://helios-eie.ekt.gr:10442/84752012-11-12T17:46:19Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
ΑιγαίοΘήραΜιχαηλίδου, Άννα2007Μετάλλινα ευρήματαLCC::C::CCLCC::D::DF::DF10Textellhttp://hdl.handle.net/10442/8475
+
oai:http://helios-eie.ekt.gr:10442/84622012-10-29T10:32:46Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
GreeceMichailidou, Anna1987Chapters on prehistoric anchors, ships and balance weightsLCC::D::DF::DF10LCC::VTextenghttp://hdl.handle.net/10442/8462
+
oai:http://helios-eie.ekt.gr:10442/84812012-10-30T08:15:44Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
KυκλάδεςΑίγυπτοςΑιγαίοΜιχαηλίδου, Άννα2000Ο ζυγός στη ζωή των κατοίκων του Αιγαίου και της ΑιγύπτουLCC::C::CBTextellhttp://hdl.handle.net/10442/8481
+
oai:http://helios-eie.ekt.gr:10442/84842013-01-11T12:06:33Zhdl_10442_64hdl_10442_11344ec_fundedresourcesdrivervideoall
CycladesCreteAegeanBronze AgeMichailidou, Anna2000Auf den Spuren der Händler in der Ägäis: Waagen, Gewichte und ihre theoretischen ZusammenhängeLCC::DLCC::H::HFTextdeuhttp://hdl.handle.net/10442/8484
+
oai:http://helios-eie.ekt.gr:10442/81032012-10-12T12:27:08Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardSakellariou, M.B.1990Between memory and oblivion: the transmission of early Greek historical traditionsTextenghttp://hdl.handle.net/10442/8103
+
oai:http://helios-eie.ekt.gr:10442/1312012-10-19T10:30:43Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαBrocas - Deflassieux, Laurence1999Στο πρώτο μέρος του βιβλίου περιλαμβάνονται το γεωγραφικό πλαίσιο στο οποίο εντάσσεται η Βέροια, ο προσδιορισμός των γενικών χαρακτήρων του πολεοδομικού ιστού και εξέταση των νεκροπόλεων. Στο δεύτερο μέρος γίνεται εντοπισμός των σημαντικότερων κέντρων του δημοσίου βίου ενώ στο τρίτο μέρος του βιβλίου γίνεται προσπάθεια αποτύπωσης του πολεοδομικού σχεδίου της Βέροιας με τη βοήθεια δύο χαρτών, ενός των ελληνιστικών χρόνων και ενός των ρωμαϊκών.Αρχαία Βέροια: μελέτη τοπογραφίαςTextellhttp://hdl.handle.net/10442/131
+
oai:http://helios-eie.ekt.gr:10442/1492015-02-12T08:59:34Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
205: Νιγδέλη, Π. +Σουρή, Γ.ΕλλάδαΜακεδονίαΓουναροπούλου, ΛουκρητίαΧατζόπουλος, Μιλτιάδης Β.Καλογρίδου, Ειρήνη (επ.)Πασχίδης, Πασχάλης (επ.)1998Πρόκειται για μερικώς σχολιασμένο κατάλογο επιγραφών από την περιοχή της Κάτω Μακεδονίας.Επιγραφές Κάτω Μακεδονίας: μεταξύ του Βερμίου όρους και του Αξιού ποταμού: τεύχος Α΄ Επιγραφές Βέροιας = Inscriptiones Macedoniae inferioris: inter Bermium montem at Axium flumen repertae: fasciculus primus Inscriptiones BeroeaeLCC::C::CNTextellhttp://hdl.handle.net/10442/149
+
oai:http://helios-eie.ekt.gr:10442/1302015-02-12T08:58:53Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardZoumpaki, Sofia2001Elis und Olympia in der Kaiserzeit: Das Leben einer Gesellschaft zwischen Stadt und Heiligtum auf prosopographischer GrundlageTextdeuitaundhttp://hdl.handle.net/10442/130
+
oai:http://helios-eie.ekt.gr:10442/972018-11-21T13:05:04Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
205: Ψυχογιού - Smith, Όλγα205: Κούρτεση - Φιλιππάκη, ΓεωργίαΕλλάδαΜακεδονίαΑσλάνης, Ιωάννης1992Στο πρώτο μέρος παρουσιάζεται η εικόνα της προϊστορίας της Μακεδονίας κατά τη Νεολιθική Εποχή. Στο δεύτερο μέρος γίνεται σύντομη παρουσίαση της ανθρώπινης δραστηριότητας στην περιοχή πριν τη δημιουργία των μόνιμων οικισμών κατά τους νεολιθικούς χρόνους. Στο τρίτο μέρος παρατίθενται τα δεδομένα που συνθέτουν τη Νεολιθική Εποχή στη Μακεδονία. Στο τέταρτο μέρος σχολιάζονται τα συμπεράσματα που πηγάζουν από τη μελέτη των ανασκαφικών δεδομένων. Στο επόμενο, πέμπτο, μέρος γίνεται αναφορά στην απόλυτη χρονολόγηση και ιδιαίτερα με τη μέθοδο του ραδιενεργού άνθρακα 14. Τέλος, γίνεται παράθεση γνωστών νεολιθικών θέσεων στη Μακεδονία.Η προϊστορία της Μακεδονίας: I. η νεολιθική εποχήLCC::C::CCLCC::D::D1::D51Textellhttp://hdl.handle.net/10442/97
+
oai:http://helios-eie.ekt.gr:10442/802015-02-12T09:00:29Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Χατζόπουλος, Μιλτιάδης Β.Λουκοπούλου, Λουΐζα1996Recherches sur les marches orientales des temenides: Anthemonte - KalindoiaTextfraundhttp://hdl.handle.net/10442/80
+
oai:http://helios-eie.ekt.gr:10442/1482016-01-19T15:13:30Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΜακεδονίαΡιζάκης, Αθανάσιος Δ.Τουράτσογλου, Γ.1985Πρόκειται για μερικώς σχολιασμένο κατάλογο επιγραφών από την περιοχή της Άνω Μακεδονίας.Επιγραφές Άνω Μακεδονίας: Ελίμεια, Εορδαία, Νότια Λυγκηστίς, Ορεστίς: τόμος Α' κατάλογος επιγραφώνLCC::DTextellhttp://hdl.handle.net/10442/148
+
oai:http://helios-eie.ekt.gr:10442/74182016-01-19T15:22:30Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
300: Rizakis, Athanassios D.AchaeaRizakis, Athanassios D.Dalongeville, R.Kallivretakis, LeonidasLakakis, MariaMoutzali, A.Panagiotopoulos, Vasilis1992Paysages d' Achaie I: le bassin du Peiros et la plaine occidentaleLCC::DLCC::D::DF::DF10Textfrahttp://hdl.handle.net/10442/7418
+
oai:http://helios-eie.ekt.gr:10442/73982013-01-11T12:03:16Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardPalestineArabiaMeimaris, GiannisKritikakou, KalliopiBougia, P.1992Chronological systems in roman - byzantine Palestine and Arabia: the evidence of the dated greek inscriptionsLCC::C::CNLCC::C::CCTextenghttp://hdl.handle.net/10442/7398
+
oai:http://helios-eie.ekt.gr:10442/73972015-02-12T08:59:39Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardΧατζόπουλος, Μιλτιάδης Β.19961.A historical and epigraphic study -- 2.Epigraphic appendixMacedonian institutions under the kingsTextenghttp://hdl.handle.net/10442/7397
+
oai:http://helios-eie.ekt.gr:10442/73752013-01-11T12:06:57Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Λουκοπούλου, Λουΐζα1992Contribution a l'histoire de la Thrace Propontique durant la periode archaiqueTextfrahttp://hdl.handle.net/10442/7375
+
oai:http://helios-eie.ekt.gr:10442/73872015-02-12T09:00:29Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Γουναροπούλου, ΛουκρητίαΧατζόπουλος, Μιλτιάδης Β.1985Les milliaires de la voie Egnatienne entre Heraclee des Lyncestes et ThessaloniqueTextfrahttp://hdl.handle.net/10442/7387
+
oai:http://helios-eie.ekt.gr:10442/73962013-01-11T12:06:57Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Τατάκη, Αργυρώ1994Macedonian Edessa: prosopography and onomasticonTextenghttp://hdl.handle.net/10442/7396
+
oai:http://helios-eie.ekt.gr:10442/74172015-02-12T09:00:27Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Χατζόπουλος, Μιλτιάδης Β.1988Une donation du roi LysimaqueTextfrahttp://hdl.handle.net/10442/7417
+
oai:http://helios-eie.ekt.gr:10442/74232016-01-19T13:55:47Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
ΕλλάδαΠελοπόννησοςΑχαΐαΡιζάκης, Αθανάσιος Δ.1995Achaie I: sources textuelles et histoire regionaleLCC::DTextfrahttp://hdl.handle.net/10442/7423
+
oai:http://helios-eie.ekt.gr:10442/74322015-02-12T09:00:27Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
080: Vidal - Naquet, PierreΧατζόπουλος, Μιλτιάδης Β.1994Cultes et rites de passage en MacedoineTextfrahttp://hdl.handle.net/10442/7432
+
oai:http://helios-eie.ekt.gr:10442/74392015-02-12T09:00:27Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Χατζόπουλος, Μιλτιάδης Β.1991Actes de vente d'AmphipolisTextfrahttp://hdl.handle.net/10442/7439
+
oai:http://helios-eie.ekt.gr:10442/74442013-01-11T12:06:57Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Τατάκη, Αργυρώ1998Macedonians abroad: a contribution to the prosopography of ancient MacedoniaTextenghttp://hdl.handle.net/10442/7444
+
oai:http://helios-eie.ekt.gr:10442/74522015-02-12T09:00:29Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Λουκοπούλου, ΛουΐζαΧατζόπουλος, Μιλτιάδης Β.1987Two studies in ancient Macedonian topographyTextenghttp://hdl.handle.net/10442/7452
+
oai:http://helios-eie.ekt.gr:10442/74732013-01-11T12:06:57Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Τατάκη, Αργυρώ1988Ancient Beroea prosopography and societyTextenghttp://hdl.handle.net/10442/7473
+
oai:http://helios-eie.ekt.gr:10442/73772015-02-12T09:00:30Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Γουναροπούλου, ΛουκρητίαΠασχίδης, ΠασχάληςΠέτσας, Φώτιος Μ.Χατζόπουλος, Μιλτιάδης Β.2000Inscriptions du sanctuaire de la mère des dieux autochtone de Leukopétra (Macédoine)Textfrahttp://hdl.handle.net/10442/7377
+
oai:http://helios-eie.ekt.gr:10442/73902016-01-19T12:59:44Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
GreecePatraiRizakis, Athanassios D.1998Achaie II: la cité de Patras: épigraphie et histoireLCC::DTextfrahttp://hdl.handle.net/10442/7390
+
oai:http://helios-eie.ekt.gr:10442/74002015-02-12T09:00:27Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Χατζόπουλος, Μιλτιάδης Β.2001L' organisation de l'armée Macedonienne sous les Antigonides: problèmes anciens et documents nouvauxTextfrahttp://hdl.handle.net/10442/7400
+
oai:http://helios-eie.ekt.gr:10442/1262015-02-12T09:00:20Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: de BoccardΠελοπόννησοςΗλείαZoumpaki, Sofia2005Στο παρόν γίνεται αναφορά στα τοπογραφικά όρια της περιοχής της Ηλείας. Ειδικότερα γίνεται ακριβής περιγραφή των γεωγραφικών ορίων με άξονα τις προσωπογραφίες που βρέθηκαν στην Ηλεία και παράλληλα εξετάζονται χρονολογικά και άλλα στοιχεία.Prosopographie der Eleer: bis zum 1. Jh. v. Chr.LCC::G::G1Textengfradeuhttp://hdl.handle.net/10442/126
+
oai:http://helios-eie.ekt.gr:10442/80322015-06-11T09:47:53Zhdl_10442_63hdl_10442_11355ec_fundedresourcesdrivervideoall
600: Βουλγαράκης, Γιάννης723: Alpha Bank723: S&P AdvertisingΕλλάδα1958 μ.Χ. - 2008 μ.Χ.Κυριακίδης, Δ.Α.Σκλαβενίτης, ΤριαντάφυλλοςΟικονομάκος, Νίκος Γ.Τσιλένης, Σάββας Ε.Κολίσης, Φραγκίσκος Ν.Κιτρομηλίδης, ΠασχάληςΜπούμπουκας, ΕυάγγελοςΚόλιας, ΤαξιάρχηςΣιγάλα, ΑργυρούλαΧατζόπουλος, Μιλτιάδης Β.Γραμματικοπούλου, ΕλένηΚαμίτσος, Ευστράτιος Ι.Ξενάκης, ΑριστοτέληςΜιχαηλάρης, Παναγιώτης2008Εθνικό Ίδρυμα Ερευνών 1958-2008: ίδρυση - πορεία - προοπτικέςLCC::QLCC::D::D1Textellhttp://hdl.handle.net/10442/8032
+
oai:http://helios-eie.ekt.gr:10442/84212014-11-07T08:12:12Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
072: Hatzopoulos, Miltiades B072: Χατζόπουλος, Μιλτιάδης Β.310: de BoccardMacedoniaΜακεδονίαLe Rider, George1996Monnayage et finances de Philippe II: un état de la questionLCC::C::CJLCC::H::HGTextfrahttp://hdl.handle.net/10442/8421
+
oai:http://helios-eie.ekt.gr:10442/84562014-05-09T08:08:31Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardMediterraneanAegeanΜεσόγειοςΑιγαίοMichailidou, Anna2008Weight and Value in Pre-Coinage Societies, vol.II: Sidelights on measurement from the Aegean and the OrientLCC::DLCC::H::HBTextenghttp://hdl.handle.net/10442/8456
+
oai:http://helios-eie.ekt.gr:10442/84582014-10-16T10:20:29Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
ΚρήτηCreteGreeceKnossos (Ancient city)Κνωσσός (αρχαία πόλη)Michailidou, Anna1981Introduction; Historical outline; Myth and tradition; History of the excavations;Minoans and Knossos; The archaeological site; Route from Herakleion to Knossos; Tour of the palace; The main features; West court - west facade; West porch - corridor of the procession - central court; South propylaeum - west magazines - piano nobile; Throne room - tripartite shrine - pillar crypts; Grand staircase - hall of the double axes - queen's hall; Upper floor of the domestic quarter - shrine of the double axes; Royal workshops and magazines - east hall; North entrance - north lustral area - theatral area; The dependencies of the palace; Art treasures from Knossos.Knossos: the complete quide to the palace of MinosΚνωσός: πλήρης οδηγός του ανακτόρου του ΜίνωαLCC::D::DF::DF10Textellengfrahttp://hdl.handle.net/10442/8458
+
oai:http://helios-eie.ekt.gr:10442/84222015-02-12T09:00:14Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
Macedonia4 century bc-2 century bcBrecoulaki, Hariclia2006Vol Ι: Texte. Vol ΙΙ: Planches & Tableaux.La peinture funeraire de Macedoine. Emplois et Fonctions de la Couleur IVe-IIe s. av. J. -C.LCC::D::DF::DF10LCC::N::NDTextfrahttp://hdl.handle.net/10442/8422
+
oai:http://helios-eie.ekt.gr:10442/84192013-01-11T12:06:32Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardΣακελλαρίου, Μιχαήλ Β.Sakellariou, M. B.1989The polis state: definition and originLCC::C::CCLCC::D::DF::DF10Textenghttp://hdl.handle.net/10442/8419
+
oai:http://helios-eie.ekt.gr:10442/84532013-03-24T13:30:32Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardKantirea, Maria2007tables, planchesLes Dieux et les Dieux Augustes : le culte impérial en Grèce sous les Julio-claudiens et les Flaviens : études épigraphiques et archéologiquesLCC::C::CN::CN120Textellfrahttp://hdl.handle.net/10442/8453
+
oai:http://helios-eie.ekt.gr:10442/74292016-01-19T15:31:07Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
072: Steinhauer, G.072: Makres, A.310: Diffusion de BoccardMesseniaSpartaPéloponnèseΠελοπόννησοςΜεσσηνίαΣπάρτηLepenioti, ClaudiaZoumpaki, SofiaRizakis, Athanassios D.2004Laconia and Messenia / A.D. Rizakis, S. Zoumbaki, Cl. Lepenioti and the collaboration of G. Steinhauer and A. Makres.Roman Peloponnese II: roman personal names in their social context (Laconia and Messenia)LCC::C::CNTextellenghttp://hdl.handle.net/10442/7429
+
oai:http://helios-eie.ekt.gr:10442/73942014-05-09T08:06:57Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: Diffusion de BoccardMediterraneanΜεσόγειοςMichailidou, Anna2005PROLOGUE p. 11 - MATERIAL EVIDENCE AND THE RELATION BETWEEN WEIGHT AND VALUE p. 15 - EXCHANGING COMMODITIES: GIVING SANDALS, SENDING CLOTH, RENDERING SERVICES p. 23 - THE VALUE OF HUMANS AS A COMMODITY: SOME EVIDENCE FROM EGYPT AND THE NEAR EAST p. 33 - DATA BANK OF SELECTED BIBLIOGRAPHY Abbreviations p. 49 - Bibliographic catalogue (by author) p. 53 - Thematic catalogue (Greek key-words) p. 105 - A Guide to the bibliography (key-words in English) p. 149Weight and value in pre-coinage societies, vol. I: IntroductionLCC::H::HBLCC::DTextenghttp://hdl.handle.net/10442/7394
+
oai:http://helios-eie.ekt.gr:10442/73832015-02-12T09:00:15Zhdl_10442_63hdl_10442_11344ec_fundedresourcesdrivervideoall
310: de BoccardDionMacedoniaΔίονΜακεδονίαKremydi - Sicilianou, Sophia2004Multiple concealments from the Sanctuary of Zeus Olympios at Dion: three roman provincial coin hoardsLCC::C::CJTextellenghttp://hdl.handle.net/10442/7383
+0001-01-01T00:00:00Z/9999-12-31T23:59:59Z//oai_dc/100
diff --git a/samples/openaire3/GetRecord.xml b/samples/openaire3/GetRecord.xml new file mode 100644 index 0000000..9d770f4 --- /dev/null +++ b/samples/openaire3/GetRecord.xml @@ -0,0 +1,67 @@ + + + 2020-04-01T09:13:16Z + + https://dias.library.tuc.gr/oaiHandler + + + +
+ oai:dlib.tuc.gr:21811_oa + 2014-10-10T00:00:00Z + 28 +
+ + + info:eu-repo/semantics/article + Mainstream traffic flow control on freeways using variable speed limits + + Carlson Rodrigo Castelan () + Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa) + Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa) + Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou) + Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou) + Traffic incident management,traffic congestion management,traffic incident + management + + http://purl.tuc.gr/dl/dias/CF2DBEC9-EA4E-4D15-931D-C8D5D903D718 + 10.4237/transportes.v21i3.694 + Published at: 2014-09-25 + en + info:eu-repo/semantics/openAccess + License: http://creativecommons.org/licenses/by-nc-nd/4.0/ + application/pdf + Issued on: 2013 + Summarization: Mainstream Traffic Flow Control (MTFC), enabled via + variable speed limits, is a control concept for real-time freeway traffic management. The + benefits of MTFC for efficient freeway traffic flow have been demonstrated recently using an + optimal control approach and a feedback control approach. In this paper, both control approaches + are reviewed and applied to a freeway network in a simulation environment. The validated network + model used reflects an actual freeway (a ring-road), fed with actual (measured) demands. The + optimal and feedback control results are discussed, compared and demonstrated to improve + significantly the system performance. In particular, the feedback control scheme is deemed + suitable for immediate practical application as it takes into account operational requirements + and constraints, while its results are shown to be satisfactory. In addition, the control system + performance was not very sensitive to variations of the parameters of the feedback controller. + This result indicates that the burden associated with fine tuning of the controller may be + reduced in the field. + + ANPET - Associação Nacional de Pesquisa e Ensino em Transportes + + Presented on: Transportes + peer-reviewed + Bibliographic citation: R.C. Carlson, I. Papamichail, M. Papageorgiou, + "Mainstream traffic flow control on freeways using variable speed limits," Transportes, vol. 21, + no. 3, pp. 56-65, 2013. + doi:10.4237/transportes.v21i3.694 + + info:eu-repo/grantAgreement/EC/FP7/246686 + + +
+
+
diff --git a/samples/openaire3/ListIdentifiers.xml b/samples/openaire3/ListIdentifiers.xml new file mode 100644 index 0000000..c0c26b7 --- /dev/null +++ b/samples/openaire3/ListIdentifiers.xml @@ -0,0 +1,2 @@ + +2020-04-01T09:08:46Zhttps://dias.library.tuc.gr/oaiHandler
oai:dlib.tuc.gr:218112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:229732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:229692012-10-10T00:00:00Z28
oai:dlib.tuc.gr:229682012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244752012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244792012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244852012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244832012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244812012-10-10T00:00:00Z28
oai:dlib.tuc.gr:244602012-10-10T00:00:00Z28
oai:dlib.tuc.gr:246752012-10-10T00:00:00Z28
oai:dlib.tuc.gr:246802012-10-10T00:00:00Z28
oai:dlib.tuc.gr:246782012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309022012-10-10T00:00:00Z28
oai:dlib.tuc.gr:313532012-10-10T00:00:00Z28
oai:dlib.tuc.gr:301112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318542012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318572012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318622012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318642012-10-10T00:00:00Z28
oai:dlib.tuc.gr:327712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:327912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:328112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:328312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315242012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315252012-10-10T00:00:00Z28
oai:dlib.tuc.gr:328722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:328712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:330522012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315532012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315772012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315792012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315852012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315872012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317142012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317382012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317392012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:317732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318562012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318582012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318592012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318652012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318672012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318742012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:318962012-10-10T00:00:00Z28
oai:dlib.tuc.gr:331312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:331712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:331732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:330722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:331772012-10-10T00:00:00Z28
oai:dlib.tuc.gr:331792012-10-10T00:00:00Z28
oai:dlib.tuc.gr:324722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:325842012-10-10T00:00:00Z28
oai:dlib.tuc.gr:333332012-10-10T00:00:00Z28
oai:dlib.tuc.gr:334132012-10-10T00:00:00Z28
oai:dlib.tuc.gr:334712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:334912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:335312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:335712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:335782012-10-10T00:00:00Z28
oai:dlib.tuc.gr:335942012-10-10T00:00:00Z28
oai:dlib.tuc.gr:336312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:336332012-10-10T00:00:00Z28
oai:dlib.tuc.gr:336342012-10-10T00:00:00Z28
oai:dlib.tuc.gr:336362012-10-10T00:00:00Z28
oai:dlib.tuc.gr:336532012-10-10T00:00:00Z28
oai:dlib.tuc.gr:337512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:337912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338332012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338372012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:338912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:304712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308132012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306742012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306752012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306782012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306812012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306852012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306872012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306892012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306932012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306952012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307092012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307132012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307152012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307172012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307352012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307372012-10-10T00:00:00Z28
oai:dlib.tuc.gr:307712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308152012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308172012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308322012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308922012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308942012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308962012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308982012-10-10T00:00:00Z28
oai:dlib.tuc.gr:308992012-10-10T00:00:00Z28
oai:dlib.tuc.gr:339962012-10-10T00:00:00Z28
oai:dlib.tuc.gr:339912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:340132012-10-10T00:00:00Z28
oai:dlib.tuc.gr:340512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:340512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:340712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:341112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:341332012-10-10T00:00:00Z28
oai:dlib.tuc.gr:341512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:341912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:342122012-10-10T00:00:00Z28
oai:dlib.tuc.gr:343112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:343142012-10-10T00:00:00Z28
oai:dlib.tuc.gr:343312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:343522012-10-10T00:00:00Z28
oai:dlib.tuc.gr:343912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:344112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:344312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:345712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:345712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:345722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:345952012-10-10T00:00:00Z28
oai:dlib.tuc.gr:345952012-10-10T00:00:00Z28
oai:dlib.tuc.gr:306832012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309042012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309062012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309082012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309102012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309122012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309142012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309162012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309182012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309732012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309752012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:309932012-10-10T00:00:00Z28
oai:dlib.tuc.gr:310312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:310512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:310712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:310912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:311112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:311512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:313312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:313522012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314742012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314762012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314782012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314802012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314822012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314842012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314852012-10-10T00:00:00Z28
oai:dlib.tuc.gr:314872012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315022012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315062012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315082012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315102012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315122012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315132012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315152012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315192012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315212012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315002012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315262012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315292012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315362012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315402012-10-10T00:00:00Z28
oai:dlib.tuc.gr:315422012-10-10T00:00:00Z28
oai:dlib.tuc.gr:346512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:346512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:346742012-10-10T00:00:00Z28
oai:dlib.tuc.gr:346912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:347552012-10-10T00:00:00Z28
oai:dlib.tuc.gr:347912012-10-10T00:00:00Z28
oai:dlib.tuc.gr:348312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:348512012-10-10T00:00:00Z28
oai:dlib.tuc.gr:349112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:349322012-10-10T00:00:00Z28
oai:dlib.tuc.gr:349712012-10-10T00:00:00Z28
oai:dlib.tuc.gr:350112012-10-10T00:00:00Z28
oai:dlib.tuc.gr:350322012-10-10T00:00:00Z28
oai:dlib.tuc.gr:350722012-10-10T00:00:00Z28
oai:dlib.tuc.gr:351312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:351532012-10-10T00:00:00Z28
oai:dlib.tuc.gr:351532012-10-10T00:00:00Z28
oai:dlib.tuc.gr:352312012-10-10T00:00:00Z28
oai:dlib.tuc.gr:352512012-10-10T00:00:00Z28
1585732130453:827
diff --git a/samples/openaire3/ListRecords.xml b/samples/openaire3/ListRecords.xml new file mode 100644 index 0000000..55bfba7 --- /dev/null +++ b/samples/openaire3/ListRecords.xml @@ -0,0 +1,1495 @@ + +2020-04-01T09:11:29Zhttps://dias.library.tuc.gr/oaiHandler +
oai:dlib.tuc.gr:218112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMainstream traffic flow control on freeways using variable speed limitsCarlson Rodrigo Castelan ()Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)Traffic incident management,traffic congestion management,traffic incident managementhttp://purl.tuc.gr/dl/dias/CF2DBEC9-EA4E-4D15-931D-C8D5D903D71810.4237/transportes.v21i3.694Published at: 2014-09-25eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2013Summarization: Mainstream Traffic Flow Control (MTFC), enabled via variable speed limits, is a control concept for real-time freeway traffic management. The benefits of MTFC for efficient freeway traffic flow have been demonstrated recently using an optimal control approach and a feedback control approach. In this paper, both control approaches are reviewed and applied to a freeway network in a simulation environment. The validated network model used reflects an actual freeway (a ring-road), fed with actual (measured) demands. The optimal and feedback control results are discussed, compared and demonstrated to improve significantly the system performance. In particular, the feedback control scheme is deemed suitable for immediate practical application as it takes into account operational requirements and constraints, while its results are shown to be satisfactory. In addition, the control system performance was not very sensitive to variations of the parameters of the feedback controller. This result indicates that the burden associated with fine tuning of the controller may be reduced in the field.ANPET - Associação Nacional de Pesquisa e Ensino em TransportesPresented on: Transportespeer-reviewedBibliographic citation: R.C. Carlson, I. Papamichail, M. Papageorgiou, "Mainstream traffic flow control on freeways using variable speed limits," Transportes, vol. 21, no. 3, pp. 56-65, 2013. +doi:10.4237/transportes.v21i3.694info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:229732012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectMotorway flow optimization in presence of vehicle automation and communication systemsRoncoli Claudio()Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Motorway traffic controlTraffic flow optimisationQuadratic programminghttp://purl.tuc.gr/dl/dias/9BEA2A38-AFF2-49E1-B344-30E2C7BD34B5Published at: 2014-10-12eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: This paper describes a novel approach for defining optimal strategies in motorway traffic flow control, considering that a portion of vehicles are equipped with vehicle automation and communication systems. An optimisation problem, formulated as a Quadratic Programming (QP) problem, is developed with the purpose of minimising traffic congestion. The proposed problem is based on a first-order macroscopic traffic flow model able to capture the lane changing and the capacity drop phenomena. An application example demonstrates the achievable improvements in terms of the Total Time Spent if the vehicles travelling on the motorway are influenced by the control actions computed as a solution of the optimisation problem.Παρουσιάστηκε στο: International Conference on Engineering and Applied Sciences OptimizationNational Technical University of AthensΒιβλιογραφική αναφορά: C. Roncoli, M. Papageorgiou, I. Papamichail, "Motorway flow optimization in presence of vehicle automation and communication systems," in Proceedings of the 1st International Conference on Engineering and Applied Science Optimization (OPT-i), 2014, pp. 519-529. full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:229692012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectOn microscopic modelling of adaptive cruise control systemsΝτουσακης Ιωαννης-Αντωνιος(http://users.isc.tuc.gr/~intousakis1)Ntousakis Ioannis-Antonios(http://users.isc.tuc.gr/~intousakis1)Νικολος Ιωαννης(http://users.isc.tuc.gr/~inikolos)Nikolos Ioannis(http://users.isc.tuc.gr/~inikolos)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Adaptive cruise controlTraffic flow modellingMicroscopic simulationhttp://purl.tuc.gr/dl/dias/F89B7182-6D1F-4179-A6D8-A875F09FD053Published at: 2014-10-12eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: The Adaptive Cruise Control (ACC) system, is one of the emerging vehicle technologies that has already been deployed in the market. Although it was designed mainly to enhance driver comfort and passengers’ safety, it also affects the dynamics of traffic flow. For this reason, a strong research interest in the field of modelling and simulation of ACC-equipped vehicles has been increasingly observed in the last years. In this work, previous modelling efforts reported in the literature are reviewed, and some critical aspects to be considered when designing or simulating such systems are discussed. Moreover, the integration of ACC-equipped vehicle simulation in the commercial traffic simulator Aimsun is described; this is subsequently used to run simulations for different penetration rates of ACC-equipped vehicles, different desired time-gap settings and different networks, to assess their impact on traffic flow characteristics.Παρουσιάστηκε στο: International Symposium of Transport Simulation 2014ElsevierBibliographic citation: I.A. Ntousakis, I.K. Nikolos, M. Papageorgiou, "On Microscopic Modelling Of Adaptive Cruise Control Systems," in Proceedings of the 4th International Symposium of Transport Simulation (ISTS), 2014. full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:229682012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectStability investigation for simple PI-controlled traffic systemsKarafyllis Iason()Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Systems, Nonlinear,nonlinear systems,systems nonlinearDES (System analysis),Discrete event systems,Sampled-data systems,discrete time systems,des system analysis,discrete event systems,sampled data systemsPI-regulatorhttp://purl.tuc.gr/dl/dias/A5DB2E56-C2C1-4AF6-A769-6BE271182E1C978-1-4799-2889-7 10.1109/ISCCSP.2014.6877846Published at: 2014-10-13eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: This paper provides sufficient conditions for the Input-to-State Stability property of simple uncertain vehicular-traffic network models under the effect of a PI-regulator. Local stability properties for vehicular-traffic networks under the effect of PI-regulator control are studied as well: the region of attraction of a locally exponentially stable equilibrium point is estimated by means of Lyapunov functions.Παρουσιάστηκε στο: 6th International Symposium on Communications, Controls, and Signal ProcessingInstitute of Electrical and Electronics EngineersBibliographic citation: I. Karafyllis, M. Papageorgiou, "Stability investigation for simple PI-controlled traffic systems," in Proceedings of 6th International Symposium on Communications, Controls, and Signal Processing, 2014, pp. 186-189.full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244732012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMicrosimulation analysis of practical aspects of traffic control with variable speed limitsΠαπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)Muller Eduardo Rauh()Carlson Rodrigo Castelan()Kraus Werner()The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21. The paper has been published by IEEE (http://ieeexplore.ieee.org/Xplore/defdeny.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fstamp%2Fstamp.jsp%3Ftp%3D%26arnumber%3D7006741&denyReason=-134&arnumber=7006741&productsMatched=null) and is IEEE copyrighted.Traffic volume,traffic flow,traffic volumeMainstream Traffic Flow ControlVariable Speed LimitsFreeway traffic controlhttp://purl.tuc.gr/dl/dias/1968E8C7-94C6-4EB3-A513-C686F3F12B7910.1109/TITS.2014.2374167Published at: 2015-03-26eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2015Summarization: Mainstream traffic flow control (MTFC) with variable speed limits (VSLs) is a freeway traffic control method that aims to maximize throughput by regulating the mainstream flow upstream from a bottleneck. Previous studies in a macroscopic simulator have shown optimal and feedback MTFC potential to improve traffic conditions. In this paper, local feedback MTFC is applied in microscopic simulation for an on-ramp merge bottleneck. Traffic behavior reveals important aspects that had not been previously captured in macroscopic simulation. Mainly, the more realistic VSL application at specific points instead of along an entire freeway section produces a slower traffic response to speed limit changes. In addition, the nonlinear capacity flow/speed limit relation observed in the microscopic model is more pronounced than what was observed at the macroscopic level. After appropriate modifications in the control law, significant improvements in traffic conditions are obtained.Institute of Electrical and Electronics EngineersPresented on: IEEE Transactions on Intelligent Transportation Systemspeer-reviewedBibliographic citation: E.R. Müller, R.C. Carlson, W. Kraus Jr, M. Papageorgiou, "Microsimulation analysis of practical aspects of traffic control with variable speed limits," IEEE Transactions on Intelligent Transportation Systems, vol. 16, no.1, pp. 512-523, 2015.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244752012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGlobal exponential stability for discrete-time networks with applications to traffic networksΚαραφυλλης Ιασων(http://users.isc.tuc.gr/~ikarafyllis)Karafyllis Iason(http://users.isc.tuc.gr/~ikarafyllis)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21. The paper has been published by IEEE (http://ieeexplore.ieee.org/Xplore/defdeny.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fstamp%2Fstamp.jsp%3Ftp%3D%26arnumber%3D6954406&denyReason=-134&arnumber=6954406&productsMatched=null) and is IEEE copyrighted.DES (System analysis),Discrete event systems,Sampled-data systems,discrete time systems,des system analysis,discrete event systems,sampled data systemsSystems, Nonlinear,nonlinear systems,systems nonlinearTraffic networkshttp://purl.tuc.gr/dl/dias/7837D167-81E0-4BB8-846D-67E9022A351010.1109/TCNS.2014.2367364 Published at: 2015-03-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2015Summarization: This paper provides sufficient conditions for global asymptotic stability and global exponential stability, which can be applied to nonlinear, large-scale, uncertain discrete-time networks. The conditions are derived by means of vector Lyapunov functions. The obtained results are applied to traffic networks for the derivation of sufficient conditions of global exponential stability of the uncongested equilibrium point of the network. Specific results and algorithms are provided for freeway traffic models. Various examples illustrate the applicability of the obtained results.Institute of Electrical and Electronics EngineersPresented on: IEEE Transactions on Control of Network Systemspeer-reviewedBibliographic citation: I. Karafyllis, M. Papageorgiou, "Global exponential stability for discrete-time networks with applications to traffic networks," IEEE Transactions on Control of Network Systems, vol.2, no.1, pp.68-77, 2015.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244792012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectModel predictive control for multi-lane motorways in presence of VACSRoncoli Claudio(http://users.isc.tuc.gr/~croncoli)Roncoli Claudio(http://users.isc.tuc.gr/~croncoli)Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Vehicle automation and communication systemsVACShttp://purl.tuc.gr/dl/dias/E2D5690E-3ECA-464C-B283-A88327CEB21F10.1109/ITSC.2014.6957739 Published at: 2015-03-30eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: A widespread use of vehicle automation and communication systems (VACS) is expected in the next years. This may lead to improvements in traffic management because of the augmented possibilities of using VACS both as sensors and as actuators. To achieve this, appropriate studies, developing potential control strategies to exploit the VACS availability, are essential. This paper describes a model predictive control framework that can be used for the integrated and coordinated control of a motorway system, considering that vehicles are equipped with specific VACS. Microscopic simulation testing demonstrates the effectiveness and the computational feasibility of the proposed approach.Παρουσιάστηκε στο: 17th International IEEE Conference on Intelligent Transportation SystemsInstitute of Electrical and Electronics EngineersBibliographic citation: C. Roncoli, I. Papamichail, M. Papageorgiou, "Model predictive control for multi-lane motorways in presence of VACS," in 17th International IEEE Conference on Intelligent Transportation Systems (ITSC 2014), Qingdao, China, 8-11 October 2014, pp. 501-507.full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244852012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectAn optimisation-oriented first-order multi-lane model for motorway trafficRoncoli Claudio(http://users.isc.tuc.gr/~croncoli)Roncoli Claudio(http://users.isc.tuc.gr/~croncoli)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Macroscopic traffic flow modellingMulti-lane motorway trafficCapacity drophttp://purl.tuc.gr/dl/dias/27417F46-C51F-4D7E-90ED-067E7986E4AAPublished at: 2015-03-30eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2015Summarization: Emerging vehicle automation and communication systems (VACS) may contribute to the mitigation of motorway traffic congestion on the basis of appropriate traffic control strategies. Based on appropriate VACS-based actuators, future traffic control may incorporate vehicle speed control and lane-assignment or lane-changing recommendations. To this end, an appropriate traffic flow model is needed, both for control strategy design and as a no-control base case for comparative evaluation studies. In this context, this paper presents a novel first-order multi-lane macroscopic traffic flow model for motorways which is mainly intended for use within a related optimal control problem formulation. The starting point is close to the well-known cell-transmission model (CTM), which is modified and extended to consider additional aspects of the traffic dynamics, such as lane changing and the capacity drop. The model has been derived with a view to combine realistic traffic flow description with a simple (piecewise linear) mathematical form, which can be exploited for efficient optimal control problem formulations. Although the model has been primarily derived for use in future traffic conditions including VACS, it may also be used for conventional traffic flow representation. In fact, the accuracy of the proposed modelling approach is demonstrated through calibration and validation procedures using conventional real data from an urban motorway located in Melbourne, Australia.Presented on: Transportation Research BoardBibliographic citation: C. Roncoli, M. Papageorgiou, I. Papamichail, "An optimisation-oriented first-order multi-lane model for motorway traffic," in 94th Annual Meeting of the Transportation Research Board (TRB), 11-15 January 2015, p.p 15-2905.full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244832012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectAssessing the impact of a cooperative merging system on highway traffic using a microscopic flow simulatorΝτουσακης Ιωαννης-Αντωνιος(http://users.isc.tuc.gr/~intousakis1)Ntousakis Ioannis-Antonios(http://users.isc.tuc.gr/~intousakis1)Πορφυρη Καλλιρροη(http://users.isc.tuc.gr/~kporfyri)Porfyri Kalliroi(http://users.isc.tuc.gr/~kporfyri)Νικολος Ιωαννης(http://users.isc.tuc.gr/~inikolos)Nikolos Ioannis(http://users.isc.tuc.gr/~inikolos)Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Microscopic flow simulatorhttp://purl.tuc.gr/dl/dias/2587B571-9241-4258-AD2D-26FD08C71DFE10.1115/IMECE2014-39850Published at: 2015-03-30eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: Vehicle merging on highways has always been an important aspect, which directly affects the capacity of the highway. Under critical traffic conditions, the merging of main road traffic and on-ramp traffic is known to trigger speed breakdown and congestion. Additionally, merging is one of the most stressful tasks for the driver, since it requires a synchronized set of observations and actions. Consequently, drivers often perform merging maneuvers with low efficiency. Emerging vehicle technologies, such as cooperative adaptive cruise control and/or merging-assistance systems, are expected to enable the so-called “cooperative merging”. The purpose of this work is to propose a cooperative merging system and evaluate its performance and its impact on highway capacity. The modeling and simulation of the proposed methodology is performed within the framework of a microscopic traffic simulator. The proposed model allows for the vehicle-to-infrastructure (V2I) and vehicle-to-vehicle (V2V) communication, which enables the effective handling of the available gaps between vehicles. Different cases are examined through simulations, in order to assess the impact of the system on traffic flow, under various traffic conditions. Useful conclusions are derived from the simulation results, which can form the basis for more complex merging algorithms and/or strategies that adapt to traffic conditions.Presented on: American Society of Mechanical EngineersBibliographic citation: I. A. Ntousakis, K. Porfyri, I.K. Nikolos, M. Papageorgiou, "Assessing the impact of a cooperative merging system on highway traffic using a microscopic flow simulator," in ASME 2014 International Mechanical Engineering Congress and Exposition (IMECE2014), Montreal, Quebec, Canada, 14-20 November 2014, pp. V012T15A024.full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244812012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectLocal ramp metering with distant downstream bottlenecks: a comparative studyWang Yibing()Kan Yuheng()Παπαγεωργιου Μαρκος(http://users.isc.tuc.gr/~mpapageorgiou)Papageorgiou Markos(http://users.isc.tuc.gr/~mpapageorgiou)Παπαμιχαηλ Ιωαννης(http://users.isc.tuc.gr/~ipapa)Papamichail Ioannis(http://users.isc.tuc.gr/~ipapa)The research leading to these results has received funding from the European Research Council under the European Union's Seventh Framework Programme (FP/2007-2013) / ERC Grant Agreement n. 321132, project TRAMAN21.Express highways--Ramp metering,Expressway ramp metering,Freeway ramp metering,ramp metering traffic engineering,express highways ramp metering,expressway ramp metering,freeway ramp meteringALINEAPI-ALINEAhttp://purl.tuc.gr/dl/dias/9A613301-0261-49EC-85C0-1B6C7A3F01FD10.1109/ITSC.2014.6957782 Published at: 2015-03-30eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by-nc-nd/4.0/application/pdfIssued on: 2014Summarization: The well-known feedback ramp metering algorithm ALINEA can be applied for local ramp metering or included as a key component in a coordinated ramp metering system. ALINEA uses real-time occupancy measurements from the ramp flow merging area that may be at most few hundred meters downstream of the metered on-ramp nose. In many practical cases, however, bottlenecks with smaller capacity than the merging area may exist further downstream for various reasons, which suggests using measurements from those further downstream bottlenecks. Recent theoretical and simulation studies indicate that ALINEA may lead to a poorly damped closed-loop behavior in this case, but PI-ALINEA, a suitable Proportional-Integral (PI) extension of ALINEA, can lead to satisfactory control performance. This paper addresses the same local ramp-metering problem in the presence of downstream bottlenecks, with a particular focus on the general capacity of PI-ALINEA with three distinct types of bottleneck that may often be encountered in practice, i.e. (1) an uphill case; (2) a lane-drop case; (3) an un-controlled on-ramp case. Extensive simulation studies are conducted using a macroscopic traffic flow model to demonstrate that the performance of ALINEA indeed deteriorates in each of these bottleneck cases, +while significant improvement is obtained using PI-ALINEA in all cases. Moreover, with its control parameters appropriately tuned beforehand, PI-ALINEA is found to be universally applicable, with little fine-tuning required for field applications.Παρουσιάστηκε στο: 17th International IEEE Conference on Intelligent Transportation SystemsInstitute of Electrical and Electronics EngineersBibliographic citation: Y. Wang, Y. Kan, M. Papageorgiou, I. Papamichail, "Local ramp metering with distant downstream bottlenecks: a comparative study," in 17th International IEEE Conference on Intelligent Transportation Systems (ITSC 2014), Qingdao, China, 8-11 October 2014, pp. 768-773.full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:244602012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLearning model-free robot control by a Monte Carlo EM algorithm +Toussaint Marc()Kontes Georgios()Πιπεριδης Σαββας(http://users.isc.tuc.gr/~spiperidis)Piperidis Savvas(http://users.isc.tuc.gr/~spiperidis)Vlassis Nikos()Reinforcement learninghttp://purl.tuc.gr/dl/dias/5830B8CA-9579-4734-9AEE-DB24EA53FD55 10.1007/s10514-009-9132-0Published at: 2015-03-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2009Summarization: We address the problem of learning robot control by model-free reinforcement learning (RL). We adopt the probabilistic model of Vlassis and Toussaint (2009) for model-free RL, and we propose a Monte Carlo EM algorithm (MCEM) for control learning that searches directly in the space of controller parameters using information obtained from randomly generated robot trajectories. MCEM is related to, and generalizes, the PoWER algorithm of Kober and Peters (2009). In the finite-horizon case MCEM reduces precisely to PoWER, but MCEM can also handle the discounted infinite-horizon case. An interesting result is that the infinite-horizon case can be viewed as a ‘randomized’ version of the finite-horizon case, in the sense that the length of each sampled trajectory is a random draw from an appropriately constructed geometric distribution. We provide some preliminary experiments demonstrating the effects of fixed (PoWER) vs randomized (MCEM) horizon length in two simulated and one real robot control tasks. +Springer VerlagPresented on: Autonomous Robotspeer-reviewedBibliographic citation: N. Vlassis, M. Toussaint, G. Kontes, and S. Piperidis, "Learning model-free robot control by a Monte Carlo EM algorithm," Autonomous Robots, vol. 27, no. 2, pp. 123-130, 2009.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:246752012-10-10T00:00:00Z28
info:eu-repo/semantics/articleModeling topsoil carbon sequestration in two contrasting crop production to set-aside conversions with RothC–Calibration issues and uncertainty analysisΝικολαιδης Νικολαος(http://users.isc.tuc.gr/~ninikolaidis)Nikolaidis Nikolaos(http://users.isc.tuc.gr/~ninikolaidis)S/N sequastrationAggregationParticulate OMRothC modelingCalibrationhttp://purl.tuc.gr/dl/dias/29A64EA8-C506-4D7B-B4D5-E961AABDFCD110.1016/j.agee.2012.11.010Published at: 2015-04-28eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2013Summarization: Model simulations of soil organic carbon turnover in agricultural fields have inherent uncertainties due to input data, initial conditions, and model parameters. The RothC model was used in a Monte-Carlo based framework to assess the uniqueness of solution in carbon sequestration simulations. The model was applied to crop production to set aside conversions in Iowa (sandy clay-loam soil, humid-continental climate) and Greece (clay-loam soil, +Mediterranean). The model was initialized and calibrated with particulate organic carbon data obtained by physical fractionation. The calibrated values for the Iowa grassland were 5.05 t C ha-1, 0.34 y-1, and 0.27 y-1 24 for plant litter input and decomposition rate constants for resistant plant material (RPM) and humus, respectively, while for the Greek shrubland these were 3.79 +t C ha-1, 0.21 y-1, and 0.0041 y-126 , correspondingly. The sensitivity analysis revealed that for both sites, the total plant litter input and the RPM rate constant showed the highest sensitivity. The Iowa soil was projected to sequester 17.5 t C ha-1 and the Greek soil 54 tC ha- 28 1 29 over 100 years and the projected uncertainty was 65.6% and 70.8%, respectively. We +propose this methodology to assess the factors affecting carbon sequestration in agricultural soils and quantify the uncertainties.ElsevierPresented on: peer-reviewedBibliographic citation: F. E. Stamati, N. P. Nikolaidis, J. L. Schnoor, "Modeling topsoil carbon sequestration in two contrasting crop production to set-aside conversions with RothC–Calibration issues and uncertainty analysis," Agriculture, Ecosystems & Environment, vol. 165, pp. 190-200, Jan. 2013.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:246802012-10-10T00:00:00Z28
info:eu-repo/semantics/articleNitrogen cycling and relationships between ammonia oxidizers and denitrifiers in a clay-loam soilΝικολαιδης Νικολαος(http://users.isc.tuc.gr/~ninikolaidis)Nikolaidis Nikolaos(http://users.isc.tuc.gr/~ninikolaidis)Παρανυχιανακης Νικολαος(http://users.isc.tuc.gr/~nparanychianakis)Paranychianakis Nikolaos(http://users.isc.tuc.gr/~nparanychianakis)Τσικνια Μυρτω(http://users.isc.tuc.gr/~mtsiknia)Tsiknia Myrto(http://users.isc.tuc.gr/~mtsiknia)Γιαννακης Γεωργιος(http://users.isc.tuc.gr/~gegiannakis)Giannakis Georgios(http://users.isc.tuc.gr/~gegiannakis)Καλογερακης Νικος(http://users.isc.tuc.gr/~nkalogerakis)Kalogerakis Nikos(http://users.isc.tuc.gr/~nkalogerakis)Ammonia oxidizing archaeaAmmonia oxidizing bacteriaNitrificationImmobilizationhttp://purl.tuc.gr/dl/dias/2908FD83-FCE7-4590-AD67-239BB280952D10.1007/s00253-013-4765-5Published at: 2015-04-29eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2013Summarization: This study investigated the effect of municipal solid waste (MSW) compost (0, 50, and 100 t/ha) on N cycling and the microorganisms involved in it, in a clay-loam soil. After a release of nitrates (NO3--N) in the first 6 days after compost incorporation, soil NO3--N content remained constant in all the treatments by day 62 suggesting immobilization of N. Then, soil NO3--N content increased, especially in the highest compost dose implying that the immobilization effect has been relieved, at least to some extent. amoA gene copies of ammonia oxidizing archaea (AOA) and ammonia oxidizing bacteria (AOB) followed strictly the pattern of soil NO3--N content throughout the study providing evidence that both groups were involved in ammonia oxidation and changes in their population can be used as ‘indicator’ for predicting changes in soil nitrification status. Moreover, the strong correlation between AOA 12 and AOB amoA copies (R2: 0.94) and the high slope (13) of the curve suggest that AOA had probably a more important role on ammonia oxidation under conditions of low ammonia availability. Denitrifying genes (nirS, nirK, nosZ) also followed the general pattern of soil NO3–-N and they were strongly correlated with both groups of ammonia oxidizers, and particularly archaea, suggesting strong interrelationships among them. Losses of N through denitrification, as they were estimated from total nitrogen decrease, were inversely related to soil NO3--N content. Similar to ammonia oxidizers, denitrifying gene copies did not differ among compost treatments an effect that could be probably explained by the low availability of organic-C of the MSW compost and hence the competition with aerobic heterotrophs.Springer VerlagPresented on: peer-reviewedBibliographic citation: N. Paranychianakis, M. Tsiknia, G. Giannakis, N. P. Nikolaidis, N. Kalogerakis, "Nitrogen cycling and relationships between ammonia oxidizers and denitrifiers in a clay-loam soil," Applied microbiology and biotechnology, vol. 97, no. 12, pp. 5507-5515, Jun.2013.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:246782012-10-10T00:00:00Z28
info:eu-repo/semantics/bookPartSoil organic matter dynamics and structureΝικολαιδης Νικολαος(http://users.isc.tuc.gr/~ninikolaidis)Nikolaidis Nikolaos(http://users.isc.tuc.gr/~ninikolaidis)Bidoglio G.()Soil carbonSoil nitrogenFeedback mechanicshttp://purl.tuc.gr/dl/dias/065FB389-C151-440C-A1D9-F6AF8DD375FE10.1007/978-94-007-5961-9_6Published at: 2015-04-28eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2013Summarization: Soil ecosystem functions have significantly deteriorated due to agricultural intensification with dramatic consequences on carbon loss, loss of soil biodiversity, erosion, compaction as well as unsustainable use of water and mineral resources. Sustainable agricultural practices are necessary if we are to face the challenge of food security while preserving the integrity of soil and aquatic ecosystems. Conservation agriculture which is comprised of zero or minimum tillage, carbon amendments and crop rotations holds great promise in delivering higher yields, using water and soil resources in a sustainable manner and increasing soil biodiversity. This paper presents a synthesis of current knowledge on soil ecosystem processes and modeling with a focus on carbon and nitrogen dynamics and their link to soil structure, and proposes a conceptual framework for model parameterization capable of predicting critical soil functions and potential shifts. +We reviewed the dynamics of carbon, nitrogen and soil structure with an emphasis in elucidating predominant state variables and the interaction with plants and food web dynamics. Existing models that simulate the dynamics of organic matter and structure in soils at various scales were evaluated for their ability to simulate the functions of soil ecosystem. Current modeling approaches treat carbon, nitrogen and soil structure for the most part separately without incorporating feedback mechanisms. The synergistic and antagonistic processes between bacteria and plants and fungi and plants are partially understood and more importantly the community lacks the knowledge to predict if and when these processes fail and any related potential ecosystem shift. A conceptual modeling framework is proposed, developed along the following three axes: incorporate emerging ecosystem state variables, account for the ecology of life in soils, and model processes from first principles. A synthesis of the carbon and nitrogen cycles is suggested in which the dynamics of the two cycles are interlinked. State variables in soil ecosystem models that link carbon and nitrogen dynamics with soil structure and the biological community are recommended. Plant feedback mechanisms with the physical, biochemical and biotic soil components and the symbiotic relationship between bacteria, fungi, and plants should be modeled using principles from the ecological succession theory that would relate the taxonomic structure with function and nutrient fluxes. A conceptual model of soil structure and soil stability is suggested that links the soil organic matter sub-model to an aggregation sub-model and a dynamic soil structure sub-model. The development of new generation soil ecosystem models is a necessary step to better quantify soil functions, assess possible soil tipping points, and develop methods to restore soil functions.Appearing in: Sustainable Agriculture ReviewsSpringer VerlagBibliographic citation: N. P. Nikolaidis, G. Bidoglio, "Soil Organic Matter Dynamics and Structure," in Sustainable Agriculture Reviews, vol. 12, Sustainable Agriculture Reviews, E. Lichtfouse, Ed., Dordrecht, Springer Science+Business Media, 2013, pp.175-199.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309022012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDissolution of a well-defined trichloroethylene pool +in saturated porous media: +Experimental design and aquifer characterization Χρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)A three-dimensional, bench-scale model aquifer was constructed +to study the dissolution of a TCE pool. The aquifer +consisted of medium-sized sand packing conveying steady, unidirectional +flow. A key aspect of the experimental design was a +mechanism by which a TCE pool of an ideal (circular) geometry +was placed and maintained in direct contact with the +bottom of the porous medium. The aqueous plume emanating +from this pool was monitored at several downgradient sampling +stations and analyzed using the analytical solution derived by Chrysikopoulos [1995]. All transport parameters required +by this solution, with the exception of the average mass +transfer coefficient (k*) for the pool, were estimated independently. +Of special note are the dispersion parameters, which +were estimated independently by fitting the results of a bromide +tracer test with a newly derived analytical solution describing +the transport of a conservative tracer in a homogeneous +aquifer of finite thickness.TCE Pool Dissolution Experiments,Column Experiment,Tracer Experiment,Experimental DesignThomas C. HarmonKenneth Y. Leehttp://purl.tuc.gr/dl/dias/86702C48-87CE-4344-AC4A-7ADE710FB328 10.1029/2000WR900082 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2000Summarization: A unique three-dimensional bench-scale model aquifer is designed and +constructed to carry out dense nonaqueous phase liquid (DNAPL) pool dissolution +experiments. The model aquifer consists of a rectangular glass tank with internal +dimensions 150.0 cm length, 21.6 cm width, and 40.0 cm height. The formation of a welldefined +circular pool with a perfectly flat pool-water interface is obtained by a bottom +plate with a precise cutout to contain the DNAPL. The aquifer is packed with a wellcharacterized +relatively uniform sand. A conservative tracer is employed for the +determination of the longitudinal and transverse aquifer dispersivities. The dissolution +studies are conducted using a circular trichloroethylene (TCE) pool. The sorption +characteristics of TCE onto the aquifer sand are independently determined from a flowthrough +column experiment. Steady state dissolved TCE concentrations at specific +downstream locations within the aquifer are collected under three different interstitial +velocities. An appropriate overall mass transfer coefficient is determined from each data +set. The data collected in this study are useful for the validation of numerical and +analytical DNAPL pool dissolution models.University of California PressΠαρουσιάστηκε στο: WATER RESOURCES RESEARCH,peer-reviewedBibliographic citation: Constantinos V. Chrysikopoulos,Kenneth Y. Lee ,Thomas C. Harmon , "Dissolution of a well-defined trichloroethylene pool in saturated porous media: +Experimental design and aquifer characterization" , Water Resources Research. 2000, 36(7):1687-1696 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:313532012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePower Optimization of Wind Electric Conversion Systems Integrated into the Utility GridKalaitzakis K.C()Vachtsevanos, G.J(http://viaf.org/viaf/23660343)Δημοσίευση σε διεθνές περιοδικόWECS (Wind energy conversion systems),wind energy conversion systems,wecs wind energy conversion systemsElectric power pooling,Electric utility systems, Interconnected,Interties (Electric utilities),System interconnection, Electric power,Transmission line interconnection,interconnected electric utility systems,electric power pooling,electric utility systems interconnected,interties electric utilities,system interconnection electric power,transmission line interconnectionhttp://purl.tuc.gr/dl/dias/B7856E80-4C48-4A5B-A894-F27AF04E7517http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.01.pdfPublished at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1982Περίληψη: This paper is concerned with the interconnected operation of WECS with the utility grid.Specifically ,it addresses problems of stability , protection and power flow optimization from the WECS to the power lines. + The approach followed contains both a theoritical and a experimental component.A variable-speed constant-frequency wind electric system utilizing a synchronous generator and line-commutated inverter provides experimental verification of computer simulation studies for the dynamic and steady-state performance of the interconnected system. + Simulation results indicate that the transient bahavior of the wind electric-power grid system is satisfactory with appropriate devices providing adequate protection to both the wind generator and the utility grid from a variety of fault conditions. + A maximum power tracking mechanism has been designed for the continuous matching of the wind-electric generator to the grid impedance characteristics.As a result,maximum electric power is transferred from the wind machine to the power lines.Computer simulation studies of this type of operation indicate the substantial improvement in power transfer that is achieved. + The proposed scheme tends to minimize equipment and maintenance costs while maximizing the energy transfer capabilities of the wind-electric conversion system and maintaining a high degree of reliability in overall system performance.Wind EngineeringΠαρουσιάστηκε στο: Wind Engineepeer-reviewedBibliographic citation: K.C. Kalaitzakis and G.J. Vachtsevanos, "Power Optimization of Wind Electric Conversion Systems Integrated into the Utility Grid," Wind Engineering, vol. 6, no. 1, pp. 24-36, 1982.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:301112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleΣυνέντευξη με τη Μαρία ΓούλαΧατζησαββα Δημητρα(http://users.isc.tuc.gr/~dchatzisavva)Chatzisavva Dimitra(http://users.isc.tuc.gr/~dchatzisavva)http://purl.tuc.gr/dl/dias/0E857A04-510F-42CC-BDBE-1CE55E5AEEBBPublished at: 2015-09-17elinfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Μη διαθέσιμη περίληψηNot available summarizationΤεχνικό Επιμελητήριο Ελλάδος. Τμήμα Κεντρικής ΜακεδονίαςΠαρουσιάστηκε στο: Τεχνογράφημαnon peer-reviewedΒιβλιογραφική αναφορά: Δ. Χατζησάββα, "Συνέντευξη με τη Μαρία Γούλα," Τεχνογράφημα, τομ. 372, σ.20-21, 2009.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318542012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePenetration of Wind Electric Conversion Systems into the Utility GridVachtsevanos, G.J(http://viaf.org/viaf/23660343)Kalaitzakis K.C()Δημοσίευση σε επιστημονικό περιοδικό Control systemsInterconnected systemsMesh generationPower generationPower system interconnectionPower system modelingPower system simulationSystem performanceWind energy generationWind power generationhttp://purl.tuc.gr/dl/dias/E8EDE09B-CE9E-4200-984B-134E9BD2412Ehttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.05.pdf 10.1109/TPAS.1985.319198Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1985Summarization: This paper is concerned with the development of appropriate models for the interconnected operation of wind generator clusters with an autonomous power system and simulation techniques for the study of the degree of penetration of such wind electric conversion devices when operating in parallel with the utility grid. The quality of the interconnected system performance is specified in terms of operational constraints and the resultant penetration strategy is implemented via a microprocessor-based control scheme. The strategy assures a satisfactory level of system performance while optimizing the available energy transfer from the wind generators to the utility grid.Institute of Electrical and Electronics EngineersΠαρουσιάστηκε στο: Power Apparatus and Systems, IEEE Transactions onpeer-reviewedBibliographic citation: G.J. Vachtsevanos, K.C. Kalaitzakis, "Penetration of Wind Electric Conversion Systems into the Utility Grid," Power Apparatus and Systems, IEEE Transactions on., vol.PAS-104, no. 7, pp. 1677-1683, Jul. 1985. doi: 10.1109/TPAS.1985.319198info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318572012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDesign and development of a new electronic sphygmomanometerVachtsevanos, G.J(http://viaf.org/viaf/23660343)Kalaitzakis K.C()Papamarkos, N(http://viaf.org/viaf/305652480)Δημοσίευση σε επιστημονικό περιοδικό Electronic designElectronic sphygmomanometerNoninvasive blood pressure measurementhttp://purl.tuc.gr/dl/dias/045541BB-1FC0-4068-8E91-2924DA46B00Bhttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.06.pdf 10.1007/BF02448933Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1985Summarization: The paper introduces a new technique for the indirect measurement of the systolic and diastolic blood pressure in humans. The technique is based upon a statistically consistent relationship between the amplitude of the pulsatile pressure waveform at the systolic and diastolic points and the amplitude of pulse signals detected when the artery is fully occluded. An adaptive measurement philosophy has been implemented in the design of an electronic sphygmomanometer which, in addition to a pressure transducer, contains suitable electronic instrumentation for processing and displaying the electronic signals. Verification of overall system accuracy is accomplished with direct comparison with manual auscultatory measurements. Clinical testing of a prototype indicates a satisfactory performance; measurement errors are maintained well within proposed standards for automated sphygmomanometers.Kluwer Academic PublishersPresented on: Medical and Biological Engineering and Computingpeer-reviewedBibliographic citation: G.J. Vachtsevanos, K.C. Kalaitzakis, and N.E, Papamarkos, "Design and development of a new electronic sphygmomanometer," Medical and Biological Engineering and Computing ., vol. 23, no. 5, pp. 453-458, Sep. 1985. doi:10.1007/BF02448933info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318622012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA Methodology for Dynamic Utility Interactive Operation of Dispersed Storage and Generation DevicesVachtsevanos, G.J(http://viaf.org/viaf/23660343)Kalaitzakis K.C()Δημοσίευση σε επιστημονικό περιοδικόComputational modelingControl equipmentDistributed power generationPower industryPower system dynamicsPower system interconnectionPower system modelingPower system simulationPower system stabilityReactive powerIEEE Power & Energy Societyhttp://purl.tuc.gr/dl/dias/9F28B8AF-438E-4A8A-B515-EC3C921B4986http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.07.pdf 10.1109/TPWRS.1987.4335072Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1987Summarization: This paper is introducing a new methodology for the dynamic integration of dispersed storage and generation devices into the electric utility distribution network operations. The dispersed source is viewed as an active device contributing towards the regulation of real and reactive power flows while improving the stability of the power system. Conceptual means are developed for an effective DSG-utility grid interface. Computer models of appropriate interconnection and control equipment are used in simulation studies to test the effectiveness of control strategies and optimize design parameters. Simulation results indicate that load frequency control and voltage regulation may be effectively accomplished with dispersed generators within a fraction of the time required for conventional regulating units. Appropriate modulation and conditioning of the DSG-output power can assist in damping out undesirable power oscillations. Implementation of the proposed policies may result in reduced load following requirements for conventional power generating units, increase the value and acceptability of new energy technologies, and improve power quality and stability of the interconnected system.Institute of Electrical and Electronics EngineersΠαρουσιάστηκε στο: Power Systems, IEEE Transactions onpeer-reviewedBibliographic citation: G.J. Vachtsevanos, K.C. Kalaitzakis, "A Methodology for Dynamic Utility Interactive Operation of Dispersed Storage and Generation Devices," Power Systems, IEEE Transactions on., vol. PWRS-2, no. 1, pp. 45-51, Feb. 1987. doi: 10.1109/TPWRS.1987.4335072info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318642012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA Hybrid Photovoltaic Simulator for Utility Interactive StudiesVachtsevanos, G.J(http://viaf.org/viaf/23660343)Kalaitzakis K.C()Δημοσίευση σε επιστημονικό περιοδικό Analog-digital conversionPhotovoltaic cellsPhotovoltaic energy systems,Photovoltaic facilities,Photovoltaic power plants,Photovoltaic solar generating plants,Power plants, Photovoltaic,Power systems, Photovoltaic,photovoltaic power systems,photovoltaic energy systems,photovoltaic facilities,photovoltaic power plants,photovoltaic solar generating plants,power plants photovoltaic,power systems photovoltaicPower system reliabilitySolar energySolar power generationSolar radiationSteady-stateTemperatureTestingIEEE Power & Energy Societyhttp://purl.tuc.gr/dl/dias/441E5DF3-F0CE-4185-94AE-701B6509F52Fhttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.08.pdf 10.1109/TEC.1987.4765834Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1987Summarization: An analog-digital photovoltaic (PV) array simulator is considered. The analog section is designed on the basis of an equivalent solar cell model while the digital section is constructed realizing the mathematical representation of the array. Fast time responses achieved by the analog section make this part suitable for the study of transient phenomena associated with the interconnected operation of PVs and the utility grid. Its digital counterpart is more appropriate for long-term experimental investigations due to its inherent accuracy and reliability. The combined hybrid simulator offers a versatile and flexible piece of apparatus capable of simulating the performance of any PV array under a variety of operating conditions. The device can be constructed with low-cost components in a compact arrangement offering transportability and ease of operation. Experimental results derived from a laboratory constructed prototype match closely the theoretically computed characteristics.Institute of Electrical and Electronics EngineersΠαρουσιάστηκε στο: Energy Conversion, IEEE Transactions onpeer-reviewedBibliographic citation: G.J. Vachtsevanos, K.C. Kalaitzakis, "A Hybrid Photovoltaic Simulator for Utility Interactive Studies," Energy Conversion, IEEE Transactions on ., vol. EC-2, no.2, pp. 227-231, Jun.1987. doi:10.1109/TEC.1987.4765834info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:327712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDevelopment of a microprocessor-based adaptive technique for blood pressure measurements.Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Papamarkos, N(http://viaf.org/viaf/305652480)Vachtsevanos, G.J(http://viaf.org/viaf/23660343)Δημοσίευση σε επιστημονικό περιοδικό electronic sphygmomanometercardiac pressureDiagnostic tests, Noninvasive,Noninvasive diagnosis,Noninvasive diagnostic tests,diagnosis noninvasive,diagnostic tests noninvasive,noninvasive diagnosis,noninvasive diagnostic testshttp://purl.tuc.gr/dl/dias/64E62999-36F4-424B-8371-1D637A199941http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.10.pdfPublished at: 2015-09-28eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1989Summarization: The paper introduces a new microprocessor-based adaptive technique for the indirect measurement of the systolic and diastolic pressure in humans. The technique is based upon a statistically consistent relationship between the amplitude of the pulsative pressure waveform at the systolic and diastolic points and the amplitude of pulse signals detected when the artery is fully occluded. An adaptive measurement philosophy has been implemented in the design of an electronic analog-digital sphygmomanometer which, in addition to a pressure transducer, contains suitable electronic instrumentation for processing and displaying the electronic signals. A dedicated microprocessor is used to store statistical relations and control the operation of the device. Verification of overall system accuracy is accomplished via direct comparison with manual auscultatory measurements. Clinical testing of a prototype indicates satisfactory performance; measurement errors are maintained well within proposed standards for automated sphygmomanometers. + +Kluwer Academic PublishersPresented on: Medical progress through technologypeer-reviewedBibliographic citation: K.C. Kalaitzakis, N.E. Papamarkos, and G.J. Vachtsevanos, "Development of a microprocessor-based adaptive technique for blood pressure measurements," Medical Progress Through Technology, vol. 14, pp. 63-72, 1989info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:327912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDesign of a Microprocessor-Based Sphygmomanometer.Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Papamarkos, N(http://viaf.org/viaf/305652480)Vachtsevanos, G.J(http://viaf.org/viaf/23660343)Δημοσίευση σε επιστημονικό περιοδικό microprocessorBlood--Pressure,blood pressuresphygmomanometerhttp://purl.tuc.gr/dl/dias/0ED259C0-EFC9-4BB5-B6A4-61BEDD8171EFhttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.11.pdfPublished at: 2015-09-28eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1990Summarization: This paper describes the implementation on a microprocessor of a new method for the indirect measurement and recording of the systolic and diastolic blood pressure in humans. The technique is based on a statistical analysis of the cardiac pulse pressure signal. Polynomial relations are derived between the amplitude of the pulsatile pressure waveforms at the systolic and diastolic points and the amplitude of pulse signals detected when the artery is fully occluded. With the dual objective of automating the measurement procedure and minimizing errors, an electronic analog-digital sphygmomanometer that contains suitable electronic instrumentation was developed. The functions of processing the pressure signal, automating the measurement, and recording the results are performed and controlled by a microprocessor. A laboratory prototype embodying this approach was constructed and its performance and reliability were verified using a series of clinical tests. The test results indicate that the device is accurate within acceptable bounds for automated blood pressure instruments.Biomedical Instrumentation and TechnologyPresented on: Biomedical instrumentation and technologypeer-reviewedBibliographic citation: K.C. Kalaitzakis, N.E. Papamarkos, and G.J. Vachtsevanos, "Design of a Microprocessor-Based Sphygmomanometer," Biomedical Instrumentation and Technology, vol. 24, pp. 31-36, Jan-Feb. 1990info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:328112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOptimal PV system dimensioning with obstructed solar radiationΚαλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Δημοσίευση σε επιστημονικό περιοδικό Photovoltaic energy systems,Photovoltaic facilities,Photovoltaic power plants,Photovoltaic solar generating plants,Power plants, Photovoltaic,Power systems, Photovoltaic,photovoltaic power systems,photovoltaic energy systems,photovoltaic facilities,photovoltaic power plants,photovoltaic solar generating plants,power plants photovoltaic,power systems photovoltaicAbsorption, Atmospheric,Atmospheric absorption of solar radiation,Insolation,Radiation, Solar,Sun--Radiation,solar radiation,absorption atmospheric,atmospheric absorption of solar radiation,insolation,radiation solar,sun radiationhttp://purl.tuc.gr/dl/dias/E99D884A-12D6-4B3C-B464-3A43D6061A83http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.13.pdf 10.1016/0960-1481(95)00110-7Published at: 2015-09-28eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1996Summarization: This paper describes an analytical methodology for the optimised design of stand-alone photovoltaic (PV) systems installed at locations where the solar radiation is considerably shortened by obstacles, i.e. at the bottom of a gorge. A method for the computation of the real available solar energy incident on the PV panel is proposed, based on easily conducted measurements. The optimum tilt of the PV array, under such conditions, is obtained and a dimensioning procedure provides the optimal size of the PV-array/storage. The resulting system is tested by a verification routine. A case study, employing the complete algorithm proposed, is illustrated.ElsevierPresented on: Renewable Energypeer-reviewedBibliographic citation: K.C. Kalaitzakis, "Optimal PV system dimensioning with obstructed solar radiation," Renewable Energy, vol. 7, no. 1, pp. 51-56, 1996. doi:10.1016/0960-1481(95)00110-7info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:328312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA fuzzy knowledge based method for maintenance planning in a power systemΣεργακη Αμαλια(http://users.isc.tuc.gr/~asergaki)Sergaki Amalia(http://users.isc.tuc.gr/~asergaki)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Δημοσίευση σε επιστημονικό περιοδικό Inspection planningFuzzy relational databaseCriticality analysisDecision support systemshttp://purl.tuc.gr/dl/dias/57B31B37-7820-429C-A3FA-16971DC54738http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.21.pdf 10.1016/S0951-8320(02)00010-8Published at: 2015-09-28eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: The inspection planning in electric power industry is used to assess the safety and reliability of system components and to increase the ability of failure situation identification before it actually occurs. It reflects the implications of the available information on the operational and maintenance history of the system. The output is a ranked list of components, with the most critical ones at the top, which indicates the selection of the components to be inspected. + +In this paper, we demonstrate the use of a fuzzy relational database model for manipulating the data required for the criticality component ranking in thermal power systems inspection planning, incorporating criteria concerning aspects of safety and reliability, economy, variable operational conditions and environmental impacts. Often, qualitative thresholds and linguistic terms are used for the component criticality analysis. Fuzzy linguistic terms for criteria definitions along with fuzzy inference mechanisms allow the exploitation of the operators' expertise. + +The proposed database model ensures the representation and handling of the aforementioned fuzzy information and additionally offers to the user the functionality for specifying the precision degree by which the conditions involved in a query are satisfied. + +In order to illustrate the behavior of the model, a case study is given using real inspection data.ElsevierPresented on: Reliability Engineering and System Safetypeer-reviewedBibliographic citation: A. Sergaki, K.C. Kalaitzakis, "A fuzzy knowledge based method for maintenance planning in a power system," Reliability Engineering & System Safety, vol. 77, no.1, pp. 19-30, Jul. 2002. doi:10.1016/S0951-8320(02)00010-8info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315242012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDevelopments in liquid-phase microextractionE Psillakis () N Kalogerakis()http://purl.tuc.gr/dl/dias/D349CD5D-7DEC-4B16-AAC4-129DE34610B510.1016/S0165-9936(03)01007-0Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: The development of faster, simpler, inexpensive and more environmentally friendly sample-preparation techniques is an important issue in chemical analysis. Recent research trends involve miniaturisation of the traditional liquid-liquid extraction (LLE) principle by greatly reducing the acceptor-to-donor phase ratio. One of the emerging techniques in this area is liquid-phase microextraction (LPME), where a hollow fibre impregnated with an organic solvent is used to accommodate or protect microvolumes of acceptor solution. This novel methodology proved to be an extremely simple, low-cost and virtually solvent-free sample-preparation technique, which provided a high degree of selectivity and enrichment by additionally eliminating the possibility of carry-over between runs. This article presents the different modes and hollow-fibre configurations of LPME, followed by an up-to-date summary of its applications. The most important parameters and practical considerations for method optimisation are also discussed. The article concludes with a comparison of this novel method with solid-phase microextraction (SPME) and single-drop microextraction (SDME). +ElsevierPresented on: peer-reviewedBibliographic citation: E. Psillakis, N. Kalogerakis , " Developments in liquid-phase microextraction ", Tr. in An. Chem.,vol. 22, no.9, pp. 565–574,2003.doi :10.1016/S0165-9936(03)01007-0info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315252012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDevelopments in single-drop microextractionE Psillakis()N Kalogerakis()http://purl.tuc.gr/dl/dias/EE539FDB-1AD8-46E1-9074-799EE8282A1010.1016/S0165-9936(01)00126-1Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: The continuous quest for novel sample preparation procedures has led to the development of new methods, whose main advantages are their speed and negligible volume of solvents used. The most recent trends include solvent microextraction, a miniaturisation of the traditional liquid–liquid extraction method, where the solvent to aqueous ratio is greatly reduced. Single-drop microextraction is a methodology that evolved from this approach. It is a simple, inexpensive, fast, effective and virtually solvent-free sample pretreatment technique. This article provides a detailed and updated discussion of the developments, modes and applications of single-drop microextraction, followed by a brief description of the theoretical background of the method. Finally, the most important parameters as well as some practical considerations for method optimisation and development are summarised.ElsevierPresented on: Trends in Analytical Chemistrypeer-reviewedBibliographic citation: E Psillakis, N. Kalogerakis , "Developments in single-drop microextraction " , Tr. in Anal.Chem., Volume 21, no. 1, pp. 54–64 ,2002.doi:10.1016/S0165-9936(01)00126-1info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:328722012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTXRF cation analysis by anionic membrane collectionΚαλλιθρακας Νικολαος(http://users.isc.tuc.gr/~nkallithrakas)Kallithrakas Nikolaos(http://users.isc.tuc.gr/~nkallithrakas)Χατζησταύρος Βασίλειος()Hatzistavros Vasilios()Total X -Ray Fluorescence (TXRF)http://purl.tuc.gr/dl/dias/DBACA891-F33C-4B2A-8A46-FB23170CCC5B10.1002/xrs.1156Published at: 2015-09-29eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: A new method for the determination of trace levels of cationic ions by anion selective membrane collection is presented. Anion selective membranes containing a few micrograms of different complexing reagents in polyvinyl chloride (PVC) matrix were produced in quartz reflectors. The membranes were immersed in water solutions with low concentrations of cationic metals, Cu, Co, Ni, Zn, and of anionic ligands (CN−, etc.). After the equilibration time the reflectors were left to dry and they were analyzed by Total X-Ray Fluorescence (TXRF). Many experimental parameters (pH effect, size of the membrane, volume sample) were examined. The minimum detection limits were estimated to be 1 ng/ml for all metallic cations even in seawater. The method needs less working labor than other enrichment procedures, the cations are collected directly on the TXRF reflector surface and very small chemical reagent consumption is needed. John Wiley and SonsΠαρουσιάστηκε στο: X-Ray Spectrometrypeer-reviewedBibliographic citation: V. Hatzistavros, N. Kallithrakas-Kontos, "TXRF Cation analysis by anionic membrane collection", X-. Ray Spectrometry, vol. 38, no. 3, pp. 229-233, Mar. 2009info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:328712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA Simulation Model for the Reliable Integration of a 4.5MW Wind Farm into the Power Grid of the Crete IslandΚαλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Δημοσίευση σε διεθνές επιστημονικό περιοδικό simulation modelWECS (Wind energy conversion systems),wind energy conversion systems,wecs wind energy conversion systemsautonomous power systemshttp://purl.tuc.gr/dl/dias/54765A89-6067-4F9D-8F1D-1987562F6BAChttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.12.pdf 10.1080/01425919008941481Published at: 2015-09-29eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1990Summarization: This paper describes a computer simulation model which has been developed to study the effects of integrating wind energy conversion systems (WECS) into autonomous power systems. The quality of the interconnected system performance is specified in terms of operational constraints. Load-flow and power-system-stability studies were preformed in order to evaluate the penetration impact of a 4·5 MW wind farm on the local grid fo Sitia-Crete. The results show that the above wind energy penetration level will not cause any problem to the existing electric power grid.Taylor & FrancisPresented on: International Journal of Solar Energypeer-reviewedBibliographic citation: K.C. Kalaitzakis, and G.S. Stavrakakis, "A Simulation Model for the Reliable Integration of a 4.5MW Wind Farm into the Power Grid of the Crete Island," International Journal of Solar Energy, vol. 9, no. 3, pp. 137-146, 1990. doi:10.1080/01425919008941481 + + + +info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:330522012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSize optimization of a PV system installed close to sun obstacles.Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Δημοσίευση σε επιστημονικό περιοδικό solar radiationPV arraycase studyhttp://purl.tuc.gr/dl/dias/C34FACBD-CD09-41D5-A40C-BCBB5AFCAC6Fhttp://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.15.pdf 10.1016/S0038-092X(96)00101-6Published at: 2015-09-29eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1996Summarization: The assessment of the optimal size of a PV-array/battery-storage system, when the incident solar radiation is considerably obstructed, is presented in this article. An optimal dimensioning method is proposed based on a new procedure for the calculation of the actual solar radiation on the array surface, for installations located near obstacles. The optimum tilt of the PV array is also computed and the resulting optimal PV-array/battery-storage system is evaluated by an appropriate routine. The results of the application of the complete algorithm for a real case study inside a gorge are illustrated.ElsevierPresented on: Solar Energypeer-reviewedBibliographic citation: K.C. Kalaitzakis and G.S. Stavrakakis, "Size optimization of a PV system installed close to sun obstacles," Solar Energy, vol. 57, no. 4, pp. 291-299, Oct. 1996. doi:10.1016/S0038-092X(96)00101-6info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315532012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSingle drop microextraction for the analysis of organophosphorous insecticides in water Elefteria Psillakis()Triantafyllos A Albanis()Nicolas Kalogerakis()Dimitra A Lambropoulou()http://purl.tuc.gr/dl/dias/8FE96406-AFBF-4BE3-82B7-F165E1DE5E0210.1016/j.aca.2004.03.055Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2004Summarization: A new method used for the extraction of 10 organophosphorous insecticides from water samples coupling single-drop microextraction with gas chromatography–mass spectrometry is presented here. Parameters, such as organic solvent, exposure time, agitation, organic drop volume and salt concentration were controlled and optimised. Overall, extraction was achieved by suspending a 1.5 μl toluene drop to the tip of a microsyringe immersed in a 5 ml donor aqueous solution containing 2.5% NaCl (w/v) and stirred at 800 rpm. The developed protocol was found to yield a linear calibration curve in the concentration range from 0.5 to 100 μg l−1 for all target analytes. Under selected ion monitoring mode, the limits of detection were found to be in the range between 0.010 and 0.073 μg l−1.Παρουσιάστηκε στο: Analytica chimica actapeer-reviewedBibliographic citation: D. A Lambropoulou, E.Psillakis, T. A Albanis, N. Kalogerakis, "Single drop microextraction for the analysis of organophosphorous insecticides in water ",Anal. ch.a act.,vol.516.no.1,pp.205-211, 2004.doi:10.1016/j.aca.2004.03.055info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315722012-10-10T00:00:00Z28
info:eu-repo/semantics/articleComplexes of silver(I), thallium(I),lead(II) and barium(II) withbis[3-(2-pyridyl)pyrazol-1-yl]phosphinate: one-dimensional helicalchains and discrete mononuclear complexesElefteria Psillakis()Jon A McCleverty()John C Jeffery()Michael D War()http://purl.tuc.gr/dl/dias/C0B9FA77-3F06-485F-9BD7-5D363A53E93C10.1039/A700475CPublished at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1997Summarization: Reaction of 3-(2-pyridyl)pyrazole with POBr 3 in toluene–NEt 3 afforded not the expected tris(pyrazolyl)phosphine oxide but the partially hydrolysed compound bis[3-(2-pyridyl)pyrazol-1-yl]phosphinate (as its triethylammonium salt). This compound has two potentially chelating N,N′-bidentate arms linked by an apical PO 2 - group. Reaction with AgNO 3 , Tl(O 2 CMe), Pb(NO 3 ) 2 or Ba(NO 3 ) 2 in dry MeCN followed by recrystallisation afforded crystals of the complexes [AgL]·2H 2 O, [TlL]·MeOH, [PbL 2 ]·H 2 O and [(BaL 2 ) 3 ]·6MeCN·2H 2 O respectively, all of which have been crystallographically characterised. The compound [AgL]·2H 2 O contains infinite helical chains (AgL) ∞ in which each ligand donates one N,N′-bidentate arm to each of two metals and each metal ion is four-co-ordinated by two arms from different ligands. The strands are held together in the crystal by a complex network of hydrogen bonds involving lattice water molecules and also by aromatic π-stacking interactions. The compound [TlL]·MeOH is likewise a one-dimensional helical polymer of TlL units, with each ligand bridging two metals and each Tl ion in a ‘2 + 3’ co-ordination geometry with two short bonds to ligands (<2.71 Å) and three longer, weak bonds (>2.87 Å): there is an obvious gap in the co-ordination sphere due to a stereochemically active lone pair. A combination of interstrand aromatic π-stacking interactions and hydrogen-bonding interactions involving the lattice MeOH molecule is present.Royal Society of ChemistryΠαρουσιάστηκε στο: Journal of the Chemical Society, Dalton Transactionspeer-reviewedBibliographic citation: E. Psillakis, J. C Jeffery, J. A McCleverty, M. D Ward , "Complexes of silver(I), thallium(I),lead(II) and barium(II) withbis[3-(2-pyridyl)pyrazol-1-yl]phosphinate: one-dimensional helicalchains and discrete mononuclear complexes " ,J. Chem. Soc., Dalton Trans., no.9, pp.1645-1651,2007.doi:10.1039/A700475Cinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315772012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSonochemical degradation of triclosan in water +and wastewaterElefteria Psillakis()Lucia Sanchez-Prado()Ruth Barro()Maria Llompart()Carmen Garcia-Jares()Marta Lores()Experimentalhttp://purl.tuc.gr/dl/dias/E9F87FF1-12ED-4633-A1B2-46873FE063DC10.1016/j.ultsonch.2008.01.007Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: The sonochemical degradation of 5 lg l1 triclosan, a priority micro-pollutant, in various environmental samples (seawater, urban +runoff and influent domestic wastewater) as well as in model solutions (pure and saline water) was investigated. Experiments were conducted +with a horn-type sonicator operating at 80 kHz frequency and a nominal applied power of 135 W, while solid-phase microextraction +coupled with gas chromatography–electron capture detector (SPME/GC–ECD) was employed to monitor triclosan degradation. +The latter followed pseudo-first order kinetics with the rate constant being (min1): 0.2284 for seawater > 0.1051 for 3.5% NaCl in deionised +water > 0.0597 for centrifuged urban runoff 0.0523 for untreated urban runoff > 0.0272 for deionised water > 0.0063 for wastewater +influent. SPME/GC–ECD and SPME coupled with gas chromatography–mass spectrometry (SPME/GC–MS) were also used to +check for the formation of chlorinated and other toxic by-products; at the conditions in question, the presence of such compounds +was not confirmed.ElsevierΠαρουσιάστηκε στο: Ultrasonics sonochemistrypeer-reviewedΒιβλιογραφική αναφορά: L.Sanchez-Prado, R. Barro, C. G. Jares, M. Llompart, M. Lores, C. Petrakis, N.Kalogerakis, D. Mantzavinos, E.Psillakis , "Sonochemical degradation of triclosan in water and wastewater ",Ultras. Sonochemi. , vol . 15 ,no.5 ,pp. 689–694,2008.doi:10.1016/j.ultsonch.2008.01.007info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315792012-10-10T00:00:00Z28
info:eu-repo/semantics/articleComplexes of a new bidentate chelating pyridyl/sulfonamide ligand with copper(II), cobalt(II) and palladium(II): crystal structures and spectroscopic propertiesElefteria Psillakis()Carl A Otter() Samantha M Couchman()John C Jeffery() Karen LV Mann()Michael D Ward()http://purl.tuc.gr/dl/dias/E9BDD35A-9831-42EE-A8AF-C163C729E75F10.1016/S0020-1693(98)00018-8Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1998Summarization: Reaction of the bidentate ligand 2-(2-aminophenyl)pyridine with p-toluenesulfonyl chloride afforded the new bidentate ligand HL which contains potentially chelating pyridyl and (protonated) sulfonamide N-donor binding sites. The crystal structure of the ligand shows that the sulfonamide NH proton is involved in a hydrogen-bonding interaction with the pyridyl N atom, resulting in a near-coplanar arrangement of the pyridyl and phenyl rings.ElsevierΠαρουσιάστηκε στο: Inorganica chimica actapeer-reviewedBibliographic citation: C. A Otter, S. M Couchman, J. C Jeffery, K. LV Mann, E. Psillakis, M.D Ward , "Complexes of a new bidentate chelating pyridyl/sulfonamide ligand with copper(II), cobalt(II) and palladium(II): crystal structures and spectroscopic properties ", Inor.a chimica acta , vol. 278, no. 2, pp. 178–184 ,1998.doi:10.1016/S0020-1693(98)00018-8info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315852012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLanthanide complexes of the tetradentate N-donor liganddihydrobis[3-(2-pyridyl)pyrazolyl]borate and the terdentate N-donorligand 2,6-bis(1H-pyrazol-3-yl)pyridine: syntheses, crystalstructures and solution structures based on luminescence lifetime studiesElefteria Psillakis()Peter L Jones()Michael D Ward()David A Bardwell()http://purl.tuc.gr/dl/dias/09A3DF92-055B-4A2C-AC50-2493BDB0BFDB10.1039/A701297GPublished at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1997Summarization: Lanthanide complexes of two polydentate N-donor ligands containing a mixture of pyridyl and pyrazolyl donors have been prepared. Dihydrobis[3-(2-pyridyl)pyrazolyl]borate (L 1 ) - is a tetradentate ligand with two bidentate chelating pyridyl/pyrazolyl arms linked by an apical BH 2 group; 2,6-bis(1H-pyrazol-3-yl)pyridine (L 2 ) is a terdentate chelating ligand reminiscent of terpyridine. Reaction of L 1 with lanthanide salts gave complexes of the type [M(L 1 ) 2 X] n+ ; the crystal structures of [Eu(L 1 ) 2 (dmf)][ClO 4 ]· 2.5CH 2 Cl 2 , [Tb(L 1 ) 2 (NO 3 )]·2CH 2 Cl 2 and [Tb(L 1 ) 2 (H 2 O)][L 1 ]· H 2 O·0.5CH 2 Cl 2 were determined and all contain two tetradentate ligands L 1 and an ancillary ligand X [dimethylformamide (dmf), nitrate or water] whose nature depends on the reaction/recrystallisation conditions to complete the co-ordination sphere. Luminescence studies of [Tb(L 1 ) 2 (NO 3 )] in water or D 2 O and MeOH or CD 3 OD showed that in methanol the solvation number q is ≈1.8, consistent with displacement of nitrate by the solvent; however in water q ≈ 4.5, indicating additional displacement of some of the N-donor heterocyclic rings of L 1 by co-ordinating water molecules. Reaction of L 2 with lanthanide salts afforded [M(L 2 ) 3 ] 3+ , all isolated as their hexafluorophosphate salts. The crystal structures of three of these (M = Eu, Gd or Ho) showed that they are isostructural and isomorphous, with tricapped trigonal-prismatic nine-co-ordinate geometries similar to that of [M(terpy) 3 ] 3+ (terpy = 2,2′:6′,2″- terpyridine). Royal Society of ChemistryΠαρουσιάστηκε στο: Journal of the Chemical Society, Dalton Transactionspeer-reviewedBibliographic citation: D. A Bardwell, J. C Jeffery, P. L Jones, J. A McCleverty, E. Psillakis, Z. Reeves, M.D Ward , "Lanthanide complexes of the tetradentate N-donor liganddihydrobis[3-(2-pyridyl)pyrazolyl]borate and the terdentate N-donorligand 2,6-bis(1H-pyrazol-3-yl)pyridine: syntheses, crystalstructures and solution structures based on luminescence lifetime studies " ,J. Chem. Soc., Dalton Trans.,no.12 , pp. 2079-2086, 1997.doi:10.1039/A701297Ginfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315872012-10-10T00:00:00Z28
info:eu-repo/semantics/articleCopper(II)-templated assembly of tetranuclear grid-like complexesfrom simple pyridine–pyrazole ligands Elefteria Psillakis() Karen LV Mann()Jon A McCleverty() Claire M White()http://purl.tuc.gr/dl/dias/A71FF72D-711A-4221-8DEB-819568FAECC610.1039/A606827HPublished at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1997Summarization: Reaction of Cu(O 2 CMe) 2 ·H 2 O with HL 1 [3-(2-pyridyl)pyrazole] or HL 2 [6-(3-pyrazolyl)-2,2′-bipyridine] and NH 4 PF 6 followed by crystallisation of the crude products from dmf–ether affords [Cu 4 L 1 6 (dmf) 2 ][PF 6 ] 2 1 and [Cu 4 L 2 4 (dmf) 4 ]- [PF 6 ] 4 2 respectively, in which the deprotonated pyrazolyl groups act as bridging ligands and the 2 × 2 grid–like architectures are a result of the preference of the Cu II ions for elongated square-pyramidal coordination geometries. Royal Society of ChemistryΠαρουσιάστηκε στο: Chemical Communicationspeer-reviewedΒιβλιογραφική αναφορά: J. C Jeffery, P.L Jones, K. LV Mann, E. Psillakis, J. A McCleverty, M. D Ward, C. M White , "Copper(II)-templated assembly of tetranuclear grid-like complexesfrom simple pyridine–pyrazole ligands ",Ch.Communicat.,vol. 2 ,pp.175-176,1997.doi : 10.1039/A606827H +info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317142012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA dinuclear double-helical complex of potassium ions with acompartmental bridging ligand containing two terdentate N-donorfragmentsElefteria Psillakis()Johná C Jeffery()Joná A McCleverty()Michaelá D Ward()http://purl.tuc.gr/dl/dias/012693B1-F045-4C4F-87C7-7BE9D10DAD6D 10.1039/A607984IPublished at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1997Summarization: Recently helicates have become a well known structural motif in supramolecular coordination +chemistry.1–4 They are of particular interest not just for their appealing structures but also because +of the processes of molecular recognition and self- assembly that are required for their +formation. Their formation requires (i) ligands which contain several discrete metal-ion binding +domains, and (ii) metal ions with specific preferences for particular coordination geometries that +match the ligand binding sites.Royal Society of ChemistryΠαρουσιάστηκε στο: Chemical Communicationspeer-reviewedBibliographic citation: J. C Jeffery, J. A McCleverty, M. D Ward ,E.Psillakis , "A dinuclear double-helical complex of potassium ions with acompartmental bridging ligand containing two terdentate N-donorfragments " ,Chem. Commun.,vol.5 , pp. 479-480, 1997.doi: 10.1039/A607984Iinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317382012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSynthesis, crystal structure and some reactions of the ruthenacarborane complex [Ru(CO)2(MeC,CPh)(η5-7,8-C2B9H11]. Elefteria Psillakis()John C Jeffery()Paul A Jelliss()Gillian EA Rudd()F Gordon A Stone()http://purl.tuc.gr/dl/dias/BACF5449-143C-438E-B2AF-813C55CEE3E510.1016/S0022-328X(98)00363-5Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1998Περίληψη: The alkyne complex [Ru(CO) 2 (MeC,CPh)(η 5 -7,8-C 2 B 9 H 11 ] (3c) has been prepared and its structure determined by X-ray crystallography. The ruthenium is co-ordinated on one side by the nido-7,8-C 2 B 9 H 11 fragment in a pentahapto manner, and on the other by the two CO molecules and the alkyne [Ru–C av. =2.305, C–C=1.228(3) Å. Treatment of 3c with PEt 3 and Ph 2 PCH 2 PPh 2 in CH 2 Cl 2 affords the ylid complexes [Ru{C(Me)C(Ph)PEt 3 }(CO) 2 (η 5 -7,8-C 2 B 9 H 11 )] (4b) and [Ru{C(Me)C(Ph)P(Ph) 2 CH 2 PPh 2 }(CO) 2 (η 5 -7,8-C 2 B 9 H 11 )] (4c), respectively. The structure of 4b was established by an X-ray diffraction study which revealed that the PEt 3 molecule was attached to the carbon atom of the CPh group. In contrast, reactions between 3c and the donor molecules AsPh 3 , SbPh 3 and Ph 2 P(S)CH 2 P(S)Ph 2 resulted in displacement of the alkyne and formation of the complexes [Ru(CO) 2 (L)(η 5 -7,8-C 2 B 9 H 11 )] (5a, L=AsPh 3 ; 5b, L=SbPh 3 ; 5c, L=Ph 2 P(S)CH 2 P(S)Ph 2 ). Treatment of 4c with the Ru(CO) 2 (η 5 -7,8-C 2 B 9 H 11 ) fragment yielded the diruthenium complex [Ru 2 (μ-Ph 2 PCH 2 PPh 2 )(CO) 4 (η 5 -7,8-C 2 B 9 H 11 ) 2 ] (6). The structure, based on the linking of two Ru(CO) 2 (η 5 -7,8-C 2 B 9 H 11 ) groups by the ligand Ph 2 PCH 2 PPh 2 , was determined by X-ray crystallography. NMR data for the new complexes are reported.ElsevierΠαρουσιάστηκε στο: Journal of organometallic chemistrypeer-reviewedΒιβλιογραφική αναφορά: J.C Jeffery, P. A Jelliss, E.Psillakis, G. EA Rudd, F G. A Stone, "Synthesis, crystal structure and some reactions of the ruthenacarborane complex [Ru(CO)2(MeC,CPh)(η5-7,8-C2B9H11] ",J. of organ. chem.,vol. 562,no.1,pp.17-27,1998.doi:10.1016/S0022-328X(98)00363-5info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317392012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLow temperature SPME device: A convenient and effective tool for investigating photodegradation of volatile analytesElefteria Psillakis()Janusz Pawliszyn()Sanja Risticevic()Lucia Sanchez-Prado()http://purl.tuc.gr/dl/dias/6F00AA1A-0854-4E07-945D-35C8E6401EAF10.1016/j.jphotochem.2009.07.009Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: Hexachlorobenzene (HCB), a model volatile compound, was exposed to UV irradiation (16 W, 254 nm) after being sorbed in an internally cooled or low temperature solid-phase microextraction (LT-SPME) fibre. Photolysis took place directly on the polydimethylsiloxane coating of the LT-SPME fibre, yielding an “in situ” generation of photoproducts. Maintaining the temperature of the cold fibre at 0 °C eliminated, for the first time, problems of analyte losses due to volatilisation, inherent to the conventional room temperature photo-SPME studies. During the present studies, nearly complete photoremoval of HCB could be achieved within 20 min of irradiation. Photoreduction through photodechlorination was shown to be the main decay pathway in which lesser chlorinated congeners were sequentially formed as intermediates. Accordingly, initial generation of pentachlorobenzene was followed in order from 1,2,3,5-tetrachlorobenzene, 1,2,4,5-tetrachlorobenzene and 1,3,5-trichlorobenzene. ElsevierΠαρουσιάστηκε στο: Journal of Photochemistry and Photobiology A: Chemistrypeer-reviewedBibliographic citation: L.S.Prado, S. Risticevic, J. Pawliszyn, E. Psillakis , " +Low temperature SPME device: A convenient and effective tool for investigating photodegradation of volatile analyte ",J. of Photoch. and Phot. A: Ch.,vol.206, no.2,pp.227-230,2009. doi: 10.1016/j.jphotochem.2009.07.009info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317712012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePhotolysis of 2,4-dinitrotoluene in various water solutions: effect of dissolved speciesElefteria Psillakis()Orestis Mihas()Nicolas Kalogeraki()http://purl.tuc.gr/dl/dias/90E78EB9-010C-4DC9-A829-B99A99C015C710.1016/j.jhazmat.2007.04.054Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: This work investigates the photolysis of 2,4-dinitrotoluene (2,4-DNT) in the presence of different dissolved species. Initial experiments revealed that the direct photolysis of 2,4-DNT in deionized water solutions under sunlight and artificial light followed a pseudo-first order kinetic. Humic acids (HA) appeared to act as sensitizers in the aqueous photolysis of 2,4-DNT and the calculated half life was found to be approximately 2 h, which is faster than the half life calculated in the case of deionized water (∼4 h). The presence of salt (NaCl) in the deionized water solutions was found to have a more pronounced sensitizing effect upon the photolysis of 2,4-DNT, yielding half lives of the order of 1 h. Investigations on seawater and groundwater spiked with 2,4-DNT, revealed that photolysis is enhanced in the order seawater > groundwater∼deionized water.Παρουσιάστηκε στο: Journal of hazardous materialspeer-reviewedBibliographic citation: O. Mihas, N. Kalogerakis, E.Psillakis , "Photolysis of 2,4-dinitrotoluene in various water solutions: effect of dissolved species ",J. of hazar. mat.,vol.146,no.3,pp.535-539,2007. doi:10.1016/j.jhazmat.2007.04.054info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317722012-10-10T00:00:00Z28
info:eu-repo/semantics/articleNanofibrillar Cellulose-Chitosan Composite Film Electrodes: Competitive Binding of Triclosan, Fe(CN)63−/4−, and SDS SurfactantElefteria Psillakis()Kostoula Tsourounaki()Michael J Bonne()Matthew Helton()Anthony McKee()Frank Marken() Wim Thielemans()http://purl.tuc.gr/dl/dias/A6ECBF48-FB7D-4C31-99BD-01DFCCE5EECA10.1002/elan.200804338Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2008Summarization: Glassy carbon electrodes are modified with a thin film of a cellulose-chitosan nanocomposite. Cellulose nanofibrils (of ca. 4 nm diameter and 250 nm length) are employed as an inert backbone and chitosan (poly-d-glucosamine, low molecular weight, 75–85% deacetylated) is introduced as a structural binder and “receptor” or molecular binding site. The composite films are formed in a solvent evaporation method and prepared in approximately 0.8 μm thickness. WILEY‐VCH VerlagΠαρουσιάστηκε στο: Electroanalysispeer-reviewedBibliographic citation: K. Tsourounaki, M. J Bonne, W. Thielemans, E. Psillakis, M. Helton, A. McKee, F. Marken, "Nanofibrillar Cellulose-Chitosan Composite Film Electrodes: Competitive Binding of Triclosan, Fe(CN)63−/4−, and SDS Surfactant ",Electroan.,vol.20, no.22, pp.2395-2402,2008.doi:10.1002/elan.200804338info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:317732012-10-10T00:00:00Z28
info:eu-repo/semantics/articleThe coordination chemistry of mixed pyridine-phenol and phenanthroline-phenol ligands; The crystal structure of 2-(2-hydroxyphenyl)-1,10-phenanthroline (HL) and the crystal structure and properties of [FeL2][PF6] +Elefteria Psillakis()John C Jeffery()Charlotte SG Moore()Michael D Ward()Peter Thornton()http://purl.tuc.gr/dl/dias/1A6A82FD-4B5E-4A03-AF86-9AEF3B52B8BD10.1016/0277-5387(94)00281-IPublished at: 2015-09-24eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1995Summarization: The crystal structures of the N,N,O-terdentate ligand 2-(2-hydroxyphenyl)-1,10-phenanthroline (HL) and its Fe(III) complex [FeL2][PF6] (1) have been determined. In HL, an intramolecular OH … N hydrogen bond between the phenolic OH and the adjacent nitrogen atom of the phenanthroline fragment constrains these two donor atoms to be cisoid, with the proton ‘chelated’. The molecules of HL are associated into pairs in the crystal via a face-to-face aromatic π-stacking interaction. Complex 1 has a conventional distorted octahedral structure; sections of the aromatic ligands overlap between adjacent molecules to form an interleaved stack. It is high-spin down to 83 K, and its EPR spectrum (frozen glass at 77 K) is entirely typical of a rhombically distorted high-spin FeIII site.PergamonΠαρουσιάστηκε στο: Polyhedronpeer-reviewedBibliographic citation: J. C Jeffery, C. S. Moore, E. Psillakis, M. D Ward, P.Thornton , "The coordination chemistry of mixed pyridine-phenol and phenanthroline-phenol ligands; The crystal structure of 2-(2-hydroxyphenyl)-1,10-phenanthroline (HL) and the crystal structure and properties of [FeL2][PF6] ",Polyh.,vol.14,no.5,pp.599-604,1995.doi:10.1016/0277-5387(94)00281-Iinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318562012-10-10T00:00:00Z28
info:eu-repo/semantics/articleIce photolysis of 2,2′,4,4′,6-pentabromodiphenyl ether (BDE-100): Laboratory investigations using solid phase microextractionElefteria Psillakis()Nicolas Kalogerakis()Maria Llompart()http://purl.tuc.gr/dl/dias/F4D57170-E8FF-4B13-B354-79AD2827056C10.1016/j.aca.2012.06.012Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2012Summarization: Here, we report for the first time a laboratory investigation into the photochemical degradation of 2,2′,4,4′,6-pentabromodiphenyl ether (BDE-100) in ice solid samples using an artificial UV light source. Solid phase microextraction (SPME) was used as a sensitive extraction technique for monitoring trace amounts of the hydrophobic pollutant and its photoproducts. The results showed that ice photolysis kinetics for BDE-100 is similar to the one observed in the aqueous counterpart. The eight photoproducts identified consisted of brominated diphenyl ethers with lower bromine content and polybrominated dibenzofurans, suggesting two important photodegradation pathways for BDE-100 in ice solid samples: (i) stepwise reductive debromination and (ii) intramolecular elimination of HBrElsevierΠαρουσιάστηκε στο: Analytica chimica actapeer-reviewedBibliographic citation: L.S. Prado, K. Kalafata, S. Risticevic, J. Pawliszyn, M. Lores, M. Llompart, N. Kalogerakis, E.Psillakis , "Ice photolysis of 2,2′,4,4′,6-pentabromodiphenyl ether (BDE-100): Laboratory investigations using solid phase microextraction " ,Anal. ch. acta., vol. 742,pp.90-96,2012.doi:10.1016/j.aca.2012.06.012info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318582012-10-10T00:00:00Z28
info:eu-repo/semantics/articleComparison of pah levels and sources in pine needles from Portugal, Spain, and GreeceElefteria Psillaki()Arminda Alves()Damià Barceló()Nuno Ratola() José Manuel Amigo()Sílvia Lacorte()http://purl.tuc.gr/dl/dias/562877B5-FB06-4CDE-A35A-AD786A738FD310.1080/00032719.2011.649452Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2012Summarization: The main objective of this work was to assess and compare the levels, patterns, and sources of contamination of 16 polycyclic aromatic hydrocarbons (PAHs) between Portugal, Spain, and Greece (in the island of Crete). A total of 9 sampling sites were chosen (4 in urban and 5 in non-urban areas) in each country and pine needles from the Pinus pinea L. species were collected. Although the mean total PAH levels was similar in the three countries (279 ± 236 ng g−1 for Portugal, 294 ± 258 ng g−1 for Spain, 301 ± 253 ng g−1 for Greece, all dry weight) and, in general, 3-ring and 4-ring PAHs were predominant (being phenanthrene consistently the most abundant), there were some visible differences in the aromatic ring patterns and possible sources between the three regions. Source apportionment was done using PAH ratios (Phen/Ant and Flt/Pyr crossplots) and reflected mixed petrogenic and pyrogenic sources. Furthermore, Principal Component Analysis (PCA) clearly separated the urban and the non-urban sites and all three countries, which reinforces that the sources of contaminations vary in each case and the suitability of pine needles for trans-boundary biomonitoring of PAHs.Taylor & Francis GroupΠαρουσιάστηκε στο: Analytical Letterspeer-reviewedBibliographic citation: N. Ratola, J. M.Amigo, S. Lacorte, D. Barceló, E. Psillakis, A. Alves , "Comparison of pah levels and sources in pine needles from Portugal, Spain, and Greece",Anal. Let.,vol.45,no.5-6,pp.508-525, 2012.doi:10.1080/00032719.2011.649452info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318592012-10-10T00:00:00Z28
info:eu-repo/semantics/articleRapid determination of octanol-water partition coefficient using vortex-sssisted liquid-liquid microextractionElefteria Psillakis()Antonio Canals()Konstantina Tyrovola()Anna Mastromichali()Iván P Román()EXPERIMENTALhttp://purl.tuc.gr/dl/dias/4DA97208-D579-452D-8655-FF32E7FC9B9310.1016/j.chroma.2014.01.003Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: Abstract Vortex-assisted liquid–liquid microextraction (VALLME) coupled with high- +performance liquid chromatography (HPLC) is proposed here for the rapid determination of +octanol–water partitioning coefficients (K ow). VALLME uses vortex agitation, a mild +emulsification procedure, to disperse microvolumes of octanol in the aqueous phase thus +increasing the interfacial contact area and ensuring faster partitioning rates. With VALLME, 2 +min were enough to achieve equilibrium conditions between the octanolic and aqueous .ElsevierΠαρουσιάστηκε στο: Journal of Chromatography Apeer-reviewedBibliographic citation: I. P Román, A. Mastromichali, K. Tyrovola, A. Canals, E. Psillakis , "Rapid determination of octanol–water partition coefficient using vortex-assisted liquid–liquid microextraction ",J. of Chromat.,vol.1330, pp. 1–5,2014,doi:10.1016/j.chroma.2014.01.003info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318652012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSolid phase microextraction to determine the migration of phthalates from plastic ware to drinking water K Perdikea()N Kalogerakis()E Psillakis()http://purl.tuc.gr/dl/dias/E5219720-B6B4-4F89-8AFA-7EDCC557FBD3http://conferences.gnest.org/cest8/8cest_papers/abstracts_pdf_names/p118_Perdikea.pdfPublished at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: Overall, the results revealed that significant quantities of phthalates are expected to be +present in drinking water samples coming into direct contact with disposable plastic items at +elevated temperatures. The contamination level is higher when a prolonged exposure to +such temperatures is applied. Therefore, it is strongly advisable to control temperature +during the transfer, storage and/or handling of these materials. Key words: SPME, phthalate +esters, drinking water, water analysisΠαρουσιάστηκε στο: Proceedings of the 8th International Conference on Environmental Science and Technology peer-reviewedBibliographic citation: K. Perdikea, E. Psillakis, N. Kalogerakis .(2003,Sept.). Solid phase microextraction to determine the migration of phthalates from plastic ware to drinking water. Presented at the 8th International Conference on Environmental Science and Technology.[online]. Available :http://conferences.gnest.org/cest8/8cest_papers/abstracts_pdf_names/p118_Perdikea.pdfinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318672012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVacuum-assisted headspace solid phase microextraction of polycyclic aromatic hydrocarbons in solid samplesElefteria Psillakis()Nicolas Kalogerakis()Evangelia Yiantzi()http://purl.tuc.gr/dl/dias/2A1F1881-63AF-42FD-8DB0-8AE9E3C066F410.1016/j.aca.2015.05.047Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2015Summarization: For the first time, Vacuum Assisted Headspace Solid Phase Microextraction (Vac-HSSPME) is used for the recovery of polycyclic aromatic hydrocarbons (PAHs) from solid matrices. The procedure was investigated both theoretically and experimentally. According to the theory, reducing the total pressure increases the vapor flux of chemicals at the soil surface, and hence improves HSSPME extraction kinetics. Vac-HSSPME sampling could be further enhanced by adding water as a modifier and creating a slurry mixture. For these soil-water mixtures, reduced pressure conditions may increase the volatilization rates of compounds with a low KH present in the aqueous phase of the slurry mixture and result in a faster HSSPME extraction process. Nevertheless, analyte desorption from soil to water may become a rate-limiting step when significant depletion of the aqueous analyte concentration takes place during Vac-HSSPME. Sand samples spiked with PAHs were used as simple solid matrices and the effect of different experimental parameters was investigated (extraction temperature, modifiers and extraction time). Vac-HSSPME sampling of dry spiked sand samples provided the first experimental evidence of the positive combined effect of reduced pressure and temperature on HSSPME. Although adding 2 mL of water as a modifier improved Vac-HSSPME, humidity decreased the amount of naphthalene extracted at equilibrium as well as impaired extraction of all analytes at elevated sampling temperatures. Within short HSSPME sampling times and under mild sampling temperatures, Vac-HSSPME yielded linear calibration curves in the range of 1–400 ng g−1 and, with the exception of fluorene, regression coefficients were found higher than 0.99. The limits of detection for spiked sand samples ranged from 0.003 to 0.233 ng g−1 and repeatability from 4.3 to 10 %. Finally, the amount of PAHs extracted from spiked soil samples was smaller compared to spiked sand samples, confirming that soil could bind target analytes more strongly and thus decrease the readily available fraction of target analytes.ElsevierPresented on: Analytica Chimica Actapeer-reviewedBibliographic citation: E. Yiantzi, N. Kalogerakis, E. Psillakis , "Vacuum-assisted headspace solid phase microextraction of polycyclic aromatic hydrocarbons in solid samples ",Anal. Chim. Act. ,vol. 890, pp. 108–116,August 2015.doi:10.1016/j.aca.2015.05.047info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318742012-10-10T00:00:00Z28
info:eu-repo/semantics/articleStochastic diagrammatic analysis of groundwater flow in heterogeneous porous mediaG. Christakos()D.T. Hristopulos()C.T. Miller()http://purl.tuc.gr/dl/dias/2E34F867-D8D9-401F-90BA-36FC80D9079B10.1029/95WR00733Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1995Summarization: The diagrammatic approach is an alternative to standard analytical methods for solving stochastic differential equations governing groundwater flow with spatially variable hydraulic conductivity. This approach uses diagrams instead of abstract symbols to visualize complex multifold integrals that appear in the perturbative expansion of the stochastic flow solution and reduces the original flow problem to a closed set of equations for the mean and the covariance functions. Diagrammatic analysis provides an improved formulation of the flow problem over conventional first-order series approximations, which are based on assumptions such as constant mean hydraulic gradient, infinite flow domain, and neglect of cross correlation terms. This formulation includes simple schemes, like finite-order diagrammatic perturbations that account for mean gradient trends and boundary condition effects, as well as more advanced schemes, like diagrammatic porous media description operators which contain infinite-order correlations. In other words, diagrammatic analysis covers not only the cases where low-order diagrams lead to good approximations of flow, but also those situations where low-order perturbation is insufficient and a more sophisticated analysis is needed. Diagrams lead to a nonlocal equation for the mean hydraulic gradient in terms of which necessary conditions are formulated for the existence of an effective hydraulic conductivity. Three-dimensional flow in an isotropic bounded domain with Dirichlet boundary conditions is considered, and an integral equation for the mean hydraulic head is derived by means of diagrams. This formulation provides an explicit expression for the boundary effects within the three-dimensional flow domain. In addition to these theoretical results, the numerical performance of the diagrammatic approach is tested, and useful insight is obtained by means of one-dimensional flow examples where the exact stochastic solutions are available.Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: G. Christakos, D.T. Hristopulos and C.T. Miller , "Stochastic diagrammatic analysis of groundwater flow in heterogeneous porous Media ", Wat. Resour. Res.,vol. 31,no.7 ,pp. 1687-1703,1995.doi :10.1029/95WR00733info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318912012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePermissibility of fractal exponents and models of band-limited two-point functions for fGn and fBm random fields +D.T. Hristopulos()http://purl.tuc.gr/dl/dias/B07C5CA5-0A02-4726-BA02-7C49A7B42F9810.1007/s00477-003-0126-8Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: The fractional Gaussian noise (fGn) and fractional Brownian motion (fBm) random field models have many applications in the environmental sciences. An issue of practical interest is the permissible range and the relations between different fractal exponents used to characterize these processes. Here we derive the bounds of the covariance exponent for fGn and the Hurst exponent for fBm based on the permissibility theorem by Bochner. We exploit the theoretical constraints on the spectral density to construct explicit two-point (covariance and structure) functions that are band-limited fractals with smooth cutoffs. Such functions are useful for modeling a gradual cutoff of power-law correlations. We also point out certain peculiarities of the relations between fractal exponents imposed by the mathematical bounds. Reliable estimation of the correlation and Hurst exponents typically requires measurements over a large range of scales (more than 3 orders of magnitude). For isotropic fractals and partially isotropic self-affine processes the dimensionality curse is partially lifted by estimating the exponent from measurements along fixed directions. We derive relations between the fractal exponents and the one-dimensional spectral density exponents, and we illustrate the relations using measurements of paper roughness.Springer-VerlagΠαρουσιάστηκε στο: Stochastic Environmental Research and Risk Assessmentpeer-reviewedBibliographic citation: D.T. Hristopulos, "Permissibility of fractal exponents and models of band-limited two-point functions for fGn and fBm random fields, Stoch. Envir. Res. and Risk Ass.,vol.17 ,no.3, pp. 191-216 ,2003.doi:10.1007/s00477-003-0126-8info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:318962012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSpatial random field models inspired from statistical physics with applications in the geosciencesD.T. Hristopulos()http://purl.tuc.gr/dl/dias/FFDF8219-E0EE-4E39-96D8-23B17CEC670110.1016/j.physa.2006.01.037Published at: 2015-09-25eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2006Summarization: The spatial structure of fluctuations in spatially inhomogeneous processes can be modeled in terms of Gibbs random fields. A local low energy estimator (LLEE) is proposed for the interpolation (prediction) of such processes at points where observations are not available. The LLEE approximates the spatial dependence of the data and the unknown values at the estimation points by low-lying excitations of a suitable energy functional. It is shown that the LLEE is a linear, unbiased, non-exact estimator. In addition, an expression for the uncertainty (standard deviation) of the estimate is derivedΠαρουσιάστηκε στο: Physica A: Statistical Mechanics and its Applicationspeer-reviewedBibliographic citation: D.T. Hristopulos, " Spartan spatial random field models inspired from statistical physics with applications in the geosciences " , Physi. A: Stati. Mech. and its Ap.,vol. 365,no. 1-2,pp. 211-216,2006.doi:10.1016/j.physa.2006.01.037info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:331312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAdvanced fuzzy logic controllers design and evaluation for buildings’ occupants thermal–visual comfort and indoor air quality satisfactionΚολοκοτσα Διονυσια(http://users.isc.tuc.gr/~dkolokotsa)Kolokotsa Dionysia(http://users.isc.tuc.gr/~dkolokotsa)Tsiavos D.()Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Antonidakis E.()Δημοσίευση σε επιστημονικό περιοδικό fuzzy logicSelf-adaptive control systems,adaptive control systems,self adaptive control systemsReference model Energy consumptionBuilding users satisfactionhttp://purl.tuc.gr/dl/dias/9BAF1FA8-17BB-4D9C-8DFD-D039059C5CF4http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.18.pdf 10.1016/S0378-7788(00)00098-0Published at: 2015-09-29eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2001Summarization: The aim of this paper is to present and evaluate control strategies for adjustment and preservation of air quality, thermal and visual comfort for buildings’ occupants while, simultaneously, energy consumption reduction is achieved. Fuzzy PID, fuzzy PD and adaptive fuzzy PD control methods are applied. The inputs to any controller are: the PMV index affecting thermal comfort, the CO2 concentration affecting indoor air quality and the illuminance level affecting visual comfort. The adaptive fuzzy PD controller adapts the inputs and outputs scaling factors and is based on a second order reference model. More specifically, the scaling factors are modified according to a sigmoid type function, in such a way that the measured variable to be as closer as possible to the reference model. The adaptive fuzzy PD controller is compared to a non-adaptive fuzzy PD and to an ON–OFF one. The comparison criteria are the energy required and the controlled variables response. Both, energy consumption and variables responses are improved if the adaptive fuzzy PD type controller is used. The buildings’ response to the control signals has been simulated using MATLAB/SIMULINK.ElsevierPresented on: Energy and Buildingspeer-reviewedBibliographic citation: D. Kolokotsa, D. Tsiavos, G.S Stavrakakis, K. Kalaitzakis and E. Antonidakis, "Advanced fuzzy logic controllers design and evaluation for buildings’ occupants thermal–visual comfort and indoor air quality satisfaction," Energy and Buildings, vol. 33, no. 6, pp. 531-543, Jul. 2001. doi:10.1016/S0378-7788(00)00098-0info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:331712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleInterconnecting smart card system with PLC controller in a local operating network to form a distributed energy management and control system for buildingsΚολοκοτσα Διονυσια(http://users.isc.tuc.gr/~dkolokotsa)Kolokotsa Dionysia(http://users.isc.tuc.gr/~dkolokotsa)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Antonidakis E.()Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Δημοσίευση σε επιστημονικό περιοδικό Control networksDistributed control Local networkCards, Smart,Chip cards,IC cards,Integrated circuit cards,Memory cards,smart cards,cards smart,chip cards,ic cards,integrated circuit cards,memory cards PLCFuzzy controlBuildings energy managementhttp://purl.tuc.gr/dl/dias/1E05DF61-B0D6-4F94-AB0C-7D76C6ECAC31http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.20.pdf 10.1016/S0196-8904(01)00013-9Published at: 2015-09-30eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: Distributed control and energy management for buildings is a viable solution, ensuring both indoor comfort for the occupants and reduction of energy consumption. The aim of this paper is to present the architecture of a distributed building energy management system that can be installed in new as well as in existing buildings, which are more energy inefficient. The system integrates a smart card unit, acting as a user machine interface, sensors, actuators, interfaces, a PLC controller that incorporates the fuzzy control algorithm, local operating network (LON) modules and devices and an optional PC which monitors the performance of the system. The distributed control architecture is based on the properties of the LON. The complete system is installed and tested in the Laboratory of Electronics of the Technical University of Crete.ElsevierPresented on: Energy Conversion and Managementpeer-reviewedBibliographic citation: D. Kolokotsa, K. Kalaitzakis, E. Antonidakis and G.Stavrakakis, "Interconnecting smart card system with PLC controller in a local operating network to form a distributed energy management and control system for buildings," Energy Conversion and Management, vol. 43, no. 1, pp. 119-134, Jan. 2002. doi:10.1016/S0196-8904(01)00013-9info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:331732012-10-10T00:00:00Z28
info:eu-repo/semantics/articleShort-term load forecasting based on artificial neural networks parallel implementation.Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Anagnostakis E.()Δημοσίευση σε επιστημονικό περιοδικό Short-term load forecastingMoving window regression trainingGaussian encoding neural networksRadial basis networksReal time recurrent neural networkshttp://purl.tuc.gr/dl/dias/48FF40D6-9765-4A7F-80B1-78F0206E3D79http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.22.pdf 10.1016/S0378-7796(02)00123-2Published at: 2015-09-30eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: This paper presents the development and application of advanced neural networks to face successfully the problem of the short-term electric load forecasting. Several approaches including Gaussian encoding backpropagation (BP), window random activation, radial basis function networks, real-time recurrent neural networks and their innovative variations are proposed, compared and discussed in this paper. The performance of each presented structure is evaluated by means of an extensive simulation study, using actual hourly load data from the power system of the island of Crete, in Greece. The forecasting error statistical results, corresponding to the minimum and maximum load time-series, indicate that the load forecasting models proposed here provide significantly more accurate forecasts, compared to conventional autoregressive and BP forecasting models. Finally, a parallel processing approach for 24 h ahead forecasting is proposed and applied. According to this procedure, the requested load for each specific hour is forecasted, not only using the load time-series for this specific hour from the previous days, but also using the forecasted load data of the closer previous time steps for the same day. Thus, acceptable accuracy load predictions are obtained without the need of weather data that increase the system complexity, storage requirement and cost.ElsevierPresented on: Electric Power Systems Researchpeer-reviewedBibliographic citation: K. Kalaitzakis, G. Stavrakakis and E. Anagnostakis, "Short-term load forecasting based on artificial neural networks parallel implementation," Electric Power Systems Research, vol. 63, no. 3, pp. 185-196, Oct. 2002. doi:10.1016/S0378-7796(02)00123-2info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:330722012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLocal operating networks technology aiming to improve building energy management system performance satisfying the users preferencesΚολοκοτσα Διονυσια(http://users.isc.tuc.gr/~dkolokotsa)Kolokotsa Dionysia(http://users.isc.tuc.gr/~dkolokotsa)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Sutherland George()Eftaxias George()Δημοσίευση σε διεθνές επιστημονικό περιοδικό Fuzzy PID controllerIntelligent building energy management systemCost function http://purl.tuc.gr/dl/dias/88B1E38B-3ED0-4AA9-B56E-4FE6A862CB43http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.16.pdf 10.1080/01425910108914372Published at: 2015-09-30eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2001Summarization: The available Building Energy Management Systems (BEMS), although they contribute to a significant reduction of energy consumption and improvement of the indoor environment, they can only be implemented in new buildings. Their installation in existing buildings is far from being cost effective due to the incompatibility of communication protocols between BEMS designed by various manufacturers and unavoidable modifications for data transmission. On the other hand, current research for energy efficient buildings has proved that although the design and the facilities including BEMS aim to satisfy the thermal and visual comfort plus the air quality demands while minimising the energy needs, they often do not reach their goals due to users interference. Latest trends in designing Intelligent Building Energy Management Systems (IBEMS) offer a Man Machine Interface that could store the users preferences and adapt the control strategy accordingly. The objectives of the present paper are to present the advantages of the use of a man machine interface based on a smart card terminal together with fuzzy control techniques in satisfying the users preferences plus to underline the capabilities that the LON network offers to the design. A fuzzy PID controller is developed to reach the first of the above objectives. The monitoring of the energy consumption along with satisfying the users preferences is achieved by the use of a suitable cost function for the whole system. All the above parameters as well as the cost function are kept between acceptable limits. The overall control system including the cost function is modeled and tested using MATLAB/SIMULINK. The implementation of the control system in an existing building requires interconnection of sensors and actuators installed across the building, is well served by the LonWorks technology due to its high standards and flexibility features. + +Taylor & FrancisPresented on: International Journal of Solar Energypeer-reviewedBibliographic citation: D. Kolokotsa, K. Kalaitzakis, G. Stavrakakis, G. Sutherland and G. Eytaxias "'Local Operating Networks technology aiming to improve building energy management system performance satisfying the users preferences", Int.Journ. of So. Energy, vol. 21, no. 2-3, pp. 219-242, Jan. 2001, doi:10.1080/01425910108914372info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:331772012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGenetic algorithms optimized fuzzy controller for the indoor environmental management in buildings implemented using PLC and local operating networks.Κολοκοτσα Διονυσια(http://users.isc.tuc.gr/~dkolokotsa)Kolokotsa Dionysia(http://users.isc.tuc.gr/~dkolokotsa)Σταυρακακης Γεωργιος(http://users.isc.tuc.gr/~gstavrakakis)Stavrakakis Georgios(http://users.isc.tuc.gr/~gstavrakakis)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Agoris D.()Δημοσίευση σε επιστημονικό περιοδικό Fuzzy controllerGenetic algorithms Control networksLocal operating networks Building indoor environment management systemhttp://purl.tuc.gr/dl/dias/B07042CA-08C8-482F-8853-4E7BA863AA40http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.24.pdf 10.1016/S0952-1976(02)00090-8Published at: 2015-09-30eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: In this paper, an optimized fuzzy controller is presented for the control of the environmental parameters at the building zone level. The occupants’ preferences are monitored via a smart card unit. Genetic algorithm optimization techniques are applied to shift properly the membership functions of the fuzzy controller in order to satisfy the occupants’ preferences while minimizing energy consumption. The implementation of the system integrates a smart card unit, sensors, actuators, interfaces, a programmable logic controller (PLC), local operating network (LON) modules and devices, and a central PC which monitors the performance of the system. The communication of the PLC with the smart card unit is performed using an RS 485 port, while the PLC-PC communication is performed via the LON network. The integrated system is installed and tested in the building of the Laboratory of Electronics of the Technical University of Crete.ElsevierPresented on: Engineering Applications of Artificial Intelligencepeer-reviewedBibliographic citation: D. Kolokotsa, G.S. Stavrakakis, K. Kalaitzakis and D. Agoris, "Genetic algorithms optimized fuzzy controller for the indoor environmental management in buildings implemented using PLC and local operating networks," Engineering Applications of Artificial Intelligence, vol. 15, no. 5, pp. 417-428, Sept. 2002. doi:10.1016/S0952-1976(02)00090-8info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:331792012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA survey of video processing techniques for traffic applications.Kastrinaki V.()Ζερβακης Μιχαλης(http://users.isc.tuc.gr/~mzervakis)Zervakis Michalis(http://users.isc.tuc.gr/~mzervakis)Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Δημοσίευση σε επιστημονικό περιοδικό Detection, Traffic,Monitoring, Traffic,Surveillance, Traffic,Traffic detection,Traffic surveillance,traffic monitoring,detection traffic,monitoring traffic,surveillance traffic,traffic detection,traffic surveillanceAutomatic vehicle guidanceAutomatic lane findingObject detectionDynamic scene analysishttp://purl.tuc.gr/dl/dias/2D869BA2-66D3-4936-9319-9680FCEE2DD3http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.25.pdf 10.1016/S0262-8856(03)00004-0Published at: 2015-09-30eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: Video sensors become particularly important in traffic applications mainly due to their fast response, easy installation, operation and maintenance, and their ability to monitor wide areas. Research in several fields of traffic applications has resulted in a wealth of video processing and analysis methods. Two of the most demanding and widely studied applications relate to traffic monitoring and automatic vehicle guidance. In general, systems developed for these areas must integrate, amongst their other tasks, the analysis of their static environment (automatic lane finding) and the detection of static or moving obstacles (object detection) within their space of interest. In this paper we present an overview of image processing and analysis tools used in these applications and we relate these tools with complete systems developed for specific traffic applications. More specifically, we categorize processing methods based on the intrinsic organization of their input data (feature-driven, area-driven, or model-based) and the domain of processing (spatial/frame or temporal/video). Furthermore, we discriminate between the cases of static and mobile camera. Based on this categorization of processing tools, we present representative systems that have been deployed for operation. Thus, the purpose of the paper is threefold. First, to classify image-processing methods used in traffic applications. Second, to provide the advantages and disadvantages of these algorithms. Third, from this integrated consideration, to attempt an evaluation of shortcomings and general needs in this field of active research.ElsevierPresented on: Image and Vision Computingpeer-reviewedBibliographic citation: V. Kastrinaki, M. Zervakis and K. Kalaitzakis, "A survey of video processing techniques for traffic applications," Image and Vision Computing, vol. 21, no. 4, pp. 359-381, Apr. 2003. doi:10.1016/S0262-8856(03)00004-0info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:324722012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectSequential decision making in repeated coalition formation under uncertainty Georgios Chalkiadakis()http://purl.tuc.gr/dl/dias/184802C9-8723-48FB-835B-8CF58392892Chttp://eprints.soton.ac.uk/id/eprint/265680Published at: 2015-09-26eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2008Μη διαθέσιμη περίληψηNot available summarizationΠαρουσιάστηκε στο: The Seventh International Conference on Agents and Multiagent Systems, Estoril, PortugalBibliographic citation: G. Chalkiadakis. (2008,May) .Sequential decision making in repeated coalition formation under uncertainty . Presentd at the Seventh International Conference on Agents and Multiagent Systems, Estoril, Portugal, 12 - 16 May 2008.[online].Available :http://eprints.soton.ac.uk/id/eprint/265680full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:325842012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMarketing solar thermal technologies: strategies in Europe, experience in GreeceΤσουτσος Θεοχαρης(http://users.isc.tuc.gr/~ttsoutsos)Tsoutsos Theocharis(http://users.isc.tuc.gr/~ttsoutsos)http://purl.tuc.gr/dl/dias/D29BF4F0-E3EA-457E-BC7C-FE686A552B1110.1016/S0960-1481(01)00096-9Published at: 2015-09-27eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2002Summarization: Solar thermal technologies (STTs) are mature in many EU Member States. However, in some EU regions solar applications, and especially the innovative ones (such as solar heating/cooling, solar drying, solar-powered desalination), remain at an early stage. The degree of development of each market does not depend on climate conditions (e.g., insolation) or on different technological developments. The major strengths, weaknesses, opportunities and threats of STTs are examined, in order to identify the most important actions that should be taken to reduce existing barriers, as opposed to RTD (Research and Technology Development) of the new STTs. These include financing schemes, publications, electronic dissemination tools, campaigns, events, creation of information centres, audits and studies.PergamonPresented on: Journal of Renewable Energypeer-reviewedBibliographic citation: T. D Tsoutsos ,"Marketing solar thermal technologies: strategies in Europe, experience in Greece ", Ren. Energ., vol. 26, no. 1,pp.33–46,May 2002.doi :00096info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:333332012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDesigning a new generalized battery management system.Chatzakis J.()Καλαϊτζακης Κωστας(http://users.isc.tuc.gr/~kkalaitzakis)Kalaitzakis Kostas(http://users.isc.tuc.gr/~kkalaitzakis)Voulgaris N.()Manias S.()Δημοσίευση σε επιστημονικό περιοδικό Battery management systemsDesign methodologyFault toleranceFault tolerant systemsbattery monitoringbattery protectionhttp://purl.tuc.gr/dl/dias/936C1BF1-6ED8-4C82-88B2-2968B1C852F7http://www.tuc.gr/fileadmin/users_data/elci/Kalaitzakis/J.28.pdf 10.1109/TIE.2003.817706Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: Battery management systems (BMSs) are used in many battery-operated industrial and commercial systems to make the battery operation more efficient and the estimation of battery state nondestructive. The existing BMS techniques are examined in this paper and a new design methodology for a generalized reliable BMS is proposed. The main advantage of the proposed BMS compared to the existing systems is that it provides a fault-tolerant capability and battery protection. The proposed BMS consists of a number of smart battery modules (SBMs) each of which provides battery equalization, monitoring, and battery protection to a string of battery cells. An evaluation SBM was developed and tested in the laboratory and experimental results verify the theoretical expectations.Institute of Electrical and Electronics EngineersPresented on: IEEE Transactions on Industrial Electronicspeer-reviewedBibliographic citation: J. Chatzakis, K. Kalaitzakis, N. Voulgaris, S. Manias, "Designing a new generalized battery management system," IEEE Trans. on Industrial Electronics, vol. 50, no. 5, pp. 990-999, Oct. 2003. doi:10.1109/TIE.2003.817706info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:334132012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectInvestigation of carbonate rocks appropriate for the production of natural hydraulic lime bindersΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)George Panagopoulos()Emmanouil Manoutsoglou()George Triantafyllou()http://purl.tuc.gr/dl/dias/0ED7E8DC-4393-4AB9-BC38-E85CB6C74412http://www.researchgate.net/publication/266078972_Investigation_of_carbonate_rocks_appropriate_for_the_production_of_natural_hydraulic_lime_bindersPublished at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: Cement industry is facing growing challenges in conserving materials and conforming to the demanding environ-mental standards. Therefore, there is great interest in the development, investigation and use of binders alternatives to Portland cement. Natural hydraulic lime (NHL) binders have become nowadays materials with high added value, due to their advantages in various construction applications. Some of them include compatibility, suitability, workability and the versatility in applications. NHL binders are made from limestones which contain sufficient argillaceous or siliceous components fired at relatively low temperatures, with reduction to powder by slaking with or without grinding. This study is focused in developing technology for small-scale production of cementitious binders, combining the knowledge and experience of geologists and mineral resources engineers. The first step of investigation includes field techniques to the study the lithology, texture and sedimentary structure of Neogene carbonate sediments, from various basins of Crete Island, Greece and the construction of 3D geological models, in order to determine the deposits of each different geological formation. Sampling of appropriate quantity of raw materials is crucial for the investigation. Petrographic studies on the basis of the study of grain type, grain size, types of porosity and depositional texture, are necessary to classify effectively industrial mineral raw materials for this kind of application. Laboratory tests should also include the study of mineralogical and chemical composition of the bulk raw materials, as well as the content of insoluble limestone impurities, thus determining the amount of active clay and silica components required to produce binders of different degree of hydraulicity. Firing of the samples in various temperatures and time conditions, followed by X-ray diffraction analysis and slaking rate tests of the produced binders, is essential to insure the beneficiation of their behavior. Beneficiation is defined as the implementation of the best available techniques to insure the production of an economically usable final product which combines both the hydraulicity of the silicates, aluminates and ferrites, as well as the reactivity of the calcium oxide amounts that are present. + +Investigation of carbonate rocks appropriate for the production of natural hydraulic lime binders (PDF Download Available). Available from: http://www.researchgate.net/publication/266078972_Investigation_of_carbonate_rocks_appropriate_for_the_production_of_natural_hydraulic_lime_binders [accessed Oct 1, 2015].Παρουσιάστηκε στο: European Geisciences Union General Assembly, At Vienna, AustriaEuropean Geosciences UnionBibliographic citation: G.Triantafyllou ,G. Panagopoulos ,E. Manoutsoglou ,G.E. Christidis.(2014).Investigation of carbonate rocks appropriate for the production of natural hydraulic lime binders.European Geisciences Union General Assembly, At Vienna, Austria.[online]. Available:http://www.researchgate.net/publication/266078972_Investigation_of_carbonate_rocks_appropriate_for_the_production_of_natural_hydraulic_lime_bindersfull paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:334712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA simple approach to the identification of trioctahedral smectites by X-ray diffractionΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Eleni Koutsopoulou()http://purl.tuc.gr/dl/dias/D711D0B3-DDFD-4D9F-ADFB-96C7DFDC3EE910.1180/claymin.2013.048.5.22Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: A new method for identifying the trioctahedral smectites saponite, stevensite and hectorite is proposed in this study. The method is based on differences in the X-ray diffraction (XRD) patterns of the three smectites after (a) heating at 500°C for 90 min and (b) glycerol solvation of the Cs-forms of the smectites for 20 h. After heating at 500°C, well below the dehydroxylation temperature of the three smectites, saponite and hectorite re-expand upon ethylene glycol (EG) solvation, whereas stevensite layers remain collapsed. Saponite forms one-layer and hectorite two-layer complexes after Cs-saturation and glycerol solvation. Cs-stevensite displays a gradual increase in d 001 with increasing solvation time in glycerol vapours and forms two-layer glycerol complexes with prolonged solvation. Except for the individual Mg-smectites, the proposed method may be used to identify compositional heterogeneity that may exist in the smectites. Furthermore, it should be useful in identifying the individual trioctahedral Mg-smectites when present in mixtures, and in detecting interstratified layers of different Mg-trioctahedral smectites. Application of the method revealed that the SYnL-1 laponite (CMS Source Clay Project) is not homogeneous but consists of hectorite, stevensite and possibly mixed-layer hectorite/stevensite layers.Mineralogical SocietyPresented on: Clay Mineralspeer-reviewedBibliographic citation: G. Christidis, E. Koutsopoulou, " A simple approach to the identification of trioctahedral smectites by X-ray diffraction " ,C. Min., vo.48 ,no.5 ,pp. 687-696 ,2013.doi:10.1180/claymin.2013.048.5.22info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:334912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleCharacterization of El-Tih kaolin quality using mineralogical, geochemical and geostatistical analysesΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Katsuaki Koike ()Alaa A. Masoud()http://purl.tuc.gr/dl/dias/3FF57102-486D-4AC7-A467-91677934E0BA10.1180/claymin.2013.048.1.01 Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: Detailed multi-scale characterization of the kaolin quality and the controlling depositional environment is crucial for optimal quality upgrading and for prioritizing potential exploitation areas. In the present work, the quality of El-Tih kaolin, Egypt, was investigated using the chemical/mineralogical characteristics as well as the field observations of the clay. Chemical analysis of major oxides was carried out using energy dispersive X-ray fluorescence (EDS-XRF) spectrometry. Mineralogical analyses were carried out using X-ray diffraction (XRD) and scanning electron microscopy coupled with wavelength-dispersive X-ray spectroscopy (SEM-WDS). Spatial heterogeneity of the quality was evaluated applying kriging geostatistical techniques and potential zones were identified. +Mineralogical SocietyPresented on: Clay Mineralspeer-reviewedBibliographic citation: A. A Masoud,G. Christidis, K. Koike, "Characterization of E1-Tih kaolin quality using mineralogical, geochemical and geostatistical analyses ", C. Min. ,vol.48 ,no. 1, pp.1-20 ,2013. doi:10.1180/claymin.2013.048.1.01 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:335312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGeochemical characteristics of the alteration of volcanic and volcaniclastic rocks in the Feres Basin, Thrace, NE GreeceΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)I. Marantos()Th. Markopoulos() V. Perdikatsis()http://purl.tuc.gr/dl/dias/0206E902-F79B-4A81-A816-499AE42F7E8110.1180/claymin.2008.043.4.05 Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2008Summarization: The Tertiary basin of Feres consists of sedimentary rocks, andesitic-rhyolitic volcanic rocks of K-rich calc-alkaline affinities, rocks with calc-alkaline and shoshonitic affinities and volcaniclastic fall and flow deposits. Volcanic and volcaniclastic rocks have variable concentrations of LIL elements (Ba, Sr, Rb, Th) and HFS elements (Zr, V) due to their mode of origin. The pyroclastic flows frequently show more or less intense devitrification, vapour-phase crystallization and, in some cases, evidence of fumarolic activity, as is indicated by the presence of scapolite. The volcanic and volcaniclastic rocks display various types of alteration including formation of zeolites (clinoptilolite, heulandite, mordenite, and laumontite) and smectite, as well as hydrothermal alteration (development of silicic, argillic, sericitic and propylitic zones) associated with polymetallic mineralization. The behaviour of chemical elements during alteration varies. Some are immobile and their distribution is controlled by the conditions prevailing during parent-rock formation and emplacement, but others, such as Ba and Sr, are mobile and selectively fractionate in zeolite extra-framework sites. The formation of zeolite from alteration of volcanic glass is accompanied by an increase in Mg and Al content, and a decrease in Si and Na content, whereas Ca is not affected by alteration. In certain pyroclastic flows, there is a significant difference in K-content between incipient glass and altered rock, due to K-feldspar formation during devitrification and vapour-phase crystallization. + +Presented on: Clay Mineralspeer-reviewedΒιβλιογραφική αναφορά: I. Marantos, Th. Markopoulos, G. E. Christidis ,V. Perdikatsis, " Geochemical characteristics of the alteration of volcanic and volcaniclastic rocks in the Feres Basin, Thrace, NE Greece",C. Min.,vol.43 ,no.4 ,pp.575-595 ,2008.doi:10.1180/claymin.2008.043.4.05 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:335712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleValidity of the structural formula method for layer charge determination of smectites: A re-evaluation of published dataΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)http://purl.tuc.gr/dl/dias/0722EAB5-73A1-473F-8B9F-42BBDE1876CF10.1016/j.clay.2008.02.002Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: The validity of the structural formula (SF) method for calculation of layer charge of smectites is examined through re-interpretation of +published data, which suggest that the SF method overestimates layer charge. The overestimation of layer charge by SF is based on assumptions +about the permanent CEC (CECperm) of smectites i) on the association of the molar mass of half unit cell (MHUC) with the CECperm of the smectitic +clay fraction and ii) on imbalanced SF calculated for a series of used smectites. The CECperm of smectites should not be determined at pH 4 +because of competitive adsorption of H+ cations at exchangeable sites. This was verified by monitoring the pH of acidified smectite suspensions. +Instead the pH at the isoelectric point (iep) should be used for determination of permanent charge of smectites. Moreover it is suggested that the +equation of Lagaly [Lagaly, G., 1994. Layer charge determination by alkylammonium ions. In: Mermut, A.R. (Ed.), Layer Charge Characteristics +of 2:1 Silicate Clay Minerals. CMS Workshop lectures, vol. 6. The Clay Minerals Society, Boulder Colorado, pp. 2–46] which relates the smectite +content with layer charge may be used only if CECperm is calculated on a totally anhydrous basis, otherwise it may lead to significant +underestimation either of smectite content or of layer charge.ElsevierPresented on: Applied Clay Sciencepeer-reviewedBibliographic citation: G. E. Christidis ,"Validity of the structural formula method for layer charge determination of smectites: A re-evaluation of published data ", App. Cl. Sc.,vol. 42, no. 1-2,pp.1-7 ,2008. doi:10.1016/j.clay.2008.02.002info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:335782012-10-10T00:00:00Z28
info:eu-repo/semantics/articleIon exchange equilibrium and structural changes in clinoptilolite irradiated with β- and γ-radiation. Part II: Divalent cationsDaniel Moraetis()Χρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gechristidis)Christidis Georgios(http://users.isc.tuc.gr/~gechristidis)Vasilios Perdikatsis()http://purl.tuc.gr/dl/dias/5E2C5A62-88B8-4046-AB03-269B333C6C7D10.1127/0935-1221/2008/0020-1802Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: Thermodynamic calculations of ion exchange for divalent cations were made for clinoptilolite in natural state and after +irradiation with three different doses of β-radiation (1012, 1015 and 3 × 1016 e/cm2) and γ-radiation (70 Mrad). The samples were +equilibrated with binary systems of divalent cations, namely Sr2+ ↔ 2Na+, Ca2+ ↔ 2Na+ and Mg2+ ↔ 2Na+ at 25 ◦C and total +solution normality of 0.025 N. The selectivity order Sr2+ > Ca2+ > Mg2+ was observed in non-irradiated clinoptilolite. After +irradiation with γ-radiation the affinity of clinoptilolite for Sr2+ increased and that for Mg2+ decreased, whereas the affinity for +Ca2+ remained unchanged. Irradiation with β-radiation influences selectivity order and clinoptilolite affinity decreases for Sr2+, +whereas it increases for Ca2+. For the sample irradiated with maximum dose of β-radiation the selectivity was almost identical +for Ca2+ and Sr2+. The crystallographic parameters and exchangeable cation site coordinates were refined for all samples with +the Rietveld method. The structure refinement of Sr2+-saturated samples yielded changes both in exchangeable sites and site +occupancy in channels A and B after irradiation with β-and γ-radiation. The cation sites Sr1 and Sr3 exhibit major changes both +in site coordinates and site occupancy after irradiation with β-radiation. In addition, irradiation with γ-radiation yielded major +changes in Sr1 occupancy, whereas coordinates changed only slightly. These structural modifications control the observed changes +in thermodynamic parameters after irradiation.E Schweizerbart Science PublishersPresented on: European Journal of Mineralogypeer-reviewedBibliographic citation: D. Moraetis,G.E. Christidis , V.Perdikatsis , "Ion exchange equilibrium and structural +changes in clinoptilolite irradiated with β- and γ-radiation. Part II: Divalent cations ",Eur. J. Mineral ,vol.20, no.4.,pp.603-620 ,2008. doi :10.1127/0935-1221/2008/0020-1802info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:335942012-10-10T00:00:00Z28
info:eu-repo/semantics/articleWhite mica domain formation: A model for paragonite, margarite, and muscovite formation during prograde metamorphismΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Kenneth J. T. Livi ()Péter Árkai ()David R Veblen()http://purl.tuc.gr/dl/dias/5AE54AF3-4930-460D-BBB0-BD992A0FDE6E10.2138/am.2008.2662Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: Scanning transmission electron microscopy images of the 00l white mica planes in crystals from +central Switzerland and Crete, Greece, reveal that domains of paragonite, margarite, and muscovite +are ordered within the basal plane. Energy dispersive X-ray analyses show that both cations in the +interlayer and in the 2:1 layer have ordered on the scale of tens to hundreds of nanometers. Domain +boundaries can be both sharp and crystallographically controlled or diffuse and irregular. A model +outlining the domain formation process is presented that is consistent with X-ray powder diffraction +and transmission electron microscopy data. The domain model incorporates aspects of a mixedlayered +and a disordered compositionally intermediate phase models. The main feature of the model +is the formation of mica species that segregate within the basal plane and contradict the notion of +homogeneous layers within mixed-layer phases. Implications for the formation of all diagenetic and +very low-grade metamorphic 2:1 sheet silicates are discussedPresented on: American Mineralogistpeer-reviewedBibliographic citation: J. T. Kenneth Livi ,G.E. Christidis ,Péter Árkai ,D. R Veblen , " White mica domain formation: A model for paragonite, margarite, and muscovite formation during prograde metamorphism ",Am. Mineral. ,vol. 93,no.4 pp.520-527 ,2008.doi :10.2138/am.2008.2662info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:336312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleIon exchange equilibrium and structural changes in clinoptilolite irradiated with β- and γ-radiation: Monovalent cationsΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Daniel Moraetis ()Vassilis Perdikatsis()http://purl.tuc.gr/dl/dias/3A1CDB38-D940-4433-923A-C1A4D150BB4B10.2138/am.2007.2545Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2007Περίληψη: Thermodynamic calculations of ion-exchange reactions were applied for clinoptilolite in a natural +state and after irradiation with three doses of β-radiation (1012, 1015, 3 × 1016 e/cm2) and γ-radiation +(70 Mrad). Samples were equilibrated with binary systems of K+ ↔ Na+ and Cs+ ↔ Na+ at 25° and a +total normality of 0.025 N. Selectivity for K was not affected after β-radiation with doses of 1012 and +1015 e/cm2 (ΔG° = –6.37 kJ/equiv, lnKα = 2.58 for the original clinoptilolite), whereas it increased +considerably after 70 Mrad of γ-radiation (ΔG° = –7.88 kJ/equiv, lnKα = 3.18). Selectivity for Cs+ +increased for the clinoptilolite irradiated with β-radiation (1012, 1015, 3 × 1016 e/cm2) and γ-radiation +(70 Mrad). ΔG° and lnKα for original sample and Cs+ ↔ Na+ were –7.33 kJ/equiv and 2.96, +respectively. Irradiated samples with β-radiation 1012, 1015, 3 × 1016 e/cm2 and 70 Mrad γ-radiation +yielded ΔG° and lnKα –7.41, –8.83, –8.60, –8.25 kJ/equiv and 2.99, 3.57, 3.47, 3.33 for Cs+ ↔ Na+, +respectively. Remarkable amorphization of clinoptilolite was observed after exposure at the highest +dose of β-radiation (3 × 1016 e/cm2) with a concomitant decrease in cation-exchange capacity (CEC). +Crystallographic parameters and especially exchangeable cation site coordinates were refi ned for all +samples with the Rietveld method. Cesium-saturated samples exhibited changes in the cation sites +Cs2 and Cs3, which are next to clinoptilolite channel walls with lower Al3+ for Si4+ substitution. The +observed changes include a shift in cation sites Cs2 and Cs3 toward channel walls and occupancy +decrease in site Cs2.Presented on: American Mineralogistpeer-reviewedBibliographic citation: D. Moraetis , G.E. Christidis ,V. Perdikatsis ," Ion exchange equilibrium and structural changes in clinoptilolite irradiated with - and -radiation: Monovalent cations ",Am. Min. ,vol. 92 , no. 10 , pp.1714–1730 ,2007.doi :10.2138/am.2007.2545info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:336332012-10-10T00:00:00Z28
info:eu-repo/semantics/articleZeolitic alteration in the Tertiary Feres volcano-sedimentary basin, Thrace, NE GreeceΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)T. Markopoulos()T. Marantos()http://purl.tuc.gr/dl/dias/8C4DE11E-6080-4DCF-97BA-F3794F06D9AF10.1180/minmag.2007.071.3.327Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: The Tertiary volcano-sedimentary sequence of the Feres basin (Thrace, NE Greece), includes lavas of andesitic–rhyolitic composition as well as volcaniclastic rocks, pyroclastic flows and pyroclastic fall deposits principally of dacitic–rhyodacitic composition. The pyroclastic flow deposits frequently show intense devitrification, vapour-phase crystallization and evidence of fumarolic activity, which involves deposition of scapolite in pore spaces. The Feres basin can be subdivided on the basis of mineral alteration assemblages: (1) the Pefka region; characterized by intense hydrothermal alteration of the volcanic rocks and mineral zoning (silicic, arg illic, sericitic and propylitic zones) with polymetallic mineralization, and (2) the remainder of the basin; where the volcaniclastic rocks are characterized by the alteration of volcanic glass to zeolites (clinoptilolite, heulandite, mordenite, analcime), clay minerals (smectite, illite, celadonite, chlorite), SiO2 polymorphs (cristobalite, opal-CT, quartz), K-feldspar and calcite. Laumontite is also present as an alteration product of plagioclase, with stilbite sporadically occurring in veinlets. Locally, rhyolites are also altered to zeolites (clinoptilolite and/or mordenite). The zeolitization process has occurred rapidly with the depositional environment, temperature, rate of cooling (of the volcanic rocks), nature and temperature of the mineral-forming fluids and composition of the parent material controlling the formation of zeolites. + +Presented on: Mineralogical Magazinepeer-reviewedBibliographic citation: I. Marantos, T. Markopoulos , G. E. Christidis ,"Zeolitic alteration in the Tertiary Feres volcano-sedimentary basin, Thrace, NE Greece ",Min.Mag. ,vol.71, no.3 , pp.327-345 ,2007. doi :10.1180/minmag.2007.071.3.327info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:336342012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGreek lignites as additives for controlling filtration properties of water–bentonite suspensions at high temperaturesΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Vassilios C. Kelessidis()Christina Tsamantaki()Athanasios Michalakis()Pagona Makri()Kassiani Papanicolaou()Antonios Foscolos()http://purl.tuc.gr/dl/dias/48A28BC7-D491-49A4-ADC8-979E8475414710.1016/j.fuel.2006.10.009Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2007Summarization: The effectiveness of Greek lignites to control the filtration characteristics of water–bentonite suspensions and to minimize formation +damage at high temperatures was studied. Twenty-six lignite samples from various peat/lignite deposits in Greece were used together +with a commercial lignite product. The contents of humic and fulvic acids, humins, oxygen, ash and the cation exchange capacity of +lignite samples were examined with respect to fluid loss of these suspensions. The results show that most samples provided very good +filtration control of the water–bentonite suspensions after exposure to 177 C with some being superior to the commercial product. Better +performance was observed after addition of 3% w/v lignite. Total humic and fulvic acids as percentage of dry lignite matter and the +organic matter as lignite percentage showed a weak inverse correlation with the fluid loss volumes. +ElsevierPresented on: Fuelpeer-reviewedBibliographic citation: V.C. Kelessidis , C. Tsamantaki , A. Michalakis ,G. E. Christidis , P. Makri , K.Papanicolaou , A. Foscolos ,"Greek lignites as additives for controlling filtration properties of water–bentonite suspensions at high temperatures ", Fuel. ,vol.86, no. 7-8 ,pp.1112-1121 ,2007.doi:10.1016/j.fuel.2006.10.009info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:336362012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGelation of water-bentonite suspensions at high temperatures and rheological control with lignite additionΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Vassilios C. Kelessidis()Pagona Makri()Vassiliki Hadjistamou()Christina Tsamantaki()Athanasios Mihalakis()Cassiani Papanicolaou()Antonios Foscolos()http://purl.tuc.gr/dl/dias/3FAEBE56-9AE6-4830-A528-25256B2B976110.1016/j.clay.2006.09.010Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2007Summarization: The effectiveness of lignite addition to prevent gelation of 6.42% w/w water–bentonite suspensions exposed to high +temperatures has been studied, using twenty six lignites from various basins in Greece with variable organic and inorganic contents +at concentrations of 0.5% and 3.0%. The lignite-free bentonite suspensions thickened considerably when heated at 177 °C for 16 h, +as was indicated by a two-fold increase of the yield stress, when compared to samples hydrated only at room temperature. However +plastic viscosity did not change appreciably. Full flow curves showed a Herschel–Bulkley behavior of all suspensions. Addition of +lignite maintained the stability of the suspensions exposed to high temperatures (177 °C) by keeping the yield stress low and did +not affect plastic viscosity. Some of the Greek lignites performed equally well with a commercial lignite product and improvements +of 80 to 100% of the stability of the suspensions, compared to lignite-free suspensions, have been found. Lignite addition also +lowered yield stresses for the hydrated samples. No specific trends have been identified between the effectiveness of lignites to +stabilize bentonite suspensions and their humic and fulvic acids and humins content. However, those lignites with highest humic +and fulvic acid contents have maximum stabilization capacity. Similarly, no specific trends have been observed between the +stabilization capacity of lignites and their inorganic components such as oxygen and ash content and also with the cation exchange +capacity. The effectiveness of the Greek lignites to stabilize bentonite suspensions is very high and the minor differences in the +efficiency of the different lignites cannot be attributed solely to any specific componentElsevierPresented on: Applied Clay Sciencepeer-reviewedBibliographic citation: V. C. Kelessidis , G. Christidis , P. Makri ,V.Hadjistamou , C. Tsamantaki , A. Mihalakis ,C.Papanicolaou, A. Foscolos ,"Gelation of water–bentonite suspensions at high temperatures and rheological control with lignite addition " ,Ap. Clay Sc.,vol. 36.no.4 ,pp.221-231 ,2007.doi :10.1016/j.clay.2006.09.010info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:336532012-10-10T00:00:00Z28
info:eu-repo/semantics/articleInfluence of layer charge and charge distribution of smectites on the flow behaviour and swelling of bentonitesΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Alex E. Blum()D.D. Eberl()http://purl.tuc.gr/dl/dias/5EFB42E1-A993-48AC-93A9-BA3DE365839710.1016/j.clay.2006.05.008Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2006Summarization: The influence of layer charge and charge distribution of dioctahedral smectites on the rheological and swelling properties of +bentonites is examined. Layer charge and charge distribution were determined by XRD using the LayerCharge program [Christidis, +G.E., Eberl, D.D., 2003. Determination of layer charge characteristics of smectites. Clays Clay Miner. 51, 644–655.]. The +rheological properties were determined, after sodium exchange using the optimum amount of Na2CO3, from free swelling tests. +Rheological properties were determined using 6.42% suspensions according to industrial practice. In smectites with layer charges +of −0.425 to −0.470 per half formula unit (phfu), layer charge is inversely correlated with free swelling, viscosity, gel strength, +yield strength and thixotropic behaviour. In these smectites, the rheological properties are directly associated with the proportion of +low charge layers. By contrast, in low charge and high charge smectites there is no systematic relation between layer charge or the +proportion of low charge layers and rheological properties. However, low charge smectites yield more viscous suspensions and +swell more than high charge smectites. The rheological properties of bentonites also are affected by the proportion of tetrahedral +charge (i.e. beidellitic charge), by the existence of fine-grained minerals having clay size, such as opal-CT and to a lesser degree by +the ionic strength and the pH of the suspension. A new method for classification of smectites according to the layer charge based on +the XRD characteristics of smecites is proposed, that also is consistent with variations in rheological properties. In this +classification scheme the term smectites with intermediate layer charge is proposed.ElsevierPresented on: Applied Clay Sciencepeer-reviewedBibliographic citation: G. E. Christidis , A. E. Blum , D.D. Eberl , "Influence of layer charge and charge distribution of smectites on the flow behaviour and swelling of bentonites ",Ap. Clay Sc.,vol. 34,no.1,pp.125-138 ,2006.doi :10.1016/j.clay.2006.05.008info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:337512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleInfluence of grinding on the structure and colour properties of talc, bentonite and calcite white fillersΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Pagona Makri ()Vassilis Perdikatsis ()http://purl.tuc.gr/dl/dias/A9116B19-0E83-4F04-9C04-8D2474546AC110.1180/0009855043920128Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: The influence of grinding on colour and particle-size properties of talc and smectite +from a white bentonite were studied and compared with a fine-grained calcite from a chalk. Grinding +decreased the grain size of all three minerals. The crystallite size and structure of smectite was not +affected but the crystallite size of talc decreased. The Si–O–Mg and MgO bonds of talc were +disrupted and cation exchange capacity increased with increasing grinding. Delamination of talc +crystallites was observed in the initial stages of grinding, whereas with more intense treatment, +amorphous material was formed. Comminution improved the colour properties of all three minerals, +namely brightness, L* (lightness) and DE*ab (deviation from perfect white diffuser). Grinding time +exerts greater influence on the reflectance from calcite surfaces than from clay minerals. This +difference is attributed to continuous formation of progressively smaller diffuse reflection units +forming a smoother calcite surface. Decrease of grain size does not form considerably smaller diffuse +reflection units in clay minerals unless delamination takes place. With prolonged grinding, +amorphization forms additional diffuse reflection units and a smoother surface due to comminution.Mineralogical SocietyPresented on: Clay Mineralspeer-reviewedBibliographic citation: G.E. Christidis ,P. Makri ,V.Perdikatsis , " Influence of grinding on the structure and colour properties of talc, bentonite and calcite white fillers ",C. Min. ,vol.39, no.2 , pp.163-175 ,2004. doi:10.1180/0009855043920128info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:337912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDetermination of layer-charge characteristics of smectitesΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)D. D. Eberl()http://purl.tuc.gr/dl/dias/D1E2FDA7-7BF7-462B-AAE8-9C22898E397F10.1346/CCMN.2003.0510607Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: A new method for calculation of layer charge and charge distribution of smectites is proposed. +The method is based on comparisons between X-ray diffraction (XRD) patterns of K-saturated, ethylene +glycol-solvated, oriented samples and calculated XRD patterns for three-component, mixed-layer systems. +For the calculated patterns it is assumed that the measured patterns can be modeled as random +interstratifications of fully expanding 17.1 A Ê layers, partially expanding 13.5 A Ê layers and non-expanding +9.98 AÊ layers. The technique was tested using 29 well characterized smectites. According to their XRD +patterns, smectites were classified as group 1 (low-charge smectites) and group 2 (high-charge smectites). +The boundary between the two groups is at a layer charge of –0.46 equivalents per half unit-cell. Lowcharge +smectites are dominated by 17.1 AÊ layers, whereas high-charge smectites contain only 20% fully +expandable layers on average. Smectite properties and industrial applications may be dictated by the +proportion of 17.1 AÊ layers present. Non-expanding layers may control the behavior of smectites during +weathering, facilitating the formation of illite layers after subsequent cycles of wetting and drying. The +precision of the method is better than 3.5% at a layer charge of –0.50; therefore the method should be +useful for basic research and for industrial purposes.Clay Minerals SocietyPresented on: Clays and Clay Mineralspeer-reviewedBibliographic citation: G. E. Christidis ,D. D. EBerl , "Determination of Layer-charge +Characteristics of Smectites ",Cl. and Clay Min. ,vol. 51, no. 6, pp. 644-655 ,2003.doi:10.1346/CCMN.2003.0510607info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDecolorization of vegetable oils: A study of the mechanism of adsorption of b-carotene by an acid-activated bentonite from CyprusΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Sotiria Kosiari()http://purl.tuc.gr/dl/dias/FC3CAC90-F034-4C23-BCED-6467F2152BC210.1346/CCMN.2003.0510309Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: The mechanism of decolorization of crude maize and sunflower oils was studied by means of +adsorption of b-carotene by a low-grade bentonite , containin g mixed-layered illite-smectite. +Decolorization depends on temperature and the time required for equilibrium decreases with increasing +temperature. The study of the kinetics of adsorption showed that decolorization of maize oil is a first-order +process which occurs in two steps: a first fast step with higher activation energy (25.6 kJ mol –1), +indicating the influence of a chemical interaction between the pigment and the clay surface, followed by a +second slow step with low activation energy (12.3 kJ mol –1), characteristic of physical adsorption on the +previously adsorbed molecules. Decolorization of sunflower oil is also a first-order process, described by a +single mechanism with intermediate activation energy (19.0 kJ mol –1). Adsorption isotherms of +decolorization of maize oil follow the Freundlich equation, indicating the existence of heterogeneous +adsorption sites on the solid’s surface. Heterogeneity is attributed both to different active centers on the +smectite surface (Bro¨ nsted and Lewis centers) and to the different phases present in bentonite, such as +illitic layers and clinoptilolite, which also have active centers on their surfaces.Clay Minerals SocietyPresented on: Clays and Clay Mineralspeer-reviewedBibliographic citation: G. E. Christidis, S. Kosiari , "Decolorization of vegetable oils: A +study of the mechanism of adsorption of B-Carotene by an acid-activated +bentonite from Cyprus ",Cl. and Clay Min, vol. 51, no. 3, pp.327–333, 2003.doi :10.1346/CCMN.2003.0510309info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338332012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectEvaluation of an upper cretaceous limestone from the area of arta for +lime productionΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)George Triantafyllou ()Th. Markopoulos()http://purl.tuc.gr/dl/dias/DDB9F3C0-C5BC-4E22-A2EF-4093E227AC3EPublished at: 2015-10-01eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2001Summarization: Calciantion of an Upper Cretaceous limestone from the Ionian Unit ato 700-1100°C for 1-4 hours yielded very reactive lime end products. Lime formation was monitored by means of kinetic curves and TTT diagrams. Particle size seems to control th onset of lime crystallization at low temperatures, but it is of minor importance at higher temparatures. With the experimental setting used, lime formation was completed at 900°C. The specific surface area of the end products increases with firing temperature up to 800°C, decreasing thereafter. Decrepitation of lime increases gradually with firing temperature. Hydration temperature during slaking increases rapidly up to 900°C being constant thereafter. Sintering and production of fines during control the physical properties of lime. + +Παρουσιάστηκε στο: 9th International Congress of the Geological Society of GreeceBibliographic citation: G.E. Christidis , G. Triantafyllou ,T. Markopoulos , " Evaluation of an Upper Cretaceous Limestone from the area of Arta for Lime Production " ,In 9th International Congress of the Geological Society of Greece",2001, pp.1169-1175.posterinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338372012-10-10T00:00:00Z28
info:eu-repo/semantics/articleIon exchange of zeolite Na-P(c) with Pb2+, Zn2+, and Ni2+ ionsΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)Ioannis Paspaliaris ()Aggeliki Moirou()http://purl.tuc.gr/dl/dias/438F10D2-C905-4957-8E6B-B8FF9189AB8110.1346/CCMN.2000.0480509Published at: 2015-10-01eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2000Summarization: This paper examines the ion-exchange properties of synthetic zeolite Na-P0, which was pro- duced from perlite-waste fines and has a SiO2:A1203 ratio of 4.45:1 and a cation-exchange capacity (CEC) of 3.95 meq g ~. Although equilibrium is attained rapidly for all three metals, exchange is incomplete, with At(max) (maximum equilibrium fraction of the metal in the zeolite) being 0.95 for Pb, 0.76 for Zn, and 0.27 for Ni. In both Na ~ ␣89 and Na --* ␣89 exchange, the normalized selectivity coefficient is virtually constant for :~A~(normalized equilibrium fraction of the metal in the zeolite) values of --<0.6, suggesting a pronounced homogeneity of the available exchange sites. The Gibbs standard free energy, AG~ of the Na ---)␣89 exchange calculated from the normalized selectivity coefficient is -3.11 kJ eq and, for the Na ~ 1/2Znexchange, it is 2.75 kJ eq ~. +Examination of the solid exchange products with X-ray diffraction (XRD) revealed a possible decrease in crystallinity of zeolite Pb-Pc as suggested by the significant broadening and disappearance of diffraction lines. This decrease is associated with a reduction of pore opening, as indicated from Fourier-transform infrared analysis (FTIR), which in turn results in a decrease of the amount of zeolitic water. Thermogra- vimetric-differential thermogravimetric (TG-DTG) analysis showed that water loss occurs in three steps, the relative significance of which depends on the type of exchangeable cation and subsequently on the type of complex formed with the cation and/or the zeolite channels. Zeolite Na-Pc might be utilized in environmental applications, such as the treatment of acid-mine drainage and electroplating effluents.Clay Minerals SocietyPresented on: Clays and Clay Mineralspeer-reviewedBibliographic citation: G.E. Christidis ,I. Paspaliaris ,A. moirou , "Ion exchange of zeolite Na-P(c) with Pb2+, Zn2+, and Ni2+ ions ",Cl. and Clay Min.,vol. 48,no.5, pp.563-571 ,2000.doi :10.1346/CCMN.2000.0480509info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338712012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePhysical and chemical properties of some bentonite deposits of Kimolos Island, GreeceΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)http://purl.tuc.gr/dl/dias/5F00A0C3-EB40-4EEA-B820-B8EE16F63C76 10.1016/S0169-1317(98)00023-4Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1998Summarization: Bentonite deposits of Kimolos Island, Aegean, Greece were investigated in order to determine their physical and chemical properties. Testing included measurement of CEC (cation exchange capacity), swelling capacity, pH, rheological properties and some important foundry properties including green and dry compression strength, shatter index, wet tensile strength, compactability and permeability. The rheological and foundry properties are mainly influenced by the bentonite grade (smectite content) and the degree of disaggregation of the smectite quasicrystals due to the nature of the interlayer cation, the presence of mordenite and undevitrified glass shards, the degree of the oxidation of iron and the type of smectite–opal-CT interaction. Na-activation improves green compressive strength and especially wet tensile strength and decreases permeability, while its influence on the remaining foundry properties is unpredictable. Swelling properties are affected by bentonite grade, expressed by CEC, and the presence of characteristic phases (glass shards and opal-CT) decreases swelling, while zeolites increase CEC. The swelling capacity is closely related to the CEC, if smectite chemistry is controlled. It is shown that although the presence of zeolites like mordenite or small amounts of opal-CT may not affect rheological properties, the bonding properties always deteriorate. However, the presence of undevitrified glass reduces viscosity. + +ElsevierPresented on: Applied Clay Sciencepeer-reviewedBibliographic citation: G. E. Christidis , "Physical and chemical properties of some bentonite +deposits of Kimolos Island, Greece ",Ap.Clay Sc. ,vol. 13.,no.2 ,pp.79-98 ,1998 .doi :10.1016/S0169-1317(98)00023-4info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338732012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAcid activation and bleaching capacity of bentonites from islands of Milos and Chios, Aegean, GreeceΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)P.W. Scott()A.C. Dunham()http://purl.tuc.gr/dl/dias/6C4A2463-EE59-4824-955A-1B8289EA2B2F10.1016/S0169-1317(97)00017-3Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1997Summarization: Acid activation with HCl of two bentonites from the Aegean Islands of Milos and Chios, Greece, consisting of Chambers and Tatatilla-type and Otay-type montmorillonite, respectively, resulted in a 4 to 5-fold increase of the surface area of the raw materials. The activated materials have been rendered suitable for decolorization (bleaching) of rapeseed oil through removal of β-carotene. The optimum bleaching capacity is not associated with maximum surface area. Activation is characterized by destruction of the original smectite structure, removal of octahedral cations, uptake of OH− and formation of au amorphous Si-rich phase. Mg is the most readily removed element affecting the tendency for activation. The Otay-type montmorillonites are activated. more easily. Optimum conditions for activation are obtained using a variety of combinations of acid strength and residence time. The combination which is likely to be preferred on an industrial scale, is the least energy consuming. Therefore shorter treatments with more dilute acid are preferable. + +ElsevierPresented on: Applied Clay Sciencepeer-reviewedBibliographic citation: G.E. Christidis ,P.W. Scott ,A.C. Dunham,"Acid activation and bleaching capacity of bentonites from the islands of Milos and Chios, Aegean, Greece,"Ap. Clay Sc.,vol. 12,no. 4,pp.329-347,1997.doi :10.1016/S0169-1317(97)00017-3info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:338912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleThe origin and control of colour of white bentonites from the Aegean islands of Milos and Kimolos, GreeceΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)P.W. Scott()http://purl.tuc.gr/dl/dias/3D06D166-E767-4D2E-B79D-63C61612C2B310.1007/s001260050092Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1997Summarization: Some of the Lower Pleistocene bentonites of Milos and Kimolos islands, Greece, are valued for their white colour and physicochemical +properties. They contain opal-CT and, sometimes, zeolite along with smectite, and have been derived from the alteration of +rhyolitic volcanic rocks. The Miloan white bentonites contain Tatatilla-type montmorillonite and beidellite. The Kimolian +ones have Chambers-type montmorillonite. The alteration process involved removal of alkalis and uptake of Mg, probably from +sea water. Si is either redistributed or partially removed. The Kimolian white bentonites have higher brightnesses, L* and whiteness index values, and lower yellowness index and ΔE*ab values compared with the Miloan ones. The variations in white colour are inversely related to the abundance of Fe oxides +and anatase, the occurrence of Fe in the smectite structure and its oxidation state. The presence of silica minerals is not +an important factor affecting colour, but is undesirable since it imparts high abrasiveness in commercial products. The formation +of white bentonites of high quality requires the removal of alkalis and silica during alteration of acid volcanics in order +to avoid crystallization of zeolites and opal-CT. Fe needs to be incorporated into the smectite structure. Such conditions +are rarely attained. Springer VerlagPresented on: Mineralium Depositapeer-reviewedBibliographic citation: G.E. Christidis , P.W. Scott ,"The origin and control of colour of white bentonites +from the Aegean islands of Milos and Kimolos, Greece ",Min. Dep., vol. 32.,no.3,pp.271-279 ,1997. doi :10.1007/s001260050092info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:304712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDesign and analysis of a solar reactor for anaerobic wastewater treatmentΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)http://purl.tuc.gr/dl/dias/CC33FB5E-D063-4265-A872-E8643BF5D0DF10.1016/j.biortech.2008.01.067Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: The aim of this research was to design a solar heated reactor system to enhance the anaerobic treatment of wastewater or biological +sludge at temperatures higher than the ambient air temperature. For the proposed reactor system, the solar energy absorbed by flat plate +collectors was transferred to a heat storage tank, which continuously supplied an anaerobic-filter reactor with water at a maximum temperature +of 35 C. The packed reactor was a metallic cylindrical tank with a peripheral twin-wall enclosure. Inside this enclosure was +circulated warm water from the heat storage tank. Furthermore, a mathematical model was developed for the prediction of the temperature +distribution within the reactor under steady state conditions. Preliminary results based on model simulations performed with meteorological +data from various geographical regions of the world suggested that the proposed solar reactor system could be a promising +and environmentally friendly approach for anaerobic treatment of wastewater and biological sludge.Παρουσιάστηκε στο: Bioresource Technologypeer-reviewedBibliographic citation: A.Ch. Yiannopoulos , I. D. Manariotis , C. V. Chrysikopoulos, "Design and analysis of a solar reactor for anaerobic wastewater treatment" ,biotech. technol.,vol. 99 ,pp.7742–7749. + Doi :10.1016/j.biortech.2008.01.067info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308132012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAcoustically enhanced ganglia dissolution and mobilization in a monolayer of glass beadsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Eric T. Vogler()http://purl.tuc.gr/dl/dias/AF822548-BE39-4378-A952-A1C1F8E6296D10.1007/s11242-005-1525-8 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2006Summarization: A pore network consisting of a monolayer of glass beads was constructed +for experimental investigation of the effects of acoustic waves on the dissolution and +mobilization of perchloroethylene (PCE) ganglia. Dissolution experiments were conducted +with acoustic wave frequencies ranging from 75 to 225 Hz at a constant pressure amplitude +of 3.68 kPa applied to the inlet of the monolayer. Ganglia mobilization experiments +were conducted with a constant acoustic wave frequency of 125 Hz and acoustic pressure +amplitudes ranging from 0 to 39.07 kPa. Effluent dissolved PCE concentrations were +observed to increase in the presence of acoustic waves with the greatest increase (over +300%) occurring at the lowest frequency employed (75 Hz). Acoustic waves were also +observed to mobilize otherwise immobile PCE ganglia, break them apart, and further +enhance dissolution.Παρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C. V. Chrysikopoulos,E. T. Vogler,"Acoustically enhanced ganglia dissolution and mobilization in a monolayer of glass beads " ,trans.in por. media ,vol.64,no.1 ,pp.103–121,2006.doi:10.1007/s11242-005-1525-8 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDissolution of a multicomponent DNAPL pool in an experimental aquiferΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Kenneth Y. Lee()http://purl.tuc.gr/dl/dias/6997D60A-8495-4795-9EEF-C52EF7C3C96610.1016/j.jhazmat.2005.08.005Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2006Summarization: This paper presents the results from a well-defined, circular-shaped, multicomponent dense nonaqueous phase liquid (DNAPL) pool dissolution +experiment conducted in a three-dimensional, bench scale model aquifer. The multicomponent pool is a mixture of tetrachloroethylene +(PCE) and 1,1,2-trichloroethane (1,1,2-TCA); PCE was the major component and 1,1,2-TCA was the minor component. Downgradient plume +concentrations were measured at five specific locations over time until the majority of the 1,1,2-TCA was depleted from the DNAPL pool +source. The experimental results suggest distinct spatial-temporal plume patterns for minor DNAPL components versus major DNAPL components. +The downgradient concentration varied over time for 1,1,2-TCA while a stable plume developed for PCE. A semi-analytical solution +for contaminant transport resulting from dissolution of multicomponent nonaqueous phase liquid pools successfully simulated the plume +structure and dynamics for both the major and minor DNAPL components. +© 2005 Elsevier B.V. All rights reserved.Παρουσιάστηκε στο: Journal of Hazardous Materialspeer-reviewedBibliographic citation: K. Y. Lee , C. V. Chrysikopoulos , " Dissolution of a multicomponent DNAPL pool in an experimental aquifer ",Jour. of Haza.Mater., pp 218–226.,2006, doi:10.1016/j.jhazmat.2005.08.005.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306742012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAcoustically enhanced multicomponent NAPL ganglia dissolution in water saturated packed columnsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Eric T. Vogler()http://purl.tuc.gr/dl/dias/FBD25A67-AD34-4BCA-99FE-3DC83D658CDC10.1021/es034665nPublished at: 2015-09-17eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2004Summarization: The impact of acoustic pressure waves on multicomponent +nonaqueous phase liquid (NAPL) ganglia dissolution in +water saturated columns packed with glass beads was +investigated. Laboratory data from dissolution experiments +with two and three component NAPL mixtures suggested +that acoustic waves significantly enhance ganglia dissolution +due to the imposed oscillatory interstitial water velocity. +The dissolution enhancement was shown to be directly +proportional to the acoustic wave frequency. Furthermore, +it was demonstrated that the greatest dissolution +enhancement in the presence of acoustic waves is +associated with the component of the NAPL mixture having +the smallest equilibrium aqueous solubility. Finally, +square shaped acoustic waves were shown to lead to +greater NAPL dissolution enhancement compared to +sinusoidal and triangular acoustic waves. The results of +this study suggested that aquifer remediation using acoustic +waves is a promising method particularly for aquifers +contaminated with NAPLs containing components with +very low equilibrium aqueous solubilities.Presented on: European Journal of Mechanical and Enviromental Engineeringpeer-reviewedBibliographic citation: C. V . Chrysikopoulos ,A . Vogler,"Acoustically Enhanced Multicomponent NAPL Ganglia Dissolution in Water Saturated Packed Columns " ,Environ. Sci. Technol. vol .38, pp. 2940-2945,2004.doi:10.1021/es034665ninfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306752012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDense colloid transport in a bifurcating fractureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()http://purl.tuc.gr/dl/dias/7DFC9DB3-5E99-4559-9641-A9F234F6DB0910.1016/j.jcis.2003.09.033Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: In this work, the transport of dense colloids through a water-saturated, bifurcating fracture is investigated using a constant spatial step +particle tracking technique. The size of the constituents of a colloid plume is an important factor affecting the partitioning of dense colloids +at the bifurcation. While neutrally buoyant colloids partition between daughter fractures in proportion to flow rates, dense colloids will +preferentially exit fractures that are gravitationally downgradient, notwithstanding that the majority of the interstitial fluid may flow through +the upper fracture. Comparison of the partitioning ratio between daughter fractures with the ratios of characteristic settling, diffusion, and +advection time reveal that these parameters control how colloids behave at fracture bifurcations. +Παρουσιάστηκε στο: Journal of Colloid and Interface Sciencepeer-reviewedBibliographic citation: S.C. James , C. V. Chrysikopoulos , "Dense colloid transport in a bifurcating fracture " ,Jour. of Coll. and Inter. Scien. ,vol.270,no.1 pp. 250–254,2004.doi:10.1016/j.jcis.2003.09.033info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306782012-10-10T00:00:00Z28
info:eu-repo/semantics/articleEffective velocity and effective dispersion coefficient for finite-sized +particles flowing in a uniform fractureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()http://purl.tuc.gr/dl/dias/28F948A0-F5B0-473F-8BFD-2EE5AB164E2F10.1016/S0021-9797(03)00254-6Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: In this work we derive expressions for the effective velocity and effective dispersion coefficient for finite-sized spherical particles with +neutral buoyancy flowing within a water saturated fracture. We considered the miscible displacement of a fluid initially free of particles by +another fluid containing particles of finite size in suspension within a fracture formed by two semi-infinite parallel plates. Particle spreading +occurs due to the combined actions of molecular diffusion and the dispersive effect of the Poiseuille velocity profile. Unlike Taylor dispersion, +here the finite size of the particles is taken into account. It is shown that because the finite size of a particle excludes it from the slowest +moving portion of the velocity profile, the effective particle velocity is increased, while the overall particle dispersion is reduced. A similar +derivation applied to particles flowing in uniform tubes yields analogous results. The effective velocity and dispersion coefficient derived in +this work for particle transport in fractures with uniform aperture are unique and ideally suited for use in particle tracking models.Παρουσιάστηκε στο: Journal of Colloid and Interface Sciencepeer-reviewedBibliographic citation: S.C. James, C. V. Chrysikopoulos ,"Effective velocity and effective dispersion coefficient for finite-sized particles flowing in a uniform fracture " ,Journ. of Coll. and Interf. Sc.,vol. 263, no. 1 ,pp.288–295, 2003.doi :10.1016/S0021-9797(03)00254-6.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306812012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMass transfer coefficient and concentration boundary layer thickness for a dissolving NAPL pool in porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Kenneth Y. Lee()Marios M. Fyrillas()Pin-Yi Hsuan()Concentration boundary layer thickness,Time invariant average mass transfer coefficienthttp://purl.tuc.gr/dl/dias/88D7E4DA-0CA2-4C3F-884C-8183E089D3CA10.1016/S0304-3894(02)00264-9Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: Analytical expressions for the time invariant, average mass transfer coefficient and the concentration +boundary layer thickness applicable to dissolving single-component nonaqueous phase liquid +(NAPL) pools in two-dimensional, saturated, homogeneous and isotropic porous formations are +derived. Good agreement between predicted and experimentally determined time invariant average +mass transfer coefficients is observed.Παρουσιάστηκε στο: Journal of Hazardous Materialspeer-reviewedBibliographic citation: C. V. Chrysikopoulos , P.Y.Hsuan,Marios M. Fyrillas , K. Y. Lee , +"Mass transfer coefficient and concentration boundary layer thickness for a dissolving NAPL pool in porous media ",vol.97 ,no.1-3,pp.245-255,2003. doi: 10.1016/S0304-3894(02)00264-9info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306852012-10-10T00:00:00Z28
info:eu-repo/semantics/articleRemoval of biocolloids suspended in reclaimed wastewater by injection into a fractured aquifer modelΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Rosanna La Mantia()Ioannis Manariotis()Costantino Masciopinto()Phenomenological Clogging Modelhttp://purl.tuc.gr/dl/dias/6E7DB66E-C37A-4B71-9274-E8AAA85E14EC10.1021/es902754nPublished at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2010Summarization: Two pilot-scale fractured aquifer models (FAMs) consisting +of horizontal limestone slabs were employed to investigate the +removal of biocolloids suspended in reclaimed wastewater. +To better understand the behavior of real fractured aquifers, +theseFAMsintentionallywerenot “clean”.Thefracture apertures +were randomly spread with soil deposits, and both FAMs +were preflooded with reclaimed wastewater to simulate the +field conditions of the Nardo` fractured aquifer in the Salento area, +Italy, where fractures are not clean due to artificial groundwater +recharge. One of the FAMs was injected with secondary +effluent from a wastewater treatment plant collected prior to +the chlorination step and the other with exactly the same effluent, +which was further treated in a commercial membrane +reactor. Consequently, the organic and pathogen concentrations +were considerably higher in the secondary effluent than in +the membrane reactor effluent. Injected wastewater was +continuously recirculated. Pathogen removal was greater for +the secondary wastewater than the cleaner membrane reactor +effluent. A simple mathematical model was developed to +describe fracture clogging. The results suggest that the hydraulic +conductivity of FAMs can be significantly degraded due to +retention of viable and inactivated biocolloids suspended in +reclaimed wastewater.NRC Research PressΠαρουσιάστηκε στο: Environmental Science and Technology peer-reviewedBibliographic citation: C. V . Chrysikopoulos , C. Masciopinto , R. L. Mantia , I. D .Manariotis " Removal of biocolloids suspended in reclaimed wastewater by Injection into a fractured aquifer model " ,environ. sci. technol.,vol.44,no.3 , pp.971–977,2003. doi :10.1021/es902754n.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306872012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalysis of a ,model for contaminant transport in fracture media in the presence of colloidΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Assem Abdel-Salam()Analytical solution for colloid transporthttp://purl.tuc.gr/dl/dias/DA38DB3D-B8F0-489E-869B-A51B43CD17DE10.1016/0022-1694(94)02557-RPublished at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: A mathematical model has been developed to study the cotransport of contaminants with colloids in saturated rock fractures. The contaminant is assumed to decay, and sorb on to fracture surfaces and on to colloidal particles, as well as to diffuse into the rock matrix; whereas, colloids are envisioned to deposit irreversibly on to fracture surfaces without penetration into the rock matrix. The governing one-dimensional equations describing the contaminant and the colloid transport in the fracture, colloid deposition on to fracture surfaces, and contaminant diffusion into the rock matrix are coupled. This coupling is accomplished by assuming that the amount of contaminant mass captured by colloidal particles in solution and the amount captured by deposited colloids on fracture surfaces are described by modified Freundlich reversible equilibrium sorption relationships, and that mass transport by diffusion into the rock matrix is a first-order process. The contaminant sorption on to fracture surfaces is described by a linear equilibrium sorption isotherm, while the deposition of colloids is incorporated into the model as a first-order process. The resulting coupled contaminant transport non-linear equation is solved numerically with the fully implicit finite difference method. The constant concentration as well as the constant flux boundary conditions have been considered. The impact of the presence of colloids on contaminant transport is examined. According to model simulations the results show that, depending on the conditions of the physical system considered, colloids can increase or decrease the mobility of contaminants. +Παρουσιάστηκε στο: Journal of Hydrologypeer-reviewedBibliographic citation: A. A. Salam,C. V. Chrysikopoulos ,"Analysis of a model for contaminant transport in fracture media in the presence of colloid ", J. of Hydrol.,vol. 165,no.1-4 , pp. 261-268 ,1995.doi:10.1016/0022-1694(94)02557-Rinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306892012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA three-dimensional steady-state atmospheric dispersion-deposition model for emissions from a ground-level area sourceΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)P. V. Roberts()L . M. Hildemman()Evaluation of Atmospheric disprersion model parametershttp://purl.tuc.gr/dl/dias/27DB26F8-81D1-4F27-9531-306AC4D10BA910.1016/0960-1686(92)90234-CPublished at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1992Summarization: An analytical solution to the steady-state three-dimensional atmospheric dispersion equation +has been developed for the transport of non-buoyant emissions from a continuous ground-level area source. +The model incorporates power law profiles for the variation of wind speed and vertical eddy diffusivity with +height, represents the lateral eddy diffusivity as a function of wind speed and the crosswind dispersion +coefficient, and includes dry deposition as a removal mechanism. The model is well suited for accurate +prediction of emission concentration levels in the vicinity of an area source, as well as farther downwind, +under neutral or stable atmospheric conditions. The impact of the important model parameters on +contaminant dispersion is examined. The results from several simulations, compared with point and line +sources of equivalent source strength, indicate that at short downwind distances, predictions of contaminant +concentrations emitted from area sources may be unacceptably inaccurate unless the structure of the +source is properly taken into account.Παρουσιάστηκε στο: Atmospheric Environmentpeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,L. M. Hildemann, P. V. Roberts, "A three-dimensional steady-state atmospheric dispersion-deposition model for emissions from a ground-level area source ",Atm. Envir, Vol. 26A, No. 5, pp. 747 -757, 1992.doi:10.1016/0960-1686(92)90234-C.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalytical solutions for one-dimensional colloid transport in saturated fracturesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Assem Abdel-Salam()http://purl.tuc.gr/dl/dias/F8BDAA09-ADB9-4FF9-B398-9C94E0A57ACC10.1016/0309-1708(94)90032-9Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1994Summarization: Closed-form analytical solutions for colloid transport in single rock fractures with +and without colloid penetration into the rock matrix are derived for constant +concentration as well as constant flux boundary conditions. A single fracture is +idealized as two semi-infinite parallel plates. It is assumed that colloidal particles +undergo irreversible deposition onto fracture surfaces and may penetrate into the +rock matrix, and deposit irreversibly onto rock matrix solid surfaces. The +solutions are obtained by taking Laplace transforms to the governing transport +equations and boundary conditions with respect to time and space. For the case +of no colloid penetration into the rock matrix, the solutions are expressed in terms +of exponentials and complimentary error functions; whereas, for the case of +colloid penetration into the rock matrix, the solutions are expressed in terms of +convolution integrals and modified Bessel functions. The impact of the model +parameters on colloid transport is examined. The results from several simulations +indicate that liquid-phase as well as deposited colloid concentrations in the +fracture are sensitive to the fracture surface deposition coefficient, the fracture +aperture, and the Brownian diffusion coefficient for colloidal particles penetrating +the rock matrix. Furthermore, it is shown that the differences between the two +boundary conditions investigated are minimized at dominant advective transport +conditions. The constant concentration condition overestimates liquid-phase +colloid concentrations, whereas the constant flux condition leads to conservation +of mass. +Παρουσιάστηκε στο: Advances in Water Resources peer-reviewedBibliographic citation: A. A. Salam, C. V. Chrysikopoulos, "Analytical solutions for one-dimensional colloid transport in saturated fractures ",Adv.n Wa. Res.,vol.17,no. 5,pp. 283- 296,1994.doi :10.1016/0309-1708(94)90032-9info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306932012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOne-dimensional virus transport in homogeneous porous media with time-dependent distribution coefficientΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()http://purl.tuc.gr/dl/dias/3EF28468-B1FE-495F-A12B-E50C7AD0EE0610.1016/0022-1694(95)02990-7Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1996Summarization: A stochastic model for one-dimensional virus transport in homogeneous, saturated, semi-infinite porous media is developed. The model accounts for first-order inactivation of liquid-phase and adsorbed viruses with different inactivation rate constants, and time-dependent distribution coefficient. It is hypothesized that the virus adsorption process is described by a local equilibrium expression with a stochastic time-dependent distribution coefficient. A closed form analytical solution is obtained by the method of small perturbation or first-order approximation for a semi-infinite porous medium with a flux-type inlet boundary condition. The results from several simulations indicate that a time-dependent distribution coefficient results in an enhanced spreading of the liquid-phase virus concentration. + +Παρουσιάστηκε στο: Journal of Hydrologypeer-reviewedBibliographic citation: C. V. Chrysikopoulos , Y. Sim , " One-dimensional virus transport in homogeneous porous media with time-dependent distribution coefficient " ,Jour. of Hydrol.,vol. 185 ,no. 1-4 ,pp.199-219,1996.doi:10.1016/0022-1694(95)02990-7info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306952012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalytical solutions for solute transport in saturated porous media with semi-infinite or finite thicknessΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()http://purl.tuc.gr/dl/dias/4CB55FC5-2C05-411B-93DA-91996139897710.1016/S0309-1708(98)00027-XPublished at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1999Summarization: Three-dimensional analytical solutions for solute transport in saturated, homogeneous +porous media are developed. The models account for three-dimensional dispersion in +a uniform flow field, first-order decay of aqueous phase and sorbed solutes with +different decay rates, and nonequilibrium solute sorption onto the solid matrix of the +porous formation. The governing solute transport equations are solved analytically by +employing Laplace, Fourier and finite Fourier cosine transform techniques. Porous +media with either semi-infinite or finite thickness are considered. Furthermore, +continuous as well as periodic source loadings from either a point or an elliptic source +geometry are examined. The effect of aquifer boundary conditions as well as the +source geometry on solute transport in subsurface porous formations is investigated.Παρουσιάστηκε στο: Advances in Water Resourcespeer-reviewedBibliographic citation: Y. Sim , C. V. Chrysikopoulos , "Analytical solutions for solute transport in saturated porous media with semi-infinite or +finite thickness " ,Adv.in Wat. Res.Vol. 22, No. 5, pp. 507–519, 1999.doi:10.1016/S0309-1708(98)00027-X.info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307092012-10-10T00:00:00Z28
info:eu-repo/semantics/articleContaminant transport resulting from +multicomponent nonaqueous phase liquid pool +dissolution in three-dimensional subsurface formations Χρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Kenneth Y. Lee()http://purl.tuc.gr/dl/dias/3491D5AC-32B9-417E-89DB-F8CB6FF1915E10.1016/S0169-7722(97)00053-3 Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1998Summarization: A semi-analytical method for simulating transient contaminant transport originating from the +dissolution of multicomponent nonaqueous phase liquid NAPL pools in three-dimensional, +saturated, homogeneous porous media is presented. Each dissolved component may undergo +first-order decay and may sorb under local equilibrium conditions. The NAPL pool dissolution +. process is envisioned to occur in a series of consecutive short intervals pulses . The mole +fraction, nonaqueous phase activity coefficient and aqueous solubility of every pool constituent are +estimated before the initiation of each pulse, and they are assumed to remain constant for the +duration of each interval. Individual component aqueous phase concentrations resulting from each +dissolution interval are estimated by existing analytical solutions applicable to single component +NAPL pools, and total concentration distributions of the same component are obtained by direct +superposition. The semi-analytical method is more efficient and less computationally demanding +than a finite-difference approximation. Furthermore, it is shown that neglecting the changes in +nonaqueous phase activity coefficients that occur during multicomponent NAPL pool dissolution +may result in erroneous predictions. The model presented in this work is useful for the design and +interpretation of experiments in laboratory bench scale aquifers, certain homogeneous subsurface +formations, and for the verification of complex numerical codes.Παρουσιάστηκε στο: Journal of Contaminant Hydrologypeer-reviewedBibliographic citation: C. V. Chrysikopoulos, K. Y. Lee "Contaminant transport resulting from multicomponent nonaqueous phase liquid pool dissolution in three-dimensional subsurface formations " ,J. of Cont. Hydrol.,vol. 31, no.1-2,pp.1–21,1998.doi:10.1016/S0169-7722(97)00053-3 .info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAn efficient particle tracking equation with specified spatial step for the solution of the diffusion equationΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)ScottC.James()http://purl.tuc.gr/dl/dias/F7F6A630-5250-4584-9C75-1DF4F3C79AFE10.1016/S0009-2509(01)00344-X Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2001Summarization: The traditional di(usive particle tracking equation provides an updated particle location as a function of its previous location +and molecular di(usion coe cient while maintaining a constant time step. A smaller time step yields an increasingly accurate, yet +more computationally demanding solution. Selection of this time step becomes an important consideration and, depending on the +complexity of the problem, a single optimum value may not exist. The characteristics of the system under consideration may be +such that a constant time step may yield solutions with insu cient accuracy in some portions of the domain and excess computation +time for others. In this work, new particle tracking equations speci%cally designed for the solution of problems associated with +di(usion processes in one, two, and three dimensions are presented. Instead of a constant time step, the proposed equations employ +a constant spatial step. Using a traditional particle tracking algorithm, the travel time necessary for a particle with a di(usion +coe cient inversely proportional to its diameter to achieve a pre-speci%ed distance was determined. Because the size of a particle +a(ects how it di(uses in a quiescent 8uid, it is expected that two di(erently sized particles would require di(erent travel times to +move a given distance. The probability densities of travel times for plumes of monodisperse particles were consistently found to +be log-normal in shape. The parameters describing this log-normal distribution, i.e., mean and standard deviation, are functions of +the distance speci%ed for travel and the di(usion coe cient of the particles. Thus, a random number selected from this distribution +approximates the time required for a given particle to travel a speci%ed distance. The new equations are straightforward and may be +easily incorporated into appropriate particle tracking algorithms. In addition, the new particle tracking equations are as accurate and +often more computationally e cient than the traditional particle tracking equationΠαρουσιάστηκε στο: Chemical Engineering Sciencepeer-reviewedBibliographic citation: S. C.James, C. V. Chrysikopoulos , "An e cient particle tracking equation with speci%ed spatial step for the solution of the diffusion equation ", Chem.Engin. Sc,.vol. 56,no.23 ,pp. 6535–6543, 2001.doi :10.1016/S0009-2509(01)00344-X info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307132012-10-10T00:00:00Z28
info:eu-repo/semantics/articleModeling of colloid and colloid-facilitated contaminant transport in a two-dimensional fracture with spatially variable apertureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Assem Abdel-Salam()http://purl.tuc.gr/dl/dias/63774FC1-068D-456C-B4FA-5DD4140C6168 10.1007/BF01073172 Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: Mathematical models are developed for two-dimensional transient transport of colloids, and cotransport of contaminant/colloids in a fracture-rock matrix system with spatially variable fracture aperture. The aperture in the fracture plane is considered as a lognormally distributed random variable with spatial fluctuations described by an exponential autocovariance function. Colloids are envisioned to irreversibly deposit onto fracture surfaces without penetrating the rock matrix; whereas, the contaminant is assumed to decay, sorb onto fracture surfaces and onto colloidal particles, as well as to diffuse into the rock matrix. The governing stochastic transport equations are solved numerically for each realization of the aperture fluctuations by a fully implicit finite difference scheme. Emphasis is given on the effects of variable aperture on colloid and colloid-facilitated contaminant transport. Simulated breakthrough curves of ensemble averages of several realizations show enhanced colloid transport and more pronounced fingering when colloids are subject to size exclusion from regions of small aperture size. Moreover, it is shown that an increase in the fracture aperture fluctuations leads to faster transport and increases dispersion. For the case of contaminant/colloids cotransport it is shown, for the conditions considered in this work, that colloids enhance contaminant mobility and increase contaminant dispersion. + +Παρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C. V. Chrysikopoulos, A. Abdel-Salam "Modeling of colloid and colloid-facilitated contaminant transport in a two-dimensional fracture with spatially variable aperture " , Transp.in Por. Med. ,vol. 20,no.3,pp. 197-221, 1995.doi : 10.1007/BF01073172 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307152012-10-10T00:00:00Z28
info:eu-repo/semantics/articleModeling the transport of contaminants originating from the dissolution of DNAPL pools in aquifers in the presence of dissolved humic substancesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Michael E. Tatalovich()Kenneth Y. Lee()http://purl.tuc.gr/dl/dias/F788FC1F-93AF-4B01-9947-8A3773EE0F6A10.1023/A:1006674114600 Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1999Summarization: + +A two-dimensional finite difference numerical model was developed to describe the +transport of dissolved organics originating from nonaqueous phase liquid (NAPL) pool dissolution in +saturated porous media in the presence of dissolved humic substances. A rectangular NAPL pool was +considered in a homogeneous porous medium with unidirectional interstitial groundwater velocity. +It was assumed that dissolved humic substances and aqueous phase contaminants may sorb onto the +solid matrix under local equilibrium conditions. The contaminant in the aqueous phase may undergo +first-order decay. Also, the dissolved contaminant may sorb onto humic substances. The transport +properties of dissolved humic substances are assumed to be unaffected by sorbing contaminants, +because dissolved humic macromolecules are much larger than dissolved contaminants and sorp- +tion of nonpolar contaminants onto humic substances do not affect the overall surface charge of +humic substances. The sorption characteristics of dissolved humic substances onto clean sand were +determined from column experiments. An effective local mass transfer rate coefficient accounting +for the presence of dissolved humic substances was developed. Model simulations indicate that +dissolved humic substances substantially increase NAPL pool dissolution, and consequently reduce +the required pump-and-treat aquifer remediation time. Παρουσιάστηκε στο: Transport in Porous Media peer-reviewedBibliographic citation: C. V. Chrysikopoulos ,K. Y. Lee ,M. E. Tatalovich ,"Modeling the transport of contaminants originating from the dissolution of DNAPL +pools in aquifers in the presence of dissolved humic substances" Trans. in Por.Med.,vol. 38,no.1 ,pp.93–115, 2000.doi:10.1023/A:1006674114600 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307172012-10-10T00:00:00Z28
info:eu-repo/semantics/articleThree-dimensional analytical models for virus Χρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()Comparison with Experimental Data,Model Simulations and Discussion,Model Developmenthttp://purl.tuc.gr/dl/dias/F76A8A02-C22F-4529-9C58-4DA2D99CAEAB10.1023/A:1006596412177Published at: 2015-09-18eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1998Summarization: Analytical models for virus transport in saturated, homogeneous porous media are developed. +The models account for three-dimensional dispersion in a uniform flow field, and first-order +inactivation of suspended and deposited viruses with different inactivation rate coefficients. Virus +deposition onto solid particles is described by two different processes: nonequilibrium adsorption +which is applicable to viruses behaving as solutes; and colloid filtration which is applicable to viruses +behaving as colloids. The governing virus transport equations are solved analytically by employing +Laplace/Fourier transform techniques. Instantaneous and continuous/periodic virus loadings from +a point source are examined.Παρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C. V. Chrysikopoulos , Y. Sim ,"Three-dimensional analytical models for virus " ,Tr. in por. me.,vol.30,no.1pp. 87–112, 1998.doi :10.1023/A:1006596412177info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of neutrally buoyant and dense +variably sized colloids in a two-dimensional +fracture with anisotropic apertureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C James()http://purl.tuc.gr/dl/dias/9E69919A-0EF0-4B7F-B354-22E20E18E0AD10.1023/A:1021952226861 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: The transport of monodisperse as well as polydisperse colloid suspensions in a twodimensional, +water saturated fracture with spatially variable and anisotropic aperture is investigated +with a particle tracking model. Both neutrally buoyant and dense colloid suspensions are considered. +Although flow and transport in fractured subsurface formations have been studied extensively by +numerous investigators, the transport of dense, polydisperse colloid suspensions in a fracture with +spatially variable and anisotropic aperture has not been previously explored. Simulated snapshots and +breakthrough curves of ensemble averages of several realizations of a log-normally distributed aperture +field show that polydisperse colloids exhibit greater spreading than monodisperse colloids, and +dense colloids show greater retardation than neutrally buoyant colloids. Moreover, it is demonstrated +that aperture anisotropy oriented along the flow direction substantially increases colloid spreading; +whereas, aperture anisotropy oriented transverse to the flow direction retards colloid movement.Παρουσιάστηκε στο: Transport in Porous Media peer-reviewedBibliographic citation: C. V. Chrysikopoulos, S. C. James, "Transport of neutrally buoyant and dense variably sized colloids in a two-dimensional +fracture with anisotropic aperture " ,Tran.in Por. Med.,vol. 51,no.2 ,pp.191–210, 2003.doi:10.1023/A:1021952226861info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307352012-10-10T00:00:00Z28
info:eu-repo/semantics/articleArtificial tracers for geothermal reservoir studiesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Physicochemical tracer retention processeshttp://purl.tuc.gr/dl/dias/56FF26C7-002B-4E8C-A2DD-C10211B96DE810.1007/BF00775286 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1993Summarization: Safe disposal of thermally spent geothermal +brines that contain environmentally hazardous constituents +is commonly obtained by reinjection. The reinjection +process also serves to maintain reservoir pressure, enhance +thermal recovery, and eliminate possible compactional +subsidence. To avoid premature thermal breakthrough of +reinjected fluids, tracer tests are employed for detection +and evaluation of preferential path networks. In this paper +some promising tracers that have not received much attention +in geothermal reservoir studies are discussed, and a +comprehensive tabulation of field sites of artificial tracer +utilization is presented. Chemical and transport processes +responsible for tracer retention by the formation of reservoir +solids, as well as available tracer detection techniques, +are emphasized.Παρουσιάστηκε στο: Environmental Geologypeer-reviewedBibliographic citation: C. V. Chrysikopoulos , "Artificial tracers for geothermal reservoir +studiesb",Env. Geol.,vol.22 ,no.1 ,pp. 60- 70,1993.doi:10.1007/BF00775286 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307372012-10-10T00:00:00Z28
info:eu-repo/semantics/articleContaminant transport in a fracture with spatially variable aperture in the presence of monodisperse and polydisperse colloidsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()Tanya K. Bilezikjian()http://purl.tuc.gr/dl/dias/F36756C9-FC4E-4D68-AA2B-79D244EF1C73 10.1007/s00477-004-0231-3 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2005Summarization: A quasi-three-dimensional particle tracking +model is developed to characterize the spatial and temporal +effects of advection, molecular diffusion, Taylor +dispersion, fracture wall deposition, matrix diffusion, +and co-transport processes on two discrete plumes +(suspended monodisperse or polydisperse colloids and +dissolved contaminants) flowing through a variable +aperture fracture situated in a porous medium. Contaminants +travel by advection and diffusion and may +sorb onto fracture walls and colloid particles, as well as +diffuse into and sorb onto the surrounding porous rock +matrix. A kinetic isotherm describes contaminant sorption +onto colloids and sorbed contaminants assume the +unique transport properties of colloids. Sorption of the +contaminants that have diffused into the matrix is governed +by a first-order kinetic reaction. Colloids travel by +advection and diffusion and may attach onto fracture +walls; however, they do not penetrate the rock matrix. A +probabilistic form of the Boltzmann law describes filtration +of both colloids and contaminants on fracture +walls. Ensemble-averaged breakthrough curves of many +fracture realizations are used to compare arrival times of +colloid and contaminant plumes at the fracture outlet. +Results show that the presence of colloids enhances +contaminant transport (decreased residence times) while +matrix diffusion and sorption onto fracture walls retard +the transport of contaminantsΠαρουσιάστηκε στο: Stochastic Environmental Research and Risk Assessment peer-reviewedBibliographic citation: S.C. James,T. K. Bilezikjian ,C.V Chrysikopoulos"Contaminant transport in a fracture with spatially variable aperture in the presence of monodisperse and polydisperse colloids", Stoch. Environ. Res. Ris.k Assess ,vol.19,no.4 ,pp. 266–279,2005.doi :10.1007/s00477-004-0231-3 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:307712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLocal mass transfer vorrelations for nonaqueous phase liquid pool dissolution in saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Tae-Joo KIim()Formulation of Mass Transfer Correlationshttp://purl.tuc.gr/dl/dias/89C39575-0A11-478F-B693-AB8B73A8390E10.1023/A:1006655908240Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1999Summarization: Local mass transfer correlations are developed to describe the rate of interface mass transfer +of single component nonaqueous phase liquid (NAPL) pools in saturated subsurface formations. +A three-dimensional solute transport model is employed to compute local mass transfer coefficients +from concentration gradients at the NAPL–water interface, assuming that the aqueous phase concentration +along the NAPL–water interface is constant and equal to the solubility concentration. +Furthermore, it is assumed that the porous medium is homogeneous, the interstitial fluid velocity +steady and the dissolved solute may undergo first-order decay or may sorb under local equilibrium +conditions. Power-law expressions relating the local Sherwood number to appropriate local Peclet +numbers are developed for both rectangular and elliptic/circular source geometries. The proposed +power law correlations are fitted to numerically generated data and the correlation coefficients are +determined using nonlinear least squares regression. The estimated correlation coefficients are found +to be direct functions of the interstitial fluid velocity, pool dimensions, and pool geometry.Παρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C. V. Chrysikopoulos,T.J. Kim, "Local mass transfer correlations for nonaqueous phase liquid pool dissolution insSaturated porous media",Transp. in Por. Media.,vol. 38 ,no.1 ,pp.167–187, 2000.doi :10.1023/A:1006655908240info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleEstimation of time dependent virus inactivation rates by geostatistical and resampling techniques: Application to virus transport in porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)E. T. Vogler() Virus transport in porous media, Poliovirus inactivationhttp://purl.tuc.gr/dl/dias/1D12D20F-0909-4549-AAB8-B5C8C5E0641C10.1007/s00477-003-0130-z Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: A methodology is developed for estimating +temporally variable virus inactivation rate coefficients +from experimental virus inactivation data. The methodology +consists of a technique for slope estimation of +normalized virus inactivation data in conjunction with +a resampling parameter estimation procedure. The +slope estimation technique is based on a relatively +flexible geostatistical method known as universal kriging. +Drift coefficients are obtained by nonlinear fitting +of bootstrap samples and the corresponding confidence +intervals are obtained by bootstrap percentiles. The +proposed methodology yields more accurate time dependent +virus inactivation rate coefficients than those +estimated by fitting virus inactivation data to a firstorder +inactivation model. The methodology is successfully +applied to a set of poliovirus batch inactivation +data. Furthermore, the importance of accurate inactivation +rate coefficient determination on virus transport +in water saturated porous media is demonstrated with +model simulationsΠαρουσιάστηκε στο: Stochastic Environmental Research and Risk Assessmentpeer-reviewedBibliographic citation: C. V. Chrysikopoulos,E. T. Vogler, "Estimation of time dependent virus inactivation rates by geostatistical and resampling techniques: application to virus transport in porous media", Stoch. Environ.Res. ,vol. 18,no.2 ,pp. 67 – 78,2004.doi10.1007/s00477-003-0130-zinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308152012-10-10T00:00:00Z28
info:eu-repo/semantics/articleNonaqueous liquid pool dissolution in three-dimensional heterogeneous subsurface formationsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)E.T. Vogler()W.M.J. Bao()Mass transfer correlation,Comparison with analytical solutionhttp://purl.tuc.gr/dl/dias/75267210-1178-475D-9E01-354C7731A6C410.1007/s00254-002-0721-x Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2003Summarization: A three-dimensional numerical flow and +contaminant transport model is developed to investigate +the effect of variable hydraulic conductivity on +average mass transfer coefficients associated with the +dissolution of dense nonaqueous phase liquid +(DNAPL) pools in heterogeneous, water-saturated +subsurface formations. Randomly generated, threedimensional +hydraulic conductivity fields are used to +represent a heterogeneous confined aquifer. Model +simulations indicate that the average mass transfer +coefficient is inversely proportional to the variance of +the log-transformed hydraulic conductivity. A power +law correlation relating the Sherwood number to the +variance of the log-transformed hydraulic conductivity +and appropriate Peclet numbers is developed. +A reasonable fit between predicted and numerically +determined mass transfer coefficients is observedΠαρουσιάστηκε στο: Environmental geologypeer-reviewedBibliographic citation: W.M.J. Bao, E.T. Vogler, C.V. Chrysikopoulos ,"Nonaqueous liquid pool dissolution in three-dimensional heterogeneous subsurface formations ",Envir. Geol.,vol. 43,no.8 ,pp.968–977,2003.doi :10.1007/s00254-002-0721-x info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308172012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMonodisperse and polydisperse colloid transport in water-saturated fractures with various orientations: Gravity effectsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()http://purl.tuc.gr/dl/dias/BD0AACBA-B776-4111-A9A2-2D3E041F9D5A 10.1016/j.advwatres.2011.06.001 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: Numerical experiments are conducted to examine the effects of gravity on monodisperse and polydisperse +colloid transport in water-saturated fractures with uniform aperture. Dense colloids travel in +water-saturated fractures by advection and diffusion while subject to the influence of gravity. Colloids +are assumed to neither attach onto the fracture walls nor penetrate the rock matrix based on the assumptions +that they are inert and their size is larger than the pore size of the surrounding solid matrix. Both +the size distribution of a colloid plume and colloid density are shown to be significant factors impacting +their transport when gravitational forces are important. A constant-spatial-step particle-tracking code +simulates colloid plumes with increasing densities transporting in water-saturated fractures while +accounting for three forces acting on each particle: a deterministic advective force due to the Poiseuille +flow field within the fracture, a random force caused by Brownian diffusion, and the gravitational force. +Integer angles of fracture orientation with respect to the horizontal ranging from ±90 are considered: +three lognormally distributed colloid plumes with mean particle size of 1 lm (averaged on a volumetric +basis) and standard deviation of 0.6, 1.2 and 1.8 lm are examined. Colloid plumes are assigned densities +of 1.25, 1.5, 1.75 and 2.0 g/cm3. The first four spatial moments and the first two temporal moments are +estimated as functions of fracture orientation angle and colloid density. Several snapshots of colloid +plumes in fractures of different orientations are presented. In all cases, larger particles tend to spread +over wider sections of the fracture in the flow direction, but smaller particles can travel faster or slower +than larger particles depending on fracture orientation angleΠαρουσιάστηκε στο: Advances in Water Resourcespeer-reviewedBibliographic citation: S. C. James , C.V. Chrysikopoulos , "Monodisperse and polydisperse colloid transport in water-saturated fractures with various orientations: Gravity effects " ,Advanc. in Wat.Resou. ,vol.3,no.10, pp. 1249–1255,2011.doi : 10.1016/j.advwatres.2011.06.001 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308322012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of polydisperse colloids in a saturated fracture with spatially variable apertureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()Algorithm Development,Fracture Generationhttp://purl.tuc.gr/dl/dias/A7D9F28D-166D-4430-935C-5C2786FC365E10.1029/2000WR900048 Published at: 2015-09-19eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2000Summarization: A particle tracking model is developed to simulate the transport of variably +sized colloids in a fracture with a spatially variable aperture. The aperture of the fracture +is treated as a lognormally distributed random variable. The spatial fluctuations of the +aperture are described by an exponential autocovariance function. It is assumed that +colloids can sorb onto the fracture walls but may not penetrate the rock matrix. Particle +advection is governed by the local fracture velocity and diffusion by the Stokes-Einstein +equation. Model simulations for various realizations of aperture fluctuations indicate that +lognormal colloid size distributions exhibit greater spreading than monodisperse +suspensions. Both sorption and spreading of the polydisperse colloids increase with +increasing variance in the particle diameter. It is shown that the largest particles are +preferentially transported through the fracture leading to early breakthrough while the +smallest particles are preferentially sorbed. Increasing the variance of the aperture +fluctuations leads to increased tailing for both monodisperse and variably sized colloid +suspensions, while increasing the correlation length of the aperture fluctuations leads to +increased spreading.Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: S. C. James , C. V. Chrysikopoulos ,"Transport of polydisperse colloids in a saturated fracture with spatially variable aperture ",Wat.Resou.Res., vol. 36, no. 6, pp 1457–1465, Jun. 2000.doi :10.1029/2000WR900048 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308922012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalytical models for one-dimensional virus transport in saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()http://purl.tuc.gr/dl/dias/5889F740-AB98-4A55-9330-5C56E55EA85310.1029/95WR00199Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: Analytical solutions to two mathematical models for virus transport in +one-dimensional homogeneous, saturated porous media are presented, for +constant flux as well as constant concentration boundary conditions, +accounting for first-order inactivation of suspended and adsorbed (or +filtered) viruses with different inactivation constants. Two processes +for virus attachment onto the solid matrix are considered. The first +process is the nonequilibrium reversible adsorption, which is applicable +to viruses behaving as solutes; whereas, the second is the filtration +process, which is suitable for viruses behaving as colloids. Since the +governing transport equations corresponding to each physical process +have identical mathematical forms, only one generalized closed-form +analytical solution is developed by Laplace transform techniques. The +impact of the model parameters on virus transport is examined. An +empirical relation between inactivation rate and subsurface temperature +is employed to investigate the effect of temperature on virus transport. +It is shown that the differences between the two boundary conditions are +minimized at advection-dominated transport conditions. +Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,Y. Sim , "Analytical models for one-dimensional virus transport in saturated porous media , W. Resou. Res. ,vol. 31,no.5,pp.1429-1437,1995. doi :10.1029/95WR00199info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308942012-10-10T00:00:00Z28
info:eu-repo/semantics/articleUnsaturated flow in a quasi-three-dimensional fractured +medium with spatially variable aperture Χρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Assem Abdel-Salam()Numerical Formulationhttp://purl.tuc.gr/dl/dias/CAFE0EB4-83B0-4AB0-A7A0-478981E6123E 10.1029/96WR00656 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1996Summarization: Transient moisture flow in a variably saturated quasi-three-dimensional +fracture-rock matrix system is investigated. The fracture is assumed to possess a spatially +variable aperture in its two-dimensional plane, whereas the rock matrix is treated as a +two-dimensional homogeneous and tight porous medium. The aperture fluctuations in the +fracture plane are described stochastically. Moisture exchange between the fracture and +the rock matrix is accounted for via an advective coupling term that governs the transfer +of moisture at the fracture-matrix interface and takes into account the effect of a fracturesurface +coating material. Although the variable aperture fracture is two-dimensional, the +coupling term between the fracture and the rock matrix accounts for the threedimensional +nature of the physical system. The stochastic nonlinear set of partial +differential equations is solved numerically by the Galerkin finite element method in +conjunction with the Picard iterative scheme and an automatic time step marching. +Simulations are performed to investigate phenomena which have been ignored in previous +studies. It is demonstrated that, for the case of no moisture exchange with the rock matrix, +the moisture follows preferential flow paths within the fracture plane and exhibits +pronounced fingering effects. Furthermore, it is shown that the larger the fracture +aperture fluctuations the more extended the moisture flow in the fracture. In addition, for +the case where there exists moisture exchange with the rock matrix, the movement of the +moisture front is considerably reduced, whereas fracture-surface coatings tend to slow +down moisture absorption by the rock matrix.Παρουσιάστηκε στο: Water resource researchpeer-reviewedBibliographic citation: A. A.Salam , C.V. Chrysikopoulos, "Unsaturated flow quasi-three-dimensional fractured medium with spatially variable aperture ", W.Resou.Resear ,vol.32,no.6,pp.1531-1540,1996.doi: 10.1029/96WR00656 .info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308962012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOne-dimensional virus transport in porous media with time-dependent inactivation rate coefficientsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()Parameter Sensitivity Analysishttp://purl.tuc.gr/dl/dias/6DBD0025-8BE5-4818-BBAA-6DF29F0B540610.1029/96WR01496Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1996Summarization: A model for virus transport in one-dimensional, homogeneous, saturated +porous media is developed, accounting for virus sorption and inactivation of liquid phase +and adsorbed viruses with different time dependent rate coefficients. The virus inactivation +process is represented by a pseudo first-order rate expression. The pseudo first-order +approximation is shown to simulate available experimental data from three virus +inactivation batch studies better than the frequently employed constant rate inactivation +model. Model simulations indicated that the pseudo first-order approximation, compared +to the constant inactivation, leads to extended survival of viruses and, consequently, more +distant migration. Results from a parameter sensitivity analysis demonstrated that +estimation of pseudo first-order inactivation rate coefficients from field observations +requires data collection near the source of virus contamination during initial stages of +virus transport.Παρουσιάστηκε στο: Water resource researchpeer-reviewedBibliographic citation: Y. Sim , C. V. Chrysikopoulos,"One-dimensional virus transport in porous media with time-dependent inactivation rate coefficients ", Wa.resourc. res. , vol .32,no.8,pp.2607-2611,1996.doi:10.1029/96WR01496info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308982012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalytical models for virus adsorption and inactivation in unsaturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()http://purl.tuc.gr/dl/dias/835E2A5D-7073-4169-9D47-A9240D81269410.1016/S0927-7757(99)00073-4 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1999Summarization: Analytical models for virus adsorption and inactivation in batch systems of homogeneous, isothermal, unsaturated +porous media were developed. The models account for virus sorption onto liquid–solid as well as air–liquid interfaces +and inactivation of viruses in the liquid phase and at both interfaces. Mathematical expressions appropriate for virus +sorption onto liquid–solid and air–liquid interfaces were developed as functions of the soil moisture variation. The +models were solved analytically by Laplace transform procedures. The effects of soil moisture variation on virus +sorption at the liquid–solid as well as air–liquid interfaces were investigated. Available experimental data from virus +adsorption-inactivation batch studies were successfully simulated by one of the models developed in this work. +Παρουσιάστηκε στο: Colloids and Surfaces A Physicochemical and Engineering Aspectspeer-reviewedBibliographic citation: Y. Sim, C. V. Chrysikopoulos ,"Analytical models for virus adsorption and inactivation in unsaturated porous media ",Physicoch. and Engin. Aspects,vol. 155 , no.2-3 ,pp.189–197,1999.doi:10.1016/S0927-7757(99)00073-4 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:308992012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVirus transport in unsaturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Youn Sim()http://purl.tuc.gr/dl/dias/5091D7A3-C6E4-41CD-AED4-3FB32C2A1D33 10.1029/1999WR900302Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2000Summarization: A numerical model for one-dimensional virus transport in homogeneous, +unsaturated porous media was developed. The model accounts for virus sorption onto +liquid-solid and air-liquid interfaces as well as inactivation of viruses suspended in the +liquid phase and viruses attached at both interfaces. The effects of the moisture content +variation on virus transport in unsaturated porous media were investigated. In agreement +with previous experimental studies, model simulations indicated that virus sorption is +greater at air-liquid than liquid-solid interfaces. Available data from experiments of colloid +transport through unsaturated columns were successfully simulated by the virus transport +model developed in this study.Παρουσιάστηκε στο: Water resource researchpeer-reviewedBibliographic citation: Y. Sim, C. V. Chrysikopoulos , "Virus transport in unsaturated porous media ", Wat. Res.. Res.. ,vol. 36,no. 1,pp. 173-179,2000.doi : 10.1029/1999WR900302info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:339962012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOrigin of the bentonite deposits of eastern Milos, Aegean, Greece: Geological, mineralogical and geochemical evidencePeter W. Scott()T. Marcopoulos()Chemistry of the bentoniteshttp://purl.tuc.gr/dl/dias/5C2DF410-1B57-4941-8333-98DB1412287810.1346/CCMN.1995.0430108Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: The Lower Pleistocene bentonite deposits of Eastern Milos, Greece have been formed at the +expense of volcaniclastic rocks under submarine conditions. Systematic variation of the major chemical +elements reveals that the deposits were formed from different precursors which were erupted from different +volcanic centers belonging to at least two separate volcanic provinces. The volcanic eruptions were +probably subaqueous. The major authigenic phases are smectite, K-feldspar, opal-CT and the zeolites +mordenite and clinoptilolite. The deposits have a complex history and have been affected by hydrothermal +alteration. +The geological features ofbentonites coupled by the presence of abundant authigenic K-feldspar indicate +that alteration of the parent volcanoclastic rocks took place under low temperatures and is probably not +related to hydrothermal alteration, which is a separate event. Hydrothermal alteration has modified both +the mineralogical characteristics and the properties of bentonites. Alteration of the parent rocks to bentonites +was favoured by high water : wall rock ratios and fluid flow and is associated with leaching and +subsequent removal of Na, K and Ca. The source of Mg was the parent rocks and only small scale Mguptake +from the sea water has probably taken place. The formation of authigenic K-feldspar has probably +been favoured by a high K§ + activity ratio and high Si activity of the pore fluid. Such conditions +might have been favoured by the pH conditions and the cooling history of the parent rocks.Clay Minerals SocietyPresented on: Clays and Clay Mineralspeer-reviewedBibliographic citation: G. E. Christidis, P. W. Scott, T. Marcopoulos , "Origin of the bentonite deposits of eastern Milos, Aegean, Greece: Geological, mineralogical and geochemical evidence ,"Cl. and Clay Min. ,vol. 43 ,no.1,pp.63-67 ,1995.doi :10.1346/CCMN.1995.0430108info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:339912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMechanism of illitization of bentonites in the geothermal field of Milos island +Greece: evidence based on mineralogy, chemistry, particle thickness and +morphologyΧρηστιδης Γεωργιος(http://users.isc.tuc.gr/~gchristidis)Christidis Georgios(http://users.isc.tuc.gr/~gchristidis)X-ray diffraction ,Electron microscopy http://purl.tuc.gr/dl/dias/050ED3BE-8E2C-4C22-80E2-5B910AF76B0110.1346/CCMN.1995.0430507Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: Hydrothermal alteration has caused illitization along a 40m vertical profile in the Tsantilis +bentonite deposit, Eastern Milos, Greece which consists principally of a Wyoming-type montmorillonite +and authigenic K-feldspar. The product K-bentonite which contains illite/smectite, kaolinite, K-feldspar, +quartz, sulphates and sulphides exhibits an unusual tendency for increase of expandability with depth. +Mineralogy and I/S textures were determined with X-ray diffraction and SEM and TEM methods +respectively and chemistry using X-ray fluorescence. Illitization is characterized by a 5- to 6-fold increase +of K and release of Si, Fe, Mg Na, and Ca from the parent rock, indicating a K-influx (K-metasomatism) +in the system. +The I/S particle morphology is characterized by both flaky and lath-like particles, the former dominating +in the range 100-50% expandable layers (R0 ordering) and the latter in the range 50-10% expandable +layers (R1 and R > 1 ordering). Flaky particles are also abundant in samples with R1 ordering and +abundant kaolinite, indicating that the latter might affect illitization. The I/S particles are classified in +populations with thickness multiples of 10 A, their thickness being probably smaller than the coherent +XRD domain. As the reaction proceeds, particles grow thicker and more equant. The distribution of I/S +particle dimensions forms steady state profiles showing log-normal distribution; however, sensu stricto +Ostwald ripening is unlikely. It seems that the reaction proceeds toward minimization of the surface free +energy of I/S, being affected principally by temperature and K-availability. The spatial distribution of +expandability implies that the heating source was probably a mineralized vein with T < 200~ directed +away from the bentonite, suggesting that illitization might be used as an exploration guide for mineral +deposits.Clay Minerals SocietyPresented on: Clays and Clay Mineralspeer-reviewedBibliographic citation: G.E. Christidis , "Mechanism of illitization of bentonites in the geothermal field of Milos island Greece: Evidence based on mineralogy, chemistry, particle thickness and morphology ", Cl. and Clay Min. ,vol. 43, no.5, pp.569-585 ,1995.doi :10.1346/CCMN.1995.0430507info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:340132012-10-10T00:00:00Z28
info:eu-repo/semantics/articleThe Sparql2Xquery interoperability frameworkΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Nikos Bikakis()Chrisa Tsinaraki()Ioannis Stavrakantonakis()Nektarios Gioldasis()Basic XML Schema & OntologyXPath Setshttp://purl.tuc.gr/dl/dias/F2A524FF-3916-4571-8C7A-7A0C9B35672810.1007/s11280-013-0257-xPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2015Summarization: he Web of Data is an open environment consisting of a great number of large inter-linked RDF datasets from various domains. In this environment, organizations and companies adopt the Linked Data practices utilizing Semantic Web (SW) technologies, in order to publish their data and offer SPARQL endpoints (i.e., SPARQL-based search services). On the other hand, the dominant standard for information exchange in the Web today is XML. Additionally, many international standards (e.g., Dublin Core, MPEG-7, METS, TEI, IEEE LOM) in several domains (e.g., Digital Libraries, GIS, Multimedia, e-Learning) have been expressed in XML Schema. The aforementioned have led to an increasing emphasis on XML data, accessed using the XQuery query language. The SW and XML worlds and their developed infrastructures are based on different data models, semantics and query languages. Thus, it is crucial to develop interoperability mechanisms that allow the Web of Data users to access XML datasets, using SPARQL, from their own working environments. It is unrealistic to expect that all the existing legacy data (e.g., Relational, XML, etc.) will be transformed into SW data. Therefore, publishing legacy data as Linked Data and providing SPARQL endpoints over them has become a major research challenge. In this direction, we introduce the SPARQL2XQuery Framework which creates an interoperable environment, where SPARQL queries are automatically translated to XQuery queries, in order to access XML data across the Web. The SPARQL2XQuery Framework provides a mapping model for the expression of OWL–RDF/S to XML Schema mappings as well as a method for SPARQL to XQuery translation. To this end, our Framework supports both manual and automatic mapping specification between ontologies and XML Schemas. In the automatic mapping specification scenario, the SPARQL2XQuery exploits the XS2OWL component which transforms XML Schemas into OWL ontologies. Finally, extensive experiments have been conducted in order to evaluate the schema transformation, mapping generation, query translation and query evaluation efficiency, using both real and synthetic datasets.Springer VerlagPresented on: World Wide Webnon peer-reviewedBibliographic citation: G.Skevakis , K.Makris , V.Kalokyri , P. Arapi , S.Christodoulakis ,"The SPARQL2XQuery Interoperability Framework ", w ,wide web ,vol. 18, no.2,pp.403-490 ,2015.doi :10.1007/s11280-013-0257-xinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:340512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMetadata management, interoperability and linked data publishing support for natural history museumsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Giannis Skevakis()Konstantinos Makris()Varvara Kalokyri()Polyxeni Arapi()The Natural Europe CHOhttp://purl.tuc.gr/dl/dias/4B4D0432-4D79-48F7-92E2-F0A26EF7D57910.1007/s00799-014-0114-2Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: Natural history museums (NHMs) form a rich source of knowledge about Earth’s biodiversity and natural history. However, an impressive abundance of high-quality scientific content available in NHMs around Europe remains largely unexploited due to a number of barriers, such as the lack of interconnection and interoperability between the management systems used by museums, the lack of centralized access through a European point of reference such as Europeana and the inadequacy of the current metadata and content organization. The Natural Europe project offers a coordinated solution at European level that aims to overcome those barriers. In this article, we present the architecture, deployment and evaluation of the Natural Europe infrastructure allowing the curators to publish, semantically describe and manage the museums’ cultural heritage objects, as well as disseminate them to Europeana.eu and BioCASE/GBIF. Additionally, we discuss the methodology followed for the transition of the infrastructure to the Semantic Web and the publishing of NHMs’ cultural heritage metadata as Linked Data, supporting the Europeana Data Model.Springer VerlagPresented on: International Journal on Digital Librariespeer-reviewedBibliographic citation: G. Skevakis — ,K.Makris —,V. Kalokyri — ,P. Arapi — S.Christodoulakis , "Metadata management, interoperability and linked data publishing support for natural history museums ",In.J. on Dig. Lib., vol.14, no.3-4 ,pp.127-140 ,2014. doi :10.1007/s00799-014-0114-2info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:340512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMetadata management, interoperability and linked data publishing support for natural history museumsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Giannis Skevakis()Konstantinos Makris()Varvara Kalokyri()Polyxeni Arapi()The Natural Europe CHOhttp://purl.tuc.gr/dl/dias/4B4D0432-4D79-48F7-92E2-F0A26EF7D57910.1007/s00799-014-0114-2Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: Natural history museums (NHMs) form a rich source of knowledge about Earth’s biodiversity and natural history. However, an impressive abundance of high-quality scientific content available in NHMs around Europe remains largely unexploited due to a number of barriers, such as the lack of interconnection and interoperability between the management systems used by museums, the lack of centralized access through a European point of reference such as Europeana and the inadequacy of the current metadata and content organization. The Natural Europe project offers a coordinated solution at European level that aims to overcome those barriers. In this article, we present the architecture, deployment and evaluation of the Natural Europe infrastructure allowing the curators to publish, semantically describe and manage the museums’ cultural heritage objects, as well as disseminate them to Europeana.eu and BioCASE/GBIF. Additionally, we discuss the methodology followed for the transition of the infrastructure to the Semantic Web and the publishing of NHMs’ cultural heritage metadata as Linked Data, supporting the Europeana Data Model.Springer VerlagPresented on: International Journal on Digital Librariespeer-reviewedBibliographic citation: G. Skevakis — ,K.Makris —,V. Kalokyri — ,P. Arapi — S.Christodoulakis , "Metadata management, interoperability and linked data publishing support for natural history museums ",In.J. on Dig. Lib., vol.14, no.3-4 ,pp.127-140 ,2014. doi :10.1007/s00799-014-0114-2info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:340712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleA crowdsourcing framework for the management of mobile multimedia nature observationsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Giannis Skevakis()Chrisa Tsinaraki()Ioanna Trochatou()The MoM-NOCS functionalityhttp://purl.tuc.gr/dl/dias/62F3A0DC-7766-427F-B606-73386366AE0410.1108/IJPCC-06-2014-0038Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: This paper aims to describe MoM-NOCS, a Framework and a System that support communities with common interests in nature to capture and share multimedia observations of nature objects or events using mobile devices. Design/methodology/approach – The observations are automatically associated with contextual metadata that allow them to be visualized on top of 2D or 3D maps. The observations are managed by a multimedia management system, and annotated by the same and/or other users with common interests. Annotations made by the crowd support the knowledge distillation of the data and data provenance processes in the system. Findings – MoM-NOCS is complementary and interoperable with systems that are managed by natural history museums like MMAT (Makris et al., 2013) and biodiversity metadata management systems like BIOCASE (BioCASE) and GBIF (GBIF) so that they can link to interesting observations in the system, and the statistics of the observations that they manage can be visualized by the software. Originality/value – The Framework offers rich functionality for visualizing the observations made by the crowd as function of time.EmeraldPresented on: International Journal of Pervasive Computing and Communicationspeer-reviewedBibliographic citation: G. Skevakis, .C Tsinaraki, I. Trochatou, S. Christodoulakis , "A crowdsourcing framework for the management of mobile multimedia nature observations ",Int. J.of Per. Compu. and Com.,vol. 10,no. 3,pp.216-238,2014 .doi:10.1108/IJPCC-06-2014-0038info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:341112012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePersonalised spatial knowledge management for pictures using ontologies and semantic mapsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Michalis Foukarakis() Lemonia Ragia()http://purl.tuc.gr/dl/dias/30E17CCA-6FA7-4C52-BD9B-3E04704311A010.1504/IJDCET.2009.02536Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: Cameras can provide integrated GPS and compass technology which makes them a powerful sensor for geographical context related images. They allow wireless connection to computers and the images can be automatically transferred to a PC or can be integrated into a GIS system. In this paper, we present an approach for personalised spatial information retrieval and visualisation for picture databases using ontologies and semantic maps. Ontologies are used in our case to describe domain knowledge in relation to spatial coordinates, to enhance image annotation, search capability and information visualisation. Individuals from the ontologies are represented by their footprint in semantic maps. Personalised semantic maps are constructed selecting ontologies, concept types or individuals that reflect the interests of the user. We describe a developed prototype system with a database design for ontologies and semantic maps. We demonstrate the automatic image annotation and the visualisation of the spatial queries. An application of the system targets the area of culture and tourism and provides a user friendly interface.Παρουσιάστηκε στο: International Journal of Digital Culture and Electronic Tourismpeer-reviewedBibliographic citation: S.Christodoulakis , M.Foukarakis, , L. Ragia , "Personalised spatial knowledge management for pictures using ontologies and semantic maps " ,In.J. of D.Cult. and El. Tour.,vol.4,no.1 ,2009. doi :10.1504/IJDCET.2009.02536info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:341332012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAn MPEG7 query language and a user preference model that allow semantic retrieval +and filtering of multimedia contentΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()MPEG-7 based multimedia content descriptionhttp://purl.tuc.gr/dl/dias/E5A4F869-DD04-4E8E-B39F-F5940B1BAC1F10.1007/s00530-007-0091-zPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: We present in this paper the MPEG-7 Query Language (MP7QL), a powerful query language that we have developed for querying +MPEG-7 descriptions, as well as its compatible Filtering and Search Preferences (FASP) model. The MP7QL has the MPEG-7 as +data model and allows for querying every aspect of an MPEG-7 multimedia content description. It allows the users to express +the conditions that should hold for the multimedia content returned to them regarding semantics, low-level visual and audio +features and media-related aspects. The MP7QL queries may utilize the users’ FASP and Usage History as context, thus allowing +for personalized multimedia content retrieval. The FASP model supported is compatible with the MP7QL and has the model of +the standard MPEG-7 FASPs as a special case. The proposed FASPs essentially are MP7QL queries. Both the MP7QL and its compatible +FASP model allow for the exploitation of domain knowledge encoded using pure MPEG-7 constructs. In addition, they allow the +explicit specification of boolean operators and/or preference values in order to allow both the combination of the query conditions +according to the user intentions and the expression of the importance of the individual conditions for the users. The MP7QL +query results are represented as MPEG-7 documents, guaranteeing the closure of the results within the MPEG-7 space. The MP7QL +and the FASP model have been expressed using both XML Schema and OWL syntax. An implementation of the MP7QL, on top of an +XML Native Database is currently in progress. A real world-world evaluation study on the expressive power of the MP7QL shows +that it covers both general purpose and domain specific requirements in multimedia content retrieval. Springer VerlagPresented on: Multimedia Systemspeer-reviewedBibliographic citation: C. Tsinaraki , S. Christodoulakis ,"An MPEG-7 query language and a user preference model that allow semantic retrieval and filtering of multimedia content ",Mul. Sys., vol. 13,no.2,pp.131-153,2007.doi:10.1007/s00530-007-0091-zinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:341512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleInteroperability Support between MPEG-7/21 and OWL in DS-MIRFΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()Panagiotis Polydoros()The Web Ontology Languagehttp://purl.tuc.gr/dl/dias/7785DA17-FB8E-4CFE-B5EA-49304947CAE8 10.1109/TKDE.2007.33Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: In this paper, we focus on interoperable semantic multimedia services that are offered in open environments such as the Internet. The use of well-accepted standards is of paramount importance for interoperability support in open environments. In addition, the semantic description of multimedia content utilizing domain ontologies is very useful for indexing, query specification, retrieval, filtering, user Interfaces, and knowledge extraction from audiovisual material. With the MPEG-7 and MPEG-21 standards dominating the multimedia content and service description domain and OWL dominating the ontology description languages, it is important to establish a framework that allows these standards to interoperate. We describe here the DS-MIRF framework, a software engineering framework that facilitates the development of knowledge-based multimedia applications such as multimedia information retrieval, filtering, browsing, interaction, knowledge extraction, segmentation, and content description. DS-MIRF supports interoperability of OWL with the MPEG-7/21 so that domain and application ontologies expressed in OWL can be transparently integrated with MPEG-7/21 metadata. This allows applications that recognize and use the constructs provided by MPEG-7/21 to make use of domain and application ontologies, resulting in more effective retrieval and user interaction with the audiovisual material.Institute of Electrical and Electronics EngineersPresented on: IEEE Transactions on Knowledge and Data Engineeringpeer-reviewedBibliographic citation: C. Tsinaraki , P.Polydoros , S. Christodoulakis ,"Interoperability support between MPEG-7/21 and OWL in DS-MIRF ",iEEE Tran. on Knowl.e and Data Engin. ,vol.19,no.2 ,pp.219 - 232 ,2007.doi : 10.1109/TKDE.2007.33info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:341912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSemantic, constraint & preference based authoring of multi-topic multimedia presentationsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)chrisa Tsinaraki()Adrea Perego()Panagiotis Polydoros()Athina Syntzanaki()Alessandro Martin()The SyMPA Authoring SystemThe DS-MIRF Frameworkhttp://purl.tuc.gr/dl/dias/1F3E3B3D-3E0B-4E0E-9FD9-2075A0750921http://www.researchgate.net/publication/201196629_Semantic_Constraint__Preference_Based_Multimedia_Presentation_AuthoringPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2006Summarization: We present in this paper an integrated system that allows the management and annotation of multimedia objects stored in MPEG-7/21 repositories, and the specification and semi-automatic generation of multimedia presentations based on the content relationships that exist between the multimedia objects. This system is the outcome of the collaboration between the Technical University of Crete (TUC-MUSIC) and the University of Milan (UNIMI) in the CoCoMA (Content and Context Aware Multimedia Content Retrieval, Delivery and Presentation) project of the DELOS II European Network of Excellence on Digital Libraries. The resulting system is one of the main components of the CoCoMA infrastructure that aims to provide content- and context-aware rich interactive multimedia presentations by controlling data fusion and metadata reuse. The integrated system utilizes the SyMPA management and presentation authoring system developed by UNIMI and the DS-MIRF framework developed by TUC-MUSIC.Presented on: Journal of Digital Information Managementpeer-reviewedBibliographic citation: C.Tsinaraki, A. Perego, P. Polydoros, A. Syntzanaki,A. Martin, S. Christodoulakis.(2006).Semantic, constraint and preference based authoring of multi-topic multimedia presentations.Journal of Digital Information Management.[online].Available :http://www.researchgate.net/publication/201196629_Semantic_Constraint__Preference_Based_Multimedia_Presentation_Authoringinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:342122012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGraphonto: Owl-based ontology management and multimedia annotation in the ds-mirf frameworkΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Panagiotis Polydoros() Chrisa Tsinaraki()http://purl.tuc.gr/dl/dias/18D060DE-32C3-41B6-9408-E47A7D20D350http://www.dirf.org/jdim/v4i4a2.pdfPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2006Summarization: We present here GraphOnto, a software component and an API that allow the definition and editing of both standard-based and domain OWL ontologies and their use in multimedia information system components. In our working environment an OWL Upper Ontology that captures the MPEG-7 MDS is utilized and OWL domain ontologies extend the upper ontology with domain knowledge. The ontologies imported in GraphOnto are parsed so that graphical ontology browsing and editing interfaces are automatically generated. The ontologies are used to guide the semantic multimedia annotation in a standardized manner. OWL Ontology mappings, expressed using OWL constructs, are supported and allow the definition of personalized ontologies. Personalization of the GraphOnto user interface on the application, task and user levels is provided. In addition, GraphOnto interoperates with an MPEG-7 Repository both for semantic entity reuse during multimedia content annotation and for semantic description storage. GraphOnto has been evaluated against Protégé and clearly outperforms it.Presented on: Journal of Digital Information Managementpeer-reviewedBibliographic citation: P. Polydoros, C. Tsinaraki, S. Christodoulakis .(2006).GraphOnto: 0wl-Based ontology management and multimedia annotation in the ds-mirf +framework.Journal of Digital Information Management.[online].Available :http://www.dirf.org/jdim/v4i4a2.pdfinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:343112012-10-10T00:00:00Z28
info:eu-repo/semantics/article A natural language model for managing TV-anytime information in mobile environmentsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Anastasia Karanastasi()Fotis G. Kazasis()The Natural Language Model for the Digital TV Environmenthttp://purl.tuc.gr/dl/dias/404DEC92-FE04-481D-A88F-DF0D0771F72810.1007/s00779-004-0330-7 Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2005Summarization: The TV-Anytime standard describes structures of categories of digi-tal TV program metadata, as well as User Profile metadata for TV programs. We describe a natural language model for the users to interact with the TV-Anytime metadata and preview TV programs from their mobile devices. The language utilizes completely the TV-Anytime metadata specifications and it can accommodate future metadata extensions. The interaction model does not use clarification dialogues, but it uses the user profiles to rank the possible answers in case of ambiguities, as well as TV-Anytime Metadata information and on-tologies with information concerning digital TV. We describe an implementa-tion of the language that runs on a PDA and a mobile phone and manages the metadata on a remote TV-Anytime compatible TV set.Springer VerlagPresented on: Personal and Ubiquitous Computingpeer-reviewedBibliographic citation: A. Karanastasi, F.G. Kazasis, S. Christodoulakis ,"A natural language model for managing TV-Anytime information in mobile environments ",Pers. and Ubiqu. Comp.,vol.9 , no.4 , pp.262-272 ,2005.doi :10.1007/s00779-004-0330-7 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:343142012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOntology-based semantic indexing for MPEG-7 and TV-anytime audiovisual contentΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()Panagiotis Polydoros()Fotis Kazasis()http://purl.tuc.gr/dl/dias/0C365866-DC13-4B50-890E-A971C5D2135710.1007/s11042-005-0894-xPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2005Summarization: In this paper, we describe a framework that we have developed for the support of ontology-based semantic indexing and retrieval of audiovisual content following the MPEG-7 and TV-Anytime standard specifications for metadata descriptions. Our work aims to provide a methodology to enhance the retrieval effectiveness of audiovisual content, while maintaining compatibility with the international multimedia standards. +In our framework, domain-specific ontologies guide the definition of both the application-specific metadata and the instance-description metadata that describe the contents of audiovisual programs and/or their segments. The ontologies are also used in order to provide compatible descriptions in both audiovisual content standards (MPEG-7 and TV-Anytime) for the same content. This approach allows indexing compatibility and interoperability of TV-Anytime and digital library applications. +We describe the design and implementation of a system supporting this framework. The components of the system include a segmentation tool for segmenting audiovisual information, which also provides ontology-based semantic indexing capabilities, and an appropriate API for semantic query support. An application testbed for the domain of soccer games has been developed on top of this system. An ontology for soccer games has been defined and used for indexing and retrieval of soccer games that have been stored in the system database. +The methodology we developed opens up a wide opportunity for the creation of MPEG-7 and TV-Anytime services offering structured domain-specific ontologies that can be integrated to these standards for enhancing audiovisual content retrieval performance. Kluwer Academic PublishersPresented on: Multimedia Tools and Applicationspeer-reviewedBibliographic citation: C. Tsinaraki, P.Polydoros, F. Kazasis, S. Christodoulakis, "Ontology-based semantic indexing for MPEG-7 and TV-anytime audiovisual content ,"Mult.Tools and Appl. ,vol .26,no.3,pp. 299-325, 2005.doi:10.1007/s11042-005-0894-xinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:343312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOptimal data placement on disks: a comprehensive solution for different technologiesΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)P. Triantafillou()C. A. Georgiadis()http://purl.tuc.gr/dl/dias/7EDD9BAA-8BB6-4ED5-BC77-FC9130291A4F10.1109/69.842270Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2000Summarization: The problem of optimally placing data on disks (ODP) to maximize disk-access performance has long been recognized as important. Solutions to this problem have been reported for some widely available disk technologies, such as magnetic CAV and optical CLV disks. However, important new technologies such as multizoned magnetic disks, have been recently introduced. For such technologies no formal solution to the ODP problem has been reported. In this paper, we first identify the fundamental characteristics of disk-device technologies which influence the solution to the ODP problem. We develop a comprehensive solution to the problem that covers all currently available disk technologies. We show how our comprehensive solution can be reduced to the solutions for existing disk technologies, contributing thus a solution to the ODP problem for multizoned disks. Our analytical solution has been validated through simulations and through its reduction to the known solutions for particular disksIEEEPresented on: IEEE Transactions on Knowledge and Data Engineeringpeer-reviewedBibliographic citation: C. A. Georgiadis ,P. Triantafillou , C. A. Georgiadis,"Optimal data placement on disks: A comprehensive solution for different disk technologies ", vo.12,no.2 ,pp.324 - 330 ,2000.doi: 10.1109/69.842270info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:343522012-10-10T00:00:00Z28
info:eu-repo/semantics/articleResearch and development issues for large-scale multimedia information systemsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis) Peter Triantafillou ()http://purl.tuc.gr/dl/dias/942C14E4-FCFB-4CE7-8CDC-25225A9B7B6E10.1145/234782.234793Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1995Μη διαθέσιμη περίληψηNot available summarizationPresented on: ACM Computing Surveyspeer-reviewedBibliographic citation: P.Triantafillou , S. Christodoulakis , "Research and development issues for large-scale multimedia information systems ",CM Comp. Surv.,vol. 27 ,no.4 ,pp.576-579,1995.doi: 10.1145/234782.234793info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:343912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOptimal histograms for limiting worst-case error propagation in the size of join results.Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Yiannis E. Ioannidis()Asymptotically optimal serial histogramshttp://purl.tuc.gr/dl/dias/A0E77513-A9A3-47D9-9553-601A84B1B52210.1145/169725.169708Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1993Summarization: Many current relational database systems use some form of histograms to approximate the frequency distribution of values in the attributes of relations and on this basis estimate query result sizes and access plan costs. The errors that exist in the histogram approximations directly or transitively affect many estimates derived by the database system. We identify the class of serial histograms and its subclass of end-btased histograms; the latter is of particular interest because such histograms are used in several database systems. We concentrate on equality join queries without function symbols where each relation is joined on the same attribute(s) for all joins in which it participates. Join queries of this restricted type are called t-cllque queries. We show that the optimal histogram for reducing the worst-case error in the result size of such a query is always serial. For queries with one join and no function symbols (all of which are vacuously t-clique queries), we present results on finding the optimal serial histogram and the optimal end-biased histogram based on the query characteristics and the frequency distributions of values in the join attributes of the query relations. Finally, we prove that for t-clique queries with a very large number of joins, h~gh-bzased h zstograms (which form a subclass of end-biased histograms) are always optimal. To construct a histogram for the join attribute(s) of a relation, the values in the attribute(s) must first be sorted based on their frequency and then assigned into buckets according to the optimality results above. + +Presented on: ACM Transactions on Database Systemspeer-reviewedBibliographic citation: Y. Ioannidis , S. Christodoulakis , " Optimal histograms for limiting worst-case error propagation in the size of join results",ACM Trans. on Datab. Syst. , vol. 18 ,no. 4 ,pp. 709-748,1993 .doi : 10.1145/169725.169708 +info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:344112012-10-10T00:00:00Z28
info:eu-repo/semantics/articlePrinciples of storage and retrieval of multimedia dataΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Jim Gemmell()http://purl.tuc.gr/dl/dias/5FFF5B4A-80DB-43B2-8D8E-7284C174840D10.1145/128756.128758Published at: 2015-10-02eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1992Summarization: This paper establishes some fundamental principles for the retrieval and storage of delay-sensitive multimedia data. Delay-sensitive data include digital audio, animations, and video. Retrieval of these data types from secondary storage has to satisfy certain time constraints in order to be acceptable to the user. The presentation is based on digital audio in order to provide intuition to the reader, although the results are applicable to all delay-sensitive data. A theoretical framework is developed for the real-time requirements of digital audio playback. We show how to describe these requirements in terms of the consumption rate of the audio data and the nature of the data-retrieval rate from secondary storage. Making use of this framework, bounds are derived for buffer space requirements for certain common retrieval scenarios. Storage placement strategies for multichannel synchronized data are then categorized and examined. The results presented in this paper are basic to any playback of delay-sensitive data and should assist the multimedia system designer in estimating hardware requirements and in evaluating possible design choices.Association for Computing MachineryPresented on: ACM Transactions on Information Systemspeer-reviewedBibliographic citation: J. Gemmell ,S. Christodoulakis ,"Principles of delay-sensitive multimedia data storage retrieval ",ACM Trans. on Info. Syst. ,vol. 10,no.1 ,pp. 51-90,1992.doi:10.1145/128756.128758info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:344312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleFile organizations with shared overflow blocks for variable length +objectsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Yannis Manolopoulos()http://purl.tuc.gr/dl/dias/C9997B6B-4949-4EB0-92E5-77E82D6CC16D10.1016/0306-4379(92)90028-LPublished at: 2015-10-02eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1992Summarization: Traditional file organizations for records may also be appropriate for the storage and retrieval of objects. Since objects frequently involve diverse data types (such as text, compressed images, graphics, etc.) as well as composite structures, they may have a largely variable length. In this paper, we assume that in the case of composite objects their components are clustered together and that object file organizations have overflows. The blocks of the main file are grouped so that they share a common number of overflow blocks. For this class of file organizations we present and analyze the performance of three different overflow searching algorithms. We show that the third algorithm gives very significant performance advantages under certain circumstances. + +Presented on: Information Systemspeer-reviewedBibliographic citation: Y. Manolopoulos , S, Christodoulakis ,File organizations with shared overflow blocks for variable length objects ", Inf. syst. vol. 17,no. 6 ,pp.491-509,1992.doi:10.1016/0306-4379(92)90028-Linfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:345712012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectCOLearn and open discovery space portal alignment: A case of enriching open learning infrastructures with collaborative learning capabilitiesΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)N. Mourmoutzis()P. Arapi()M. Mylonakis()G. Stylianakis()http://purl.tuc.gr/dl/dias/656642AA-8362-4A90-8F97-75345B8ABDD710.1109/IMCTL.2014.7011142 Published at: 2015-10-03eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: In this paper we present COLearn platform which can be seen as a shell, easily integrated on top of existing open learning infrastructures (such as LMSs and OER repositories) to enrich their capabilities by offering functionality to design rich learning activities and learning workflows. COLearn run-time environment is used to enact these activities and workflows. This way, COLearn leverages the power of the underlying infrastructures, provides structure to the groups of learners that participate in learning workflows, dynamically adapts the workflows during their enactment, monitors their evolution to facilitate assessment and provides feedback to the learners. COLearn employs an intuitive graphical representation exploiting the BPMN standard. As an internal representation and interoperability model it uses IMS LD thus offering effective sharing and remixing to realize the vision of open educational practices. This is an important aspect as it makes explicit the, otherwise tacit knowledge pertaining to the design of learning experiences.Παρουσιάστηκε στο: International Conference on Interactive Mobile Communication Technologies and Learning (IMCL) 2014 IEEEBibliographic citation: G. Stylianakis , N. Moumoutzis , P. Arapi , M. Mylonakis , S. Christodoulakis ,"COLearn and open discovery space portal alignment: A case of enriching open learning infrastructures with collaborative learning capabilities ",In the Int. Conf. on Inter. Mob. Com. Techn. and Learn. (IMCL) ,pp.252 - 256.doi : +10.1109/IMCTL.2014.7011full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:345712012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectCOLearn and open discovery space portal alignment: A case of enriching open learning infrastructures with collaborative learning capabilitiesΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)N. Mourmoutzis()P. Arapi()M. Mylonakis()G. Stylianakis()http://purl.tuc.gr/dl/dias/656642AA-8362-4A90-8F97-75345B8ABDD710.1109/IMCTL.2014.7011142 Published at: 2015-10-03eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: In this paper we present COLearn platform which can be seen as a shell, easily integrated on top of existing open learning infrastructures (such as LMSs and OER repositories) to enrich their capabilities by offering functionality to design rich learning activities and learning workflows. COLearn run-time environment is used to enact these activities and workflows. This way, COLearn leverages the power of the underlying infrastructures, provides structure to the groups of learners that participate in learning workflows, dynamically adapts the workflows during their enactment, monitors their evolution to facilitate assessment and provides feedback to the learners. COLearn employs an intuitive graphical representation exploiting the BPMN standard. As an internal representation and interoperability model it uses IMS LD thus offering effective sharing and remixing to realize the vision of open educational practices. This is an important aspect as it makes explicit the, otherwise tacit knowledge pertaining to the design of learning experiences.Παρουσιάστηκε στο: International Conference on Interactive Mobile Communication Technologies and Learning (IMCL) 2014 IEEEBibliographic citation: G. Stylianakis , N. Moumoutzis , P. Arapi , M. Mylonakis , S. Christodoulakis ,"COLearn and open discovery space portal alignment: A case of enriching open learning infrastructures with collaborative learning capabilities ",In the Int. Conf. on Inter. Mob. Com. Techn. and Learn. (IMCL) ,pp.252 - 256.doi : +10.1109/IMCTL.2014.7011full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:345722012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectThe ALICE experience: A learning framework to promote gaming literacy for educators and its refinementΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)N.Moumoutzis ()M.Christoulakis ()A. Pitsiladis ()G.Sifakis ()I.Maragoudakis ()http://purl.tuc.gr/dl/dias/7D7A9F99-149D-4E99-84BE-82FFDF346967 10.1109/IMCTL.2014.7011143 Published at: 2015-10-03eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2014Summarization: Educators are facing the challenge to use the learning potential of games from several complementary objectives. Above all, they need to develop their own competencies and critical thinking on games. The overarching framework for a fruitful answer to this challenge could be structured around a particular type of literacy, the so-called gaming literacy. This new type of literacy seeks to provide a firm ground for cultivating a new type of thinking about the world that is more close to the children's way of thinking: “What does the world look like from the point of view of gaming?” To enable educators effectively move towards this direction, it is important to formalize the professional knowledge and skills they need to develop, offer new learning opportunities for them (either pre-service or in-service) and build communities of practice within which they could exchange their experiences and continue their professional development. We present our work towards this direction, the underlying learning framework, its initial conception, the first pilot implementation and directions of further developments focusing on mobile games.Παρουσιάστηκε στο: International Conference on Interactive Mobile Communication Technologies and Learning (IMCL) 2014 IEEEBibliographic citation: N.Moumoutzis , M.Christoulakis , A.Pitsiladis , G. Sifakis, I. Maragoudakis, S.Christodoulakis ,"The ALICE experience: A learning framework to promote gaming literacy for educators and its refinement ",In the International Conference on Interactive Mobile Communication Technologies and Learning (IMCL) ,pp. 257 - 261 .doi : +10.1109/IMCTL.2014.7011143full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:345952012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectCoLearn: Real time collaborative learning environmentΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Nektarios Moumoutzis()Polyxeni Arapi()George Stylianakis()http://purl.tuc.gr/dl/dias/D1897FC8-8C48-400C-9F64-DBBA0CD4FE3F10.1109/ICeLeTE.20Published at: 2015-10-03eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: Computer Supported Collaborative Learning hasbecome an important part of e-learning providing interactivityand accessibility to learning resources either synchronouslyor asynchronously among users. In order to develop an elearning environment that supports collaborative learningone should cope with learning content, communication andcollaboration facilities, technological infrastructure, and runtime execution (i.e. learning process). Collaboration scripts areemployed to specify the components of the learning processincluding collaboration and interaction patterns within groupsof participants. In this paper we present a Computer SupportedCollaborative Learning platform which includes a collaborationscript authoring tool based on the Business Process ModelingNotation as the model for the graphical representation of scripts.Collaboration scripts are parsed and transformed to IMSLearning Design Level C learning flows. The second importantcomponent of the platform is the run time environment whichis based on the Copper Core Engine that executes the IMSLearning Design learning flows and a Message OrientedMiddleware which is built over the Extensible Messagingand Presence Protocol. This middleware layer enables groupmanagement and social interaction among participants. Theplatform integrates external learning tools by implementingthe IMS Learning Tool Interoperability specification. The IMSLearning Tool Interoperability specification is used to enable thedynamic integration of external tools through services.Παρουσιάστηκε στο: The Second International Conference on E-Learning and E-Technologies in Education (ICEEE2013), Sept. 23-25 Poland 2013Institute of Electrical and Electronics EngineersBibliographic citation: G. Stylianakis, P. Arapi, N.Moumoutzis, S. Christodoulakis ,CoLearn: Real time collaborative learning environment ", In 2013 Int.Conf on E-Lea. and E-Tech. in Educ., pp.13 - 18.doi : 10.1109/ICeLeTE.2013.6644340full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:345952012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectCoLearn: Real time collaborative learning environmentΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Nektarios Moumoutzis()Polyxeni Arapi()George Stylianakis()http://purl.tuc.gr/dl/dias/D1897FC8-8C48-400C-9F64-DBBA0CD4FE3F10.1109/ICeLeTE.20Published at: 2015-10-03eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: Computer Supported Collaborative Learning hasbecome an important part of e-learning providing interactivityand accessibility to learning resources either synchronouslyor asynchronously among users. In order to develop an elearning environment that supports collaborative learningone should cope with learning content, communication andcollaboration facilities, technological infrastructure, and runtime execution (i.e. learning process). Collaboration scripts areemployed to specify the components of the learning processincluding collaboration and interaction patterns within groupsof participants. In this paper we present a Computer SupportedCollaborative Learning platform which includes a collaborationscript authoring tool based on the Business Process ModelingNotation as the model for the graphical representation of scripts.Collaboration scripts are parsed and transformed to IMSLearning Design Level C learning flows. The second importantcomponent of the platform is the run time environment whichis based on the Copper Core Engine that executes the IMSLearning Design learning flows and a Message OrientedMiddleware which is built over the Extensible Messagingand Presence Protocol. This middleware layer enables groupmanagement and social interaction among participants. Theplatform integrates external learning tools by implementingthe IMS Learning Tool Interoperability specification. The IMSLearning Tool Interoperability specification is used to enable thedynamic integration of external tools through services.Παρουσιάστηκε στο: The Second International Conference on E-Learning and E-Technologies in Education (ICEEE2013), Sept. 23-25 Poland 2013Institute of Electrical and Electronics EngineersBibliographic citation: G. Stylianakis, P. Arapi, N.Moumoutzis, S. Christodoulakis ,CoLearn: Real time collaborative learning environment ", In 2013 Int.Conf on E-Lea. and E-Tech. in Educ., pp.13 - 18.doi : 10.1109/ICeLeTE.2013.6644340full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:306832012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDissolution of a well-defined trichloroethylene pool in saturated porous media: Experimental results and model simulationsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Kenneth Y. Lee()Experimental mass transfer correlation,TCE dissolution datahttp://purl.tuc.gr/dl/dias/4AEE9A8D-B6D3-47FB-AAC7-95D61340555D10.1016/S0043-1354(02)00097-0Published at: 2015-09-17eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2002Summarization: An experimental mass transfer correlation was developed for trichloroethylene (TCE) pools dissolving in watersaturated +porous media. A three-dimensional, bench-scale model aquifer previously designed by Chrysikopoulos et al. +(Water Resour. Res. 36(7) (2000) 1687) was employed for collection of the experimental dissolution data. The unique +aspect of the model aquifer design is the formation of a well-defined, circular TCE pool at the bottom of the model +aquifer. Steady-state dissolved TCE concentrations at specific downstream locations within the aquifer were collected +for each of the seven interstitial velocities considered in this study. For each interstitial velocity, a corresponding time +invariant overall mass transfer coefficient was determined by fitting the experimental data to an analytical solution +applicable to nonaqueous phase liquid (NAPL) pools (Water Resour. Res. 31(4) (1995) 1137). Subsequently, a +correlation relating the time invariant overall Sherwood number to appropriate overall Peclet numbers was developed. +Relatively good agreement between the newly developed correlation and experimental data was observed. r 2002 +Elsevier Science Ltd. All rights reserved.Παρουσιάστηκε στο: Water Researchpeer-reviewedBibliographic citation: K. Y. Lee , C. V. Chrysikopoulos, "Dissolution of a well-defined trichloroethylene pool in saturated porous media: experimental results and +model simulations " , Wat. Re.,vol. 36 ,no.15 ,pp.3911–3918,2002.doi:10.1016/S0043-1354(02)00097-0info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309042012-10-10T00:00:00Z28
info:eu-repo/semantics/articleExperimental investigation of acoustically enhanced solute transport in porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Eric T. Vogler()Mathematical Formulationhttp://purl.tuc.gr/dl/dias/3D10F298-D271-4B31-9AC3-D6E64322FECC10.1029/2002GL015304Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2002Summarization: The effect of acoustic waves on the transport of a +conservative tracer in a water saturated column packed with +glass beads was investigated. It was observed from the +experimental data that the addition of acoustic waves, in the +frequency range between 60 to 245 Hz, to a steady +background pressure gradient, enhances solute transport +compared to the base case consisting of only a background +pressure gradient. Furthermore, it was found that the effective +velocity of the solute is approximately inversely proportional +to the frequency of the acoustic wave.Παρουσιάστηκε στο: Geophysical Research Letters peer-reviewedBibliographic citation: E.T. Vogler , C. V. Chrysikopoulos, "Experimental investigation of acoustically enhanced solute transport in porous media ", Geoph.Res. Let.,vol. 29,no. 15,pp.1710,2002.doi:10.1029/2002GL015304info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309062012-10-10T00:00:00Z28
info:eu-repo/semantics/articleEarly breakthrough of colloids and bacteriophage MS2 in a water-saturated sand columnΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Arturo A. Keller ()Sanya Sirivithayapakorn()http://purl.tuc.gr/dl/dias/818810E1-D836-40C7-9427-AD8677B6BFFF10.1029/2003WR002676 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: We conducted column-scale experiments to observe the effect of transport velocity +and colloid size on early breakthrough of free moving colloids, to relate previous +observations at the pore scale to a larger scale. The colloids used in these experiments +were bacteriophage MS2 (0.025 mm), and 0.05- and 3-mm spherical polystyrene beads, and +were compared with a conservative nonsorbing tracer (KCl). The results show that early +breakthrough of colloids increases with colloid size and water velocity, compared with the +tracer. These results are in line with our previous observations at the pore scale that +indicated that larger colloids are restricted by the size exclusion effect from sampling all +paths, and therefore they tend to disperse less and move in the faster streamlines, if they +are not filtered out. The measured macroscopic dispersion coefficient decreases with +colloid size due to the preferential flow paths, as observed at the pore scale. Dispersivity, +typically considered only a property of the medium, is in this case also a function of +colloid size, in particular at low Peclet numbers due to the size exclusion effect. Other +parameters for colloid transport, such as collector efficiency and colloid filtration rates, +were also estimated from the experimental breakthrough curve using a numerical fitting +routine. In general, we found that the estimated filtration parameters follow the clean bed +filtration model, although with a lower filtration efficiency overall.Παρουσιάστηκε στο: Water resource researchpeer-reviewedBibliographic citation: C. V. Chrysikopoulos,A. A. Keller ,S. Sirivithayapakorn , "Early breakthrough of colloids and bacteriophage MS2 in a water-saturated sand column", Wat.Resourc. Re.,vol.40,no. 8,2004.doi :10.1029/2003WR002676 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309082012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalysis of one-dimensional solute transport through porous media with spatially variable retardation factorΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Peter K. Kitanidis()Analytical small-perturbation solutionhttp://purl.tuc.gr/dl/dias/0C06BAC6-0CD9-417E-96F9-1E7B4F6AD0AE10.1029/WR026i003p00437Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1990Summarization: A closed-form analytical small-perturbation (or first-order) solution to the one-dimensional advection-dispersion equation with spatially variable retardation factor is derived to investigate the transport of sorbing but otherwise nonreacting solutes in hydraulically homogeneous but geochemically heterogeneous porous formations. The solution is developed for a third- or flux-type inlet boundary condition, which is applicable when considering resident (volume-averaged) solute concentrations, and a semi-infinite porous medium. For mathematical simplicity it is hypothesized that the sorption processes are based on linear equilibrium isotherms and that the local chemical equilibrium assumption is valid. The results from several simulations, compared with predictions based on the classical advection-dispersion equation with constant coefficients, indicate that at early times, spatially variable retardation affects the transport behavior of sorbing solutes. The zeroth moments corresponding to constant and variable retardation are not necessarily equal. The impact of spatially variable retardation increases with increasing Péclet number. + +Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,P. K. Kitanidis , P.V. Roberts, "Analysis of one-dimensional solute transport through porous media with spatially variable retardation factor" , Wa. resourc. researc.,vol. 26, no. 3 ,pp.437-446,1990.doi :10.1029/WR026i003p00437info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309102012-10-10T00:00:00Z28
info:eu-repo/semantics/articleOne-dimensional solute transport in porous media with partial well-to-well recirculation: Application to field experimentsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Paul V. Roberts()http://purl.tuc.gr/dl/dias/8F501104-DAEC-4549-B85B-4AD81266ACFF10.1029/WR026i006p01189Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1990Summarization: A solute transport model incorporating well-to-well recirculation was developed to facilitate the interpretation of pilot-scale field experiments conducted for the evaluation of a test zone chosen for in situ restoration studies of contaminated aquifers, where flow was induced by recirculation of the extracted fluid. A semianalytical and an approximate analytical solution were derived to the one-dimensional advection-dispersion equation for a semi-infinite medium under local equilibrium conditions, with a flux-type inlet boundary condition accounting for solute recirculation between the extraction-injection well pair. Solutions were obtained by taking Laplace transforms to the equations with respect to time and space. The semianalytical solution is presented in Laplace domain and requires numerical inversion, while the approximate analytical solution is given in terms of a series of simple nested convolution integrals which are easily determined by numerical integration techniques. The applicability of the well-to-well recirculation model is limited to field situations where the actual flow field is one dimensional or where an induced flow field is obtained such that the streamlines in the neighborhood of the monitoring wells are nearly parallel. However, the model is fully applicable to studies of solute transport through packed columns with recirculation under controlled laboratory conditions. + +Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,P. V. Roberts,P. K. Kitanidis , " One-dimensional solute transport in porous media with partial well-to-Well recirculation: Application to field experiments ", Wat. resour. res.,vol. 26, no. 6,pp.1189-1195,1990.doi:10.1029/WR026i006p01189info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309122012-10-10T00:00:00Z28
info:eu-repo/semantics/articleThree-dimensional analytical models of contaminant transport from nonaqueous phase liquid pool dissolution in saturated subsurface formationsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)http://purl.tuc.gr/dl/dias/6747F86D-5AAD-4B80-B52F-0E38E3F3F2A610.1029/94WR02780 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: Closed form analytical solutions are derived for three-dimensional transient contaminant transport resulting from dissolution of single-component nonaqueous phase liquid pools in saturated porous media. The solutions are suitable for homogeneous porous media with unidirectional interstitial velocity. The dissolved solute may undergo first-order decay or may sorb under local equilibrium conditions. The solutions are obtained for rectangular and elliptic as well as circular source geometries, assuming that the dissolution process is mass transfer limited, by applying Laplace and Fourier transforms. Although the solutions contain integral expressions, these integrals are easily evaluated numerically. These solutions are useful for verifying the accuracy of numerical solutions to more comprehensive models and for design and interpretation of experiments in laboratory-packed beds and possibly some field studies. The results of several simulations indicate that for short downstream distances, predictions of contaminant concentrations are sensitive to the source structure and orientation with respect to the direction of interstitial flow . + +Παρουσιάστηκε στο: Water Resources Research peer-reviewedΒιβλιογραφική αναφορά: C. V. Chrysikopoulos , " Three-δimensional αnalytical μodels of contaminant transport from nonaqueous phase liquid pool dissolution in saturated subsurface formations " , Wat. Res. Res.,vol.31,no.4,pp.1137-1146,1995. doi :10.1029/94WR02780 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309142012-10-10T00:00:00Z28
info:eu-repo/semantics/articleFate and transport of pathogens in a fractured aquifer in the Salento area, ItalyΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Costantino Masciopinto()Rosanna La Mantia()All the necessary parameters +required for accurate description of the aquifer were determined +by two tracer tests and 34 pumping tests. The spatial +variability of the mean fracture aperture was evaluated with +well-established geostatistical procedures. A numerical flow +model was developed to determine the distribution of the +piezometric heads throughout the aquifer for each realization +of the fracture aperture field. Furthermore, a finite +difference transport model was developed for the simulation +of pathogen migration in the fractures based on the piezometric +head distributions provided by the flow model. The +pathogen concentration data, collected at sampling locations +Well #1 and Well #2 during the winter of 2002 were +adequately fitted by the transport model. The fitted model +parameters include the longitudinal and transverse coefficients, +the initial inactivation rate, and the pathogen resistivity +coefficient.http://purl.tuc.gr/dl/dias/1DDF20B6-2C65-4AF8-8EFE-64E4D288F07610.1029/2006WR005643 Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: This study investigates the fate and transport of pathogens introduced by artificial +groundwater recharge at the Nardo` fractured aquifer in the Salento area, Italy. Wastewater +effluents from a municipal treatment plant with known pathogen concentrations were +injected into a sinkhole and the migration of pathogens in the fractured aquifer was +monitored at six sampling wells. The fate of pathogens was quantified by a mathematical +model describing colloid transport in a set of three-dimensional, parallel fractures with +spatially variable aperture. The number of parallel fractures and their average fracture +aperture were determined from appropriate field pumping and tracer tests. The aperture +spatial distribution was described by an experimental semivariogram developed from +available field data obtained from two tracer tests and 34 pumping tests. The experimental +results suggest that for the municipal wastewater injected into the Nardo` aquifer the +required most conservative set back distance for drinking wells should be over 8000 m.Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: Masciopinto, C., R. La Mantia, C. V. Chrysikopoulos, "Fate and transport of pathogens in a fractured aquifer in the Salento area, Italy ", Water Resources Research (Impact Factor: 3.71). 01/2008; 440(1). info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309162012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of biocolloids in water saturated columns packed with sand: Effect of grain size and pore water velocityΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasiliki I. Syngouna()http://purl.tuc.gr/dl/dias/9FFC4207-467D-4206-BD51-98C89BDA30A0 10.1016/j.jconhyd.2011.09.007Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: The main objective of this study was to evaluate the combined effects of grain size and pore +water velocity on the transport in water saturated porous media of three waterborne fecal indicator +organisms (Escherichia coli, MS2, and ΦX174) in laboratory-scale columns packed with +clean quartz sand. Three different grain sizes and three pore water velocities were examined +and the attachment behavior of Escherichia coli, MS2, and ΦX174 onto quartz sand was evaluated. +The mass recoveries of the biocolloids examined were shown to be highest for Escherichia +coli and lowest for MS2. However, no obvious relationships between mass recoveries and +water velocity or grain size could be established from the experimental results. The observed +mean dispersivity values for each sand grain size were smaller for bacteria than coliphages, but +higher for MS2 than ΦX174. The single collector removal and collision efficiencies were quantified +using the classical colloid filtration theory. Furthermore, theoretical collision efficiencies +were estimated only for E. coli by the Interaction-Force-Boundary-Layer, and Maxwell approximations. +Better agreement between the experimental and Maxwell theoretical collision efficiencies +were observed.Παρουσιάστηκε στο: Journal of Contaminant Hydrologypeer-reviewedBibliographic citation: V. I. Syngouna, C.V. Chrysikopoulos , "Transport of biocolloids in water saturated columns packed with sand: Effect of grain size and pore water velocity ", J. of Cont. Hydro.,vol.126 ,no.3-4 ,pp. 301-314,2011.doi : 10.1016/j.jconhyd.2011.09.007info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309182012-10-10T00:00:00Z28
info:eu-repo/semantics/articleCotransport of Pseudomonas putida and kaolinite particles through +water-saturated columns packed with glass beadΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Ioanna A. Vasiliadou ()http://purl.tuc.gr/dl/dias/35D47210-FD6B-4905-9F6A-8D5C3DDB90D2 10.1029/2010WR009560Published at: 2015-09-20eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: This study is focused on Pseudomonas putida bacteria transport in porous media in the +presence of suspended kaolinite clay particles. Experiments were performed with bacteria +and kaolinite particles separately to determine their individual transport characteristics in +water-saturated columns packed with glass beads. The results indicated that the mass +recovery of bacteria and clay particles decreased as the pore water velocity decreased. +Batch experiments were carried out to investigate the attachment of Pseudomonas putida +onto kaolinite particles. The attachment process was adequately described by a Langmuir +isotherm. Finally, bacteria and kaolinite particles were injected simultaneously into a +packed column in order to investigate their cotransport behavior. The experimental data +suggested that the presence of clay particles significantly inhibited the transport of bacteria +in water-saturated porous media. The observed reduction of Pseudomonas putida recovery +in the column outflow was attributed to bacteria attachment onto kaolinite particles, which +were retained onto the solid matrix of the column. A mathematical model was developed to +describe the transport of bacteria in the presence of suspended clay particles in onedimensional +water-saturated porous media. Model simulations were in good agreement with +the experimental results.Παρουσιάστηκε στο: Water resource researchpeer-reviewedΒιβλιογραφική αναφορά: I. A. Vasiliadou, C. V. Chrysikopoulos, "Cotransport of Pseudomonas putida and kaolinite particles through water-saturated columns packed with glass beads " , Waτ. Res.Resea., vol.47,no. 2,2011.doi : 10.1029/2010WR009560info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleBiosorption of Cu 2+ and Ni 2+ by Arthrospira platensis with different biochemical compositionsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Dimitris Georgakakis()Hüseyin Bozkurt()Abuzer Çelekli()Dimitris Mitrogiannis()Giorgos Markou()This study employed for the first time carbohydrate-enriched +dry and living biomass of A. platensis as biosorbent for copper or +nickel ions. The results show that the various biomass compositions +of A. platensis obtained from cultivation under different phosphorus +concentrations had a diverse effect on Cu2+ and Ni2+ +biosorption capacity. The experiments with dry biomass show that +the accumulation of carbohydrates slightly improved the biosorption +capacity for nickel, but significantly improved the biosorption +capacity for copper. In contrast, the experiments with living biomass +show that the accumulation of carbohydrates decreased the +biosorption capacity for both metals. A. platensis showed greater +biosorption capacity for Ni2+ than for Cu2+. For all biomass types +investigated, the pseudo-second order kinetics model fitted better +the experimental data, but underestimated slightly the early time +data (first 15 min). It was observed that the intra-particle diffusion +was not a limited process, and that intra-particle diffusion model +described well the experimental data for the first 15 min. Also, it +was observed that the Freundlich model represents better the +biosorption onto living biomass due to the presence of possible +bioaccumulation, whereas, the Langmuir model fits better the +experimental data with dry biomass. The results show that the +main sorption mechanisms involved were ion exchange and +complexation. In general, the carbohydrate-enriched biomass contributed +to a weak ion-exchange sorption.http://purl.tuc.gr/dl/dias/AF1459A4-47B3-49DA-AD36-57B6AF50D31710.1016/j.cej.2014.08.037 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2015Summarization: This study is focused on copper and nickel biosorption onto Arthrospira platensis biomass of different biochemical +compositions. Four types of A. platensis were employed, namely: (1) typical dry biomass (TDB), +(2) carbohydrate-enriched dry biomass (CDB), (3) typical living biomass (TLB), and (4) carbohydrateenriched +living biomass (CLB). The CDB was produced using a cultivation mode where phosphorus was +the limiting nutrient. The biosorption of both metals investigated was shown to be very fast. Most of +the metal sorption capacity of the biomass was filled within 15–30 min, and equilibrium was achieved +within 30–60 min. The cultivation conditions (nutrient repletion or depletion) did not affect the pattern +of copper and nickel biosorption kinetics. The capacity for copper ions biosorption was significantly positively +affected by the accumulation of carbohydrates in the dry biomass, but was negatively affected by +the accumulation of carbohydrates in the living biomass. For nickel ions, the alteration of biomass had a +little but positive effect on the dry biomass, and a greater negative effect (about 30% lower biosorption +capacity) on the living biomass. Living biomass exhibited a higher biosorption capacity than dry biomass, +for both metals. The biosorption of copper and nickel onto A. platensis biomass occurred mainly due to the +mechanisms of ion exchange and complexation, and less to physical adsorption.Παρουσιάστηκε στο: Chemical Engineering Journalpeer-reviewedBibliographic citation: G.Markou , D. Mitrogiannis , A. Çelekli , H. Bozkurt , D. Georgakakis ,C. V. Chrysikopoulos , "Biosorption of Cu 2+ and Ni 2+ by Arthrospira platensis with different biochemical compositions "Che.Engin. J.,vol. 259, pp. 806–813,2015.doi 10.1016/j.cej.2014.08.037 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309732012-10-10T00:00:00Z28
info:eu-repo/semantics/articleEffect of gravity on colloid transport through water-saturated columns packed with glass beads: modeling and experimentsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasiliki I. Syngouna()http://purl.tuc.gr/dl/dias/E1EF74A3-9A9D-40EE-846D-2FA0D982DE0010.1021/es501295nPublished at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: The role of gravitational force on colloid +transport in water-saturated columns packed with glass beads +was investigated. Transport experiments were performed with +colloids (clays: kaolinite KGa-1b, montmorillonite STx-1b). +The packed columns were placed in various orientations +(horizontal, vertical, and diagonal) and a steady flow rate of Q += 1.5 mL/min was applied in both up-flow and down-flow +modes. All experiments were conducted under electrostatically +unfavorable conditions. The experimental data were fitted with a newly developed, analytical, one-dimensional, colloid transport +model. The effect of gravity is incorporated in the mathematical model by combining the interstitial velocity (advection) with the +settling velocity (gravity effect). The results revealed that flow direction influences colloid transport in porous media. The rate of +particle deposition was shown to be greater for up-flow than for down-flow direction, suggesting that gravity was a significant +driving force for colloid depositionΠαρουσιάστηκε στο: Environmental Science and Technology peer-reviewedBibliographic citation: C. V. Chrysikopoulos, . V. I. Syngouna, "Effect of gravity on colloid transport through water-saturated columns packed with glass beads: Modeling and experiments " , Envir. Scien. and Tech.,vol. 48 ,no. 12,2014.doi :10.1021/es501295ninfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309752012-10-10T00:00:00Z28
info:eu-repo/semantics/articleExperimental investigation of acoustically enhanced colloid transport in water-saturated packed columnsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)J. Matthew Thomas()http://purl.tuc.gr/dl/dias/7BBE3DCD-1C65-46E0-9DF6-CEE442A320FA10.1016/j.jcis.2006.12.062 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2007Summarization: The effects of acoustic wave propagation on the transport of colloids in saturated porous media were investigated by injecting Uranine (conservative +tracer) as well as blue and red polystyrene microspheres (colloids of different diameters; 0.10 and 0.028 μm, respectively) into a column +packed with glass beads. Experiments were conducted by maintaining the acoustic pressure at the influent at 23.0 kPa with acoustic frequencies +ranging from 30 to 150 Hz. The experimental results suggested that colloid size did not affect the forward and reverse attachment rate coefficients. +The acoustic pressure caused an increase in the effective interstitial velocity at all frequencies for the conservative tracer and colloids of both sizes, +with maximum increase at 30 Hz. Furthermore, acoustics enhanced the dispersion process at all frequencies, with a maximum at 30 Hz. +© 2007 Elsevier Inc. All rights reserved.Παρουσιάστηκε στο: Journal of Colloid and Interface Sciencepeer-reviewedBibliographic citation: J. M. Thomas , C. V. Chrysikopoulos , "Experimental investigation of acoustically enhanced colloid transport in water-saturated packed columns " , J. of Col. and Interf. Scienc. ,vol. 308 ,no. 1, pp. 200-207,2007.doi :10.1016/j.jcis.2006.12.062 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleNon-invasive in situ concentration determination of fluorescent or color tracers and pollutants in a glass pore network modeΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios E. Katzourakis()Christina C. Plega()http://purl.tuc.gr/dl/dias/6596003E-C7C7-4186-A7C5-6B4AC957A7F210.1016/j.jhazmat.2011.10.042 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: This study presents a non-invasive imaging method for in situ concentration determination of conservative +tracers and pollutants in a two-dimensional glass pore network model. The method presented is +an extension to the work by Huang et al. [1], and Thomas and Chysikopoulos [2]. The method consists of +fabricating the glass pore network model using a photolithography technique, conducting flowthrough +contaminant transport experiments, taking digital photographs at various times of the two-dimensional +pore network under ultraviolet or visible light source, and determining the spatially-distributed pollutant +concentrations by measuring the color intensity in the photographs with comparative image +analysis. Therefore, the method is limited to fluorescent or colored pollutants and tracers. The method +was successfully employed to in situ concentration determination of uranine and red color tracers.Παρουσιάστηκε στο: Journal of hazardous materialspeer-reviewedBibliographic citation: C. V. Chrysikopoulos, Ca C. Plega, V. E. Katzourakis , "Non-invasive in situ concentration determination of fluorescent or color tracers and pollutants in a glass pore network model " J. of hazar. materia. ,vol.198, pp. 299-306,2011.doi:10.1016/j.jhazmat.2011.10.042 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:309932012-10-10T00:00:00Z28
info:eu-repo/semantics/articleGeneralized TaylorAris moment analysis of the transport of sorbing solutes through porous media with spatiallyperiodic retardation factorΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Paul V. Roberts()Peter K. Kitanidis()Rate-limited sorbing solute transport,Effective macroscopic coefficientshttp://purl.tuc.gr/dl/dias/CC2244A6-14C0-4741-9EB2-6F3B42C2521E10.1007/BF00647395 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1992Summarization: Taylor-Aris dispersion theory, as generalized by Brenner, is employed to investigate the macroscopic behavior of sorbing solute transport in a three-dimensional, hydraulically homogeneous porous medium under steady, unidirectional flow. The porous medium is considered to possess spatially periodic geochemical characteristics in all three directions, where the spatial periods define a rectangular parallelepiped or a unit-element. The spatially-variable geochemical parameters of the solid matrix are incorporated into the transport equation by a spatially-periodic distribution coefficient and consequently a spatially-periodic retardation factor. Expressions for the effective or large-time coefficients governing the macroscopic solute transport are derived for solute sorbing according to a linear equilibrium isotherm as well as for the case of a first-order kinetic sorption relationship. The results indicate that for the case of a chemical equilibrium sorption isotherm the longitudinal macrodispersion incorporates a second term that accounts for the eflect of averaging the distribution coefficient over the volume of a unit element. Furthermore, for the case of a kinetic sorption relation, the longitudinal macrodispersion expression includes a third term that accounts for the effect of the first-order sorption rate. Therefore, increased solute spreading is expected if the local chemical equilibrium assumption is not valid. The derived expressions of the apparent parameters governing the macroscopic solute transport under local equilibrium conditions agreed reasonably with the results of numerical computations using particle tracking techniques. + +Kluwer Academic PublishersΠαρουσιάστηκε στο: Transport in Porous Media peer-reviewedBibliographic citation: C. V. Chrysikopoulos ,P. K. Kitanidis, P.V. Roberts ,"Generalized TaylorAris moment analysis of the transport of sorbing solutes through porous media with spatiallyperiodic retardation factor ", Transp. in Po.Media ,vol. 7 ,no.2 , pp.163-185, 1992.doi:10.1007/BF00647395 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:310312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of pseudomonas putida in a 3-D bench scale experimental aquiferΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios E. Katzourakis()Ioanna A. Vasiliadou()Vasiliki I. Syngouna()http://purl.tuc.gr/dl/dias/5BAF6094-BD73-4BD3-AB12-B9B9E0A3F5C810.1007/s11242-012-0015-z Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2012Summarization: This study is focused on the transport of Pseudomonas (P.) putida bacterial cells +in a 3-D model aquifer. The pilot-scale aquifer consisted of a rectangular glass tank with +internal dimensions: 120 cm length, 48 cm width, and 50 cm height, carefully packed with +well-characterized quartz sand. The P. putida decay was adequately represented by a firstorder +model. Transport experiments with a conservative tracer and P. putida were conducted +to characterize the aquifer and to investigate the bacterial behavior during transport in water +saturated porous media. A 3-D, finite-difference numerical model for bacterial transport in +saturated, homogeneous porous media was developed and was used to successfully fit the +experimental data. Furthermore, theoretical interaction energy calculations suggested that +the extended-DLVO theory seems to predict bacteria attachment onto the aquifer sand better +than the classical DLVO theory.Παρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C.V. Chrysikopoulos , V. I. Syngouna ,I. A. Vasiliadou ,V. E. Katzourakis, "Transport of pseudomonas putida in a 3-D bench scale experimental aquifer " Transp. in Por Media , vol. 94 ,no.3, pp. 617-642 ,2012.doi:10.1007/s11242-012-0015-z info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:310512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleCotransport of clay colloids and viruses in water saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasiliki Syngouna ()http://purl.tuc.gr/dl/dias/B9212025-20C5-4AE6-8DA2-539E98EE68BD10.1016/j.colsurfa.2012.10.018Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: This study examines the cotransport of clay colloids and viruses in laboratory packed columns. Bacteriophages +MS2 and X174 were used as model viruses, kaolinite (kGa-1b) and montmorillonite (STx-1b) +as model clay colloids, and glass beads as model packing material. The combined and synergistic effects +of clay colloids and pore water velocity on virus transport and retention in porous media were examined +at three pore water velocities (0.38, 0.74, and 1.21 cm/min). The results indicated that the mass recovery +of viruses and clay colloids decreased as the pore water velocity decreased; whereas, for the cotransport +experiments no clear trend was observed. Temporal moments of the breakthrough concentrations suggested +that the presence of clays significantly influenced virus transport and irreversible deposition onto +glass beads. Mass recovery values for both viruses, calculated based on total virus concentration in the +effluent, were reduced compared to those in the absence of clays. The transport of both suspended and +attached onto suspended clay-particles viruses was retarded, compared to the tracer, only at the highest +pore water velocity. Moreover both clay colloids were shown to hinder virus transport at the highest pore +water velocity. ElsevierΠαρουσιάστηκε στο: Colloids and Surfaces A Physicochemical and Engineering Aspects peer-reviewedBibliographic citation: V. I. Syngouna, C. V. Chrysikopoulos , "Cotransport of clay colloids and viruses in water saturated porous media " , Coll. and Surf. a Physicoche. and Engin. Aspec. vol.416 ,no.1 ,pp. 56-65, 2013.doi:10.1016/j.colsurfa.2012.10.018info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:310712012-10-10T00:00:00Z28
info:eu-repo/semantics/articleModeling colloid transport and deposition in saturated fracturesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Assem Abdel-Salam()http://purl.tuc.gr/dl/dias/FA32814D-7592-44DE-8005-44A5613824C310.1016/S0927-7757(96)03979-9 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1997Summarization: A model is developed to describe the transport of colloids in a saturated fracture with a spatially variable aperture, accounting for colloid deposition onto fracture surfaces under various physicochemical conditions. The fracture plane is partitioned into unit elements with different apertures generated stochastically from a log-normal distribution. The model also accounts for colloid size exclusion from fracture elements with small apertures. Both equilibrium and kinetic colloid deposition onto fracture surfaces are investigated. Colloid surface exclusion is incorporated in the dynamics of kinetic deposition. The impact of deposited colloids on further colloid deposition is described by either a linear or a non-linear blocking function. The resulting system of governing partial differential equations is solved numerically using the fully implicit finite difference method. Model simulations illustrate the presence of preferential colloid transport in the fracture plane. It is shown that size exclusion increases the dispersion of colloids and leads to earlier breakthrough, especially for large-size particles. Furthermore, it is demonstrated that surface exclusion enhances colloid transport, and the assumption of clean-bed media may underestimate liquid-phase colloid concentrations. + +Presented on: Colloids and Surfaces A: Physicochemical and Engineering Aspectspeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,A. A.Salam , "Modeling colloid transport and deposition in saturated fractures ", Col.and Surf. a Physico. and Engin. Aspect. ,vol.121 ,no.2 pp. 189-202,1997.doi :10.1016/S0927-7757(96)03979-9 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:310912012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMeasuring and modeling the dissolution of nonideally shaped dense nonaqueous phase liquid pools in saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Thomas C. Harmon()Brian K. Dela Barre()Physical Aquifer Model System and Sampling Protocols,DNAPL Pool Dissolution Theoryhttp://purl.tuc.gr/dl/dias/C60C6E4F-AE21-44A9-99F5-4BF898A2DC6510.1029/2001WR000444Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2002Summarization: A three-dimensional physical aquifer model was used to study the dissolution of a +dense nonaqueous phase liquid (DNAPL) pool. The model aquifer comprised a packing of +homogeneous, medium-sized sand and conveyed steady, unidirectional flow. +Tetrachloroethene (PCE) pools were introduced within model aquifers atop glass- and +clay-lined aquifer bottoms. Transient breakthrough at an interstitial velocity of 7.2 cm/h, +and three-dimensional steady state concentration distributions at velocities ranging from +0.4 to 7.2 cm/h were monitored over periods of 59 and 71 days for the glass- and claybottom +experiments, respectively. Pool-averaged mass transfer coefficients were obtained +from the observations via a single-parameter fit using an analytical model formulated with +a second type boundary condition to describe pool dissolution [Chrysikopoulos, 1995]. +Other model parameters (interstitial velocity, longitudinal and transverse dispersion +coefficients, and pool geometry) were estimated independently. Simulated and observed +dissolution behavior agreed well, except for locations relatively close to the pool or the +glass-bottom plate. Estimated mass transfer coefficients ranged from 0.15 to 0.22 cm/h, +increasing weakly with velocity toward a limiting value. Pool mass depletions of 31 and +43% for the glass- and clay-bottom experiments failed to produce observable changes in +the plumes and suggested that changes in pool interfacial area over the period of the +experiment were negligible. Dimensionless mass transfer behavior was quantified using a +modified Sherwood number (Sh*). Observed Sh* values were found to be about 2–3 +times greater than values predicted by an existing theoretical mass transfer correlation, +and 3–4 times greater than those estimated previously for an ideally configured +trichloroethene (TCE) pool (circular and smooth). It appeared that the analytical model’s +failure to account for pore-scale pool-water interfacial characteristics and larger scale pool +shape irregularities biased the Sh* estimates toward greater valuesΠαρουσιάστηκε στο: Water Resources Research peer-reviewedBibliographic citation: B. K. Dela Barre, T. C. Harmon,C. V. Chrysikopoulos, "Measuring and modeling the dissolution of nonideally shaped dense nonaqueous phase liquid pools in saturated porous media " , Wat. Resour.Rese.,vol. 38 ,no.8 pp. 1133,2002.doi :10.1029/2001WR000444info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:311112012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMacrodispersion of sorbing solutes in heterogeneous porous formations with spatially periodic retardation factor and velocity fieldΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Peter K. Kitanidis()http://purl.tuc.gr/dl/dias/34B0EDC9-7777-408B-9E34-ADA8D92B812710.1029/92WR00010 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1992Summarization: Expressions for the macroscopic velocity vector and dispersion tensor for sorbing solute transport in heterogeneous porous formations whose hydrogeologic properties are repeated at intervals were derived via Taylor-Aris-Brenner moment analysis. An idealized three-dimensional porous formation of infinite domain with spatially periodic retardation factor, velocity field, and microdispersion coefficients in all three directions was considered. Sorption was assumed to be governed by a linear equilibrium isotherm under local chemical equilibrium conditions. The analytical expressions presented are based on a perturbation method where all of the spatially periodic parameters employed were assumed to have ``small'' fluctuations. It was shown that the effective velocity vector is given by the volume-averaged interstitial velocity vector divided by the volume-averaged retardation factor, and the effective dispersion dyadic (second-order tensor) is given by the volume-averaged microdispersion dyadic divided by the volume-averaged dimensionless retardation factor plus a dyadic expressing the increase in solute spreading caused by the spatial variability of the parameters. + +Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: C. V. Chrysikopoulos ,P. K. Kitanidis,.P. V. Roberts ,"Macrodispersion of sorbing solutes in heterogeneous porous formations with spatially periodic retardation factor and velocity field ", Wat.resour. rese., vol. 28 ,no.6 ,pp.1517-1529, 1992.doi:10.1029/92WR00010 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:311512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVirus fate and transport during artificial recharge with recycled waterΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Robert Anders()http://purl.tuc.gr/dl/dias/9BDE8C30-C8A4-4699-9A00-CB1A38F74A8C10.1029/2004WR003419 Published at: 2015-09-21eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2005Summarization: A field-scale experiment was conducted at a research site using bacterial viruses +(bacteriophage) MS2 and PRD1 as surrogates for human viruses, bromide as a +conservative tracer, and tertiary-treated municipal wastewater (recycled water) to +investigate the fate and transport of viruses during artificial recharge. Observed virus +concentrations were fitted using a mathematical model that simulates virus transport in +one-dimensional, homogeneous, water-saturated porous media accounting for virus +sorption (or filtration), virus inactivation, and time-dependent source concentration. The +fitted time-dependent clogging rate constants were used to estimate the collision +efficiencies for bacteriophage MS2 and PRD1 during vertical fully saturated flow. +Furthermore, the corresponding time-dependent collision efficiencies for both +bacteriophage asymptotically reached similar values at the various sampling locations. +These results can be used to develop an optimal management scenario to maximize the +amount of recycled water that can be applied to the spreading grounds while still +maintaining favorable attachment conditions for virus removal.Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: R. Anders,C. V. Chrysikopoulos, "Virus fate and transport during artificial recharge with recycled wate", Wa. Res. Resear. ,vol.10 , no.41, 2005. doi :10.1029/2004WR003419 info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:313312012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMathematical modeling of colloid and virus cotransport in porous media: Application to experimental dataΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios E. Katzourakis()http://purl.tuc.gr/dl/dias/AFF1F989-E0C3-47C5-A986-F5D4C0A0DEB110.1016/j.advwatres.2014.03.001Published at: 2015-09-22eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: A conceptual mathematical model was developed to describe the simultaneous transport (cotransport) of +viruses and colloids in three-dimensional, water saturated, homogeneous porous media with uniform +flow. The model accounts for the migration of individual virus and colloid particles as well as viruses +attached onto colloids. Viruses can be suspended in the aqueous phase, attached onto suspended colloids +and the solid matrix, and attached onto colloids previously attached on the solid matrix. Colloids can be +suspended in the aqueous phase or attached on the solid matrix. Viruses in all four phases (suspended in +the aqueous phase, attached onto suspended colloid particles, attached on the solid matrix, and attached +onto colloids previously attached on the solid matrix) may undergo inactivation with different inactivation +coefficients. The governing coupled partial differential equations were solved numerically using +finite difference methods, which were implemented explicitly or implicitly so that both stability and +speed factors were satisfiedΠαρουσιάστηκε στο: Advances in Water Resourcespeer-reviewedBibliographic citation: V. E. Katzourakis , C. V. Chrysikopoulos , Mathematical modeling of colloid and virus cotransport in porous media: Application to experimental data " Advanc. in Wat. Resour.,vol. 68, pp. 62–73,2014 .doi :10.1016/j.advwatres.2014.03.001info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:313522012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDegradation of PAHs by high frequency ultrasoundΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Hrissi K. Karapanagioti()Ioannis D. Manariotis()http://purl.tuc.gr/dl/dias/EAFA24A9-0477-490D-B663-170E4CCC5EC910.1016/j.watres.2011.02.009Published at: 2015-09-22eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: Polycyclic aromatic hydrocarbons (PAHs) are persistent organic compounds, which have +been reported in the literature to efficiently degrade at low (e.g. 20 kHz) and moderate (e.g. +506 kHz) ultrasound frequencies. The present study focuses on degradation of naphthalene, +phenanthrene, and pyrene by ultrasound at three different relatively high frequencies +(i.e. 582, 862, and 1142 kHz). The experimental results indicate that for all three frequencies +and power inputs 133 W phenanthrene degrades to concentrations lower than our +experimental detection limit (<1 mg/L). Phenanthrene degrades significantly faster at +582 kHz than at 862 and 1142 kHz. For all three frequencies, the degradation rates per unit +mass are similar for naphthalene and phenanthrene and lower for pyrene. Furthermore, +naphthalene degradation requires less energy than phenanthrene, which requires less +energy than pyrene under the same conditions. No hexane-extractable metabolites were +identified in the solutions.ElsevierΠαρουσιάστηκε στο: Water Research peer-reviewedBibliographic citation: I. D. Manariotis , H.K. Karapanagioti , C.V. Chrysikopoulos , "Degradation of pahs by high frequency ultrasound ", wat. resear .,vol. 45, no.8, pp. 2587- 2594,2011.doi :10.1016/j.watres.2011.02.009info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314112012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectTransport of TiO2 nanoparticles through water saturated packed columnsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)I.D. Manariotis()D. Vassilopoulos()http://purl.tuc.gr/dl/dias/FC6D9680-4723-4C28-9EA4-003A9D890248http://www.researchgate.net/publication/262335999_Transport_of_TiO2_nanoparticles_through_water_saturated_packed_columnsPublished at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: In this work, various TiO2 NP suspensions were prepared using different preparation techniques. +Rutile-anatase and anatase TiO2 NPs were used for the preparation of aquatic NP suspensions at +various concentrations. Measurements of particles size and zeta potential were performed in order +to investigate the effect of sonication and aging on nanoparticle agglomerates. Finally, transport +experiments of TiO2 NP solutions in packed columns were performed for varying TiO2 +concentrations. The concentration and size of the NPs were measured at the outlet of the column. It +was observed that a substantial percentage of the NPs injected into the experimental column were +retained in the column packing.Παρουσιάστηκε στο: 12th International Conference on Protection and Restoration of the Environment, At Skiathos GreeceBibliographic citation: V. Sygouni,D. Vassilopoulos , I.D. Manariotis , C.V. Chrysikopoulos .(2014). .Transport of TiO2 nanoparticles through water saturated packed columns .Presented at 2th International Conference on Protection and Restoration of the Environment At Skiathos Greece. [onlive].Available :http://www.researchgate.net/publication/262335999_Transport_of_TiO2_nanoparticles_through_water_saturated_packed_columnsfull paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314512012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVirus inactivation by high frequency ultrasound in combination with visible lightΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Ioannis D. Manariotis()Vasiliki I. Syngouna()http://purl.tuc.gr/dl/dias/964270B5-4ECC-4F30-A47F-77EB8E8FA35910.1016/j.colsurfb.2013.01.038Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2013Summarization: In this study, the effects of high frequency ultrasound (US) and visible light (VL) on virus inactivation +were investigated. The bacteriophages X174 and MS2 were used as model viruses. The experiments +were performed at room temperature at three different, relatively high US frequencies (i.e., 582, 862, and +1142 kHz) with and without the use of VL, and different initial virus concentrations. The two bacteriophages +were diluted in phosphate-buffered saline solution to a titer of 103–104 pfu/mL. The experimental +virus inactivation data were satisfactorily represented by a simple first-order kinetic expression. Virus +inactivation was faster at the lower frequencies (582 and 862 kHz). Furthermore, it was observed that +MS2 was inactivated faster than X174. The simultaneous use of US and VL was found to be more effective +than US alone for MS2 inactivation, indicating the existence of a synergistic effectElsevierPresented on: Colloids and Surfaces B: Biointerfacespeer-reviewedBibliographic citation: C. V. Chrysikopoulos, I.D. Manariotis, V. I. Syngouna, "Virus inactivation by high frequency ultrasound in combination with visible light ",Col. and Surf. B: Biointerf., vol. 107 ,pp. 174– 179,2013.doi: 10.1016/j.colsurfb.2013.01.038info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314722012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of Viruses Through Saturated and Unsaturated Columns Packed with SandΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios E. Katzourakis()Ioanna A. Vasiliadou()Vasiliki I. Syngouna()Bacteria–Quartz Sand Interactionshttp://purl.tuc.gr/dl/dias/DB659C03-8621-417A-A83E-83B7AE8670080.1007/s11242-008-9239-3Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2008Summarization: This study is focused on the transport of Pseudomonas (P.) putida bacterial cells +in a 3-D model aquifer. The pilot-scale aquifer consisted of a rectangular glass tank with +internal dimensions: 120 cm length, 48 cm width, and 50 cm height, carefully packed with +well-characterized quartz sand. The P. putida decay was adequately represented by a firstorder +model. Transport experiments with a conservative tracer and P. putida were conducted +to characterize the aquifer and to investigate the bacterial behavior during transport in water +saturated porous media. A 3-D, finite-difference numerical model for bacterial transport in +saturated, homogeneous porous media was developed and was used to successfully fit the +experimental data. Furthermore, theoretical interaction energy calculations suggested that +the extended-DLVO theory seems to predict bacteria attachment onto the aquifer sand better +than the classical DLVO theory.SpringerΠαρουσιάστηκε στο: Transport in Porous Mediapeer-reviewedBibliographic citation: C. V. Chrysikopoulos , V.I. Syngouna ,I. A. Vasiliadou ,V. E. Katzourakis , "Transport of Pseudomonas putida in a 3-D Bench Scale +Experimental Aquifer ",Trans. in Por. Media ,vol.76 ,no.1 ,pp. 121-138,2008. doi:0.1007/s11242-008-9239-3info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314742012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVirus attachment onto quartz sand: Role of grain size and temperatureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Andriana F. Aravantinou()http://purl.tuc.gr/dl/dias/CEA5AFED-FC37-420D-9DF9-2E1E15C7A1F610.1016/j.jece.2014.01.025Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: Virus transport in groundwater is controlled mainly by attachment onto the solid matrix and +inactivation. Therefore, understanding how the various parameters affect virus attachment can lead to +improved virus transport predictions and better health risk evaluations. This study is focused on the +attachment of viruses onto quartz sand under batch experimental conditions. The bacteriophages +FX174 and MS2 were used as model viruses. Three different sand grain sizes were employed for the +static and dynamic experiments. The batch sorption experiments were performed under static +conditions at 4 8C and 20 8C and dynamic conditions at 4 8C. The experimental data were adequately +described by the Freundlich isotherm. It was shown that temperature significantly affects virus +attachment under static conditions. The attachment of both MS2 and FX174 onto quartz sand was +greater at 20 8C than 4 8C. Higher virus attachment was observed under dynamic than static conditions, +and in all cases, the affinity of MS2 for quartz sand was greater than that of FX174. Furthermore, in most +of the cases considered, bacteriophage attachment was shown to decrease with increasing quartz sand +size.Παρουσιάστηκε στο: Journal of Environmental Chemical Engineeringpeer-reviewedBibliographic citation: C. V. Chrysikopoulos , A. F. Aravantinou , "Virus attachment onto quartz sand: Role of grain size and temperature " ,J. of Envir. Ch. Eng.,vol. 2 ,no.2 ,pp. 796–801,2014.doi:10.1016/j.jece.2014.01.025info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314762012-10-10T00:00:00Z28
info:eu-repo/semantics/articleNumerical modeling of three-dimensional contaminant migration from dissolution of multicomponent NAPL pools in saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)K. Y. Lee()http://purl.tuc.gr/dl/dias/3A081F23-9B45-4538-82E1-D39F065BE7BF10.1007/BF00768737Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1995Summarization: A three-dimensional model for contaminant +transport resulting from the dissolution of multicomponent +nonaqueous phase liquid (NAPL) pools in threedimensional +saturated subsurface formations is developed. +The solution is obtained numerically by a finite-difference +scheme, and it is suitable for homogeneous porous media +with unidirectional interstitial velocity. Each dissolved +component may undergo first-order decay and may sorb +under local equilibrium conditions. It is also assumed that +the dissolution process is mass transfer limited. The nonaqueous +phase activity coefficients of the NAPL pool +components are evaluated at each time step. The model +behavior is illustrated through a synthetic example with +a NAPL pool consisting of a mixture of TCA (1,1,2- +trichloroethane) and TCE (trichloroethylene). The numerical +solution presented in this work is in good agreement +with a recently developed analytical solution for the special +case of a single component NAPL pool. The results +indicate the importance of accounting for the necessary +changes in the organic phase activity which significantly +affects the equilibrium aqueous solubilityΠαρουσιάστηκε στο: Environmental Geologypeer-reviewedBibliographic citation: K. Y. Lee , C. V. Chrysikopoulos, "Numerical modeling of three-dimensional contaminant migration from dissolution of multicomponent NAPL pools +in saturated porous media " ,Environ. Geo. ,vol. 26,no.3, pp.157-165,1995.doi:10.1007/BF00768737info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314782012-10-10T00:00:00Z28
info:eu-repo/semantics/articleBootstrap estimation of the mass transfer coefficient of a dissolving nonaqueous phase liquid pool in porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Pin-Yi Hsuan()Marios M. Fyrillas()Estimation of Mass Transfer Coefficients,NAPL Pool Dissolution and Contaminant Transporthttp://purl.tuc.gr/dl/dias/4614432E-42FC-434B-B4D9-6EA39F8BD5E110.1029/2001WR000661Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2002Summarization: A new method for confidence interval estimation of mass transfer coefficients suitable for +dissolving dense nonaqueous phase liquid pools in homogeneous, water-saturated porous media is +developed. The method is based on the bootstrap resampling technique in conjunction with a least +squares regression procedure. The method is successfully applied to experimental data collected +from bench scale trichloroethylene pool dissolution experiments. INDEX TERMS: 1829 +Hydrology: Groundwater hydrology; 1831 Hydrology: Groundwater quality; 1832 Hydrology: +Groundwater transport; KEYWORDS: NAPL pool dissolution, mass transfer coefficient, bootstrap, +estimation, contaminant transportΠαρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: M. M. Fyrillas ,C. V. Chrysikopoulos , P.Y. Hsuan, " Bootstrap estimation of the mass transfer coefficient of a dissolving nonaqueous phase +liquid pool in porous media " Wat Resour Resear, Vol. 38, No. 3, pp.1026 , 2002.doi :10.1029/2001WR000661info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314802012-10-10T00:00:00Z28
info:eu-repo/semantics/articleMass transfer correlations for nonaqueous phase liquid pool dissolution in saturated porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Tae-Joon Kim()Development of Mass Transfer Correlationshttp://purl.tuc.gr/dl/dias/03630E29-C6AF-44A3-83A3-5B7EB82852CC 10.1029/1998WR900053Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1999Summarization: Correlations describing the rate of interface mass transfer from singlecomponent +nonaqueous phase liquid (NAPL) pools in saturated subsurface formations are +developed. A three-dimensional contaminant transport model is employed to obtain +overall mass transfer coefficients computed from concentration gradients at the NAPLwater +interface. The model assumes that the porous medium is homogeneous, the +interstitial fluid velocity is steady, and the dissolved solute may sorb under local +equilibrium conditions. Furthermore, it is assumed that the dissolved concentration along +the NAPL-water interface is equal to the solubility concentration. Power law correlations +relate the overall Sherwood number to the appropriate overall Peclet numbers. Both +rectangular and elliptic/circular source geometries are considered. The proposed +relationships are fitted to numerically determined mass transfer coefficients, and the +correlation coefficients are determined by nonlinear least squares regression. Good +agreement between predicted and available experimentally determined overall mass +transfer coefficients is observedΠαρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: T.J. Kim , C.V. Chrysikopoulos , "Mass transfer correlations for nonaqueous phase liquid pool dissolution in saturated porous media " ,Wat. Resour.Res. ,vol. 35,no.2,pp.449-459, 1999.doi: 10.1029/1998WR900053info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314822012-10-10T00:00:00Z28
info:eu-repo/semantics/articleRemoval of mercury from aqueous solutions by malt spent rootletsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios A. Anagnostopoulos()Ioannis D. Manariotis()Hrissi K. Karapanagioti()http://purl.tuc.gr/dl/dias/E1EBDB72-07D0-4CDB-86A9-CF2E6AD1571310.1016/j.cej.2012.09.074Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2012Summarization: Mercury poses a severe threat to environment due to its toxicity, even at low concentrations. Biosorption +is a promising, low cost, and environmentally friendly clean up technique. Malt spent rootlets (MSR), a +brewery by-product, were used as sorbents for the removal of mercury from aquatic systems. The effect +of the solution pH, contact time between sorbent, solid to liquid ratio, and initial mercury concentration +on mercury removal were investigated experimentally. It was found that the optimum pH for the mercury +sorption onto MSR was approximately 5. Sorption kinetic experiments revealed that mercury sorption +is a relatively rapid process, where film diffusion and intra-particle diffusion play an important role. +The kinetic data were successfully described by both the pseudo-second-order and Elovich models. The +isotherm data were adequately fitted by the Langmuir model determining a monolayer capacity qmax +equal to 50 mg/g and suggesting a functional group-limited sorption process. MSR were capable of +removing significant amounts of mercury, mainly due to the carboxyl and phosphonate groups of their +surfaces.Παρουσιάστηκε στο: The Chemical Engineering Journalpeer-reviewedBibliographic citation: V. A. Anagnostopoulos , I. D. Manariotis , H. K. Karapanagioti , +C.V. Chrysikopoulos , "Removal of mercury from aqueous solutions by malt spent rootlets " ,Chemi. Engin. J. ,vol. 213 ,pp. 135–141,2012.doi:10.1016/j.cej.2012.09.074info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314842012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAttachment of Pseudomonas putida onto differently structured kaolinite minerals: A combined ATR-FTIR and H-1 NMR studyΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Georgios Papavassiliou()Michael Fardis()Eleni Karakosta()Ioanna A. Vasiliadou()Dionisios Panagiotaras()Dimitris Papoulis()http://purl.tuc.gr/dl/dias/E509AED8-110D-4C75-9769-A4970E1E770410.1016/j.colsurfb.2011.01.026Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2011Summarization: The attachment of Pseudomonas (P.) putida onto well (KGa-1) and poorly (KGa-2) crystallized kaolinitewas +investigated in this study. Batch experiments were carried out to determine the attachment isotherms of +P. putida onto both types of kaolinite particles. The attachment process of P. putida onto KGa-1 and KGa-2 +wasadequately described by a Langmuir isotherm. Attenuated Total Reflection Fourier Transform Infrared +Spectroscopy and Nuclear Magnetic Resonance were employed to study the attachment mechanisms of P. +putida. Experimental results indicated that KGa-2 presented higher affinity and attachment capacity than +KGa-1. It was shown that electrostatic interactions and clay mineral structural disorders can influence +the attachment capacity of clay mineral particles.Παρουσιάστηκε στο: Colloids and surfaces B: Biointerfaces peer-reviewedΒιβλιογραφική αναφορά: I.A. Vasiliadou, D. Papoulis, C. V. Chrysikopoulos, +D.Panagiotaras, .Ε, Karakosta, M. Fardis, G. Papavassiliou , "Attachment of Pseudomonas putida onto differently structured kaolinite +minerals: A combined ATR-FTIR and 1H NMR study " , Col. and Surf. B: Biointerf.,vol. 84,no. 2 , pp.354–359,2011.doi :10.1016/j.colsurfb.2011.01.026info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314852012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAn experimental study of acoustically enhanced NAPL dissolution in porous mediaΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Eric T. Vogler()http://purl.tuc.gr/dl/dias/4ACA8244-7E4E-499C-9265-FC3F4FB99EF810.1002/aic.10221Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: The effects of acoustic waves on the dissolution of dense nonaqueous phase liquids in +water saturated porous media are investigated. Experiments of trichloroethylene (TCE) +ganglia dissolution within a water saturated column, packed with glass beads, are +conducted. Acoustic waves with pressure amplitudes ranging from 0 to 1625 Pa and +frequencies ranging from 0 to 285 Hz are employed to the interstitial fluid at the inlet of +the packed column. Effluent dissolved TCE concentrations are observed to increase up to +120% in the presence of acoustic pressure waves compared to the case where TCE +dissolution without acoustic waves is monitored. The observed effluent dissolved TCE +concentration increase is attributed to enhanced mass flux at the TCE-water interface, +caused by acoustic waves. Highest dissolution rates occur at discrete frequencies suggesting +resonance effects or the presence of standing waves. Although acoustic waves +enhance TCE dissolution, they dissipate almost exponentially with distance from the +acoustic sourceΠαρουσιάστηκε στο: AIChE Journalpeer-reviewedBibliographic citation: E. T. Vogler, C. V. Chrysikopoulos ," An Experimental Study of Acoustically Enhanced NAPL Dissolution in Porous Media " ,A. J. ,vol.50 ,no.12 ,pp.3271 - 3280,2004.doi:10.1002/aic.10221info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:314872012-10-10T00:00:00Z28
info:eu-repo/semantics/articleSorption of Pseudomonas putida onto differently structured kaolinite mineralsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Maria I. Bellou()Maria A. Tselepi()Vasiliki I. Syngouna()Petros A. Kokkinos()Apostolos Vantarakis()Spyros C. Paparrodopoulos()http://purl.tuc.gr/dl/dias/4B0C01C5-535D-459F-8C2C-21EDA89873B110.1016/j.scitotenv.2015.02.036Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2015Summarization: Human adenoviruses (hAdVs) are pathogenic viruses responsible for public health problems worldwide. They +have also been used as viral indicators in environmental systems. Coliphages (e.g., MS2, ΦX174) have also +been studied as indicators of viral pollution in fecally contaminated water. Our objective was to evaluate the +distribution of three viral fecal indicators (hAdVs, MS2, and ΦΧ174), between two different phyllosilicate clays +(kaolinite and bentonite) and the aqueous phase. A series of static and dynamic experiments were conducted +under two different temperatures (4, 25 °C) for a time period of seven days. HAdV adsorption was examined +in DNase I reaction buffer (pH=7.6, and ionic strength (IS)=1.4 mM), whereas coliphage adsorption in phosphate +buffered saline solution (pH=7, IS=2 mM). Moreover, the effect of IS on hAdV adsorption under static +conditions was evaluated. The adsorption of hAdVwas assessed by real-time PCR and its infectivitywas tested by +cultivation methods. The coliphages MS2 and ΦΧ174 were assayed by the double-layer overlay method. The +experimental results have shown that coliphage adsorption onto both kaolinite and bentonite was higher for +the dynamic than the static experiments; whereas hAdV adsorption was lower under dynamic conditions. The +adsorption of hAdV increased with decreasing temperature, contrary to the results obtained for the coliphages. +This study examines the combined effect of temperature, agitation, clay type, and IS on hAdV adsorption onto +clays. The results provide useful new information on the effective removal of viral fecal indicators (MS2, +ΦX174 and hAdV) from dilute aqueous solutions by adsorption onto kaolinite and bentoniteΠαρουσιάστηκε στο: Science of the Total Environmentpeer-reviewedBibliographic citation: M. I. Bellou ,V. I. Syngouna , M. A. Tselepi , P. A. Kokkinos , S. C. Paparrodopoulos ,A. Vantarakis , C. V. Chrysikopoulos , "Interaction of human adenoviruses and coliphages with kaolinite +and bentonite " ,Scien. of the Tot. Envir.,vol. 517 ,pp.86–95,2015.doi:10.1016/j.scitotenv.2015.02.036info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315022012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAttachment of bacteriophages MS2 and ΦX174 onto kaolinite and montmorillonite: Extended-DLVO interactionsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasiliki I. Syngouna()http://purl.tuc.gr/dl/dias/1987F07F-34F8-4E41-814D-ECBFC58A226A10.1016/j.colsurfb.2011.11.028Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2011Summarization: This study aims to gain insights into the interaction of virus particles with clay colloids. Bacteriophages +MS2 and X174 were used as model viruses and kaolinite (KGa-1b) and montmorillonite (STx-1b) as +model colloids. The experimental data obtained from batch experiments of MS2 and X174 attachment +onto KGa-1b and STx-1b suggested that virus attachment is adequately described by the Freundlich +isotherm equation. Both MS2 and X174 were attached in greater amounts onto KGa-1b than STx-1b +with MS2 having greater affinity than X174 for both clays. Furthermore, extended-DLVO interaction +energy calculations explained that the attachment of viruses onto model clay colloids was primarily +caused by hydrophobic interaction. The theoretical and experimental results of this study were found to +be in good agreement with previous findings.Παρουσιάστηκε στο: Colloids and surfaces B: Biointerfaces peer-reviewedBibliographic citation: C. V. Chrysikopoulos, V.I. Syngouna, "Attachment of bacteriophages MS2 and X174 onto kaolinite and montmorillonite: Extended-DLVO interactions " ,Col. and Surf.B: Biointerf.,vol. 92 ,pp. 74– 83,2011.doi :10.1016/j.colsurfb.2011.11.028info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315062012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of polydisperse colloid suspensions in a single fractureΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()http://purl.tuc.gr/dl/dias/67C7237E-4CA4-459C-816C-B51D5071600Ahttp://www.researchgate.net/publication/258223723_Transport_of_polydisperse_colloid_suspensions_in_a_single_fracturePublished at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 1999Summarization: The transport of variably sized colloids (polydisperse) in a fracture with +uniform aperture is investigated by a particle-tracking model that treats colloids as +discrete particles with unique transport properties while accounting for either matrix +diffusion or irreversible colloid deposition. For the special case of a monodisperse colloid +suspension the particle-tracking model is in perfect agreement with predictions based on +an existing analytical solution. It is shown that lognormal colloid size distributions exhibit +greater spreading than monodisperse suspensions. Increasing the fracture porosity of the +solid matrix leads to higher matrix diffusion, which in turn delays particle breakthrough +for both the monodisperse and variably sized colloid suspensions. The smallest particles of +a distribution are more greatly affected by matrix diffusion whereas the largest particles +are transported faster and further along a fracture. Both perfect sink and kinetic colloid +deposition onto fracture surfaces are examined. Kinetic deposition accounts for colloid +surface exclusion by either a linear or nonlinear blocking function. For both cases the +smallest colloid particles tend to preferentially deposit onto the fracture wall. Both matrix +diffusion and surface deposition tend to discretize colloid distributions according to +particle size so that larger particles are least retarded and smaller particles are more +slowly transported. Furthermore, it is shown that the rate of colloid deposition is inversely +proportional to the fracture aperture.Παρουσιάστηκε στο: Water Resources Researchpeer-reviewedBibliographic citation: S.C. James , C. V. Chrysikopoulos.(March, 1999).Transport of polydisperse colloid suspensions in a single fracture . Water Resources Research.[online].pp. 707–718. Available: http://www.researchgate.net/publication/258223723_Transport_of_polydisperse_colloid_suspensions_in_a_single_fractureinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315082012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of human adenoviruses in water saturated laboratory columnsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)P. Kokkinos()V. I. Syngouna()M. A. Tselepi()M. Bellou()Apostolos Vantarakis()http://purl.tuc.gr/dl/dias/FF8FF44D-BA2C-464B-A8C4-64592A483A98 10.1007/s12560-014-9179-8Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2015Summarization: Groundwatermay be contaminated with infective +human enteric viruses from various wastewater discharges, +sanitary landfills, septic tanks, agricultural practices, and +artificial groundwater recharge. Coliphages have been widely +used as surrogates of enteric viruses, because they share many +fundamental properties and features.Although a large number +of studies focusing on various factors (i.e. pore water solution +chemistry, fluid velocity, moisture content, temperature, and +grain size) that affect biocolloid (bacteria, viruses) transport +have been published over the past two decades, little attention +has been given toward human adenoviruses (hAdVs). The +main objective of this study was to evaluate the effect of pore +water velocity on hAdV transport in water saturated laboratory- +scale columns packed with glass beads. The effects of +pore water velocity on virus transport and retention in porous +media was examined at three pore water velocities (0.39, 0.75, +and 1.22 cm/min). The results indicated that all estimated +averagemass recovery values forhAdVwere lower than those +of coliphages, which were previously reported in the literature +by others for experiments conducted under similar experimental +conditions.Παρουσιάστηκε στο: Food and Environmental Virologypeer-reviewedBibliographic citation: P. Kokkinos , V. I. Syngouna , M. A. Tselepi ,M. Bellou ,C. V. Chrysikopoulos , +A.Vantarakis, "Transport of human adenoviruses in water saturated +laboratory columns ",F. and Envi. Virolo. ,vol. 7 ,no. 2, 2015.doi: 10.1007/s12560-014-9179-8info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315102012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVirus inactivation in the presence of quartz sand under static and dynamic batch conditions at different temperaturesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Andriana F. Aravantinou()http://purl.tuc.gr/dl/dias/C68C7E26-08BA-420E-B83B-478400185CA110.1016/j.jhazmat.2012.07.002Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2012Summarization: Virus inactivation is one of the most important factors that controls virus fate and transport in the +subsurface. In this study the inactivation of viruses in the presence of quartz sand was examined. The bacteriophages +MS2 and X174 were used as model viruses. Experiments were performed at 4 ◦C and 20 ◦C, +under constant controlled conditions, to investigate the effect of virus type, temperature, sand size, and +initial virus concentration on virus inactivation. The experimental virus inactivation data were satisfactorily +represented by a pseudo-first order expression with time-dependent rate coefficients. Furthermore, +the results indicated that virus inactivation was substantially affected by the ambient temperature and +initial virus concentration. The inactivation rate of MS2 was shown to be greater than that of X174. +However, the greatest inactivation was observed for MS2 without the presence of sand, at 20 ◦C. Sand +surfaces offered protection against inactivation especially under static conditions. However, no obvious +relationship between sand particle size and virus inactivation could be established from the experimental +data. Moreover, the inactivation rates were shown to increase with decreasing virus concentrationΠαρουσιάστηκε στο: Journal of Hazardous Materialspeer-reviewedΒιβλιογραφική αναφορά: C.V. Chrysikopoulos, A. F. Aravantinou, "Virus inactivation in the presence of quartz sand under static and dynamic batch conditions +at different temperatures ",J. of Hazar. Maτ. ,vol.233– 234 ,pp. 148– 157,2012.doi:10.1016/j.jhazmat.2012.07.002info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315122012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnalytical solutions for monodisperse and polydisperse colloid transport in uniform fracturesΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()http://purl.tuc.gr/dl/dias/D10A5D54-5F47-4763-9DE0-36AAAF86D05310.1016/S0927-7757(03)00316-9Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2003Summarization: Analytical solutions are derived describing the transport of suspensions of monodisperse as well as polydisperse colloid +plumes of neutral buoyancy within a fracture with uniform aperture. Various initial and boundary conditions are considered. +It is shown that both the finite colloid size and the characteristics of the colloid diameter distribution significantly affect the +shape of colloid concentration breakthrough curves. Furthermore, increasing the standard deviation of the colloid diameter +enhances colloid spreading and increases the number of attached colloids when colloid–wall interactions are taken into account. +Excellent agreement between available experimental data and the analytical solution for the case of an instantaneous release of +monodisperse colloids in a natural fracture is observed.Παρουσιάστηκε στο: Colloids and Surfaces A Physicochemical and Engineering Aspectspeer-reviewedBibliographic citation: S. C. James , C. V. Chrysikopoulos , "Analytical solutions for monodisperse and polydisperse colloid transport in uniform fractures " ,Col. and Surf. A: Physico. Eng. Asp.,vol. 226, no.1-3,pp.101–118,2003.doi:10.1016/S0927-7757(03)00316-9info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315132012-10-10T00:00:00Z28
info:eu-repo/semantics/articleContaminant transport in a variable aperture fracture in the presence of monodisperse colloidsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Scott C. James()Tanya K. Bilezikjian()http://purl.tuc.gr/dl/dias/57E1F283-287C-4694-B2CE-589E8457176B10.1007/s00477-004-0231-3Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2005Summarization: A quasi-three-dimensional particle tracking +model is developed to characterize the spatial and temporal +effects of advection, molecular diffusion, Taylor +dispersion, fracture wall deposition, matrix diffusion, +and co-transport processes on two discrete plumes +(suspended monodisperse or polydisperse colloids and +dissolved contaminants) flowing through a variable +aperture fracture situated in a porous medium. Contaminants +travel by advection and diffusion and may +sorb onto fracture walls and colloid particles, as well as +diffuse into and sorb onto the surrounding porous rock +matrix. A kinetic isotherm describes contaminant sorption +onto colloids and sorbed contaminants assume the +unique transport properties of colloids. Sorption of the +contaminants that have diffused into the matrix is governed +by a first-order kinetic reaction. Colloids travel by +advection and diffusion and may attach onto fracture +walls; however, they do not penetrate the rock matrix. A +probabilistic form of the Boltzmann law describes filtration +of both colloids and contaminants on fracture +walls. Ensemble-averaged breakthrough curves of many +fracture realizations are used to compare arrival times of +colloid and contaminant plumes at the fracture outlet. +Results show that the presence of colloids enhances +contaminant transport (decreased residence times) while +matrix diffusion and sorption onto fracture walls retard +the transport of contaminants. Model simulations with +the polydisperse colloids show increased effects of cotransport +processes.Παρουσιάστηκε στο: Stochastic Environmental Research and Risk Assessmentpeer-reviewedBibliographic citation: S. C. James ,T. K. Bilezikjian , C. V. Chrysikopoulos , "Contaminant transport in a fracture with spatially variable aperture +in the presence of monodisperse and polydisperse colloids " ,Stoch. Environ. Res. Risk. Assess ,vol.19 pp. 266–279,2005.doi:10.1007/s00477-004-0231-3info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315152012-10-10T00:00:00Z28
info:eu-repo/semantics/articleTransport of viruses in water saturated columns packed with sand: Effect of pore water velocity, sand grain size, and suspended colloidsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasileios E. Katzourakis()http://purl.tuc.gr/dl/dias/718D1ADB-0182-42A9-AF4E-3A678B0826F310.1016/j.advwatres.2014.03.001Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2014Summarization: A conceptual mathematical model was developed to describe the simultaneous transport (cotransport) of +viruses and colloids in three-dimensional, water saturated, homogeneous porous media with uniform +flow. The model accounts for the migration of individual virus and colloid particles as well as viruses +attached onto colloids. Viruses can be suspended in the aqueous phase, attached onto suspended colloids +and the solid matrix, and attached onto colloids previously attached on the solid matrix. Colloids can be +suspended in the aqueous phase or attached on the solid matrix. Viruses in all four phases (suspended in +the aqueous phase, attached onto suspended colloid particles, attached on the solid matrix, and attached +onto colloids previously attached on the solid matrix) may undergo inactivation with different inactivation +coefficients. The governing coupled partial differential equations were solved numerically using +finite difference methods, which were implemented explicitly or implicitly so that both stability and +speed factors were satisfied. Furthermore, the experimental data collected by Syngouna and Chrysikopoulos +[1] were satisfactorily fitted by the newly developed cotransport model.Παρουσιάστηκε στο: Advances in Water Resourcespeer-reviewedBibliographic citation: V. E. Katzourakis , C. V. Chrysikopoulos , "Mathematical modeling of colloid and virus cotransport in porous media: Application to experimental data" ,Advanc. in Wat. Resour.,vol. 68,pp. 62–73,2014.doi:10.1016/j.advwatres.2014.03.001info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315192012-10-10T00:00:00Z28
info:eu-repo/semantics/articleLongitudinal interpolation of parameters characterizing channel geometry by piece-wise polynomial and universal kriging methods: effect on flow modelingΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Interpolation of parameters characterizing the geometry +of channel beds is needed to support flow modeling +at varying grid resolutions. Three methods of interpolating +geometric parameters between survey stations +were described including piece-wise linear interpolation, +monotone piece-wise-cubic Hermitian interpolation, +and universal kriging. The latter gives parameter estimates +that minimize the mean square error of the interpolator +and therefore is considered the most accurate +method. Based on the application of these methods to +a dataset describing cross-sectional properties at 283 stations, +piece-wise linear interpolation gave parameter +estimates that very closely track universal kriging estimates. +Piece-wise-cubic interpolation, including monotone +piece-wise-cubic Hermitian interpolation and +cubic spline interpolation, gave parameter estimates that +did not track as wellBrett F. Sandershttp://purl.tuc.gr/dl/dias/03A5CB4E-49DE-4126-8E6F-A74E4202F2B610.1016/j.advwatres.2004.08.010Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: Channel geometry often is described by a set of longitudinally varying parameters measured at a set of survey stations. To support +flow modeling at arbitrary resolution, three methods of parameter interpolation are described including piece-wise linear interpolation, +monotone piece-wise-cubic Hermitian interpolation, and universal kriging. The latter gives parameter estimates that +minimize the mean square error of the interpolator, and therefore can be used as a standard against which the accuracy of polynomial +methods can be assessed. Based on the application of these methods to a dataset describing cross-sectional properties at 283 +stations, piece-wise linear interpolation gives parameter estimates that closely track universal kriging estimates and therefore this +method is recommended for routine modeling purposes. Piece-wise-cubic interpolation gives parameter estimates that do not track +as well. Differences between cubic and kriging estimates were found to be 2–10 times larger than differences between linear and kriging +parameter estimates. In the context of one-dimensional flow modeling, the sensitivity of steady state water level predictions to +the channel bed interpolator is comparable to a 5% change in the Manning coefficient.Παρουσιάστηκε στο: Advances in Water Resourcespeer-reviewedBibliographic citation: Brett F. Sanders , Constantios V. Chrysikopoulos , "Longitudinal interpolation of parameters characterizing channel geometry by piece-wise polynomial and universal +kriging methods: effect on flow modeling " , Advances in Water Resources 27 (2004) 1061–1073, info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315212012-10-10T00:00:00Z28
info:eu-repo/semantics/articleDissolution of nonaqueous +phase liquid pools in anisotropic +aquifersΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)E .T Vogler()http://purl.tuc.gr/dl/dias/715B4B5F-FB4F-4482-BAED-47F87D7152A310.1007/PL00009787Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2001Summarization: A two-dimensional numerical transport model is developed to determine the effect of aquifer anisotropy and heterogeneity +on mass transfer from a dense nonaqueous phase liquid (DNAPL) pool. The appropriate steady state groundwater flow equation +is solved implicitly whereas the equation describing the transport of a sorbing contaminant in a confined aquifer is solved +by the alternating direction implicit method. Statistical anisotropy in the aquifer is introduced by two-dimensional, random +log-normal hydraulic conductivity field realizations with different directional correlation lengths. Model simulations indicate +that DNAPL pool dissolution is enhanced by increasing the mean log-transformed hydraulic conductivity, groundwater flow velocity, +and/or anisotropy ratio. The variance of the log-transformed hydraulic conductivity distribution is shown to be inversely +proportional to the average mass transfer coefficient. + +Παρουσιάστηκε στο: Stochastic Environmental Research and Risk Assessmentpeer-reviewedBibliographic citation: E. T. Vogler ,C. V. Chrysikopoulos, "Dissolution of nonaqueous phase liquid pools in anisotropic aquifers " ,Stoch. Environ.Research and Risk Ass. ,vol.15, no.1, pp. 33-46,2001.doi :10.1007/PL00009787info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315002012-10-10T00:00:00Z28
info:eu-repo/semantics/articleInteraction between viruses and clays in static +and dynamic batch systemsΧρυσικοπουλος Κωνσταντινος(http://users.isc.tuc.gr/~cchrysikopoulos)Chrysikopoulos Constantinos(http://users.isc.tuc.gr/~cchrysikopoulos)Vasiliki I . S yngouna()http://purl.tuc.gr/dl/dias/4AC83DC2-6750-417C-AE24-3E8FA13E0E0910.1021/es100107aPublished at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2010Summarization: Bacteriophage MS2 and ΦX174 were used as surrogates for +human viruses in order to investigate the interaction between +viruses and clay particles. The selected phyllosilicate clays +were kaolinite and bentonite (>90% montmorillonite). A series +of static and dynamic experiments were conducted at two +different temperatures (4 and 25 °C) to investigate the effect +of temperature and agitation (dynamic experiments) on virus +adsorption onto clays. Appropriate adsorption isotherms were +determined. Electrokinetic features of bacteriophages and +clays were quantified at different pH and ionic strength (IS). +Moreover, interaction energies between viruses and clays were +calculated for the experimental conditions (pH 7 and IS ) 2 +mM) by applying the DLVO theory. The experimental results +shown that virus adsorption increases linearly with suspended +virus concentration. The observed distribution coefficient (Kd) +was higher for MS2 than ΦX174. The observed Kd values were +higher for the dynamic than static experiments, and increased +with temperature. The results of this study provided basic +information for the effectiveness of clays to remove viruses by +adsorption from dilute aqueous solutions. No previous study +has explored the combined effect of temperature and agitation +on virus adsorption onto clays.Παρουσιάστηκε στο: Environmental Science and Technology peer-reviewedBibliographic citation: V . I . Syngouna +C . V . Chrysikopoulos , "Interaction between viruses and clays in static and dynamic batch systems ",Environ. Sci. Technol. ,vol.44, no.12 pp. 4539–4544,2010.doi:10.1021/es100107ainfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315262012-10-10T00:00:00Z28
info:eu-repo/semantics/articleEnhancement of biodegradability of industrial wastewaters by chemical oxidation pre-treatment. Elefteria Psillakis()Dionissios Mantzavinos()Coupling chemical and biological treatmenthttp://purl.tuc.gr/dl/dias/72CAAFE3-A529-4FB8-A8F7-7EA0C9508A2E10.1002/jctb.1020Published at: 2015-09-23eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2004Summarization: Chemical oxidation technologies are often employed for the treatment of complex industrial +effluents that are not amenable to conventional biological methods. The role of chemical oxidation depends +on the treatment objectives andmay vary from partial remediation to complete mineralization. In the case +of partial treatment, chemical oxidation aims at the selective removal of the more bioresistant fractions +and their conversion to readily biodegradable intermediates that can subsequently be treated biologically. +Coupling chemical pre-oxidation with biological post-treatment is conceptually beneficial as it can lead +to increased overall treatment efficiencies compared with the efficiency of each individual stage. This +paper reviews recent developments and highlights some important aspects that need to be addressed when +considering such integrated schemes.John Wiley & Sons, Ltd.Παρουσιάστηκε στο: Journal of Chemical Technology and Biotechnologypeer-reviewedBibliographic citation: D.Mantzavinos, E. Psillakis , "Enhancement of biodegradability of industrial wastewaters by chemical oxidation pre-treatment ", J. Chem. Techno.l Biotechnol.,vol . 79,pp. 431–454 ,2004. doi:10.1002/jctb.1020info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315292012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAnion-templated assembly of a supramolecular cage complexElefteria Psillakis()Michael D Ward()Jon A McCleverty()John C Jeffery()Charles‐Antoine Carraz()Karen LV Mann()James S Fleming()http://purl.tuc.gr/dl/dias/EF6B6050-2017-4952-B1CA-B6A1D3D97B8C10.1002/(SICI)1521-3773(19980518)37:9<1279::AID-ANIE1279>3.0.CO;2-QPublished at: 2015-09-23eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 1998Summarization: THe templating effect of the tetrafluoroborate ion leads to assembly of four CoII ions and six bridging ligands around this anion to give a tetrahedral complex with a bridging ligand along each edge and the anion trapped in the central cavity (shown below). Surprisingly under identical conditions but with NiII a simpler dinuclear complex forms. + +Wiley‐vch verlag gmbhPresented on: Angewandte Chemie International Editionpeer-reviewedBibliographic citation: J. S Fleming, K. LV Mann, C.A.Carraz, E.Psillakis, J. C Jeffery, J. A McCleverty, M.D Ward , "Anion-Templated Assembly of a Supramolecular Cage Complex ",Ang. chem. interna. edit.,vol.37,no.9 ,pp.1279-1281,1998.doi:10.1002/(SICI)1521-3773(19980518)37:9<1279::AID-ANIE1279>3.0.CO;2-Qinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315362012-10-10T00:00:00Z28
info:eu-repo/semantics/articleElectrochemical oxidation of olive oil mill wastewatersElefteria Psillakis()Marina Gotsi()Nicolas Kalogerakis()Petros Samaras() Dionissios Mantzavinos()http://purl.tuc.gr/dl/dias/E5CAF8E2-60C6-46EB-9071-411FB80ECC9F10.1016/j.watres.2005.07.037Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2005Summarization: The electrochemical oxidation of olive oil mill wastewaters over a titanium–tantalum–platinum–iridium anode was +investigated. Batch experiments were conducted in a flow-through electrolytic cell with internal recycle at voltage of 5, 7 +and 9V, NaCl concentrations of 1%, 2% and 4%, recirculation rates of 0.4 and 0.62 L/s and initial chemical oxygen +demand (COD) concentrations of 1475, 3060, 5180 and 6545 mg/L. The conversion of total phenols and COD as well as +the extent of decolorization generally increased with increasing voltage, salinity and recirculation rate and decreasing +initial concentration. In most cases, nearly complete degradation of phenols and decolorization were achieved at short +treatment times up to 60 min; this was accompanied by a relatively low COD removal that never exceeded 40% even +after prolonged (up to 240 min) times. The consumption of energy per unit mass of COD removed after 120 min of +treatment was found to be a strong function of the operating conditions and was generally low at high initial +concentrations and/or reduced salinity. The acute toxicity to marine bacteria Vibrio fischeri decreased slightly during +the early stages of the reaction and this was attributed to the removal of phenols. However, as the reaction proceeded +toxicity increased due to the formation of organochlorinated by-products as confirmed by GC/MS analysis. The +toxicity to Daphnia magna increased sharply at short treatment times and remained quite high even after prolonged +oxidation.PergamonΠαρουσιάστηκε στο: Water Researchpeer-reviewedBibliographic citation: M. Gotsi, N. Kalogerakis, E. Psillakis, P. Samaras, D. Mantzavinos , "Electrochemical oxidation of olive oil mill wastewaters " ,Wat. Resear.,vol. 39,no.17 ,pp. 4177–4187,2005.doi:10.1016/j.watres.2005.07.037info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315402012-10-10T00:00:00Z28
info:eu-repo/semantics/articleVortex-assisted liquid-liquid microextraction of octylphenol, nonylphenol and bisphenol-AElefteria Psillakis()Evangelia Yiantzi() Konstantina Tyrovola()Nicolas Kalogerakis()http://purl.tuc.gr/dl/dias/2C190A94-F49C-4D26-95DA-2151C92E59C810.1016/j.talanta.2009.11.005Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2010Summarization: A new and fast equilibrium-based solvent microextraction technique termed vortex-assisted +liquid–liquid microextraction (VALLME) has been developed and used for the trace analysis of octylphenol, +nonylphenol and bisphenol-A in water and wastewater samples. According to VALLME, dispersion of +microvolumes of a low density extractant organic solvent into the aqueous sample is achieved by using +for the first time vortex mixing, a mild emulsification procedure. The fine droplets formed could extract +target analytes towards equilibrium faster because of the shorter diffusion distance and larger specific +surface area. Upon centrifugation the floating extractant acceptor phase restored its initial single microdrop +shape and was used for high-performance liquid chromatographic analysis. Different experimental +parameters were controlled and the optimum conditions found were: 50l of octanol as the extractant +phase; 20 ml aqueous donor samples; a 2 min vortex extraction time with the vortex agitator set at a +2500rpm rotational speed; centrifugation for 2 min at 3500 rpm; no ionic strength or pH adjustment. +The calculated calibration curves gave high levels of linearity yielding correlation coefficients (r2) greater +than 0.9935. The repeatability and reproducibility of the proposed method were found to be good and +the limits of the detection were calculated in the low g l−1 level ranging between 0.01 and 0.07g l−1. +Matrix effects were determined by applying the proposed method to spiked tap, river water and treated +municipal wastewater samples.ElsevierΠαρουσιάστηκε στο: Talantapeer-reviewedBibliographic citation: E. Yiantzi, E. Psillakis , K. Tyrovola, N. Kalogerakis , "Vortex-assisted liquid–liquid microextraction of octylphenol, nonylphenol and +bisphenol-A " ,Tal.,vol. 80,no.5 ,pp.2057–2062,2010.doi:10.1016/j.talanta.2009.11.005info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:315422012-10-10T00:00:00Z28
info:eu-repo/semantics/articleAn ionic liquid as a solvent for headspace single drop microextraction of chlorobenzenes from water samplesElefteria Psillakis()Lorena Vidal()Nuria Grané()Frank Marken()Antonio Canals()http://purl.tuc.gr/dl/dias/628BB734-289F-47B4-A709-B4519375955910.1016/j.aca.2006.10.053Published at: 2015-09-24eninfo:eu-repo/semantics/openAccessLicense: http://creativecommons.org/licenses/by/4.0/application/pdfIssued on: 2007Summarization: A headspace single-drop microextraction (HS-SDME) procedure using room temperature ionic liquid and coupled to high-performance liquid +chromatography capable of quantifying trace amounts of chlorobenzenes in environmental water samples is proposed. A Plackett–Burman design +for screening was carried out in order to determine the significant experimental conditions affecting the HS-SDME process (namely drop volume, +aqueous sample volume, stirring speed, ionic strength, extraction time and temperature), and then a central composite design was used to optimize +the significant conditions. The optimum experimental conditions found from this statistical evaluation were: a 5 L microdrop of 1-butyl-3- +methylimidazolium hexafluorophosphate, exposed for 37 min to the headspace of a 10mL aqueous sample placed in a 15mL vial, stirred at +1580 rpm at room temperature and containing 30% (w/v) NaCl. The calculated calibration curves gave a high level of linearity for all target +analytes with correlation coefficients ranging between 0.9981 and 0.9997. The repeatability of the proposed method, expressed as relative standard +deviation, varied between 1.6 and 5.1% (n = 5). The limits of detection ranged between 0.102 and 0.203 gL−1. Matrix effects upon extraction +were evaluated by analysing spiked tap and river water as well as effluent water samples originating from a municipal wastewater treatment plant.ElsevierΠαρουσιάστηκε στο: Analytica chimica actapeer-reviewedBibliographic citation: L. Vidal , E. Psillakis , C. E. Domini , +N. Grane, F. Marken , A. Canals , "An ionic liquid as a solvent for headspace single drop microextraction of chlorobenzenes from water samples " ,Anal. chim. acta ,vol. 584,no.1, pp. 189–195,2207.doi :10.1016/j.aca.2006.10.053info:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:346512012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectFederating natural history museums in natural EuropeΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Konstantinos Makris()Giannis Skevakis()Varvara Kalokyri()Polyxeni Arapi()John Stoitsis()Nikos Manolis()Sarah Leon Rojas()http://purl.tuc.gr/dl/dias/599A70CA-61E3-4427-9FA2-E26A59BC93E910.1007/978-3-319-03437-9_35Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: An impressive abundance of high quality scientific content about Earth’s biodiversity and natural history available in Natural History Museums (NHMs) around Europe remains largely unexploited due to a number of barriers, such as: the lack of interconnection and interoperability between the management systems used by museums, the lack of centralized access through a European point of reference like Europeana, and the inadequacy of the current metadata and content organization. To cope with these problems, the Natural Europe project offers a coordinated solution at European level. Cultural heritage content is collected from six Natural History Museums around Europe into a federation of European Natural History Digital Libraries that is directly connected with Europeana.eu. This paper presents the Natural Europe Cultural Digital Libraries Federation infrastructure consisting of: (a) The Natural Europe Cultural Environment (NECE), i.e. the infrastructure and toolset deployed on each NHM allowing their curators to publish, semantically describe, manage and disseminate the Cultural Heritage Objects (CHOs) they contribute to the project, and (b) the Natural Europe Cultural Heritage Infrastructure (NECHI) interconnecting NHM digital libraries and further exposing their metadata records to Europeana.eu. +Παρουσιάστηκε στο: 7th Metadata Semantics and Research Conference (MTSR) 2013 Springer VerlagBibliographic citation: Ko. Makris, G. Skevakis, V. Kalokyri, P. Arapi, S.Christodoulakis, J. Stoitsis, Ni Manolis, S. L. Rojas ,"Federating Natural History Museums in Natural Europe ", In 2013 the Meta Sem and Res Conf (MTSR) ,pp.361-372.doi :10.1007/978-3-319-03437-9_35posterinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:346512012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectFederating natural history museums in natural EuropeΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Konstantinos Makris()Giannis Skevakis()Varvara Kalokyri()Polyxeni Arapi()John Stoitsis()Nikos Manolis()Sarah Leon Rojas()http://purl.tuc.gr/dl/dias/599A70CA-61E3-4427-9FA2-E26A59BC93E910.1007/978-3-319-03437-9_35Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2013Summarization: An impressive abundance of high quality scientific content about Earth’s biodiversity and natural history available in Natural History Museums (NHMs) around Europe remains largely unexploited due to a number of barriers, such as: the lack of interconnection and interoperability between the management systems used by museums, the lack of centralized access through a European point of reference like Europeana, and the inadequacy of the current metadata and content organization. To cope with these problems, the Natural Europe project offers a coordinated solution at European level. Cultural heritage content is collected from six Natural History Museums around Europe into a federation of European Natural History Digital Libraries that is directly connected with Europeana.eu. This paper presents the Natural Europe Cultural Digital Libraries Federation infrastructure consisting of: (a) The Natural Europe Cultural Environment (NECE), i.e. the infrastructure and toolset deployed on each NHM allowing their curators to publish, semantically describe, manage and disseminate the Cultural Heritage Objects (CHOs) they contribute to the project, and (b) the Natural Europe Cultural Heritage Infrastructure (NECHI) interconnecting NHM digital libraries and further exposing their metadata records to Europeana.eu. +Παρουσιάστηκε στο: 7th Metadata Semantics and Research Conference (MTSR) 2013 Springer VerlagBibliographic citation: Ko. Makris, G. Skevakis, V. Kalokyri, P. Arapi, S.Christodoulakis, J. Stoitsis, Ni Manolis, S. L. Rojas ,"Federating Natural History Museums in Natural Europe ", In 2013 the Meta Sem and Res Conf (MTSR) ,pp.361-372.doi :10.1007/978-3-319-03437-9_35posterinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:346742012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectBringing environmental culture content into the Europeana.eu portal: The natural Europe digital libraries federation infrastructureΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Konstantinos Makris() Giannis Skevakis() Varvara Kalokyri()Nektarios Gioldasis()Fotis G. Kazasis()http://purl.tuc.gr/dl/dias/FCBF445A-BCFC-4E1B-9A6F-CB970E62A3C310.1007/978-3-642-24731-6_40Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2011Summarization: The aim of the Natural Europe project [1] is to improve the availability and relevance of environmental culture content for education and life-long learning use, in a multilingual and multicultural context. Cultural heritage content related with natural history, natural sciences, and nature/ environment preservation, is collected from six Natural History Museums (NHMs) around Europe into a federation of European Natural History Digital Libraries that is directly connected with Europeana.eu. We present here the Natural History Digital Libraries Federation infrastructure along with the appropriate tools and services that (a) allow the participating NHMs to uniformly describe and semantically annotate their content according to international standards and specifications, (b) interconnect their digital libraries, and (c) expose metadata records for Natural History cultural heritage objects to Europeana.eu.Παρουσιάστηκε στο: 5th International Conference, MTSR 2011, Izmir, Turkey, October 12-14, Springer VerlagBibliographic citation: K. Makris, G.Skevakis, V. Kalokyri, N. Gioldasis, F.G. Kazasis, S. Christodoulakis ," Bringing environmental culture content into the Europeana.eu portal: The natural Europe digital libraries federation infrastructure ",In 2011 5th Int. Conf. (MTSR) , pp. 400-411.doi : 10.1007/978-3-642-24731-6_40full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:346912012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectMapping MPEG-7 to CIDOC/CRMΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Anastasia Angelopoulou()Chrisa Tsinaraki()The MPEG72CIDOC Mapping ModelMPEG-7 to CIDOC/CRM Transformationhttp://purl.tuc.gr/dl/dias/245914D9-7432-4A1C-ADC0-E092005B5E1C10.1007/978-3-642-24469-8_6Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2011Summarization: The MPEG-7 is the dominant standard for multimedia content description; thus, the audiovisual Digital Library contents should be described in terms of MPEG-7. Since there exists a huge amount of audiovisual content in the cultural heritage domain, it is expected that several cultural heritage objects, as well as entities related with them (i.e. people, places, events etc.), have been described using MPEG-7. On the other hand, the dominant standard in the cultural heritage domain is the CIDOC/CRM; consequently, the MPEG-7 descriptions cannot be directly integrated in the cultural heritage digital libraries. +We present in this paper a mapping model and a system that allow the transformation of the MPEG-7 descriptions to CIDOC/CRM descriptions, thus allowing the exploitation of multimedia content annotations in the cultural heritage digital libraries. In addition, the proposed mapping model allows linking MPEG-7 descriptions to CIDOC/CRM descriptions in a Linked Data scenario.Παρουσιάστηκε στο: International Conference on Theory and Practice of Digital Libraries, TPDSpringer VerlagBibliographic citation: A.Angelopoulou, C. Tsinaraki, S. Christodoulakis , "Mapping MPEG-7 to CIDOC/CRM ", In 2011 In. Conf. on Th. and Pr. of Dig. Libr., (TPDL) ,pp.40-51.doi:10.1007/978-3-642-24469-8_6full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:347552012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectMobile multimedia event capturing and visualization (MOME)Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Amalia Panteli()Chrisa Tsinaraki()Lemonia Ragia()Fotis Kazasis()The conceptual model http://purl.tuc.gr/dl/dias/4AD5DEEB-6B7B-40F7-9265-438BF1A3E4F110.1109/MUE.2011.29 Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2011Summarization: Capturing Multimedia Events such as natural disasters, accident reports, building damage reports, political events, etc., are expensive functionalities due to the number and training of the people required, as well as the time involved in the capturing and post-processing of multimedia. In addition, the captured multimedia content often fails to give the viewer a comprehensive understanding of the event captured in context. We present a model and a mobile system for multimedia event capturing by a one-man-crew. The system supports: (a) the real time capturing of complex multimedia events of different types, (b) the recording of the capturing process and the metadata associated with the events, (c) the visualization of the events and the capturing process, and (d) the learning and preparation of the one-man-crew that will do the multimedia event capturing. +Παρουσιάστηκε στο: n the proceedings of the FTRA MUE 2011 Conference 28-30 JuneIEEEBibliographic citation: A. Panteli, C. Tsinaraki#, L. Ragia, F. Kazasis, S.Christodoulakis , "Mobile multimedia event capturing and visualization (MOME) ", In 2011 proc. of the FTRA MUE Con. ,pp.101 - 106.doi : 10.1109/MUE.2011.29full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:347912012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectTransforming teaching and learning: Changing the pedagogical approach to using educational programming languagesΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Petros Lameras()David Smith()Nektarios Moumoutzis() Emanuela Ovcin()Στυλιανακης Γεωργιος(http://users.isc.tuc.gr/~gstylianakis)Stylianakis Georgios(http://users.isc.tuc.gr/~gstylianakis)http://purl.tuc.gr/dl/dias/74D7141A-EFA7-4239-A96F-2F00EEAA5378http://www.virtuelleschule.at/fileadmin/reports/konferenzbeitraege/transform_learning_2010a.pdfPublished at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2010Summarization: Within the context of a European project exploring the development of programming skills in secondary education by means of modern educational programming languages, this paper proposes certain pedagogical methods, approaches and frameworks for enhancing the development of programming skills, and thereby increasing the number of students studying computer science both at school and university level. In particular, the aim of this paper is to explore the issues surrounding curriculum design for computer courses with a special focus on programming. It has been argued that the utilisation of learning activities that demonstrate specific pedagogic approaches (inquiry-based learning, collaborative learning, cognitive constructivism or activity based) is limited suggesting that teachers are not fully aware of how to apply different pedagogical considerations to their actual practice. This is more apparent in programming courses because of the increased level of abstraction which may cause certain difficulties in teaching and learning. The creation of curricula based on pedagogically-rich teaching and learning activities, and the introduction of Educational Programming Languages (EPLs) designed for teachers to teach students how to develop computer programs, may generate powerful learning opportunities. The main purpose of this paper is to outline the theoretical underpinning of teaching and learning EPLs, and to argue that, to be comprehensive, curriculum design for programming courses must consider important perspectives, each of which leads to specific ways of teaching programming. The paper starts by surveying the current state of computer science curriculum in the participating countries in the context of curriculum design, before looking at learning theories and EPLs that may be used to support informed decisions for pedagogically-driven programming course design. Each decision requires different approaches to teaching programming which are necessary for aligning theory and practice within a viable educational model. The paper concludes by proposing that information and communication technology (ICT) tools may provide a framework to design and structure teaching and learning activities for programming courses.Παρουσιάστηκε στο: hort paper presented at the ALT-C conference, Nottingham, UK, 7-9 SeptembeBibliographic citation: P. Lameras , D. Smith , N. Moumoutzis ,S. Christodoulakis , E. Ovcin , G. Stylianakis .( 2010 , Sept. ) .Presented at the ALT-C conference, Nottingham, UK, 7-9 September, 2010.[online].Available :http://www.virtuelleschule.at/fileadmin/reports/konferenzbeitraege/transform_learning_2010a.pdffull paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:348312012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectQuerying XML data with SPARQL Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Nikos Bikakis()Nektarios Gioldasis()Chrisa Tsinaraki()Mapping OWL to XML SchemaThe Query Translation Processhttp://purl.tuc.gr/dl/dias/14745BDE-923B-46A7-9B8E-E14A54112D2510.1007/978-3-642-03573-9_32Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: SPARQL is today the standard access language for Semantic Web data. In the recent years XML databases have also acquired industrial importance due to the widespread applicability of XML in the Web. In this paper we present a framework that bridges the heterogeneity gap and creates an interoperable environment where SPARQL queries are used to access XML databases. Our approach assumes that fairly generic mappings between ontology constructs and XML Schema constructs have been automatically derived or manually specified. The mappings are used to automatically translate SPARQL queries to semantically equivalent XQuery queries which are used to access the XML databases. We present the algorithms and the implementation of SPARQL2XQuery framework, which is used for answering SPARQL queries over XML databases.Παρουσιάστηκε στο: In the proceedings of the 20th International Conference on Database and Expert Systems Applications DEXASpringer VerlagBibliographic citation: N. Bikakis, N. Gioldasis, C. Tsinaraki, S. Christodoulakis ,"Querying XML data with SPARQL " in 2009 Int. Conference on Data.and Expert Sys. ap. DEXA , pp.372-381.doi: 10.1007/978-3-642-03573-9_32full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:348512012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectTowards a mediator based on owl and SPARQLΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Konstantinos Makris()Nikos Bikakis()Nektarios Gioldasis()Chrisa Tsinaraki()SPARQL Query Reformulationhttp://purl.tuc.gr/dl/dias/CC2C42DF-763D-4896-8CF2-821394650FB810.1007/978-3-642-04754-1_34Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: We propose a framework that supports a federated environment based on a Mediator Architecture in the Semantic Web. The Mediator supports mappings between the OWL Ontology of the Mediator and the other ontologies in the federated sites. SPARQL queries submitted to the Mediator are decomposed and reformulated to SPARQL queries to the federated sites. The evaluated results return to the Mediator. In this paper we describe the mappings definition and encoding. We also discuss briefly the reformulation approach that is used by the Mediator system that we are currently implementing.Παρουσιάστηκε στο: In the Proceedings of the 2nd World Summit on the Knowledge Society, Crete, GreeceSpringer VerlagBibliographic citation: K. Makris, N.Bikakis, N. Gioldasis, C. Tsinaraki, S. Christodoulakis, " Towards a mediator based on owl and SPARQL " In 2009 the Proc. of the 2nd World Sum. on the Knowl. Soc., Crete, Greece ,pp.326-335.doi :10.1007/978-3-642-04754-1_34full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:349112012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectSemantic based access over XML dataNikos Bikakis()Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Nektarios Gioldasis()Chrisa Tsinaraki()SPARQL Graph Pattern NormalizationMapping OWL to XML Schemahttp://purl.tuc.gr/dl/dias/5D4355EF-8E47-4CC7-9AC8-45C8B06BE0A310.1007/978-3-642-04754-1_27Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2009Summarization: The need for semantic processing of information and services has lead to the introduction of tools for the description and management of knowledge within organizations, such as RDF, OWL, and SPARQL. However, semantic applications may have to access data from diverse sources across the network. Thus, SPARQL queries may have to be submitted and evaluated against existing XML or relational databases, and the results transferred back to be assembled for further processing. In this paper we describe the SPARQL2XQuery framework, which translates the SPARQL queries to semantically equivalent XQuery queries for accessing XML databases from the Semantic Web environment.Παρουσιάστηκε στο: In the Proceedings of the 2nd World Summit on the Knowledge Society, Crete, GreeceSpringer VerlagBibliographic citation: N. Bikakis, N.Gioldasis, C. Tsinaraki, S. Christodoulakis ,"Semantic based access over XML data ",In 2009 the Pro. of the 2nd World Sum. on the Knowl. Soc., Crete, Greece,pp. 259-267.doi :10.1007/978-3-642-04754-1_27full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:349322012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectRich metadata and context capturing through CIDOC/CRM and mpeg-7 interoperabilityΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Alexandros Ntousias()Nektarios Gioldasis()Chrisa Tsinaraki()CIDOC/CRM TO MPEG-7http://purl.tuc.gr/dl/dias/280E76B1-C64D-41E5-B12A-221E7CF1A76910.1145/1386352.1386377Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2008Summarization: It is now accepted that powerful retrieval of multimedia data can be achieved with the integration of semantic and contextual metadata that relate to multimedia objects. In the case of objects related to culture and history there is a wealth of related information stored in Digital Libraries. CIDOC/CRM is a new, rapidly adopted standard in the field of cultural heritage that provides a very powerful model for encoding cultural heritage knowledge. In this paper we propose that knowledge is extracted and encoded in MPEG-7 multimedia object descriptions in an automatic manner so that the multimedia objects are augmented with very rich metadata descriptions coming from Digital Libraries. We analyze the mapping problem between CIDOC/CRM and MPEG-7 and we present the algorithms and a software system that supports this mapping.Παρουσιάστηκε στο: In the Proceedings of the ACM International Conference on Image and Video Retrieval (CIVR), Niagara Falls, Canada, July 7-9Association for Computing MachineryBibliographic citation: A.Ntousias,N. Gioldasis , C.Tsinaraki , S. Christodoulakis , "Rich metadata and context capturing through CIDOC/CRM and MPEG-7 interoperability ", In 2008 Proc. of the ACM Int. Conf. on Image and Video Retrieval (CIVR), pp.151-160 .doi :10.1145/1386352.1386377full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:349712012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectSpatial information retrieval from images using ontologies and semantic mapsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Michalis Foukarakis()Lemonia Ragia()http://purl.tuc.gr/dl/dias/D3245414-B2F2-4148-96F9-F789DB1A730F10.1007/978-3-540-87781-3_59Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2008Summarization: Cameras provide integrated GPS technology which makes them a powerful sensor for geographical context related images. They allow wireless connection to computers and the images can be automatically transferred to a PC or can be integrated into a GIS system. In this paper we propose an approach for spatial information retrieval from images using the concept of ontologies and semantic maps. The term of ontology is used in our case to describe spatial domain knowledge to enhance the search capability and image annotation. The objects are represented by their location in semantic maps. We describe a developed prototype system with a database design for ontologies and semantic maps. We demonstrate the automatic image annotation and the visualization of the spatial queries. The system is oriented to the area of culture and tourism and provides a user friendly interface.Παρουσιάστηκε στο: 1st World Summit on the Knowledge Society. 24-28 September 2008, Athens, GreeceSpringer VerlagBibliographic citation: S. Christodoulakis, M.Foukarakis , L.Ragia , "Spatial information retrieval from images using ontologies and semantic maps ", In 2008 1st World Sum. on the Knowl. Soc. , pp.549-556.doi :10.1007/978-3-540-87781-3_59full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:350112012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectSupport for interoperability between owl based and XML schema based applicationsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()The XS2OWLhttp://purl.tuc.gr/dl/dias/248ACC70-28CC-4A5E-960A-4DA51E16A44EPublished at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: We present in this paper a framework that provides support for interoperability between XML +Schema based and OWL based applications. In particular, we describe how the information +exchange between such applications is achieved, through the transformations of XML +documents to OWL/RDF descriptions and of OWL/RDF descriptions to (parts of) valid XML +documents. This functionality is built on top of OWL ontologies that fully capture the semantics +of the XML Schemas. These ontologies are the outcome of the application of the XS2OWL +mapping model that we have developed on an XML Schema. This way, the work reported here +integrates and extends our previous work on the XS2OWL mapping model to take into account, +in addition to the transformation of XML Schemas to OWL-DL ontologies, the transformation +of XML documents to OWL/RDF descriptions and vice versa.Παρουσιάστηκε στο: 2nd DELOS Conference On Digital Libraries, Tirrenia, Italy, DecemberBibliographic citation: C.Tsinaraki, S. Christodoulakis ,"Support for interoperability between owl based and XML schema based a pplications " presented at 2nd DELOS Conference On Digital Libraries, Tirrenia, Italy, December 2007.posterinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:350322012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectInteroperability of XML schema applications with owl domain knowledge and semantic web toolsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()XS2OWL Modelhttp://purl.tuc.gr/dl/dias/06C2AD45-6FC9-4DDC-9700-103A18B2478410.1007/978-3-540-76848-7_57Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: Several standards are expressed using XML Schema syntax, since the XML is the default standard for data exchange in the Internet. However, several applications need semantic support offered by domain ontologies and semantic Web tools like logic-based reasoners. Thus, there is a strong need for interoperability between XML Schema and OWL. This can be achieved if the XML schema constructs are expressed in OWL, where the enrichment with OWL domain ontologies and further semantic processing are possible. After semantic processing, the derived OWL constructs should be converted back to instances of the original schema. We present in this paper XS2OWL, a model and a sys-tem that allow the transformation of XML Schemas to OWL-DL constructs. These constructs can be used to drive the automatic creation of OWL domain ontologies and individuals. The XS2OWL transformation model allows the cor-rect conversion of the derived knowledge from OWL-DL back to XML con-structs valid according to the original XML Schemas, in order to be used trans-parently by the applications that follow XML Schema syntax of the standards.Παρουσιάστηκε στο: In the proceedings of the 6th International Conference on Ontologies, DataBases, and Applications of SemanticsSpringer VerlagBibliographic citation: C.Tsinaraki, S. Christodoulakis ,Interoperability of XML schema applications with owl domain knowledge and semantic web tools " ,In 2007 proc. of the 6th Int.l Conf. on Ontologies, DataB. and Ap. of Semantics , pp.850-869 .doi :10.1007/978-3-540-76848-7_57full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:350722012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectXS2OWL: A Formal model and a system for enabling XML schema applications to interoperate with OWLDL domain knowledge and semantic web toolsΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Chrisa Tsinaraki()http://purl.tuc.gr/dl/dias/0ECE7655-21C5-4512-A32A-E660759F684610.1007/978-3-540-77088-6_12Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: The domination of XML in the Internet for data exchange has led to the development of standards with XML Schema syntax for several application domains. Advanced semantic support, provided by domain ontologies and se-mantic Web tools like logic-based reasoners, is still very useful for many appli-cations. In order to provide it, interoperability between XML Schema and OWL is necessary so that XML schemas can be converted to OWL. This way, the semantics of the standards can be enriched with domain knowledge encoded in OWL domain ontologies and further semantic processing may take place. In or-der to achieve interoperability between XML Schema and OWL, we have de-veloped XS2OWL, a model and a system that are presented in this paper and enable the automatic transformation of XML Schemas in OWL-DL. XS2OWL also enables the consistent transformation of the derived knowledge (individu-als) from OWL-DL to XML constructs that obey the original XML Schemas.Παρουσιάστηκε στο: In the proceedings of the 1st DELOS Conference,Springer VerlagBibliographic citation: C.Tsinaraki , S. Christodoulakis , "XS2OWL: A Formal model and a system for enabling XML schema applications to interoperate with OWLDL +domain knowledge and semantic web tools ",In 2007 proc. of the 1st DELOS Conf., pp. 124-136 .doi :10.1007/978-3-540-77088-6_12full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:351312012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectQuerying MOF repositories: The design and Implementation of the query metamodel language (QML)Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)F. Kazasis ()G. Kotopoulos ()http://purl.tuc.gr/dl/dias/22523810-6649-47B1-8637-FBB3B72E3C7810.1109/DEST.2007.372001 Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: In a Digital Business Ecosystem (DBE) information on the businesses and the services they provide may be described in terms of models and data which are used to semantically discover partners and services. The Object Management Group (OMG) defines a four layered modelling architecture, the Model Driven Architecture (MDA), which provides mechanisms for rapid development of modelling languages addressing domain problems using the Meta Object Facility (MOF). MOF incorporates object oriented concepts and is a subset of UML. Furthermore, as users typically don’t know how to make requests, the system has to be tolerant. The Query Metamodel Language (QML) is a language that ex-ploits the Object Constraint Language (OCL) (which is very closely associated with UML and therefore MOF) to provide powerful query support on model repositories. This paper presents the motivation for QML along with its abstract syn-tax. It also introduces the framework for QML processing that incorporates information retrieval functionality and is used to formulate fuzzy queries using the extended boolean model. It describes how QML is integrated in the MOF architecture and how semantic expansion of queries and evaluation can be done in an effective way.Presented on: IEEEBibliographic citation: G. Kotopoulos , F. Kazasis ,S. Christodoulakis , "Querying MOF repositories: The design and Implementation of the query metamodel language (QML) " ,in 2007 Int. Conf. on Digital Ecos. and Techn. ,pp.373 - 378 , doi: 10.1109/DEST.2007.3720full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:351532012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObject A Framework and an architecture for supporting interoperability between digital libraries and eLearning applications Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Polyxeni Arapi()Nektarios Moumoutzis()Manolis Mylonakis()The METS/SCORM transformation componenthttp://purl.tuc.gr/dl/dias/CEB5EDA6-51C9-4506-96E5-35126142A46E10.1007/978-3-540-77088-6_13Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: One of the most important applications of Digital Libraries (DL) is learning. However, DLs and their standards have been developed independently on eLearning applications and their standards, raising interoperability issues between digital libraries and eLearning applications. In order to enable the development of eLearning applications that easily exploit DL contents it is crucial to bridge the interoperability gap between digital libraries and eLearning applications. For this purpose, a generic interoperability framework has been developed that could also be applied to other types of applications which are built on top of digital libraries, although this paper focuses on the detailed requirements of the eLearning applications. In this context, a framework and an algorithm for supporting personalization in elearning applications has been developed that performs automatic, on-demand, creation of personalized learning experiences using reusable (audiovisual) learning objects, taking into account the learner profiles and a set of abstract training scenarios (pedagogical templates). From a technical point of view, all the framework components have been organized into a service-oriented Architecture that Supports Interoperability between Digital Libraries and ELearning Applications (ASIDE). A prototype of the ASIDE Framework has been implemented.Παρουσιάστηκε στο: In the Proceedings of the DELOS Conference on Digital Libraries, Tirrenia, Pisa, Italy, February 2007 Springer VerlagBibliographic citation: P. Arapi, N. Moumoutzis, M. Mylonakis, S. Christodoulakis , "A framework and an architecture for supporting interoperability between digital libraries and eLearning applications ", in 2007 Delos Con. on Digital Libr., pp.137-146. doi :10.1007/978-3-540-77088-6_13full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:351532012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObject A Framework and an architecture for supporting interoperability between digital libraries and eLearning applications Χριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Polyxeni Arapi()Nektarios Moumoutzis()Manolis Mylonakis()The METS/SCORM transformation componenthttp://purl.tuc.gr/dl/dias/CEB5EDA6-51C9-4506-96E5-35126142A46E10.1007/978-3-540-77088-6_13Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: One of the most important applications of Digital Libraries (DL) is learning. However, DLs and their standards have been developed independently on eLearning applications and their standards, raising interoperability issues between digital libraries and eLearning applications. In order to enable the development of eLearning applications that easily exploit DL contents it is crucial to bridge the interoperability gap between digital libraries and eLearning applications. For this purpose, a generic interoperability framework has been developed that could also be applied to other types of applications which are built on top of digital libraries, although this paper focuses on the detailed requirements of the eLearning applications. In this context, a framework and an algorithm for supporting personalization in elearning applications has been developed that performs automatic, on-demand, creation of personalized learning experiences using reusable (audiovisual) learning objects, taking into account the learner profiles and a set of abstract training scenarios (pedagogical templates). From a technical point of view, all the framework components have been organized into a service-oriented Architecture that Supports Interoperability between Digital Libraries and ELearning Applications (ASIDE). A prototype of the ASIDE Framework has been implemented.Παρουσιάστηκε στο: In the Proceedings of the DELOS Conference on Digital Libraries, Tirrenia, Pisa, Italy, February 2007 Springer VerlagBibliographic citation: P. Arapi, N. Moumoutzis, M. Mylonakis, S. Christodoulakis , "A framework and an architecture for supporting interoperability between digital libraries and eLearning applications ", in 2007 Delos Con. on Digital Libr., pp.137-146. doi :10.1007/978-3-540-77088-6_13full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:352312012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectOntology-driven semantic ranking for natural language disambiguation in the ontoNL frameworkΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Anastasia Karanastasi()The OntoNL Semantic Disambiguation Algorithmhttp://purl.tuc.gr/dl/dias/E8C78940-8BA8-4986-AF22-2101D5989FDC10.1007/978-3-540-72667-8_32Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: The measurement of the semantic relatedness has many applications in natural language processing, and many different measures have been proposed. Most of these measures use WordNet as their central resource and not domain ontologies of a particular context. We propose and evaluate a semantic relatedness measure for OWL domain ontologies that concludes to the semantic ranking of ontological, grammatically-related structures. This procedure is used to disambiguate in a particular domain of context and represent in an ontology query language, natural language expressions. The ontology query language that we use is the SPARQL. The construction of the queries is automated and also dependent on the semantic relatedness measurement of ontology concepts. The methodology has been successfully integrated into the OntoNL Framework, a natural language interface generator for knowledge repositories. The experimentations show a good performance in a number of OWL ontologies. +Παρουσιάστηκε στο: Ιn the Proceedings of the 4th European Semantic Web Conference (ESWC), Innsbruck, Austria, 3-7 JuneSpringer VerlagBibliographic citation: A. Karanastasi , S. Christodoulakis , "Ontology-driven semantic ranking for natural language disambiguation in the ontoNL framework ", in 2007 4th Eur. Sem. Web Conf. (ESWC) ,pp.443-457 .doi :10.1007/978-3-540-72667-8_32full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+
oai:dlib.tuc.gr:352512012-10-10T00:00:00Z28
info:eu-repo/semantics/conferenceObjectSemantic processing of natural language queries in the OntoNL frameworkΧριστοδουλακης Σταυρος(http://users.isc.tuc.gr/~schristodoulakis)Christodoulakis Stavros(http://users.isc.tuc.gr/~schristodoulakis)Anastasia Karanastasi()The OntoNL Semantic Relatedness Measurehttp://purl.tuc.gr/dl/dias/528BC460-BA5C-4D16-9ABD-469A02EC2E8710.1109/ICSC.2007.36Published at: 2015-10-04eninfo:eu-repo/semantics/openAccessΌροι χρήσης: Μη διαθέσιμοLicense: http://creativecommons.org/licenses/by/4.0/Issued on: 2007Summarization: The OntoNL Framework provides an architecture and +re-usable components for automating as much as possible +the building of natural language interfaces to information +systems. In addition to the syntactic analysis components, +OntoNL has semantic analysis components which exploit +domain ontologies to provide better disambiguation of the +user input. We present in this paper the algorithms used +for semantic processing of the natural language queries, as +well as an ontology-driven semantic relatedness measure +developed for this purpose. We also present extensive evaluation +results with different ontologies using human subjects.Presented on: Bibliographic citation: A. Karanastasi , S. Christodoulakis , "Semantic processing of natural language queries in the ontoNL framework ", in 2007 IEEE Int. Conf. on Sem. Comp. (IEEE ICSC) .doi :10.1109/ICSC.2007.36full paperinfo:eu-repo/grantAgreement/EC/FP7/246686
+1585732293449:828
diff --git a/samples/openaire3/identify.xml b/samples/openaire3/identify.xml new file mode 100644 index 0000000..bc4e9eb --- /dev/null +++ b/samples/openaire3/identify.xml @@ -0,0 +1,36 @@ + +2020-04-01T09:06:59Z +https://dias.library.tuc.gr/oaiHandler + +Technical University of Crete - Digital Library +https://dias.library.tuc.gr/oaiHandler +2.0 +pappas@isc.tuc.gr +2012-01-01T00:00:00Z +persistent +YYYY-MM-DDThh:mm:ssZ +gzip +deflate + + +oai +dlib.tuc.gr +: +oai:dlib.tuc.gr:1002 + + + + +OCLC's OAICat Repository Framework + +Jeffrey A. Young +jyoung@oclc.org +OCLC + +1.5.48 +http://alcme.oclc.org/oaicat/oaicat_icon.gif +http://www.oclc.org/research/software/oai/cat.shtm + + + + diff --git a/src/main/java/eu/dnetlib/validator2/engine/CrisClass.java b/src/main/java/eu/dnetlib/validator2/engine/CrisClass.java new file mode 100644 index 0000000..d2135f0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/CrisClass.java @@ -0,0 +1,85 @@ +package eu.dnetlib.validator2.engine; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSSerializer; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +public class CrisClass { + + private String classId; + private String ClassSchemeId; + private String startDate; + private String endDate; + + // Maybe will change to constructor calling the private default constructor. Will see + public static CrisClass getInstance(Node node) throws XPathExpressionException, ParserConfigurationException { + CrisClass instance = new CrisClass(); + + Document newXMLDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + Element root = newXMLDocument.createElement("root"); + newXMLDocument.appendChild(root); + Node copyNode = newXMLDocument.importNode(node, true); + root.appendChild(copyNode); + printXMLDocument(newXMLDocument); + + XPathFactory factory = XPathFactory.newInstance(); + XPath xPath = factory.newXPath(); + + instance.setClassId((String) xPath.evaluate("//cfClassId/text()", newXMLDocument, XPathConstants.STRING)); + instance.setClassSchemeId((String) xPath.evaluate("//cfClassSchemeId/text()", newXMLDocument, XPathConstants.STRING)); + instance.setStartDate((String) xPath.evaluate("//cfStartDate/text()", newXMLDocument, XPathConstants.STRING)); + instance.setEndDate((String) xPath.evaluate("//cfEndDate/text()", newXMLDocument, XPathConstants.STRING)); + + return instance; + } + + // Not sure of the effect of this method. Implemented as in the original source. + private static void printXMLDocument(Document document) { + DOMImplementationLS domImplementationLS = (DOMImplementationLS) document.getImplementation(); + LSSerializer lsSerializer = domImplementationLS.createLSSerializer(); + lsSerializer.writeToString(document); + } + + private CrisClass() {} + + public String getClassId() { + return classId; + } + + public void setClassId(String classId) { + this.classId = classId; + } + + public String getClassSchemeId() { + return ClassSchemeId; + } + + public void setClassSchemeId(String classSchemeId) { + ClassSchemeId = classSchemeId; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/Helper.java b/src/main/java/eu/dnetlib/validator2/engine/Helper.java new file mode 100644 index 0000000..82689ae --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/Helper.java @@ -0,0 +1,304 @@ +package eu.dnetlib.validator2.engine; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Builders.ElementSpecBuilder; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.RequirementLevel; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +public class Helper { + + private static final String EMPTY = ""; + + public static boolean isEmpty(String s) { + return (canonicalize(s).isEmpty()); + } + + public static String ensurePropertyIsPresent(String propertyName, Supplier propertySupplier) { + return ensureNonEmpty(propertySupplier.get(), "Empty property: " + propertyName); + } + + public static String readPropertyAndErrIfNotFound(String propertyName, Map map) { + return ensurePropertyIsPresent(propertyName, () -> map.get(propertyName)); + } + + public static String ensureNonEmpty(String value, String errorMessage) { + return ensureNonEmpty(value, () -> new RuntimeException(errorMessage)); + } + + public static String ensureNonEmpty(String value, Supplier exceptionSupplier) { + String canonical = canonicalize(value); + if (canonical.isEmpty()) { + throw exceptionSupplier.get(); + } + return canonical; + } + + public static String canonicalize(String s) { + if (s == null) return EMPTY; + return s.trim(); + } + + private static String asString(T t) { + return t == null ? "" : t.toString(); + } + + public static String stringify(Rule rule) { + return rule.getClass().getSimpleName() + "[" + + rule.getContext().getProperties(). + stream(). + map(prop -> prop.getName() + "=" + prop.getValue()). + collect(Collectors.joining(",")) + "]"; + } + + public static boolean predicateSucceedsForAllNodes(NodeList nodes, + Function nodeReader, + Predicate predicate) { + int len = nodes.getLength(); + if (len == 0) return false; // Is used in original implementation + for (int i = 0; i < len; i++) { + T t = nodeReader.apply(nodes.item(i)); + if (!predicate.test(t)) return false; + } + return true; + } + + public static boolean predicateSucceedsForAtLeastOneNode(NodeList nodes, + Function nodeReader, + Predicate predicate) { + int len = nodes.getLength(); + for (int i = 0; i < len; i++) { + T t = nodeReader.apply(nodes.item(i)); + if (predicate.test(t)) return true; + } + return false; + } + + public static boolean predicateFailsForAllNodes(NodeList nodes, + Function nodeReader, + Predicate predicate) { + int len = nodes.getLength(); + for (int i = 0; i < len; i++) { + T t = nodeReader.apply(nodes.item(i)); + if (predicate.test(t)) return false; + } + return true; + } + + public static boolean predicateSucceedsForExactlyOneNode(NodeList nodes, + Function nodeReader, + Predicate predicate) { + int len = nodes.getLength(); + return len == 1 && predicate.test(nodeReader.apply(nodes.item(0))); + } + + public static NodeList nodesThatMatchThePredicate(NodeList nodes, + Function nodeReader, + Predicate predicate) { + List filtered = new ArrayList<>(); + if (nodes != null) { + int len = nodes.getLength(); + for (int i = 0; i < len; i++) { + Node node = nodes.item(i); + // System.out.println("Getting node: " + node); + T t = nodeReader.apply(node); + // System.out.println("Read node value: " + t); + if (predicate.test(t)) { + filtered.add(node); + } + } + } + // System.out.println(filtered.size() + " nodes matched the predicate"); + return new ListOfNodes(filtered); + } + + public static String getAttributeValue(Node node, String attrName) { + if (node == null || !node.hasAttributes()) { return null; } + Node attr = node.getAttributes().getNamedItem(attrName); + if (attr == null) { return null; } + return attr.getNodeValue(); + } + + public static Predicate createCardinalityPredicate(long min, long max, boolean isInclusive) { + return isInclusive + ? (Integer len) -> min <= len && len <= max + : (Integer len) -> min < len && len < max; + } + + + public static ElementSpecBuilder buildElement(String elementName, + RequirementLevel requirementLevel, + Cardinality cardinality) { + + if (requirementLevel == RequirementLevel.MANDATORY) { + return Builders.forMandatoryElement(elementName, cardinality); + } + else if (requirementLevel == RequirementLevel.MANDATORY_IF_APPLICABLE) { + Builders.forMandatoryIfApplicableElement(elementName, cardinality, null); + } + else if (requirementLevel == RequirementLevel.OPTIONAL) { + if (cardinality == Cardinality.ONE_TO_N) { + return Builders.forOptionalRepeatableElement(elementName); + } + else { + return Builders.forOptionalElement(elementName); + } + } + else if (requirementLevel == RequirementLevel.RECOMMENDED) { + if (cardinality == Cardinality.ONE_TO_N) { + return Builders.forRecommendedRepeatableElement(elementName); + } + else { + return Builders.forRecommendedElement(elementName); + } + } + throw new RuntimeException("Not reachable"); + } + + public static ElementSpecBuilder addAttribute(ElementSpecBuilder builder, + String attrName, + RequirementLevel requirementLevel) { + + if (requirementLevel == RequirementLevel.MANDATORY) { + return builder.withMandatoryAttribute(attrName); + } + else if (requirementLevel == RequirementLevel.OPTIONAL) { + return builder.withOptionalAttribute(attrName); + } + else if (requirementLevel == RequirementLevel.RECOMMENDED) { + return builder.withRecommendedAttribute(attrName); + } + throw new RuntimeException("Not reachable"); + } + + public static class URLResolver { + /* + TODO + In case of network error all subsequent evaluations of same url string will be false (incorrectly) + */ + private static final ConcurrentHashMap resolvedURLs = new ConcurrentHashMap<>(); + + public static boolean resolve(String URLString) { + return resolvedURLs.computeIfAbsent(URLString, u -> { + HttpURLConnection huc = null; + try { + URL url = new URL(u); + huc = (HttpURLConnection) url.openConnection(); + huc.setRequestMethod("HEAD"); + return huc.getResponseCode() == HttpURLConnection.HTTP_OK; + } catch (IOException e) { + return false; + } finally { + if (huc != null) huc.disconnect(); + } + }); + } + + } + + public static class Diagnostics { + + public static > RuleDiagnostics systemOut() { + return new PrintStreamDiagnostics<>(System.out); + } + + public static > RuleDiagnostics systemErr() { + return new PrintStreamDiagnostics<>(System.err); + } + + } + + private static class PrintStreamDiagnostics> implements RuleDiagnostics { + + private final PrintStream printStream; + + private PrintStreamDiagnostics(PrintStream printStream) { + this.printStream = printStream; + } + + @Override + public void success(R rule, T t) { + printStream.println("Success: value " + asString(t) + " passes the " + rule.getContext().getIdProperty().getValue()); + } + + @Override + public void failure(R rule, T t) { + printStream.println("Failure: value " + asString(t) + " fails the " + rule.getContext().getIdProperty().getValue()); + } + + @Override + public void error(R rule, T t, Throwable err) { + String trace = stackTraceOf(err); + printStream.println( + "Error: value " + asString(t) + + " raised an error to the" + rule.getContext().getIdProperty().getValue() + ": " + trace + ); + } + } + + private static class ListOfNodes implements NodeList { + + private final List nodes; + + private ListOfNodes(List nodes) { + this.nodes = nodes; + } + + @Override + public Node item(int index) { + return nodes.get(index); + } + + @Override + public int getLength() { + return nodes.size(); + } + } + + private static String stackTraceOf(Throwable t) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + return sw.toString(); + } + + public static void forEachZipEntry(File zipFile, + int bufferSize, + Predicate filter, + BiConsumer zipEntryConsumer) throws IOException { + if (zipEntryConsumer == null) return; + try (ZipInputStream zip = new ZipInputStream(new FileInputStream(zipFile))) { + ZipEntry entry; + while ((entry = zip.getNextEntry()) != null) { + if (filter == null || filter.test(entry)) { + ByteArrayOutputStream out = new ByteArrayOutputStream(bufferSize); + byte[] bytesIn = new byte[bufferSize]; + int read = 0; + while((read = zip.read(bytesIn)) != -1) { + out.write(bytesIn, 0, read); + } + zipEntryConsumer.accept(entry.getName(), new ByteArrayInputStream(out.toByteArray())); + } + zip.closeEntry(); + } + } + } + + public static final Predicate ZIP_ENTRY_IS_FILE = zipEntry -> !zipEntry.isDirectory(); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/Predicates.java b/src/main/java/eu/dnetlib/validator2/engine/Predicates.java new file mode 100644 index 0000000..c8360a0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/Predicates.java @@ -0,0 +1,89 @@ +package eu.dnetlib.validator2.engine; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class Predicates { + + // The following are not used + /* + public static Predicate and(final Iterable> predicates) { + return t -> { + for(Predicate predicate: predicates) { + if (!predicate.test(t)) return false; + } + return true; + }; + } + + public static Predicate or(final Iterable> predicates) { + return t -> { + for(Predicate predicate: predicates) { + if (predicate.test(t)) return true; + } + return false; + }; + } + + // horn? + public static Predicate conditional(Predicate condition, final Iterable> predicates) { + return t -> { + if (!condition.test(t)) return true; + return and(predicates).test(t); + }; + } + */ + + public static class SetOfCaseInsensitiveAllowedValues implements Predicate { + + private final Set allowedValues; + + public SetOfCaseInsensitiveAllowedValues(String[] allowedValues) { + this.allowedValues = Stream.of(allowedValues). + filter(Objects::nonNull). + map(String::trim). + filter(term -> !term.isEmpty()). + map(String::toLowerCase). // we want to ignore case for equality + collect(Collectors.toCollection(HashSet::new));; + } + + @Override + public boolean test(String s) { + String textToTest = Helper.canonicalize(s); + if (textToTest.isEmpty()) return false; + return allowedValues.contains(textToTest.toLowerCase()); // we want to ignore case for equality + } + + public boolean isEmpty() { + return allowedValues.isEmpty(); + } + } + + public static Predicate all(Iterable> rules) { + return t -> { + for(Predicate predicate: rules) { + if (!predicate.test(t)) return false; + } + return true; + }; + } + + public static Predicate any(final Iterable> rules) { + return t -> { + for(Predicate predicate: rules) { + if (predicate.test(t)) return true; + } + return false; + }; + } + + public static Predicate not(Rule rule) { + return t -> !rule.test(t); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/PropertyDriven.java b/src/main/java/eu/dnetlib/validator2/engine/PropertyDriven.java new file mode 100644 index 0000000..f4cdb41 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/PropertyDriven.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine; + +import java.util.Map; + +public interface PropertyDriven { + + void readFrom(Map map); + + void writeTo(Map map); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/Reporter.java b/src/main/java/eu/dnetlib/validator2/engine/Reporter.java new file mode 100644 index 0000000..a8ac6e8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/Reporter.java @@ -0,0 +1,40 @@ +package eu.dnetlib.validator2.engine; + +public class Reporter> { + + private final RuleDiagnostics diagnostics; + + public Reporter(RuleDiagnostics diagnostics) { + this.diagnostics = diagnostics; + } + + public void reportSuccessFor(R rule, T t) { + try { + diagnostics.success(rule, t); + } + catch(Throwable throwable) { + System.err.println("Failed to report success of applying " + rule + " to value: " + t); + throwable.printStackTrace(); + } + } + + public void reportFailureFor(R rule, T t) { + try { + diagnostics.failure(rule, t); + } + catch(Throwable throwable) { + System.err.println("Failed to report failure of applying " + rule + " to value: " + t); + throwable.printStackTrace(); + } + } + + public void reportErrorFor(R rule, T t, Throwable throwable) { + try { + diagnostics.error(rule, t, throwable); + } + catch(Throwable throwable1) { + System.err.println("Failed to report error of applying " + rule + " to value: " + t); + throwable1.printStackTrace(); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/Rule.java b/src/main/java/eu/dnetlib/validator2/engine/Rule.java new file mode 100644 index 0000000..4257d1b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/Rule.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine; + +import java.util.function.Predicate; + +public interface Rule extends Predicate { + + C getContext(); + + @Override + boolean test(T t) throws RuleEvaluationException; +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleBuilder.java b/src/main/java/eu/dnetlib/validator2/engine/RuleBuilder.java new file mode 100644 index 0000000..c2c206d --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleBuilder.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine; + +import java.util.Map; + +public interface RuleBuilder { + + R build(); + + R buildFrom(Map map); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleContext.java b/src/main/java/eu/dnetlib/validator2/engine/RuleContext.java new file mode 100644 index 0000000..4137aa5 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleContext.java @@ -0,0 +1,27 @@ +package eu.dnetlib.validator2.engine; + +import java.util.Collection; +import java.util.Map; + +public interface RuleContext extends PropertyDriven { + + String ID_PROPERTY_NAME = "id"; + + RuleProperty getIdProperty(); + + Collection getProperties(); + + @Override + default void readFrom(final Map map) { + getProperties().forEach(prop -> { + prop.readFrom(map); + }); + } + + @Override + default void writeTo(final Map map) { + getProperties().forEach(prop -> { + prop.writeTo(map); + }); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleDiagnostics.java b/src/main/java/eu/dnetlib/validator2/engine/RuleDiagnostics.java new file mode 100644 index 0000000..27e626c --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleDiagnostics.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine; + +public interface RuleDiagnostics> { + + void success(R rule, T t); + + void failure(R rule, T t); + + void error(R rule, T t, Throwable err); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleEngine.java b/src/main/java/eu/dnetlib/validator2/engine/RuleEngine.java new file mode 100644 index 0000000..2f5f519 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleEngine.java @@ -0,0 +1,22 @@ +package eu.dnetlib.validator2.engine; + +public class RuleEngine { + + public static > void applyAndReport(R rule, T t, Reporter reporter) { + + if (reporter == null) throw new IllegalArgumentException("Reporter cannot be null"); + if (rule == null) throw new IllegalArgumentException("Rule cannot be null"); + + try { + if(rule.test(t)) { + reporter.reportSuccessFor(rule, t); + } + else { + reporter.reportFailureFor(rule, t); + } + } catch (Throwable throwable) { + reporter.reportErrorFor(rule, t, throwable); + } + } + +} \ No newline at end of file diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleEvaluationException.java b/src/main/java/eu/dnetlib/validator2/engine/RuleEvaluationException.java new file mode 100644 index 0000000..a97a008 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleEvaluationException.java @@ -0,0 +1,14 @@ +package eu.dnetlib.validator2.engine; + +public class RuleEvaluationException extends RuntimeException { + + public RuleEvaluationException(String message, Throwable cause) { + super(message, cause); + } + + public RuleEvaluationException(Throwable cause) { + super(cause); + } + + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/RuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/RuleProperty.java new file mode 100644 index 0000000..f6159d1 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/RuleProperty.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine; + +public interface RuleProperty extends PropertyDriven { + + String getName(); + + String getValue(); + + void setValue(String value); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/Status.java b/src/main/java/eu/dnetlib/validator2/engine/Status.java new file mode 100644 index 0000000..906d41f --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/Status.java @@ -0,0 +1,7 @@ +package eu.dnetlib.validator2.engine; + +public enum Status { + SUCCESS, + FAILURE, + ERROR +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/AbstractRuleBuilder.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/AbstractRuleBuilder.java new file mode 100644 index 0000000..20b363d --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/AbstractRuleBuilder.java @@ -0,0 +1,20 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.*; + +abstract class AbstractRuleBuilder implements RuleBuilder { + + C context; + + AbstractRuleBuilder(C context) { + this.context = context; + } + + void ensureContextIsValid() { + for (RuleProperty prop : context.getProperties()) { + if (Helper.isEmpty(prop.getValue())) { + throw new IllegalStateException("Empty value for property " + prop.getName()); + } + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysErrRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysErrRule.java new file mode 100644 index 0000000..10f031a --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysErrRule.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleEvaluationException; + +public class AlwaysErrRule extends SimpleRule { + public AlwaysErrRule() { + super(new SimpleContext("Err"), (T t) -> { throw new RuleEvaluationException(null); }); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysFailRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysFailRule.java new file mode 100644 index 0000000..ed67e70 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysFailRule.java @@ -0,0 +1,7 @@ +package eu.dnetlib.validator2.engine.builtins; + +public class AlwaysFailRule extends SimpleRule { + public AlwaysFailRule() { + super(new SimpleContext("fail"), (T t) -> false); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysSucceedRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysSucceedRule.java new file mode 100644 index 0000000..6559fcd --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/AlwaysSucceedRule.java @@ -0,0 +1,8 @@ +package eu.dnetlib.validator2.engine.builtins; + +public class AlwaysSucceedRule extends SimpleRule { + + public AlwaysSucceedRule() { + super(new SimpleContext("succeed"), (T t) -> true); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/AndRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/AndRule.java new file mode 100644 index 0000000..9bb212a --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/AndRule.java @@ -0,0 +1,12 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Predicates; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; + +public class AndRule extends SimpleRule { + + public AndRule(C ctx, Iterable> rules) { + super(ctx, Predicates.all(rules)); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/ConditionalRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/ConditionalRule.java new file mode 100644 index 0000000..7a59fd1 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/ConditionalRule.java @@ -0,0 +1,31 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleEvaluationException; + +public class ConditionalRule extends ForwardingRule { + + public enum WhenConditionFails { + RULE_FAILS, + RULE_SUCCEEDS + } + + protected final Rule conditionRule; + protected final WhenConditionFails whenConditionFails; + + public ConditionalRule(Rule actualRule, Rule conditionRule, WhenConditionFails whenConditionFails) { + super(actualRule); + this.conditionRule = conditionRule; + this.whenConditionFails = whenConditionFails; + } + + @Override + public boolean test(T t) throws RuleEvaluationException { + if (conditionRule.test(t)) { + return super.test(t); + } + else { + return whenConditionFails == WhenConditionFails.RULE_SUCCEEDS; + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/ForwardingRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/ForwardingRule.java new file mode 100644 index 0000000..c04f82b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/ForwardingRule.java @@ -0,0 +1,24 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleEvaluationException; + +public class ForwardingRule implements Rule { + + protected final Rule rule; + + public ForwardingRule(Rule rule) { + this.rule = rule; + } + + @Override + public C getContext() { + return rule.getContext(); + } + + @Override + public boolean test(T t) throws RuleEvaluationException { + return rule.test(t); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleContext.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleContext.java new file mode 100644 index 0000000..1a3abf8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleContext.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.engine.builtins; + +public class SimpleContext extends StandardRuleContext { + + public SimpleContext(String valueOfIdProperty) { + getIdProperty().setValue(valueOfIdProperty); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleRule.java new file mode 100644 index 0000000..c5ec45b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/SimpleRule.java @@ -0,0 +1,39 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.NodeList; + +import java.util.function.Predicate; + +public class SimpleRule implements Rule { + + private static final Logger logger = LogManager.getLogger(); + + private final C context; + private final Predicate predicate; + + public SimpleRule(C context, Predicate predicate) { + this.context = context; + this.predicate = predicate; + } + + @Override + public C getContext() { + return context; + } + + @Override + public boolean test(T t) throws RuleEvaluationException { + try { + logger.debug("Applying {}", context.getIdProperty().getValue()); + return predicate.test(t); + } catch (Throwable throwable) { + // Catch all exceptions here to simplify predicate code + throw new RuleEvaluationException(throwable.getMessage(), throwable); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardBooleanRuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardBooleanRuleProperty.java new file mode 100644 index 0000000..216ae4e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardBooleanRuleProperty.java @@ -0,0 +1,34 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.contexts.BooleanRuleProperty; + +class StandardBooleanRuleProperty extends StandardRuleProperty implements BooleanRuleProperty { + + private boolean isTrue; + + StandardBooleanRuleProperty(String name) { + super(name); + super.setValue(Boolean.toString(false)); + } + + @Override + public boolean isTrue() { + return isTrue; + } + + @Override + public void setTrue(boolean isTrue) { + this.isTrue = isTrue; + super.setValue(Boolean.toString(isTrue)); + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + try { + super.setValue(value); + isTrue = Boolean.parseBoolean(getValue()); + } catch (RuntimeException re) { + throw new IllegalArgumentException("Not a boolean for property " + getName()); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardCrisClassXMLContextWithVocabulary.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardCrisClassXMLContextWithVocabulary.java new file mode 100644 index 0000000..137d9c3 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardCrisClassXMLContextWithVocabulary.java @@ -0,0 +1,28 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.CrisClassSchemeContext; +import eu.dnetlib.validator2.engine.contexts.XMLCrisClassSchemeContextWithVocabulary; + +import java.util.ArrayList; +import java.util.Collection; + +class StandardCrisClassXMLContextWithVocabulary + extends StandardXMLContextWithVocabulary + implements XMLCrisClassSchemeContextWithVocabulary { + + private final StandardRuleProperty schemeId = new StandardRuleProperty(CrisClassSchemeContext.ID_PROPERTY_NAME); + + @Override + public StandardRuleProperty getCrisClassSchemeIdProperty() { + return schemeId; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(schemeId); + return props; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardFieldsProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardFieldsProperty.java new file mode 100644 index 0000000..27c0e11 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardFieldsProperty.java @@ -0,0 +1,23 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.contexts.FieldsProperty; + +class StandardFieldsProperty extends StandardRuleProperty implements FieldsProperty { + + private String[] xpaths; + + public StandardFieldsProperty(String name) { + super(name); + } + + public String[] getXpaths() { + return xpaths; + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + super.setValue(value); + xpaths = getValue().split(","); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardLongRuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardLongRuleProperty.java new file mode 100644 index 0000000..5a18ce2 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardLongRuleProperty.java @@ -0,0 +1,34 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.contexts.LongRuleProperty; + +public class StandardLongRuleProperty extends StandardRuleProperty implements LongRuleProperty { + + private long longValue; + + StandardLongRuleProperty(String name) { + super(name); + } + + @Override + public long getLongValue() { + return longValue; + } + + @Override + public void setLongValue(long value) { + this.longValue = value; + super.setValue(String.valueOf(value)); + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + try { + super.setValue(value); + longValue = Long.parseLong(getValue()); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Not a valid number for property " + getName()); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardNodeListActionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardNodeListActionProperty.java new file mode 100644 index 0000000..2f4bbe3 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardNodeListActionProperty.java @@ -0,0 +1,150 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.contexts.NodeListAction; +import eu.dnetlib.validator2.engine.contexts.NodeListActionProperty; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Predicate; + +class StandardNodeListActionProperty extends StandardRuleProperty implements NodeListActionProperty { + + private static final Map SUPPORTED_ACTIONS = new HashMap<>(); + + static { + Arrays.asList(new CUSTOM(), new ALL(), new ANY(), new NONE(), new ONE(), new LENGTH()).forEach(action -> + SUPPORTED_ACTIONS.put(action.name, action) + ); + } + + private NamedNodeListAction action; + + StandardNodeListActionProperty(String name) { + super(name); + } + + @Override + public String getValue() { + return action == null ? null : action.name; + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + NamedNodeListAction action = SUPPORTED_ACTIONS.get(value); + if (action == null) throw new IllegalArgumentException("Invalid node list action: " + value); + this.action = action; + } + + @Override + public boolean test(NodeList nodes, Predicate predicate) throws IllegalStateException { + if (action == null) throw new IllegalStateException("Node list action property is empty"); + return action.test(nodes, predicate); + } + + private static abstract class NamedNodeListAction implements NodeListAction { + final String name; + NamedNodeListAction(String name) { + this.name = name; + } + } + + private static class CUSTOM extends NamedNodeListAction { + + CUSTOM() { super("custom"); } + + @Override + public boolean test(NodeList nodes, Predicate predicate) throws IllegalStateException { + throw new IllegalStateException("Configuration error: a custom node list action was expected"); + } + } + + private static class ALL extends NamedNodeListAction { + + ALL() { + super("all"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean test(NodeList nodes, Predicate appliesToAllNodes) throws IllegalStateException { + return Helper.predicateSucceedsForAllNodes( + nodes, + Node::getNodeValue, + (Predicate)appliesToAllNodes + ); + } + } + + private static class ANY extends NamedNodeListAction { + + ANY() { + super(">0"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean test(NodeList nodes, Predicate applyToAtLeastOne) throws IllegalStateException { + return Helper.predicateSucceedsForAtLeastOneNode( + nodes, + Node::getNodeValue, + (Predicate)applyToAtLeastOne + ); + } + } + + private static class NONE extends NamedNodeListAction { // Success 0 + + NONE() { + super("0"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean test(NodeList nodes, Predicate applyToNone) throws IllegalStateException { + return Helper.predicateFailsForAllNodes( + nodes, + Node::getNodeValue, + (Predicate)applyToNone + ); + } + } + + private static class ONE extends NamedNodeListAction { // Success 1 + + ONE() { + super("1"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean test(NodeList nodes, Predicate applyToExactlyOne) throws IllegalStateException { + return Helper.predicateSucceedsForExactlyOneNode( + nodes, + Node::getNodeValue, + (Predicate) applyToExactlyOne + ); + } + } + + private static class LENGTH extends NamedNodeListAction { + LENGTH() { + super("length"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean test(NodeList nodes, Predicate lengthInRange) throws IllegalStateException { + return lengthOfNodesMatches(nodes, (Predicate)lengthInRange); + } + } + + private static boolean lengthOfNodesMatches(NodeList nodes, Predicate predicate) { + return predicate.test(nodes.getLength()); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRegularExpressionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRegularExpressionProperty.java new file mode 100644 index 0000000..251030d --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRegularExpressionProperty.java @@ -0,0 +1,29 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.contexts.RegularExpressionProperty; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +class StandardRegularExpressionProperty extends StandardRuleProperty implements RegularExpressionProperty { + + private static final ConcurrentHashMap compiledPatterns = new ConcurrentHashMap<>(); + + public StandardRegularExpressionProperty(String name) { + super(name); + } + + @Override + public boolean matches(String text) throws IllegalStateException, PatternSyntaxException { + String expression = getValue(); + if (Helper.isEmpty(expression)) { + throw new IllegalStateException("Empty regular expression for property " + getName()); + } + + Pattern pattern = compiledPatterns.computeIfAbsent(expression, Pattern::compile); + return pattern.matcher(text).matches(); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleContext.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleContext.java new file mode 100644 index 0000000..e5c5efc --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleContext.java @@ -0,0 +1,23 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleProperty; + +import java.util.Arrays; +import java.util.Collection; + +public class StandardRuleContext implements RuleContext { + + private final StandardRuleProperty id = + new StandardRuleProperty(RuleContext.ID_PROPERTY_NAME); + + @Override + public StandardRuleProperty getIdProperty() { + return id; + } + + @Override + public Collection getProperties() { + return Arrays.asList(id); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleDiagnostics.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleDiagnostics.java new file mode 100644 index 0000000..62ad4ac --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleDiagnostics.java @@ -0,0 +1,51 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleDiagnostics; +import eu.dnetlib.validator2.engine.Status; + +public class StandardRuleDiagnostics> implements RuleDiagnostics { + + private Status lastReportedStatus; + private R lastReportedRule; + private T lastReportedValue; + private Throwable lastReportedError; + + @Override + public void success(R rule, T t) { + setReported(Status.SUCCESS, rule, t, null); + } + + @Override + public void failure(R rule, T t) { + setReported(Status.FAILURE, rule, t, null); + } + + @Override + public void error(R rule, T t, Throwable err) { + setReported(Status.ERROR, rule, t, err); + } + + private void setReported(Status status, R rule, T value, Throwable error) { + this.lastReportedStatus = status; + this.lastReportedRule = rule; + this.lastReportedValue = value; + this.lastReportedError = error; + } + + public Status getLastReportedStatus() { + return lastReportedStatus; + } + + public Rule getLastReportedRule() { + return lastReportedRule; + } + + public T getLastReportedValue() { + return lastReportedValue; + } + + public Throwable getLastReportedError() { + return lastReportedError; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleProperty.java new file mode 100644 index 0000000..e69d3d8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardRuleProperty.java @@ -0,0 +1,51 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.RuleProperty; + +import java.util.Map; + +public class StandardRuleProperty implements RuleProperty { + + private final String name; + private String value; + + public StandardRuleProperty(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public void readFrom(Map map) { + /* + TODO Condition has been added to (hopefully) handle properly: + - optional properties (e.g. termsType in XMLVocabularyRule) + - private properties / not exposed to or set by the user (e.g. nodeListAction = "length" in XMLCardinalityRule) + These could/would not be provided from user map + */ + if (map.containsKey(getName())) { + setValue(map.get(getName())); + } + } + + @Override + public void writeTo(Map map) { + map.put(name, getValue()); + } + + @Override + public String getValue() { + return value; + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + String newValue = Helper.canonicalize(value); + if (newValue.isEmpty()) throw new IllegalArgumentException("Empty value for property " + name); + this.value = newValue; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardTermsProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardTermsProperty.java new file mode 100644 index 0000000..d66303b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardTermsProperty.java @@ -0,0 +1,26 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Predicates; +import eu.dnetlib.validator2.engine.contexts.TermsProperty; + +class StandardTermsProperty extends StandardRuleProperty implements TermsProperty { + + private Predicates.SetOfCaseInsensitiveAllowedValues terms; + + public StandardTermsProperty(String name) { + super(name); + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + super.setValue(value); + terms = new Predicates.SetOfCaseInsensitiveAllowedValues(getValue().split(",")); + if (terms.isEmpty()) throw new IllegalArgumentException("Empty value for terms property."); + } + + @Override + public boolean termExists(String text) { + return terms.test(text); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContext.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContext.java new file mode 100644 index 0000000..1328fe7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContext.java @@ -0,0 +1,35 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.*; + +import java.util.ArrayList; +import java.util.Collection; + +public class StandardXMLContext extends StandardRuleContext implements XMLContext { + + private final StandardXPathExpressionProperty xpath = + new StandardXPathExpressionProperty(XPathExpressionContext.PROPERTY_NAME); + private final StandardNodeListActionProperty nodeListAction = + new StandardNodeListActionProperty(NodeListContext.PROPERTY_NAME); + + + @Override + public NodeListActionProperty getNodeListActionProperty() { + return nodeListAction; + } + + @Override + public XPathExpressionProperty getXPathExpressionProperty() { + return xpath; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(xpath); + props.add(nodeListAction); + return props; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithCardinality.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithCardinality.java new file mode 100644 index 0000000..3cab8dd --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithCardinality.java @@ -0,0 +1,46 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.BooleanRuleProperty; +import eu.dnetlib.validator2.engine.contexts.CardinalityContext; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithCardinality; + +import java.util.ArrayList; +import java.util.Collection; + +public class StandardXMLContextWithCardinality + extends StandardXMLContext + implements XMLContextWithCardinality { + + private final StandardLongRuleProperty lowerBound = + new StandardLongRuleProperty(CardinalityContext.LOWER_BOUND_PROPERTY_NAME); + private final StandardLongRuleProperty upperBound = + new StandardLongRuleProperty(CardinalityContext.UPPER_BOUND_PROPERTY_NAME); + private final StandardBooleanRuleProperty isInclusive = + new StandardBooleanRuleProperty(CardinalityContext.IS_INCLUSIVE_PROPERTY_NAME); + + @Override + public StandardLongRuleProperty getLowerBoundProperty() { + return lowerBound; + } + + @Override + public StandardLongRuleProperty getUpperBoundProperty() { + return upperBound; + } + + @Override + public BooleanRuleProperty getIsInclusiveProperty() { + return isInclusive; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(lowerBound); + props.add(upperBound); + props.add(isInclusive); + return props; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithNotConfusedFields.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithNotConfusedFields.java new file mode 100644 index 0000000..ecfdb4e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithNotConfusedFields.java @@ -0,0 +1,29 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.FieldsProperty; +import eu.dnetlib.validator2.engine.contexts.NotConfusedFieldsContext; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithNotConfusedFields; + +import java.util.ArrayList; +import java.util.Collection; + +class StandardXMLContextWithNotConfusedFields + extends StandardXMLContext + implements XMLContextWithNotConfusedFields { + + private final StandardFieldsProperty fields = new StandardFieldsProperty(NotConfusedFieldsContext.PROPERTY_NAME); + + @Override + public FieldsProperty getFieldsProperty() { + return fields; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(fields); + return props; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithRegularExpression.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithRegularExpression.java new file mode 100644 index 0000000..2a4f61e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithRegularExpression.java @@ -0,0 +1,29 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.RegularExpressionContext; +import eu.dnetlib.validator2.engine.contexts.RegularExpressionProperty; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithRegularExpression; + +import java.util.ArrayList; +import java.util.Collection; + +class StandardXMLContextWithRegularExpression + extends StandardXMLContext + implements XMLContextWithRegularExpression { + + private final StandardRegularExpressionProperty regexp = + new StandardRegularExpressionProperty(RegularExpressionContext.PROPERTY_NAME); + + @Override + public RegularExpressionProperty getRegularExpressionProperty() { + return regexp; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(regexp); + return props; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithVocabulary.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithVocabulary.java new file mode 100644 index 0000000..edc111c --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXMLContextWithVocabulary.java @@ -0,0 +1,35 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleProperty; +import eu.dnetlib.validator2.engine.contexts.VocabularyContext; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithVocabulary; + +import java.util.ArrayList; +import java.util.Collection; + +class StandardXMLContextWithVocabulary + extends StandardXMLContext + implements XMLContextWithVocabulary { + + private final StandardTermsProperty terms = new StandardTermsProperty(VocabularyContext.TERMS_PROPERTY_NAME); + private final StandardRuleProperty termsType = new StandardRuleProperty(VocabularyContext.TERMS_TYPE_PROPERTY_NAME); + + @Override + public StandardTermsProperty getTermsProperty() { + return terms; + } + + @Override + public StandardRuleProperty getTermsTypeProperty() { + return termsType; + } + + @Override + public Collection getProperties() { + Collection props = new ArrayList<>(super.getProperties()); + props.add(terms); + props.add(termsType); + return props; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXPathExpressionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXPathExpressionProperty.java new file mode 100644 index 0000000..42f3a40 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/StandardXPathExpressionProperty.java @@ -0,0 +1,27 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.contexts.XPathExpressionProperty; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import javax.xml.xpath.XPathExpression; + +public class StandardXPathExpressionProperty extends StandardRuleProperty implements XPathExpressionProperty { + + public StandardXPathExpressionProperty(String name) { + super(name); + } + + @Override + public void setValue(String value) throws IllegalArgumentException { + XPathExpressionHelper.compile(Helper.canonicalize(value)); + super.setValue(value); + } + + public NodeList evaluate(Document doc) { + String xpath = Helper.canonicalize(getValue()); + return XPathExpressionHelper.nodeList(xpath, doc); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCardinalityRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCardinalityRule.java new file mode 100644 index 0000000..84f599f --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCardinalityRule.java @@ -0,0 +1,67 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.contexts.XMLContextWithCardinality; +import org.w3c.dom.NodeList; + +import java.util.Map; + +public class XMLCardinalityRule extends XMLRule { + + protected XMLCardinalityRule(XMLContextWithCardinality context) { + super(context, (NodeList nodes) -> + context.getNodeListActionProperty().test(nodes, context.cardinalityPredicate())); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + private Builder() { + super(new StandardXMLContextWithCardinality()); + context.getNodeListActionProperty().setValue("length"); + } + + public Builder setId(String id) throws IllegalArgumentException { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) throws IllegalArgumentException { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setRange(String greaterThan, String lessThan) throws IllegalArgumentException { + context.getLowerBoundProperty().setValue(greaterThan); + context.getUpperBoundProperty().setValue(lessThan); + return this; + } + + public Builder setRange(long greaterThan, long lessThan) { + context.getLowerBoundProperty().setLongValue(greaterThan); + context.getUpperBoundProperty().setLongValue(lessThan); + return this; + } + + public Builder setIsInclusive(boolean isInclusive) { + context.getIsInclusiveProperty().setTrue(isInclusive); + return this; + } + + @Override + public XMLCardinalityRule build() throws IllegalStateException { + ensureContextIsValid(); + return new XMLCardinalityRule(context); + } + + @Override + public XMLCardinalityRule buildFrom(Map map) throws IllegalStateException { + context.readFrom(map); + ensureContextIsValid(); + return new XMLCardinalityRule(context); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCrisClassVocabularyRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCrisClassVocabularyRule.java new file mode 100644 index 0000000..18e2c35 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLCrisClassVocabularyRule.java @@ -0,0 +1,80 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.contexts.TermsProperty; +import eu.dnetlib.validator2.engine.contexts.XMLCrisClassSchemeContextWithVocabulary; +import org.w3c.dom.NodeList; + +import java.util.Map; + +public class XMLCrisClassVocabularyRule extends XMLRule { + + protected XMLCrisClassVocabularyRule(XMLCrisClassSchemeContextWithVocabulary context) { + super(context, (NodeList nodes) -> { + String schemeId = context.getCrisClassSchemeIdProperty().getValue(); + TermsProperty terms = context.getTermsProperty(); + + /* + TODO Implement test code + Following original implementation, NodeListAction is applied to select nodes of NodeList + */ + return false; + }); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + Builder() { + super(new StandardCrisClassXMLContextWithVocabulary()); + initialize(); + } + + private void initialize() { + // Terms Type Property of VocabularyContext is not used here... + context.getTermsTypeProperty().setValue("notNull"); + } + + public Builder setId(String id) { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setNodeListAction(String nodeListAction) throws RuntimeException { + context.getNodeListActionProperty().setValue(nodeListAction); + return this; + } + + public Builder setVocabularyTerms(String terms) { + context.getTermsProperty().setValue(terms); + return this; + } + + public Builder setCrisClassSchemeId(String id) { + context.getCrisClassSchemeIdProperty().setValue(id); + return this; + } + + @Override + public XMLCrisClassVocabularyRule build() { + ensureContextIsValid(); + return new XMLCrisClassVocabularyRule(context); + } + + @Override + public XMLCrisClassVocabularyRule buildFrom(Map map) { + context.readFrom(map); + ensureContextIsValid(); + return new XMLCrisClassVocabularyRule(context); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLFieldExistsRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLFieldExistsRule.java new file mode 100644 index 0000000..eb125ef --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLFieldExistsRule.java @@ -0,0 +1,64 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.contexts.XMLContext; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import java.util.Map; + +public class XMLFieldExistsRule extends XMLRule { + + protected XMLFieldExistsRule(XMLContext context) { + super(context, (NodeList nodes) -> { + /* + TODO + - if (nodes.getLength() == 0) return false; + - Is in original implementation, but results in incorrect evaluation if traversal=0 + */ + return context.getNodeListActionProperty().test(nodes, (String v) -> !Helper.isEmpty(v)); + }); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + private Builder() { + super(new StandardXMLContext()); //the actual implementation is known by the builder only + } + + public Builder setId(String id) throws IllegalArgumentException { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) throws IllegalArgumentException { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setNodeListAction(String nodeListAction) throws RuntimeException { + context.getNodeListActionProperty().setValue(nodeListAction); + return this; + } + + @Override + public XMLFieldExistsRule build() { + ensureContextIsValid(); + return new XMLFieldExistsRule(context); + } + + @Override + public XMLFieldExistsRule buildFrom(Map map) { + context.readFrom(map); + ensureContextIsValid(); + return new XMLFieldExistsRule(context); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLNotConfusedFieldsRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLNotConfusedFieldsRule.java new file mode 100644 index 0000000..41acff1 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLNotConfusedFieldsRule.java @@ -0,0 +1,89 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithNotConfusedFields; +import eu.dnetlib.validator2.engine.contexts.XPathExpressionProperty; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class XMLNotConfusedFieldsRule implements Rule { + + private final XMLContextWithNotConfusedFields context; + + protected XMLNotConfusedFieldsRule(XMLContextWithNotConfusedFields context) { + this.context = context; + } + + @Override + public RuleContext getContext() { + return context; + } + + @Override //TODO Is a bit different from original evaluation. Needs revisit probably. + public boolean test(Document doc) throws RuleEvaluationException { + XPathExpressionProperty xpathExprProp = context.getXPathExpressionProperty(); + Set allNodeValues = new HashSet<>(); + try { + for (String xpath : context.getFieldsProperty().getXpaths()) { + xpathExprProp.setValue(xpath); + NodeList nodesReturned = xpathExprProp.evaluate(doc); + boolean nodesReturnedAreUnique = context.getNodeListActionProperty().test(nodesReturned, (String v) -> { + String val = v.trim().toLowerCase(); + return allNodeValues.add(val); + }); + if (!nodesReturnedAreUnique) return false; + } + return true; + } catch (Throwable t) { + throw new RuleEvaluationException(t.getMessage(), t); + } + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + Builder() { + super(new StandardXMLContextWithNotConfusedFields()); + initialize(); + } + + private void initialize() { + context.getXPathExpressionProperty().setValue("notNull"); + context.getNodeListActionProperty().setValue("all"); + } + + public Builder setId(String id) { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setFields(String fields) { + context.getFieldsProperty().setValue(fields); + return this; + } + + @Override + public XMLNotConfusedFieldsRule build() { + ensureContextIsValid(); + return new XMLNotConfusedFieldsRule(context); + } + + @Override + public XMLNotConfusedFieldsRule buildFrom(Map map) { + context.readFrom(map); + ensureContextIsValid(); + return new XMLNotConfusedFieldsRule(context); + } + + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRegularExpressionRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRegularExpressionRule.java new file mode 100644 index 0000000..4cd2155 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRegularExpressionRule.java @@ -0,0 +1,65 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.contexts.RegularExpressionProperty; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithRegularExpression; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import java.util.Map; +import java.util.function.Predicate; + +public class XMLRegularExpressionRule extends XMLRule { + + protected XMLRegularExpressionRule(XMLContextWithRegularExpression context) { + super(context, (NodeList nodes) -> { + RegularExpressionProperty regex = context.getRegularExpressionProperty(); + return context.getNodeListActionProperty().test(nodes, (Predicate) regex::matches); + }); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + private Builder() { + super(new StandardXMLContextWithRegularExpression()); + } + + public Builder setId(String id) { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setRegularExpression(String regexp) { + context.getRegularExpressionProperty().setValue(regexp); + return this; + } + + public Builder setNodeListAction(String nodeListAction) throws RuntimeException { + context.getNodeListActionProperty().setValue(nodeListAction); + return this; + } + + public XMLRegularExpressionRule build() { + ensureContextIsValid(); + return new XMLRegularExpressionRule(context); + } + + @Override + public XMLRegularExpressionRule buildFrom(Map map) { + context.readFrom(map); + ensureContextIsValid(); + return new XMLRegularExpressionRule(context); + } + } + + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRule.java new file mode 100644 index 0000000..22ba61d --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLRule.java @@ -0,0 +1,49 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.contexts.XMLContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import java.util.function.Predicate; + +/** + * An XML rule that evaluates an xpath in an XMLContext and then injects a custom nodelist predicate to + * carry out the actual rule application. + */ +public class XMLRule implements Rule { + + private static final Logger logger = LogManager.getLogger(); + private final C context; + public final Predicate predicate; + + public XMLRule(C context, Predicate predicate) { + this.context = context; + this.predicate = predicate; + } + + @Override + public C getContext() { + return context; + } + + @Override + public boolean test(Document doc) throws RuleEvaluationException { + try { + logger.debug("Applying {}", context.getIdProperty().getValue()); + NodeList nodes = context.getXPathExpressionProperty().evaluate(doc); + return predicate.test(nodes); + } catch (Throwable t) { + // Catch all exceptions here to simplify predicate code + throw new RuleEvaluationException(t.getMessage(), t); + } + } + + @Override + public String toString() { + return getContext().getIdProperty().getValue(); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLValidURLRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLValidURLRule.java new file mode 100644 index 0000000..0ac7a74 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLValidURLRule.java @@ -0,0 +1,58 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.contexts.XMLContext; +import org.w3c.dom.NodeList; + +import java.util.Map; +import java.util.function.Predicate; + +public class XMLValidURLRule extends XMLRule { + + protected XMLValidURLRule(XMLContext context) { + super(context, (NodeList nodes) -> { + return context.getNodeListActionProperty().test(nodes, (Predicate) Helper.URLResolver::resolve); + }); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + private Builder() { + super(new StandardXMLContext()); + } + + public Builder setId(String id) throws IllegalArgumentException { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) throws IllegalArgumentException { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setNodeListAction(String nodeListAction) throws RuntimeException { + context.getNodeListActionProperty().setValue(nodeListAction); + return this; + } + + @Override + public XMLValidURLRule build() { + ensureContextIsValid(); + return new XMLValidURLRule(context); + } + + @Override + public XMLValidURLRule buildFrom(Map map) { + context.readFrom(map); + ensureContextIsValid(); + return new XMLValidURLRule(context); + } + + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLVocabularyRule.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLVocabularyRule.java new file mode 100644 index 0000000..0f84d67 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XMLVocabularyRule.java @@ -0,0 +1,82 @@ +package eu.dnetlib.validator2.engine.builtins; + +import eu.dnetlib.validator2.engine.contexts.TermsProperty; +import eu.dnetlib.validator2.engine.contexts.XMLContextWithVocabulary; +import org.w3c.dom.NodeList; + +import java.util.Map; +import java.util.function.Predicate; + +public class XMLVocabularyRule extends XMLRule { + + protected XMLVocabularyRule(XMLContextWithVocabulary context) { + super(context, (NodeList nodes) -> { + TermsProperty terms = context.getTermsProperty(); + boolean result = context.getNodeListActionProperty().test(nodes, (Predicate) terms::termExists); + + String termsType = context.getTermsTypeProperty().getValue().toLowerCase(); + + //TODO: Check original implementation for blacklist/whitelist. It looks weird. + if (termsType.equals("blacklist")) return !result; + return result; + }); + } + + public static Builder builder() { + return new Builder(); + } + + public static class Builder extends AbstractRuleBuilder { + + private Builder() { + super(new StandardXMLContextWithVocabulary()); + } + + public Builder setId(String id) { + context.getIdProperty().setValue(id); + return this; + } + + public Builder setXPathExpression(String xpath) { + context.getXPathExpressionProperty().setValue(xpath); + return this; + } + + public Builder setNodeListAction(String nodeListAction) throws RuntimeException { + context.getNodeListActionProperty().setValue(nodeListAction); + return this; + } + + public Builder setVocabularyTerms(String terms) { + context.getTermsProperty().setValue(terms); + return this; + } + + public Builder setVocabularyTermsAndTermsType(String terms, String termsType) { + context.getTermsProperty().setValue(terms); + context.getTermsTypeProperty().setValue(termsType); + return this; + } + + private void initializeOptionalTermsTypeProperty() { + if (context.getTermsTypeProperty().getValue() == null) { + context.getTermsTypeProperty().setValue("blacklist"); + } + } + + public XMLVocabularyRule build() { + initializeOptionalTermsTypeProperty(); + ensureContextIsValid(); + return new XMLVocabularyRule(context); + } + + @Override + public XMLVocabularyRule buildFrom(Map map) { + context.readFrom(map); + initializeOptionalTermsTypeProperty(); + ensureContextIsValid(); + return new XMLVocabularyRule(context); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/builtins/XPathExpressionHelper.java b/src/main/java/eu/dnetlib/validator2/engine/builtins/XPathExpressionHelper.java new file mode 100644 index 0000000..c51ecb7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/builtins/XPathExpressionHelper.java @@ -0,0 +1,104 @@ +package eu.dnetlib.validator2.engine.builtins; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.xml.xpath.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; + +public class XPathExpressionHelper { + + private static final Logger logger = LogManager.getLogger(); + + // XPath expression compilation + private static final XPath XPATH = XPathFactory.newInstance().newXPath(); + private static final ConcurrentHashMap COMPILED_EXPRESSIONS = new ConcurrentHashMap<>(); + + // XPath expression evaluation + private static final int MAX_CACHE_ENTRIES = 100; // TODO: Make this configurable + private static final LoadingCache> + EVALUATED_EXPRESSIONS = + CacheBuilder. + newBuilder(). + maximumSize(MAX_CACHE_ENTRIES). + build(new CacheLoader>() { + @Override + public ConcurrentMap load(Document key) { + return new ConcurrentHashMap<>(); + } + }); + + public static XPathExpression compile(String xpath) { + return COMPILED_EXPRESSIONS.computeIfAbsent(xpath, s -> { + try { + logger.debug("Compiling {}", s); + XPathExpression expr = XPATH.compile(s); + logger.debug("Compiled {} = {}", s, expr); + return expr; + } catch (XPathExpressionException e) { + logger.error("Compilation failure", e); + throw new RuntimeException(e.getMessage(), e); + } + }); + } + + public static NodeList nodeList(String xpath, Document doc) { + logger.debug("Evaluating nodeList {}", xpath); + return nodeList(compile(xpath), doc); + } + + public static NodeList nodeList(XPathExpression expr, Document doc) { + try { + return EVALUATED_EXPRESSIONS.get(doc).computeIfAbsent(expr, (XPathExpression xpath) -> { + try { + NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); + return nodes; + } + catch(XPathExpressionException ex) { + throw new RuleEvaluationException(ex.getMessage(), ex); + } + }); + } catch (ExecutionException e) { + throw new RuleEvaluationException(e.getMessage(), e); + } + } + + public static String attr(String xpath, Node node) { + logger.debug("Evaluating attr {}", xpath); + return attr(compile(xpath), node); + } + + public static String attr(XPathExpression expr, Node node) { + try { + String value = expr.evaluate(node); + return value; + } + catch(XPathExpressionException ex) { + throw new RuleEvaluationException(ex.getMessage(), ex); + } + } + + public static Node node(String xpath, Node node) { + logger.debug("Evaluating node {}", xpath); + return node(compile(xpath), node); + } + + public static Node node(XPathExpression expr, Node node) { + try { + Node resultNode = (Node) expr.evaluate(node, XPathConstants.NODE); + return resultNode; + } + catch(XPathExpressionException ex) { + throw new RuleEvaluationException(ex.getMessage(), ex); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/BooleanRuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/BooleanRuleProperty.java new file mode 100644 index 0000000..c6139ad --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/BooleanRuleProperty.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface BooleanRuleProperty extends RuleProperty { + + boolean isTrue(); + + void setTrue(boolean isTrue); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/CardinalityContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/CardinalityContext.java new file mode 100644 index 0000000..f8d520a --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/CardinalityContext.java @@ -0,0 +1,33 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleProperty; + +import java.util.function.Predicate; + +public interface CardinalityContext extends RuleContext { + + String GREATER_THAN_PROPERTY_NAME = "gt"; + String LESS_THAN_PROPERTY_NAME = "lt"; + String UPPER_BOUND_PROPERTY_NAME = LESS_THAN_PROPERTY_NAME; + String LOWER_BOUND_PROPERTY_NAME = GREATER_THAN_PROPERTY_NAME; + String IS_INCLUSIVE_PROPERTY_NAME = "inclusive"; + + LongRuleProperty getLowerBoundProperty(); + + LongRuleProperty getUpperBoundProperty(); + + BooleanRuleProperty getIsInclusiveProperty(); + + default Predicate cardinalityPredicate() { + // System.out.println("Evaluating cardinality " + getIdProperty().getValue()); + long min = getLowerBoundProperty().getLongValue(); + long max = getUpperBoundProperty().getLongValue(); + + // TODO: [Minor] Perhaps we should disallow changing the properties + // of a rule's context after the rule has been created? + return Helper.createCardinalityPredicate(min, max, getIsInclusiveProperty().isTrue()); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/CrisClassSchemeContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/CrisClassSchemeContext.java new file mode 100644 index 0000000..b2de6db --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/CrisClassSchemeContext.java @@ -0,0 +1,12 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface CrisClassSchemeContext extends RuleContext { + + String ID_PROPERTY_NAME = "scheme_id"; + + RuleProperty getCrisClassSchemeIdProperty(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/FieldsProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/FieldsProperty.java new file mode 100644 index 0000000..75001a4 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/FieldsProperty.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface FieldsProperty extends RuleProperty { + + String[] getXpaths(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/LongRuleProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/LongRuleProperty.java new file mode 100644 index 0000000..dcd36e8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/LongRuleProperty.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface LongRuleProperty extends RuleProperty { + + long getLongValue(); + + void setLongValue(long value); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListAction.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListAction.java new file mode 100644 index 0000000..ad9488c --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListAction.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.engine.contexts; + +import org.w3c.dom.NodeList; + +import java.util.function.Predicate; + +public interface NodeListAction { + boolean test(NodeList nodes, Predicate predicate) throws IllegalStateException; +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListActionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListActionProperty.java new file mode 100644 index 0000000..42c2419 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListActionProperty.java @@ -0,0 +1,7 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface NodeListActionProperty extends RuleProperty, NodeListAction { + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListContext.java new file mode 100644 index 0000000..064baf8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/NodeListContext.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; + +public interface NodeListContext extends RuleContext { + + String PROPERTY_NAME = "xmlTraversal"; + + NodeListActionProperty getNodeListActionProperty(); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/NotConfusedFieldsContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/NotConfusedFieldsContext.java new file mode 100644 index 0000000..abcd87e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/NotConfusedFieldsContext.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; + +public interface NotConfusedFieldsContext extends RuleContext { + + String PROPERTY_NAME = "fields"; + + FieldsProperty getFieldsProperty(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionContext.java new file mode 100644 index 0000000..f67cc49 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionContext.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; + +public interface RegularExpressionContext extends RuleContext { + + String PROPERTY_NAME = "regexp"; + + RegularExpressionProperty getRegularExpressionProperty(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionProperty.java new file mode 100644 index 0000000..5fd5000 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/RegularExpressionProperty.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +import java.util.regex.PatternSyntaxException; + +public interface RegularExpressionProperty extends RuleProperty { + + boolean matches(String text) throws IllegalStateException, PatternSyntaxException; +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/TermsProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/TermsProperty.java new file mode 100644 index 0000000..04ce8ff --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/TermsProperty.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface TermsProperty extends RuleProperty { + + boolean termExists(String term); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/VocabularyContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/VocabularyContext.java new file mode 100644 index 0000000..7c537e7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/VocabularyContext.java @@ -0,0 +1,15 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleProperty; + +public interface VocabularyContext extends RuleContext { + + String TERMS_PROPERTY_NAME = "terms"; + String TERMS_TYPE_PROPERTY_NAME = "terms_type"; + + TermsProperty getTermsProperty(); + + RuleProperty getTermsTypeProperty(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContext.java new file mode 100644 index 0000000..3dfe2d7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContext.java @@ -0,0 +1,6 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; + +public interface XMLContext extends RuleContext, XPathExpressionContext, NodeListContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithCardinality.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithCardinality.java new file mode 100644 index 0000000..7318335 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithCardinality.java @@ -0,0 +1,4 @@ +package eu.dnetlib.validator2.engine.contexts; + +public interface XMLContextWithCardinality extends XMLContext, CardinalityContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithNotConfusedFields.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithNotConfusedFields.java new file mode 100644 index 0000000..a110840 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithNotConfusedFields.java @@ -0,0 +1,4 @@ +package eu.dnetlib.validator2.engine.contexts; + +public interface XMLContextWithNotConfusedFields extends XMLContext, NotConfusedFieldsContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithRegularExpression.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithRegularExpression.java new file mode 100644 index 0000000..38688a5 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithRegularExpression.java @@ -0,0 +1,4 @@ +package eu.dnetlib.validator2.engine.contexts; + +public interface XMLContextWithRegularExpression extends XMLContext, RegularExpressionContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithVocabulary.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithVocabulary.java new file mode 100644 index 0000000..03a4c82 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLContextWithVocabulary.java @@ -0,0 +1,4 @@ +package eu.dnetlib.validator2.engine.contexts; + +public interface XMLContextWithVocabulary extends XMLContext, VocabularyContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLCrisClassSchemeContextWithVocabulary.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLCrisClassSchemeContextWithVocabulary.java new file mode 100644 index 0000000..55b35a7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XMLCrisClassSchemeContextWithVocabulary.java @@ -0,0 +1,4 @@ +package eu.dnetlib.validator2.engine.contexts; + +public interface XMLCrisClassSchemeContextWithVocabulary extends XMLContextWithVocabulary, CrisClassSchemeContext { +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionContext.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionContext.java new file mode 100644 index 0000000..6fe4261 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionContext.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleContext; + +public interface XPathExpressionContext extends RuleContext { + + String PROPERTY_NAME = "xpath"; + + XPathExpressionProperty getXPathExpressionProperty(); +} diff --git a/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionProperty.java b/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionProperty.java new file mode 100644 index 0000000..fc7462e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/engine/contexts/XPathExpressionProperty.java @@ -0,0 +1,13 @@ +package eu.dnetlib.validator2.engine.contexts; + +import eu.dnetlib.validator2.engine.RuleProperty; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import javax.xml.xpath.XPathExpressionException; + +public interface XPathExpressionProperty extends RuleProperty { + + NodeList evaluate(Document doc); + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/StandardValidationResult.java b/src/main/java/eu/dnetlib/validator2/validation/StandardValidationResult.java new file mode 100644 index 0000000..1e7f635 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/StandardValidationResult.java @@ -0,0 +1,34 @@ +package eu.dnetlib.validator2.validation; + +import java.util.Map; + +import static eu.dnetlib.validator2.validation.guideline.Guideline.Result; + +public class StandardValidationResult implements XMLApplicationProfile.ValidationResult { + + private final String id; + private final double score; + private final Map results; + + public StandardValidationResult(String id, double score, Map results) { + this.id = id; + this.score = score; + this.results = results; + } + + @Override + public String id() { + return id; + } + + @Override + public double score() { + return score; + } + + @Override + public Map results() { + return results; + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/Validator.java b/src/main/java/eu/dnetlib/validator2/validation/Validator.java new file mode 100644 index 0000000..9e398da --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/Validator.java @@ -0,0 +1,16 @@ +package eu.dnetlib.validator2.validation; + +import eu.dnetlib.validator2.validation.task.ValidationTaskOutput; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.function.Consumer; + +public interface Validator { + + default void validate(T subject, Consumer outputConsumer) { + validate(Executors.newSingleThreadExecutor(), subject, outputConsumer); + } + + void validate(ExecutorService executor, T subject, Consumer outputConsumer); +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/XMLApplicationProfile.java b/src/main/java/eu/dnetlib/validator2/validation/XMLApplicationProfile.java new file mode 100644 index 0000000..ab640e0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/XMLApplicationProfile.java @@ -0,0 +1,39 @@ +package eu.dnetlib.validator2.validation; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.Status; +import eu.dnetlib.validator2.engine.builtins.XMLCardinalityRule; +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.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * An application-specific collection of guidelines + */ +public interface XMLApplicationProfile { + + String name(); + + Collection> guidelines(); + + Guideline guideline(String guidelineName); + + ValidationResult validate(String id, Document document); + + int maxScore(); + + interface ValidationResult { + + String id(); + + double score(); + + Map results(); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/AbstractGuideline.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/AbstractGuideline.java new file mode 100644 index 0000000..d833f37 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/AbstractGuideline.java @@ -0,0 +1,22 @@ +package eu.dnetlib.validator2.validation.guideline; + +public abstract class AbstractGuideline implements Guideline { + + private final String name; + private final int weight; + + public AbstractGuideline(String name, int weight) { + this.name = name; + this.weight = weight; + } + + @Override + public int getWeight() { + return weight; + } + + @Override + public String getName() { + return name; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/AttributeSpec.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/AttributeSpec.java new file mode 100644 index 0000000..9fa86db --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/AttributeSpec.java @@ -0,0 +1,8 @@ +package eu.dnetlib.validator2.validation.guideline; + + +// Provide only an alternate name for clarity. +public interface AttributeSpec extends NodeSpec { + + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/Builders.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/Builders.java new file mode 100644 index 0000000..3ad8093 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/Builders.java @@ -0,0 +1,429 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.Predicates; +import eu.dnetlib.validator2.engine.Rule; +import org.w3c.dom.Document; + +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public final class Builders { + + @Deprecated + public static ElementSpecBuilder forElement(String elementName) { + return new ElementSpecBuilder(elementName); + } + + public static ElementSpecBuilder forOptionalElement(String elementName) { + return new ElementSpecBuilder(elementName).optional(); + } + + public static ElementSpecBuilder forOptionalRepeatableElement(String elementName) { + return new ElementSpecBuilder(elementName).optionalRepeatable(); + } + + public static ElementSpecBuilder forRecommendedElement(String elementName) { + return new ElementSpecBuilder(elementName).recommended(); + } + + public static ElementSpecBuilder forRecommendedRepeatableElement(String elementName) { + return new ElementSpecBuilder(elementName).recommendedRepeatable(); + } + + public static ElementSpecBuilder forMandatoryElement(String elementName, Cardinality cardinality) { + return new ElementSpecBuilder(elementName).mandatory(cardinality); + } + + public static ElementSpecBuilder forMandatoryIfApplicableElement(String elementName, + Cardinality cardinality, + Rule applicabilityRule) { + return new ElementSpecBuilder(elementName).mandatoryIfApplicable(cardinality, applicabilityRule); + } + + @Deprecated + public static ElementSpecBuilder forElement(String elementName, + RequirementLevel requirementLevel, + Cardinality cardinality) { + return Helper.buildElement(elementName, requirementLevel, cardinality); + } + + @Deprecated + public static ElementSpecBuilder forElement(String elementName, + RequirementLevel requirementLevel, + Cardinality cardinality, + String... allowedValues) { + return Helper.buildElement(elementName, requirementLevel, cardinality).allowedValues(allowedValues); + } + + @Deprecated + public static ElementSpecBuilder forElement(String elementName, + RequirementLevel requirementLevel, + Cardinality cardinality, + Predicate allowedValuesPredicate) { + return Helper.buildElement(elementName, requirementLevel, cardinality).allowedValues(allowedValuesPredicate); + } + + static final Predicate ALLOW_ALL_VALUES = (String value) -> true; + + private static class DefaultNodeSpec implements NodeSpec { + + private final String name; + private final RequirementLevel requirementLevel; + private final Cardinality cardinality; + private final Predicate allowedValuesPredicate; + private final Rule applicabilityRule; + + DefaultNodeSpec(String name, + RequirementLevel requirementLevel, + Cardinality cardinality, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + this.name = name; + this.requirementLevel = requirementLevel; + this.cardinality = cardinality; + this.allowedValuesPredicate = allowedValuesPredicate; + this.applicabilityRule = applicabilityRule; + } + + @Override + public String nodeName() { + return name; + } + + @Override + public RequirementLevel requirementLevel() { + return requirementLevel; + } + + @Override + public Cardinality cardinality() { + return cardinality; + } + + @Override + public Predicate allowedValuesPredicate() { + return allowedValuesPredicate; + } + + @Override + public Rule applicabilityRule() { + return applicabilityRule; + } + } + + private static class DefaultAttributeSpec extends DefaultNodeSpec implements AttributeSpec { + + DefaultAttributeSpec(String name, + RequirementLevel requirementLevel, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + super(name, requirementLevel, Cardinality.ONE, allowedValuesPredicate, applicabilityRule); + } + } + + private static class DefaultElementSpec extends DefaultNodeSpec implements ElementSpec { + + private final Set parents; + private final Set attributeSpecs; + private final Set subElementSpecs; + private final String valuePrefix; + private final ElementPosition elementPosition; + + DefaultElementSpec(Set parents, + String name, + RequirementLevel requirementLevel, + Cardinality cardinality, + Predicate allowedValuesPredicate, + Rule applicabilityRule, + ElementPosition elementPosition, + String valuePrefix, + Set attributeSpecs, + Set subElementSpecs) { + super(name, requirementLevel, cardinality, allowedValuesPredicate, applicabilityRule); + this.parents = parents; + this.elementPosition = elementPosition; + this.valuePrefix = valuePrefix; + this.attributeSpecs = attributeSpecs; + this.subElementSpecs = subElementSpecs; + } + + @Override + public Set parents() { + return parents; + } + + @Override + public Set subElementSpecs() { + return subElementSpecs; + } + + @Override + public Set attributeSpecs() { + return attributeSpecs; + } + + @Override + public String valuePrefix() { + return valuePrefix; + } + + @Override + public ElementPosition position() { + return elementPosition; + } + } + + public static class ElementSpecBuilder { + + private final String elementName; + private String[] parents; + private RequirementLevel elementRequirementLevel; + private Cardinality elementCardinality; + private ElementPosition elementPosition; + private String valuePrefix; + private Predicate allowedValuesPredicate = ALLOW_ALL_VALUES; + private Set attributeSpecs = new LinkedHashSet<>(); + private Set subElementSpecs = new LinkedHashSet<>(); + private Rule applicabilityRule; + + private ElementSpecBuilder(String elementName) { + this.elementName = elementName; + } + + private ElementSpecBuilder with(RequirementLevel requirementLevel, Cardinality cardinality) { + elementRequirementLevel = requirementLevel; + elementCardinality = cardinality; + return this; + } + + public ElementSpecBuilder inContext(String... parentElementNames) { + this.parents = parentElementNames; + return this; + } + + private ElementSpecBuilder optional() { + return with(RequirementLevel.OPTIONAL, Cardinality.ONE); + } + + private ElementSpecBuilder optionalRepeatable() { + return with(RequirementLevel.OPTIONAL, Cardinality.ONE_TO_N); + } + + private ElementSpecBuilder recommended() { + return with(RequirementLevel.RECOMMENDED, Cardinality.ONE); + } + + private ElementSpecBuilder recommendedRepeatable() { + return with(RequirementLevel.RECOMMENDED, Cardinality.ONE_TO_N); + } + + private ElementSpecBuilder mandatory(Cardinality cardinality) { + return with(RequirementLevel.MANDATORY, cardinality); + } + + private ElementSpecBuilder mandatoryIfApplicable(Cardinality cardinality, Rule applicabilityRule) { + this.applicabilityRule = applicabilityRule; + return with(RequirementLevel.MANDATORY_IF_APPLICABLE, cardinality); + } + + public ElementSpecBuilder allowedValues(String... allowedValues) { + allowedValuesPredicate = allowedValuesPredicateFor("Element", allowedValues); + return this; + } + + public ElementSpecBuilder allowedValues(Predicate allowedValuesPredicate) { + this.allowedValuesPredicate = allowedValuesPredicate; + return this; + } + + public ElementSpecBuilder atPosition(ElementPosition elementOccurrence) { + this.elementPosition = elementOccurrence; + return this; + } + + public ElementSpecBuilder valueMustStartWith(String prefix) { + String canonical = Helper.canonicalize(prefix); + if (canonical.isEmpty()) { + throw new IllegalArgumentException("Prefix cannot be empty"); + } + this.valuePrefix = canonical; + return this; + } + + public ElementSpecBuilder withOptionalAttribute(String attributeName) { + return withAttribute(attributeName, RequirementLevel.OPTIONAL, ALLOW_ALL_VALUES); + } + + public ElementSpecBuilder withOptionalAttribute(String attributeName, String... allowedValues) { + return withAttribute(attributeName, RequirementLevel.OPTIONAL, allowedValues); + } + + public ElementSpecBuilder withOptionalAttribute(String attributeName, Predicate allowedValuesPredicate) { + return withAttribute(attributeName, RequirementLevel.OPTIONAL, allowedValuesPredicate); + } + + public ElementSpecBuilder withRecommendedAttribute(String attributeName) { + return withAttribute(attributeName, RequirementLevel.RECOMMENDED, ALLOW_ALL_VALUES); + } + + public ElementSpecBuilder withRecommendedAttribute(String attributeName, String... allowedValues) { + return withAttribute(attributeName, RequirementLevel.RECOMMENDED, allowedValues); + } + + public ElementSpecBuilder withRecommendedAttribute(String attributeName, Predicate allowedValuesPredicate) { + return withAttribute(attributeName, RequirementLevel.RECOMMENDED, allowedValuesPredicate); + } + + public ElementSpecBuilder withMandatoryAttribute(String attributeName) { + return withAttribute(attributeName, RequirementLevel.MANDATORY, ALLOW_ALL_VALUES); + } + + public ElementSpecBuilder withMandatoryAttribute(String attributeName, String... allowedValues) { + return withAttribute(attributeName, RequirementLevel.MANDATORY, allowedValues); + } + + public ElementSpecBuilder withMandatoryAttribute(String attributeName, Predicate allowedValuesPredicate) { + return withAttribute(attributeName, RequirementLevel.MANDATORY, allowedValuesPredicate); + } + + public ElementSpecBuilder withMandatoryIfApplicableAttribute(String attributeName, + Rule applicabilityRule) { + return withAttribute(attributeName, RequirementLevel.MANDATORY_IF_APPLICABLE, ALLOW_ALL_VALUES, applicabilityRule); + } + + public ElementSpecBuilder withMandatoryIfApplicableAttribute(String attributeName, + Rule applicabilityRule, + String... allowedValues) { + return withAttribute(attributeName, RequirementLevel.MANDATORY_IF_APPLICABLE, allowedValuesPredicateFor("Attribute", allowedValues), applicabilityRule); + } + + public ElementSpecBuilder withMandatoryIfApplicableAttribute(String attributeName, + Rule applicabilityRule, + Predicate allowedValuesPredicate) { + return withAttribute(attributeName, RequirementLevel.MANDATORY_IF_APPLICABLE, allowedValuesPredicate, applicabilityRule); + } + + public ElementSpecBuilder withSubElement(ElementSpecBuilder subElementSpecBuilder) { + subElementSpecs.add(subElementSpecBuilder); + return this; + } + + public ElementSpec build() { + + String canonical = Helper.ensureNonEmpty(elementName, + () -> new IllegalStateException("Element name cannot be empty")); + + validate("Element", elementName, elementRequirementLevel, elementCardinality, allowedValuesPredicate, applicabilityRule); + + Set setOfParents = parents == null ? + Collections.emptySet() : + Stream.of(parents).filter( p -> !Helper.isEmpty(p)).collect(Collectors.toSet()); + + if (elementPosition == null) { + elementPosition = ElementPosition.ALL; + } + + return new DefaultElementSpec( + setOfParents, + canonical, + elementRequirementLevel, + elementCardinality, + allowedValuesPredicate, + applicabilityRule, + elementPosition, + valuePrefix, + attributeSpecs, + subElementSpecs.stream().map(ElementSpecBuilder::build).collect(Collectors.toCollection(LinkedHashSet::new)) + ); + } + + private ElementSpecBuilder withAttribute(String attrName, + RequirementLevel requirementLevel) { + return withAttribute(attrName, requirementLevel, ALLOW_ALL_VALUES, null); + } + + private ElementSpecBuilder withAttribute(String attrName, + RequirementLevel requirementLevel, + String... allowedValues) { + return withAttribute(attrName, requirementLevel, allowedValuesPredicateFor("Attribute", allowedValues), null); + } + + private ElementSpecBuilder withAttribute(String attrName, + RequirementLevel requirementLevel, + Predicate allowedValuesPredicate) { + return withAttribute(attrName, requirementLevel, allowedValuesPredicate, null); + } + + private ElementSpecBuilder withAttribute(String attrName, + RequirementLevel requirementLevel, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + String canonical = Helper.ensureNonEmpty(attrName, + () -> new IllegalStateException("Attribute name cannot be empty")); + validate("Attribute", attrName, requirementLevel, allowedValuesPredicate, applicabilityRule); + attributeSpecs.add(new DefaultAttributeSpec(canonical, requirementLevel, allowedValuesPredicate, applicabilityRule)); + return this; + } + } + + private static Predicate allowedValuesPredicateFor(String type, String... allowedValues) { + if (allowedValues == null || allowedValues.length == 0) { + throw new IllegalArgumentException(type + " allowed values cannot be empty"); + } + //TODO: Confirm that ignoring case is the right thing to do. + Predicates.SetOfCaseInsensitiveAllowedValues setOfAllowedValues = + new Predicates.SetOfCaseInsensitiveAllowedValues(allowedValues); + if (setOfAllowedValues.isEmpty()) { + throw new IllegalArgumentException(type + " allowed values cannot be empty"); + } + return setOfAllowedValues; + } + + private static void validate(String type, + String name, + RequirementLevel requirementLevel, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + if (requirementLevel == null) { + throw new IllegalStateException(type + ":" + name + " requirement level cannot be empty"); + } + + if (allowedValuesPredicate == null) { + throw new IllegalStateException(type + ":" + name + " allowed values predicate cannot be empty"); + } + + validate(type, name, requirementLevel, applicabilityRule); + } + + private static void validate(String type, + String name, + RequirementLevel requirementLevel, + Cardinality cardinality, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + validate(type, name, requirementLevel, allowedValuesPredicate, applicabilityRule); + + if (cardinality == null) { + throw new IllegalStateException(type + ":" + name + " cardinality cannot be empty"); + } + } + + private static void validate(String type, String name, RequirementLevel requirementLevel, Rule applicabilityRule) { + if (requirementLevel == RequirementLevel.MANDATORY_IF_APPLICABLE && + applicabilityRule == null) { + throw new IllegalStateException(type + ": " + name + " is invalid: required applicability rule is missing"); + } + if (requirementLevel != RequirementLevel.MANDATORY_IF_APPLICABLE && + applicabilityRule != null) { + throw new IllegalStateException(type + ": " + name + " is invalid: an applicability rule is present"); + } + + } + + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/Cardinality.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/Cardinality.java new file mode 100644 index 0000000..3f25d83 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/Cardinality.java @@ -0,0 +1,31 @@ +package eu.dnetlib.validator2.validation.guideline; + +public enum Cardinality { + + ONE(1, 1), + ONE_TO_N(1, Long.MAX_VALUE), + TWO(2, 2), + FOUR_TO_N(4, Long.MAX_VALUE); + + private final long lowerBound; + private final long upperBound; + + private Cardinality(long lowerBound, long upperBound) { + this.lowerBound = lowerBound; + this.upperBound = upperBound; + } + + long getLowerBound() { + return lowerBound; + } + + long getUpperBound() { + return upperBound; + } + + public String asText() { + return (lowerBound == upperBound) + ? String.valueOf(lowerBound) + : lowerBound + "-" + ((upperBound == Long.MAX_VALUE) ? "n" : upperBound); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/CompilationResult.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/CompilationResult.java new file mode 100644 index 0000000..b0aa55b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/CompilationResult.java @@ -0,0 +1,24 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Helper; +import org.w3c.dom.Document; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +class CompilationResult { + + SyntheticRule rootNodeRule; + final List> nodeRules = new ArrayList<>(); + final Map ruleIdToRequirementLevel = new HashMap<>(); + + @Override + public String toString() { + return "### CompilationResult ###\n" + + "Root = " + Helper.stringify(rootNodeRule) + "\n" + + "Node = [" + nodeRules.stream().map(Helper::stringify).collect(Collectors.joining(", ")) + "]"; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementPosition.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementPosition.java new file mode 100644 index 0000000..c4ba9c6 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementPosition.java @@ -0,0 +1,14 @@ +package eu.dnetlib.validator2.validation.guideline; + +public enum ElementPosition { + + ALL(null), + FIRST("position()=1"), + SECOND("position()=2"); + + public final String xpath; + + ElementPosition(String xpath) { + this.xpath = xpath; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpec.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpec.java new file mode 100644 index 0000000..117e952 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpec.java @@ -0,0 +1,27 @@ +package eu.dnetlib.validator2.validation.guideline; + +import java.util.Set; + +public interface ElementSpec extends NodeSpec { + + String APPLICABILITY_RULE_ID = "ApplicabilityRule"; + + Set parents(); + + Set subElementSpecs(); + + Set attributeSpecs(); + + /** + * + * @return the required prefix or null if no prefix has been defined for the value + */ + String valuePrefix(); + + /** + * + * @return the specific position (occurrence) of the element the spec refers to + */ + ElementPosition position(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpecCompiler.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpecCompiler.java new file mode 100644 index 0000000..8f594aa --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/ElementSpecCompiler.java @@ -0,0 +1,621 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import eu.dnetlib.validator2.engine.builtins.SimpleContext; +import eu.dnetlib.validator2.engine.builtins.StandardXMLContext; +import eu.dnetlib.validator2.engine.builtins.XMLRule; +import eu.dnetlib.validator2.engine.builtins.XPathExpressionHelper; +import eu.dnetlib.validator2.engine.contexts.XMLContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.xml.xpath.XPathExpression; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class ElementSpecCompiler { + + private static final Logger logger = LogManager.getLogger(); + + private static final String[] EMPTY = new String[]{}; + + private final List specs = new ArrayList<>(); + private final CompilationResult compilationResult = new CompilationResult(); + + CompilationResult compile(ElementSpec elementSpec, Supplier runtimeInfo) { + ElementStruct rootElement = new ElementStruct(elementSpec, runtimeInfo); + generateRulesForElement(rootElement); + return compilationResult; + } + + private void generateRulesForElement(ElementStruct currentElement) { + + specs.add(currentElement.spec); + + if (currentElement.parent == null) { + currentElement.createRootElemRule(compilationResult); + } + else { + currentElement.createSubElemRule(compilationResult); + } + + for (AttributeSpec attrSpec : currentElement.spec.attributeSpecs()) { + currentElement.createAttrRule(compilationResult, attrSpec); + } + + for(ElementSpec subElementSpec: currentElement.spec.subElementSpecs()) { + generateRulesForElement(new ElementStruct(currentElement.elementsArray, subElementSpec, currentElement)); + } + } + + + private static String[] copyAndAppend(String[] elements, String newElem) { + int len = elements.length; + String[] newElements = new String[len + 1]; + System.arraycopy(elements, 0, newElements, 0, len); + newElements[len] = newElem; + return newElements; + } + + // TODO: Should we escape the arg? + private static String xpathForNodeName(String name) { + return "local-name()='" + name + "'"; + } + + private static String xpathForNodeName(String name, String valuePrefix) { + String[] components = new String[] { xpathForNodeName(name) }; + if (valuePrefix != null) { + components = copyAndAppend(components, "starts-with(normalize-space(text()), '" + valuePrefix + "')"); // normalize-space needed for cases text isn't in the same line with starting xml tag + } + return String.join(" and ", components); + } + + + // TODO: Should we escape the arg? + private static String xpathForAttributeName(String name) { + return "@" + name; + } + + private static String xpathWithText(String xpath, boolean withText) { + return withText ? xpath + "/text()" : xpath; + } + + static String nodeRuleIdFor(String nodeType, + String nodeName, + RequirementLevel requirementLevel, + ElementPosition position, + String valuePrefix, + Predicate allowedValuesPredicate, + Cardinality cardinality) { + + StringBuilder builder = + new StringBuilder(requirementLevel.name()).append(" rule: The ").append(nodeName).append(" ").append(nodeType); + + if (position != ElementPosition.ALL) { + builder.append(" at ").append(position.name().toLowerCase()).append(" position"); + } + + if (valuePrefix != null) { + builder.append(" has values that start with ").append(valuePrefix).append(","); + } + + if (!allowsAllValues(allowedValuesPredicate)) { + builder.append(" contains allowed values only,"); + } + + builder.append(" has cardinality ").append(cardinality.asText()); + + return builder.toString(); + } + + static String cardinalityRuleIdFor(String nodeName, + RequirementLevel requirementLevel, + Cardinality cardinality, + String valuePrefix) { + String id = requirementLevel.name() + " rule: " + nodeName + " has cardinality " + cardinality.asText(); + if(Helper.isEmpty(valuePrefix)) { + return id; + } + else { + return id + " for values starting with '" + valuePrefix + "'"; + } + } + + static final String mergeNodeNames(String... names) { + return Stream.of(names).collect(Collectors.joining("/")); + } + + + // Heuristic for avoiding to create rules for checking the allowed values, when all values are allowed. + private static boolean allowsAllValues(Predicate allowedValuesPredicate) { + return (allowedValuesPredicate == null || // null value will never occur through our Builders class. + allowedValuesPredicate == Builders.ALLOW_ALL_VALUES +// || allowedValuesPredicate.test(null) // this seems to give undesired results against allowedValues negated predicates + ); + } + + private static SyntheticRule createActualRootElementRule(Supplier runtimeInfo, + String id, + String xpath, + String xpathForValue, + Cardinality cardinality, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + XMLContext ctx = createCustomXMLContext(id, xpath); + Predicate lengthPredicate = Helper. + createCardinalityPredicate(cardinality.getLowerBound(), cardinality.getUpperBound(), true); + Predicate lengthChecker = (NodeList elements) -> lengthPredicate.test(elements.getLength()); + + if (allowsAllValues(allowedValuesPredicate)) { + return new RootElemRule(ctx, lengthChecker, applicabilityRule, runtimeInfo); + } + else { + Predicate lengthCheckerOnAllowedElements = (NodeList elements) -> { + NodeList filtered = filterNodes(elements, xpathForValue, allowedValuesPredicate); + return lengthChecker.test(filtered); + }; + return new RootElemRule(ctx, lengthCheckerOnAllowedElements, applicabilityRule, runtimeInfo); + } + } + + // The NodeList contains the parent elements + private static SyntheticRule createActualAttributeSpecRule(Supplier runtimeInfo, + SyntheticRule parentRule, + String id, + String attrName, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + SimpleContext ctx = new SimpleContext(id); + + if (allowsAllValues(allowedValuesPredicate)) { + return new NodeSpecRule<>(ctx, parentRule, (NodeList elements) -> { + NodeList attrs = attributesOf(elements, attrName, (String s) -> !Helper.isEmpty(s)); + return (elements != null && attrs.getLength() == elements.getLength()); + }, applicabilityRule, runtimeInfo); + } + else { + Predicate allowedAttrsLengthEqualsElemLength = (NodeList elements) -> { + NodeList attrs = attributesOf(elements, attrName, allowedValuesPredicate); + return (elements != null && elements.getLength() == attrs.getLength()); + }; + return new NodeSpecRule<>(ctx, parentRule, allowedAttrsLengthEqualsElemLength, applicabilityRule, runtimeInfo); + } + } + + private static SyntheticRule createActualSubElementRule(Supplier runtimeInfo, + SyntheticRule parentRule, + String id, + String xpath, + String xpathForValue, + Cardinality cardinality, + Predicate allowedValuesPredicate, + Rule applicabilityRule) { + XMLContext ctx = createCustomXMLContext(id, xpath); + + Predicate lengthChecker = (NodeList elements) -> { + // Calculate the length predicate at rule runtime + Predicate lengthPredicate = createLengthPredicateForSubElements(runtimeInfo, parentRule, cardinality); + return lengthPredicate.test(elements.getLength()); + }; + + if (allowsAllValues(allowedValuesPredicate)) { + return new SubElemRule(ctx, parentRule, lengthChecker, applicabilityRule, runtimeInfo); + } + else { + Predicate lengthCheckerOnAllowedElements = (NodeList elements) -> { + NodeList filtered = filterNodes(elements, xpathForValue, allowedValuesPredicate); + return lengthChecker.test(filtered); + }; + return new SubElemRule(ctx, parentRule, lengthCheckerOnAllowedElements, applicabilityRule, runtimeInfo); + } + } + + private static Predicate createLengthPredicateForSubElements(Supplier runtimeInfo, + SyntheticRule parentRule, + Cardinality cardinality) { + GuidelineEvaluation evaluation = runtimeInfo.get(); + NodeList parents = evaluation.getNodesOf(parentRule.getContext().getIdProperty().getValue()); + if (parents == null) { + return (Integer count) -> false; // There are no parents, actually + } + int parentsLength = parents.getLength(); + if (cardinality == Cardinality.ONE) { + return (Integer count) -> count == parentsLength; // A sub-element can be present in each parent + } + else if (cardinality == Cardinality.ONE_TO_N) { + return (Integer count) -> count >= parentsLength; // One or more sub-elements can be present in each parent + } + else if (cardinality == Cardinality.TWO) { + return (Integer count) -> count == parentsLength * 2; // Two sub-elements can be present in each parent + } + else if (cardinality == Cardinality.FOUR_TO_N){ + return (Integer count) -> count >= parentsLength * 4; // Four or more sub-elements can be present in each parent + } + else{ // not reachable + throw new RuleEvaluationException(" Unsupported cardinality " + cardinality, null); + } + + } + + private static NodeList attributesOf(NodeList elements, String attrName, Predicate allowedValues) { + return Helper.nodesThatMatchThePredicate( + elements, + (Node node) -> Helper.getAttributeValue(node, attrName), + allowedValues + ); + } + + private static XMLContext createCustomXMLContext(String id, String xpath) { + StandardXMLContext context = new StandardXMLContext(); + context.getIdProperty().setValue(id); + context.getXPathExpressionProperty().setValue(xpath); + context.getNodeListActionProperty().setValue("custom"); + return context; + } + + private static NodeList filterNodes(NodeList nodes, String xpathToReadValues, Predicate allowedValuesPredicate) { + logger.debug("Filtering nodes with {}", xpathToReadValues); + return Helper.nodesThatMatchThePredicate(nodes, new NodeValueReader(xpathToReadValues), allowedValuesPredicate); + } + + + + private static class NodeValueReader implements Function { + + private final String nodeExpr; + + NodeValueReader(String nodeExpr) { + this.nodeExpr = nodeExpr; + } + + @Override + public String apply(Node parent) { + logger.debug("Reading node value {} from parent {}", nodeExpr, parent); + Node node = XPathExpressionHelper.node(nodeExpr, parent); + return node == null ? null : node.getNodeValue(); + } + } + + private static class ElementStruct { + + Supplier runtimeInfo; + final ElementSpec spec; + final String[] parentElementNames; + final ElementStruct parent; + //e.g. [elem1,sub1] + final String[] elementsArray; + // e.g. elem1/sub1 + final String elementsId; + SyntheticRule rule; + + ElementStruct(String[] parentElementNames, ElementSpec spec, ElementStruct parent) { + this.runtimeInfo = parent.runtimeInfo; + this.parentElementNames = parentElementNames; + this.spec = spec; + this.parent = parent; + elementsArray = copyAndAppend(parentElementNames, spec.nodeName()); + // e.g. elem1/sub1 + elementsId = mergeNodeNames(elementsArray); + } + + ElementStruct(ElementSpec spec, Supplier runtimeInfo) { + this.runtimeInfo = runtimeInfo; + this.parentElementNames = EMPTY; + this.spec = spec; + this.parent = null; + elementsArray = copyAndAppend(parentElementNames, spec.nodeName()); + // e.g. elem1/sub1 + elementsId = mergeNodeNames(elementsArray); + } + + private String xpath(boolean withText) { + String xpathForThis = xpathForNodeName(spec.nodeName(), spec.valuePrefix()); + String xpath; + if (parent == null) { + // This is the top-level element rule + List pathComponents = spec.parents().stream(). + map( s -> "*[" + xpathForNodeName(s) + "]").collect(Collectors.toList()); + pathComponents.add("*[" + xpathForThis + "]"); + xpath = "//" + String.join("/", pathComponents); + } + else { + xpath = parent.xpath(false) + "/*[" + xpathForThis + "]"; + } + if (spec.position().xpath != null) { + xpath = "(" + xpath + ")[" + spec.position().xpath + "]"; + } + // System.out.println(xpath); + return xpathWithText(xpath, withText); + } + + private void createRootElemRule(CompilationResult compilationResult) { + String id = nodeRuleIdFor( + "Element", + elementsId, + spec.requirementLevel(), + spec.position(), + spec.valuePrefix(), + spec.allowedValuesPredicate(), + spec.cardinality() + ); + + SyntheticRule rule = createActualRootElementRule( + runtimeInfo, + id, + xpath(false), + "text()", + spec.cardinality(), + spec.allowedValuesPredicate(), + spec.applicabilityRule() + ); + + compilationResult.ruleIdToRequirementLevel.put(id, spec.requirementLevel()); + compilationResult.rootNodeRule = rule; + + this.rule = rule; + } + + private void createAttrRule(CompilationResult compilationResult, AttributeSpec attrSpec) { + String attrRuleIdComponent = mergeNodeNames(elementsId, attrSpec.nodeName()); + String attrRuleId = nodeRuleIdFor( + "Attribute", + attrRuleIdComponent, + attrSpec.requirementLevel(), + ElementPosition.ALL, + null, + spec.allowedValuesPredicate(), + spec.cardinality() + ); + + SyntheticRule rule = createActualAttributeSpecRule( + runtimeInfo, + this.rule, + attrRuleId, + attrSpec.nodeName(), // this is resolved in the context of its parent elements + attrSpec.allowedValuesPredicate(), + attrSpec.applicabilityRule() + ); + + compilationResult.ruleIdToRequirementLevel.put(attrRuleId, attrSpec.requirementLevel()); + compilationResult.nodeRules.add(rule); + + this.rule = rule; + } + + private void createSubElemRule(CompilationResult compilationResult) { + String id = nodeRuleIdFor( + "Element", + elementsId, + spec.requirementLevel(), + spec.position(), + spec.valuePrefix(), + spec.allowedValuesPredicate(), + spec.cardinality() + ); + + SyntheticRule rule = createActualSubElementRule( + runtimeInfo, + parent.rule, + id, + xpath(false), + "text()", + spec.cardinality(), + spec.allowedValuesPredicate(), + spec.applicabilityRule() + ); + + compilationResult.ruleIdToRequirementLevel.put(id, spec.requirementLevel()); + compilationResult.nodeRules.add(rule); + + this.rule = rule; + } + } + + private static class RootElemRule extends ElemRule { + + RootElemRule(XMLContext context, + Predicate nodeListPredicate, + Rule applicabilityRule, + Supplier runtimeInfo) { + super(context, null, nodeListPredicate, applicabilityRule, runtimeInfo); + } + + @Override + public boolean test(Document doc) throws RuleEvaluationException { + GuidelineEvaluation guidelineEvaluation = runtimeInfo.get(); + String thisId = getContext().getIdProperty().getValue(); + + if (isApplicable(this, guidelineEvaluation).test(doc)) { + try { + logger.debug("Applying {}", thisId); + NodeList nodes = getContext().getXPathExpressionProperty().evaluate(doc); + boolean result = predicate.test(nodes); + if (result) { + logger.debug("Setting node list of this rule {}", thisId); + guidelineEvaluation.setNodesOf(thisId, nodes); + } + return result; + } catch (Throwable t) { + throw new RuleEvaluationException(t.getMessage(), t); + } + } + else { + return true; + } + } + } + + private static class SubElemRule extends ElemRule { + + SubElemRule(XMLContext context, + SyntheticRule parentRule, + Predicate nodeListPredicate, + Rule applicabilityRule, + Supplier runtimeInfo) { + super(context, parentRule, nodeListPredicate, applicabilityRule, runtimeInfo); + } + + @Override + public boolean test(Document doc) throws RuleEvaluationException { + GuidelineEvaluation guidelineEvaluation = runtimeInfo.get(); + String thisId = getContext().getIdProperty().getValue(); + String parentRuleId = parentRule.getContext().getIdProperty().getValue(); + + if (guidelineEvaluation.getRequirementLevelOf(parentRuleId) == RequirementLevel.NOT_APPLICABLE) { + // Our parent is not applicable, set ourselves as not_applicable too and silently pass + guidelineEvaluation.setRequirementLevelOf(thisId, RequirementLevel.NOT_APPLICABLE); + return true; + } + + if (isApplicable(this, guidelineEvaluation).test(doc)) { + try { + logger.debug("Appying {}", thisId);; + NodeList nodes = getContext().getXPathExpressionProperty().evaluate(doc); + boolean result = predicate.test(nodes); + if (result) { + logger.debug("Setting node list of this rule {}", thisId); + guidelineEvaluation.setNodesOf(thisId, nodes); + } + return result; + } catch (Throwable t) { + throw new RuleEvaluationException(t.getMessage(), t); + } + } + else { + return true; + } + } + } + + private static class ElemRule extends XMLRule implements SyntheticRule { + + protected final SyntheticRule parentRule; + protected final Supplier runtimeInfo; + protected final Rule applicabilityRule; + + ElemRule(XMLContext context, + SyntheticRule parentRule, + Predicate nodeListPredicate, + Rule applicabilityRule, + Supplier runtimeInfo) { + super(context, nodeListPredicate); + this.parentRule = parentRule; + this.applicabilityRule = applicabilityRule; + this.runtimeInfo = runtimeInfo; + } + + @Override + public SyntheticRule parentRule() { + return parentRule; + } + + @Override + public Rule applicabilityRule() { + return applicabilityRule; + } + } + + private static class NodeSpecRule implements SyntheticRule { + + private final C context; + private final Predicate nodeListPredicate; + private final Rule applicabilityRule; + private final SyntheticRule parentRule; + private final Supplier runtimeInfo; + + NodeSpecRule(C context, + SyntheticRule parentRule, + Predicate nodeListPredicate, + Rule applicabilityRule, + Supplier runtimeInfo) { + this.context = context; + this.parentRule = parentRule; + this.nodeListPredicate = nodeListPredicate; + this.applicabilityRule = applicabilityRule; + this.runtimeInfo = runtimeInfo; + } + + @Override + public C getContext() { + return context; + } + + @Override + public SyntheticRule parentRule() { + return parentRule; + } + + @Override + public Rule applicabilityRule() { + return applicabilityRule; + } + + @Override + public boolean test(Document doc) throws RuleEvaluationException { + + GuidelineEvaluation guidelineEvaluation = runtimeInfo.get(); + String thisId = getContext().getIdProperty().getValue(); + String parentRuleId = parentRule.getContext().getIdProperty().getValue(); + + if (guidelineEvaluation.getRequirementLevelOf(parentRuleId) == RequirementLevel.NOT_APPLICABLE) { + // Our parent is not applicable, set ourselves as not_applicable too and silently pass + guidelineEvaluation.setRequirementLevelOf(thisId, RequirementLevel.NOT_APPLICABLE); + return true; + } + + if (isApplicable(this, guidelineEvaluation).test(doc)) { + // We just use the doc to lookup the nodes of our parent + NodeList nodes = guidelineEvaluation.getNodesOf(parentRuleId); + logger.debug("Acquired node list of parent rule {} = {}", parentRuleId, (nodes == null ? "null" : nodes.getLength())); + boolean result = nodeListPredicate.test(nodes); + if (result) { + logger.debug("Setting node list of this rule {}", thisId); + guidelineEvaluation.setNodesOf(thisId, nodes); + } + return result; + } + else { + return true; + } + } + + @Override + public String toString() { + return getContext().getIdProperty().getValue(); + } + } + + private static Predicate isApplicable(SyntheticRule rule, + GuidelineEvaluation guidelineEvaluation) { + + return (Document doc) -> { + Rule applicabilityRule = rule.applicabilityRule(); + if (applicabilityRule == null) { + logger.debug("Null applicability rule of {}", rule); + return true; + } + + String thisId = rule.getContext().getIdProperty().getValue(); + if (applicabilityRule.test(doc)) { + logger.debug("Success of applicability rule of {}", rule); + guidelineEvaluation.setRequirementLevelOf(thisId, RequirementLevel.MANDATORY); + return true; + } else { + logger.debug("Failure of applicability rule of {}", rule); + guidelineEvaluation.setRequirementLevelOf(thisId, RequirementLevel.NOT_APPLICABLE); + return false; + } + }; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/Guideline.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/Guideline.java new file mode 100644 index 0000000..02b9854 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/Guideline.java @@ -0,0 +1,35 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Status; + +public interface Guideline { + + int getWeight(); //that's the "score" of the guideline if it succeeds + + String getName(); + + default Result validate(T t) { + return validate(t == null ? "Object" : t.getClass().getSimpleName(), t); + } + + Result validate(String id, T t); + + interface Result { + + int score(); + + Status status(); + + // When status == SUCCESS, potential warnings are held here + // This may also contain messages when status == FAILURE + Iterable warnings(); + + // When status == FAILURE, the errors are held here + // We currently hold a single error (and fail fast) + Iterable errors(); + + // When status == ERROR, the internal error is held here + String internalError(); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java new file mode 100644 index 0000000..564f4ba --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/GuidelineEvaluation.java @@ -0,0 +1,164 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.*; +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.builtins.StandardRuleDiagnostics; +import org.w3c.dom.Document; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class GuidelineEvaluation { + + // TODO: Report all rule diagnostics to System out/err (we should remove this or allow clients to disable it) + private static final RuleDiagnostics> OUT = Helper.Diagnostics.systemOut(); + private static final RuleDiagnostics> ERR = Helper.Diagnostics.systemErr(); + + private final String subjectId; + private final Document doc; + private final int weight; + private final List warnings = new ArrayList<>(); + private final List errors = new ArrayList<>(); + private Map ruleIdToRequirementLevel = new HashMap<>(); + private Map ruleIdToNodeList = new HashMap<>(); + private final Diagnostics diagnostics = new Diagnostics(); + private final Reporter> reporter = new Reporter<>(diagnostics); + + GuidelineEvaluation(String subjectId, Document doc, int weight) { + this.subjectId = subjectId; + this.doc = doc; + this.weight = weight; + } + + Guideline.Result evaluate(CompilationResult result) { + + ruleIdToRequirementLevel.putAll(result.ruleIdToRequirementLevel); + + List> rules = new ArrayList<>(); + rules.add(result.rootNodeRule); + rules.addAll(result.nodeRules); + + // System.out.println("Evaluating " + rules); + + for (SyntheticRule rule: rules) { + + String id = rule.getContext().getIdProperty().getValue(); + + RuleEngine.applyAndReport(rule, doc, reporter); + + Status status = diagnostics.getLastReportedStatus(); + if (status == Status.ERROR) { + // fail fast in case of errors (no reason to proceed, since results may be rubbish) + return StandardResult.forError(diagnostics.getLastReportedError().getMessage()); + } + + if (status == Status.SUCCESS && getRequirementLevelOf(id) == RequirementLevel.NOT_APPLICABLE) { + // Report the non-applicability of a rule as a warning + // The check for both status and non-applicable requirement level is redundant + // (non-applicable rules always succeed), yet it is more clear hopefully. + // System.out.println("Warn for non-applicable: " + rule); + warnings.add(synthesizeFailureMessage(rule)); + } + else if (status == Status.FAILURE) { + if (getRequirementLevelOf(id) == RequirementLevel.MANDATORY) { + // A mandatory rule has failed, yet we don't know whether we should report is as such. + + // Let's check the parent of the rule + if (rule.parentRule() == null) { + // This is the root rule failing! + // Fail fast here, too (don't waste resources to evaluate other rules). + // We will "enable" it, if it is requested. + // System.out.println("Fail fast for root failure: " + rule); + errors.add(synthesizeFailureMessage(rule)); + return StandardResult.forFailure(warnings, errors); + } + else { + // The current rule has a parent/ancestor which: + // (a) is non-mandatory or + // (b) it was successful. + // Thus, here we need only to warn and not to err, allowing the evaluation loop to proceed. + // System.out.println("Warn for mandatory failure: " + rule); + warnings.add(synthesizeFailureMessage(rule)); + } + } + else { + // This is a warning: a non-mandatory rule has failed. + // Note that MA rules are treated as non-mandatory. + // We let the evaluation loop proceed. + // System.out.println("Warn for optional/recommended failure: " + rule); + warnings.add(synthesizeFailureMessage(rule)); + } + } + } + + int returnedWeight = weight; + if (rules.size() == warnings.size()) { + // TODO: I think this is the desired behavior, but we need to get confirmation for this. + // All rules have failed, but with warnings (thus being either optional or recommended). + // This indicates a success with 0 weight. + returnedWeight = 0; + } + return StandardResult.forSuccess(returnedWeight, warnings); + } + + private String synthesizeFailureMessage(Rule rule) { + + return subjectId + ": rule " + Helper.stringify(rule) + " has failed"; + } + + private String synthesizeNotApplicableMessage(Rule rule) { + + return subjectId + ": rule " + Helper.stringify(rule) + " is not applicable"; + } + + + void setNodesOf(String ruleId, NodeList nodes) { + ruleIdToNodeList.put(ruleId, nodes); + } + + NodeList getNodesOf(String ruleId) { + return ruleIdToNodeList.get(ruleId); + } + + void setRequirementLevelOf(String ruleId, RequirementLevel requirementLevel) { + ruleIdToRequirementLevel.put(ruleId, requirementLevel); + } + + RequirementLevel getRequirementLevelOf(String ruleId) { + return ruleIdToRequirementLevel.get(ruleId); + } + + + private static final class Diagnostics extends StandardRuleDiagnostics> { + + private final Map statusByRuleId = new HashMap<>(); + + @Override + public void success(SyntheticRule rule, Document document) { + OUT.success(rule, document); + super.success(rule, document); + statusByRuleId.put(rule.getContext().getIdProperty().getValue(), Status.SUCCESS); + } + + @Override + public void failure(SyntheticRule rule, Document document) { + OUT.failure(rule, document); + super.failure(rule, document); + statusByRuleId.put(rule.getContext().getIdProperty().getValue(), Status.FAILURE); + } + + @Override + public void error(SyntheticRule rule, Document document, Throwable err) { + ERR.error(rule, document, err); + super.error(rule, document, err); + statusByRuleId.put(rule.getContext().getIdProperty().getValue(), Status.ERROR); + } + + private Status statusFor(String ruleId) { + return statusByRuleId.get(ruleId); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/NodeSpec.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/NodeSpec.java new file mode 100644 index 0000000..c4a0537 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/NodeSpec.java @@ -0,0 +1,20 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Rule; +import org.w3c.dom.Document; + +import java.util.function.Predicate; + +public interface NodeSpec { + + String nodeName(); + + RequirementLevel requirementLevel(); + + Cardinality cardinality(); + + Predicate allowedValuesPredicate(); + + // This can be null + Rule applicabilityRule(); +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/RequirementLevel.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/RequirementLevel.java new file mode 100644 index 0000000..fe0c77e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/RequirementLevel.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.validation.guideline; + +public enum RequirementLevel { + + MANDATORY, + MANDATORY_IF_APPLICABLE, + RECOMMENDED, + OPTIONAL, + NOT_APPLICABLE; + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/RuleEvaluator.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/RuleEvaluator.java new file mode 100644 index 0000000..4039cee --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/RuleEvaluator.java @@ -0,0 +1,10 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleDiagnostics; + +public interface RuleEvaluator> { + + RuleDiagnostics evaluate(T subject); + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/StandardResult.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/StandardResult.java new file mode 100644 index 0000000..d18ef80 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/StandardResult.java @@ -0,0 +1,78 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Status; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public final class StandardResult implements Guideline.Result { + + private static final List EMPTY = Collections.emptyList(); + + private final List warnings; + private final List errors; + private final String internalError; + private final Status status; + private final int score; + + private StandardResult(int score, Status status, List warnings, List errors, String internalError) { + this.status = status; + this.score = score; + this.warnings = warnings; + this.errors = errors; + this.internalError = internalError; + } + + @Override + public int score() { + return score; + } + + @Override + public Status status() { + return status; + } + + @Override + public Iterable warnings() { + return warnings; + } + + @Override + public Iterable errors() { + return errors; + } + + @Override + public String internalError() { + return internalError; + } + + public static StandardResult forError(String message) { + return new StandardResult(-1, Status.ERROR, EMPTY, EMPTY, message); + } + + public static StandardResult forSuccess(int score, List warnings) { + return new StandardResult(score, Status.SUCCESS, sanitize(warnings), EMPTY, null); + } + + public static StandardResult forFailure(List warnings, List errors) { + return new StandardResult(0, Status.FAILURE, sanitize(warnings), sanitize(errors), null); + } + + private static List sanitize(List list) { + if (list == null || list.size() == 0) return EMPTY; + return Collections.unmodifiableList(list); + } + + @Override + public String toString() { + if (status == Status.SUCCESS || status == Status.FAILURE) { + return status + " (" + warnings.size() + " warnings) - score " + score; + } + else { + return status + " (" + warnings.size() + " warnings) - " + internalError; + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticGuideline.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticGuideline.java new file mode 100644 index 0000000..cab636e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticGuideline.java @@ -0,0 +1,92 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleContext; +import eu.dnetlib.validator2.engine.RuleEvaluationException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; + +public final class SyntheticGuideline extends AbstractGuideline { + + private static final Logger logger = LogManager.getLogger(); + + private CompilationResult compilationResult; + private static final ThreadLocal evaluation = new ThreadLocal<>(); + + private SyntheticGuideline(String name, int weight) { + super(name, weight); + } + + @Override + public Result validate(String id, Document document) { + logger.debug("Validating document {} in {}", id, Thread.currentThread()); + evaluation.set(new GuidelineEvaluation(id, document, getWeight())); + Result result = evaluation.get().evaluate(compilationResult); + logger.debug("Evaluated: {} in {} with result {}", evaluation.get(), Thread.currentThread(), result); + evaluation.remove(); + return result; + } + + public static SyntheticGuideline of(String name, int weight, ElementSpec elementSpec) { + String canonical = Helper.ensureNonEmpty(name, () -> new IllegalArgumentException("Name cannot be empty")); + + // Here we define a guideline with a specific elementSpec as origin, we cannot allow null + if (elementSpec == null) { + throw new IllegalArgumentException("ElementSpec cannot be empty"); + } + + if (weight < 0) { + throw new IllegalArgumentException("Weight cannot be negative"); + } + + SyntheticGuideline guideline = new SyntheticGuideline(canonical, weight); + guideline.compilationResult = new ElementSpecCompiler().compile(elementSpec, evaluation::get); + return guideline; + } + + // Note: the synthetic rules that will be created are completely independent of each other + public static SyntheticGuideline of(String name, int weight, RequirementLevel requirementLevel, Rule rule) { + String canonical = Helper.ensureNonEmpty(name, () -> new IllegalArgumentException("Name cannot be empty")); + + if (weight < 0) { + throw new IllegalArgumentException("Weight cannot be negative"); + } + + if (requirementLevel == null) { + throw new IllegalArgumentException("Requirement level cannot be empty"); + } + + if (rule == null) { + throw new IllegalArgumentException("Rule cannot be empty"); + } + + SyntheticGuideline guideline = new SyntheticGuideline(canonical, weight); + CompilationResult compilationResult = new CompilationResult(); + compilationResult.rootNodeRule = new SyntheticRule() { + @Override + public SyntheticRule parentRule() { + return null; + } + + @Override + public Rule applicabilityRule() { + return null; + } + + @Override + public C getContext() { + return rule.getContext(); + } + + @Override + public boolean test(Document document) throws RuleEvaluationException { + return rule.test(document); + } + }; + compilationResult.ruleIdToRequirementLevel.put(rule.getContext().getIdProperty().getValue(), requirementLevel); + guideline.compilationResult = compilationResult; + return guideline; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticRule.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticRule.java new file mode 100644 index 0000000..02ceba0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/SyntheticRule.java @@ -0,0 +1,11 @@ +package eu.dnetlib.validator2.validation.guideline; + +import eu.dnetlib.validator2.engine.Rule; +import org.w3c.dom.Document; + +interface SyntheticRule extends Rule { + + SyntheticRule parentRule(); + + Rule applicabilityRule(); +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/AbstractOpenAireProfile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/AbstractOpenAireProfile.java new file mode 100644 index 0000000..90b4af5 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/AbstractOpenAireProfile.java @@ -0,0 +1,82 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.engine.Helper; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.Status; +import eu.dnetlib.validator2.engine.builtins.*; +import eu.dnetlib.validator2.validation.StandardValidationResult; +import eu.dnetlib.validator2.validation.XMLApplicationProfile; +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 org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +public abstract class AbstractOpenAireProfile implements XMLApplicationProfile { + + private final String name; + + public AbstractOpenAireProfile(String name) { + this.name = name; + } + + @Override + public String name() { + return name; + } + + @Override + public ValidationResult validate(String id, Document document) { + int maxScore = maxScore(); + double score = 0; + final Map results = new HashMap<>(); + + for (Guideline guideline: guidelines()) { + + Guideline.Result result = guideline.validate(document); + results.put(guideline.getName(), result); + + score += (result.status() == Status.SUCCESS ? result.score() : 0); + // System.out.println("Score after " + guideline.getName() + " = " + score); + } + + double percentScore = (score / maxScore) * 100; + + return new StandardValidationResult(id, percentScore, results); + } + + static Rule elementIsPresent(String elementName) { + return XMLCardinalityRule + .builder() + .setId(ElementSpec.APPLICABILITY_RULE_ID) + .setXPathExpression("//*[local-name()='" + elementName + "']") + .setIsInclusive(true).setRange(1, Long.MAX_VALUE) + .build(); + } + + static Rule elementIsPresentAndHasAttributeWithValue(String elementName, + String attrName, + String attrValue) { + StandardXMLContext context = new StandardXMLContext(); + context.getIdProperty().setValue(ElementSpec.APPLICABILITY_RULE_ID); + context.getNodeListActionProperty().setValue("custom"); + context.getXPathExpressionProperty().setValue("//*[name()='" + elementName + "']"); + return new XMLRule<>(context, (NodeList nodes) -> { + // The nodes contain all the elementName nodes + int len = nodes.getLength(); + if (len == 0) { return false; } // element is not present + for(int i = 0; i < len; i++) { + Node elem = nodes.item(i); + String value = Helper.getAttributeValue(elem, attrName); + if (!attrValue.equals(value)) { return false; } + } + return true; + }); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/DataArchiveGuidelinesV2Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/DataArchiveGuidelinesV2Profile.java new file mode 100644 index 0000000..0fccadf --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/DataArchiveGuidelinesV2Profile.java @@ -0,0 +1,320 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.builtins.XMLCardinalityRule; +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.ElementPosition; +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.ISO639ValuePredicate; +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.*; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public class DataArchiveGuidelinesV2Profile extends AbstractOpenAireProfile { + + private static final String[] identifierTypes = { + "ARK", + "DOI", + "Handle", + "PURL", + "URN", + "URL" + }; + + private static final String[] titleTypes = { + "AlternativeTitle", + "Subtitle", + "TranslatedTitle" + }; + + private static final String[] contributorTypes = { + "ContactPerson", "DataCollector", "DataCurator", + "DataManager", "Distributor", "Editor", "Funder", + "HostingInstitution", "Producer", "ProjectLeader", + "ProjectManager", "ProjectMember", "RegistrationAgency", + "RegistrationAuthority", "RelatedPerson", "Researcher", + "ResearchGroup", "RightsHolder", "Sponsor", + "Supervisor", "WorkPackageLeader", "Other" + }; + + private static final String[] dateTypes = { + "Accepted", + "Available", + "Copyrighted", + "Collected", + "Created", + "Issued", + "Submitted", + "Updated", + "Valid" + }; + + private static final String[] resourceTypeGeneralValues = { + "Audiovisual", + "Collection", + "Dataset", + "Event", + "Image", + "InteractiveResource", + "Model", + "PhysicalObject", + "Service", + "Software", + "Sound", + "Text", + "Workflow", + "Other" + }; + + private static final String[] relatedIdentifierTypes = { + "ARK", "arXiv", "bibcode", "DOI", "EAN13", + "EISSN", "Handle", "IGSN", "ISBN", "ISSN", + "ISTC", "LISSN", "LSID", "PISSN", "PMID", + "PURL", "UPC", "URL", "URN", "WOS" + }; + + private static final String[] relationTypes = { + "IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", + "IsContinuedBy", "Continues", "HasMetadata", "IsMetadataFor", + "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", + "IsReferencedBy", "References", "IsDocumentedBy", "Documents", + "IsCompiledBy", "Compiles", "IsVariantFormOf", "IsOriginalFormOf", + "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", + "IsSourceOf" + }; + + 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[] descriptionTypes = { + "Abstract", + "Methods", + "SeriesInformation", + "TableOfContents", + "Other" + }; + + private static final ElementSpec IDENTIFIER_SPEC = Builders + .forMandatoryElement("identifier", ONE).inContext("metadata", "oai_datacite", "payload", "resource") + .withMandatoryAttribute("identifierType", identifierTypes) + .build(); + + private static final ElementSpec CREATOR_SPEC = 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 TITLE_SPEC = Builders + .forMandatoryElement("title", ONE_TO_N) + .withOptionalAttribute("titleType", titleTypes) + .build(); + + private static final ElementSpec PUBLISHER_SPEC = Builders + .forMandatoryElement("publisher", ONE) + .build(); + + private static final ElementSpec PUBLICATION_YEAR_SPEC = Builders + .forMandatoryElement("publicationYear", ONE).allowedValues(new RegexValuePredicate(COMPILED_YEAR_YYYY_REG_EX)) + .build(); + + private static final ElementSpec SUBJECT_SPEC = Builders + .forRecommendedRepeatableElement("subject") + .withOptionalAttribute("subjectScheme") + .withOptionalAttribute("schemeURI") + .build(); + + + //TODO mandatory if contributorType=Funder (for element and subelements/properties) + private static final ElementSpec CONTRIBUTOR_SPEC = Builders + .forMandatoryIfApplicableElement("contributor", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("contributor")) + .withMandatoryIfApplicableAttribute("contributorType", appRuleForContributorType(), contributorTypes) //TODO + .withSubElement(Builders + .forMandatoryIfApplicableElement("contributorName", ONE, AbstractOpenAireProfile.elementIsPresent("contributor")) + ) + //TODO the RegexValueProdicate for info:eu-repo/grantAgreement must be applied if contributorType is Funder + .withSubElement(Builders.forMandatoryIfApplicableElement("nameIdentifier", ONE, appRuleForContributorNameIdentifier()) + .withMandatoryIfApplicableAttribute("nameIdentifierScheme", appRuleForContributorNameIdentifier()) + .withOptionalAttribute("schemeURI ") + ) + .withSubElement(Builders.forOptionalRepeatableElement("affiliation")) + .build(); + + //TODO: guideline is invalid (0..n). Since Date is mandatory 1..n + //TODO how to enforce that available dateTypes appear only once? + private static final ElementSpec DATE_SPEC = Builders + .forMandatoryElement("date", ONE_TO_N).allowedValues(new RegexValuePredicate(COMPILED_ISO_8601_DATE_REG_EX)) + .withMandatoryAttribute("dateType", dateTypes) + .build(); + + private static final ElementSpec LANGUAGE_SPEC = Builders + .forRecommendedRepeatableElement("language").allowedValues(new ISO639ValuePredicate()) + .build(); + + private static final ElementSpec RESOURCE_TYPE_SPEC = Builders + .forRecommendedElement("resourceType") + .withRecommendedAttribute("resourceTypeGeneral", resourceTypeGeneralValues) + .build(); + + private static final ElementSpec ALTERNATE_IDENTIFIER_SPEC = Builders + .forOptionalRepeatableElement("alternateIdentifier") + .withOptionalAttribute("alternateIdentifierType") + .build(); + + private static final ElementSpec RELATED_IDENTIFIER_SPEC = Builders + .forMandatoryIfApplicableElement("relatedIdentifier", ONE_TO_N, appRuleForRelatedIdentifier()) + .withMandatoryAttribute("relatedIdentifierType", relatedIdentifierTypes) + .withMandatoryAttribute("relationType", relationTypes) + //TODO use the following three attributes only when relationType=HasMetadata|IsMetadataFor + .withOptionalAttribute("relatedMetadataScheme") + .withOptionalAttribute("schemeURI") + .withOptionalAttribute("schemeType") + .build(); + + private static final ElementSpec SIZE_SPEC = Builders + .forOptionalRepeatableElement("size") + .build(); + + private static final ElementSpec FORMAT_SPEC = Builders + .forOptionalRepeatableElement("format") + .build(); + + private static final ElementSpec VERSION_SPEC = Builders + .forOptionalRepeatableElement("version") + .build(); + + private static final ElementSpec RIGHTS_SPEC = Builders + .forMandatoryIfApplicableElement("rights", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("rights")) + .atPosition(ElementPosition.FIRST) + .withMandatoryAttribute("rightsURI", rightsURIList) + .build(); + + private static final ElementSpec RIGHTS_SPEC2 = Builders + .forMandatoryIfApplicableElement("rights", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("rights")) + .atPosition(ElementPosition.SECOND) + .withMandatoryAttribute("rightsURI") + .build(); + + private static final ElementSpec DESCRIPTION_SPEC = Builders + .forMandatoryIfApplicableElement("description", ONE_TO_N, AbstractOpenAireProfile.elementIsPresent("rights")) + .withMandatoryAttribute("descriptionType", descriptionTypes) + .build(); + + private static final ElementSpec GEOLOCATION_SPEC = Builders + .forOptionalRepeatableElement("geoLocation") + .withSubElement(Builders.forOptionalElement("geoLocationPoint")) + .withSubElement(Builders.forOptionalElement("geoLocationBox")) + .withSubElement(Builders.forOptionalElement("geoLocationPlace")) + .build(); + + private static Rule appRuleForContributorType() { + //TODO + return XMLCardinalityRule + .builder() + .setId(ElementSpec.APPLICABILITY_RULE_ID) + .setXPathExpression("//*[name()='contributor']/@contributorType") + .setIsInclusive(true).setRange(1,1).build(); + } + + private static Rule appRuleForContributorNameIdentifier() { + return XMLCardinalityRule + .builder() + .setId(ElementSpec.APPLICABILITY_RULE_ID) + .setXPathExpression("//*[name()='contributor' and @contributorType='Funder']") + .setIsInclusive(true).setRange(1,1).build(); + } + + private static Rule appRuleForRelatedIdentifier() { + //TODO + return XMLCardinalityRule + .builder() + .setId(ElementSpec.APPLICABILITY_RULE_ID) + .setXPathExpression("//*[name()='relatedIdentifier']") + .setIsInclusive(true).setRange(1,Long.MAX_VALUE - 1).build(); + } + + //TODO: weights for guidelines haven't been finalized. They've been given an arbitrary value of 1. + public static final SyntheticGuideline IDENTIFIER = SyntheticGuideline.of("Identifier", 1, IDENTIFIER_SPEC); + public static final SyntheticGuideline CREATOR = SyntheticGuideline.of("Creator", 1, CREATOR_SPEC); + public static final SyntheticGuideline TITLE = SyntheticGuideline.of("Title", 1, TITLE_SPEC); + public static final SyntheticGuideline PUBLISHER = SyntheticGuideline.of("Publisher", 1, PUBLISHER_SPEC); + public static final SyntheticGuideline PUBLICATION_YEAR = SyntheticGuideline.of("PublicationYear", 1, PUBLICATION_YEAR_SPEC); + public static final SyntheticGuideline SUBJECT = SyntheticGuideline.of("Subject", 1, SUBJECT_SPEC); + public static final SyntheticGuideline CONTRIBUTOR = SyntheticGuideline.of("Contributor", 1, CONTRIBUTOR_SPEC); + public static final SyntheticGuideline DATE = SyntheticGuideline.of("Date", 1, DATE_SPEC); + public static final SyntheticGuideline LANGUAGE = SyntheticGuideline.of("Language", 1, LANGUAGE_SPEC); + public static final SyntheticGuideline RESOURCE_TYPE = SyntheticGuideline.of("ResourceType", 1, RESOURCE_TYPE_SPEC); + public static final SyntheticGuideline ALTERNATE_IDENTIFIER = SyntheticGuideline.of("AlternateIdentifier", 1, ALTERNATE_IDENTIFIER_SPEC); + public static final SyntheticGuideline RELATED_IDENTIFIER = SyntheticGuideline.of("RelatedIdentifier", 1, RELATED_IDENTIFIER_SPEC); + public static final SyntheticGuideline SIZE = SyntheticGuideline.of("Size", 1, SIZE_SPEC); + public static final SyntheticGuideline FORMAT = SyntheticGuideline.of("Format", 1, FORMAT_SPEC); + public static final SyntheticGuideline VERSION = SyntheticGuideline.of("Version", 1, VERSION_SPEC); + public static final SyntheticGuideline RIGHTS = SyntheticGuideline.of("Rights", 1, RIGHTS_SPEC); + public static final SyntheticGuideline DESCRIPTION = SyntheticGuideline.of("Description", 1, DESCRIPTION_SPEC); + public static final SyntheticGuideline GEOLOCATION = SyntheticGuideline.of("Geolocation", 1, GEOLOCATION_SPEC); + + private static final List GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + IDENTIFIER, + CREATOR, + TITLE, + PUBLISHER, + PUBLICATION_YEAR, + SUBJECT, + CONTRIBUTOR, + DATE, + LANGUAGE, + RESOURCE_TYPE, + ALTERNATE_IDENTIFIER, + RELATED_IDENTIFIER, + SIZE, + FORMAT, + VERSION, + RIGHTS, + DESCRIPTION, + GEOLOCATION + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(SyntheticGuideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(SyntheticGuideline::getWeight).reduce(0, Integer::sum); + + + public DataArchiveGuidelinesV2Profile() { + super("OpenAIRE Guidelines for Data Archives Profile v2"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + @Override + public SyntheticGuideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV3Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV3Profile.java new file mode 100644 index 0000000..482dc8e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV3Profile.java @@ -0,0 +1,298 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.engine.Predicates; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.builtins.XMLCardinalityRule; +import eu.dnetlib.validator2.validation.guideline.*; +import eu.dnetlib.validator2.validation.utils.EmbargoedEndDateValuePredicate; +import eu.dnetlib.validator2.validation.utils.ISO639ValuePredicate; +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.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +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 LiteratureGuidelinesV3Profile extends AbstractOpenAireProfile { + + private static final String[] repoAccessTerms = { + "info:eu-repo/semantics/closedAccess", + "info:eu-repo/semantics/embargoedAccess", + "info:eu-repo/semantics/restrictedAccess", + "info:eu-repo/semantics/openAccess" + }; + + private static final String[] publicationTypes = { + "info:eu-repo/semantics/article", + "info:eu-repo/semantics/bachelorThesis", + "info:eu-repo/semantics/masterThesis", + "info:eu-repo/semantics/doctoralThesis", + "info:eu-repo/semantics/book", + "info:eu-repo/semantics/bookPart", + "info:eu-repo/semantics/review", + "info:eu-repo/semantics/conferenceObject", + "info:eu-repo/semantics/lecture", + "info:eu-repo/semantics/workingPaper", + "info:eu-repo/semantics/preprint", + "info:eu-repo/semantics/report", + "info:eu-repo/semantics/annotation", + "info:eu-repo/semantics/contributionToPeriodical", + "info:eu-repo/semantics/patent", + "info:eu-repo/semantics/other" + }; + + private static final String[] publicationVersions = { + "info:eu-repo/semantics/draft", + "info:eu-repo/semantics/submittedVersion", + "info:eu-repo/semantics/acceptedVersion", + "info:eu-repo/semantics/publishedVersion", + "info:eu-repo/semantics/updateVersion" + }; + + private static final String[] publicationTypesAndVersions = Stream + .concat(Arrays.stream(publicationTypes), Arrays.stream(publicationVersions)) + .toArray(String[]::new); + + private static final String[] audiences = { + "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" + }; + + private static final ElementSpec TITLE_SPEC = Builders + .forMandatoryElement("title", ONE_TO_N) + .build(); + + private static final ElementSpec CREATOR_SPEC = Builders + .forMandatoryElement("creator", ONE_TO_N) + .build(); + + private static final ElementSpec PROJECT_IDENTIFIER_SPEC = Builders + .forMandatoryIfApplicableElement("relation", ONE, elementIsPresent("relation")) + .allowedValues(new RegexValuePredicate(COMPILED_PROJECT_IDENTIFIER_REGEX)) + .build(); + + private static final ElementSpec ACCESS_LEVEL_SPEC = Builders + .forMandatoryElement("rights", ONE).allowedValues(repoAccessTerms) + .build(); + + private static final ElementSpec LICENSE_CONDITION_SPEC = Builders + .forRecommendedRepeatableElement("rights") + .allowedValues(new RegexValuePredicate(COMPILED_LICENSE_CONDITION_REG_EX)) + .build(); + + private static final ElementSpec EMBARGO_END_DATE_SPEC = Builders + .forMandatoryIfApplicableElement("date", ONE, applicabilityRuleForEmbargoEndDate()) + .allowedValues(new EmbargoedEndDateValuePredicate()) + .build(); + + private static final ElementSpec ALT_IDENTIFIER_SPEC = Builders + .forRecommendedRepeatableElement("relation") + .allowedValues(new RegexValuePredicate(COMPILED_ALT_IDENTIFIER_REG_EX)) + .build(); + + private static final ElementSpec PUBLICATION_REF_SPEC = Builders + .forRecommendedRepeatableElement("relation") + .allowedValues(new RegexValuePredicate(COMPILED_PUBLICATION_REFERENCE_REG_EX)) + .build(); + + private static final ElementSpec DATASET_REF_SPEC = Builders + .forRecommendedRepeatableElement("relation") + .allowedValues(new RegexValuePredicate(COMPILED_DATASET_REFERENCE_REG_EX)) + .build(); + + //TODO value is either a keyword (free text) or a classification (info:eu-repo/classification) + // v3 guideliness recommends ddc classification (Dewey Decimal Classification) + private static final ElementSpec SUBJECT_SPEC = Builders + .forMandatoryIfApplicableElement("subject", ONE_TO_N, elementIsPresent("subject")) + .build(); + + private static final ElementSpec DESCRIPTION_SPEC = Builders + .forMandatoryIfApplicableElement("description", ONE_TO_N, elementIsPresent("description")) + .build(); + + private static final ElementSpec PUBLISHER_SPEC = Builders + .forMandatoryIfApplicableElement("publisher", ONE_TO_N, elementIsPresent("publisher")) + .build(); + + private static final ElementSpec CONTRIBUTOR_SPEC = Builders + .forRecommendedRepeatableElement("contributor") + .build(); + + //TODO + // Search element -> dc:date AND NOT embargoedDate + private static final ElementSpec PUBLICATION_DATE_SPEC = Builders + .forMandatoryElement("date", ONE) + .allowedValues(new RegexValuePredicate(COMPILED_PUBLICATION_DATE_REG_EX)) + .build(); + + //TODO values from publication types + // Search element -> dc:type AND values IN publicationTypes set + //TODO: Check it is first occurrence + private static final ElementSpec PUBLICATION_TYPE_M_SPEC = Builders + .forMandatoryElement("type", ONE) + .atPosition(ElementPosition.FIRST) + .allowedValues(publicationTypes) + .build(); + + //TODO + // Search element -> dc:type AND values NOT IN publicationTypes + //TODO: check it is second occurrence + private static final ElementSpec PUBLICATION_TYPE_O_SPEC = Builders + .forOptionalElement("type") + .atPosition(ElementPosition.SECOND) + .allowedValues(new Predicates.SetOfCaseInsensitiveAllowedValues(publicationTypesAndVersions).negate()) + .build(); + + private static final ElementSpec PUBLICATION_VERSION_SPEC = Builders + .forRecommendedElement("type") + .allowedValues(publicationVersions) + .build(); + + private static final ElementSpec FORMAT_SPEC = Builders + .forRecommendedRepeatableElement("format") + .allowedValues(new MediaTypesValuePredicate()) + .build(); + + private static final ElementSpec RESOURCE_IDENTIFIER_SPEC = Builders + .forMandatoryElement("identifier", ONE_TO_N) + .build(); + + private static final ElementSpec SOURCE_SPEC = Builders + .forRecommendedRepeatableElement("source") + .build(); + + //TODO values from ISO 639-1 or 639-2 or 639-3 (recommended) + private static final ElementSpec LANGUAGE_SPEC = Builders + .forRecommendedRepeatableElement("language") + .allowedValues(new ISO639ValuePredicate()) + .build(); + + //TODO: Should exclude other dc:relation elements e.g. !containsAllowedValuesOF -> Project Identifier (MA), Alternative Identifier (R), Publication Reference (R), Dataset Reference (R) + private static final ElementSpec RELATION_SPEC = Builders + .forOptionalRepeatableElement("relation") + .allowedValues(relationSpecAllowedValuesPredicate()) + .build(); + + private static final ElementSpec COVERAGE_SPEC = Builders + .forRecommendedRepeatableElement("coverage") + .build(); + + private static final ElementSpec AUDIENCE_SPEC = Builders + .forRecommendedRepeatableElement("audience") + .allowedValues(audiences) + .build(); + + private static Rule applicabilityRuleForEmbargoEndDate() { + return XMLCardinalityRule.builder(). + setId(ElementSpec.APPLICABILITY_RULE_ID). + // first predicate count(...) makes sure there is only one Access Level set and then the second predicate verifies its value. + setXPathExpression("//*[count(//*[local-name()='rights' and starts-with(normalize-space(text()), 'info:eu-repo/semantics/')])=1][local-name()='rights' and normalize-space(text())='info:eu-repo/semantics/embargoedAccess']"). + setRange(1,1). + setIsInclusive(true). + build(); + } + + private static Predicate relationSpecAllowedValuesPredicate() { + return new RegexValuePredicate(COMPILED_PROJECT_IDENTIFIER_REGEX).negate(). + and(new RegexValuePredicate(COMPILED_ALT_IDENTIFIER_REG_EX).negate(). + and(new RegexValuePredicate(COMPILED_PUBLICATION_REFERENCE_REG_EX).negate(). + and(new RegexValuePredicate(COMPILED_DATASET_REFERENCE_REG_EX).negate()))); + } + + public static final SyntheticGuideline TITLE = SyntheticGuideline.of("Title", 4, TITLE_SPEC); + public static final SyntheticGuideline CREATOR = SyntheticGuideline.of("Creator", 4, CREATOR_SPEC); + public static final SyntheticGuideline PROJECT_IDENTIFIER = SyntheticGuideline.of("Project Identifier", 5, PROJECT_IDENTIFIER_SPEC); + public static final SyntheticGuideline ACCESS_LEVEL = SyntheticGuideline.of("Access Level", 5, ACCESS_LEVEL_SPEC); + public static final SyntheticGuideline LICENSE_CONDITION = SyntheticGuideline.of("License Condition", 1, LICENSE_CONDITION_SPEC); + public static final SyntheticGuideline EMBARGO_END_DATE = SyntheticGuideline.of("Embargo End Date", 5, EMBARGO_END_DATE_SPEC); + public static final SyntheticGuideline ALTERNATIVE_IDENTIFIER = SyntheticGuideline.of("Alternative Identifier", 5, ALT_IDENTIFIER_SPEC); + public static final SyntheticGuideline PUBLICATION_REFERENCE = SyntheticGuideline.of("Publication Reference", 2, PUBLICATION_REF_SPEC); + public static final SyntheticGuideline DATASET_REFERENCE = SyntheticGuideline.of("Dataset Reference", 2, DATASET_REF_SPEC); + public static final SyntheticGuideline SUBJECT = SyntheticGuideline.of("Subject", 5, SUBJECT_SPEC); + public static final SyntheticGuideline DESCRIPTION = SyntheticGuideline.of("Description", 5, DESCRIPTION_SPEC); + public static final SyntheticGuideline PUBLISHER = SyntheticGuideline.of("Publisher", 5, PUBLISHER_SPEC); + public static final SyntheticGuideline CONTRIBUTOR = SyntheticGuideline.of("Contributor", 2, CONTRIBUTOR_SPEC); + public static final SyntheticGuideline PUBLICATION_DATE = SyntheticGuideline.of("Publication Date", 5, PUBLICATION_DATE_SPEC); + public static final SyntheticGuideline PUBLICATION_TYPE_MANDATORY = SyntheticGuideline.of("Publication Type M", 5, PUBLICATION_TYPE_M_SPEC); + public static final SyntheticGuideline PUBLICATION_TYPE_OPTIONAL = SyntheticGuideline.of("Publication Type O", 1, PUBLICATION_TYPE_O_SPEC); + public static final SyntheticGuideline PUBLICATION_VERSION = SyntheticGuideline.of("Publication Version", 2, PUBLICATION_VERSION_SPEC); + public static final SyntheticGuideline FORMAT = SyntheticGuideline.of("Format", 2, FORMAT_SPEC); + public static final SyntheticGuideline RESOURCE_IDENTIFIER = SyntheticGuideline.of("Resource Identifier", 5, RESOURCE_IDENTIFIER_SPEC); + public static final SyntheticGuideline SOURCE = SyntheticGuideline.of("Source", 5, SOURCE_SPEC); + public static final SyntheticGuideline LANGUAGE = SyntheticGuideline.of("Language", 2, LANGUAGE_SPEC); + public static final SyntheticGuideline RELATION = SyntheticGuideline.of("Relation", 1, RELATION_SPEC); + public static final SyntheticGuideline COVERAGE = SyntheticGuideline.of("Coverage", 1, COVERAGE_SPEC); + public static final SyntheticGuideline AUDIENCE = SyntheticGuideline.of("Audience", 2, AUDIENCE_SPEC); + + private static final List GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + TITLE, + CREATOR, + PROJECT_IDENTIFIER, + ACCESS_LEVEL, + LICENSE_CONDITION, + EMBARGO_END_DATE, + ALTERNATIVE_IDENTIFIER, + PUBLICATION_REFERENCE, + DATASET_REFERENCE, + SUBJECT, + DESCRIPTION, + PUBLISHER, + CONTRIBUTOR, + PUBLICATION_DATE, + PUBLICATION_TYPE_MANDATORY, + PUBLICATION_TYPE_OPTIONAL, + PUBLICATION_VERSION, + FORMAT, + RESOURCE_IDENTIFIER, + SOURCE, + LANGUAGE, + RELATION, + COVERAGE, + AUDIENCE + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(SyntheticGuideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(SyntheticGuideline::getWeight).reduce(0, Integer::sum); + + public LiteratureGuidelinesV3Profile() { + super("OpenAIRE Guidelines for Literature Repositories Profile v3"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + @Override + public SyntheticGuideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV4Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV4Profile.java new file mode 100644 index 0000000..84feebd --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/LiteratureGuidelinesV4Profile.java @@ -0,0 +1,513 @@ +package eu.dnetlib.validator2.validation.guideline.openaire; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.builtins.XMLCardinalityRule; +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.ISO639ValuePredicate; +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.*; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_BCP47_LANG_TAGS_REG_EX; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_RANGE_REGEX; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_REGEX; + +public final class LiteratureGuidelinesV4Profile 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_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" + }; + + private static final ElementSpec TITLE_SPEC = 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 CREATOR_SPEC = 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 CONTRIBUTOR_SPEC = Builders. + forMandatoryIfApplicableElement("datacite:contributor", ONE_TO_N, elementIsPresent("datacite:contributor")). + 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(); + + //This property has some issues/annotations in documentation + private static final ElementSpec FUNDING_REFERENCE_SPEC = Builders. + forMandatoryIfApplicableElement("oaire:fundingReference", ONE_TO_N, elementIsPresent("oaire:fundingReference")). + withSubElement(Builders. + forMandatoryElement("oaire:funderName", ONE)). + withSubElement(Builders. + forRecommendedElement("oaire:funderIdentifier"). + withRecommendedAttribute("funderIdentifierType", FUNDER_IDENTIFIER_TYPES)). + withSubElement(Builders. + forOptionalElement("oaire:fundingStream")). + withSubElement(Builders. + forMandatoryIfApplicableElement("oaire:awardNumber", ONE, elementIsPresent("oaire:awardNumber")). + withRecommendedAttribute("awardURI")). + withSubElement(Builders. + forRecommendedElement("oaire:awardTitle")). + build(); + + //TODO: Allowed values are referred as "suggested" in the documentation, but then a controlled list is given. + // Relevant issues: + // https://bitbucket.org/saikos/openaire-validator/issues/40 + // https://bitbucket.org/saikos/openaire-validator/issues/32/ + private static final ElementSpec ALTERNATE_IDENTIFIER_SPEC = Builders. + forRecommendedRepeatableElement("datacite:alternateIdentifier"). + withMandatoryAttribute("alternateIdentifierType", IDENTIFIER_TYPES). + build(); + + private static final ElementSpec RELATED_IDENTIFIER_SPEC = 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(); + + /* + Applicable when Access Rights is set to: + embargoed access + Date encoding "YYYY-MM-DD" is referred as best practice. Should introduce in allowed values? + */ + //TODO: Implement proper applicability rule + private static final ElementSpec EMBARGO_PERIOD_DATE_SPEC = Builders. + forMandatoryIfApplicableElement("datacite:date", TWO, applicabilityRuleForEmbargoPeriodDate()). + withMandatoryAttribute("dateType", EMBARGO_DATE_TYPES). + build(); + + /* + There are no "strict" allowed values. Recommendations are IETF BCP 47 and ISO 639-x + */ + private static final ElementSpec LANGUAGE_SPEC = Builders. + forMandatoryIfApplicableElement("dc:language", ONE_TO_N, elementIsPresent("dc:language")). + allowedValues(new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX).or(new ISO639ValuePredicate())). + build(); + + private static final ElementSpec PUBLISHER_SPEC = Builders. + forMandatoryIfApplicableElement("dc:publisher", ONE_TO_N, elementIsPresent("dc:publisher")). + build(); + + /* + TODO: Same name as EMBARGO_PERIOD_DATE_SPEC above, with different attribute allowed value. + Should probably revisit, take that into consideration, when making relevant rules. + "Recommended" best practice for encoding the date value is ISO 8601 [W3CDTF] (YYYY-MM-DD) (YYYY mandatory) + */ + private static final ElementSpec PUBLICATION_DATE_SPEC = Builders. + forMandatoryElement("datacite:date", ONE). + withMandatoryAttribute("dateType", PUBLICATION_DATE_TYPE). + build(); + + private static final ElementSpec RESOURCE_TYPE_SPEC = Builders. + forMandatoryElement("oaire:resourceType", ONE). + withMandatoryAttribute("resourceTypeGeneral", RESOURCE_GENERAL_TYPES). + withMandatoryAttribute("uri", RESOURCE_CONCEPT_URIS). + build(); + + private static final ElementSpec DESCRIPTION_SPEC = Builders. + forMandatoryIfApplicableElement("dc:description", ONE_TO_N, elementIsPresent("dc:description")). + withOptionalAttribute("xml:lang", new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)). + build(); + + private static final ElementSpec FORMAT_SPEC = Builders. + forRecommendedRepeatableElement("dc:format"). + allowedValues(new MediaTypesValuePredicate()). + build(); + + private static final ElementSpec RESOURCE_IDENTIFIER_SPEC = Builders. + forMandatoryElement("datacite:identifier", ONE). + withMandatoryAttribute("identifierType", RESOURCE_IDENTIFIER_TYPES). + build(); + + private static final ElementSpec ACCESS_RIGHTS_SPEC = Builders. + forMandatoryElement("datacite:rights", ONE). + withMandatoryAttribute("uri", ACCESS_RIGHTS_URIS). + build(); + + private static final ElementSpec SOURCE_SPEC = Builders. + forRecommendedRepeatableElement("dc:source"). + build(); + + //TODO: Should we check URI attribute values are valid? + private static final ElementSpec SUBJECT_SPEC = Builders. + forMandatoryIfApplicableElement("datacite:subject", ONE_TO_N, elementIsPresent("datacite:subject")). + withOptionalAttribute("subjectScheme"). + withOptionalAttribute("schemeURI"). + withOptionalAttribute("valueURI"). + build(); + + private static final ElementSpec LICENSE_CONDITION_SPEC = Builders. + forRecommendedElement("oaire:licenseCondition"). + withMandatoryIfApplicableAttribute("uri", elementIsPresent("oaire:licenseCondition")). + withMandatoryIfApplicableAttribute("startDate", elementIsPresent("oaire:licenseCondition")). + build(); + + private static final ElementSpec COVERAGE_SPEC = Builders. + forRecommendedRepeatableElement("dc:coverage"). + build(); + + private static final ElementSpec SIZE_SPEC = Builders. + forOptionalRepeatableElement("datacite:size"). + build(); + + private static final ElementSpec GEO_LOCATION_SPEC = Builders. + forOptionalRepeatableElement("datacite:geoLocation"). + withSubElement(Builders. + forOptionalElement("datacite:geoLocationPoint"). + withSubElement(Builders. + forMandatoryElement("datacite:pointLongitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:pointLatitude", ONE))). + withSubElement(Builders. + forOptionalElement("datacite:geoLocationBox"). + withSubElement(Builders. + forMandatoryElement("datacite:westBoundLongitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:eastBoundLongitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:southBoundLatitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:northBoundLatitude", ONE))). + withSubElement(Builders. + forOptionalElement("datacite:geoLocationPlace")). + withSubElement(Builders. + forOptionalRepeatableElement("datacite:geoLocationPolygon"). + withSubElement(Builders. + forMandatoryElement("datacite:polygonPoint", FOUR_TO_N). + withSubElement(Builders. + forMandatoryElement("datacite:pointLongitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:pointLatitude", ONE))). + withSubElement(Builders. + forOptionalElement("datacite:inPolygonPoint"). + withSubElement(Builders. + forMandatoryElement("datacite:pointLongitude", ONE)). + withSubElement(Builders. + forMandatoryElement("datacite:pointLatitude", ONE)))). + build(); + + /* + TODO: RequirementLevel.RECOMMENDED, Cardinality.ONE? + If uri attribute is present, element also has relevant controlled allowed values mapped to it's value. + uri attribute applicable when element value is one of controlled values. + Must be relevant value of [AO, SMUR, AM, P, VoR, CVoR, EVoR, NA] + Otherwise can be a number + TODO: Should we cross-check attribute and element value are relevant? + */ + private static final ElementSpec RESOURCE_VERSION_SPEC = Builders. + forRecommendedElement("oaire:version"). + withMandatoryIfApplicableAttribute("uri", applicabilityRuleForURIAttributeOfResourceVersion(), RESOURCE_VERSION_URIS). + build(); + + //TODO: Has annotation/issue: accessRightsURI attribute values also appears on ACCESS_RIGHTS_SPEC. Should check it's the same? + private static final ElementSpec FILE_LOCATION_SPEC = Builders. + forMandatoryIfApplicableElement("oaire:file", ONE_TO_N, elementIsPresent("oaire:file")). + withRecommendedAttribute("accessRightsURI", ACCESS_RIGHTS_URIS). + withRecommendedAttribute("mimeType", new MediaTypesValuePredicate()). + withRecommendedAttribute("objectType", FILE_OBJECT_TYPES). + build(); + + private static final ElementSpec CITATION_TITLE_SPEC = Builders. + forRecommendedElement("oaire:citationTitle"). + build(); + + private static final ElementSpec CITATION_VOLUME_SPEC = Builders. + forRecommendedElement("oaire:citationVolume"). + build(); + + private static final ElementSpec CITATION_ISSUE_SPEC = Builders. + forRecommendedElement("oaire:citationIssue"). + build(); + + private static final ElementSpec CITATION_START_PAGE_SPEC = Builders. + forRecommendedElement("oaire:citationStartPage"). + build(); + + private static final ElementSpec CITATION_END_PAGE_SPEC = Builders. + forRecommendedElement("oaire:citationEndPage"). + build(); + + private static final ElementSpec CITATION_EDITION_SPEC = Builders. + forRecommendedElement("oaire:citationEdition"). + build(); + + private static final ElementSpec CITATION_CONFERENCE_PLACE_SPEC = Builders. + forRecommendedElement("oaire:citationConferencePlace"). + build(); + + //TODO: Implement regex/allowedValuesPredicate + // Date has recommended best practice ISO 8601 [W3CDTF], and two [single date] [start date - end date] formats + private static final ElementSpec CITATION_CONFERENCE_DATE_SPEC = Builders. + forRecommendedElement("oaire:citationConferenceDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX).or(new RegexValuePredicate(COMPILED_YYYY_MM_DD_RANGE_REGEX))). + build(); + + //TODO: A non-exhaustive list is provided for values, derived from the Common Education Data Standards vocabulary + // Should we add it? + private static final ElementSpec AUDIENCE_SPEC = Builders. + forOptionalRepeatableElement("dcterms:audience"). + allowedValues(AUDIENCE_VOCABULARY). + build(); + + private static Rule applicabilityRuleForEmbargoPeriodDate() { + return XMLCardinalityRule.builder(). + setId(ElementSpec.APPLICABILITY_RULE_ID). + // first predicate count(...) makes sure there is only one "Access Rights" element, and the second predicate verifies its value. + setXPathExpression("//*[count(//*[name()='datacite:rights'])=1][name()='datacite:rights' and @uri='http://purl.org/coar/access_right/c_f1cf' and normalize-space(text())='embargoed access']"). + setRange(1,1). + setIsInclusive(true). + 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 TITLE = SyntheticGuideline.of("Title", 1, TITLE_SPEC); + public static SyntheticGuideline CREATOR = SyntheticGuideline.of("Creator", 1, CREATOR_SPEC); + public static SyntheticGuideline CONTRIBUTOR = SyntheticGuideline.of("Contributor", 1, CONTRIBUTOR_SPEC); + public static SyntheticGuideline FUNDING_REFERENCE = SyntheticGuideline.of("Funding Reference", 1, FUNDING_REFERENCE_SPEC); + public static SyntheticGuideline ALTERNATE_IDENTIFIER = SyntheticGuideline.of("Alternate Identifier", 1, ALTERNATE_IDENTIFIER_SPEC); + public static SyntheticGuideline RELATED_IDENTIFIER = SyntheticGuideline.of("Related Identifier", 1, RELATED_IDENTIFIER_SPEC); + public static SyntheticGuideline EMBARGO_PERIOD_DATE = SyntheticGuideline.of("Embargo Period Date", 1, EMBARGO_PERIOD_DATE_SPEC); + public static SyntheticGuideline LANGUAGE = SyntheticGuideline.of("Language", 1, LANGUAGE_SPEC); + public static SyntheticGuideline PUBLISHER = SyntheticGuideline.of("Publisher", 1, PUBLISHER_SPEC); + public static SyntheticGuideline PUBLICATION_DATE = SyntheticGuideline.of("Publication Date", 1, PUBLICATION_DATE_SPEC); + public static SyntheticGuideline RESOURCE_TYPE = SyntheticGuideline.of("Resource Type", 1, RESOURCE_TYPE_SPEC); + public static SyntheticGuideline DESCRIPTION = SyntheticGuideline.of("Description", 1, DESCRIPTION_SPEC); + public static SyntheticGuideline FORMAT = SyntheticGuideline.of("Format", 1, FORMAT_SPEC); + public static SyntheticGuideline RESOURCE_IDENTIFIER = SyntheticGuideline.of("Resource Identifier", 1, RESOURCE_IDENTIFIER_SPEC); + public static SyntheticGuideline ACCESS_RIGHTS = SyntheticGuideline.of("Access Rights", 1, ACCESS_RIGHTS_SPEC); + public static SyntheticGuideline SOURCE = SyntheticGuideline.of("Source", 1, SOURCE_SPEC); + public static SyntheticGuideline SUBJECT = SyntheticGuideline.of("Subject", 1, SUBJECT_SPEC); + public static SyntheticGuideline LICENSE_CONDITION = SyntheticGuideline.of("License Condition", 1, LICENSE_CONDITION_SPEC); + public static SyntheticGuideline COVERAGE = SyntheticGuideline.of("Coverage", 1, COVERAGE_SPEC); + public static SyntheticGuideline SIZE = SyntheticGuideline.of("Size", 1, SIZE_SPEC); + public static SyntheticGuideline GEO_LOCATION = SyntheticGuideline.of("Geo Location", 1, GEO_LOCATION_SPEC); + public static SyntheticGuideline RESOURCE_VERSION = SyntheticGuideline.of("Resource Version", 1, RESOURCE_VERSION_SPEC); + public static SyntheticGuideline FILE_LOCATION = SyntheticGuideline.of("File Location", 1, FILE_LOCATION_SPEC); + public static SyntheticGuideline CITATION_TITLE = SyntheticGuideline.of("Citation Title", 1, CITATION_TITLE_SPEC); + public static SyntheticGuideline CITATION_VOLUME = SyntheticGuideline.of("Citation Volume", 1, CITATION_VOLUME_SPEC); + public static SyntheticGuideline CITATION_ISSUE = SyntheticGuideline.of("Citation Issue", 1, CITATION_ISSUE_SPEC); + public static SyntheticGuideline CITATION_START_PAGE = SyntheticGuideline.of("Citation Start Page", 1, CITATION_START_PAGE_SPEC); + public static SyntheticGuideline CITATION_END_PAGE = SyntheticGuideline.of("Citation End Page", 1, CITATION_END_PAGE_SPEC); + public static SyntheticGuideline CITATION_EDITION = SyntheticGuideline.of("Citation Edition", 1, CITATION_EDITION_SPEC); + public static SyntheticGuideline CITATION_CONFERENCE_PLACE = SyntheticGuideline.of("Citation Conference Place", 1, CITATION_CONFERENCE_PLACE_SPEC); + public static SyntheticGuideline CITATION_CONFERENCE_DATE = SyntheticGuideline.of("Citation Conference Date", 1, CITATION_CONFERENCE_DATE_SPEC); + public static SyntheticGuideline AUDIENCE = SyntheticGuideline.of("Audience", 1, AUDIENCE_SPEC); + + private static final List GUIDELINES = Collections.unmodifiableList( + Arrays.asList( + TITLE, + CREATOR, + CONTRIBUTOR, + FUNDING_REFERENCE, + ALTERNATE_IDENTIFIER, + RELATED_IDENTIFIER, + EMBARGO_PERIOD_DATE, + LANGUAGE, + PUBLISHER, + PUBLICATION_DATE, + RESOURCE_TYPE, + DESCRIPTION, + FORMAT, + RESOURCE_IDENTIFIER, + ACCESS_RIGHTS, + SOURCE, + SUBJECT, + LICENSE_CONDITION, + COVERAGE, + SIZE, + GEO_LOCATION, + RESOURCE_VERSION, + FILE_LOCATION, + CITATION_TITLE, + CITATION_VOLUME, + CITATION_ISSUE, + CITATION_START_PAGE, + CITATION_END_PAGE, + CITATION_EDITION, + CITATION_CONFERENCE_PLACE, + CITATION_CONFERENCE_DATE, + AUDIENCE + ) + ); + + private static final Map GUIDELINE_MAP = GUIDELINES. + stream(). + collect(Collectors.toMap(SyntheticGuideline::getName, (guideline) -> guideline)); + + private static final int MAX_SCORE = GUIDELINES.stream().map(SyntheticGuideline::getWeight).reduce(0, Integer::sum); + + public LiteratureGuidelinesV4Profile() { + super("OpenAIRE Guidelines for Literature Repositories Profile v4"); + } + + @Override + public Collection> guidelines() { + return GUIDELINES; + } + + @Override + public SyntheticGuideline guideline(String guidelineName) { + return GUIDELINE_MAP.get(guidelineName); + } + + @Override + public int maxScore() { + return MAX_SCORE; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/AbstractCrisProfile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/AbstractCrisProfile.java new file mode 100644 index 0000000..a3ab691 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/AbstractCrisProfile.java @@ -0,0 +1,105 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_DOI_REG_EX; +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_REGEX; + +public abstract class AbstractCrisProfile extends AbstractOpenAireProfile { + + private static final String[] OA_MANDATE_VOCABULARY = {"true", "false"}; + private static final String[] ACCESS_VOCABULARY = { + "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" + }; + + //Cross-referenced specs (WIP) + static final Builders.ElementSpecBuilder PERSON_SPEC = null; + static final Builders.ElementSpecBuilder ORG_UNIT_SPEC = null; + static final Builders.ElementSpecBuilder PROJECT_SPEC = null; + static final Builders.ElementSpecBuilder FUNDING_SPEC = null; + static final Builders.ElementSpecBuilder EVENT_SPEC = null; + static final Builders.ElementSpecBuilder PATENT_SPEC = null; + static final Builders.ElementSpecBuilder PRODUCT_SPEC = null; + static final Builders.ElementSpecBuilder PUBLICATION_SPEC = null; + static final Builders.ElementSpecBuilder EQUIPMENT_SPEC = null; + + //Sub-specs with multiple Occurrences among different Cris Profiles + static final Builders.ElementSpecBuilder ACRONYM_SPEC = Builders. + forOptionalElement("Acronym"); + + static final Builders.ElementSpecBuilder NAME_SPEC = Builders. + forOptionalRepeatableElement("Name"); + + static final Builders.ElementSpecBuilder IDENTIFIER_SPEC = Builders. + forOptionalRepeatableElement("Identifier"). + withMandatoryAttribute("type"); + + static final Builders.ElementSpecBuilder DESCRIPTION_SPEC = Builders. + forOptionalRepeatableElement("Description"); + + static final Builders.ElementSpecBuilder SUBJECT_SPEC = Builders. + forOptionalRepeatableElement("Subject"). + withMandatoryAttribute("scheme"); + + static final Builders.ElementSpecBuilder KEYWORD_SPEC = Builders. + forOptionalRepeatableElement("Keyword"); + + static final Builders.ElementSpecBuilder TITLE_SPEC = Builders. + forOptionalRepeatableElement("Title"); + + static final Builders.ElementSpecBuilder ABSTRACT_SPEC = Builders. + forOptionalRepeatableElement("Abstract"); + + static final Builders.ElementSpecBuilder START_DATE_SPEC = Builders. + forOptionalElement("StartDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX)); //TODO: Add optional time zone indication in regex + + static final Builders.ElementSpecBuilder END_DATE_SPEC = Builders. + forOptionalElement("EndDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX)); //TODO: Add optional time zone indication in regex + + static final Builders.ElementSpecBuilder OA_MANDATE_SPEC = Builders. + forOptionalRepeatableElement("OAMandate"). + withMandatoryAttribute("mandated", OA_MANDATE_VOCABULARY). + withOptionalAttribute("uri"); + + static final Builders.ElementSpecBuilder ELECTRONIC_ADDRESS_SPEC = Builders. + forOptionalRepeatableElement("ElectronicAddress"); + + static final Builders.ElementSpecBuilder VERSION_INFO_SPEC = Builders. + forOptionalRepeatableElement("VersionInfo"); + + static final Builders.ElementSpecBuilder DOI_SPEC = Builders. + forOptionalElement("DOI"). + allowedValues(new RegexValuePredicate(COMPILED_DOI_REG_EX)); + + static final Builders.ElementSpecBuilder HANDLE_SPEC = Builders. + forOptionalElement("Handle"); + + static final Builders.ElementSpecBuilder URL_SPEC = Builders. + forOptionalElement("URL"); + + static final Builders.ElementSpecBuilder URN_SPEC = Builders. + forOptionalElement("URN"); + + static final Builders.ElementSpecBuilder LICENSE_SPEC = Builders. + forOptionalRepeatableElement("License"). + withMandatoryAttribute("scheme"); + + //TODO: Add namespace + static final Builders.ElementSpecBuilder NS4_ACCESS_SPEC = Builders. + forOptionalElement("Access"). + allowedValues(ACCESS_VOCABULARY); + + static final Builders.ElementSpecBuilder STATUS_SPEC = Builders. + forOptionalRepeatableElement("Status"). + withMandatoryAttribute("scheme"); + + public AbstractCrisProfile(String name) { + super(name); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEquipmentV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEquipmentV111Profile.java new file mode 100644 index 0000000..e51c83a --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEquipmentV111Profile.java @@ -0,0 +1,54 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +public class CrisEquipmentV111Profile extends AbstractCrisProfile { + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forOptionalRepeatableElement("Type"). + withMandatoryAttribute("scheme"); + + private static final Builders.ElementSpecBuilder OWNER_SPEC = Builders. + forOptionalRepeatableElement("Owner"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC); //TODO: Pass proper spec + + private static final ElementSpec EQUIPMENT_SPEC = Builders. + forMandatoryElement("Equipment", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(NAME_SPEC). + withSubElement(IDENTIFIER_SPEC). + withSubElement(DESCRIPTION_SPEC). + withSubElement(OWNER_SPEC). + build(); + + public CrisEquipmentV111Profile(String name) { + super(name); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEventV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEventV111Profile.java new file mode 100644 index 0000000..4b0aa21 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisEventV111Profile.java @@ -0,0 +1,80 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_REGEX; + +public class CrisEventV111Profile extends AbstractCrisProfile { + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forOptionalRepeatableElement("Type"). + withMandatoryAttribute("scheme"); + + private static final Builders.ElementSpecBuilder PLACE_SPEC = Builders. + forOptionalElement("Place"); + + private static final Builders.ElementSpecBuilder COUNTRY_SPEC = Builders. + forOptionalElement("Country"); + + //Similar 3 elements below. Extract method maybe? + private static final Builders.ElementSpecBuilder ORGANIZER_SPEC = Builders. + forOptionalRepeatableElement("Organizer"). + //TODO: Optional 1 of 2 (OrgUnit, Project) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PROJECT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder SPONSOR_SPEC = Builders. + forOptionalRepeatableElement("Sponsor"). + //TODO: Optional 1 of 2 (OrgUnit, Project) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PROJECT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PARTNER_SPEC = Builders. + forOptionalRepeatableElement("Partner"). + //TODO: Optional 1 of 2 (OrgUnit, Project) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PROJECT_SPEC); //TODO: Pass proper spec + + private static final ElementSpec EVENT_SPEC = Builders. + forMandatoryElement("Event", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(NAME_SPEC). + withSubElement(PLACE_SPEC). + withSubElement(COUNTRY_SPEC). + withSubElement(START_DATE_SPEC). + withSubElement(END_DATE_SPEC). + withSubElement(DESCRIPTION_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(ORGANIZER_SPEC). + withSubElement(SPONSOR_SPEC). + withSubElement(PARTNER_SPEC). + build(); + + public CrisEventV111Profile(String name) { + super(name); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisFundingV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisFundingV111Profile.java new file mode 100644 index 0000000..25602a8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisFundingV111Profile.java @@ -0,0 +1,82 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +public class CrisFundingV111Profile extends AbstractCrisProfile { + + private static final String[] TYPE_VOCABULARY = { + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#FundingProgramme", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Call", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Tender", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Gift", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#InternalFunding", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Contract", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Award", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Funding_Types#Grant" + }; + + //TODO: check namespace? + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forMandatoryElement("Type", Cardinality.ONE). + allowedValues(TYPE_VOCABULARY); + + private static final Builders.ElementSpecBuilder AMOUNT_SPEC = Builders. + forOptionalElement("Amount"); + + private static final Builders.ElementSpecBuilder FUNDER_SPEC = Builders. + forOptionalRepeatableElement("Funder"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PART_OF_SPEC = Builders. + forOptionalElement("PartOf"). + withSubElement(null); //TODO: Pass self spec + + private static final Builders.ElementSpecBuilder DURATION_SPEC = Builders. + forOptionalElement("Duration"); + + private static final ElementSpec FUNDING_SPEC = Builders. + forMandatoryElement("Funding", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(NAME_SPEC). + withSubElement(AMOUNT_SPEC). + withSubElement(IDENTIFIER_SPEC). + withSubElement(DESCRIPTION_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(FUNDER_SPEC). + withSubElement(PART_OF_SPEC). + withSubElement(DURATION_SPEC). + withSubElement(OA_MANDATE_SPEC). + build(); + + public CrisFundingV111Profile(String name) { + super(name); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisOrgUnitV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisOrgUnitV111Profile.java new file mode 100644 index 0000000..c3f801b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisOrgUnitV111Profile.java @@ -0,0 +1,50 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +public class CrisOrgUnitV111Profile extends AbstractCrisProfile { + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forOptionalRepeatableElement("Type"). + withMandatoryAttribute("scheme"); + + private static final Builders.ElementSpecBuilder PART_OF_SPEC = Builders. + forOptionalRepeatableElement("PartOf"). + withSubElement(null); //TODO: Pass self spec + + private static final ElementSpec ORG_UNIT_SPEC = Builders. + forMandatoryElement("OrgUnit", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(NAME_SPEC). + withSubElement(IDENTIFIER_SPEC). + withSubElement(ELECTRONIC_ADDRESS_SPEC). + withSubElement(PART_OF_SPEC). + build(); + + public CrisOrgUnitV111Profile() { + super("OpenAIRE Guidelines for OrgUnit element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPatentV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPatentV111Profile.java new file mode 100644 index 0000000..8918bd4 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPatentV111Profile.java @@ -0,0 +1,118 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_REGEX; + +public class CrisPatentV111Profile extends AbstractCrisProfile { + + private static final String[] TYPE_VOCABULARY = { "http://purl.org/coar/resource_type/c_15cd" }; + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forMandatoryElement("Type", Cardinality.ONE). + allowedValues(TYPE_VOCABULARY); + + private static final Builders.ElementSpecBuilder REGISTRATION_DATE_SPEC = Builders. + forOptionalElement("RegistrationDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX)); //TODO: Add optional time zone indication in regex + + private static final Builders.ElementSpecBuilder APPROVAL_DATE_SPEC = Builders. + forOptionalElement("ApprovalDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX)); //TODO: Add optional time zone indication in regex + + private static final Builders.ElementSpecBuilder COUNTRY_CODE_SPEC = Builders. + forOptionalElement("CountryCode"); + + private static final Builders.ElementSpecBuilder ISSUER_SPEC = Builders. + forOptionalRepeatableElement("Issuer"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + withSubElement(ORG_UNIT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PATENT_NUMBER_SPEC = Builders. + forOptionalElement("PatentNumber"); + + private static final Builders.ElementSpecBuilder INVENTORS_SPEC = Builders. + forOptionalElement("Inventors"). + withSubElement(Builders. + forOptionalRepeatableElement("Inventor"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation"))); + + private static final Builders.ElementSpecBuilder HOLDERS_SPEC = Builders. + forOptionalElement("Holders"). + withSubElement(Builders. + forOptionalRepeatableElement("Holder"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder ORIGINATES_FROM_SPEC = Builders. + forOptionalRepeatableElement("OriginatesFrom"). + //TODO: Optional 1 of (Project or Funding). + withSubElement(PROJECT_SPEC). //TODO: Pass proper spec + withSubElement(FUNDING_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PREDECESSOR_SPEC = Builders. + forOptionalRepeatableElement("Predecessor"). + withSubElement(null); //TODO: Pass self spec + + private static final Builders.ElementSpecBuilder REFERENCES_SPEC = Builders. + forOptionalRepeatableElement("References"). + //TODO: Optional 1 of 3 (Publication, Patent, Product) + withSubElement(PUBLICATION_SPEC). //TODO: Pass proper spec + withSubElement(null). //TODO: Pass self + withSubElement(PRODUCT_SPEC); //TODO: Pass proper spec + + private static final ElementSpec PATENT_SPEC = Builders. + forMandatoryElement("Patent", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(TITLE_SPEC). + withSubElement(VERSION_INFO_SPEC). + withSubElement(REGISTRATION_DATE_SPEC). + withSubElement(APPROVAL_DATE_SPEC). + withSubElement(COUNTRY_CODE_SPEC). + withSubElement(ISSUER_SPEC). + withSubElement(PATENT_NUMBER_SPEC). + withSubElement(INVENTORS_SPEC). + withSubElement(HOLDERS_SPEC). + withSubElement(ABSTRACT_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(ORIGINATES_FROM_SPEC). + withSubElement(PREDECESSOR_SPEC). + withSubElement(REFERENCES_SPEC). + build(); + + public CrisPatentV111Profile() { + super("OpenAIRE Guidelines for Patent element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPersonV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPersonV111Profile.java new file mode 100644 index 0000000..e6edfa0 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPersonV111Profile.java @@ -0,0 +1,112 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public class CrisPersonV111Profile extends AbstractCrisProfile { + + private static final String[] GENDER_VOCABULARY = { "m", "f" }; + + private static final Builders.ElementSpecBuilder PERSON_NAME_SPEC = Builders. + forOptionalElement("PersonName"). + withSubElement(Builders. + forOptionalElement("FamilyNames")). + withSubElement(Builders. + forOptionalElement("FirstNames")). + withSubElement(Builders. + forOptionalElement("OtherNames")); + + private static final Builders.ElementSpecBuilder GENDER_SPEC = Builders. + forOptionalElement("Gender"). + allowedValues(GENDER_VOCABULARY); + + private static final Builders.ElementSpecBuilder ORCID_SPEC = Builders. + forOptionalElement("ORCID"). + allowedValues(new RegexValuePredicate(COMPILED_ORCID_REG_EX)); + + private static final Builders.ElementSpecBuilder ALTERNATIVE_ORCID_SPEC = Builders. + forOptionalRepeatableElement("AlternativeORCID"). + allowedValues(new RegexValuePredicate(COMPILED_ORCID_REG_EX)); + + private static final Builders.ElementSpecBuilder RESEARCHER_ID_SPEC = Builders. + forOptionalElement("ResearcherID"). + allowedValues(new RegexValuePredicate(COMPILED_RESEARCHER_ID_REG_EX)); + + private static final Builders.ElementSpecBuilder ALTERNATIVE_RESEARCHER_ID_SPEC = Builders. + forOptionalRepeatableElement("AlternativeResearcherID"). + allowedValues(new RegexValuePredicate(COMPILED_RESEARCHER_ID_REG_EX)); + + private static final Builders.ElementSpecBuilder SCOPUS_AUTHOR_ID_SPEC = Builders. + forOptionalElement("ScopusAuthorID"). + allowedValues(new RegexValuePredicate(COMPILED_SCOPUS_AUTHOR_ID_REG_EX)); + + private static final Builders.ElementSpecBuilder ALTERNATIVE_SCOPUS_AUTHOR_ID_SPEC = Builders. + forOptionalRepeatableElement("AlternativeScopusAuthorID"). + allowedValues(new RegexValuePredicate(COMPILED_SCOPUS_AUTHOR_ID_REG_EX)); + + private static final Builders.ElementSpecBuilder ISNI_SPEC = Builders. + forOptionalElement("ISNI"). + allowedValues(new RegexValuePredicate(COMPILED_ISNI_REG_EX)); + + private static final Builders.ElementSpecBuilder ALTERNATIVE_ISNI_SPEC = Builders. + forOptionalRepeatableElement("AlternativeISNI"). + allowedValues(new RegexValuePredicate(COMPILED_ISNI_REG_EX)); + + private static final Builders.ElementSpecBuilder DAI_SPEC = Builders. + forOptionalElement("DAI"). + allowedValues(new RegexValuePredicate(COMPILED_DAI_REG_EX)); + + private static final Builders.ElementSpecBuilder ALTERNATIVE_DAI_SPEC = Builders. + forOptionalRepeatableElement("AlternativeDAI"). + allowedValues(new RegexValuePredicate(COMPILED_DAI_REG_EX)); + + private static final Builders.ElementSpecBuilder AFFILIATION_SPEC = Builders. + forOptionalRepeatableElement("Affiliation"). + withSubElement(ORG_UNIT_SPEC); //TODO: Pass proper spec + + private static final ElementSpec PERSON_SPEC = Builders. + forMandatoryElement("Person", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(PERSON_NAME_SPEC). + withSubElement(GENDER_SPEC). + withSubElement(ORCID_SPEC). + withSubElement(ALTERNATIVE_ORCID_SPEC). + withSubElement(RESEARCHER_ID_SPEC). + withSubElement(ALTERNATIVE_RESEARCHER_ID_SPEC). + withSubElement(SCOPUS_AUTHOR_ID_SPEC). + withSubElement(ALTERNATIVE_SCOPUS_AUTHOR_ID_SPEC). + withSubElement(ISNI_SPEC). + withSubElement(ALTERNATIVE_ISNI_SPEC). + withSubElement(DAI_SPEC). + withSubElement(ALTERNATIVE_DAI_SPEC). + withSubElement(ELECTRONIC_ADDRESS_SPEC). + withSubElement(AFFILIATION_SPEC). + build(); + + public CrisPersonV111Profile() { + super("OpenAIRE Guidelines for Patent element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProductV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProductV111Profile.java new file mode 100644 index 0000000..db7f38a --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProductV111Profile.java @@ -0,0 +1,135 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_BCP47_LANG_TAGS_REG_EX; + +public class CrisProductV111Profile extends AbstractCrisProfile { + + private static final String[] TYPE_VOCABULARY = { + "http://purl.org/coar/resource_type/c_e9a0", "http://purl.org/coar/resource_type/c_7ad9", + "http://purl.org/coar/resource_type/c_ddb1", "http://purl.org/coar/resource_type/c_c513", + "http://purl.org/coar/resource_type/c_8a7e", "http://purl.org/coar/resource_type/c_12ce", + "http://purl.org/coar/resource_type/c_ecc8", "http://purl.org/coar/resource_type/c_1843", + "http://purl.org/coar/resource_type/c_5ce6", "http://purl.org/coar/resource_type/c_393c", + "http://purl.org/coar/resource_type/c_12cc", "http://purl.org/coar/resource_type/c_12cd", + "http://purl.org/coar/resource_type/c_18cc", "http://purl.org/coar/resource_type/c_18cd" + }; + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forMandatoryElement("Type", Cardinality.ONE). + allowedValues(TYPE_VOCABULARY); + + private static final Builders.ElementSpecBuilder LANGUAGE_SPEC = Builders. + forOptionalRepeatableElement("Language"). + allowedValues(new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)); + + private static final Builders.ElementSpecBuilder ARK_SPEC = Builders. + forOptionalElement("ARK"); + + private static final Builders.ElementSpecBuilder CREATORS_SPEC = Builders. + forOptionalElement("Creators"). + withSubElement(Builders.forOptionalRepeatableElement("Creator"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person with Affiliation(s), or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation")). + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PUBLISHERS_SPEC = Builders. + forOptionalElement("Publishers"). + withSubElement(Builders. + forOptionalRepeatableElement("Publisher"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PART_OF_SPEC = Builders. + forOptionalElement("PartOf"). + //TODO: Optional 1 of 3 (Publication, Patent, Product) + withSubElement(PUBLICATION_SPEC). //TODO: Pass proper spec + withSubElement(PATENT_SPEC). //TODO: Pass proper spec + withSubElement(null); //TODO: Pass self spec + + private static final Builders.ElementSpecBuilder ORIGINATES_FROM_SPEC = Builders. + forOptionalRepeatableElement("OriginatesFrom"). + //TODO: Optional 1 of 2 (Project or Funding). + withSubElement(PROJECT_SPEC). //TODO: Pass proper spec + withSubElement(FUNDING_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder GENERATED_BY_SPEC = Builders. + forOptionalRepeatableElement("GeneratedBy"). + withSubElement(EQUIPMENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PRESENTED_AT_SPEC = Builders. + forOptionalRepeatableElement("PresentedAt"). + withSubElement(EVENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder COVERAGE_SPEC = Builders. + forOptionalRepeatableElement("Coverage"). + withSubElement(EVENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder REFERENCES_SPEC = Builders. + forOptionalRepeatableElement("References"). + //TODO: Optional 1 of 3 (Publication, Patent, Product) + withSubElement(PUBLICATION_SPEC). //TODO: Pass proper spec + withSubElement(PATENT_SPEC). //TODO: Pass proper spec + withSubElement(null); //TODO: Pass self spec + + private static final ElementSpec PRODUCT_SPEC = Builders. + forMandatoryElement("Product", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(LANGUAGE_SPEC). + withSubElement(NAME_SPEC). + withSubElement(VERSION_INFO_SPEC). + withSubElement(ARK_SPEC). + withSubElement(DOI_SPEC). + withSubElement(HANDLE_SPEC). + withSubElement(URL_SPEC). + withSubElement(URN_SPEC). + withSubElement(CREATORS_SPEC). + withSubElement(PUBLISHERS_SPEC). + withSubElement(LICENSE_SPEC). + withSubElement(DESCRIPTION_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(PART_OF_SPEC). + withSubElement(ORIGINATES_FROM_SPEC). + withSubElement(GENERATED_BY_SPEC). + withSubElement(PRESENTED_AT_SPEC). + withSubElement(COVERAGE_SPEC). + withSubElement(REFERENCES_SPEC). + withSubElement(NS4_ACCESS_SPEC). + build(); + + public CrisProductV111Profile() { + super("OpenAIRE Guidelines for Product element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProjectV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProjectV111Profile.java new file mode 100644 index 0000000..da858d8 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisProjectV111Profile.java @@ -0,0 +1,138 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.COMPILED_YYYY_MM_DD_REGEX; + +public class CrisProjectV111Profile extends AbstractCrisProfile { + + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forOptionalRepeatableElement("Type"). + withMandatoryAttribute("scheme"); + + private static final Builders.ElementSpecBuilder CONSORTIUM_SPEC = Builders. + forOptionalElement("Consortium"). + // All 5 sub-elements have the same structure. A method could be extracted here. + withSubElement(Builders. + forOptionalRepeatableElement("Coordinator"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Partner"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Contractor"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("InKindContractor"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Member"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder TEAM_SPEC = Builders. + forOptionalElement("Team"). + // All 3 sub-elements have the same structure. A method could be extracted here. + withSubElement(Builders. + forOptionalRepeatableElement("PrincipalInvestigator"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation"))). + withSubElement(Builders. + forOptionalRepeatableElement("Contact"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation"))). + withSubElement(Builders. + forOptionalRepeatableElement("Member"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation"))); + + private static final Builders.ElementSpecBuilder FUNDED_SPEC = Builders. + forOptionalRepeatableElement("Funded"). + withSubElement(Builders. + forOptionalElement("By"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC)). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalElement("As"). + withSubElement(FUNDING_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder USES_SPEC = Builders. + forOptionalRepeatableElement("Uses"). + withSubElement(EQUIPMENT_SPEC); //TODO: Pass proper spec + + private static final ElementSpec PROJECT_SPEC = Builders. + forMandatoryElement("Project", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(TITLE_SPEC). + withSubElement(IDENTIFIER_SPEC). + withSubElement(START_DATE_SPEC). + withSubElement(END_DATE_SPEC). + withSubElement(CONSORTIUM_SPEC). + withSubElement(TEAM_SPEC). + withSubElement(FUNDED_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(ABSTRACT_SPEC). + withSubElement(STATUS_SPEC). + withSubElement(USES_SPEC). + withSubElement(OA_MANDATE_SPEC). + build(); + + public CrisProjectV111Profile() { + super("OpenAIRE Guidelines for OrgUnit element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPublicationV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPublicationV111Profile.java new file mode 100644 index 0000000..8aa66c1 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisPublicationV111Profile.java @@ -0,0 +1,225 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import eu.dnetlib.validator2.validation.utils.RegexValuePredicate; +import org.w3c.dom.Document; + +import java.util.Collection; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public class CrisPublicationV111Profile extends AbstractCrisProfile { + + private static final String[] TYPE_VOCABULARY = { + "http://purl.org/coar/resource_type/c_18cf", "http://purl.org/coar/resource_type/c_1162", + "http://purl.org/coar/resource_type/c_86bc", "http://purl.org/coar/resource_type/c_2f33", + "http://purl.org/coar/resource_type/c_3248", "http://purl.org/coar/resource_type/c_c94f", + "http://purl.org/coar/resource_type/c_f744", "http://purl.org/coar/resource_type/c_5794", + "http://purl.org/coar/resource_type/c_6670", "http://purl.org/coar/resource_type/c_18cp", + "http://purl.org/coar/resource_type/c_18co", "http://purl.org/coar/resource_type/c_8544", + "http://purl.org/coar/resource_type/c_0857", "http://purl.org/coar/resource_type/c_2659", + "http://purl.org/coar/resource_type/c_0640", "http://purl.org/coar/resource_type/c_3e5a", + "http://purl.org/coar/resource_type/c_6501", "http://purl.org/coar/resource_type/c_dcae04bc", + "http://purl.org/coar/resource_type/c_2df8fbb1", "http://purl.org/coar/resource_type/c_b239", + "http://purl.org/coar/resource_type/c_beb9", "http://purl.org/coar/resource_type/c_545b", + "http://purl.org/coar/resource_type/c_816b", "http://purl.org/coar/resource_type/c_93fc", + "http://purl.org/coar/resource_type/c_ba1f", "http://purl.org/coar/resource_type/c_18ww", + "http://purl.org/coar/resource_type/c_18wz", "http://purl.org/coar/resource_type/c_18wq", + "http://purl.org/coar/resource_type/c_186u", "http://purl.org/coar/resource_type/c_18op", + "http://purl.org/coar/resource_type/c_18hj", "http://purl.org/coar/resource_type/c_18ws", + "http://purl.org/coar/resource_type/c_18gh", "http://purl.org/coar/resource_type/c_baaf", + "http://purl.org/coar/resource_type/c_efa0", "http://purl.org/coar/resource_type/c_ba08", + "http://purl.org/coar/resource_type/c_71bd", "http://purl.org/coar/resource_type/c_8042", + "http://purl.org/coar/resource_type/c_46ec", "http://purl.org/coar/resource_type/c_7a1f", + "http://purl.org/coar/resource_type/c_db06", "http://purl.org/coar/resource_type/c_bdcc", + "http://purl.org/coar/resource_type/c_18cw" + }; + + private static final String[] ISSN_MEDIA_LIST = { + "http://issn.org/vocabularies/Medium#Print", "http://issn.org/vocabularies/Medium#Online", + "http://issn.org/vocabularies/Medium#DigitalCarrier", "http://issn.org/vocabularies/Medium#Other" + }; + + //TODO: Add namespace in builder? e.g. fromNamespace("namespace") + private static final Builders.ElementSpecBuilder TYPE_SPEC = Builders. + forMandatoryElement("Type", Cardinality.ONE). + allowedValues(TYPE_VOCABULARY); + + private static final Builders.ElementSpecBuilder LANGUAGE_SPEC = Builders. + forOptionalElement("Language"). + allowedValues(new RegexValuePredicate(COMPILED_BCP47_LANG_TAGS_REG_EX)); + + private static final Builders.ElementSpecBuilder SUBTITLE_SPEC = Builders. + forOptionalRepeatableElement("Subtitle"); + + private static final Builders.ElementSpecBuilder PUBLISHED_IN_SPEC = Builders. + forOptionalElement("PublishedIn"). + withSubElement(null); //TODO: Pass self + + private static final Builders.ElementSpecBuilder PART_OF_SPEC = Builders. + forOptionalElement("PartOf"). + withSubElement(null); //TODO: Pass self + + private static final Builders.ElementSpecBuilder PUBLICATION_DATE_SPEC = Builders. + forOptionalElement("PublicationDate"). + allowedValues(new RegexValuePredicate(COMPILED_YYYY_MM_DD_REGEX)); //TODO: add proper regex + + private static final Builders.ElementSpecBuilder NUMBER_SPEC = Builders. + forOptionalElement("Number"); + + private static final Builders.ElementSpecBuilder VOLUME_SPEC = Builders. + forOptionalElement("Volume"); + + private static final Builders.ElementSpecBuilder ISSUE_SPEC = Builders. + forOptionalElement("Issue"); + + private static final Builders.ElementSpecBuilder EDITION_SPEC = Builders. + forOptionalElement("Edition"); + + private static final Builders.ElementSpecBuilder START_PAGE_SPEC = Builders. + forOptionalElement("StartPage"); + + private static final Builders.ElementSpecBuilder END_PAGE_SPEC = Builders. + forOptionalElement("EndPage"); + + private static final Builders.ElementSpecBuilder PMCID_SPEC = Builders. + forOptionalElement("PMCID"); + + private static final Builders.ElementSpecBuilder ISI_NUMBER_SPEC = Builders. + forOptionalElement("ISI-Number"); + + private static final Builders.ElementSpecBuilder SCP_NUMBER_SPEC = Builders. + forOptionalElement("SCP-Number"); + + private static final Builders.ElementSpecBuilder ISSN_SPEC = Builders. + forOptionalRepeatableElement("ISSN"). + allowedValues(new RegexValuePredicate(COMPILED_ISSN_REG_EX)). + withOptionalAttribute("medium", ISSN_MEDIA_LIST); + + private static final Builders.ElementSpecBuilder ISBN_SPEC = Builders. + forOptionalRepeatableElement("ISBN"). + allowedValues(new RegexValuePredicate(COMPILED_ISBN_REG_EX)). + withOptionalAttribute("medium", ISSN_MEDIA_LIST); + + private static final Builders.ElementSpecBuilder AUTHORS_SPEC = Builders. + forOptionalElement("Authors"). + withSubElement(Builders. + forOptionalRepeatableElement("Author"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person with Affiliation(s), or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation")). + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder EDITORS_SPEC = Builders. + forOptionalElement("Editors"). + withSubElement(Builders. + forOptionalRepeatableElement("Editor"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person with Affiliation(s), or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(Builders. + forOptionalRepeatableElement("Affiliation")). + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PUBLISHERS_SPEC = Builders. + forOptionalElement("Publishers"). + withSubElement(Builders. + forOptionalRepeatableElement("Publisher"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (Person or OrgUnit) + withSubElement(PERSON_SPEC). //TODO: Pass proper spec + withSubElement(ORG_UNIT_SPEC)); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder ORIGINATES_FROM_SPEC = Builders. + forOptionalRepeatableElement("OriginatesFrom"). + //TODO: Optional 1 of (Project or Funding). + withSubElement(PROJECT_SPEC). //TODO: Pass proper spec + withSubElement(FUNDING_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder PRESENTED_AT_SPEC = Builders. + forOptionalRepeatableElement("PresentedAt"). + withSubElement(EVENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder OUTPUT_FROM_SPEC = Builders. + forOptionalRepeatableElement("OutputFrom"). + withSubElement(EVENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder COVERAGE_SPEC = Builders. + forOptionalRepeatableElement("Coverage"). + withSubElement(EVENT_SPEC); //TODO: Pass proper spec + + private static final Builders.ElementSpecBuilder REFERENCES_SPEC = Builders. + forOptionalRepeatableElement("References"). + //TODO: Optional 1 of 3 (Publication, Patent, Product) + withSubElement(null). //TODO: Pass self + withSubElement(PATENT_SPEC). //TODO: Pass proper spec + withSubElement(PRODUCT_SPEC); //TODO: Pass proper spec + + private static final ElementSpec PUBLICATION_SPEC = Builders. + forMandatoryElement("Publication", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(TYPE_SPEC). + withSubElement(LANGUAGE_SPEC). + withSubElement(TITLE_SPEC). + withSubElement(SUBTITLE_SPEC). + withSubElement(PUBLISHED_IN_SPEC). + withSubElement(PART_OF_SPEC). + withSubElement(PUBLICATION_DATE_SPEC). + withSubElement(NUMBER_SPEC). + withSubElement(VOLUME_SPEC). + withSubElement(ISSUE_SPEC). + withSubElement(EDITION_SPEC). + withSubElement(START_PAGE_SPEC). + withSubElement(END_PAGE_SPEC). + withSubElement(DOI_SPEC). + withSubElement(HANDLE_SPEC). + withSubElement(PMCID_SPEC). + withSubElement(ISI_NUMBER_SPEC). + withSubElement(SCP_NUMBER_SPEC). + withSubElement(ISSN_SPEC). + withSubElement(ISBN_SPEC). + withSubElement(URL_SPEC). + withSubElement(URN_SPEC). + withSubElement(AUTHORS_SPEC). + withSubElement(EDITORS_SPEC). + withSubElement(PUBLISHERS_SPEC). + withSubElement(LICENSE_SPEC). + withSubElement(SUBJECT_SPEC). + withSubElement(KEYWORD_SPEC). + withSubElement(ABSTRACT_SPEC). + withSubElement(STATUS_SPEC). + withSubElement(ORIGINATES_FROM_SPEC). + withSubElement(PRESENTED_AT_SPEC). + withSubElement(OUTPUT_FROM_SPEC). + withSubElement(COVERAGE_SPEC). + withSubElement(REFERENCES_SPEC). + withSubElement(NS4_ACCESS_SPEC). + build(); + + public CrisPublicationV111Profile() { + super("OpenAIRE Guidelines for Publication element of CRIS Managers v1.1.1"); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisServiceV111Profile.java b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisServiceV111Profile.java new file mode 100644 index 0000000..de594ba --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/guideline/openaire/cris/CrisServiceV111Profile.java @@ -0,0 +1,72 @@ +package eu.dnetlib.validator2.validation.guideline.openaire.cris; + +import eu.dnetlib.validator2.validation.guideline.Builders; +import eu.dnetlib.validator2.validation.guideline.Cardinality; +import eu.dnetlib.validator2.validation.guideline.ElementSpec; +import eu.dnetlib.validator2.validation.guideline.Guideline; +import org.w3c.dom.Document; + +import java.util.Collection; + +public class CrisServiceV111Profile extends AbstractCrisProfile { + + private static final String[] COMPATIBILITY_VOCABULARY = { + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Service_Compatibility#1.1", + "https://www.openaire.eu/cerif-profile/vocab/OpenAIRE_Service_Compatibility#1.0" + }; + + //TODO: Add namespace? + private static final Builders.ElementSpecBuilder COMPATIBILITY_SPEC = Builders. + forOptionalRepeatableElement("Compatibility"). + allowedValues(COMPATIBILITY_VOCABULARY); + + private static final Builders.ElementSpecBuilder WEBSITE_URL_SPEC = Builders. + forOptionalElement("WebsiteURL"); + + private static final Builders.ElementSpecBuilder OAIPMH_BASE_URL_SPEC = Builders. + forOptionalElement("OAIPMHBaseURL"); + + private static final Builders.ElementSpecBuilder SUBJECT_HEADINGS_URL = Builders. + forOptionalRepeatableElement("SubjectHeadingsURL"); + + private static final Builders.ElementSpecBuilder OWNER_SPEC = Builders. + forOptionalRepeatableElement("Owner"). + withSubElement(Builders. + forOptionalElement("DisplayName")). + //TODO: Optional 1 of 2 (OrgUnit, Person) + withSubElement(ORG_UNIT_SPEC). //TODO: Pass proper spec + withSubElement(PERSON_SPEC); //TODO: Pass proper spec + + private static final ElementSpec SERVICE_SPEC = Builders. + forMandatoryElement("Service", Cardinality.ONE). + withMandatoryAttribute("id"). + withSubElement(COMPATIBILITY_SPEC). + withSubElement(ACRONYM_SPEC). + withSubElement(NAME_SPEC). + withSubElement(IDENTIFIER_SPEC). + withSubElement(DESCRIPTION_SPEC). + withSubElement(WEBSITE_URL_SPEC). + withSubElement(OAIPMH_BASE_URL_SPEC). + withSubElement(SUBJECT_HEADINGS_URL). + withSubElement(OWNER_SPEC). + build(); + + public CrisServiceV111Profile(String name) { + super(name); + } + + @Override + public Collection> guidelines() { + return null; + } + + @Override + public Guideline guideline(String guidelineName) { + return null; + } + + @Override + public int maxScore() { + return 0; + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/AbstractValidationTask.java b/src/main/java/eu/dnetlib/validator2/validation/task/AbstractValidationTask.java new file mode 100644 index 0000000..b0eec05 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/AbstractValidationTask.java @@ -0,0 +1,38 @@ +package eu.dnetlib.validator2.validation.task; + +import eu.dnetlib.validator2.engine.Rule; + +import java.util.Collection; +import java.util.function.Consumer; + +abstract class AbstractValidationTask> implements ValidationTask { + + protected final Collection rules; + protected final T subject; + + protected AbstractValidationTask(T subject, Collection rules) { + this.subject = subject; + this.rules = rules; + } + + @Override + public Collection ruleSet() { + return rules; + } + + @Override + public T subject() { + return subject; + } + + @Override + public void run(Consumer outputConsumer) { + ValidatorDiagnostics outputs = new ValidatorDiagnostics<>(); + applyRulesAndReport(outputs); + if (outputConsumer != null) { + outputConsumer.accept(outputs); + } + } + + protected abstract void applyRulesAndReport(ValidatorDiagnostics outputs); +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/ExecutorBasedValidationTask.java b/src/main/java/eu/dnetlib/validator2/validation/task/ExecutorBasedValidationTask.java new file mode 100644 index 0000000..dd97c1b --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/ExecutorBasedValidationTask.java @@ -0,0 +1,56 @@ +package eu.dnetlib.validator2.validation.task; + +import eu.dnetlib.validator2.engine.Reporter; +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleEngine; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + +class ExecutorBasedValidationTask> extends AbstractValidationTask { + + protected final ExecutorService executor; + + protected ExecutorBasedValidationTask(T subject, Collection rules, ExecutorService executor) { + super(subject, rules); + this.executor = executor; + } + + @Override + protected void applyRulesAndReport(final ValidatorDiagnostics outputs) { + try { + Map> rulesToFutures = new HashMap<>(); + Reporter reporter = new Reporter<>(outputs); + for(R rule: rules) { + Future future = executor.submit( + //TODO: Don't cast to Rule + () -> RuleEngine.applyAndReport(rule, subject, reporter) + ); + rulesToFutures.put(rule.getContext().getIdProperty().getValue(), future); + } + //TODO: Allow users to customize expiration time + //TODO: The following loop will block the current thread waiting for each future to complete. + // Do we need to avoid it and offer non-blocking behavior to the user? + for(Map.Entry> ruleToFuture: rulesToFutures.entrySet()) { + try { + // Wait for the future to complete + ruleToFuture.getValue().get(); + } + catch (InterruptedException ie) { + outputs.setInterrupted(ruleToFuture.getKey()); + } + } + } + catch (Throwable t) { + // Catch all possible errors: + // - OutOfMemory: new calls above fail + // - Rejected: executor submissions get rejected + // - ExecutionException: may be thrown while waiting for the futures, + // should never occur in theory (reporter consumes all errors) + throw new RuntimeException("Internal error", t); + } + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/RuleEvaluationResult.java b/src/main/java/eu/dnetlib/validator2/validation/task/RuleEvaluationResult.java new file mode 100644 index 0000000..8433dc9 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/RuleEvaluationResult.java @@ -0,0 +1,45 @@ +package eu.dnetlib.validator2.validation.task; + +public final class RuleEvaluationResult { + + private static final byte SUCCESS = 0; + private static final byte FAILURE = 2; + private static final byte ERROR = 4; + private static final byte INTERRUPTED = 8; + + private final byte result; + private final String errorMessage; + + RuleEvaluationResult(byte result, String errorMessage) { + this.result = result; + this.errorMessage = errorMessage; + } + + public boolean succeeded() { return result == SUCCESS; } + + public boolean failed() { return result == FAILURE; } + + public boolean errored() { return result == ERROR; } + + public boolean interrupted() { return result == INTERRUPTED; } + + public String errorMessage() { + return errorMessage; + } + + static RuleEvaluationResult forSuccess() { + return new RuleEvaluationResult(SUCCESS, null); + } + + static RuleEvaluationResult forFailure() { + return new RuleEvaluationResult(FAILURE, null); + } + + static RuleEvaluationResult forError(String errorMessage) { + return new RuleEvaluationResult(ERROR, errorMessage); + } + + static RuleEvaluationResult forInterrupted() { + return new RuleEvaluationResult(INTERRUPTED, null); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTask.java b/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTask.java new file mode 100644 index 0000000..f8ea061 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTask.java @@ -0,0 +1,23 @@ +package eu.dnetlib.validator2.validation.task; + +import eu.dnetlib.validator2.engine.Rule; + +import java.util.Collection; +import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; + +public interface ValidationTask> { + + Collection ruleSet(); + + T subject(); + + void run(Consumer outputConsumer); + + class Factory { + public static > ValidationTask newTask(ExecutorService executor, Collection rules, T subject) { + return new ExecutorBasedValidationTask<>(subject, rules, executor); + } + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTaskOutput.java b/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTaskOutput.java new file mode 100644 index 0000000..033f32e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/ValidationTaskOutput.java @@ -0,0 +1,9 @@ +package eu.dnetlib.validator2.validation.task; + +public interface ValidationTaskOutput { + + RuleEvaluationResult statusFor(String ruleId); + + long score(); + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/task/ValidatorDiagnostics.java b/src/main/java/eu/dnetlib/validator2/validation/task/ValidatorDiagnostics.java new file mode 100644 index 0000000..76026a2 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/task/ValidatorDiagnostics.java @@ -0,0 +1,41 @@ +package eu.dnetlib.validator2.validation.task; + +import eu.dnetlib.validator2.engine.Rule; +import eu.dnetlib.validator2.engine.RuleDiagnostics; + +import java.util.concurrent.ConcurrentHashMap; + +class ValidatorDiagnostics> implements RuleDiagnostics, ValidationTaskOutput { + + private final ConcurrentHashMap results = new ConcurrentHashMap<>(); + + @Override + public RuleEvaluationResult statusFor(String ruleId) { + return results.get(ruleId); + } + + @Override + public long score() { + //TODO: How do we calculate the score? + return 0; + } + + void setInterrupted(String ruleId) { + results.put(ruleId, RuleEvaluationResult.forInterrupted()); + } + + @Override + public void success(R rule, T t) { + results.put(rule.getContext().getIdProperty().getValue(), RuleEvaluationResult.forSuccess()); + } + + @Override + public void failure(R rule, T t) { + results.put(rule.getContext().getIdProperty().getValue(), RuleEvaluationResult.forFailure()); + } + + @Override + public void error(R rule, T t, Throwable err) { + results.put(rule.getContext().getIdProperty().getValue(), RuleEvaluationResult.forError(err.getMessage())); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/EmbargoedEndDateValuePredicate.java b/src/main/java/eu/dnetlib/validator2/validation/utils/EmbargoedEndDateValuePredicate.java new file mode 100644 index 0000000..847b379 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/EmbargoedEndDateValuePredicate.java @@ -0,0 +1,17 @@ +package eu.dnetlib.validator2.validation.utils; + +import java.util.function.Predicate; + +import static eu.dnetlib.validator2.validation.utils.SupportedRegExs.*; + +public class EmbargoedEndDateValuePredicate implements Predicate { + + @Override + public boolean test(String s) { + if (s == null || s.isEmpty()) { + return false; + } + //TODO: validate date? + return COMPILED_EMBARGOED_END_DATE_REG_EX.matcher(s).matches(); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/ISO639ValuePredicate.java b/src/main/java/eu/dnetlib/validator2/validation/utils/ISO639ValuePredicate.java new file mode 100644 index 0000000..7ef177e --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/ISO639ValuePredicate.java @@ -0,0 +1,15 @@ +package eu.dnetlib.validator2.validation.utils; + +import java.util.function.Predicate; + +public class ISO639ValuePredicate implements Predicate { + + @Override + public boolean test(String s) { + if (s == null || s.isEmpty()) { + return false; + } + + return ISOLangCodes.contains(s); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/ISOLangCodes.java b/src/main/java/eu/dnetlib/validator2/validation/utils/ISOLangCodes.java new file mode 100644 index 0000000..396da66 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/ISOLangCodes.java @@ -0,0 +1,42 @@ +package eu.dnetlib.validator2.validation.utils; + + +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ISOLangCodes { + + private static Set langs; + + static { + loadLangCodes(); + } + + private static void loadLangCodes() { + try (InputStream in = MediaTypes.class.getClassLoader().getResourceAsStream("iso639XLangCodes.csv")) { + //TODO:Remove the regex + List l = Arrays.asList(IOUtils.toString(in, "UTF-8").split("\\s*,\\s*")); + langs = new HashSet<>(l); + } + catch (Exception e) {} + } + + + public static boolean contains(String langCode) { + if (langs == null) { + throw new IllegalStateException("Languages not loaded from file"); + } + + if (langCode == null || langCode.isEmpty()) { + return false; + } + + return langs.contains(langCode); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypes.java b/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypes.java new file mode 100644 index 0000000..0e9f7d7 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypes.java @@ -0,0 +1,40 @@ +package eu.dnetlib.validator2.validation.utils; + +import org.apache.commons.io.IOUtils; + +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class MediaTypes { + private static Set mediaTypes; + + static { + loadMediaTypes(); + } + + private static void loadMediaTypes() { + try (InputStream in = MediaTypes.class.getClassLoader().getResourceAsStream("mediaTypes.csv")) { + //TODO: remove regex + List l = Arrays.asList(IOUtils.toString(in, "UTF-8").split("\\s*,\\s*")); + mediaTypes = new HashSet<>(l); + } + catch (Exception e) {} + } + + + public static boolean contains(String mediaType) { + if (mediaTypes == null) { + throw new IllegalStateException("Media types not loaded from file"); + } + + if (mediaType == null || mediaType.isEmpty()) { + return false; + } + + return mediaTypes.contains(mediaType); + } + +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypesValuePredicate.java b/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypesValuePredicate.java new file mode 100644 index 0000000..50bc57c --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/MediaTypesValuePredicate.java @@ -0,0 +1,15 @@ +package eu.dnetlib.validator2.validation.utils; + +import java.util.function.Predicate; + +public class MediaTypesValuePredicate implements Predicate { + + @Override + public boolean test(String s) { + if (s == null || s.isEmpty()) { + return false; + } + + return MediaTypes.contains(s); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/RegexValuePredicate.java b/src/main/java/eu/dnetlib/validator2/validation/utils/RegexValuePredicate.java new file mode 100644 index 0000000..0c7970f --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/RegexValuePredicate.java @@ -0,0 +1,20 @@ +package eu.dnetlib.validator2.validation.utils; + +import java.util.function.Predicate; +import java.util.regex.Pattern; + +public class RegexValuePredicate implements Predicate { + private Pattern pattern; + + public RegexValuePredicate(Pattern pattern) { + this.pattern = pattern; + } + + @Override + public boolean test(String s) { + if (s == null || s.isEmpty()) { + return false; + } + return pattern.matcher(s).matches(); + } +} diff --git a/src/main/java/eu/dnetlib/validator2/validation/utils/SupportedRegExs.java b/src/main/java/eu/dnetlib/validator2/validation/utils/SupportedRegExs.java new file mode 100644 index 0000000..21f6495 --- /dev/null +++ b/src/main/java/eu/dnetlib/validator2/validation/utils/SupportedRegExs.java @@ -0,0 +1,100 @@ +package eu.dnetlib.validator2.validation.utils; + +import java.util.regex.Pattern; + +public class SupportedRegExs { + + public static final String PROJECT_IDENTIFIER_REG_EX = "(info:eu-repo/grantAgreement/.*/.*/[0123456789]+)||(info:eu-repo/grantAgreement/.*/.*/[0123456789]+/.*/.*/.*)"; + + public static final Pattern COMPILED_PROJECT_IDENTIFIER_REGEX = Pattern.compile(PROJECT_IDENTIFIER_REG_EX); + + public static final String LICENSE_CONDITION_REG_EX = "((((cc-by-sa)||(cc-by-nc-sa)), .*)||(\\(c\\) .*, [0-9]{4})||((http||https)://.*))"; + + public static final Pattern COMPILED_LICENSE_CONDITION_REG_EX = Pattern.compile(LICENSE_CONDITION_REG_EX); + + public static final String EMBARGOED_END_DATE_REG_EX = "info:eu-repo/date/embargoEnd/((18|19|20|21)\\d\\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]))"; + + public static final Pattern COMPILED_EMBARGOED_END_DATE_REG_EX = Pattern.compile(EMBARGOED_END_DATE_REG_EX); + + public static final String ALT_IDENTIFIER_REG_EX = "info:eu-repo/semantics/altIdentifier/(ark|arxiv|doi|hdl|isbn|pissn|eissn|pmid|purl|urn|wos)/.*"; + + public static final Pattern COMPILED_ALT_IDENTIFIER_REG_EX = Pattern.compile(ALT_IDENTIFIER_REG_EX); + + public static final String PUBLICATION_REFERENCE_REG_EX = "info:eu-repo/semantics/reference/(ark|arxiv|doi|hdl|isbn|issn|pmid|purl|url|urn|wos)/.*"; + + public static final Pattern COMPILED_PUBLICATION_REFERENCE_REG_EX = Pattern.compile(PUBLICATION_REFERENCE_REG_EX); + + public static final String DATASET_REFERENCE_REG_EX = "info:eu-repo/semantics/dataset/(ark|doi|hdl|purl|url|urn)/.*"; + + public static final Pattern COMPILED_DATASET_REFERENCE_REG_EX = Pattern.compile(DATASET_REFERENCE_REG_EX); + + public static final String PUBLICATION_DATE_REG_EX = "((14|15|16|17|19|20)\\d\\d(-(0[1-9]|1[012])(-(0[1-9]|[12][0-9]|3[01]))?)?$)|((14|15|16|17|19|20)\\d\\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9])(:[0-5][0-9](\\.\\d+)?)?(((\\+|-)([01][0-9]|2[0-3]):[0-5][0-9])|Z)$)"; + + public static final Pattern COMPILED_PUBLICATION_DATE_REG_EX = Pattern.compile(PUBLICATION_DATE_REG_EX); + + public static final String ISO_8601_DATE_REG_EX = "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$"; + + public static final Pattern COMPILED_ISO_8601_DATE_REG_EX = Pattern.compile(ISO_8601_DATE_REG_EX); + + public static final String YEAR_YYYY_REG_EX = "\\d{4}"; + + public static final Pattern COMPILED_YEAR_YYYY_REG_EX = Pattern.compile(YEAR_YYYY_REG_EX); + + //1900-2999 range + public static final String YYYY_MM_DD_REGEX = "((2000|2400|2800|(19|2[0-9](0[48]|[2468][048]|[13579][26])))-02-29)" + + "|(((19|2[0-9])[0-9]{2})-02-(0[1-9]|1[0-9]|2[0-8]))" + + "|(((19|2[0-9])[0-9]{2})-(0[13578]|10|12)-(0[1-9]|[12][0-9]|3[01]))" + + "|(((19|2[0-9])[0-9]{2})-(0[469]|11)-(0[1-9]|[12][0-9]|30))"; + + public static final Pattern COMPILED_YYYY_MM_DD_REGEX = Pattern.compile(YYYY_MM_DD_REGEX); + + //No sanity check if end date is after start date + public static final String YYYY_MM_DD_RANGE_REGEX = "(" + YYYY_MM_DD_REGEX + ") - (" + YYYY_MM_DD_REGEX + ")"; + + public static final Pattern COMPILED_YYYY_MM_DD_RANGE_REGEX = Pattern.compile(YYYY_MM_DD_RANGE_REGEX); + + public static final String BCP47_LANG_TAGS_REG_EX = "^(?(?:en-GB-oed|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|t(?:a[oy]|su))|sgn-(?:BE-(?:FR|NL)|CH-DE))|(?:art-lojban|cel-gaulish|no-(?:bok|nyn)|zh-(?:guoyu|hakka|min(?:-nan)?|xiang)))|(?:(?(?:[A-Za-z]{2,3}(?:-(?[A-Za-z]{3}(?:-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(?:-(?