From a9f6a0f6eb860b9b4e1c79958a3b5e7e14e8bef4 Mon Sep 17 00:00:00 2001 From: "enrico.ottonello" Date: Tue, 18 Jun 2019 16:15:23 +0200 Subject: [PATCH] added modules related to ariadneplus --- .gitignore | 20 + dnet-ariadneplus-container/.factorypath | 164 + dnet-ariadneplus-container/pom.xml | 124 + .../META-INF/cxf/org.apache.cxf.Logger | 1 + .../javax.xml.transform.TransformerFactory | 1 + .../dnetlib/applicationContext-security.xml | 57 + .../resources/eu/dnetlib/cnr-site.properties | 53 + .../src/main/resources/log4j.properties | 39 + .../webapp/WEB-INF/applicationContext.xml | 20 + .../src/main/webapp/WEB-INF/cxf.xml | 25 + .../webapp/WEB-INF/dispatcher-servlet.xml | 25 + .../src/main/webapp/WEB-INF/web.xml | 56 + .../src/main/webapp/images/User.png | Bin 0 -> 45700 bytes .../src/main/webapp/images/admin.svg | 103 + .../src/main/webapp/images/d-netLogo.png | Bin 0 -> 8155 bytes .../src/main/webapp/images/lightui.png | Bin 0 -> 10944 bytes .../src/main/webapp/images/monitor.png | Bin 0 -> 45487 bytes .../src/main/webapp/index.html | 28 + dnet-ariadneplus-publisher/deploy.info | 10 + dnet-ariadneplus-publisher/pom.xml | 214 + .../eu/dnetlib/ariadneplus/AppConfig.java | 61 + ...adnePlusAsyncUncaughtExceptionHandler.java | 24 + .../AriadnePlusPublisherApplication.java | 19 + .../main/java/eu/dnetlib/ariadneplus/CRM.java | 2986 +++++++++ .../java/eu/dnetlib/ariadneplus/CRMdig.java | 525 ++ .../java/eu/dnetlib/ariadneplus/CRMpe.java | 310 + .../ariadneplus/catalogue/CKANUtils.java | 110 + .../catalogue/CatalogueAPIClient.java | 197 + .../catalogue/CatalogueAPIResponse.java | 71 + .../catalogue/CatalogueLicense.java | 55 + .../catalogue/CatalogueRegistrator.java | 709 +++ .../jrr/AriadnePlusRegistryRel.java | 39 + .../jrr/AriadnePlusRegistryResource.java | 55 + .../dnetlib/ariadneplus/jrr/JRRPublisher.java | 147 + .../AriadnePlusPublisherController.java | 48 + .../AriadnePlusPublisherException.java | 28 + .../publisher/AriadnePlusPublisherHelper.java | 97 + .../ariadneplus/publisher/SaxonHelper.java | 178 + .../ariadneplus/rdf/RecordParserHelper.java | 98 + .../ariadneplus/rdf/ResourceReader.java | 460 ++ .../ariadneplus/virtuoso/VirtuosoClient.java | 197 + .../virtuoso/VirtuosoClientFactory.java | 75 + .../ariadneplus/virtuoso/VirtuosoReadAPI.java | 171 + .../src/main/resources/application.properties | 15 + .../parthenos/sparql/D14_Software.sparql | 106 + .../sparql/E29_Design_or_Procedure.sparql | 51 + .../dnetlib/parthenos/sparql/E39_Actor.sparql | 68 + .../parthenos/sparql/E78_Collection.sparql | 73 + .../parthenos/sparql/PE18_Dataset.sparql | 138 + .../parthenos/sparql/PE1_Service.sparql | 148 + .../parthenos/sparql/PE35_Project.sparql | 62 + .../parthenos/sparql/rdfs_rule_set_isql.txt | 76 + .../src/main/resources/logback-spring.xml | 19 + .../src/main/resources/res.json | 74 + .../catalogue/CatalogueAPIResponseTest.java | 60 + .../CatalogueRegistratorIntegrationTest.java | 105 + .../catalogue/CatalogueRegistratorTest.java | 157 + .../AriadnePlusPublisherControllerTest.java | 39 + .../publisher/AriadnePlusPublisherTest.java | 93 + .../rdf/RecordParserHelperTest.java | 48 + .../ariadneplus/registry/JacksonTest.java | 79 + .../registry/JenaInferenceTest.java | 53 + .../ariadneplus/virtuoso/ExampleIO_01.java | 83 + .../ariadneplus/virtuoso/FreeMarkerTest.java | 43 + .../virtuoso/VirtuosoClientTest.java | 88 + .../VirtuosoReadAPIIntegrationTest.java | 114 + .../virtuoso/VirtuosoReadAPITest.java | 38 + .../ariadneplus/virtuoso/VirtuosoTest.java | 326 + .../application-integrationtest.properties | 25 + .../eu/dnetlib/parthenos/rdfs/CRMdig.rdfs | 638 ++ .../eu/dnetlib/parthenos/rdfs/CRMpe.rdfs | 530 ++ .../rdfs/cidoc_crm_v6.2-draft-2015August.rdfs | 5343 +++++++++++++++++ .../parthenos/registry/PE1_Service_sample.rdf | 54 + .../PE1_Service_sample_withHeader.rdf | 87 + .../responses/resourceCreatedResponse.json | 65 + .../responses/resourceCreationFailed.json | 1 + .../responses/resourceExistResponse.json | 121 + .../resourceNotExistResponse200.json | 8 + .../dnetlib/parthenos/registry/error500_1.rdf | 18 + .../dnetlib/parthenos/registry/metashare.json | 138 + .../dnetlib/parthenos/registry/metashare.rdf | 59 + .../eu/dnetlib/parthenos/registry/nakala.rdf | 17 + .../eu/dnetlib/parthenos/registry/sample1.rdf | 2659 ++++++++ .../parthenos/registry/sampleNoRiot.rdf | 18 + .../eu/dnetlib/parthenos/registry/test.rdf | 25 + .../eu/dnetlib/parthenos/registry/testwp8.rdf | 28 + .../parthenos/registry/withProviders.rdf | 33 + .../dnetlib/parthenos/sparql/longQuery.sparql | 100 + .../eu/dnetlib/parthenos/virtuoso/data.ttl | 21 + .../eu/dnetlib/parthenos/virtuoso/test.rdf | 234 + .../parthenos/virtuoso/test_less_data.rdf | 57 + .../parthenos/virtuoso/test_record_plain.xml | 2652 ++++++++ dnet-ariadneplus/.factorypath | 97 + dnet-ariadneplus/deploy.info | 10 + dnet-ariadneplus/pom.xml | 175 + .../nodes/ClarinAPIGeneratorJobNode.java | 122 + .../workflows/nodes/ClarinFileVisitor.java | 263 + .../nodes/PublishAbstractJobNode.java | 140 + .../workflows/nodes/PublishJRRJobNode.java | 10 + .../nodes/PublishVirtuosoJobNode.java | 10 + .../nodes/ReadVirtuosoByTypeJobNode.java | 51 + .../workflows/nodes/ReadVirtuosoJobNode.java | 87 + ...sterClarinWorkflowFromTemplateJobNode.java | 108 + .../workflows/nodes/ReportReaderJobNode.java | 50 + .../nodes/UnpublishVirtuosoJobNode.java | 53 + .../VirtuosoAriadnePlusByTypeIterator.java | 91 + .../nodes/VirtuosoAriadnePlusException.java | 24 + .../nodes/VirtuosoAriadnePlusIterator.java | 352 ++ .../ariadneplus/ehri/EHRICollectorPlugin.java | 41 + .../ariadneplus/ehri/EHRIGraphQLClient.java | 77 + .../ariadneplus/ehri/EHRIIterator.java | 107 + .../ariadneplus/ehri/EHRIIteratorFactory.java | 38 + .../isidore/IsidoreCollectorPlugin.java | 53 + .../ariadneplus/isidore/IsidoreIterator.java | 169 + .../ariadneplus_mail_template.xml | 46 + .../updateNotifications.txt | 11 + .../applicationContext-ariadneplus.properties | 1 + .../ariadneplus/clarin/CLARIN_README.txt | 8 + .../ariadneplus/clarin/prepareClarin.sh | 59 + .../ariadneplusLayoutToRecordStylesheet.xsl | 125 + ...licationContext-ariadneplus-msro-nodes.xml | 30 + .../workflows/nodes/clarin_tds.xml.st | 22 + .../repo-hi/CLARIN_aggregation_wf.xml.st | 150 + .../workflows/repo-hi/JRR_publish_wf.xml.st | 55 + .../workflows/repo-hi/NEW_publish_wf.xml.st | 79 + .../workflows/repo-hi/unpublish_wf.xml.st | 45 + .../repo-hi/x3m_aggregation_wf.xml.st | 149 + .../CleanerDSResourceType/cleaning_rule.xml | 61 + .../lightui_ariadneplus.xml | 89 + .../MDFormatDSResourceType/public-CIDOC.xml | 71 + .../transformed-CIDOC.xml | 114 + ...7-de9a7d86-00cd-4348-905d-0c977b2b996d.xml | 24 + .../oai-configuration.xml | 52 + .../RepositoryServiceResourceType/ariadne.xml | 148 + .../ariadneplus_topLevel.xml | 61 + .../ariadneplus_wp3.xml | 61 + .../ariadneplus_wp4.xml | 61 + .../ariadneplus_wp7.xml | 55 + .../ariadneplus_wp8.xml | 61 + .../RepositoryServiceResourceType/clarin.xml | 74 + .../culturaitalia.xml | 66 + .../dariah-gr.xml | 75 + .../RepositoryServiceResourceType/ehri.xml | 69 + .../RepositoryServiceResourceType/isidore.xml | 96 + .../RepositoryServiceResourceType/lre.xml | 65 + .../metashare.xml | 65 + .../mockDatasource.xml | 72 + .../RepositoryServiceResourceType/nakala.xml | 81 + .../ariadne_dataset_444_mapping.xml | 2414 ++++++++ .../ariadneplus_policy1.5.xml | 163 + .../ariadneplus_toplevel_mapping.xml | 4360 ++++++++++++++ .../ariadneplus_wp3.xml | 1983 ++++++ .../ariadneplus_wp4.xml | 397 ++ .../ariadneplus_wp5.xml | 23 + .../ariadneplus_wp8.xml | 1818 ++++++ .../cendari_authors_486.xml | 626 ++ .../cendari_manuscripts_485.xml | 587 ++ .../cendari_texts_487.xml | 337 ++ .../clarin_test_523.xml | 949 +++ ...culturaitalia_musei-actors_416_mapping.xml | 395 ++ .../culturaitalia_musei_312_mapping.xml | 518 ++ .../dariah-DE_417_mapping.xml | 372 ++ .../dariah-GR_515_mapping.xml | 1060 ++++ .../deprecated_dariah-GR_435_mapping.xml | 1059 ++++ .../ehri_328_mapping.xml | 1128 ++++ .../identity.xml | 31 + .../isidore_398_item_mapping.xml | 2814 +++++++++ .../isidore_432_mapping.xml | 401 ++ .../lre_447_mapping.xml | 616 ++ .../metashare_439_mapping.xml | 2616 ++++++++ .../nakala_433_mapping.xml | 312 + .../nakala_517_karnak.xml | 561 ++ .../nakala_520_3D.xml | 560 ++ .../nakala_521_MOM.xml | 559 ++ .../nakala_522_AOROC.xml | 559 ++ .../contact_point_types.xml | 93 + .../dataset_encodings.xml | 49 + .../dataset_subjects.xml | 20 + .../dataset_types.xml | 602 ++ .../dnet_api_compatibilities.xml | 30 + .../dnet_api_protocols.xml | 75 + .../dnet_content_typologies.xml | 27 + .../dnet_countries.xml | 1343 +++++ .../dnet_datasource_typologies.xml | 28 + .../dnet_languages.xml | 2037 +++++++ .../VocabularyDSResourceType/periods.xml | 21 + .../VocabularyDSResourceType/place_types.xml | 22 + .../VocabularyDSResourceType/places.xml | 21 + .../VocabularyDSResourceType/placesSimple.xml | 244 + .../VocabularyDSResourceType/schemas.xml | 32 + .../service_competence.xml | 20 + .../software_programming_languages.xml | 22 + .../workflows/JRRPublish_repo_hi_x3m.xml | 59 + .../profiles/workflows/NEW_repo_hi_x3m.xml | 180 + .../workflows/clarin_ds_tds_generation.wf.xml | 46 + .../workflows/collection_template.xml | 93 + .../profiles/workflows/feed_oai_template.xml | 59 + .../profiles/workflows/index_template.xml | 48 + .../bootstrap/profiles/workflows/nop.xml | 24 + .../workflows/post_feed_oai_template.xml | 73 + .../publish/jrr_publish_template.xml | 183 + .../publish/virtuoso_publish_template.xml | 41 + .../profiles/workflows/repo_bye_template.xml | 87 + .../profiles/workflows/repo_hi_CLARIN.xml | 180 + .../workflows/transform_x3m_template.xml | 132 + ...nContext-ariadneplus-collector-plugins.xml | 54 + .../ui/lightui/xslt/cidoc_2_document.xslt | 1357 +++++ .../modular/ui/lightui/xslt/cidoc_2_row.xslt | 62 + .../java/eu/dnetlib/AriadnePlusRRTest.java | 24 + .../VirtuosoAriadnePlusIteratorTest.java | 69 + .../VirtuosoAriadnePlusMockIterator.java | 36 + .../ehri/EHRIGraphQLClientTest.java | 72 + .../ariadneplus/ehri/EHRIIteratorTest.java | 32 + .../isidore/IsidoreIteratorTest.java | 47 + .../eu/dnetlib/x3m/ApplyX3MappingTest.java | 149 + .../eu/dnetlib/x3m/EHRI_sample_record_328.xml | 90 + .../eu/dnetlib/x3m/cendari_author_ex1.xml | 288 + .../eu/dnetlib/x3m/cendari_author_ex2.xml | 43 + .../eu/dnetlib/x3m/cendari_manoscritto.xml | 112 + .../eu/dnetlib/x3m/cendari_testi1.xml | 187 + .../eu/dnetlib/x3m/culturaItalia_record.xml | 212 + .../test/resources/eu/dnetlib/x3m/dariah.xml | 97 + .../test/resources/eu/dnetlib/x3m/dariah2.xml | 81 + .../resources/eu/dnetlib/x3m/dariah_orig.xml | 59 + .../resources/eu/dnetlib/x3m/ehri_test.xml | 100 + .../resources/eu/dnetlib/x3m/metashare.xml | 297 + .../resources/eu/dnetlib/x3m/new-10304736.xml | 40 + .../resources/eu/dnetlib/x3m/new-10304737.xml | 43 + .../resources/eu/dnetlib/x3m/new-10304738.xml | 42 + .../resources/eu/dnetlib/x3m/new-10304739.xml | 60 + .../resources/eu/dnetlib/x3m/new-10304740.xml | 57 + .../resources/eu/dnetlib/x3m/new-10304741.xml | 44 + .../resources/eu/dnetlib/x3m/new-10304742.xml | 50 + .../resources/eu/dnetlib/x3m/topLevel.xml | 1453 +++++ .../src/test/resources/eu/dnetlib/x3m/wp8.xml | 61 + .../src/test/resources/log4j.properties | 19 + 236 files changed, 65562 insertions(+) create mode 100644 .gitignore create mode 100644 dnet-ariadneplus-container/.factorypath create mode 100644 dnet-ariadneplus-container/pom.xml create mode 100644 dnet-ariadneplus-container/src/main/resources/META-INF/cxf/org.apache.cxf.Logger create mode 100644 dnet-ariadneplus-container/src/main/resources/META-INF/services/javax.xml.transform.TransformerFactory create mode 100644 dnet-ariadneplus-container/src/main/resources/eu/dnetlib/applicationContext-security.xml create mode 100644 dnet-ariadneplus-container/src/main/resources/eu/dnetlib/cnr-site.properties create mode 100644 dnet-ariadneplus-container/src/main/resources/log4j.properties create mode 100644 dnet-ariadneplus-container/src/main/webapp/WEB-INF/applicationContext.xml create mode 100644 dnet-ariadneplus-container/src/main/webapp/WEB-INF/cxf.xml create mode 100644 dnet-ariadneplus-container/src/main/webapp/WEB-INF/dispatcher-servlet.xml create mode 100644 dnet-ariadneplus-container/src/main/webapp/WEB-INF/web.xml create mode 100644 dnet-ariadneplus-container/src/main/webapp/images/User.png create mode 100644 dnet-ariadneplus-container/src/main/webapp/images/admin.svg create mode 100644 dnet-ariadneplus-container/src/main/webapp/images/d-netLogo.png create mode 100644 dnet-ariadneplus-container/src/main/webapp/images/lightui.png create mode 100644 dnet-ariadneplus-container/src/main/webapp/images/monitor.png create mode 100644 dnet-ariadneplus-container/src/main/webapp/index.html create mode 100644 dnet-ariadneplus-publisher/deploy.info create mode 100644 dnet-ariadneplus-publisher/pom.xml create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AppConfig.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusAsyncUncaughtExceptionHandler.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusPublisherApplication.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRM.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMdig.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMpe.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CKANUtils.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIClient.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponse.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueLicense.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistrator.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryRel.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryResource.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/JRRPublisher.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherException.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/SaxonHelper.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelper.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/ResourceReader.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClient.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientFactory.java create mode 100644 dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPI.java create mode 100644 dnet-ariadneplus-publisher/src/main/resources/application.properties create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/D14_Software.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E29_Design_or_Procedure.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E39_Actor.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E78_Collection.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE18_Dataset.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE1_Service.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE35_Project.sparql create mode 100644 dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/rdfs_rule_set_isql.txt create mode 100644 dnet-ariadneplus-publisher/src/main/resources/logback-spring.xml create mode 100644 dnet-ariadneplus-publisher/src/main/resources/res.json create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponseTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorIntegrationTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherControllerTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelperTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JacksonTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JenaInferenceTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/ExampleIO_01.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/FreeMarkerTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPIIntegrationTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPITest.java create mode 100644 dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoTest.java create mode 100644 dnet-ariadneplus-publisher/test/main/resources/application-integrationtest.properties create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMdig.rdfs create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMpe.rdfs create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample_withHeader.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreatedResponse.json create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreationFailed.json create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceExistResponse.json create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceNotExistResponse200.json create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/error500_1.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.json create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/nakala.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sample1.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sampleNoRiot.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/test.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/testwp8.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/withProviders.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/sparql/longQuery.sparql create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/data.ttl create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_less_data.rdf create mode 100644 dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_record_plain.xml create mode 100644 dnet-ariadneplus/.factorypath create mode 100644 dnet-ariadneplus/deploy.info create mode 100644 dnet-ariadneplus/pom.xml create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinAPIGeneratorJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinFileVisitor.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishAbstractJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishJRRJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishVirtuosoJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoByTypeJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/RegisterClarinWorkflowFromTemplateJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReportReaderJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/UnpublishVirtuosoJobNode.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusByTypeIterator.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusException.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIterator.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRICollectorPlugin.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClient.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIterator.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorFactory.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreCollectorPlugin.java create mode 100644 dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIterator.java create mode 100644 dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/ariadneplus_mail_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/updateNotifications.txt create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/applicationContext-ariadneplus.properties create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/CLARIN_README.txt create mode 100755 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/prepareClarin.sh create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/applicationContext-ariadneplus-msro-nodes.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/clarin_tds.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/CLARIN_aggregation_wf.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/JRR_publish_wf.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/NEW_publish_wf.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/unpublish_wf.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/x3m_aggregation_wf.xml.st create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/CleanerDSResourceType/cleaning_rule.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/LightUiDSResourceType/lightui_ariadneplus.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/public-CIDOC.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/transformed-CIDOC.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MetadataFormatDSResourceType/7-de9a7d86-00cd-4348-905d-0c977b2b996d.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/OAIPublisherConfigurationDSResourceType/oai-configuration.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadne.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_topLevel.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp3.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp4.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp7.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp8.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/clarin.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/culturaitalia.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/dariah-gr.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ehri.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/isidore.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/lre.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/metashare.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/mockDatasource.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/nakala.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadne_dataset_444_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_policy1.5.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_toplevel_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp3.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp4.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp5.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp8.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_authors_486.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_manuscripts_485.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_texts_487.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/clarin_test_523.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei-actors_416_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei_312_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-DE_417_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-GR_515_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/deprecated_dariah-GR_435_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ehri_328_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/identity.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_398_item_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_432_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/lre_447_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/metashare_439_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_433_mapping.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_517_karnak.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_520_3D.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_521_MOM.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_522_AOROC.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/contact_point_types.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_encodings.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_subjects.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_types.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_compatibilities.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_protocols.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_content_typologies.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_countries.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_datasource_typologies.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_languages.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/periods.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/place_types.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/places.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/placesSimple.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/schemas.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/service_competence.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/software_programming_languages.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/JRRPublish_repo_hi_x3m.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/NEW_repo_hi_x3m.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/clarin_ds_tds_generation.wf.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/collection_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/feed_oai_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/index_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/nop.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/post_feed_oai_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/jrr_publish_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/virtuoso_publish_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_bye_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_hi_CLARIN.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/transform_x3m_template.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/data/collector/plugins/parthenos/applicationContext-ariadneplus-collector-plugins.xml create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_document.xslt create mode 100644 dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_row.xslt create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/AriadnePlusRRTest.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIteratorTest.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusMockIterator.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClientTest.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorTest.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIteratorTest.java create mode 100644 dnet-ariadneplus/src/test/java/eu/dnetlib/x3m/ApplyX3MappingTest.java create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/EHRI_sample_record_328.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex1.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex2.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_manoscritto.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_testi1.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/culturaItalia_record.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah2.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah_orig.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/ehri_test.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/metashare.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304736.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304737.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304738.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304739.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304740.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304741.xml create mode 100755 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304742.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/topLevel.xml create mode 100644 dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/wp8.xml create mode 100644 dnet-ariadneplus/src/test/resources/log4j.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9dd8c5f --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +/.metadata/ +.DS_Store +.idea +*.iml +*~ +.classpath +/*/.classpath +/*/*/.classpath +.metadata +/*/.metadata +/*/*/.metadata +.project +.log +.settings +/*/*/target +/*/target +/target +/*/*/build +/*/build +/build diff --git a/dnet-ariadneplus-container/.factorypath b/dnet-ariadneplus-container/.factorypath new file mode 100644 index 0000000..46f5382 --- /dev/null +++ b/dnet-ariadneplus-container/.factorypath @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus-container/pom.xml b/dnet-ariadneplus-container/pom.xml new file mode 100644 index 0000000..85f823b --- /dev/null +++ b/dnet-ariadneplus-container/pom.xml @@ -0,0 +1,124 @@ + + + + eu.dnetlib + dnet-container-parent + 2.0.0-SNAPSHOT + + + 4.0.0 + eu.dnetlib + dnet-ariadneplus-container + war + 1.0.0-SNAPSHOT + + scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet50/webapps/dnet-ariadneplus-container/trunk + + + + + commons-beanutils + commons-beanutils + 1.9.2 + + + + org.springframework.security + spring-security-web + 4.2.2.RELEASE + + + org.springframework.security + spring-security-config + 4.2.2.RELEASE + + + + org.springframework + spring-tx + ${spring.version} + + + + eu.dnetlib + dnet-ariadneplus + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + + eu.dnetlib + dnet-data-services + [2.0.0-SAXONHE-SNAPSHOT, 3.0.0-SAXON-SNAPSHOT) + + + + eu.dnetlib + dnet-modular-uis + [2.0.0-SAXONHE-SNAPSHOT, 3.0.0-SAXON-SNAPSHOT) + + + + eu.dnetlib + dnet-information-service + [2.0.0-SAXONHE-SNAPSHOT, 3.0.0-SAXON-SNAPSHOT) + + + org.apache.logging.log4j + log4j-slf4j-impl + + + + + eu.dnetlib + dnet-data-provision-services + [2.0.0-SAXONHE-SNAPSHOT, 3.0.0-SAXON-SNAPSHOT) + + + xerces + xercesImpl + 2.11.0 + compile + + + + + net.bull.javamelody + javamelody-core + 1.65.0 + + + + com.lowagie + itext + 2.1.7 + + + bcmail-jdk14 + bouncycastle + + + bcprov-jdk14 + bouncycastle + + + bctsp-jdk14 + bouncycastle + + + + + + org.slf4j + slf4j-log4j12 + [1.6.4] + + + + eu.dnetlib + dnet-basic-aggregator + 1.0.0-SNAPSHOT + + + + diff --git a/dnet-ariadneplus-container/src/main/resources/META-INF/cxf/org.apache.cxf.Logger b/dnet-ariadneplus-container/src/main/resources/META-INF/cxf/org.apache.cxf.Logger new file mode 100644 index 0000000..4fd9372 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/resources/META-INF/cxf/org.apache.cxf.Logger @@ -0,0 +1 @@ +org.apache.cxf.common.logging.Log4jLogger diff --git a/dnet-ariadneplus-container/src/main/resources/META-INF/services/javax.xml.transform.TransformerFactory b/dnet-ariadneplus-container/src/main/resources/META-INF/services/javax.xml.transform.TransformerFactory new file mode 100644 index 0000000..b53ca85 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/resources/META-INF/services/javax.xml.transform.TransformerFactory @@ -0,0 +1 @@ +net.sf.saxon.TransformerFactoryImpl \ No newline at end of file diff --git a/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/applicationContext-security.xml b/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/applicationContext-security.xml new file mode 100644 index 0000000..fc9a7ac --- /dev/null +++ b/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/applicationContext-security.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/cnr-site.properties b/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/cnr-site.properties new file mode 100644 index 0000000..9fe6781 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/resources/eu/dnetlib/cnr-site.properties @@ -0,0 +1,53 @@ +container.hostname = localhost +container.context = app +container.port = 8280 +services.is.store.database.bean = persistentExistDatabase +#services.is.store.database.bean = temporaryExistDatabase + +dnet.data.path = /tmp/ariadneplus +dnet.bootstrap.schemas = classpath*:/eu/dnetlib/bootstrap/schemas/**/*.xsd +dnet.bootstrap.profiles = classpath*:/eu/dnetlib/bootstrap/profiles/**/*.xml + +services.msro.reindex.limit = 100 + +services.aggregator.host = localhost +services.aggregator.name = ARIADNEPLUS +services.aggregator.country = EU +services.registry.pending.resource.manager = compatPendingManager +transport.soap.force.local.address = true + +#Authentication and authorization +#dnet.modular.ui.authorization.manager = simpleAuthenticationManager +dnet.modular.ui.authorization.default.superAdmin= admin +dnet.admin.password = e2d45d57c7e2941b65c6ccd64af4223e +dnet.modular.ui.authorization.manager = mockUserAuthenticationManager +# Properties for the mock authorization manager ('mockUserAuthenticationManager') +dnet.modular.ui.authorization.mock.user.id = dnet +dnet.modular.ui.authorization.mock.user.name = DNet +dnet.modular.ui.authorization.mock.user.email = dnet-team@isti.cnr.it + + +# Mail configuration +msro.wf.mail.smtp.host = smtp.host.eu +msro.wf.mail.smtp.user = smtp-user +msro.wf.mail.smtp.password = smtp-pwd +msro.wf.mail.cc = manager@email.eu +service.index.solr.rank.enable = true +services.publisher.oai.host = localhost +services.publisher.oai.port = 27017 +services.objectstore.dao = gridFSObjectstoreDao +# AUTH +dnet.modular.ui.authorization.mongo.host = localhost +dnet.modular.ui.authorization.mongo.port = 27017 +dnet.modular.ui.authorization.mongo.db = dnet_auth +dnet.modular.ui.logout.url = http://localhost:8280/${container.context}/logout +service.index.feed.repeatDelay = 2000 +service.index.solr.nh.mdformat.enable = true +service.index.default.interpretation = transformed + +service.index.layoutToRecordStylesheet=classpath:/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl +services.registry.exist.options={\"exist:output-size-limit\":\"100000\"} + +collector.sftp.auth.prvKeyPath=~/.ssh/id_rsa +collector.sftp.auth.passphrase= +collector.sftp.auth.knownHostsPath=~/.ssh/known_hosts \ No newline at end of file diff --git a/dnet-ariadneplus-container/src/main/resources/log4j.properties b/dnet-ariadneplus-container/src/main/resources/log4j.properties new file mode 100644 index 0000000..532aed3 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/resources/log4j.properties @@ -0,0 +1,39 @@ +org.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger +log4j.rootLogger=WARN, DNET +# TO DISABLE WHEN BUILDING THE WAR +#log4j.rootLogger=WARN, CONSOLE +# +#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +#log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n + +log4j.appender.DNET=org.apache.log4j.RollingFileAppender +log4j.appender.DNET.File=${catalina.base}/logs/dnet.log +log4j.appender.DNET.Append=true +log4j.appender.DNET.Encoding=UTF-8 +log4j.appender.DNET.Threshold=ALL +log4j.appender.DNET.MaxFileSize=100MB +log4j.appender.DNET.MaxBackupIndex=30 +log4j.appender.DNET.layout=org.apache.log4j.PatternLayout +log4j.appender.DNET.layout.ConversionPattern=%d [%t] %-5p %c- %m%n + +log4j.logger.eu.dnetlib=INFO +log4j.logger.eu.dnetlib.conf.PropertyFetcher=FATAL +log4j.logger.org.apache.cxf.interceptor=FATAL +log4j.logger.org.apache.cxf.ws.addressing.ContextUtils=FATAL +log4j.logger.eu.dnetlib.xml.database.LoggingTrigger=WARN +log4j.logger.eu.dnetlib.enabling.tools.registration.ServiceRegistrator=WARN +log4j.logger.eu.dnetlib.enabling.inspector=FATAL +log4j.logger.eu.dnetlib.enabling.inspector.SubscriptionController=DEBUG +log4j.logger.eu.dnetlib.springutils.stringtemplate.StringTemplateViewResolver=FATAL +log4j.logger.eu.dnetlib.enabling.is.sn.SynchronousNotificationSenderImpl=WARN +log4j.logger.eu.dnetlib.enabling.is.store.AbstractContentInitializer=WARN + +log4j.logger.gr.forth.Utils=OFF +log4j.logger.eu.delving.x3ml=FATAL + + +log4j.logger.eu.dnetlib.ariadneplus.workflows.nodes=DEBUG +log4j.logger.eu.dnetlib.ariadneplus.workflows.nodes.ClarinAPIGeneratorJobNode=DEBUG +log4j.logger.eu.dnetlib.ariadneplus.workflows.nodes.ClarinFileVisitor=INFO + diff --git a/dnet-ariadneplus-container/src/main/webapp/WEB-INF/applicationContext.xml b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/applicationContext.xml new file mode 100644 index 0000000..7a9b9f3 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/applicationContext.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-container/src/main/webapp/WEB-INF/cxf.xml b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/cxf.xml new file mode 100644 index 0000000..efb0a68 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/cxf.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus-container/src/main/webapp/WEB-INF/dispatcher-servlet.xml b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/dispatcher-servlet.xml new file mode 100644 index 0000000..47b4440 --- /dev/null +++ b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/dispatcher-servlet.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus-container/src/main/webapp/WEB-INF/web.xml b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..ca49cdb --- /dev/null +++ b/dnet-ariadneplus-container/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,56 @@ + + DNet-2.0 container web app + + contextConfigLocation + /WEB-INF/applicationContext.xml + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + encodingFilter + /* + + + springSecurityFilterChain + /* + + + + + org.springframework.web.context.ContextLoaderListener + + + CXFServlet + org.apache.cxf.transport.servlet.CXFServlet + 1 + + + dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + dispatcher + /mvc/* + + + CXFServlet + /services/* + + diff --git a/dnet-ariadneplus-container/src/main/webapp/images/User.png b/dnet-ariadneplus-container/src/main/webapp/images/User.png new file mode 100644 index 0000000000000000000000000000000000000000..38a22d4a52719d8aa6eb40bc139232ceea4e66f9 GIT binary patch literal 45700 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

~4^?GP99M|#J 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 z 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 + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus-container/src/main/webapp/images/d-netLogo.png b/dnet-ariadneplus-container/src/main/webapp/images/d-netLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..04934c7c43c5a7119ac0d0c1a7c617e359f3aa52 GIT binary patch literal 8155 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 literal 0 HcmV?d00001 diff --git a/dnet-ariadneplus-container/src/main/webapp/images/monitor.png b/dnet-ariadneplus-container/src/main/webapp/images/monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..24d65e15ab68f4f08da183ec78e6c1275f968232 GIT binary patch literal 45487 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 V-e@fzZ^1x6d1;kz;IAgZ{|5<9^~V4J literal 0 HcmV?d00001 diff --git a/dnet-ariadneplus-container/src/main/webapp/index.html b/dnet-ariadneplus-container/src/main/webapp/index.html new file mode 100644 index 0000000..f0357bb --- /dev/null +++ b/dnet-ariadneplus-container/src/main/webapp/index.html @@ -0,0 +1,28 @@ + + +
+ + + + + + + +
+
+ Access the Metadata Inspector to check your transformed records here
+
+

The following entry points require authentication:

+ + + + + + + + + + + + +
if this container runs the IS, you can access the web interface here
if this container runs the user interfaces, you can access them here
if this container is monitored, you can access the monitoring web interface here
diff --git a/dnet-ariadneplus-publisher/deploy.info b/dnet-ariadneplus-publisher/deploy.info new file mode 100644 index 0000000..57224e4 --- /dev/null +++ b/dnet-ariadneplus-publisher/deploy.info @@ -0,0 +1,10 @@ +{ + "type_source": "SVN", + "goal": "package -U source:jar", + "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet50/modules/dnet-ariadneplus-publisher/trunk/", + "deploy_repository": "dnet5-snapshots", + "version": "5", + "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", + "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet5-snapshots", + "name": "dnet-ariadneplus-publisher" +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/pom.xml b/dnet-ariadneplus-publisher/pom.xml new file mode 100644 index 0000000..2c7453f --- /dev/null +++ b/dnet-ariadneplus-publisher/pom.xml @@ -0,0 +1,214 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 1.5.6.RELEASE + + + + 4.0.0 + eu.dnetlib + dnet-ariadneplus-publisher + jar + 3.0.0-SNAPSHOT + + scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet50/modules/dnet-ariadneplus-publisher/trunk + https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/dnet-ariadneplus-publisher + + + jenkins + https://jenkins-dnet.d4science.org/view/DNet50/job/DSL50_dnet-ariadneplus-publisher/ + + + + dnet5-releases + D-Net 5 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet5-releases + default + + + + + + + + dnet-deps + dnet-dependencies + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet-deps + default + + + dnet5-releases + D-Net 5 Releases + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet5-releases + default + + false + + + + dnet5-snapshots + D-Net 5 Snapshots + http://maven.research-infrastructures.eu/nexus/content/repositories/dnet5-snapshots + default + + true + + + + + + + + net.sf.saxon + Saxon-HE + 9.5.1-5 + + + virtuoso + jena-driver + 3.0 + + + openlink + virtuoso-jdbc + 4.0 + + + org.apache.jena + apache-jena + [3.3.0,4.0.0) + pom + + + org.slf4j + slf4j-log4j12 + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-autoconfigure + + + org.springframework.boot + spring-boot + + + org.springframework.boot + spring-boot-starter-web + + + org.apache.solr + solr-solrj + [5.0.0,6.0.0) + + + + + com.google.guava + guava + 23.3-jre + + + org.freemarker + freemarker + 2.3.27-incubating + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + + + + 1.8 + false + + + + + java8-doclint-disabled + + [1.8,) + + + -Xdoclint:none + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AppConfig.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AppConfig.java new file mode 100644 index 0000000..331b874 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AppConfig.java @@ -0,0 +1,61 @@ +package eu.dnetlib.ariadneplus; + +import freemarker.cache.ClassTemplateLoader; +import freemarker.template.TemplateExceptionHandler; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 17/10/2017. + * + * @author Alessia Bardi + */ +@Configuration +//@EnableAsync +public class AppConfig { + +// @Override +// @Bean +// public Executor getAsyncExecutor() { +// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); +// executor.setCorePoolSize(7); +// executor.setMaxPoolSize(42); +// executor.setQueueCapacity(11); +// executor.setThreadNamePrefix("MyExecutor-"); +// //executor.initialize(); +// return executor; +// } +// +// @Override +// public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { +// return new AriadnePlusAsyncUncaughtExceptionHandler(); +// } + + @Bean + public RestTemplate jrrRestTemplate(){ + //TODO: move configuration here from CatalogueRegistrator? + return new RestTemplateBuilder().build(); + } + + + @Bean + public freemarker.template.Configuration freemarkerConfig(){ + freemarker.template.Configuration config = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_27); + ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/eu/dnetlib/ariadneplus/sparql"); + config.setTemplateLoader(ctl); + config.setDefaultEncoding("UTF-8"); + // Sets how errors will appear. + // During web page *development* TemplateExceptionHandler.HTML_DEBUG_HANDLER is better. + config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + + // Don't log exceptions inside FreeMarker that it will thrown at you anyway: + config.setLogTemplateExceptions(false); + + // Wrap unchecked exceptions thrown during template processing into TemplateException-s. + config.setWrapUncheckedExceptions(true); + + return config; + } +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusAsyncUncaughtExceptionHandler.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusAsyncUncaughtExceptionHandler.java new file mode 100644 index 0000000..6742347 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusAsyncUncaughtExceptionHandler.java @@ -0,0 +1,24 @@ +package eu.dnetlib.ariadneplus; + +import java.lang.reflect.Method; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; + +/** + * Created by Alessia Bardi on 17/10/2017. + * + * @author Alessia Bardi + */ + +public class AriadnePlusAsyncUncaughtExceptionHandler implements AsyncUncaughtExceptionHandler { + + private static final Log log = LogFactory.getLog(AriadnePlusAsyncUncaughtExceptionHandler.class); + + @Override + public void handleUncaughtException(final Throwable throwable, final Method method, final Object... objects) { + log.error("Method Name::"+method.getName()); + log.error("Exception occurred::"+ throwable); + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusPublisherApplication.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusPublisherApplication.java new file mode 100644 index 0000000..e539b6f --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/AriadnePlusPublisherApplication.java @@ -0,0 +1,19 @@ +package eu.dnetlib.ariadneplus; + +/** + * Created by Alessia Bardi on 09/08/2017. + * + * @author Alessia Bardi + */ + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AriadnePlusPublisherApplication { + + public static void main(String[] args) { + SpringApplication.run(AriadnePlusPublisherApplication.class, args); + } + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRM.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRM.java new file mode 100644 index 0000000..bb9fef8 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRM.java @@ -0,0 +1,2986 @@ +package eu.dnetlib.ariadneplus; + +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.Resource; + +/** + * Vocabulary definitions from http://www.cidoc-crm.org/sites/default/files2/cidoc_crm_v6.2-draft-2015August.rdfs + * + * @author Auto-generated by schemagen on 29 Sep 2017 15:45 + */ +public class CRM { + + /** + *

The RDF model that holds the vocabulary terms

+ */ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /** + *

The namespace of the vocabulary as a string

+ */ + public static final String NS = "http://www.cidoc-crm.org/cidoc-crm/"; + + /** + *

The URL to the online schema as a string

+ */ + public static final String RDFS_URL = "http://www.cidoc-crm.org/sites/default/files2/cidoc_crm_v6.2-draft-2015August.rdfs"; + + /** + *

The namespace of the vocabulary as a string

+ * + * @return namespace as String + * @see #NS + */ + public static String getURI() { + return NS; + } + + /** + *

The namespace of the vocabulary as a resource

+ */ + public static final Resource NAMESPACE = M_MODEL.createResource(NS); + + /** + *

This property property links an E69 Death event to the E21 Person that died.

+ */ + public static final Property P100_was_death_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P100_was_death_of"); + + public static final Property P100i_died_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P100i_died_in"); + + /** + *

This property links an instance of E70 Thing to an E55 Type of usage. It allows + * the relationship between particular things, both physical and immaterial, + * and general methods and techniques of use to be documented. Thus it can be + * asserted that a baseball bat had a general use for sport and a specific use + * for threatening people during the Great Train Robbery.

+ */ + public static final Property P101_had_as_general_use = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P101_had_as_general_use"); + + public static final Property P101i_was_use_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P101i_was_use_of"); + + /** + *

This property describes the E35 Title applied to an instance of E71 Man-Made + * Thing. The E55 Type of Title is assigned in a sub property. The P102.1 has + * type property of the P102 has title (is title of) property enables the relationship + * between the Title and the thing to be further clarified, for example, if the + * Title was a given Title, a supplied Title etc. It allows any man-made material + * or immaterial thing to be given a Title. It is possible to imagine a Title + * being created without a specific object in mind.

+ */ + public static final Property P102_has_title = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P102_has_title"); + + public static final Property P102i_is_title_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P102i_is_title_of"); + + /** + *

This property links an instance of E71 Man-Made Thing to an E55 Type of usage. + * It creates a property between specific man-made things, both physical and + * immaterial, to Types of intended methods and techniques of use. Note: A link + * between specific man-made things and a specific use activity should be expressed + * using P19 was intended use of (was made for).

+ */ + public static final Property P103_was_intended_for = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P103_was_intended_for"); + + public static final Property P103i_was_intention_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P103i_was_intention_of"); + + /** + *

This property links a particular E72 Legal Object to the instances of E30 + * Right to which it is subject. The Right is held by an E39 Actor as described + * by P75 possesses (is possessed by).

+ */ + public static final Property P104_is_subject_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P104_is_subject_to"); + + public static final Property P104i_applies_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P104i_applies_to"); + + /** + *

This property identifies the E39 Actor who holds the instances of E30 Right + * to an E72 Legal Object. It is a superproperty of P52 has current owner (is + * current owner of) because ownership is a right that is held on the owned object. + * P105 right held by (has right on) is a shortcut of the fully developed path + * from E72 Legal Object through P104 is subject to (applies to), E30 Right, + * P75 possesses (is possessed by) to E39 Actor.

+ */ + public static final Property P105_right_held_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P105_right_held_by"); + + public static final Property P105i_has_right_on = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P105i_has_right_on"); + + /** + *

This property associates an instance of E90 Symbolic Object with a part of + * it that is by itself an instance of E90 Symbolic Object, such as fragments + * of texts or clippings from an image.

+ */ + public static final Property P106_is_composed_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P106_is_composed_of"); + + public static final Property P106i_forms_part_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P106i_forms_part_of"); + + /** + *

This property relates an E39 Actor to the E74 Group of which that E39 Actor + * is a member. Groups, Legal Bodies and Persons, may all be members of Groups. + * A Group necessarily consists of more than one member. This property is a shortcut + * of the more fully developed path from E74 Group through P144 joined with (gained + * member by), E85 Joining, P143 joined (was joined by) to E39 Actor The property + * P107.1 kind of member can be used to specify the type of membership or the + * role the member has in the group.

+ */ + public static final Property P107_has_current_or_former_member = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P107_has_current_or_former_member"); + + public static final Property P107i_is_current_or_former_member_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P107i_is_current_or_former_member_of"); + + /** + *

This property identifies the E24 Physical Man-Made Thing that came into existence + * as a result of an E12 Production. The identity of an instance of E24 Physical + * Man-Made Thing is not defined by its matter, but by its existence as a subject + * of documentation. An E12 Production can result in the creation of multiple + * instances of E24 Physical Man-Made Thing.

+ */ + public static final Property P108_has_produced = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P108_has_produced"); + + public static final Property P108i_was_produced_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P108i_was_produced_by"); + + /** + *

This property identifies the E39 Actor or Actors who assume or have assumed + * overall curatorial responsibility for an E78 Collection. It does not allow + * a history of curation to be recorded. This would require use of an Event initiating + * a curator being responsible for a Collection.

+ */ + public static final Property P109_has_current_or_former_curator = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P109_has_current_or_former_curator"); + + public static final Property P109i_is_current_or_former_curator_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P109i_is_current_or_former_curator_of"); + + /** + *

This property associates an instance of E92 Spacetime Volume with another + * instance of E92 Spacetime Volume that falls within the latter. In other words, + * all points in the former are also points in the latter.

+ */ + public static final Property P10_falls_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P10_falls_within"); + + public static final Property P10i_contains = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P10i_contains"); + + /** + *

This property identifies the E24 Physical Man-Made Thing that is added to + * (augmented) in an E79 Part Addition. Although a Part Addition event normally + * concerns only one item of Physical Man-Made Thing, it is possible to imagine + * circumstances under which more than one item might be added to (augmented). + * For example, the artist Jackson Pollock trailing paint onto multiple canvasses.

+ */ + public static final Property P110_augmented = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P110_augmented"); + + public static final Property P110i_was_augmented_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P110i_was_augmented_by"); + + /** + *

This property identifies the E18 Physical Thing that is added during an E79 + * Part Addition activity

+ */ + public static final Property P111_added = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P111_added"); + + public static final Property P111i_was_added_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P111i_was_added_by"); + + /** + *

This property identifies the E24 Physical Man-Made Thing that was diminished + * by E80 Part Removal. Although a Part removal activity normally concerns only + * one item of Physical Man-Made Thing, it is possible to imagine circumstances + * under which more than one item might be diminished by a single Part Removal + * activity.

+ */ + public static final Property P112_diminished = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P112_diminished"); + + public static final Property P112i_was_diminished_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P112i_was_diminished_by"); + + /** + *

This property identifies the E18 Physical Thing that is removed during an + * E80 Part Removal activity.

+ */ + public static final Property P113_removed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P113_removed"); + + public static final Property P113i_was_removed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P113i_was_removed_by"); + + /** + *

This symmetric property allows the instances of E2 Temporal Entity with the + * same E52 Time-Span to be equated. This property is only necessary if the time + * span is unknown (otherwise the equivalence can be calculated). This property + * is the same as the "equal" relationship of Allen’s temporal logic (Allen, + * 1983, pp. 832-843).

+ */ + public static final Property P114_is_equal_in_time_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P114_is_equal_in_time_to"); + + /** + *

This property allows the ending point for a E2 Temporal Entity to be situated + * by reference to the ending point of another temporal entity of longer duration. + * This property is only necessary if the time span is unknown (otherwise the + * relationship can be calculated). This property is the same as the "finishes + * / finished-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843).

+ */ + public static final Property P115_finishes = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P115_finishes"); + + public static final Property P115i_is_finished_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P115i_is_finished_by"); + + /** + *

This property allows the starting point for a E2 Temporal Entity to be situated + * by reference to the starting point of another temporal entity of longer duration. + * This property is only necessary if the time span is unknown (otherwise the + * relationship can be calculated). This property is the same as the "starts + * / started-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843).

+ */ + public static final Property P116_starts = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P116_starts"); + + public static final Property P116i_is_started_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P116i_is_started_by"); + + /** + *

This property allows the entire E52 Time-Span of an E2 Temporal Entity to + * be situated within the Time-Span of another temporal entity that starts before + * and ends after the included temporal entity. This property is only necessary + * if the time span is unknown (otherwise the relationship can be calculated). + * This property is the same as the "during / includes" relationships of Allen’s + * temporal logic (Allen, 1983, pp. 832-843).

+ */ + public static final Property P117_occurs_during = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P117_occurs_during"); + + public static final Property P117i_includes = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P117i_includes"); + + /** + *

This property identifies an overlap between the instances of E52 Time-Span + * of two instances of E2 Temporal Entity. It implies a temporal order between + * the two entities: if A overlaps in time B, then A must start before B, and + * B must end after A. This property is only necessary if the relevant time spans + * are unknown (otherwise the relationship can be calculated). This property + * is the same as the "overlaps / overlapped-by" relationships of Allen’s temporal + * logic (Allen, 1983, pp. 832-843).

+ */ + public static final Property P118_overlaps_in_time_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P118_overlaps_in_time_with"); + + public static final Property P118i_is_overlapped_in_time_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P118i_is_overlapped_in_time_by"); + + /** + *

This property indicates that one E2 Temporal Entity immediately follows another. + * It implies a particular order between the two entities: if A meets in time + * with B, then A must precede B. This property is only necessary if the relevant + * time spans are unknown (otherwise the relationship can be calculated). This + * property is the same as the "meets / met-by" relationships of Allen’s temporal + * logic (Allen, 1983, pp. 832-843).

+ */ + public static final Property P119_meets_in_time_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P119_meets_in_time_with"); + + public static final Property P119i_is_met_in_time_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P119i_is_met_in_time_by"); + + /** + *

This property describes the active or passive participation of instances of + * E39 Actors in an E5 Event. It connects the life-line of the related E39 Actor + * with the E53 Place and E50 Date of the event. The property implies that the + * Actor was involved in the event but does not imply any causal relationship. + * The subject of a portrait can be said to have participated in the creation + * of the portrait.

+ */ + public static final Property P11_had_participant = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P11_had_participant"); + + public static final Property P11i_participated_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P11i_participated_in"); + + /** + *

This property identifies the relative chronological sequence of two temporal + * entities. It implies that a temporal gap exists between the end of A and the + * start of B. This property is only necessary if the relevant time spans are + * unknown (otherwise the relationship can be calculated). This property is the + * same as the "before / after" relationships of Allen’s temporal logic (Allen, + * 1983, pp. 832-843).

+ */ + public static final Property P120_occurs_before = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P120_occurs_before"); + + public static final Property P120i_occurs_after = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P120i_occurs_after"); + + /** + *

This symmetric property allows the instances of E53 Place with overlapping + * geometric extents to be associated with each other. It does not specify anything + * about the shared area. This property is purely spatial, in contrast to Allen + * operators, which are purely temporal.

+ */ + public static final Property P121_overlaps_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P121_overlaps_with"); + + /** + *

This symmetric property allows the instances of E53 Place which share common + * borders to be related as such. This property is purely spatial, in contrast + * to Allen operators, which are purely temporal.

+ */ + public static final Property P122_borders_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P122_borders_with"); + + /** + *

This property identifies the E77 Persistent Item or items that are the result + * of an E81 Transformation. New items replace the transformed item or items, + * which cease to exist as units of documentation. The physical continuity between + * the old and the new is expressed by the link to the common Transformation.

+ */ + public static final Property P123_resulted_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P123_resulted_in"); + + public static final Property P123i_resulted_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P123i_resulted_from"); + + /** + *

This property identifies the E77 Persistent Item or items that cease to exist + * due to a E81 Transformation. It is replaced by the result of the Transformation, + * which becomes a new unit of documentation. The continuity between both items, + * the new and the old, is expressed by the link to the common Transformation.

+ */ + public static final Property P124_transformed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P124_transformed"); + + public static final Property P124i_was_transformed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P124i_was_transformed_by"); + + /** + *

This property defines the kind of objects used in an E7 Activity, when the + * specific instance is either unknown or not of interest, such as use of "a + * hammer".

+ */ + public static final Property P125_used_object_of_type = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P125_used_object_of_type"); + + public static final Property P125i_was_type_of_object_used_in = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P125i_was_type_of_object_used_in"); + + /** + *

This property identifies E57 Material employed in an E11 Modification. The + * E57 Material used during the E11 Modification does not necessarily become + * incorporated into the E24 Physical Man-Made Thing that forms the subject of + * the E11 Modification.

+ */ + public static final Property P126_employed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P126_employed"); + + public static final Property P126i_was_employed_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P126i_was_employed_in"); + + /** + *

This property identifies a super-Type to which an E55 Type is related. It + * allows Types to be organised into hierarchies. This is the sense of "broader + * term generic (BTG)" as defined in ISO 2788

+ */ + public static final Property P127_has_broader_term = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P127_has_broader_term"); + + public static final Property P127i_has_narrower_term = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P127i_has_narrower_term"); + + /** + *

This property identifies an E90 Symbolic Object carried by an instance of + * E18 Physical Thing.

+ */ + public static final Property P128_carries = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P128_carries"); + + public static final Property P128i_is_carried_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P128i_is_carried_by"); + + /** + *

This property documents that an E89 Propositional Object has as subject an + * instance of E1 CRM Entity.

+ */ + public static final Property P129_is_about = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P129_is_about"); + + public static final Property P129i_is_subject_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P129i_is_subject_of"); + + /** + *

This property describes the active or passive presence of an E77 Persistent + * Item in an E5 Event without implying any specific role. It connects the history + * of a thing with the E53 Place and E50 Date of an event. For example, an object + * may be the desk, now in a museum on which a treaty was signed. The presence + * of an immaterial thing implies the presence of at least one of its carriers.

+ */ + public static final Property P12_occurred_in_the_presence_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P12_occurred_in_the_presence_of"); + + public static final Property P12i_was_present_at = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P12i_was_present_at"); + + /** + *

This property generalises the notions of "copy of" and "similar to" into a + * dynamic, asymmetric relationship, where the domain expresses the derivative, + * if such a direction can be established. Otherwise, the relationship is symmetric. + * It is a short-cut of P15 was influenced by (influenced) in a creation or production, + * if such a reason for the similarity can be verified. Moreover it expresses + * similarity in cases that can be stated between two objects only, without historical + * knowledge about its reasons.

+ */ + public static final Property P130_shows_features_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P130_shows_features_of"); + + public static final Property P130i_features_are_also_found_on = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P130i_features_are_also_found_on"); + + /** + *

This property identifies a name used specifically to identify an E39 Actor. + * This property is a specialisation of P1 is identified by (identifies) is identified + * by.

+ */ + public static final Property P131_is_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P131_is_identified_by"); + + public static final Property P131i_identifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P131i_identifies"); + + /** + *

This symmetric property allows instances of E4 Period that overlap both temporally + * and spatially to be related, i,e. they share some spatio-temporal extent. + * This property does not imply any ordering or sequence between the two periods, + * either spatial or temporal.

+ */ + public static final Property P132_overlaps_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P132_overlaps_with"); + + /** + *

This symmetric property allows instances of E4 Period that do not overlap + * both temporally and spatially, to be related i,e. they do not share any spatio-temporal + * extent. This property does not imply any ordering or sequence between the + * two periods either spatial or temporal.

+ */ + public static final Property P133_is_separated_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P133_is_separated_from"); + + /** + *

This property associates two instances of E7 Activity, where the domain is + * considered as an intentional continuation of the range. A continuation of + * an activity may happen when the continued activity is still ongoing or after + * the continued activity has completely ended. The continuing activity may have + * started already before it decided to continue the other one. Continuation + * implies a coherence of intentions and outcomes of the involved activities.

+ */ + public static final Property P134_continued = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P134_continued"); + + public static final Property P134i_was_continued_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P134i_was_continued_by"); + + /** + *

This property identifies the E55 Type, which is created in an E83Type Creation + * activity.

+ */ + public static final Property P135_created_type = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P135_created_type"); + + public static final Property P135i_was_created_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P135i_was_created_by"); + + /** + *

This property identifies one or more items that were used as evidence to declare + * a new E55 Type. The examination of these items is often the only objective + * way to understand the precise characteristics of a new Type. Such items should + * be deposited in a museum or similar institution for that reason. The taxonomic + * role renders the specific relationship of each item to the Type, such as "holotype" + * or "original element".

+ */ + public static final Property P136_was_based_on = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P136_was_based_on"); + + public static final Property P136i_supported_type_creation = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P136i_supported_type_creation"); + + /** + *

This property allows an item to be declared as a particular example of an + * E55 Type or taxon The P137.1 in the taxonomic role property of P137 exemplifies + * (is exemplified by) allows differentiation of taxonomic roles. The taxonomic + * role renders the specific relationship of this example to the Type, such as + * "prototypical", "archetypical", "lectotype", etc. The taxonomic role "lectotype" + * is not associated with the Type Creation (E83) itself, but selected in a later + * phase.

+ */ + public static final Property P137_exemplifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P137_exemplifies"); + + public static final Property P137i_is_exemplified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P137i_is_exemplified_by"); + + /** + *

This property establishes the relationship between an E36 Visual Item and + * the entity that it visually represents. Any entity may be represented visually. + * This property is part of the fully developed path from E24 Physical Man-Made + * Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents + * (has representation) to E1 CRM Entity, which is shortcut by P62depicts (is + * depicted by). P138.1 mode of representation allows the nature of the representation + * to be refined. This property is also used for the relationship between an + * original and a digitisation of the original by the use of techniques such + * as digital photography, flatbed or infrared scanning. Digitisation is here + * seen as a process with a mechanical, causal component rendering the spatial + * distribution of structural and optical properties of the original and does + * not necessarily include any visual similarity identifiable by human observation.

+ */ + public static final Property P138_represents = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P138_represents"); + + public static final Property P138i_has_representation = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P138i_has_representation"); + + /** + *

This property establishes a relationship of equivalence between two instances + * of E41 Appellation independent from any item identified by them. It is a dynamic + * asymmetric relationship, where the range expresses the derivative, if such + * a direction can be established. Otherwise, the relationship is symmetric. + * The relationship is not transitive. The equivalence applies to all cases of + * use of an instance of E41 Appellation. Multiple names assigned to an object, + * which are not equivalent for all things identified with a specific instance + * of E41 Appellation, should be modelled as repeated values of P1 is identified + * by (identifies). P139.1 has type allows the type of derivation, such as “transliteration + * from Latin 1 to ASCII” be refined..

+ */ + public static final Property P139_has_alternative_form = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P139_has_alternative_form"); + + /** + *

This property allows specific instances of E18 Physical Thing that have been + * destroyed to be related to a destruction event. Destruction implies the end + * of an item’s life as a subject of cultural documentation – the physical matter + * of which the item was composed may in fact continue to exist. A destruction + * event may be contiguous with a Production that brings into existence a derived + * object composed partly of matter from the destroyed object.

+ */ + public static final Property P13_destroyed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P13_destroyed"); + + public static final Property P13i_was_destroyed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P13i_was_destroyed_by"); + + /** + *

This property indicates the item to which an attribute or relation is assigned.

+ */ + public static final Property P140_assigned_attribute_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P140_assigned_attribute_to"); + + public static final Property P140i_was_attributed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P140i_was_attributed_by"); + + /** + *

This property indicates the attribute that was assigned or the item that was + * related to the item denoted by a property P140 assigned attribute to in an + * Attribute assignment action.

+ */ + public static final Property P141_assigned = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P141_assigned"); + + public static final Property P141i_was_assigned_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P141i_was_assigned_by"); + + /** + *

This property associates the event of assigning an instance of E42 Identifier + * to an entity, with the instances of E41 Appellation that were used as elements + * of the identifier.

+ */ + public static final Property P142_used_constituent = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P142_used_constituent"); + + public static final Property P142i_was_used_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P142i_was_used_in"); + + /** + *

This property identifies the instance of E39 Actor that becomes member of + * a E74 Group in an E85 Joining. Joining events allow for describing people + * becoming members of a group with a more detailed path from E74 Group through + * P144 joined with (gained member by), E85 Joining, P143 joined (was joined + * by) to E39 Actor, compared to the shortcut offered by P107 has current or + * former member (is current or former member of).

+ */ + public static final Property P143_joined = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P143_joined"); + + public static final Property P143i_was_joined_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P143i_was_joined_by"); + + /** + *

This property identifies the instance of E74 Group of which an instance of + * E39 Actor becomes a member through an instance of E85 Joining. Although a + * Joining activity normally concerns only one instance of E74 Group, it is possible + * to imagine circumstances under which becoming member of one Group implies + * becoming member of another Group as well. Joining events allow for describing + * people becoming members of a group with a more detailed path from E74 Group + * through P144 joined with (gained member by), E85 Joining, P143 joined (was + * joined by) to E39 Actor, compared to the shortcut offered by P107 has current + * or former member (is current or former member of). The property P144.1 kind + * of member can be used to specify the type of membership or the role the member + * has in the group.

+ */ + public static final Property P144_joined_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P144_joined_with"); + + public static final Property P144i_gained_member_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P144i_gained_member_by"); + + /** + *

This property identifies the instance of E39 Actor that leaves an instance + * of E74 Group through an instance of E86 Leaving.

+ */ + public static final Property P145_separated = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P145_separated"); + + public static final Property P145i_left_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P145i_left_by"); + + /** + *

This property identifies the instance of E74 Group an instance of E39 Actor + * leaves through an instance of E86 Leaving. Although a Leaving activity normally + * concerns only one instance of E74 Group, it is possible to imagine circumstances + * under which leaving one E74 Group implies leaving another E74 Group as well.

+ */ + public static final Property P146_separated_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P146_separated_from"); + + public static final Property P146i_lost_member_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P146i_lost_member_by"); + + /** + *

This property associates an instance of E87 Curation Activity with the instance + * of E78 Collection that is subject of that curation activity.

+ */ + public static final Property P147_curated = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P147_curated"); + + public static final Property P147i_was_curated_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P147i_was_curated_by"); + + /** + *

This property associates an instance of E89 Propositional Object with a structural + * part of it that is by itself an instance of E89 Propositional Object.

+ */ + public static final Property P148_has_component = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P148_has_component"); + + public static final Property P148i_is_component_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P148i_is_component_of"); + + /** + *

This property identifies an instance of E28 Conceptual Object using an instance + * of E75 Conceptual Object Appellation.

+ */ + public static final Property P149_is_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P149_is_identified_by"); + + public static final Property P149i_identifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P149i_identifies"); + + /** + *

This property describes the active participation of an E39 Actor in an E7 + * Activity. It implies causal or legal responsibility. The P14.1 in the role + * of property of the property allows the nature of an Actor’s participation + * to be specified.

+ */ + public static final Property P14_carried_out_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P14_carried_out_by"); + + public static final Property P14i_performed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P14i_performed"); + + /** + *

The property "broaderPartitive" associates an instance of E55 Type “A” with + * an instance of E55 Type “B”, when items of type “A” typically form part of + * items of type “B”, such as “car motors” and “cars”. It allows Types to be + * organised into hierarchies. This is the sense of "broader term partitive (BTP)" + * as defined in ISO 2788 and “broaderPartitive” in SKOS.

+ */ + public static final Property P150_defines_typical_parts_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P150_defines_typical_parts_of"); + + public static final Property P150i_defines_typical_wholes_for = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P150i_defines_typical_wholes_for"); + + /** + *

This property associates an instance of E66 Formation with an instance of + * E74 Group from which the new group was formed preserving a sense of continuity + * such as in mission, membership or tradition.

+ */ + public static final Property P151_was_formed_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P151_was_formed_from"); + + public static final Property P151i_participated_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P151i_participated_in"); + + /** + *

This property associates an instance of E21 Person with another instance of + * E21 Person who plays the role of the first instance’s parent, regardless of + * whether the relationship is biological parenthood, assumed or pretended biological + * parenthood or an equivalent legal status of rights and obligations obtained + * by a social or legal act. This property is, among others, a shortcut of the + * fully developed paths from ‘E21Person’ through ‘P98i was born’, ‘E67 Birth’, + * ‘P96 by mother’ to ‘E21 Person’, and from ‘E21Person’ through ‘P98i was born’, + * ‘E67 Birth’, ‘P97 from father’ to ‘E21 Person’.

+ */ + public static final Property P152_has_parent = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P152_has_parent"); + + public static final Property P152i_is_parent_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P152i_is_parent_of"); + + /** + *

This property describes the largest volume in space that an instance of E18 + * Physical Thing has occupied at any time during its existence, with respect + * to the reference space relative to itself. This allows you to describe the + * thing itself as a place that may contain other things, such as a box that + * may contain coins. In other words, it is the volume that contains all the + * points which the thing has covered at some time during its existence. In the + * case of an E26 Physical Feature the default reference space is the one in + * which the object that bears the feature or at least the surrounding matter + * of the feature is at rest. In this case there is a 1:1 relation of E26 Feature + * and E53 Place. For simplicity of implementation multiple inheritance (E26 + * Feature IsA E53 Place) may be a practical approach. For instances of E19 Physical + * Objects the default reference space is the one which is at rest to the object + * itself, i.e. which moves together with the object. We include in the occupied + * space the space filled by the matter of the physical thing and all its inner + * spaces. This property is a subproperty of P161 has spatial projection because + * it refers to its own domain as reference space for its range, whereas P161 + * has spatial projection may refer to a place in terms of any reference space. + * For some instances of E18 Physical Object the relative stability of form may + * not be sufficient to define a useful local reference space, for instance for + * an amoeba. In such cases the fully developed path to an external reference + * space and using a temporal validity component may be adequate to determine + * the place they have occupied. In contrast to P156 occupies, the property P53 + * has former or current location identifies an instance of E53 Place at which + * a thing is or has been for some unspecified time span. Further it does not + * constrain the reference space of the referred instance of P53 Place.

+ */ + public static final Property P156_occupies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P156_occupies"); + + public static final Property P156i_is_occupied_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P156i_is_occupied_by"); + + /** + *

This property associates an instance of P53 Place with the instance of E18 + * Physical Thing that determines a reference space for this instance of P53 + * Place by being at rest with respect to this reference space. The relative + * stability of form of an E18 Physical Thing defines its default reference space. + * The reference space is not spatially limited to the referred thing. For example, + * a ship determines a reference space in terms of which other ships in its neighbourhood + * may be described. Larger constellations of matter, such as continental plates, + * may comprise many physical features that are at rest with them and define + * the same reference space.

+ */ + public static final Property P157_is_at_rest_relative_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P157_is_at_rest_relative_to"); + + public static final Property P157i_provides_reference_space_for = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P157i_provides_reference_space_for"); + + /** + *

This is a high level property, which captures the relationship between an + * E7 Activity and anything that may have had some bearing upon it. The property + * has more specific sub properties.

+ */ + public static final Property P15_was_influenced_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P15_was_influenced_by"); + + public static final Property P15i_influenced = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P15i_influenced"); + + /** + *

This property describes the temporal projection of an instance of an E92 Spacetime + * Volume. The property P4 has time-span is the same as P160 has temporal projection + * if it is used to document an instance of E4 Period or any subclass of it.

+ */ + public static final Property P160_has_temporal_projection = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P160_has_temporal_projection"); + + public static final Property P160i_is_temporal_projection_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P160i_is_temporal_projection_of"); + + /** + *

This property associates an instance of a E92 Spacetime Volume with an instance + * of E53 Place that is the result of the spatial projection of the instance + * of a E92 Spacetime Volume on a reference space. In general there can be more + * than one useful reference space to describe the spatial projection of a spacetime + * volume, such as that of a battle ship versus that of the seafloor. Therefore + * the projection is not unique. This is part of the fully developed path that + * is shortcut by P7took place at (witnessed).The more fully developed path from + * E4 Period through P161 has spatial projection, E53 Place, P89 falls within + * (contains) to E53 Place.

+ */ + public static final Property P161_has_spatial_projection = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P161_has_spatial_projection"); + + public static final Property P161i_is_spatial_projection_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P161i_is_spatial_projection_of"); + + /** + *

This property relates an E93 Presence with an arbitrary E52 Time-Span that + * defines the section of the spacetime volume that this instance of E93 Presence + * is related to by P166 was a presence of (had presence) that is concerned by + * this instance of E93 Presence.

+ */ + public static final Property P164_during = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P164_during"); + + public static final Property P164i_was_time_span_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P164i_was_time-span_of"); + + /** + *

This property associates an instance of E73 Information Object with an instance + * of E90 Symbolic Object (or any of its subclasses) that was included in it. + * This property makes it possible to recognise the autonomous status of the + * incorporated signs, which were created in a distinct context, and can be incorporated + * in many distinct self-contained expressions, and to highlight the difference + * between structural and accidental whole-part relationships between conceptual + * entities. It accounts for many cultural facts that are quite frequent and + * significant: the inclusion of a poem in an anthology, the re-use of an operatic + * aria in a new opera, the use of a reproduction of a painting for a book cover + * or a CD booklet, the integration of textual quotations, the presence of lyrics + * in a song that sets those lyrics to music, the presence of the text of a play + * in a movie based on that play, etc. In particular, this property allows for + * modelling relationships of different levels of symbolic specificity, such + * as the natural language words making up a particular text, the characters + * making up the words and punctuation, the choice of fonts and page layout for + * the characters. A digital photograph of a manuscript page incorporates the + * text of the manuscript page.

+ */ + public static final Property P165_incorporates = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P165_incorporates"); + + public static final Property P165i_is_incorporated_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P165i_is_incorporated_in"); + + /** + *

This property relates an E93 Presence with the STV it is part of…

+ */ + public static final Property P166_was_a_presence_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P166_was_a_presence_of"); + + public static final Property P166i_had_presence = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P166i_had_presence"); + + /** + *

This property points to a wider area in which my thing /event was…

+ */ + public static final Property P167_was_at = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P167_was_at"); + + public static final Property P167i_was_place_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P167i_was_place_of"); + + /** + *

This property associates an instance of E53 Place with an instance of E94 + * Space Primitive that defines it. Syntactic variants or use of different scripts + * may result in multiple instances of E94 Space Primitive defining exactly the + * same place. Transformations between different reference systems in general + * result in new definitions of places approximating each other and not in alternative + * definitions. Note that it is possible for a place to be defined by phenomena + * causal to it or other forms of identification rather than by an instance of + * E94 Space Primitive. In this case, this property must not be used for approximating + * the respective instance of E53 Place with an instance of E94 Space Primitive.

+ */ + public static final Property P168_place_is_defined_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P168_place_is_defined_by"); + + /** + *

This property describes the use of material or immaterial things in a way + * essential to the performance or the outcome of an E7 Activity. This property + * typically applies to tools, instruments, moulds, raw materials and items embedded + * in a product. It implies that the presence of the object in question was a + * necessary condition for the action. For example, the activity of writing this + * text required the use of a computer. An immaterial thing can be used if at + * least one of its carriers is present. For example, the software tools on a + * computer. Another example is the use of a particular name by a particular + * group of people over some span to identify a thing, such as a settlement. + * In this case, the physical carriers of this name are at least the people understanding + * its use.

+ */ + public static final Property P16_used_specific_object = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P16_used_specific_object"); + + public static final Property P16i_was_used_for = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P16i_was_used_for"); + + /** + *

This property describes an item or items that are regarded as a reason for + * carrying out the E7 Activity. For example, the discovery of a large hoard + * of treasure may call for a celebration, an order from head quarters can start + * a military manoeuvre.

+ */ + public static final Property P17_was_motivated_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P17_was_motivated_by"); + + public static final Property P17i_motivated = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P17i_motivated"); + + /** + *

This property relates an E7 Activity with objects created specifically for + * use in the activity. This is distinct from the intended use of an item in + * some general type of activity such as the book of common prayer which was + * intended for use in Church of England services (see P101 had as general use + * (was use of)).

+ */ + public static final Property P19_was_intended_use_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P19_was_intended_use_of"); + + public static final Property P19i_was_made_for = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P19i_was_made_for"); + + /** + *

This property describes the naming or identification of any real world item + * by a name or any other identifier. This property is intended for identifiers + * in general use, which form part of the world the model intends to describe, + * and not merely for internal database identifiers which are specific to a technical + * system, unless these latter also have a more general use outside the technical + * context. This property includes in particular identification by mathematical + * expressions such as coordinate systems used for the identification of instances + * of E53 Place. The property does not reveal anything about when, where and + * by whom this identifier was used. A more detailed representation can be made + * using the fully developed (i.e. indirect) path through E15 Identifier Assignment.

+ */ + public static final Property P1_is_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P1_is_identified_by"); + + public static final Property P1i_identifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P1i_identifies"); + + /** + *

This property identifies the relationship between a preparatory activity and + * the event it is intended to be preparation for. This includes activities, + * orders and other organisational actions, taken in preparation for other activities + * or events. P20 had specific purpose (was purpose of) implies that an activity + * succeeded in achieving its aim. If it does not succeed, such as the setting + * of a trap that did not catch anything, one may document the unrealized intention + * using P21 had general purpose (was purpose of):E55 Type and/or P33 used specific + * technique (was used by): E29 Design or Procedure.

+ */ + public static final Property P20_had_specific_purpose = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P20_had_specific_purpose"); + + public static final Property P20i_was_purpose_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P20i_was_purpose_of"); + + /** + *

This property describes an intentional relationship between an E7 Activity + * and some general goal or purpose. This may involve activities intended as + * preparation for some type of activity or event. P21had general purpose (was + * purpose of) differs from P20 had specific purpose (was purpose of) in that + * no occurrence of an event is implied as the purpose.

+ */ + public static final Property P21_had_general_purpose = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P21_had_general_purpose"); + + public static final Property P21i_was_purpose_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P21i_was_purpose_of"); + + /** + *

This property identifies the E39 Actor that acquires the legal ownership of + * an object as a result of an E8 Acquisition. The property will typically describe + * an Actor purchasing or otherwise acquiring an object from another Actor. However, + * title may also be acquired, without any corresponding loss of title by another + * Actor, through legal fieldwork such as hunting, shooting or fishing. In reality + * the title is either transferred to or from someone, or both.

+ */ + public static final Property P22_transferred_title_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P22_transferred_title_to"); + + public static final Property P22i_acquired_title_through = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P22i_acquired_title_through"); + + /** + *

This property identifies the E39 Actor or Actors who relinquish legal ownership + * as the result of an E8 Acquisition. The property will typically be used to + * describe a person donating or selling an object to a museum. In reality title + * is either transferred to or from someone, or both.

+ */ + public static final Property P23_transferred_title_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P23_transferred_title_from"); + + public static final Property P23i_surrendered_title_through = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P23i_surrendered_title_through"); + + /** + *

This property identifies the E18 Physical Thing or things involved in an E8 + * Acquisition. In reality, an acquisition must refer to at least one transferred + * item.

+ */ + public static final Property P24_transferred_title_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P24_transferred_title_of"); + + public static final Property P24i_changed_ownership_through = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P24i_changed_ownership_through"); + + /** + *

This property identifies an instance of E19 Physical Object that was moved + * by a move event. A move must concern at least one object. The property implies + * the object's passive participation. For example, Monet's painting "Impression + * sunrise" was moved for the first Impressionist exhibition in 1874.

+ */ + public static final Property P25_moved = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P25_moved"); + + public static final Property P25i_moved_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P25i_moved_by"); + + /** + *

This property identifies a destination of a E9 Move. A move will be linked + * to a destination, such as the move of an artefact from storage to display. + * A move may be linked to many terminal instances of E53 Place by multiple instances + * of this property. In this case the move describes a distribution of a set + * of objects. The area of the move includes the origin(s), route and destination(s). + * Therefore the described destination is an instance of E53 Place which P89 + * falls within (contains) the instance of E53 Place the move P7 took place at.

+ */ + public static final Property P26_moved_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P26_moved_to"); + + public static final Property P26i_was_destination_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P26i_was_destination_of"); + + /** + *

This property identifies a starting E53 Place of an E9 Move. A move will be + * linked to an origin, such as the move of an artefact from storage to display. + * A move may be linked to many starting instances of E53 Place by multiple instances + * of this property. In this case the move describes the picking up of a set + * of objects. The area of the move includes the origin(s), route and destination(s). + * Therefore the described origin is an instance of E53 Place which P89 falls + * within (contains) the instance of E53 Place the move P7 took place at.

+ */ + public static final Property P27_moved_from = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P27_moved_from"); + + public static final Property P27i_was_origin_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P27i_was_origin_of"); + + /** + *

This property identifies the E39 Actor or Actors who surrender custody of + * an instance of E18 Physical Thing in an E10 Transfer of Custody activity. + * The property will typically describe an Actor surrendering custody of an object + * when it is handed over to someone else’s care. On occasion, physical custody + * may be surrendered involuntarily – through accident, loss or theft. In reality, + * custody is either transferred to someone or from someone, or both.

+ */ + public static final Property P28_custody_surrendered_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P28_custody_surrendered_by"); + + public static final Property P28i_surrendered_custody_through = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P28i_surrendered_custody_through"); + + /** + *

This property identifies the E39 Actor or Actors who receive custody of an + * instance of E18 Physical Thing in an E10 Transfer of Custody activity. The + * property will typically describe Actors receiving custody of an object when + * it is handed over from another Actor’s care. On occasion, physical custody + * may be received involuntarily or illegally – through accident, unsolicited + * donation, or theft. In reality, custody is either transferred to someone or + * from someone, or both.

+ */ + public static final Property P29_custody_received_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P29_custody_received_by"); + + public static final Property P29i_received_custody_through = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P29i_received_custody_through"); + + /** + *

This property allows sub typing of CRM entities - a form of specialisation + * – through the use of a terminological hierarchy, or thesaurus. The CRM is + * intended to focus on the high-level entities and relationships needed to describe + * data structures. Consequently, it does not specialise entities any further + * than is required for this immediate purpose. However, entities in the isA + * hierarchy of the CRM may by specialised into any number of sub entities, which + * can be defined in the E55 Type hierarchy. E51 Contact Point, for example, + * may be specialised into “e-mail address”, “telephone number”, “post office + * box”, “URL” etc. none of which figures explicitly in the CRM hierarchy. Sub + * typing obviously requires consistency between the meaning of the terms assigned + * and the more general intent of the CRM entity in question.

+ */ + public static final Property P2_has_type = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P2_has_type"); + + public static final Property P2i_is_type_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P2i_is_type_of"); + + /** + *

This property identifies an item or items of E18 Physical Thing concerned + * in an E10 Transfer of Custody activity. The property will typically describe + * the object that is handed over by an E39 Actor to another Actor’s custody. + * On occasion, physical custody may be transferred involuntarily or illegally + * – through accident, unsolicited donation, or theft.

+ */ + public static final Property P30_transferred_custody_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P30_transferred_custody_of"); + + public static final Property P30i_custody_transferred_through = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P30i_custody_transferred_through"); + + /** + *

This property identifies the E24 Physical Man-Made Thing modified in an E11 + * Modification. If a modification is applied to a non-man-made object, it is + * regarded as an E22 Man-Made Object from that time onwards.

+ */ + public static final Property P31_has_modified = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P31_has_modified"); + + public static final Property P31i_was_modified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P31i_was_modified_by"); + + /** + *

This property identifies the technique or method that was employed in an activity. + * These techniques should be drawn from an external E55 Type hierarchy of consistent + * terminology of general techniques or methods such as embroidery, oil-painting, + * carbon dating, etc. Specific documented techniques should be described as + * instances of E29 Design or Procedure. This property identifies the technique + * that was employed in an act of modification.

+ */ + public static final Property P32_used_general_technique = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P32_used_general_technique"); + + public static final Property P32i_was_technique_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P32i_was_technique_of"); + + /** + *

This property identifies a specific instance of E29 Design or Procedure in + * order to carry out an instance of E7 Activity or parts of it. The property + * differs from P32 used general technique (was technique of) in that P33 refers + * to an instance of E29 Design or Procedure, which is a concrete information + * object in its own right rather than simply being a term or a method known + * by tradition. Typical examples would include intervention plans for conservation + * or the construction plans of a building.

+ */ + public static final Property P33_used_specific_technique = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P33_used_specific_technique"); + + public static final Property P33i_was_used_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P33i_was_used_by"); + + /** + *

This property identifies the E18 Physical Thing that was assessed during an + * E14 Condition Assessment activity. Conditions may be assessed either by direct + * observation or using recorded evidence. In the latter case the E18 Physical + * Thing does not need to be present or extant.

+ */ + public static final Property P34_concerned = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P34_concerned"); + + public static final Property P34i_was_assessed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P34i_was_assessed_by"); + + /** + *

This property identifies the E3 Condition State that was observed in an E14 + * Condition Assessment activity.

+ */ + public static final Property P35_has_identified = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P35_has_identified"); + + public static final Property P35i_was_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P35i_was_identified_by"); + + /** + *

This property records the identifier that was assigned to an item in an Identifier + * Assignment activity. The same identifier may be assigned on more than one + * occasion. An Identifier might be created prior to an assignment.

+ */ + public static final Property P37_assigned = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P37_assigned"); + + public static final Property P37i_was_assigned_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P37i_was_assigned_by"); + + /** + *

This property records the identifier that was deassigned from an instance + * of E1 CRM Entity. Deassignment of an identifier may be necessary when an item + * is taken out of an inventory, a new numbering system is introduced or items + * are merged or split up. The same identifier may be deassigned on more than + * one occasion.

+ */ + public static final Property P38_deassigned = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P38_deassigned"); + + public static final Property P38i_was_deassigned_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P38i_was_deassigned_by"); + + /** + *

This property associates an instance of E16 Measurement with the instance + * of E1 CRM Entity to which it applied. An instance of E1 CRM Entity may be + * measured more than once. Material and immaterial things and processes may + * be measured, e.g. the number of words in a text, or the duration of an event.

+ */ + public static final Property P39_measured = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P39_measured"); + + public static final Property P39i_was_measured_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P39i_was_measured_by"); + + /** + *

This property is a container for all informal descriptions about an object + * that have not been expressed in terms of CRM constructs. In particular it + * captures the characterisation of the item itself, its internal structures, + * appearance etc. Like property P2 has type (is type of), this property is a + * consequence of the restricted focus of the CRM. The aim is not to capture, + * in a structured form, everything that can be said about an item; indeed, the + * CRM formalism is not regarded as sufficient to express everything that can + * be said. Good practice requires use of distinct note fields for different + * aspects of a characterisation. The P3.1 has type property of P3 has note allows + * differentiation of specific notes, e.g. “construction”, “decoration” etc. + * An item may have many notes, but a note is attached to a specific item.

+ */ + public static final Property P3_has_note = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P3_has_note"); + + /** + *

This property records the dimension that was observed in an E16 Measurement + * Event. E54 Dimension can be any quantifiable aspect of E70 Thing. Weight, + * image colour depth and monetary value are dimensions in this sense. One measurement + * activity may determine more than one dimension of one object. Dimensions may + * be determined either by direct observation or using recorded evidence. In + * the latter case the measured Thing does not need to be present or extant. + * Even though knowledge of the value of a dimension requires measurement, the + * dimension may be an object of discourse prior to, or even without, any measurement + * being made.

+ */ + public static final Property P40_observed_dimension = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P40_observed_dimension"); + + public static final Property P40i_was_observed_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P40i_was_observed_in"); + + /** + *

This property records the item to which a type was assigned in an E17 Type + * Assignment activity. Any instance of a CRM entity may be assigned a type through + * type assignment. Type assignment events allow a more detailed path from E1 + * CRM Entity through P41 classified (was classified), E17 Type Assignment, P42 + * assigned (was assigned by) to E55 Type for assigning types to objects compared + * to the shortcut offered by P2 has type (is type of).

+ */ + public static final Property P41_classified = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P41_classified"); + + public static final Property P41i_was_classified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P41i_was_classified_by"); + + /** + *

This property records the type that was assigned to an entity by an E17 Type + * Assignment activity. Type assignment events allow a more detailed path from + * E1 CRM Entity through P41 classified (was classified by), E17 Type Assignment, + * P42 assigned (was assigned by) to E55 Type for assigning types to objects + * compared to the shortcut offered by P2 has type (is type of). For example, + * a fragment of an antique vessel could be assigned the type “attic red figured + * belly handled amphora” by expert A. The same fragment could be assigned the + * type “shoulder handled amphora” by expert B. A Type may be intellectually + * constructed independent from assigning an instance of it.

+ */ + public static final Property P42_assigned = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P42_assigned"); + + public static final Property P42i_was_assigned_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P42i_was_assigned_by"); + + /** + *

This property records a E54 Dimension of some E70 Thing. It is a shortcut + * of the more fully developed path from E70 Thing through P39 measured (was + * measured by), E16 Measurement P40 observed dimension (was observed in) to + * E54 Dimension. It offers no information about how and when an E54 Dimension + * was established, nor by whom. An instance of E54 Dimension is specific to + * an instance of E70 Thing.

+ */ + public static final Property P43_has_dimension = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P43_has_dimension"); + + public static final Property P43i_is_dimension_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P43i_is_dimension_of"); + + /** + *

This property records an E3 Condition State for some E18 Physical Thing. It + * is a shortcut of the more fully developed path from E18 Physical Thing through + * P34 concerned (was assessed by), E14 Condition Assessment P35 has identified + * (was identified by) to E3 Condition State. It offers no information about + * how and when the E3 Condition State was established, nor by whom. An instance + * of Condition State is specific to an instance of Physical Thing.

+ */ + public static final Property P44_has_condition = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P44_has_condition"); + + public static final Property P44i_is_condition_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P44i_is_condition_of"); + + /** + *

This property identifies the instances of E57 Materials of which an instance + * of E18 Physical Thing is composed. All physical things consist of physical + * materials. P45 consists of (is incorporated in) allows the different Materials + * to be recorded. P45 consists of (is incorporated in) refers here to observed + * Material as opposed to the consumed raw material. A Material, such as a theoretical + * alloy, may not have any physical instances

+ */ + public static final Property P45_consists_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P45_consists_of"); + + public static final Property P45i_is_incorporated_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P45i_is_incorporated_in"); + + /** + *

This property allows instances of E18 Physical Thing to be analysed into component + * elements. Component elements, since they are themselves instances of E18 Physical + * Thing, may be further analysed into sub-components, thereby creating a hierarchy + * of part decomposition. An instance of E18 Physical Thing may be shared between + * multiple wholes, for example two buildings may share a common wall. This property + * does not specify when and for how long a component element resided in the + * respective whole. If a component is not part of a whole from the beginning + * of existence or until the end of existence of the whole, the classes E79 Part + * Addition and E90 Part Removal can be used to document when a component became + * part of a particular whole and/or when it stopped being a part of it. For + * the time-span of being part of the respective whole, the component is completely + * contained in the place the whole occupies. This property is intended to describe + * specific components that are individually documented, rather than general + * aspects. Overall descriptions of the structure of an instance of E18 Physical + * Thing are captured by the P3 has note property. The instances of E57 Material + * of which an item of E18 Physical Thing is composed should be documented using + * P45 consists of (is incorporated in).

+ */ + public static final Property P46_is_composed_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P46_is_composed_of"); + + public static final Property P46i_forms_part_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P46i_forms_part_of"); + + /** + *

This property records the preferred E42 Identifier that was used to identify + * an instance of E1 CRM Entity at the time this property was recorded. More + * than one preferred identifier may have been assigned to an item over time. + * Use of this property requires an external mechanism for assigning temporal + * validity to the respective CRM instance. P48 has preferred identifier (is + * preferred identifier of), is a shortcut for the path from E1 CRM Entity through + * P140 assigned attribute to (was attributed by), E15 Identifier Assignment, + * P37 assigned (was assigned by) to E42 Identifier. The fact that an identifier + * is a preferred one for an organisation can be better expressed in a context + * independent form by assigning a suitable E55 Type to the respective instance + * of E15 Identifier Assignment using the P2 has type property.

+ */ + public static final Property P48_has_preferred_identifier = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P48_has_preferred_identifier"); + + public static final Property P48i_is_preferred_identifier_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P48i_is_preferred_identifier_of"); + + /** + *

This property identifies the E39 Actor or Actors who have or have had custody + * of an instance of E18 Physical Thing at some time. The distinction with P50 + * has current keeper (is current keeper of) is that P49 has former or current + * keeper (is former or current keeper of) leaves open the question as to whether + * the specified keepers are current. P49 has former or current keeper (is former + * or current keeper of) is a shortcut for the more detailed path from E18 Physical + * Thing through P30 transferred custody of (custody transferred through), E10 + * Transfer of Custody, P28 custody surrendered by (surrendered custody through) + * or P29 custody received by (received custody through) to E39 Actor.

+ */ + public static final Property P49_has_former_or_current_keeper = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P49_has_former_or_current_keeper"); + + public static final Property P49i_is_former_or_current_keeper_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P49i_is_former_or_current_keeper_of"); + + /** + *

This property describes the temporal confinement of an instance of an E2 Temporal + * Entity. The related E52 Time-Span is understood as the real Time-Span during + * which the phenomena were active, which make up the temporal entity instance. + * It does not convey any other meaning than a positioning on the “time-line” + * of chronology. The Time-Span in turn is approximated by a set of dates (E61 + * Time Primitive). A temporal entity can have in reality only one Time-Span, + * but there may exist alternative opinions about it, which we would express + * by assigning multiple Time-Spans. Related temporal entities may share a Time-Span. + * Time-Spans may have completely unknown dates but other descriptions by which + * we can infer knowledge.

+ */ + public static final Property P4_has_time_span = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P4_has_time-span"); + + public static final Property P4i_is_time_span_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P4i_is_time-span_of"); + + /** + *

This property identifies the E39 Actor or Actors who had custody of an instance + * of E18 Physical Thing at the time of validity of the record or database containing + * the statement that uses this property. P50 has current keeper (is current + * keeper of) is a shortcut for the more detailed path from E18 Physical Thing + * through P30 transferred custody of (custody transferred through), E10 Transfer + * of Custody, P29 custody received by (received custody through) to E39 Actor.

+ */ + public static final Property P50_has_current_keeper = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P50_has_current_keeper"); + + public static final Property P50i_is_current_keeper_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P50i_is_current_keeper_of"); + + /** + *

This property identifies the E39 Actor that is or has been the legal owner + * (i.e. title holder) of an instance of E18 Physical Thing at some time. The + * distinction with P52 has current owner (is current owner of) is that P51 has + * former or current owner (is former or current owner of) does not indicate + * whether the specified owners are current. P51 has former or current owner + * (is former or current owner of) is a shortcut for the more detailed path from + * E18 Physical Thing through P24 transferred title of (changed ownership through), + * E8 Acquisition, P23 transferred title from (surrendered title through), or + * P22 transferred title to (acquired title through) to E39 Actor.

+ */ + public static final Property P51_has_former_or_current_owner = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P51_has_former_or_current_owner"); + + public static final Property P51i_is_former_or_current_owner_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P51i_is_former_or_current_owner_of"); + + /** + *

This property identifies the E21 Person, E74 Group or E40 Legal Body that + * was the owner of an instance of E18 Physical Thing at the time of validity + * of the record or database containing the statement that uses this property. + * P52 has current owner (is current owner of) is a shortcut for the more detailed + * path from E18 Physical Thing through P24 transferred title of (changed ownership + * through), E8 Acquisition, P22 transferred title to (acquired title through) + * to E39 Actor, if and only if this acquisition event is the most recent.

+ */ + public static final Property P52_has_current_owner = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P52_has_current_owner"); + + public static final Property P52i_is_current_owner_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P52i_is_current_owner_of"); + + /** + *

This property allows an instance of E53 Place to be associated as the former + * or current location of an instance of E18 Physical Thing. In the case of E19 + * Physical Objects, the property does not allow any indication of the Time-Span + * during which the Physical Object was located at this Place, nor if this is + * the current location. In the case of immobile objects, the Place would normally + * correspond to the Place of creation. P53 has former or current location (is + * former or current location of) is a shortcut. A more detailed representation + * can make use of the fully developed (i.e. indirect) path from E19 Physical + * Object through P25 moved (moved by), E9 Move, P26 moved to (was destination + * of) or P27 moved from (was origin of) to E53 Place.

+ */ + public static final Property P53_has_former_or_current_location = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P53_has_former_or_current_location"); + + public static final Property P53i_is_former_or_current_location_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P53i_is_former_or_current_location_of"); + + /** + *

This property records the foreseen permanent location of an instance of E19 + * Physical Object at the time of validity of the record or database containing + * the statement that uses this property. P54 has current permanent location + * (is current permanent location of) is similar to P55 has current location + * (currently holds). However, it indicates the E53 Place currently reserved + * for an object, such as the permanent storage location or a permanent exhibit + * location. The object may be temporarily removed from the permanent location, + * for example when used in temporary exhibitions or loaned to another institution. + * The object may never actually be located at its permanent location.

+ */ + public static final Property P54_has_current_permanent_location = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P54_has_current_permanent_location"); + + public static final Property P54i_is_current_permanent_location_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P54i_is_current_permanent_location_of"); + + /** + *

This property records the location of an E19 Physical Object at the time of + * validity of the record or database containing the statement that uses this + * property. This property is a specialisation of P53 has former or current location + * (is former or current location of). It indicates that the E53 Place associated + * with the E19 Physical Object is the current location of the object. The property + * does not allow any indication of how long the Object has been at the current + * location. P55 has current location (currently holds) is a shortcut. A more + * detailed representation can make use of the fully developed (i.e. indirect) + * path from E19 Physical Object through P25 moved (moved by), E9 Move P26 moved + * to (was destination of) to E53 Place if and only if this Move is the most + * recent.

+ */ + public static final Property P55_has_current_location = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P55_has_current_location"); + + public static final Property P55i_currently_holds = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P55i_currently_holds"); + + /** + *

This property links an instance of E19 Physical Object to an instance of E26 + * Physical Feature that it bears. An E26 Physical Feature can only exist on + * one object. One object may bear more than one E26 Physical Feature. An E27 + * Site should be considered as an E26 Physical Feature on the surface of the + * Earth. An instance B of E26 Physical Feature being a detail of the structure + * of another instance A of E26 Physical Feature can be linked to B by use of + * the property P46 is composed of (forms part of). This implies that the subfeature + * B is P56i found on the same E19 Physical Object as A. P56 bears feature (is + * found on) is a shortcut. A more detailed representation can make use of the + * fully developed (i.e. indirect) path from E19 Physical Object through P59 + * has section (is located on or Definition of the CIDOC Conceptual Reference + * Model 149 within), E53 Place, P53 has former or current location (is former + * or current location of) to E26 Physical Feature.

+ */ + public static final Property P56_bears_feature = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P56_bears_feature"); + + public static final Property P56i_is_found_on = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P56i_is_found_on"); + + /** + *

This property documents the E60 Number of parts of which an instance of E19 + * Physical Object is composed. This may be used as a method of checking inventory + * counts with regard to aggregate or collective objects. What constitutes a + * part or component depends on the context and requirements of the documentation. + * Normally, the parts documented in this way would not be considered as worthy + * of individual attention. For a more complete description, objects may be decomposed + * into their components and constituents using P46 is composed of (forms parts + * of) and P45 consists of (is incorporated in). This allows each element to + * be described individually.

+ */ + public static final Property P57_has_number_of_parts = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P57_has_number_of_parts"); + + /** + *

This property links an area (section) named by a E46 Section Definition to + * the instance of E18 Physical Thing upon which it is found. The CRM handles + * sections as locations (instances of E53 Place) within or on E18 Physical Thing + * that are identified by E46 Section Definitions. Sections need not be discrete + * and separable components or parts of an object. This is part of a more developed + * path from E18 Physical Thing through P58, E46 Section Definition, P87 is identified + * by (identifies) that allows a more precise definition of a location found + * on an object than the shortcut P59 has section (is located on or within). + * A particular instance of a Section Definition only applies to one instance + * of Physical Thing.

+ */ + public static final Property P58_has_section_definition = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P58_has_section_definition"); + + public static final Property P58i_defines_section = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P58i_defines_section"); + + /** + *

This property links an area to the instance of E18 Physical Thing upon which + * it is found. It is typically used when a named E46 Section Definition is not + * appropriate. E18 Physical Thing may be subdivided into arbitrary regions. + * P59 has section (is located on or within) is a shortcut. If the E53 Place + * is identified by a Section Definition, a more detailed representation can + * make use of the fully developed (i.e. indirect) path from E18 Physical Thing + * through P58 has section definition (defines section), E46 Section Definition, + * P87 is identified by (identifies) to E53 Place. A Place can only be located + * on or within one Physical Object.

+ */ + public static final Property P59_has_section = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P59_has_section"); + + public static final Property P59i_is_located_on_or_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P59i_is_located_on_or_within"); + + /** + *

This property describes the decomposition of an E3 Condition State into discrete, + * subsidiary states. It is assumed that the sub-states into which the condition + * state is analysed form a logical whole - although the entire story may not + * be completely known – and that the sub-states are in fact constitutive of + * the general condition state. For example, a general condition state of “in + * ruins” may be decomposed into the individual stages of decay

+ */ + public static final Property P5_consists_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P5_consists_of"); + + public static final Property P5i_forms_part_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P5i_forms_part_of"); + + /** + *

This property identifies something that is depicted by an instance of E24 + * Physical Man-Made Thing. Depicting is meant in the sense that the surface + * of the E24 Physical Man-Made Thing shows, through its passive optical qualities + * or form, a representation of the entity depicted. It does not pertain to inscriptions + * or any other information encoding. This property is a shortcut of the more + * fully developed path from E24 Physical Man-Made Thing through P65 shows visual + * item (is shown by), E36 Visual Item, P138 represents (has representation) + * to E1 CRM Entity. P62.1 mode of depiction allows the nature of the depiction + * to be refined.

+ */ + public static final Property P62_depicts = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P62_depicts"); + + public static final Property P62i_is_depicted_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P62i_is_depicted_by"); + + /** + *

This property documents an E36 Visual Item shown by an instance of E24 Physical + * Man-Made Thing. This property is similar to P62 depicts (is depicted by) in + * that it associates an item of E24 Physical Man-Made Thing with a visual representation. + * However, P65 shows visual item (is shown by) differs from the P62 depicts + * (is depicted by) property in that it makes no claims about what the E36 Visual + * Item is deemed to represent. E36 Visual Item identifies a recognisable image + * or visual symbol, regardless of what this image may or may not represent. + * For example, all recent British coins bear a portrait of Queen Elizabeth II, + * a fact that is correctly documented using P62 depicts (is depicted by). Different + * portraits have been used at different periods, however. P65 shows visual item + * (is shown by) can be used to refer to a particular portrait. P65 shows visual + * item (is shown by) may also be used for Visual Items such as signs, marks + * and symbols, for example the 'Maltese Cross' or the 'copyright symbol’ that + * have no particular representational content. This property is part of the + * fully developed path from E24 Physical Man-Made Thing through P65 shows visual + * item (is shown by), E36 Visual Item, P138 represents (has representation) + * to E1 CRM Entity which is shortcut by, P62 depicts (is depicted by).

+ */ + public static final Property P65_shows_visual_item = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P65_shows_visual_item"); + + public static final Property P65i_is_shown_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P65i_is_shown_by"); + + /** + *

This property documents that an E89 Propositional Object makes a statement + * about an instance of E1 CRM Entity. P67 refers to (is referred to by) has + * the P67.1 has type link to an instance of E55 Type. This is intended to allow + * a more detailed description of the type of reference. This differs from P129 + * is about (is subject of), which describes the primary subject or subjects + * of the E89 Propositional Object.

+ */ + public static final Property P67_refers_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P67_refers_to"); + + public static final Property P67i_is_referred_to_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P67i_is_referred_to_by"); + + /** + *

This property identifies an E57 Material foreseeen to be used by an E29 Design + * or Procedure. E29 Designs and procedures commonly foresee the use of particular + * E57 Materials. The fabrication of adobe bricks, for example, requires straw, + * clay and water. This property enables this to be documented. This property + * is not intended for the documentation of E57 Materials that were used on a + * particular occasion when an instance of E29 Design or Procedure was executed.

+ */ + public static final Property P68_foresees_use_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P68_foresees_use_of"); + + public static final Property P68i_use_foreseen_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P68i_use_foreseen_by"); + + /** + *

This property generalises relationships like whole-part, sequence, prerequisite + * or inspired by between instances of E29 Design or Procedure. Any instance + * of E29 Design or Procedure may be associated with other designs or procedures. + * The property is considered to be symmetrical unless otherwise indicated by + * P69.1 has type. The P69.1 has type property of P69 has association with allows + * the nature of the association to be specified reading from domain to range; + * examples of types of association between instances of E29 Design or Procedure + * include: has part, follows, requires, etc. The property can typically be used + * to model the decomposition of the description of a complete workflow into + * a series of separate procedures.

+ */ + public static final Property P69_is_associated_with = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P69_is_associated_with"); + + /** + *

This property describes the CRM Entities documented by instances of E31 Document. + * Documents may describe any conceivable entity, hence the link to the highest-level + * entity in the CRM hierarchy. This property is intended for cases where a reference + * is regarded as being of a documentary character, in the scholarly or scientific + * sense.

+ */ + public static final Property P70_documents = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P70_documents"); + + public static final Property P70i_is_documented_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P70i_is_documented_in"); + + /** + *

This property documents a source E32 Authority Document for an instance of + * an E1 CRM Entity.

+ */ + public static final Property P71_lists = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P71_lists"); + + public static final Property P71i_is_listed_in = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P71i_is_listed_in"); + + /** + *

This property describes the E56 Language of an E33 Linguistic Object. Linguistic + * Objects are composed in one or more human Languages. This property allows + * these languages to be documented.

+ */ + public static final Property P72_has_language = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P72_has_language"); + + public static final Property P72i_is_language_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P72i_is_language_of"); + + /** + *

This property describes the source and target of instances of E33Linguistic + * Object involved in a translation. When a Linguistic Object is translated into + * a new language it becomes a new Linguistic Object, despite being conceptually + * similar to the source object.

+ */ + public static final Property P73_has_translation = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P73_has_translation"); + + public static final Property P73i_is_translation_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P73i_is_translation_of"); + + /** + *

This property describes the current or former E53 Place of residence of an + * E39 Actor. The residence may be either the Place where the Actor resides, + * or a legally registered address of any kind.

+ */ + public static final Property P74_has_current_or_former_residence = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P74_has_current_or_former_residence"); + + public static final Property P74i_is_current_or_former_residence_of = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P74i_is_current_or_former_residence_of"); + + /** + *

This property identifies former or current instances of E30 Rights held by + * an E39 Actor.

+ */ + public static final Property P75_possesses = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P75_possesses"); + + public static final Property P75i_is_possessed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P75i_is_possessed_by"); + + /** + *

This property identifies an E51 Contact Point of any type that provides access + * to an E39 Actor by any communication method, such as e-mail or fax.

+ */ + public static final Property P76_has_contact_point = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P76_has_contact_point"); + + public static final Property P76i_provides_access_to = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P76i_provides_access_to"); + + /** + *

This property identifies an E52 Time-Span using an E49Time Appellation.

+ */ + public static final Property P78_is_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P78_is_identified_by"); + + public static final Property P78i_identifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P78i_identifies"); + + /** + *

This property qualifies the beginning of an E52 Time-Span in some way. The + * nature of the qualification may be certainty, precision, source etc.

+ */ + public static final Property P79_beginning_is_qualified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P79_beginning_is_qualified_by"); + + /** + *

This property describes the spatial location of an instance of E4 Period. + * The related E53 Place should be seen as an approximation of the geographical + * area within which the phenomena that characterise the period in question occurred. + * P7took place at (witnessed) does not convey any meaning other than spatial + * positioning (generally on the surface of the earth). For example, the period + * "Révolution française" can be said to have taken place in “France”, the “Victorian” + * period, may be said to have taken place in “Britain” and its colonies, as + * well as other parts of Europe and north America. A period can take place at + * multiple locations. It is a shortcut of the more fully developed path from + * E4 Period through P161 has spatial projection, E53 Place, P89 falls within + * (contains) to E53 Place.

+ */ + public static final Property P7_took_place_at = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P7_took_place_at"); + + public static final Property P7i_witnessed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P7i_witnessed"); + + /** + *

This property qualifies the end of an E52 Time-Span in some way. The nature + * of the qualification may be certainty, precision, source etc.

+ */ + public static final Property P80_end_is_qualified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P80_end_is_qualified_by"); + + /** + *

This property describes the minimum period of time covered by an E52 Time-Span. + * Since Time-Spans may not have precisely known temporal extents, the CRM supports + * statements about the minimum and maximum temporal extents of Time-Spans. This + * property allows a Time-Span’s minimum temporal extent (i.e. its inner boundary) + * to be assigned an E61 Time Primitive value. Time Primitives are treated by + * the CRM as application or system specific date intervals, and are not further + * analysed.

+ */ + public static final Property P81_ongoing_throughout = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P81_ongoing_throughout"); + + /** + *

This is defined as the first boundary of the property P81

+ */ + public static final Property P81a_end_of_the_begin = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P81a_end_of_the_begin"); + + /** + *

This is defined as the second boundary of the property P81

+ */ + public static final Property P81b_begin_of_the_end = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P81b_begin_of_the_end"); + + /** + *

This property describes the maximum period of time within which an E52 Time-Span + * falls. Since Time-Spans may not have precisely known temporal extents, the + * CRM supports statements about the minimum and maximum temporal extents of + * Time-Spans. This property allows a Time-Span’s maximum temporal extent (i.e. + * its outer boundary) to be assigned an E61 Time Primitive value. Time Primitives + * are treated by the CRM as application or system specific date intervals, and + * are not further analysed.

+ */ + public static final Property P82_at_some_time_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P82_at_some_time_within"); + + /** + *

This is defined as the first boundary of the property P82

+ */ + public static final Property P82a_begin_of_the_begin = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P82a_begin_of_the_begin"); + + /** + *

This is defined as the second boundary of the property P82

+ */ + public static final Property P82b_end_of_the_end = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P82b_end_of_the_end"); + + /** + *

This property describes the minimum length of time covered by an E52 Time-Span. + * It allows an E52 Time-Span to be associated with an E54 Dimension representing + * it’s minimum duration (i.e. it’s inner boundary) independent from the actual + * beginning and end.

+ */ + public static final Property P83_had_at_least_duration = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P83_had_at_least_duration"); + + public static final Property P83i_was_minimum_duration_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P83i_was_minimum_duration_of"); + + /** + *

This property describes the maximum length of time covered by an E52 Time-Span. + * It allows an E52 Time-Span to be associated with an E54 Dimension representing + * it’s maximum duration (i.e. it’s outer boundary) independent from the actual + * beginning and end.

+ */ + public static final Property P84_had_at_most_duration = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P84_had_at_most_duration"); + + public static final Property P84i_was_maximum_duration_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P84i_was_maximum_duration_of"); + + /** + *

This property describes the inclusion relationship between two instances of + * E52 Time-Span. This property supports the notion that a Time-Span’s temporal + * extent falls within the temporal extent of another Time-Span. It addresses + * temporal containment only, and no contextual link between the two instances + * of Time-Span is implied.

+ */ + public static final Property P86_falls_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P86_falls_within"); + + public static final Property P86i_contains = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P86i_contains"); + + /** + *

This property identifies an E53 Place using an E44 Place Appellation. Examples + * of Place Appellations used to identify Places include instances of E48 Place + * Name, addresses, E47 Spatial Coordinates etc.

+ */ + public static final Property P87_is_identified_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P87_is_identified_by"); + + public static final Property P87i_identifies = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P87i_identifies"); + + /** + *

This property identifies an instance of E53 Place that falls wholly within + * the extent of another E53 Place. It addresses spatial containment only, and + * does not imply any relationship between things or phenomena occupying these + * places.

+ */ + public static final Property P89_falls_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P89_falls_within"); + + public static final Property P89i_contains = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P89i_contains"); + + /** + *

This property describes the location of an instance of E4 Period with respect + * to an E19 Physical Object. P8 took place on or within (witnessed) is a shortcut + * of the more fully developed path from E4 Period through P7 took place at, + * E53 Place, P156 occupies (is occupied by) to E18 Physical Thing. It describes + * a period that can be located with respect to the space defined by an E19 Physical + * Object such as a ship or a building. The precise geographical location of + * the object during the period in question may be unknown or unimportant. For + * example, the French and German armistice of 22 June 1940 was signed in the + * same railway carriage as the armistice of 11 November 1918.

+ */ + public static final Property P8_took_place_on_or_within = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P8_took_place_on_or_within"); + + public static final Property P8i_witnessed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P8i_witnessed"); + + /** + *

This property allows an E54 Dimension to be approximated by an E60 Number + * primitive.

+ */ + public static final Property P90_has_value = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P90_has_value"); + + /** + *

This property shows the type of unit an E54 Dimension was expressed in.

+ */ + public static final Property P91_has_unit = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P91_has_unit"); + + public static final Property P91i_is_unit_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P91i_is_unit_of"); + + /** + *

This property allows an E63 Beginning of Existence event to be linked to the + * E77 Persistent Item brought into existence by it. It allows a “start” to be + * attached to any Persistent Item being documented i.e. E70 Thing, E72 Legal + * Object, E39 Actor, E41 Appellation, E51 Contact Point and E55 Type

+ */ + public static final Property P92_brought_into_existence = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P92_brought_into_existence"); + + public static final Property P92i_was_brought_into_existence_by = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P92i_was_brought_into_existence_by"); + + /** + *

This property allows an E64 End of Existence event to be linked to the E77 + * Persistent Item taken out of existence by it. In the case of immaterial things, + * the E64 End of Existence is considered to take place with the destruction + * of the last physical carrier. This allows an “end” to be attached to any Persistent + * Item being documented i.e. E70 Thing, E72 Legal Object, E39 Actor, E41 Appellation, + * E51 Contact Point and E55 Type. For many Persistent Items we know the maximum + * life-span and can infer, that they must have ended to exist. We assume in + * that case an End of Existence, which may be as unnoticeable as forgetting + * the secret knowledge by the last representative of some indigenous nation.

+ */ + public static final Property P93_took_out_of_existence = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P93_took_out_of_existence"); + + public static final Property P93i_was_taken_out_of_existence_by = + M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P93i_was_taken_out_of_existence_by"); + + /** + *

This property allows a conceptual E65 Creation to be linked to the E28 Conceptual + * Object created by it. It represents the act of conceiving the intellectual + * content of the E28 Conceptual Object. It does not represent the act of creating + * the first physical carrier of the E28 Conceptual Object. As an example, this + * is the composition of a poem, not its commitment to paper.

+ */ + public static final Property P94_has_created = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P94_has_created"); + + public static final Property P94i_was_created_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P94i_was_created_by"); + + /** + *

This property links the founding or E66 Formation for an E74 Group with the + * Group itself.

+ */ + public static final Property P95_has_formed = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P95_has_formed"); + + public static final Property P95i_was_formed_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P95i_was_formed_by"); + + /** + *

This property links an E67 Birth event to an E21 Person as a participant in + * the role of birth-giving mother. Note that biological fathers are not necessarily + * participants in the Birth (see P97 from father (was father for)). The Person + * being born is linked to the Birth with the property P98 brought into life + * (was born). This is not intended for use with general natural history material, + * only people. There is no explicit method for modelling conception and gestation + * except by using extensions. This is a sub-property of P11 had participant + * (participated in).

+ */ + public static final Property P96_by_mother = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P96_by_mother"); + + public static final Property P96i_gave_birth = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P96i_gave_birth"); + + /** + *

This property links an E67 Birth event to an E21 Person in the role of biological + * father. Note that biological fathers are not seen as necessary participants + * in the Birth, whereas birth-giving mothers are (see P96 by mother (gave birth)). + * The Person being born is linked to the Birth with the property P98 brought + * into life (was born). This is not intended for use with general natural history + * material, only people. There is no explicit method for modelling conception + * and gestation except by using extensions. A Birth event is normally (but not + * always) associated with one biological father.

+ */ + public static final Property P97_from_father = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P97_from_father"); + + public static final Property P97i_was_father_for = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P97i_was_father_for"); + + /** + *

This property links an E67Birth event to an E21 Person in the role of offspring. + * Twins, triplets etc. are brought into life by the same Birth event. This is + * not intended for use with general Natural History material, only people. There + * is no explicit method for modelling conception and gestation except by using + * extensions.

+ */ + public static final Property P98_brought_into_life = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P98_brought_into_life"); + + public static final Property P98i_was_born = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P98i_was_born"); + + /** + *

This property links the disbanding or E68 Dissolution of an E74 Group to the + * Group itself.

+ */ + public static final Property P99_dissolved = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P99_dissolved"); + + public static final Property P99i_was_dissolved_by = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P99i_was_dissolved_by"); + + /** + *

This property associates an instance of E4 Period with another instance of + * E4 Period that is defined by a subset of the phenomena that define the former. + * Therefore the spacetime volume of the latter must fall within the spacetime + * volume of the former.

+ */ + public static final Property P9_consists_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P9_consists_of"); + + public static final Property P9i_forms_part_of = M_MODEL.createProperty("http://www.cidoc-crm.org/cidoc-crm/P9i_forms_part_of"); + + /** + *

This class comprises transfers of physical custody of objects between instances + * of E39 Actor. The recording of the donor and/or recipient is optional. It + * is possible that in an instance of E10 Transfer of Custody there is either + * no donor or no recipient. Depending on the circumstances it may describe: + * 1. the beginning of custody 2. the end of custody 3. the transfer of custody + * 4. the receipt of custody from an unknown source 5. the declared loss of an + * object The distinction between the legal responsibility for custody and the + * actual physical possession of the object should be expressed using the property + * P2 has type (is type of). A specific case of transfer of custody is theft. + * The interpretation of the museum notion of "accession" differs between institutions. + * The CRM therefore models legal ownership and physical custody separately. + * Institutions will then model their specific notions of accession and deaccession + * as combinations of these.

+ */ + public static final Resource E10_Transfer_of_Custody = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E10_Transfer_of_Custody"); + + /** + *

This class comprises all instances of E7 Activity that create, alter or change + * E24 Physical Man-Made Thing. This class includes the production of an item + * from raw materials, and other so far undocumented objects, and the preventive + * treatment or restoration of an object for conservation. Since the distinction + * between modification and production is not always clear, modification is regarded + * as the more generally applicable concept. This implies that some items may + * be consumed or destroyed in a Modification, and that others may be produced + * as a result of it. An event should also be documented using E81 Transformation + * if it results in the destruction of one or more objects and the simultaneous + * production of others using parts or material from the originals. In this case, + * the new items have separate identities. If the instance of the E29 Design + * or Procedure utilized for the modification prescribes the use of specific + * materials, they should be documented using property P68 foresees use of (use + * foreseen by): E57 Material of E29 Design or Procedure, rather than via P126 + * employed (was employed in): E57 Material.

+ */ + public static final Resource E11_Modification = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E11_Modification"); + + /** + *

This class comprises activities that are designed to, and succeed in, creating + * one or more new items. It specializes the notion of modification into production. + * The decision as to whether or not an object is regarded as new is context + * sensitive. Normally, items are considered “new” if there is no obvious overall + * similarity between them and the consumed items and material used in their + * production. In other cases, an item is considered “new” because it becomes + * relevant to documentation by a modification. For example, the scribbling of + * a name on a potsherd may make it a voting token. The original potsherd may + * not be worth documenting, in contrast to the inscribed one. This entity can + * be collective: the printing of a thousand books, for example, would normally + * be considered a single event. An event should also be documented using E81 + * Transformation if it results in the destruction of one or more objects and + * the simultaneous production of others using parts or material from the originals. + * In this case, the new items have separate identities and matter is preserved, + * but identity is not.

+ */ + public static final Resource E12_Production = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E12_Production"); + + /** + *

This class comprises the actions of making assertions about properties of + * an object or any relation between two items or concepts. This class allows + * the documentation of how the respective assignment came about, and whose opinion + * it was. All the attributes or properties assigned in such an action can also + * be seen as directly attached to the respective item or concept, possibly as + * a collection of contradictory values. All cases of properties in this model + * that are also described indirectly through an action are characterised as + * "short cuts" of this action. This redundant modelling of two alternative views + * is preferred because many implementations may have good reasons to model either + * the action or the short cut, and the relation between both alternatives can + * be captured by simple rules. In particular, the class describes the actions + * of people making propositions and statements during certain museum procedures, + * e.g. the person and date when a condition statement was made, an identifier + * was assigned, the museum object was measured, etc. Which kinds of such assignments + * and statements need to be documented explicitly in structures of a schema + * rather than free text, depends on if this information should be accessible + * by structured queries.

+ */ + public static final Resource E13_Attribute_Assignment = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E13_Attribute_Assignment"); + + /** + *

This class describes the act of assessing the state of preservation of an + * object during a particular period. The condition assessment may be carried + * out by inspection, measurement or through historical research. This class + * is used to document circumstances of the respective assessment that may be + * relevant to interpret its quality at a later stage, or to continue research + * on related documents.

+ */ + public static final Resource E14_Condition_Assessment = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E14_Condition_Assessment"); + + /** + *

This class comprises activities that result in the allocation of an identifier + * to an instance of E1 CRM Entity. An E15 Identifier Assignment may include + * the creation of the identifier from multiple constituents, which themselves + * may be instances of E41 Appellation. The syntax and kinds of constituents + * to be used may be declared in a rule constituting an instance of E29 Design + * or Procedure. Examples of such identifiers include Find Numbers, Inventory + * Numbers, uniform titles in the sense of librarianship and Digital Object Identifiers + * (DOI). Documenting the act of identifier assignment and deassignment is especially + * useful when objects change custody or the identification system of an organization + * is changed. In order to keep track of the identity of things in such cases, + * it is important to document by whom, when and for what purpose an identifier + * is assigned to an item. The fact that an identifier is a preferred one for + * an organisation can be expressed by using the property E1 CRM Entity. P48 + * has preferred identifier (is preferred identifier of): E42 Identifier. It + * can better be expressed in a context independent form by assigning a suitable + * E55 Type, such as “preferred identifier assignment”, to the respective instance + * of E15 Identifier Assignment via the P2 has type property.

+ */ + public static final Resource E15_Identifier_Assignment = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E15_Identifier_Assignment"); + + /** + *

This class comprises actions measuring physical properties and other values + * that can be determined by a systematic procedure. Examples include measuring + * the monetary value of a collection of coins or the running time of a specific + * video cassette. The E16 Measurement may use simple counting or tools, such + * as yardsticks or radiation detection devices. The interest is in the method + * and care applied, so that the reliability of the result may be judged at a + * later stage, or research continued on the associated documents. The date of + * the event is important for dimensions, which may change value over time, such + * as the length of an object subject to shrinkage. Details of methods and devices + * are best handled as free text, whereas basic techniques such as "carbon 14 + * dating" should be encoded using P2 has type (is type of:) E55 Type.

+ */ + public static final Resource E16_Measurement = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E16_Measurement"); + + /** + *

This class comprises the actions of classifying items of whatever kind. Such + * items include objects, specimens, people, actions and concepts. This class + * allows for the documentation of the context of classification acts in cases + * where the value of the classification depends on the personal opinion of the + * classifier, and the date that the classification was made. This class also + * encompasses the notion of "determination," i.e. the systematic and molecular + * identification of a specimen in biology.

+ */ + public static final Resource E17_Type_Assignment = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E17_Type_Assignment"); + + /** + *

This class comprises all persistent physical items with a relatively stable + * form, man-made or natural. Depending on the existence of natural boundaries + * of such things, the CRM distinguishes the instances of E19 Physical Object + * from instances of E26 Physical Feature, such as holes, rivers, pieces of land + * etc. Most instances of E19 Physical Object can be moved (if not too heavy), + * whereas features are integral to the surrounding matter. An instance of E18 + * Physical Thing occupies not only a particular geometric space, but in the + * course of its existence it also forms a trajectory through spacetime, which + * occupies a real, that is phenomenal, volume in spacetime. We include in the + * occupied space the space filled by the matter of the physical thing and all + * its inner spaces, such as the interior of a box. Physical things consisting + * of aggregations of physically unconnected objects, such as a set of chessmen, + * occupy a number of individually contiguous spacetime volumes equal to the + * number of unconnected objects that constitute the set. We model E18 Physical + * Thing to be a subclass of E72 Legal Object and of E92 Spacetime volume. The + * latter is intended as a phenomenal spacetime volume as defined in CRMgeo (Doerr + * and Hiebel 2013). By virtue of this multiple inheritance we can discuss the + * physical extent of an E18 Physical Thing without representing each instance + * of it together with an instance of its associated spacetime volume. This model + * combines two quite different kinds of substance: an instance of E18 Physical + * Thing is matter while a spacetime volume is an aggregation of points in spacetime. + * However, the real spatiotemporal extent of an instance of E18 Physical Thing + * is regarded to be unique to it, due to all its details and fuzziness; its + * identity and existence depends uniquely on the identity of the instance of + * E18 Physical Thing. Therefore this multiple inheritance is unambiguous and + * effective and furthermore corresponds to the intuitions of natural language. + * The CIDOC CRM is generally not concerned with amounts of matter in fluid or + * gaseous states.

+ */ + public static final Resource E18_Physical_Thing = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E18_Physical_Thing"); + + /** + *

This class comprises items of a material nature that are units for documentation + * and have physical boundaries that separate them completely in an objective + * way from other objects. The class also includes all aggregates of objects + * made for functional purposes of whatever kind, independent of physical coherence, + * such as a set of chessmen. Typically, instances of E19 Physical Object can + * be moved (if not too heavy). In some contexts, such objects, except for aggregates, + * are also called “bona fide objects” (Smith & Varzi, 2000, pp.401-420), + * i.e. naturally defined objects. The decision as to what is documented as a + * complete item, rather than by its parts or components, may be a purely administrative + * decision or may be a result of the order in which the item was acquired.

+ */ + public static final Resource E19_Physical_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E19_Physical_Object"); + + /** + *

This class comprises all things in the universe of discourse of the CIDOC + * Conceptual Reference Model. It is an abstract concept providing for three + * general properties: 1. Identification by name or appellation, and in particular + * by a preferred identifier 2. Classification by type, allowing further refinement + * of the specific subclass an instance belongs to 3. Attachment of free text + * for the expression of anything not captured by formal properties With the + * exception of E59 Primitive Value, all other classes within the CRM are directly + * or indirectly specialisations of E1 CRM Entity.

+ */ + public static final Resource E1_CRM_Entity = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E1_CRM_Entity"); + + /** + *

This class comprises individual items of a material nature, which live, have + * lived or are natural products of or from living organisms. Artificial objects + * that incorporate biological elements, such as Victorian butterfly frames, + * can be documented as both instances of E20 Biological Object and E22 Man-Made + * Object.

+ */ + public static final Resource E20_Biological_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E20_Biological_Object"); + + /** + *

This class comprises real persons who live or are assumed to have lived. Legendary + * figures that may have existed, such as Ulysses and King Arthur, fall into + * this class if the documentation refers to them as historical figures. In cases + * where doubt exists as to whether several persons are in fact identical, multiple + * instances can be created and linked to indicate their relationship. The CRM + * does not propose a specific form to support reasoning about possible identity.

+ */ + public static final Resource E21_Person = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E21_Person"); + + /** + *

This class comprises physical objects purposely created by human activity. + * No assumptions are made as to the extent of modification required to justify + * regarding an object as man-made. For example, an inscribed piece of rock or + * a preserved butterfly are both regarded as instances of E22 Man-Made Object.

+ */ + public static final Resource E22_Man_Made_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E22_Man-Made_Object"); + + /** + *

This class comprises all persistent physical items that are purposely created + * by human activity. This class comprises man-made objects, such as a swords, + * and man-made features, such as rock art. No assumptions are made as to the + * extent of modification required to justify regarding an object as man-made. + * For example, a “cup and ring” carving on bedrock is regarded as instance of + * E24 Physical Man-Made Thing.

+ */ + public static final Resource E24_Physical_Man_Made_Thing = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E24_Physical_Man-Made_Thing"); + + /** + *

This class comprises physical features that are purposely created by human + * activity, such as scratches, artificial caves, artificial water channels, + * etc. No assumptions are made as to the extent of modification required to + * justify regarding a feature as man-made. For example, rock art or even “cup + * and ring” carvings on bedrock a regarded as types of E25 Man-Made Feature.

+ */ + public static final Resource E25_Man_Made_Feature = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E25_Man-Made_Feature"); + + /** + *

This class comprises identifiable features that are physically attached in + * an integral way to particular physical objects. Instances of E26 Physical + * Feature share many of the attributes of instances of E19 Physical Object. + * They may have a one-, two- or three-dimensional geometric extent, but there + * are no natural borders that separate them completely in an objective way from + * the carrier objects. For example, a doorway is a feature but the door itself, + * being attached by hinges, is not. Instances of E26 Physical Feature can be + * features in a narrower sense, such as scratches, holes, reliefs, surface colours, + * reflection zones in an opal crystal or a density change in a piece of wood. + * In the wider sense, they are portions of particular objects with partially + * imaginary borders, such as the core of the Earth, an area of property on the + * surface of the Earth, a landscape or the head of a contiguous marble statue. + * They can be measured and dated, and it is sometimes possible to state who + * or what is or was responsible for them. They cannot be separated from the + * carrier object, but a segment of the carrier object may be identified (or + * sometimes removed) carrying the complete feature. This definition coincides + * with the definition of "fiat objects" (Smith & Varzi, 2000, pp.401-420), + * with the exception of aggregates of “bona fide objects”.

+ */ + public static final Resource E26_Physical_Feature = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E26_Physical_Feature"); + + /** + *

This class comprises pieces of land or sea floor. In contrast to the purely + * geometric notion of E53 Place, this class describes constellations of matter + * on the surface of the Earth or other celestial body, which can be represented + * by photographs, paintings and maps. Instances of E27 Site are composed of + * relatively immobile material items and features in a particular configuration + * at a particular location

+ */ + public static final Resource E27_Site = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E27_Site"); + + /** + *

This class comprises non-material products of our minds and other human produced + * data that have become objects of a discourse about their identity, circumstances + * of creation or historical implication. The production of such information + * may have been supported by the use of technical devices such as cameras or + * computers. Characteristically, instances of this class are created, invented + * or thought by someone, and then may be documented or communicated between + * persons. Instances of E28 Conceptual Object have the ability to exist on more + * than one particular carrier at the same time, such as paper, electronic signals, + * marks, audio media, paintings, photos, human memories, etc. They cannot be + * destroyed. They exist as long as they can be found on at least one carrier + * or in at least one human memory. Their existence ends when the last carrier + * and the last memory are lost.

+ */ + public static final Resource E28_Conceptual_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E28_Conceptual_Object"); + + /** + *

This class comprises documented plans for the execution of actions in order + * to achieve a result of a specific quality, form or contents. In particular + * it comprises plans for deliberate human activities that may result in the + * modification or production of instances of E24 Physical Thing. Instances of + * E29 Design or Procedure can be structured in parts and sequences or depend + * on others. This is modelled using P69 has association with (is associated + * with). Designs or procedures can be seen as one of the following: 1. A schema + * for the activities it describes 2. A schema of the products that result from + * their application. 3. An independent intellectual product that may have never + * been applied, such as Leonardo da Vinci’s famous plans for flying machines. + * Because designs or procedures may never be applied or only partially executed, + * the CRM models a loose relationship between the plan and the respective product.

+ */ + public static final Resource E29_Design_or_Procedure = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E29_Design_or_Procedure"); + + /** + *

This class comprises all phenomena, such as the instances of E4 Periods, E5 + * Events and states, which happen over a limited extent in time. In some contexts, + * these are also called perdurants. This class is disjoint from E77 Persistent + * Item. This is an abstract class and has no direct instances. E2 Temporal Entity + * is specialized into E4 Period, which applies to a particular geographic area + * (defined with a greater or lesser degree of precision), and E3 Condition State, + * which applies to instances of E18 Physical Thing.

+ */ + public static final Resource E2_Temporal_Entity = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E2_Temporal_Entity"); + + /** + *

This class comprises legal privileges concerning material and immaterial things + * or their derivatives. These include reproduction and property rights

+ */ + public static final Resource E30_Right = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E30_Right"); + + /** + *

This class comprises identifiable immaterial items that make propositions + * about reality. These propositions may be expressed in text, graphics, images, + * audiograms, videograms or by other similar means. Documentation databases + * are regarded as a special case of E31 Document. This class should not be confused + * with the term “document” in Information Technology, which is compatible with + * E73 Information Object.

+ */ + public static final Resource E31_Document = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E31_Document"); + + /** + *

This class comprises encyclopaedia, thesauri, authority lists and other documents + * that define terminology or conceptual systems for consistent use.

+ */ + public static final Resource E32_Authority_Document = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E32_Authority_Document"); + + /** + *

This class comprises identifiable expressions in natural language or languages. + * Instances of E33 Linguistic Object can be expressed in many ways: e.g. as + * written texts, recorded speech or sign language. However, the CRM treats instances + * of E33 Linguistic Object independently from the medium or method by which + * they are expressed. Expressions in formal languages, such as computer codeFE41_ + * or mathematical formulae, are not treated as instances of E33 Linguistic Object + * by the CRM. These should be modelled as instances of E73 Information Object. + * The text of an instance of E33 Linguistic Object can be documented in a note + * by P3 has note: E62 String

+ */ + public static final Resource E33_Linguistic_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E33_Linguistic_Object"); + + /** + *

This class comprises recognisable, short texts attached to instances of E24 + * Physical Man-Made Thing. The transcription of the text can be documented in + * a note by P3 has note: E62 String. The alphabet used can be documented by + * P2 has type: E55 Type. This class does not intend to describe the idiosyncratic + * characteristics of an individual physical embodiment of an inscription, but + * the underlying prototype. The physical embodiment is modelled in the CRM as + * E24 Physical Man-Made Thing. The relationship of a physical copy of a book + * to the text it contains is modelled using E84 Information Carrier. P128 carries + * (is carried by): E33 Linguistic Object.

+ */ + public static final Resource E34_Inscription = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E34_Inscription"); + + /** + *

This class comprises the names assigned to works, such as texts, artworks + * or pieces of music. Titles are proper noun phrases or verbal phrases, and + * should not be confused with generic object names such as “chair”, “painting” + * or “book” (the latter are common nouns that stand for instances of E55 Type). + * Titles may be assigned by the creator of the work itself, or by a social group. + * This class also comprises the translations of titles that are used as surrogates + * for the original titles in different social contexts.

+ */ + public static final Resource E35_Title = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E35_Title"); + + /** + *

This class comprises the intellectual or conceptual aspects of recognisable + * marks and images. This class does not intend to describe the idiosyncratic + * characteristics of an individual physical embodiment of a visual item, but + * the underlying prototype. For example, a mark such as the ICOM logo is generally + * considered to be the same logo when used on any number of publications. The + * size, orientation and colour may change, but the logo remains uniquely identifiable. + * The same is true of images that are reproduced many times. This means that + * visual items are independent of their physical support. The class E36 Visual + * Item provides a means of identifying and linking together instances of E24 + * Physical Man-Made Thing that carry the same visual symbols, marks or images + * etc. The property P62 depicts (is depicted by) between E24 Physical Man-Made + * Thing and depicted subjects (E1 CRM Entity) can be regarded as a short-cut + * of the more fully developed path from E24 Physical Man-Made Thing through + * P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has + * representation) to E1CRM Entity, which in addition captures the optical features + * of the depiction.

+ */ + public static final Resource E36_Visual_Item = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E36_Visual_Item"); + + /** + *

This class comprises symbols, signs, signatures or short texts applied to + * instances of E24 Physical Man-Made Thing by arbitrary techniques in order + * to indicate the creator, owner, dedications, purpose, etc. This class specifically + * excludes features that have no semantic significance, such as scratches or + * tool marks. These should be documented as instances of E25 Man-Made Feature.

+ */ + public static final Resource E37_Mark = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E37_Mark"); + + /** + *

This class comprises distributions of form, tone and colour that may be found + * on surfaces such as photos, paintings, prints and sculptures or directly on + * electronic media. The degree to which variations in the distribution of form + * and colour affect the identity of an instance of E38 Image depends on a given + * purpose. The original painting of the Mona Lisa in the Louvre may be said + * to bear the same instance of E38 Image as reproductions in the form of transparencies, + * postcards, posters or T-shirts, even though they may differ in size and carrier + * and may vary in tone and colour. The images in a “spot the difference” competition + * are not the same with respect to their context, however similar they may at + * first appear.

+ */ + public static final Resource E38_Image = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E38_Image"); + + /** + *

This class comprises people, either individually or in groups, who have the + * potential to perform intentional actions of kinds for which someone may be + * held responsible. The CRM does not attempt to model the inadvertent actions + * of such actors. Individual people should be documented as instances of E21 + * Person, whereas groups should be documented as instances of either E74 Group + * or its subclass E40 Legal Body.

+ */ + public static final Resource E39_Actor = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E39_Actor"); + + /** + *

This class comprises the states of objects characterised by a certain condition + * over a time-span. An instance of this class describes the prevailing physical + * condition of any material object or feature during a specific E52 Time Span. + * In general, the time-span for which a certain condition can be asserted may + * be shorter than the real time-span, for which this condition held. The nature + * of that condition can be described using P2 has type. For example, the E3 + * Condition State “condition of the SS Great Britain between 22 September 1846 + * and 27 August 1847” can be characterized as E55 Type “wrecked”.

+ */ + public static final Resource E3_Condition_State = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E3_Condition_State"); + + /** + *

This class comprises institutions or groups of people that have obtained a + * legal recognition as a group and can act collectively as agents. This means + * that they can perform actions, own property, create or destroy things and + * can be held collectively responsible for their actions like individual people. + * The term 'personne morale' is often used for this in French.

+ */ + public static final Resource E40_Legal_Body = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E40_Legal_Body"); + + /** + *

This class comprises signs, either meaningful or not, or arrangements of signs + * following a specific syntax, that are used or can be used to refer to and + * identify a specific instance of some class or category within a certain context. + * Instances of E41 Appellation do not identify things by their meaning, even + * if they happen to have one, but instead by convention, tradition, or agreement. + * Instances of E41 Appellation are cultural constructs; as such, they have a + * context, a history, and a use in time and space by some group of users. A + * given instance of E41 Appellation can have alternative forms, i.e., other + * instances of E41 Appellation that are always regarded as equivalent independent + * from the thing it denotes. Specific subclasses of E41 Appellation should be + * used when instances of E41 Appellation of a characteristic form are used for + * particular objects. Instances of E49 Time Appellation, for example, which + * take the form of instances of E50 Date, can be easily recognised. E41 Appellation + * should not be confused with the act of naming something. Cf. E15 Identifier + * Assignment

+ */ + public static final Resource E41_Appellation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E41_Appellation"); + + /** + *

This class comprises strings or codes assigned to instances of E1 CRM Entity + * in order to identify them uniquely and permanently within the context of one + * or more organisations. Such codes are often known as inventory numbers, registration + * codes, etc. and are typically composed of alphanumeric sequences. The class + * E42 Identifier is not normally used for machine-generated identifiers used + * for automated processing unless these are also used by human agents.

+ */ + public static final Resource E42_Identifier = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E42_Identifier"); + + /** + *

This class comprises any sort of identifier characteristically used to refer + * to an E53 Place. Instances of E44 Place Appellation may vary in their degree + * of precision and their meaning may vary over time - the same instance of E44 + * Place Appellation may be used to refer to several places, either because of + * cultural shifts, or because objects used as reference points have moved around. + * Instances of E44 Place Appellation can be extremely varied in form: postal + * addresses, instances of E47 Spatial Coordinate, and parts of buildings can + * all be considered as instances of E44 Place Appellation.

+ */ + public static final Resource E44_Place_Appellation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E44_Place_Appellation"); + + /** + *

This class comprises identifiers expressed in coding systems for places, such + * as postal addresses used for mailing. An E45 Address can be considered both + * as the name of an E53 Place and as an E51 Contact Point for an E39 Actor. + * This dual aspect is reflected in the multiple inheritance. However, some forms + * of mailing addresses, such as a postal box, are only instances of E51 Contact + * Point, since they do not identify any particular Place. These should not be + * documented as instances of E45 Address.

+ */ + public static final Resource E45_Address = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E45_Address"); + + /** + *

This class comprises areas of objects referred to in terms specific to the + * general geometry or structure of its kind. The 'prow' of the boat, the 'frame' + * of the picture, the 'front' of the building are all instances of E46 Section + * Definition. The class highlights the fact that parts of objects can be treated + * as locations. This holds in particular for features without natural boundaries, + * such as the “head” of a marble statue made out of one block (cf. E53 Place). + * In answer to the question 'where is the signature?' one might reply 'on the + * lower left corner'. (Section Definition is closely related to the term “segment” + * in Gerstl, P.& Pribbenow, S, 1996 “ A conceptual theory of part – whole + * relations and its applications”, Data & Knowledge Engineering 20 305-322, + * North Holland- Elsevier ).

+ */ + public static final Resource E46_Section_Definition = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E46_Section_Definition"); + + /** + *

This class comprises the textual or numeric information required to locate + * specific instances of E53 Place within schemes of spatial identification. + * Coordinates are a specific form of E44 Place Appellation, that is, a means + * of referring to a particular E53 Place. Coordinates are not restricted to + * longitude, latitude and altitude. Any regular system of reference that maps + * onto an E19 Physical Object can be used to generate coordinates.

+ */ + public static final Resource E47_Spatial_Coordinates = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E47_Spatial_Coordinates"); + + /** + *

This class comprises particular and common forms of E44 Place Appellation. + * Place Names may change their application over time: the name of an E53 Place + * may change, and a name may be reused for a different E53 Place. Instances + * of E48 Place Name are typically subject to place name gazetteers.

+ */ + public static final Resource E48_Place_Name = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E48_Place_Name"); + + /** + *

This class comprises all forms of names or codes, such as historical periods, + * and dates, which are characteristically used to refer to a specific E52 Time-Span. + * The instances of E49 Time Appellation may vary in their degree of precision, + * and they may be relative to other time frames, “Before Christ” for example. + * Instances of E52 Time-Span are often defined by reference to a cultural period + * or an event e.g. ‘the duration of the Ming Dynasty’.

+ */ + public static final Resource E49_Time_Appellation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E49_Time_Appellation"); + + /** + *

This class comprises sets of coherent phenomena or cultural manifestations + * occurring in time and space. It is the social or physical coherence of these + * phenomena that identify an E4 Period and not the associated spatiotemporal + * extent. This extent is only the "ground" or space in an abstract physical + * sense that the actual process of growth, spread and retreat has covered. Consequently, + * different periods can overlap and coexist in time and space, such as when + * a nomadic culture exists in the same area and time as a sedentary culture. + * This also means that overlapping land use rights, common among first nations, + * amounts to overlapping periods. Often, this class is used to describe prehistoric + * or historic periods such as the "Neolithic Period", the "Ming Dynasty" or + * the "McCarthy Era", but also geopolitical units and activities of settlements + * are regarded as special cases of E4 Period. However, there are no assumptions + * about the scale of the associated phenomena. In particular all events are + * seen as synthetic processes consisting of coherent phenomena. Therefore E4 + * Period is a superclass of E5 Event. For example, a modern clinical E67 Birth + * can be seen as both an atomic E5 Event and as an E4 Period that consists of + * multiple activities performed by multiple instances of E39 Actor. As the actual + * extent of an E4 Period in spacetime we regard the trajectories of the participating + * physical things during their participation in an instance of E4 Period. This + * includes the open spaces via which these things have interacted and the spaces + * by which they had the potential to interact during that period or event in + * the way defined by the type of the respective period or event. Examples include + * the air in a meeting room transferring the voices of the participants. Since + * these phenomena are fuzzy, we assume the spatiotemporal extent to be contiguous, + * except for cases of phenomena spreading out over islands or other separated + * areas, including geopolitical units distributed over disconnected areas such + * as islands or colonies. Whether the trajectories necessary for participants + * to travel between these areas are regarded as part of the spatiotemporal extent + * or not has to be decided in each case based on a concrete analysis, taking + * use of the sea for other purposes than travel, such as fishing, into consideration. + * One may also argue that the activities to govern disconnected areas imply + * travelling through spaces connecting them and that these areas hence are spatially + * connected in a way, but it appears counterintuitive to consider for instance + * travel routes in international waters as extensions of geopolitical units. + * Consequently, an instance of E4 Period may occupy a number of disjoint spacetime + * volumes, however there must not be a discontinuity in the timespan covered + * by these spacetime volumes. This means that an instance of E4 Period must + * be contiguous in time. If it has ended in all areas, it has ended as a whole. + * However it may end in one area before another, such as in the Polynesian migration, + * and it continues as long as it is ongoing in at least one area. We model E4 + * Period as a subclass of E2 Temporal Entity and of E92 Spacetime volume. The + * latter is intended as a phenomenal spacetime volume as defined in CRMgeo (Doerr + * and Hiebel 2013). By virtue of this multiple inheritance we can discuss the + * physical extent of an E4 Period without representing each instance of it together + * with an instance of its associated spacetime volume. This model combines two + * quite different kinds of substance: an instance of E4 Period is a phenomena + * while a space-time volume is an aggregation of points in spacetime. However, + * the real spatiotemporal extent of an instance of E4 Period is regarded to + * be unique to it due to all its details and fuzziness; its identity and existence + * depends uniquely on the identity of the instance of E4 Period. Therefore this + * multiple inheritance is unambiguous and effective and furthermore corresponds + * to the intuitions of natural language. There are two different conceptualisations + * of 'artistic style', defined either by physical features or by historical + * context. For example, “Impressionism” can be viewed as a period lasting from + * approximately 1870 to 1905 during which paintings with particular characteristics + * were produced by a group of artists that included (among others) Monet, Renoir, + * Pissarro, Sisley and Degas. Alternatively, it can be regarded as a style applicable + * to all paintings sharing the characteristics of the works produced by the + * Impressionist painters, regardless of historical context. The first interpretation + * is an instance of E4 Period, and the second defines morphological object types + * that fall under E55 Type. Another specific case of an E4 Period is the set + * of activities and phenomena associated with a settlement, such as the populated + * period of Nineveh.

+ */ + public static final Resource E4_Period = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E4_Period"); + + /** + *

This class comprises specific forms of E49 Time Appellation.

+ */ + public static final Resource E50_Date = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E50_Date"); + + /** + *

This class comprises identifiers employed, or understood, by communication + * services to direct communications to an instance of E39 Actor. These include + * E-mail addresses, telephone numbers, post office boxes, Fax numbers, URLs + * etc. Most postal addresses can be considered both as instances of E44 Place + * Appellation and E51 Contact Point. In such cases the subclass E45 Address + * should be used. URLs are addresses used by machines to access another machine + * through an http request. Since the accessed machine acts on behalf of the + * E39 Actor providing the machine, URLs are considered as instances of E51 Contact + * Point to that E39 Actor.

+ */ + public static final Resource E51_Contact_Point = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E51_Contact_Point"); + + /** + *

This class comprises abstract temporal extents, in the sense of Galilean physics, + * having a beginning, an end and a duration. Time Span has no other semantic + * connotations. Time-Spans are used to define the temporal extent of instances + * of E4 Period, E5 Event and any other phenomena valid for a certain time. An + * E52 Time-Span may be identified by one or more instances of E49 Time Appellation. + * Since our knowledge of history is imperfect, instances of E52 Time-Span can + * best be considered as approximations of the actual Time-Spans of temporal + * entities. The properties of E52 Time-Span are intended to allow these approximations + * to be expressed precisely. An extreme case of approximation, might, for example, + * define an E52 Time-Span having unknown beginning, end and duration. Used as + * a common E52 Time-Span for two events, it would nevertheless define them as + * being simultaneous, even if nothing else was known. Automatic processing and + * querying of instances of E52 Time-Span is facilitated if data can be parsed + * into an E61 Time Primitive.

+ */ + public static final Resource E52_Time_Span = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E52_Time-Span"); + + /** + *

This class comprises extents in space, in particular on the surface of the + * earth, in the pure sense of physics: independent from temporal phenomena and + * matter. The instances of E53 Place are usually determined by reference to + * the position of “immobile” objects such as buildings, cities, mountains, rivers, + * or dedicated geodetic marks. A Place can be determined by combining a frame + * of reference and a location with respect to this frame. It may be identified + * by one or more instances of E44 Place Appellation. It is sometimes argued + * that instances of E53 Place are best identified by global coordinates or absolute + * reference systems. However, relative references are often more relevant in + * the context of cultural documentation and tend to be more precise. In particular, + * we are often interested in position in relation to large, mobile objects, + * such as ships. For example, the Place at which Nelson died is known with reference + * to a large mobile object – H.M.S Victory. A resolution of this Place in terms + * of absolute coordinates would require knowledge of the movements of the vessel + * and the precise time of death, either of which may be revised, and the result + * would lack historical and cultural relevance. Any object can serve as a frame + * of reference for E53 Place determination. The model foresees the notion of + * a "section" of an E19 Physical Object as a valid E53 Place determination.

+ */ + public static final Resource E53_Place = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E53_Place"); + + /** + *

This class comprises quantifiable properties that can be measured by some + * calibrated means and can be approximated by values, i.e. points or regions + * in a mathematical or conceptual space, such as natural or real numbers, RGB + * values etc. An instance of E54 Dimension represents the true quantity, independent + * from its numerical approximation, e.g. in inches or in cm. The properties + * of the class E54 Dimension allow for expressing the numerical approximation + * of the values of an instance of E54 Dimension. If the true values belong to + * a non-discrete space, such as spatial distances, it is recommended to record + * them as approximations by intervals or regions of indeterminacy enclosing + * the assumed true values. For instance, a length of 5 cm may be recorded as + * 4.5-5.5 cm, according to the precision of the respective observation. Note, + * that interoperability of values described in different units depends critically + * on the representation as value regions. Numerical approximations in archaic + * instances of E58 Measurement Unit used in historical records should be preserved. + * Equivalents corresponding to current knowledge should be recorded as additional + * instances of E54 Dimension as appropriate.

+ */ + public static final Resource E54_Dimension = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E54_Dimension"); + + /** + *

This class comprises concepts denoted by terms from thesauri and controlled + * vocabularies used to characterize and classify instances of CRM classes. Instances + * of E55 Type represent concepts in contrast to instances of E41 Appellation + * which are used to name instances of CRM classes. E55 Type is the CRM’s interface + * to domain specific ontologies and thesauri. These can be represented in the + * CRM as subclasses of E55 Type, forming hierarchies of terms, i.e. instances + * of E55 Type linked via P127 has broader term (has narrower term). Such hierarchies + * may be extended with additional properties.

+ */ + public static final Resource E55_Type = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E55_Type"); + + /** + *

This class is a specialization of E55 Type and comprises the natural languages + * in the sense of concepts. This type is used categorically in the model without + * reference to instances of it, i.e. the Model does not foresee the description + * of instances of instances of E56 Language, e.g.: “instances of Mandarin Chinese”. + * It is recommended that internationally or nationally agreed codes and terminology + * are used to denote instances of E56 Language, such as those defined in ISO + * 639:1988.

+ */ + public static final Resource E56_Language = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E56_Language"); + + /** + *

This class is a specialization of E55 Type and comprises the concepts of materials. + * Instances of E57 Material may denote properties of matter before its use, + * during its use, and as incorporated in an object, such as ultramarine powder, + * tempera paste, reinforced concrete. Discrete pieces of raw-materials kept + * in museums, such as bricks, sheets of fabric, pieces of metal, should be modelled + * individually in the same way as other objects. Discrete used or processed + * pieces, such as the stones from Nefer Titi's temple, should be modelled as + * parts (cf. P46 is composed of). This type is used categorically in the model + * without reference to instances of it, i.e. the Model does not foresee the + * description of instances of instances of E57 Material, e.g.: “instances of + * gold”. It is recommended that internationally or nationally agreed codes and + * terminology are used.

+ */ + public static final Resource E57_Material = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E57_Material"); + + /** + *

This class is a specialization of E55 Type and comprises the types of measurement + * units: feet, inches, centimetres, litres, lumens, etc. This type is used categorically + * in the model without reference to instances of it, i.e. the Model does not + * foresee the description of instances of instances of E58 Measurement Unit, + * e.g.: “instances of cm”. Syst?me International (SI) units or internationally + * recognized non-SI terms should be used whenever possible. (ISO 1000:1992). + * Archaic Measurement Units used in historical records should be preserved.

+ */ + public static final Resource E58_Measurement_Unit = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E58_Measurement_Unit"); + + /** + *

This class comprises changes of states in cultural, social or physical systems, + * regardless of scale, brought about by a series or group of coherent physical, + * cultural, technological or legal phenomena. Such changes of state will affect + * instances of E77 Persistent Item or its subclasses. The distinction between + * an E5 Event and an E4 Period is partly a question of the scale of observation. + * Viewed at a coarse level of detail, an E5 Event is an ‘instantaneous’ change + * of state. At a fine level, the E5 Event can be analysed into its component + * phenomena within a space and time frame, and as such can be seen as an E4 + * Period. The reverse is not necessarily the case: not all instances of E4 Period + * give rise to a noteworthy change of state.

+ */ + public static final Resource E5_Event = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E5_Event"); + + /** + *

This class comprises events that bring into existence any E77 Persistent Item. + * It may be used for temporal reasoning about things (intellectual products, + * physical items, groups of people, living beings) beginning to exist; it serves + * as a hook for determination of a terminus post quem and ante quem.

+ */ + public static final Resource E63_Beginning_of_Existence = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E63_Beginning_of_Existence"); + + /** + *

This class comprises events that end the existence of any E77 Persistent Item. + * It may be used for temporal reasoning about things (physical items, groups + * of people, living beings) ceasing to exist; it serves as a hook for determination + * of a terminus postquem and antequem. In cases where substance from a Persistent + * Item continues to exist in a new form, the process would be documented by + * E81 Transformation.

+ */ + public static final Resource E64_End_of_Existence = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E64_End_of_Existence"); + + /** + *

This class comprises events that result in the creation of conceptual items + * or immaterial products, such as legends, poems, texts, music, images, movies, + * laws, types etc.

+ */ + public static final Resource E65_Creation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E65_Creation"); + + /** + *

This class comprises events that result in the formation of a formal or informal + * E74 Group of people, such as a club, society, association, corporation or + * nation. E66 Formation does not include the arbitrary aggregation of people + * who do not act as a collective. The formation of an instance of E74 Group + * does not require that the group is populated with members at the time of formation. + * In order to express the joining of members at the time of formation, the respective + * activity should be simultaneously an instance of both E66 Formation and E85 + * Joining.

+ */ + public static final Resource E66_Formation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E66_Formation"); + + /** + *

This class comprises the births of human beings. E67 Birth is a biological + * event focussing on the context of people coming into life. (E63 Beginning + * of Existence comprises the coming into life of any living beings). Twins, + * triplets etc. are brought into life by the same E67 Birth event. The introduction + * of the E67 Birth event as a documentation element allows the description of + * a range of family relationships in a simple model. Suitable extensions may + * describe more details and the complexity of motherhood with the intervention + * of modern medicine. In this model, the biological father is not seen as a + * necessary participant in the E67 Birth event.

+ */ + public static final Resource E67_Birth = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E67_Birth"); + + /** + *

This class comprises the events that result in the formal or informal termination + * of an E74 Group of people. If the dissolution was deliberate, the Dissolution + * event should also be instantiated as an E7 Activity.

+ */ + public static final Resource E68_Dissolution = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E68_Dissolution"); + + /** + *

This class comprises the deaths of human beings. If a person is killed, their + * death should be instantiated as E69 Death and as E7 Activity. The death or + * perishing of other living beings should be documented using E64 End of Existence.

+ */ + public static final Resource E69_Death = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E69_Death"); + + /** + *

This class comprises events that destroy one or more instances of E18 Physical + * Thing such that they lose their identity as the subjects of documentation. + * Some destruction events are intentional, while others are independent of human + * activity. Intentional destruction may be documented by classifying the event + * as both an E6 Destruction and E7 Activity. The decision to document an object + * as destroyed, transformed or modified is context sensitive: 1. If the matter + * remaining from the destruction is not documented, the event is modelled solely + * as E6 Destruction. 2. An event should also be documented using E81 Transformation + * if it results in the destruction of one or more objects and the simultaneous + * production of others using parts or material from the original. In this case, + * the new items have separate identities. Matter is preserved, but identity + * is not. 3. When the initial identity of the changed instance of E18 Physical + * Thing is preserved, the event should be documented as E11 Modification.

+ */ + public static final Resource E6_Destruction = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E6_Destruction"); + + /** + *

This general class comprises discrete, identifiable, instances of E77 Persistent + * Item that are documented as single units, that either consist of matter or + * depend on being carried by matter and are characterized by relative stability. + * They may be intellectual products or physical things. They may for instance + * have a solid physical form, an electronic encoding, or they may be a logical + * concept or structure.

+ */ + public static final Resource E70_Thing = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E70_Thing"); + + /** + *

This class comprises discrete, identifiable man-made items that are documented + * as single units. These items are either intellectual products or man-made + * physical things, and are characterized by relative stability. They may for + * instance have a solid physical form, an electronic encoding, or they may be + * logical concepts or structures.

+ */ + public static final Resource E71_Man_Made_Thing = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E71_Man-Made_Thing"); + + /** + *

This class comprises those material or immaterial items to which instances + * of E30 Right, such as the right of ownership or use, can be applied. This + * is true for all E18 Physical Thing. In the case of instances of E28 Conceptual + * Object, however, the identity of the E28 Conceptual Object or the method of + * its use may be too ambiguous to reliably establish instances of E30 Right, + * as in the case of taxa and inspirations. Ownership of corporations is currently + * regarded as out of scope of the CRM.

+ */ + public static final Resource E72_Legal_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E72_Legal_Object"); + + /** + *

This class comprises identifiable immaterial items, such as a poems, jokes, + * data sets, images, texts, multimedia objects, procedural prescriptions, computer + * program code, algorithm or mathematical formulae, that have an objectively + * recognizable structure and are documented as single units. The encoding structure + * known as a "named graph" also falls under this class, so that each "named + * graph" is an instance of an E73 Information Object. An E73 Information Object + * does not depend on a specific physical carrier, which can include human memory, + * and it can exist on one or more carriers simultaneously. Instances of E73 + * Information Object of a linguistic nature should be declared as instances + * of the E33 Linguistic Object subclass. Instances of E73 Information Object + * of a documentary nature should be declared as instances of the E31 Document + * subclass. Conceptual items such as types and classes are not instances of + * E73 Information Object, nor are ideas without a reproducible expression.

+ */ + public static final Resource E73_Information_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E73_Information_Object"); + + /** + *

This class comprises any gatherings or organizations of E39 Actors that act + * collectively or in a similar way due to any form of unifying relationship. + * In the wider sense this class also comprises official positions which used + * to be regarded in certain contexts as one actor, independent of the current + * holder of the office, such as the president of a country. In such cases, it + * may happen that the Group never had more than one member. A joint pseudonym + * (i.e., a name that seems indicative of an individual but that is actually + * used as a persona by two or more people) is a particular case of E74 Group. + * A gathering of people becomes an E74 Group when it exhibits organizational + * characteristics usually typified by a set of ideas or beliefs held in common, + * or actions performed together. These might be communication, creating some + * common artifact, a common purpose such as study, worship, business, sports, + * etc. Nationality can be modeled as membership in an E74 Group (cf. HumanML + * markup). Married couples and other concepts of family are regarded as particular + * examples of E74 Group.

+ */ + public static final Resource E74_Group = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E74_Group"); + + /** + *

This class comprises appellations that are by their form or syntax specific + * to identifying instances of E28 Conceptual Object, such as intellectual products, + * standardized patterns etc.

+ */ + public static final Resource E75_Conceptual_Object_Appellation = + M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E75_Conceptual_Object_Appellation"); + + /** + *

This class comprises items that have a persistent identity, sometimes known + * as “endurants” in philosophy. They can be repeatedly recognized within the + * duration of their existence by identity criteria rather than by continuity + * or observation. Persistent Items can be either physical entities, such as + * people, animals or things, or conceptual entities such as ideas, concepts, + * products of the imagination or common names. The criteria that determine the + * identity of an item are often difficult to establish -; the decision depends + * largely on the judgement of the observer. For example, a building is regarded + * as no longer existing if it is dismantled and the materials reused in a different + * configuration. On the other hand, human beings go through radical and profound + * changes during their life-span, affecting both material composition and form, + * yet preserve their identity by other criteria. Similarly, inanimate objects + * may be subject to exchange of parts and matter. The class E77 Persistent Item + * does not take any position about the nature of the applicable identity criteria + * and if actual knowledge about identity of an instance of this class exists. + * There may be cases, where the identity of an E77 Persistent Item is not decidable + * by a certain state of knowledge. The main classes of objects that fall outside + * the scope the E77 Persistent Item class are temporal objects such as periods, + * events and acts, and descriptive properties.

+ */ + public static final Resource E77_Persistent_Item = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E77_Persistent_Item"); + + /** + *

This class comprises aggregations of instances of E18 Physical Thing that + * are assembled and maintained ("curated" and "preserved", in museological terminology) + * by one or more instances of E39 Actor over time for a specific purpose and + * audience, and according to a particular collection development plan. Items + * may be added or removed from an E78 Collection in pursuit of this plan. This + * class should not be confused with the E39 Actor maintaining the E78 Collection + * often referred to with the name of the E78 Collection (e.g. “The Wallace Collection + * decided…”). Collective objects in the general sense, like a tomb full of gifts, + * a folder with stamps or a set of chessmen, should be documented as instances + * of E19 Physical Object, and not as instances of E78 Collection. This is because + * they form wholes either because they are physically bound together or because + * they are kept together for their functionality.

+ */ + public static final Resource E78_Collection = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E78_Collection"); + + /** + *

This class comprises activities that result in an instance of E24 Physical + * Man-Made Thing being increased, enlarged or augmented by the addition of a + * part. Typical scenarios include the attachment of an accessory, the integration + * of a component, the addition of an element to an aggregate object, or the + * accessioning of an object into a curated E78 Collection. Objects to which + * parts are added are, by definition, man-made, since the addition of a part + * implies a human activity. Following the addition of parts, the resulting man-made + * assemblages are treated objectively as single identifiable wholes, made up + * of constituent or component parts bound together either physically (for example + * the engine becoming a part of the car), or by sharing a common purpose (such + * as the 32 chess pieces that make up a chess set). This class of activities + * forms a basis for reasoning about the history and continuity of identity of + * objects that are integrated into other objects over time, such as precious + * gemstones being repeatedly incorporated into different items of jewellery, + * or cultural artifacts being added to different museum instances of E78 Collection + * over their lifespan.

+ */ + public static final Resource E79_Part_Addition = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E79_Part_Addition"); + + /** + *

This class comprises actions intentionally carried out by instances of E39 + * Actor that result in changes of state in the cultural, social, or physical + * systems documented. This notion includes complex, composite and long-lasting + * actions such as the building of a settlement or a war, as well as simple, + * short-lived actions such as the opening of a door.

+ */ + public static final Resource E7_Activity = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E7_Activity"); + + /** + *

This class comprises the activities that result in an instance of E18 Physical + * Thing being decreased by the removal of a part. Typical scenarios include + * the detachment of an accessory, the removal of a component or part of a composite + * object, or the deaccessioning of an object from a curated E78 Collection. + * If the E80 Part Removal results in the total decomposition of the original + * object into pieces, such that the whole ceases to exist, the activity should + * instead be modelled as an E81 Transformation, i.e. a simultaneous destruction + * and production. In cases where the part removed has no discernible identity + * prior to its removal but does have an identity subsequent to its removal, + * the activity should be regarded as both E80 Part Removal and E12 Production. + * This class of activities forms a basis for reasoning about the history, and + * continuity of identity over time, of objects that are removed from other objects, + * such as precious gemstones being extracted from different items of jewelry, + * or cultural artifacts being deaccessioned from different museum collections + * over their lifespan.

+ */ + public static final Resource E80_Part_Removal = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E80_Part_Removal"); + + /** + *

This class comprises the events that result in the simultaneous destruction + * of one or more than one E77 Persistent Item and the creation of one or more + * than one E77 Persistent Item that preserves recognizable substance from the + * first one(s) but has fundamentally different nature and identity. Although + * the old and the new instances of E77 Persistent Item are treated as discrete + * entities having separate, unique identities, they are causally connected through + * the E81 Transformation; the destruction of the old E77 Persistent Item(s) + * directly causes the creation of the new one(s) using or preserving some relevant + * substance. Instances of E81 Transformation are therefore distinct from re-classifications + * (documented using E17 Type Assignment) or modifications (documented using + * E11 Modification) of objects that do not fundamentally change their nature + * or identity. Characteristic cases are reconstructions and repurposing of historical + * buildings or ruins, fires leaving buildings in ruins, taxidermy of specimen + * in natural history and the reorganization of a corporate body into a new one.

+ */ + public static final Resource E81_Transformation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E81_Transformation"); + + /** + *

This class comprises any sort of name, number, code or symbol characteristically + * used to identify an E39 Actor. An E39 Actor will typically have more than + * one E82 Actor Appellation, and instances of E82 Actor Appellation in turn + * may have alternative representations. The distinction between corporate and + * personal names, which is particularly important in library applications, should + * be made by explicitly linking the E82 Actor Appellation to an instance of + * either E21 Person or E74 Group/E40 Legal Body. If this is not possible, the + * distinction can be made through the use of the P2 has type mechanism.

+ */ + public static final Resource E82_Actor_Appellation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E82_Actor_Appellation"); + + /** + *

This class comprises activities formally defining new types of items. It is + * typically a rigorous scholarly or scientific process that ensures a type is + * exhaustively described and appropriately named. In some cases, particularly + * in archaeology and the life sciences, E83 Type Creation requires the identification + * of an exemplary specimen and the publication of the type definition in an + * appropriate scholarly forum. The activity of E83 Type Creation is central + * to research in the life sciences, where a type would be referred to as a “taxon,” + * the type description as a “protologue,” and the exemplary specimens as “orgininal + * element” or “holotype”.

+ */ + public static final Resource E83_Type_Creation = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E83_Type_Creation"); + + /** + *

This class comprises all instances of E22 Man-Made Object that are explicitly + * designed to act as persistent physical carriers for instances of E73 Information + * Object. An E84 Information Carrier may or may not contain information, e.g., + * a diskette. Note that any E18 Physical Thing may carry information, such as + * an E34 Inscription. However, unless it was specifically designed for this + * purpose, it is not an Information Carrier. Therefore the property P128 carries + * (is carried by) applies to E18 Physical Thing in general.

+ */ + public static final Resource E84_Information_Carrier = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E84_Information_Carrier"); + + /** + *

This class comprises the activities that result in an instance of E39 Actor + * becoming a member of an instance of E74 Group. This class does not imply initiative + * by either party. It may be the initiative of a third party. Typical scenarios + * include becoming a member of a social organisation, becoming employee of a + * company, marriage, the adoption of a child by a family and the inauguration + * of somebody into an official position.

+ */ + public static final Resource E85_Joining = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E85_Joining"); + + /** + *

This class comprises the activities that result in an instance of E39 Actor + * to be disassociated from an instance of E74 Group. This class does not imply + * initiative by either party. It may be the initiative of a third party. Typical + * scenarios include the termination of membership in a social organisation, + * ending the employment at a company, divorce, and the end of tenure of somebody + * in an official position.

+ */ + public static final Resource E86_Leaving = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E86_Leaving"); + + /** + *

This class comprises the activities that result in the continuity of management + * and the preservation and evolution of instances of E78 Collection, following + * an implicit or explicit curation plan. It specializes the notion of activity + * into the curation of a collection and allows the history of curation to be + * recorded. Items are accumulated and organized following criteria like subject, + * chronological period, material type, style of art etc. and can be added or + * removed from an E78 Collection for a specific purpose and/or audience. The + * initial aggregation of items of a collection is regarded as an instance of + * E12 Production Event while the activity of evolving, preserving and promoting + * a collection is regarded as an instance of E87 Curation Activity.

+ */ + public static final Resource E87_Curation_Activity = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E87_Curation_Activity"); + + /** + *

This class comprises immaterial items, including but not limited to stories, + * plots, procedural prescriptions, algorithms, laws of physics or images that + * are, or represent in some sense, sets of propositions about real or imaginary + * things and that are documented as single units or serve as topics of discourse. + * This class also comprises items that are “about” something in the sense of + * a subject. In the wider sense, this class includes expressions of psychological + * value such as non-figural art and musical themes. However, conceptual items + * such as types and classes are not instances of E89 Propositional Object. This + * should not be confused with the definition of a type, which is indeed an instance + * of E89 Propositional Object.

+ */ + public static final Resource E89_Propositional_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E89_Propositional_Object"); + + /** + *

This class comprises transfers of legal ownership from one or more instances + * of E39 Actor to one or more other instances of E39 Actor. The class also applies + * to the establishment or loss of ownership of instances of E18 Physical Thing. + * It does not, however, imply changes of any other kinds of right. The recording + * of the donor and/or recipient is optional. It is possible that in an instance + * of E8 Acquisition there is either no donor or no recipient. Depending on the + * circumstances, it may describe: 1. the beginning of ownership 2. the end of + * ownership 3. the transfer of ownership 4. the acquisition from an unknown + * source 5. the loss of title due to destruction of the item It may also describe + * events where a collector appropriates legal title, for example by annexation + * or field collection. The interpretation of the museum notion of "accession" + * differs between institutions. The CRM therefore models legal ownership (E8 + * Acquisition) and physical custody (E10 Transfer of Custody) separately. Institutions + * will then model their specific notions of accession and deaccession as combinations + * of these.

+ */ + public static final Resource E8_Acquisition = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E8_Acquisition"); + + /** + *

This class comprises identifiable symbols and any aggregation of symbols, + * such as characters, identifiers, traffic signs, emblems, texts, data sets, + * images, musical scores, multimedia objects, computer program code or mathematical + * formulae that have an objectively recognizable structure and that are documented + * as single units. It includes sets of signs of any nature, which may serve + * to designate something, or to communicate some propositional content. An instance + * of E90 Symbolic Object does not depend on a specific physical carrier, which + * can include human memory, and it can exist on one or more carriers simultaneously. + * An instance of E90 Symbolic Object may or may not have a specific meaning, + * for example an arbitrary character string. In some cases, the content of an + * instance of E90 Symbolic Object may completely be represented by a serialized + * content model, such.. as the property P3 has note allows for describing this + * content model…P3.1 has type: E55 Type to specify the encoding..

+ */ + public static final Resource E90_Symbolic_Object = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E90_Symbolic_Object"); + + /** + *

This class comprises 4 dimensional point sets (volumes) in physical spacetime + * regardless its true geometric form. They may derive their identity from being + * the extent of a material phenomenon or from being the interpretation of an + * expression defining an extent in spacetime. Intersections of instances of + * E92 Spacetime Volume, Place and Timespan are also regarded as instances of + * E92 Spacetime Volume. An instance of E92 Spacetime Volume is either contiguous + * or composed of a finite number of contiguous subsets. Its boundaries may be + * fuzzy due to the properties of the phenomena it derives from or due to the + * limited precision up to which defining expression can be identified with a + * real extent in spacetime. The duration of existence of an instance of a spacetime + * volume is trivially its projection on time.

+ */ + public static final Resource E92_Spacetime_Volume = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E92_Spacetime_Volume"); + + /** + *

This class comprises instances of E92 Spacetime Volume that result from intersection + * of instances of E92 Spacetime Volume with an instance of E52 Time-Span. The + * identity of an instance of this class is determined by the identities of the + * constituing spacetime volume and the time-span. This class can be used to + * define temporal snapshots at a particular time-span, such as the extent of + * the Roman Empire at 33 B.C., or the extent occupied by a museum object at + * rest in an exhibit. In particular, it can be used to define the spatial projection + * of a spacetime volume during a particular time-span, such as the maximal spatial + * extent of a flood at some particular hour, or all areas covered by the Poland + * within the 20th century AD.

+ */ + public static final Resource E93_Presence = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E93_Presence"); + + /** + *

This class comprises changes of the physical location of the instances of + * E19 Physical Object. Note, that the class E9 Move inherits the property P7 + * took place at (witnessed): E53 Place. This property should be used to describe + * the trajectory or a larger area within which a move takes place, whereas the + * properties P26 moved to (was destination of), P27 moved from (was origin of) + * describe the start and end points only. Moves may also be documented to consist + * of other moves (via P9 consists of (forms part of)), in order to describe + * intermediate stages on a trajectory. In that case, start and end points of + * the partial moves should match appropriately between each other and with the + * overall event.

+ */ + public static final Resource E9_Move = M_MODEL.createResource("http://www.cidoc-crm.org/cidoc-crm/E9_Move"); + +} + + + diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMdig.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMdig.java new file mode 100644 index 0000000..6b1f507 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMdig.java @@ -0,0 +1,525 @@ +package eu.dnetlib.ariadneplus; + +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.Resource; + +/** + * Vocabulary definitions from http://www.ics.forth.gr/isl/CRMext/CRMdig_v3.2.1.rdfs + * + * @author Auto-generated by schemagen on 29 Sep 2017 15:54 + */ +public class CRMdig { + + /** + *

The RDF model that holds the vocabulary terms

+ */ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /** + *

The namespace of the vocabulary as a string

+ */ + public static final String NS = "http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/"; + + /** + *

The URL to the online schema as a string

+ */ + public static final String RDFS_URL = "http://www.ics.forth.gr/isl/CRMext/CRMdig_v3.2.2.rdfs"; + + /** + *

The namespace of the vocabulary as a string

+ * + * @return namespace as String + * @see #NS + */ + public static String getURI() { + return NS; + } + + /** + *

The namespace of the vocabulary as a resource

+ */ + public static final Resource NAMESPACE = M_MODEL.createResource(NS); + + /** + *

This property associates an instance of D7 Digital Machine Event with an instance + * of D1 Digital Object which is the input used to specify the machine action. + * This property is a specialisation of P16 used specific object(was used for).

+ */ + public static final Property L10_had_input = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L10_had_input"); + + public static final Property L10i_was_input_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L10i_was_input_of"); + + /** + *

This property associates an instance of D7 Digital Machine Event with an instance + * of D1 Digital Object which is the output of the activity. This property is + * a specialisation of P94 has created (was created by).

+ */ + public static final Property L11_had_output = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L11_had_output"); + + public static final Property L11i_was_output_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L11i_was_output_of"); + + /** + *

This property associates an instance of D7 Digital Machine Event with an object, + * the D8 Digital Device, which happened with, e.g a capturing event that happened + * on/with a digital camera, etc. This property is a specialisation of P12 occurred + * in the presence of (was present at).

+ */ + public static final Property L12_happened_on_device = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L12_happened_on_device"); + + public static final Property L12i_was_device_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L12i_was_device_for"); + + /** + *

This property associates an instance of D10 Software Execution with a digital + * object used as a parameter during the process.This property is a specialisation + * of L1O had input (was input of).

+ */ + public static final Property L13_used_parameters = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L13_used_parameters"); + + public static final Property L13i_parameters_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L13i_parameters_for"); + + /** + *

This property identifies a digital object transferred by a D12 Data Transfer + * Event. This property is a specialisation of L11 had output (was output of).

+ */ + public static final Property L14_transferred = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L14_transferred"); + + public static final Property L14i_was_transferred_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L14i_was_transferred_by"); + + /** + *

This property identifies a digital device used as a medium on which data are + * transferred through a D12 Data Transfer Event.

+ */ + public static final Property L15_has_sender = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L15_has_sender"); + + public static final Property L15i_was_sender_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L15i_was_sender_for"); + + /** + *

This property identifies a digital device used as a medium to receive data + * through a D12 Data Transfer Event.

+ */ + public static final Property L16_has_receiver = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L16_has_receiver"); + + public static final Property L16i_was_receiver_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L16i_was_receiver_for"); + + /** + *

This property associates an instance of D11 Digital Measurement Event with + * the instance of E55 Type of object to which it applied. This property is a + * specialisation of P125 used object of type.

+ */ + public static final Property L17_measured_thing_of_type = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L17_measured_thing_of_type"); + + public static final Property L17i_was_type_of_thing_measured_by = + M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L17i_was_type_of_thing_measured_by"); + + /** + *

This property identifies a Digital Information Carrier modified in a Digital + * Machine Event. This property is a specialisation of P31 has modified.

+ */ + public static final Property L18_has_modified = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L18_has_modified"); + + public static final Property L18i_was_modified_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L18i_was_modified_by"); + + /** + *

This property associates an instance of a D13 Digital Information Carrier + * with the instance of Digital Object that is stored on it. This property is + * a specialisation of P128 carries.

+ */ + public static final Property L19_stores = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L19_stores"); + + public static final Property L19i_is_stored_on = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L19i_is_stored_on"); + + /** + *

This property associates an instance of D2 Digitization Process with an instance + * of E18 Physical Thing which is a material thing. This property is a specialisation + * of P39 measured (was measured by).

+ */ + public static final Property L1_digitized = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L1_digitized"); + + public static final Property L1i_was_digitized_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L1i_was_digitized_by"); + + /** + *

This property identifies a Data Object that came into existence as a result + * of a D11 Digital Measurement Event. This property is a specialisation of P40 + * observed dimension and L11 had output.

+ */ + public static final Property L20_has_created = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L20_has_created"); + + public static final Property L20i_was_created_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L20i_was_created_by"); + + /** + *

This property associates an instance of a D3 Formal Derivation with the instance + * of D1 Digital Object that is used as a derivation source.

+ */ + public static final Property L21_used_as_derivation_source = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L21_used_as_derivation_source"); + + public static final Property L21i_was_derivation_source_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L21i_was_derivation_source_for"); + + /** + *

This property associates an instance of D3 Formal Derivation with the Digital + * Object it used to create a version of. This property is a specialisation of + * L11 had output.

+ */ + public static final Property L22_created_derivative = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L22_created_derivative"); + + public static final Property L22i_was_derivative_created_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L22i_was_derivative_created_by"); + + /** + *

This property associates an instance of D7 Digital Machine Event with the + * instance of D14 Software that had used. This property is a specialisation + * of P16 used specific object.

+ */ + public static final Property L23_used_software_or_firmware = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L23_used_software_or_firmware"); + + public static final Property L23i_was_software_or_firmware_used_by = + M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L23i_was_software_or_firmware_used_by"); + + /** + *

This property identifies the logfile that was created by a D10 Software Execution + * in order to record all the activities in the system.

+ */ + public static final Property L24_created_logfile = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L24_created_logfile"); + + public static final Property L24i_was_logfile_created_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L24i_was_logfile_created_by"); + + /** + *

This property describes the participation of a Legal Body in being responsible + * for the outcome of a specific activity. This property is a specialisation + * of P14 carried out by.

+ */ + public static final Property L29_has_responsible_organization = + M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L29_has_responsible_organization"); + + public static final Property L29i_is_responsible_organization_for = + M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L29i_is_responsible_organization_for"); + + /** + *

This property associates an instance of D10 Software Execution with an instance + * of D1 Digital Object which is used as a source, a software essential for the + * performance. This property is a specialisation of L10F had input (was input + * of).

+ */ + public static final Property L2_used_as_source = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L2_used_as_source"); + + public static final Property L2i_was_source_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L2i_was_source_for"); + + /** + *

This property describes the activity that is being operated by a person. This + * property is a specialisation of P14 carried out by.

+ */ + public static final Property L30_has_operator = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L30_has_operator"); + + public static final Property L30i_is_operator_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L30i_is_operator_of"); + + /** + *

This property allows the starting point for a D7 Digital Machine Event to + * be situated. This property expresses the approximation of the starting date + * of a time span.

+ */ + public static final Property L31_has_starting_date_time = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L31_has_starting_date-time"); + + /** + *

This property allows the ending point for a D7 Digital Machine Event to be + * situated. This property expresses the approximation of the ending date of + * a time span.

+ */ + public static final Property L32_has_ending_date_time = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L32_has_ending_date-time"); + + /** + *

This property identifies the maker, the actor who is responsible for the production + * of a device, a computer, a digital camera, any kind of a machine that has + * been produced. This property is a shortcut of a more fully developed path + * from CRM E12 Production:P108 has produced:E24 Physical Man-Made Thing. In + * this case, there is no need to describe the more detailed property through + * a production event,so L33 has maker is reccomended to be used instead.

+ */ + public static final Property L33_has_maker = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L33_has_maker"); + + public static final Property L33i_is_maker_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L33i_is_maker_of"); + + /** + *

This property describes the participation of a Legal Body in being contractor + * for the outcome of a specific activity. This property is a specialisation + * of L29_has_responsible_organization.

+ */ + public static final Property L34_has_contractor = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L34_has_contractor"); + + public static final Property L34i_is_contractor_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L34i_is_contractor_for"); + + /** + *

This property describes the participation of a Legal Body in being commissioner + * for the outcome of a specific activity. This property is a specialisation + * of L29_has_responsible_organization.

+ */ + public static final Property L35_has_commissioner = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L35_has_commissioner"); + + public static final Property L35i_is_commissioner_for = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L35i_is_commissioner_for"); + + /** + *

This property describes the associations between objects or areas of objects + * of the RI, with other objects or regions or persons, places, events..

+ */ + public static final Property L43_annotates = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L43_annotates"); + + public static final Property L43i_is_annotated_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L43i_is_annotated_by"); + + /** + *

This property is a specialisation of P3 has note and associates a comment + * with an instance of an object E1 CRM Entity.

+ */ + public static final Property L47_has_comment = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L47_has_comment"); + + /** + *

This property identifies the D29 Annotation Object (associations) that came + * into existence as a result of a D30 Annotation Event. This property is a specialisation + * of P94 has created.

+ */ + public static final Property L48_created_annotation = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L48_created_annotation"); + + public static final Property L48i_was_annotation_created_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L48i_was_annotation_created_by"); + + /** + *

This property describes the association between a particular area declared + * in an original digital object. This property is a specialisation of P106 is + * composed of.

+ */ + public static final Property L49_is_primary_area_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L49_is_primary_area_of"); + + public static final Property L49i_has_primary_area = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L49i_has_primary_area"); + + /** + *

This property associates an instance of E1 Entity with an instance of resource + * used as a preferred lexical label. This property is a specialisation of rdf + * schema label.

+ */ + public static final Property L4_has_preferred_label = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L4_has_preferred_label"); + + /** + *

This property describes the association between an area and the digital object + * to which it is propagated. This property is a specialisation of P106 is composed + * of.

+ */ + public static final Property L50_is_propagated_area_of = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L50_is_propagated_area_of"); + + public static final Property L50i_has_propagated_area = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L50i_has_propagated_area"); + + /** + *

This property defines a personal name used to identify a person.

+ */ + public static final Property L51_has_first_name = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L51_has_first_name"); + + /** + *

This property defines the last name used to identify a person. This property + * is a specialisation of L4 has preferred label.

+ */ + public static final Property L52_has_last_name = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L52_has_last_name"); + + /** + *

This property describes a non unique identification applied to E1 CRM Entity.

+ */ + public static final Property L53_is_not_uniquely_identified_by = + M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L53_is_not_uniquely_identified_by"); + + /** + *

This property describes the association kind of "same as" between objects. + * It is used to declare that two or more objects are exactly the same.

+ */ + public static final Property L54_is_same_as = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L54_is_same-as"); + + /** + *

This property describes the association kind of "same as" between objects. + * It is used to declare that two or more objects are exactly the same.

+ */ + public static final Property L54i_is_same_as = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L54i_is_same-as"); + + /** + *

This property records the inventory number that was used to identify an instance + * of E1 CRM Entity at the time this property was record. This property is a + * specialisation of L53F is not uniquely identified by.

+ */ + public static final Property L55_has_inventory_no = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L55_has_inventory_no"); + + /** + *

This property records the pixel width of the data object; it approximates + * a dimension that is part of the image data analysis.This property is a specialisation + * of P90 has value.

+ */ + public static final Property L56_has_pixel_width = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L56_has_pixel_width"); + + /** + *

This property records the pixel height of the data object; it approximates + * a dimension that is part of the image data analysis.This property is a specialisation + * of P90 has value.

+ */ + public static final Property L57_has_pixel_height = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L57_has_pixel_height"); + + /** + *

This property records the serial number that was assigned to identify an instance + * of E22 Man Made Object. This property is a specialisation of L53 is not uniquely + * identified by.

+ */ + public static final Property L59_has_serial_number = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L59_has_serial_number"); + + /** + *

This property describes the CRM Entities documented by instances of Digitization + * Processes. This property is a specialisation of P140 assigned attribute to.

+ */ + public static final Property L60_documents = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L60_documents"); + + public static final Property L60i_is_documented_by = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L60i_is_documented_by"); + + /** + *

This property describes the minimum period of time covered by a digital machine + * event. It identifies the minimum extent of the event. This property is a specialisation + * of P81 ongoing throughout.

+ */ + public static final Property L61_was_ongoing_at = M_MODEL.createProperty("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/L61_was_ongoing_at"); + + /** + *

This class comprises events by which a digital device runs a software program + * or a series of computing operations on a digital object as a single task, + * which is completely determined by its digital input, the software and the + * generic properties of the device.

+ */ + public static final Resource D10_Software_Execution = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D10_Software_Execution"); + + /** + *

This class comprises actions measuring physical properties using a digital + * device, that are determined by a systematic procedure and creates an instance + * of D9 Data Object, which is stored on an instance of D13 Digital Information + * Carrier. In contrast to instances of D10 Software Execution, environmental + * factors have an intended influence on the outcome of an instance of D11 Digital + * Measurement Event. Measurement devices may include running distinct software, + * such as the RAW to JPEG conversion in digital cameras. In this case, the event + * is regarded as instance of both classes, D10 Software Execution and D11 Digital + * Measurement Event.

+ */ + public static final Resource D11_Digital_Measurement_Event = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D11_Digital_Measurement_Event"); + + /** + *

This class comprises events that transfer a digital object from one digital + * carrier to another. Normally, the digital object remains the same. If in general + * or by observation the transfer implies or has implied some data corruption, + * the change of the digital objects may be documented distinguishing input and + * output rather than instantiating the property L14 transferred (was transferred + * by).

+ */ + public static final Resource D12_Data_Transfer_Event = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D12_Data_Transfer_Event"); + + /** + *

This class comprises all instances of E84 Information Carrier that are explicitly + * designed to be used as persistent digital physical carriers of instances of + * D1 Digital Object. A D13 Digital Information Carrier may or may not contain + * information, e.g., an empty diskette.

+ */ + public static final Resource D13_Digital_Information_Carrier = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D13_Digital_Information_Carrier"); + + /** + *

This class comprises software codes,computer programs,procedures, and functions + * that are used to operate a system of digital objects.

+ */ + public static final Resource D14_Software = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D14_Software"); + + /** + *

This class comprises identifiable immaterial items that can be represented + * as sets of bit sequences, such as data sets, e-texts, images, audio or video + * items, software, etc., and are documented as single units. Any aggregation + * of instances of D1 Digital Object into a whole treated as single unit is also + * regarded as an instance of D1 Digital Object. This means that for instance, + * the content of a DVD, an XML file on it, and an element of this file, are + * regarded as distinct instances of D1 Digital Object, mutually related by the + * P106 is composed of (forms part of) property. A D1 Digital Object does not + * depend on a specific physical carrier, and it can exist on one or more carriers + * simultaneously.

+ */ + public static final Resource D1_Digital_Object = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D1_Digital_Object"); + + /** + *

This class comprises the proper noun name that identifies a person that acts + * as an entity.

+ */ + public static final Resource D21_Person_Name = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D21_Person_Name"); + + /** + *

+ */ + public static final Resource D23_Room = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D23_Room"); + + /** + *

This class comprises objects that make propositions about other artefacts. + * Instances of this class are not the attributes themselves, by which things + * are annotated, but represent the connection between the concepts related in + * a proposition, and the activities of creation, modification and deletion.

+ */ + public static final Resource D29_Annotation_Object = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D29_Annotation_Object"); + + /** + *

This class comprises events that result in the creation of instances of D9 + * Data Object that represent the appearance and/or form of an instance of E18 + * Physical Thing such as paper documents, statues, buildings, paintings, etc. + * A particular case is the analogue-to-digital conversion of audiovisual material. + * This class represents the transition from a material thing to an immaterial + * representation of it. The characteristic subsequent processing steps on digital + * objects are regarded as instances of D3 Formal Derivation.

+ */ + public static final Resource D2_Digitization_Process = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D2_Digitization_Process"); + + /** + *

This class comprises events that describe the creation of associations (Annotation + * Objects) between objects or areas of objects of the Repository, with other + * objects or regions or persons, places, events. It is the event that creates + * the Annotation Object.

+ */ + public static final Resource D30_Annotation_Event = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D30_Annotation_Event"); + + /** + *

This class describes a part (of any shape or size) of interest in basically + * any media object stored in the Object Repository, i.e., a text, an image, + * a video or a 3D model. It points to content consisting of just a portion or + * area of a file. In some contexts, however, the area can also point to content + * represented by an integral (i.e., proper) file. It is equal to the METS AREA + * element

+ */ + public static final Resource D35_Area = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D35_Area"); + + /** + *

This class comprises events that result in the creation of a D1 Digital Object + * from another one following a deterministic algorithm, such that the resulting + * instance of digital object shares representative properties with the original + * object. In other words, this class describes the transition from an immaterial + * object referred to by property L21 used as derivation source (was derivation + * source for) to another immaterial object referred to by property L22 created + * derivative (was derivative created by) preserving the representation of some + * things but in a different form. Characteristic examples are colour corrections, + * contrast changes and resizing of images.

+ */ + public static final Resource D3_Formal_Derivation = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D3_Formal_Derivation"); + + /** + *

This class comprises events that happen on physical digital devices following + * a human activity that intentionally caused its immediate or delayed initiation + * and results in the creation of a new instance of D1 Digital Object on behalf + * of the human actor. The input of a D7 Digital Machine Event may be parameter + * settings and/or data to be processed. Some D7 Digital Machine Events may form + * part of a wider E65 Creation event. In this case, all machine output of the + * partial events is regarded as creation of the overall activity.

+ */ + public static final Resource D7_Digital_Machine_Event = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D7_Digital_Machine_Event"); + + /** + *

This class comprises identifiable material items such as computers, scanners, + * cameras, etc. that have the capability to process or produce instances of + * D1 Digital Object.

+ */ + public static final Resource D8_Digital_Device = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D8_Digital_Device"); + + /** + *

This class comprises instances of D1 Digital Object that are the direct result + * of a digital measurement or a formal derivative of it, containing quantitative + * properties of some physical things or other constellations of matter.

+ */ + public static final Resource D9_Data_Object = M_MODEL.createResource("http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/D9_Data_Object"); + +} + diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMpe.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMpe.java new file mode 100644 index 0000000..d611508 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/CRMpe.java @@ -0,0 +1,310 @@ +package eu.dnetlib.ariadneplus; + +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.Resource; + +/** + * Vocabulary definitions from http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs + * + * @author Auto-generated by schemagen on 29 Sep 2017 15:54 + */ +public class CRMpe { + + /** + *

The RDF model that holds the vocabulary terms

+ */ + private static final Model M_MODEL = ModelFactory.createDefaultModel(); + + /** + *

The namespace of the vocabulary as a string

+ */ + public static final String NS = "http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/"; + + /** + *

The URL to the online schema as a string

+ */ + public static final String RDFS_URL = "http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs"; + + /** + *

The namespace of the vocabulary as a string

+ * + * @return namespace as String + * @see #NS + */ + public static String getURI() { + return NS; + } + + /** + *

The namespace of the vocabulary as a resource

+ */ + public static final Resource NAMESPACE = M_MODEL.createResource(NS); + + public static final Property PP11_curates_volatile_digital_object = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP11_curates_volatile_digital_object"); + + public static final Property PP11i_is_volatile_digital_object_curated_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP11i_is_volatile_digital_object_curated_by"); + + public static final Property PP12_curates_volatile_software = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP12_curates_volatile_software"); + + public static final Property PP12i_is_volatile_software_curated_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP12i_is_volatile_software_curated_by"); + + public static final Property PP13_curates_volatile_dataset = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP13_curates_volatile_dataset"); + + public static final Property PP13i_is_volatile_dataset_curated_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP13i_is_volatile_dataset_curated_by"); + + public static final Property PP14_runs_on_request = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP14_runs_on_request"); + + public static final Property PP14i_is_run_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP14i_is_run_by"); + + public static final Property PP15_delivers_on_request = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP15_delivers_on_request"); + + public static final Property PP15i_is_delivered_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP15i_is_delivered_by"); + + public static final Property PP16_has_persistent_digital_object_part = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP16_has_persistent_digital_object_part"); + + public static final Property PP16i_is_persistent_digital_object_part_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP16i_is_persistent_digital_object_part_of"); + + public static final Property PP17_has_snapshot = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP17_has_snapshot"); + + public static final Property PP17i_is_snapshot_of = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP17i_is_snapshot_of"); + + public static final Property PP18_has_digital_object_part = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP18_has_digital_object_part"); + + public static final Property PP18i_is_digital_object_part_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP18i_is_digital_object_part_of"); + + public static final Property PP19_has_persistent_software_part = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP19_has_persistent_software_part"); + + public static final Property PP19i_is_persistent_software_part_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP19i_is_persistent_software_part_of"); + + public static final Property PP1_currently_offers = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP1_currently_offers"); + + public static final Property PP1i_is_currently_offered_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP1i_is_currently_offered_by"); + + public static final Property PP20_has_persistent_dataset_part = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP20_has_persistent_dataset_part"); + + public static final Property PP20i_is_persistent_dataset_part_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP20i_is_persistent_dataset_part_of"); + + public static final Property PP21_has_software_part = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP21_has_software_part"); + + public static final Property PP21i_is_software_part_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP21i_is_software_part_of"); + + public static final Property PP22_has_release = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP22_has_release"); + + public static final Property PP22i_is_release_of = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP22i_is_release_of"); + + public static final Property PP23_has_dataset_part = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP23_has_dataset_part"); + + public static final Property PP23i_is_dataset_part_of = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP23i_is_dataset_part_of"); + + public static final Property PP24_has_dataset_snapshot = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP24_has_dataset_snapshot"); + + public static final Property PP24i_is_dataset_snapshot_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP24i_is_dataset_snapshot_of"); + + public static final Property PP25_has_maintaining_RI = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP25_has_maintaining_RI"); + + public static final Property PP25i_is_maintaining_RI_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP25i_is_maintaining_RI_of"); + + public static final Property PP28_has_designated_access_point = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP28_has_designated_access_point"); + + public static final Property PP28i_is_designated_access_point_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP28i_is_designated_access_point_of"); + + public static final Property PP29_uses_access_protocol = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP29_uses_access_protocol"); + + public static final Property PP29i_is_access_protocol_used_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP29i_is_access_protocol_used_by"); + + public static final Property PP2_provided_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP2_provided_by"); + + public static final Property PP2i_provides = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP2i_provides"); + + public static final Property PP31_uses_curation_plan = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP31_uses_curation_plan"); + + public static final Property PP31i_is_curation_plan_used_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP31i_is_curation_plan_used_by"); + + public static final Property PP32_curates = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP32_curates"); + + public static final Property PP32i_is_curated_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP32i_is_curated_by"); + + public static final Property PP39_is_metadata_for = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP39_is_metadata_for"); + + public static final Property PP39i_has_metadata = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP39i_has_metadata"); + + public static final Property PP40_created_successor_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP40_created_successor_of"); + + public static final Property PP40i_is_deprecated_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP40i_is_deprecated_by"); + + public static final Property PP41_is_index_of = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP41_is_index_of"); + + public static final Property PP41i_is_indexed_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP41i_is_indexed_by"); + + public static final Property PP42_has_declarative_time = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP42_has_declarative_time"); + + public static final Property PP43_supported_project_activity = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP43_supported_project_activity"); + + public static final Property PP43i_is_project_activity_supported_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP43i_is_project_activity_supported_by"); + + public static final Property PP44_has_maintaining_team = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP44_has_maintaining_team"); + + public static final Property PP44i_is_maintaining_team_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP44i_is_maintaining_team_of"); + + public static final Property PP45_has_competency = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP45_has_competency"); + + public static final Property PP45i_is_competency_of = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP45i_is_competency_of"); + + public static final Property PP46_brokers_access_to = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP46_brokers_access_to"); + + public static final Property PP46i_has_access_brokered_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP46i_has_access_brokered_by"); + + public static final Property PP47_has_protocol_type = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP47_has_protocol_type"); + + public static final Property PP47i_is_protocol_type_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP47i_is_protocol_type_of"); + + public static final Property PP48_uses_protocol_parameter = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP48_uses_protocol_parameter"); + + public static final Property PP48i_is_protocol_parameter_of = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP48i_is_protocol_parameter_of"); + + public static final Property PP49_provides_access_point = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP49_provides_access_point"); + + public static final Property PP49i_is_access_point_provided_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP49i_is_access_point_provided_by"); + + public static final Property PP4_hosts_object = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP4_hosts_object"); + + public static final Property PP4i_is_object_hosted_by = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP4i_is_object_hosted_by"); + + public static final Property PP50_accessible_at = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP50_accessible_at"); + + public static final Property PP50i_provides_access_to = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP50i_provides_access_to"); + + public static final Property PP6_hosts_digital_object = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP6_hosts_digital_object"); + + public static final Property PP6i_is_digital_object_hosted_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP6i_is_digital_object_hosted_by"); + + public static final Property PP7_hosts_software_object = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP7_hosts_software_object"); + + public static final Property PP7i_is_software_object_hosted_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP7i_is_software_object_hosted_by"); + + public static final Property PP8_hosts_dataset = M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP8_hosts_dataset"); + + public static final Property PP8i_is_dataset_hosted_by = + M_MODEL.createProperty("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PP8i_is_dataset_hosted_by"); + + public static final Resource PE10_Digital_Curating_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE10_Digital_Curating_Service"); + + public static final Resource PE11_Software_Curating_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE11_Software_Curating_Service"); + + public static final Resource PE12_Data_Curating_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE12_Data_Curating_Service"); + + public static final Resource PE13_Software_Computing_E_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE13_Software_Computing_E-Service"); + + public static final Resource PE14_Software_Delivery_E_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE14_Software_Delivery_E-Service"); + + public static final Resource PE15_Data_E_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE15_Data_E-Service"); + + public static final Resource PE16_Curated_Software_E_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE16_Curated_Software_E-Service"); + + public static final Resource PE17_Curated_Data_E_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE17_Curated_Data_E-Service"); + + public static final Resource PE18_Dataset = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE18_Dataset"); + + public static final Resource PE19_Persistent_Digital_Object = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE19_Persistent_Digital_Object"); + + public static final Resource PE1_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE1_Service"); + + public static final Resource PE20_Volatile_Digital_Object = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE20_Volatile_Digital_Object"); + + public static final Resource PE21_Persistent_Software = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE21_Persistent_Software"); + + public static final Resource PE22_Persistent_Dataset = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE22_Persistent_Dataset"); + + public static final Resource PE23_Volatile_Software = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE23_Volatile_Software"); + + public static final Resource PE24_Volatile_Dataset = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE24_Volatile_Dataset"); + + public static final Resource PE25_RI_Consortium = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE25_RI_Consortium"); + + public static final Resource PE26_RI_Project = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE26_RI_Project"); + + public static final Resource PE28_Curation_Plan = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE28_Curation_Plan"); + + public static final Resource PE29_Access_Point = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE29_Access_Point"); + + public static final Resource PE2_Hosting_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE2_Hosting_Service"); + + public static final Resource PE32_Curated_Thing = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE32_Curated_Thing"); + + public static final Resource PE33_E_Access_Brokering_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE33_E-Access_Brokering_Service"); + + public static final Resource PE34_Team = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE34_Team"); + + public static final Resource PE35_Project = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE35_Project"); + + public static final Resource PE36_Competency_Type = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE36_Competency_Type"); + + public static final Resource PE37_Protocol_Type = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE37_Protocol_Type"); + + public static final Resource PE38_Schema = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE38_Schema"); + + public static final Resource PE3_Curating_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE3_Curating_Service"); + + public static final Resource PE5_Digital_Hosting_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE5_Digital_Hosting_Service"); + + public static final Resource PE6_Software_Hosting_Service = + M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE6_Software_Hosting_Service"); + + public static final Resource PE7_Data_Hosting_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE7_Data_Hosting_Service"); + + public static final Resource PE8_E_Service = M_MODEL.createResource("http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/PE8_E-Service"); + +} + diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CKANUtils.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CKANUtils.java new file mode 100644 index 0000000..c2cf8c6 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CKANUtils.java @@ -0,0 +1,110 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created by Alessia Bardi on 16/07/2018. + * + * @author Alessia Bardi + */ +public class CKANUtils { + + private static final Log log = LogFactory.getLog(CKANUtils.class); + /* + * The CKAN groups correspond to AriadnePlus RI Consortia + */ + public static String Ariadne_group = "ariadne-consortium"; + public static String Cendari_group = "cendari-consortium"; + public static String Iccu_group = "central-institute-for-the-union-catalogue-of-italian-libraries-and-bibliographic-information-iccu"; + public static String Clarin_group = "clarin-eu"; + public static String DariahEU_group = "dariah-eu"; + public static String DariahGR_group = "dariah-gr-consortium"; + public static String DariahIT_group = "dariah-it"; + public static String DariahDE_group = "dariah-de-consortium"; + public static String EHRI_group = "ehri-consortium"; + public static String Flarenet_group = "flarenet"; + public static String Humanum_group = "huma-num-consortium"; + public static String Metashare_group = "meta-net-network-of-excellence"; + public static String AriadnePlus_group = "ariadneplus-project-consortium"; + + /* + * The CKAN orgs correspond to AriadnePlus aggregator data sources + */ + public static String Ariadne_org = "ariadne"; + public static String Cendari_org = "cendari"; + public static String CulturaItalia_org = "cultura-italia"; + public static String Clarin_org = "clarin"; + public static String DariahDE_org = "dariah-de"; + public static String DariahGR_org = "dariah-gr"; + public static String DariahIT_org = "dariahit"; + public static String EHRI_org = "european-holocaust-research-infrastructure"; + public static String lre_org = "lre-map"; + public static String isidore_org = "huma-num--isidore"; + public static String nakala_org = "huma-num--nakala"; + public static String Metashare_org = "metashare"; + public static String AriadnePlus_org = "ariadneplus_registry"; + public static String AriadnePlus_wp3_org = "ariadneplus_wp3"; + public static String AriadnePlus_wp4_org = "ariadneplus_wp4"; + public static String AriadnePlus_wp7_org = "ariadneplus_wp7"; + public static String AriadnePlus_wp8_org = "ariadneplus_wp8"; + + /* + * The CKAN types correspond to the following strings, which are human readable names for PE classes: + * Project, Service, Actors, Datasets, Software, Physical Collections, Standards + */ + public static String Project_type = "Project"; + public static String Service_type = "Service"; + public static String Actor_type = "Actor"; + public static String Dataset_type = "Dataset"; + public static String Software_type = "Software"; + public static String Collection_type = "Physical Collection"; + public static String DesignOrProcedure_type = "Standard"; + + + public static String getCkanGroup(final String riConsortiumLabel) { + switch(riConsortiumLabel){ + case "Ariadne Consortium": return Ariadne_group; + case "Cendari Consortium": return Cendari_group; + case "Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU)": return Iccu_group; + case "Clarin-EU": return Clarin_group; + case "Dariah EU": return DariahEU_group; + case "Dariah DE": return DariahDE_group; + case "Dariah-GR Consortium" : return DariahGR_group; + case "EHRI Consortium": return EHRI_group; + case "FLaReNet": return Flarenet_group; + case "Huma-num Consortium": return Humanum_group; + case "META-NET Network of Excellence": return Metashare_group; + case "DARIAH-IT": return DariahIT_group; + case "AriadnePlus Project Consortium": return AriadnePlus_group; + default: + log.warn("No Ckan group matches RI consortium label "+riConsortiumLabel); + return null; + } + } + + public static String getCKanOrg(final String datasourceName){ + switch(datasourceName){ + case "ARIADNE": return Ariadne_org; + case "European Holocaust Research Infrastructure": return EHRI_org; + case "Cultura Italia": return CulturaItalia_org; + case "ARIADNEPLUS": return AriadnePlus_org; + case "ARIADNEPLUS WP3": return AriadnePlus_wp3_org; + case "ARIADNEPLUS WP4": return AriadnePlus_wp4_org; + case "ARIADNEPLUS WP7": return AriadnePlus_wp7_org; + case "ARIADNEPLUS WP8": return AriadnePlus_wp8_org; + case "METASHARE": return Metashare_org; + case "LRE MAP": return lre_org; + case "Huma-Num - Isidore": return isidore_org; + case "Huma-Num - Nakala": return nakala_org; + case "DARIAH-DE": return DariahDE_org; + case "DARIAH-IT ": return DariahIT_org; + case "DARIAH-GR":return DariahGR_org; + case "CLARIN": return Clarin_org; + case "CENDARI": return Cendari_org; + default: + log.warn("No Ckan org matches data source name "+datasourceName); + return null; + } + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIClient.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIClient.java new file mode 100644 index 0000000..cbcffb3 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIClient.java @@ -0,0 +1,197 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +import com.google.common.collect.Lists; +import eu.dnetlib.ariadneplus.jrr.AriadnePlusRegistryResource; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.client.utils.URIBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 08/03/2018. + * + * @author Alessia Bardi + */ +@Component +public class CatalogueAPIClient { + + private static final Log log = LogFactory.getLog(CatalogueAPIClient.class); + + @Value("${gcube.catalogue.baseurl}") + private String baseURL; + private final String itemPath = "items/"; + @Value("${gcube.registry.application.token}") + private String applicationToken; + @Value("${gcube.uri.resolver}") + private String uriResolver; + private String resolverBodyTemplate = "{ \"entity_name\": \"%s\" }"; + private String purgeBodyTemplate = "{\"id\":\"%s\"}"; + + private HttpHeaders headersForResolver; + private HttpHeaders headersForCatalogue; + + @Autowired + private RestTemplate restTemplate; + + public CatalogueAPIClient(){ + headersForResolver = new HttpHeaders(); + headersForResolver.setContentType(MediaType.APPLICATION_JSON); + + headersForCatalogue = new HttpHeaders(); + headersForCatalogue.setContentType(MediaType.APPLICATION_JSON); + headersForCatalogue.setAccept(Lists.newArrayList(MediaType.APPLICATION_JSON)); + headersForCatalogue.set("gcube-token", getApplicationToken()); + } + + + /** + * Calls the ariadneplus resolver to get the name to use for the catalogue + * @param resName Given a AriadnePlus URL like: http://ariadneplus.d4science.org/handle/Ariadne/AriadnePortal/rhdsq5xm3e40, the resName is Ariadne/AriadnePortal/rhdsq5xm3e40. + * @return the name as computed by the AriadnePlus resolver. Null if the request was not successfull. + */ + public String getNameForCatalogue(final String resName) throws URISyntaxException { + log.debug("Calling AriadnePlus resolver for "+resName); + String body = String.format(resolverBodyTemplate, resName); + HttpEntity entity = new HttpEntity(body, headersForResolver); + URI uri = new URIBuilder(getUriResolver()).build(); + log.debug("Resolver at "+getUriResolver()+" post body:\n"+body); + ResponseEntity res = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class); + if(res.getStatusCode().is2xxSuccessful()){ + String resolved = res.getBody(); + log.debug(String.format("AriadnePlus resolver resolved %s with %s", resName, resolved )); + return resolved; + } + else{ + log.debug(String.format("AriadnePlus resolver returned %s with cause %s for %s", res.getStatusCodeValue(), res.getStatusCode().getReasonPhrase(), resName)); + return null; + } + } + + protected boolean isRegistered(final String resCatName) throws AriadnePlusPublisherException { + log.debug(String.format("Catalogue --> Checking if item %s exists", resCatName)); + HttpEntity entity = new HttpEntity(headersForCatalogue); + try { + URI uri = new URIBuilder(getBaseURL()+itemPath).build(); + ResponseEntity response + = restTemplate.exchange(uri + "/"+resCatName, HttpMethod.GET, entity, String.class); + return response.getStatusCode().is2xxSuccessful(); + } catch (Throwable t) { + throw new AriadnePlusPublisherException(t); + } + } + + @Deprecated + public AriadnePlusRegistryResource getRegistered(final String resCatName) throws AriadnePlusPublisherException { + log.debug(String.format("Catalogue --> Checking if item %s exists", resCatName)); + HttpEntity entity = new HttpEntity(headersForCatalogue); + try { + URI uri = new URIBuilder(getBaseURL()+itemPath).build(); + ResponseEntity response + = restTemplate.exchange(uri + "/"+resCatName, HttpMethod.GET, entity, String.class); + if(response.getStatusCode().is2xxSuccessful()){ + CatalogueAPIResponse body = new CatalogueAPIResponse(); + body.setResponseBody(response.getBody()); + AriadnePlusRegistryResource r = body.getAriadnePlusRegistryResource(); + log.debug(String.format("Resource %s is in the catalogue with uuid %s", resCatName, r.getUuid())); + return r; + } + else{ + log.debug(String.format("Resource %s is not in the catalogue yet", resCatName)); + return null; + } + } catch (Throwable t) { + throw new AriadnePlusPublisherException(t); + } + } + + public boolean doRegister(final String json, final String resCatName) throws URISyntaxException, IOException { + log.debug(String.format("Catalogue --> Registering item %s : %s", resCatName, json)); + return doCatalogueCall(json, resCatName, HttpMethod.POST); + } + + public boolean doUpdate(final String json, final String resCatName) throws IOException, URISyntaxException { + log.debug(String.format("Catalogue --> Updating item %s : %s", resCatName, json)); + return doCatalogueCall(json, resCatName, HttpMethod.PUT); + } + + protected boolean doCatalogueCall(final String json, final String resCatName, final HttpMethod method) throws URISyntaxException, IOException { + HttpEntity entity = new HttpEntity(json, headersForCatalogue); + URI uri = new URIBuilder(getBaseURL()+itemPath).build(); + ResponseEntity res = restTemplate.exchange(uri, method, entity, String.class); + if (res.getStatusCode().is2xxSuccessful()) { + return true; + } else { + log.error(String.format("Method %s on resource %s failed with code %s, reason: %s", method.name(), resCatName, res.getStatusCodeValue(), res.getBody())); + return false; + } + } + + protected boolean purgeItem(final String resCatName) throws URISyntaxException, AriadnePlusPublisherException { + log.debug(String.format("Catalogue --> Purge Item %s", resCatName)); + HttpEntity entity = new HttpEntity(headersForCatalogue); + try { + URI uri = new URIBuilder(getBaseURL()+itemPath).build(); + ResponseEntity res + = restTemplate.exchange(uri + "/"+resCatName+"?purge=true", HttpMethod.DELETE, entity, String.class); + if (res.getStatusCode().is2xxSuccessful()) { + return true; + } else { + log.error(String.format("Cannot purge item %s. HTTP error code %s, reason: %s", resCatName, res.getStatusCodeValue(), res.getBody())); + return false; + } + } catch (Throwable t) { + throw new AriadnePlusPublisherException(t); + } + } + + + public String getBaseURL() { + return baseURL; + } + + public void setBaseURL(final String baseURL) { + this.baseURL = baseURL; + } + + public String getApplicationToken() { + return applicationToken; + } + + public void setApplicationToken(final String applicationToken) { + this.applicationToken = applicationToken; + } + + public RestTemplate getRestTemplate() { + return restTemplate; + } + + public void setRestTemplate(final RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + public String getUriResolver() { + return uriResolver; + } + + public void setUriResolver(final String uri_resolver) { + this.uriResolver = uriResolver; + } + + public String getPurgeBodyTemplate() { + return purgeBodyTemplate; + } + + public void setPurgeBodyTemplate(final String purgeBodyTemplate) { + this.purgeBodyTemplate = purgeBodyTemplate; + } + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponse.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponse.java new file mode 100644 index 0000000..2134492 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponse.java @@ -0,0 +1,71 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.IOException; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.ariadneplus.jrr.AriadnePlusRegistryResource; + +/** + * Created by Alessia Bardi on 08/03/2018. + * + * @author Alessia Bardi + * TODO: reimplement for new RESTful API. Not needed with new API + */ +@Deprecated +public class CatalogueAPIResponse { + + private JsonNode response; + + public void setResponseBody(final String responseBody) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + response = mapper.readTree(responseBody); + } + + public boolean isSuccess(){ + return response.get("success").asBoolean(); + } + + + public AriadnePlusRegistryResource getAriadnePlusRegistryResource() throws IOException { + if(!hasAriadnePlusRegistryResource()) return null; + else{ + JsonNode result = response.get("result"); + return parseResult(result); + } + } + + public boolean hasAriadnePlusRegistryResource(){ + JsonNode result = response.path("result"); + return !result.isMissingNode(); + } + + + public String getErrorMessage(){ + if(isSuccess()) return ""; + //TODO: tell d4science guys that error messages sometimes are in error.name, sometimes in message + JsonNode message = response.path("message"); + if(!message.isMissingNode()) return message.toString(); + else{ + JsonNode error = response.get("error"); + if(!error.isMissingNode()){ + return error.toString(); + } + } + return "Error message not available in error or message fields"; + } + + protected AriadnePlusRegistryResource parseResult(JsonNode result) throws IOException { + String uuid = result.get("id").asText(); + String type = null; + JsonNode extras = result.get("extras"); + for(JsonNode jn : extras){ + String key = jn.get("key").asText(); + if(key.equals("system:type")){ + type = jn.get("value").asText(); + } + } + return new AriadnePlusRegistryResource().setJson(result.asText()).setType(type).setUuid(uuid); + } + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueLicense.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueLicense.java new file mode 100644 index 0000000..cfa4b71 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueLicense.java @@ -0,0 +1,55 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import org.apache.commons.lang3.StringUtils; + +/** + * Created by Alessia Bardi on 06/04/2018. + * + * @author Alessia Bardi + * + * Enum with a subset of the licenses supported by the CKan catalogue. For the full list, see SERVICE_ENDPOINT/api/licenses/list/ + */ +public enum CatalogueLicense { + NotSpecified("notspecified"), + OtherOpen("other-open"), OtherPublicDomain("other-pd"), OtherAttribution("other-at"), OtherNonCommercial("other-nc"), + CC0("CC0-1.0"), CCBY("CC-BY-4.0"), CCBYSA("CC-BY-SA-4.0"), CCBYNC("CC-BY-NC-4.0"), CCBYND("CC-BY-ND-4.0"), CCBYNCSA("CC-BY-NC-SA-4.0"), CCBYNCND("CC-BY-NC-ND-4.0"), + AFL("AFL-3.0"), APL("APL-1.0"), AGPL("AGPL-3.0"), Apache1_1("Apache-1.1"), Apache2("Apache-2.0"), APSL2("APSL-2.0"), + GPL2("GPL-2.0"), GPL3("GPL-3.0"), LGPL2_1("LGPL-2.1"), LGPL3("LGPL-3.0"), + EUDataGrid("EUDatagrid"), EUPL1_1("EUPL-1.1"), Fair("Fair"), MIT("MIT"), MozillaPublic("MPL-1.1"); + + + private String id; + + public String getId() { + return id; + } + + CatalogueLicense(String id) { + this.id = id; + } + + public static CatalogueLicense getCatalogueLicenseFor(final String license){ + //TODO: get the best from the data we have, if we are able to clean the string, this method wil be much simpler... + //TODO: not specified is not a valid value for the new gcat API and requesting the list of licensing fails, ask Luca. + if(StringUtils.isBlank(license)) return NotSpecified; + if(license.equalsIgnoreCase("CC") || license.equalsIgnoreCase("Free/ CC") || license.equalsIgnoreCase("Creative Commons CC0 1.0 Universal Public Domain Dedication")) return CC0; + if(license.equalsIgnoreCase("CC-BY") || license.equalsIgnoreCase("CC BY")) return CCBY; + if(license.equalsIgnoreCase("CC-BY-SA") || license.equalsIgnoreCase("Attribute-share-alike (CC-BY-SA) license") || license.equalsIgnoreCase("CC BY-SA")) return CCBYSA; + if(license.equalsIgnoreCase("CC-BY-SA-NC") || license.equalsIgnoreCase("Creative Commons BY-NC-SA")) return CCBYNCSA; + if(license.equalsIgnoreCase("Open Access") || license.equalsIgnoreCase("OpenSource")) return OtherOpen; + if(license.equalsIgnoreCase("MIT") || license.equalsIgnoreCase("MIT LICENSE")) return MIT; + if(license.equalsIgnoreCase("APACHE 2.0")|| license.equalsIgnoreCase("Apache License 2.0") || license.equalsIgnoreCase("Apache License, Version 2.0")) return Apache2; + if(license.equalsIgnoreCase("GNU GPL v2")) return GPL2; + if(license.equalsIgnoreCase("GPLv3") || license.equalsIgnoreCase("GPL v3")) return GPL3; + if(license.equalsIgnoreCase("LGPL V3") || license.equalsIgnoreCase("LGPL V3.0")) return LGPL3; + else return NotSpecified; + } + +} + + + + + + + diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistrator.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistrator.java new file mode 100644 index 0000000..0b87735 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistrator.java @@ -0,0 +1,709 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.fasterxml.jackson.core.JsonEncoding; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import eu.dnetlib.ariadneplus.rdf.ResourceReader; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.rdf.model.StmtIterator; +import org.apache.jena.vocabulary.RDF; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Created by Alessia Bardi on 21/11/2017. + * + * @author Alessia Bardi + */ +@Component +public class CatalogueRegistrator { + + private static final Log log = LogFactory.getLog(CatalogueRegistrator.class); + private final String ARIADNEPLUS_BASE_URL = "http://ariadneplus.d4science.org"; + + @Autowired + private ResourceReader resourceReader; + + @Autowired + private CatalogueAPIClient catalogueAPIClient; + + public String register(final Resource resource, final Resource type, final String datasourceName) + throws IOException, AriadnePlusPublisherException, URISyntaxException, InterruptedException { + String resURI = resource.getURI(); + log.debug(String.format("Catalogue --> Processing resource : %s with type: %s from source: %s", resURI, type.getLocalName(), datasourceName)); + String resCatName = catalogueAPIClient.getNameForCatalogue(resURI.substring(resURI.lastIndexOf("handle/") + 7)); + if(catalogueAPIClient.isRegistered(resCatName)){ + log.debug(resCatName+ " is already registered"); + String json = getJson(type, resource, resCatName, datasourceName); + catalogueAPIClient.doUpdate(json, resCatName); + } + else { + //resource not yet registered + String json = getJson(type, resource, resCatName, datasourceName); + if(!catalogueAPIClient.doRegister(json, resCatName)){ + log.warn(String.format("%s could not be registered even the second time, giving up", resURI)); + return null; + } + } + log.debug(String.format("%s registered on the catalogue with name: %s", resURI, resCatName)); + return resCatName; + } + + protected boolean purge(final String resCatName) throws URISyntaxException, AriadnePlusPublisherException { + return catalogueAPIClient.purgeItem(resCatName); + } + + protected String getJson(final Resource type, final Resource resource, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + switch (type.getLocalName()) { + case "E29_Design_or_Procedure": + return getJsonForDesignProcedure(resource, resNameForCatalogue, datasourceName); + case "D14_Software": + return getJsonForSoftware(resource, resNameForCatalogue, datasourceName); + case "PE35_Project": + return getJsonForProject(resource, resNameForCatalogue, datasourceName); + case "PE1_Service": + return getJsonForService(resource, resNameForCatalogue, datasourceName); + case "E39_Actor": + return getJsonForActor(resource, resNameForCatalogue, datasourceName); + case "PE18_Dataset": + return getJsonForDataset(resource, resNameForCatalogue, datasourceName); + case "E78_Collection": + return getJsonForCollection(resource, resNameForCatalogue, datasourceName); + default: + throw new IllegalArgumentException(String.format("Type " + type.getLocalName() + " not supported")); + } + } + + protected String getJsonForProject(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + //Only RI_Project are linked to RIs that must be used as groups + List maintainer_RIs = Lists.newArrayList(resourceReader.getMaintainersLabels(res)); + if(maintainer_RIs.size() > 0) { + jg.writeArrayFieldStart("groups"); + for(String ri : maintainer_RIs) { + String group = CKANUtils.getCkanGroup(ri); + if(StringUtils.isNotBlank(group)) { + jg.writeStartObject(); + jg.writeStringField("name", group); + jg.writeEndObject(); + } + } + jg.writeEndArray(); + } + + jg.writeStringField("maintainer", Joiner.on(", ").join(resourceReader.getMaintainersLabels(res))); + //TODO: it should be better to identify email contacts rather than generic contact labels of maintainer + //jg.writeStringField("maintainer_email", Joiner.on(", ").join(resourceReader.getMaintainerContacts(res))); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Project_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E7_Activity).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) + addExtra(jg, "AriadnePlus URL", res.getURI()); + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + + addExtra(jg, "started on", resourceReader.getStartTime(res)); + int idx = 1; + Iterator maintainers = resourceReader.getMaintainerUrls(res); + while(maintainers.hasNext()){ + addExtra(jg, String.format("maintaining team (%d)", idx), maintainers.next()); + idx++; + } + //addExtra(jg, "maintaining team", Joiner.on(", ").join(resourceReader.getMaintainerUrls(res))); + idx = 1; + Iterator services = resourceReader.getOfferedServiceUrls(res); + while(services.hasNext()){ + addExtra(jg, String.format("offers (%d)", idx), services.next()); + idx++; + } + //addExtra(jg, "offers", Joiner.on(", ").join(resourceReader.getOfferedServiceUrls(res))); + + jg.writeEndArray(); //end extras + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected String getJsonForService(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + jg.writeStringField("maintainer", Joiner.on(", ").join(resourceReader.getMaintainersLabels(res))); + //TODO: it should be better to identify email contacts rather than generic contact labels of maintainer + //jg.writeStringField("maintainer_email", Joiner.on(", ").join(resourceReader.getMaintainerContacts(res))); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Service_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E7_Activity).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) + addExtra(jg, "AriadnePlus URL", res.getURI()); + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + addExtra(jg, "competence", Joiner.on(", ").join(resourceReader.getCompetences(res))); + addExtra(jg, "activity type", Joiner.on(", ").join(resourceReader.getActivityTypes(res))); + //condition of use (Rights) + addExtra(jg, "condition of use", resourceReader.getConditionOfUse(res)); + int idx = 1; + Iterator contacts = Iterators.concat(resourceReader.getResourceDirectContactPointsURI(res), resourceReader.getProviderContactPoints(res)); + while(contacts.hasNext()){ + addExtra(jg, String.format("contact points (%d)", idx), contacts.next()); + idx++; + } + //addExtra(jg, "contact points", Joiner.on(", ").join(Iterators.concat(resourceReader.getResourceDirectContactPointsURI(res), resourceReader.getProviderContactPoints(res)))); + idx = 1; + Iterator providers = resourceReader.getProviderUris(res); + while(providers.hasNext()){ + addExtra(jg, String.format("provided by (%d)", idx), providers.next()); + idx++; + } + //addExtra(jg, "provided by", Joiner.on(", ").join(resourceReader.getProviderUris(res))); + idx = 1; + Iterator points = resourceReader.getAccessPoints(res); + while(points.hasNext()){ + addExtra(jg, String.format("online access point (%d)", idx), points.next()); + idx++; + } + //addExtra(jg, "online access point", Joiner.on(", ").join(resourceReader.getAccessPoints(res))); + addExtra(jg, "protocol", Joiner.on(", ").join(resourceReader.getProtocols(res))); + idx = 1; + Iterator delivers = resourceReader.getDeliversOnRequest(res); + while(delivers.hasNext()){ + addExtra(jg, String.format("delivers on request (%d)", idx), delivers.next()); + idx++; + } + //addExtra(jg, "delivers on request", Joiner.on(", ").join(resourceReader.getDeliversOnRequest(res))); + idx = 1; + Iterator runs = resourceReader.getRunsOnRequest(res); + while(runs.hasNext()){ + addExtra(jg, String.format("runs on request (%d)", idx), runs.next()); + idx++; + } + //addExtra(jg, "runs on request", Joiner.on(", ").join(resourceReader.getRunsOnRequest(res))); + idx = 1; + Iterator hosts = resourceReader.getHostedStuff(res); + while(hosts.hasNext()){ + addExtra(jg, String.format("hosts (%d)", idx), hosts.next()); + idx++; + } + //addExtra(jg, "hosts", Joiner.on(", ").join(resourceReader.getHostedStuff(res))); + idx = 1; + Iterator curates = resourceReader.getCuratedObjects(res); + while(curates.hasNext()){ + addExtra(jg, String.format("curates (%d)", idx), curates.next()); + idx++; + } + //addExtra(jg, "curates", Joiner.on(", ").join(resourceReader.getCuratedObjects(res))); + addExtra(jg, "declared begin/end of operation", Joiner.on(", ").join(resourceReader.getDeclarativeTimes(res))); + addExtra(jg, "availability", resourceReader.getAvailability(res)); + idx = 1; + Iterator plans = resourceReader.getCurationPlans(res); + while(plans.hasNext()){ + addExtra(jg, String.format("uses curation plan (%d)", idx), plans.next()); + idx++; + } + //addExtra(jg, "uses curation plan", Joiner.on(", ").join(resourceReader.getCurationPlans(res))); + addExtra(jg, "time of service", Joiner.on(", ").join(resourceReader.getDeclarativeTimes(res))); + //TODO: where to get it? + //addExtra(jg, "last confirmation", ""); + //TODO: where to get it? + //addExtra(jg, "date of registration", ""); + + jg.writeEndArray(); //end extras + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected String getJsonForActor(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Actor_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E39_Actor).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) + addExtra(jg, "AriadnePlus URL", res.getURI()); + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + addExtra(jg, "has type", Joiner.on(", ").join(resourceReader.getHasTypeLabels(res))); + int idx = 1; + Iterator hasMembers = resourceReader.getMemberUrls(res); + while(hasMembers.hasNext()){ + addExtra(jg, String.format("has member (%d)", idx), hasMembers.next()); + idx++; + } + //addExtra(jg, "has member", Joiner.on(", ").join(resourceReader.getMemberUrls(res))); + idx = 1; + Iterator isMembers = resourceReader.isMemberOf(res); + while(isMembers.hasNext()){ + addExtra(jg, String.format("is member of (%d)", idx), isMembers.next()); + idx++; + } + //addExtra(jg, "is member of", Joiner.on(", ").join(resourceReader.isMemberOf(res))); + idx = 1; + Iterator provides = resourceReader.getProvidedServiceUrls(res); + while(provides.hasNext()){ + addExtra(jg, String.format("provides (%d)", idx), provides.next()); + idx++; + } + //addExtra(jg, "provides", Joiner.on(", ").join(resourceReader.getProvidedServiceUrls(res))); + + idx = 1; + String contactPoints = ""; + StmtIterator it = res.listProperties(CRM.P76_has_contact_point); + while(it.hasNext()) { + Resource cp = it.next().getResource(); + Resource cpType = cp.getPropertyResourceValue(CRM.P2_has_type); + String cpTypeLabel = resourceReader.getLabel(cpType); + String cpLabel = resourceReader.getLabel(cp); + if (StringUtils.isNotBlank(cpLabel)) { + if (StringUtils.isNotBlank(cpTypeLabel)) { + addExtra(jg,String.format("contact point (%d) - %s ", idx, cpTypeLabel), cpLabel ); + idx++; + //contactPoints += cpTypeLabel + ": "; + } + else{ + addExtra(jg,String.format("contact point (%d)", idx), cpLabel ); + idx++; + //contactPoints += cpLabel + "; "; + } + + } + else{ + addExtra(jg,String.format("contact point (%d)", idx), cp.getURI()); + idx++; + } + } + // addExtra(jg,"contact points", contactPoints ); + idx = 1; + Iterator maintains = resourceReader.getMaintainedUrls(res); + while(maintains.hasNext()){ + addExtra(jg, String.format("maintains (%d)", idx), maintains.next()); + idx++; + } + //addExtra(jg, "maintains", Joiner.on(", ").join(resourceReader.getMaintainedUrls(res))); + + jg.writeEndArray(); + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected String getJsonForDataset(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Dataset_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E70_Thing).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) { + addExtra(jg, "AriadnePlus URL", res.getURI()); + } + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + addExtra(jg, "has type", Joiner.on(", ").join(resourceReader.getHasTypeLabels(res))); + int idx = 1; + Iterator isPartOf = resourceReader.getIsPartOfUrls(res); + while(isPartOf.hasNext()){ + addExtra(jg, String.format("is part of (%d)", idx), isPartOf.next()); + idx++; + } + //addExtra(jg, "is part of", Joiner.on(", ").join(resourceReader.getIsPartOfUrls(res))); + idx = 1; + Iterator hasPart = resourceReader.getHasPartUrls(res); + while(hasPart.hasNext()){ + addExtra(jg, String.format("has part (%d)", idx), hasPart.next()); + idx++; + } + //addExtra(jg, "has part", Joiner.on(", ").join(resourceReader.getHasPartUrls(res))); + idx = 1; + Iterator curators = resourceReader.getCuratorUrls(res); + while(curators.hasNext()){ + addExtra(jg, String.format("curated by (%d)", idx), curators.next()); + idx++; + } + //addExtra(jg, "curated by", Joiner.on(", ").join(resourceReader.getCuratorUrls(res))); + idx = 1; + Iterator curationplans = resourceReader.getResourceCuratorCurationPlans(res); + while(curationplans.hasNext()){ + addExtra(jg, String.format("curation plan (%d)", idx), curationplans.next()); + idx++; + } + //addExtra(jg, "curation plan", Joiner.on(", ").join(resourceReader.getResourceCuratorCurationPlans(res))); + idx = 1; + Iterator hostedbys = resourceReader.getHostedBys(res); + while(hostedbys.hasNext()){ + addExtra(jg, String.format("hosted by (%d)", idx), hostedbys.next()); + idx++; + } + //addExtra(jg, "hosted by", Joiner.on(", ").join(resourceReader.getHostedBys(res))); + addExtra(jg, "encoding type", Joiner.on(", ").join(resourceReader.getEncodings(res))); + idx = 1; + Iterator creators = resourceReader.getCreatorsURIs(res); + while(creators.hasNext()){ + addExtra(jg, String.format("creator (%d)", idx), creators.next()); + idx++; + } + //addExtra(jg, "creator", Joiner.on(", ").join(resourceReader.getCreatorsURIs(res))); + idx = 1; + Iterator sw = resourceReader.getUsedSoftware(res); + while(sw.hasNext()){ + addExtra(jg, String.format("used software (%d)", idx), sw.next()); + idx++; + } + + addExtra(jg, "subject", Joiner.on(", ").join(resourceReader.getSubjects(res))); + addExtra(jg, "temporal coverage", Joiner.on(", ").join(resourceReader.getTemporalCoverages(res))); + addExtra(jg, "spatial coverage", Joiner.on(", ").join(resourceReader.getSpatialCoverages(res))); + idx = 1; + Iterator usedbys = resourceReader.getUsedBy(res); + while(usedbys.hasNext()){ + addExtra(jg, String.format("used by (%d)", idx), usedbys.next()); + idx++; + } + //addExtra(jg, "used by", Joiner.on(", ").join(resourceReader.getUsedBy(res))); + addExtra(jg, "languages", Joiner.on(", ").join(resourceReader.getLanguages(res))); + idx = 1; + Iterator metadata = resourceReader.getMetadata(res); + while(metadata.hasNext()){ + addExtra(jg, String.format("has metadata (%d)", idx), metadata.next()); + idx++; + } + //addExtra(jg, "has metadata", Joiner.on(", ").join(resourceReader.getMetadata(res))); + idx = 1; + Iterator metadataFor = resourceReader.getDescribedDataset(res); + while(metadataFor.hasNext()){ + addExtra(jg, String.format("is metadata for (%d)", idx), metadataFor.next()); + idx++; + } + //addExtra(jg, "is metadata for", Joiner.on(", ").join(resourceReader.getDescribedDataset(res))); + idx = 1; + Iterator snaphsots = resourceReader.getSnapshots(res); + while(snaphsots.hasNext()){ + addExtra(jg, String.format("has snapshot (%d)", idx), snaphsots.next()); + idx++; + } + //addExtra(jg, "has snapshot", Joiner.on(", ").join(resourceReader.getSnapshots(res))); + idx = 1; + Iterator issnaphsots = resourceReader.getIsSnapshotOfs(res); + while(issnaphsots.hasNext()){ + addExtra(jg, String.format("is snapshot of (%d)", idx), issnaphsots.next()); + idx++; + } + //addExtra(jg, "is snapshot of", Joiner.on(", ").join(resourceReader.getIsSnapshotOfs(res))); + + jg.writeEndArray(); + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected String getJsonForSoftware(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Software_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E70_Thing).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) { + addExtra(jg, "AriadnePlus URL", res.getURI()); + } + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + addExtra(jg, "subject", Joiner.on(", ").join(resourceReader.getSubjects(res))); + addExtra(jg, "has type", Joiner.on(", ").join(resourceReader.getHasTypeLabels(res))); + int idx = 1; + Iterator hosted = resourceReader.getHostedBys(res); + while(hosted.hasNext()){ + addExtra(jg, String.format("hosted by (%d)", idx), hosted.next()); + idx++; + } + //addExtra(jg, "hosted by", Joiner.on(", ").join(resourceReader.getHostedBys(res))); + idx = 1; + Iterator curated = resourceReader.getCuratorUrls(res); + while(curated.hasNext()){ + addExtra(jg, String.format("curated by (%d)", idx), curated.next()); + idx++; + } + //addExtra(jg, "curated by", Joiner.on(", ").join(resourceReader.getCuratorUrls(res))); + idx = 1; + Iterator hasSnapshot = resourceReader.getSnapshots(res); + while(hasSnapshot.hasNext()){ + addExtra(jg, String.format("has snapshot (%d)", idx), hasSnapshot.next()); + idx++; + } + //addExtra(jg, "has snapshot", Joiner.on(", ").join(resourceReader.getSnapshots(res))); + idx = 1; + Iterator isSnapshot = resourceReader.getIsSnapshotOfs(res); + while(isSnapshot.hasNext()){ + addExtra(jg, String.format("is snapshot (%d)", idx), isSnapshot.next()); + idx++; + } + //addExtra(jg, "is snapshot of", Joiner.on(", ").join(resourceReader.getIsSnapshotOfs(res))); + idx = 1; + Iterator isPart = resourceReader.getIsPartOfUrls(res); + while(isPart.hasNext()){ + addExtra(jg, String.format("is part of (%d)", idx), isPart.next()); + idx++; + } + //addExtra(jg, "is part of", Joiner.on(", ").join(resourceReader.getIsPartOfUrls(res))); + idx = 1; + Iterator hasPart = resourceReader.getHasPartUrls(res); + while(hasPart.hasNext()){ + addExtra(jg, String.format("has part (%d)", idx), hasPart.next()); + idx++; + } + //addExtra(jg, "has part", Joiner.on(", ").join(resourceReader.getHasPartUrls(res))); + idx = 1; + Iterator hasRelease = resourceReader.getHasReleases(res); + while(hasRelease.hasNext()){ + addExtra(jg, String.format("has release (%d)", idx), hasRelease.next()); + idx++; + } + //addExtra(jg, "has release", Joiner.on(", ").join(resourceReader.getHasReleases(res))); + idx = 1; + Iterator isRelease = resourceReader.getIsReleaseOfs(res); + while(isRelease.hasNext()){ + addExtra(jg, String.format("is release (%d)", idx), isRelease.next()); + idx++; + } + //addExtra(jg, "is release of", Joiner.on(", ").join(resourceReader.getIsReleaseOfs(res))); + idx = 1; + Iterator used = resourceReader.getUsedBy(res); + while(used.hasNext()){ + addExtra(jg, String.format("used by (%d)", idx), used.next()); + idx++; + } + //addExtra(jg, "used by", Joiner.on(", ").join(resourceReader.getUsedBy(res))); + addExtra(jg, "creation time", resourceReader.getFirstCreationTime(res)); + + jg.writeEndArray(); + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected String getJsonForCollection(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.Collection_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E70_Thing).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) { + addExtra(jg, "AriadnePlus URL", res.getURI()); + } + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + addExtra(jg, "has type", Joiner.on(", ").join(resourceReader.getHasTypeLabels(res))); + addExtra(jg, "subject", Joiner.on(", ").join(resourceReader.getSubjects(res))); + addExtra(jg, "temporal coverage", Joiner.on(", ").join(resourceReader.getTemporalCoverages(res))); + addExtra(jg, "spatial coverage", Joiner.on(", ").join(resourceReader.getSpatialCoverages(res))); + int idx = 1; + Iterator hasPart = resourceReader.getHasPartUrls(res); + while(hasPart.hasNext()){ + addExtra(jg, String.format("has part (%d)", idx), hasPart.next()); + idx++; + } + //addExtra(jg, "has part", Joiner.on(", ").join(resourceReader.getHasPartUrls(res))); + idx = 1; + Iterator hosted = resourceReader.getHostedBys(res); + while(hosted.hasNext()){ + addExtra(jg, String.format("hosted by (%d)", idx), hosted.next()); + idx++; + } + //addExtra(jg, "hosted by", Joiner.on(", ").join(resourceReader.getHostedBys(res))); + idx = 1; + Iterator curated = resourceReader.getCuratorUrls(res); + while(curated.hasNext()){ + addExtra(jg, String.format("curated by (%d)", idx), curated.next()); + idx++; + } + //addExtra(jg, "curated by", Joiner.on(", ").join(resourceReader.getCuratorUrls(res))); + idx = 1; + Iterator creators = resourceReader.getCreatorsURIs(res); + while(creators.hasNext()){ + addExtra(jg, String.format("creator (%d)", idx), creators.next()); + idx++; + } + //addExtra(jg, "creator", Joiner.on(", ").join(resourceReader.getCreatorsURIs(res))); + addExtra(jg, "languages", Joiner.on(", ").join(resourceReader.getLanguages(res))); + + jg.writeEndArray(); + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + + protected String getJsonForDesignProcedure(final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + JsonFactory jsonFactory = new JsonFactory(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + BufferedOutputStream bos = new BufferedOutputStream(out); + JsonGenerator jg = jsonFactory.createGenerator(bos, JsonEncoding.UTF8); + jg.writeStartObject(); + writeCommonFields(jg, res, resNameForCatalogue, datasourceName); + + jg.writeArrayFieldStart("extras"); + addExtra(jg, "system:type", CKANUtils.DesignOrProcedure_type); + //specific class + addExtra(jg, "instance of", resourceReader.findSpecificType(res, CRM.E29_Design_or_Procedure).getLocalName()); + if (res.getURI().startsWith(ARIADNEPLUS_BASE_URL)) { + addExtra(jg, "AriadnePlus URL", res.getURI()); + } + else addExtra(jg, "URL", res.getURI()); + addIdentifiers(res, jg); + int idx = 1; + Iterator used = resourceReader.getUsedBy(res); + while(used.hasNext()){ + addExtra(jg, String.format("used by (%d)", idx), used.next()); + idx++; + } + //addExtra(jg, "used by", Joiner.on(", ").join(resourceReader.getUsedBy(res))); + //TODO: add additional metadata for E29_Design_or_Procedure, if any + jg.writeEndArray(); + + jg.writeEndObject(); + jg.close(); + return out.toString("UTF-8"); + } + + protected void addIdentifiers(final Resource res, final JsonGenerator jg ) throws IOException { + /* + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + */ + StmtIterator it = res.listProperties(CRM.P1_is_identified_by); + Set ids = Sets.newHashSet(); + while(it.hasNext()){ + RDFNode obj = it.next().getObject(); + if(obj.isLiteral()) ids.add(obj.asLiteral().getLexicalForm()); + else { + Resource id = (Resource) obj; + if (id.hasProperty(RDF.type, CRM.E42_Identifier)) { + ids.add(resourceReader.getLabel(id)); + } + } + } + addExtra(jg, "ID", String.join(",", ids)); + } + + protected void addExtra(final JsonGenerator jg, final String key, final String value) throws IOException { + if(StringUtils.isNotBlank(value)) { + jg.writeStartObject(); + jg.writeStringField("key", key); + jg.writeStringField("value", value); + jg.writeEndObject(); + } + } + + + + protected void writeCommonFields(final JsonGenerator jg, final Resource res, final String resNameForCatalogue, final String datasourceName) + throws IOException, AriadnePlusPublisherException { + String ckanOrg = CKANUtils.getCKanOrg(datasourceName); + //id is available only for updates + if(StringUtils.isBlank(ckanOrg)) throw new AriadnePlusPublisherException(String.format("Cannot register %s : blank ckan org for data source with name %s", resNameForCatalogue, datasourceName)); + //the owning organization, i.e. the data souce from which this resource has been collected from + jg.writeStringField("owner_org", ckanOrg); + jg.writeStringField("name", resNameForCatalogue); + //default license + jg.writeStringField("license_id", resourceReader.getCatalogueLicense(res).getId()); + String title = resourceReader.getTitle(res); + if (StringUtils.isBlank(title)) + title = resNameForCatalogue; + jg.writeStringField("title", title); + //description + jg.writeStringField("notes",Joiner.on(';').join(resourceReader.getDescriptions(res))); + //the names of all superclasses of the entity + jg.writeArrayFieldStart("tags"); + Iterator classNames = resourceReader.getRDFClassNames(res); + while (classNames.hasNext()) { + jg.writeStartObject(); + jg.writeStringField("name", classNames.next()); + jg.writeEndObject(); + } + jg.writeEndArray(); + } + + + public ResourceReader getResourceReader() { + return resourceReader; + } + + public void setResourceReader(final ResourceReader resourceReader) { + this.resourceReader = resourceReader; + } + + public CatalogueAPIClient getCatalogueAPIClient() { + return catalogueAPIClient; + } + + public void setCatalogueAPIClient(final CatalogueAPIClient catalogueAPIClient) { + this.catalogueAPIClient = catalogueAPIClient; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryRel.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryRel.java new file mode 100644 index 0000000..8db3e42 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryRel.java @@ -0,0 +1,39 @@ +package eu.dnetlib.ariadneplus.jrr; + +/** + * Created by Alessia Bardi on 26/02/2018. + * + * @author Alessia Bardi + */ +public class AriadnePlusRegistryRel { + + private String relName; + private String json; + + public String getRelName() { + return relName; + } + + public void setRelName(final String relName) { + this.relName = relName; + } + + public String getJson() { + return json; + } + + public void setJson(final String json) { + this.json = json; + } + + public AriadnePlusRegistryRel relName(final String relName) { + this.relName = relName; + return this; + } + + public AriadnePlusRegistryRel json(final String json) { + this.json = json; + return this; + } + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryResource.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryResource.java new file mode 100644 index 0000000..832b91e --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/AriadnePlusRegistryResource.java @@ -0,0 +1,55 @@ +package eu.dnetlib.ariadneplus.jrr; + +import org.apache.commons.lang3.StringUtils; + +/** + * Created by Alessia Bardi on 06/10/2017. + * + * @author Alessia Bardi + */ +public class AriadnePlusRegistryResource { + + private String uuid; + private String type; + private String json; + + public String getUuid() { + return uuid; + } + + public AriadnePlusRegistryResource setUuid(final String uuid) { + this.uuid = uuid; + return this; + } + + public String getType() { + return type; + } + + public String getRegistryType(){ + return StringUtils.remove(type, '-'); + } + + public AriadnePlusRegistryResource setType(final String type) { + this.type = type; + return this; + } + + public String getJson() { + return json; + } + + public AriadnePlusRegistryResource setJson(final String json) { + this.json = json; + return this; + } + + @Override + public String toString() { + return "AriadnePlusRegistryResource{" + + "uuid='" + uuid + '\'' + + ", type='" + type + '\'' + + ", json='" + json + '\'' + + '}'; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/JRRPublisher.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/JRRPublisher.java new file mode 100644 index 0000000..03a1433 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/jrr/JRRPublisher.java @@ -0,0 +1,147 @@ +package eu.dnetlib.ariadneplus.jrr; + +import java.io.IOException; +import java.net.URISyntaxException; +import javax.annotation.PostConstruct; + +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.CRMdig; +import eu.dnetlib.ariadneplus.CRMpe; +import eu.dnetlib.ariadneplus.catalogue.CatalogueRegistrator; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import eu.dnetlib.ariadneplus.rdf.RecordParserHelper; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.ontology.OntModelSpec; +import org.apache.jena.rdf.model.*; +import org.apache.jena.vocabulary.RDF; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + + +/** + * Created by Alessia Bardi on 25/02/2018. + * + * publish on Gcube registry and catalogue. + * + * + * @author Alessia Bardi + */ +@Component +public class JRRPublisher { + + private static final Log log = LogFactory.getLog(JRRPublisher.class); + private OntModel baseModel; + + @Autowired + private CatalogueRegistrator catalogueRegistrator; + //@Autowired + //private GCubeResourceRegistrator gCubeResourceRegistrator; + @Autowired + private RecordParserHelper recordParserHelper; + + @PostConstruct + public void init(){ + baseModel = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_TRANS_INF); + baseModel.read(CRMpe.RDFS_URL); + baseModel.read(CRM.RDFS_URL); + baseModel.read(CRMdig.RDFS_URL); + } + + public void register(final String record) + throws AriadnePlusPublisherException, IOException, URISyntaxException, InterruptedException { + String id = recordParserHelper.getObjIdentifier(record); + String datasourceName = recordParserHelper.getDatasourceName(record); + //objIdentifier contains the subject URI used to get the RDF: that is the only resource we have to register when processing this rdf file! + log.debug("REGISTERING ON JRR: "+id); + String rdfRecord = recordParserHelper.getRDF(record); + InfModel model = loadBaseModel(); + model.read(IOUtils.toInputStream(rdfRecord), CRMpe.NS, "RDF/XML"); + register(model, id, datasourceName); + } + + + protected void register(final Model model, final String resourceURI, final String datasourceName) + throws AriadnePlusPublisherException, IOException, URISyntaxException, InterruptedException { + Resource rdfResource = model.getResource(resourceURI); + if (rdfResource == null) { + log.error("UNEXPECTED NULL rdfResource with resourceURI " + resourceURI + ". I am skipping it, but you should check!"); + } else { + //call the correct register method based on the resource type + //we skip everything that is not Software, Actor, Service, Dataset, Curation Plan and Project: other entities are in fact source of metadata for them + ////base types are {Project, Service, Actors, Datasets, Software, Physical Collections, Standards} i.e. {PE35_Project, PE1_Service, E39_Actor, PE18_Dataset, D14_Software, E78_Collection, E29_Design_or_Procedure) + if (rdfResource.hasProperty(RDF.type, CRM.E39_Actor)) registerRDFResource(rdfResource, CRM.E39_Actor, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRMpe.PE35_Project)) registerRDFResource(rdfResource, CRMpe.PE35_Project, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRM.E29_Design_or_Procedure)) registerRDFResource(rdfResource, CRM.E29_Design_or_Procedure, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRMdig.D14_Software)) registerRDFResource(rdfResource, CRMdig.D14_Software, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRMpe.PE18_Dataset)) registerRDFResource(rdfResource, CRMpe.PE18_Dataset, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRM.E78_Collection)) registerRDFResource(rdfResource, CRM.E78_Collection, datasourceName); + else { + if (rdfResource.hasProperty(RDF.type, CRMpe.PE1_Service)) registerRDFResource(rdfResource, CRMpe.PE1_Service, datasourceName); + else { + log.debug("Skipping " + resourceURI + " because of its type"); + } + } + } + } + } + } + } + } + } + + protected boolean registerRDFResource(final Resource rdfResource, final Resource type, final String datasourceName) + throws AriadnePlusPublisherException, IOException, URISyntaxException, InterruptedException { + String resURI = rdfResource.getURI(); + if (!resURI.startsWith("http")) { + //this is something George said: if it has no http URI, then it is not to be considered relevant by itself + log.info("Resource " + resURI + " skipped: URI does not start with http"); + return false; + } + else { + String uuid = registerOnCatalogue(rdfResource, type, datasourceName); + if(StringUtils.isNotBlank(uuid)){ + //TODO: let's skip the registration on the registry for now. + //registerOnRegistry(rdfResource, uuid, type); + return true; + } + else{ + log.warn("Got blank uuid when registering "+resURI+": skipping registration on the registry"); + return false; + } + } + } + + /** + * Register resource of the given type on the catalogue + * @param rdfResource + * @param type + * @return the catalogue uuid + * @throws IOException + */ + protected String registerOnCatalogue(final Resource rdfResource, final Resource type, final String datasourceName) + throws AriadnePlusPublisherException, IOException, URISyntaxException, InterruptedException { + return catalogueRegistrator.register(rdfResource, type, datasourceName); + } + + /* + protected void registerOnRegistry(final Resource rdfResource, final String uuid, final Resource type) + throws AriadnePlusPublisherException, ResourceRegistryException, IOException { + gCubeResourceRegistrator.register(rdfResource, uuid, type); + } + */ + + protected InfModel loadBaseModel() { + return ModelFactory.createRDFSModel(baseModel); + } + + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java new file mode 100644 index 0000000..5339ecd --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherController.java @@ -0,0 +1,48 @@ +package eu.dnetlib.ariadneplus.publisher; + +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherHelper.AriadnePlusTargets; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class AriadnePlusPublisherController { + + private static final Log log = LogFactory.getLog(AriadnePlusPublisherController.class); + //TODO: to nicely handle arrors, follow https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling + + @Autowired + private AriadnePlusPublisherHelper ariadneplusPublisherHelper; + + @RequestMapping(value = "/publish", method = RequestMethod.POST) + public void publish(@RequestParam final String record, @RequestParam(required = false) String ariadneplusTarget) throws AriadnePlusPublisherException { + getAriadnePlusPublisherHelper().publish(record, getTarget(ariadneplusTarget)); + } + + + @RequestMapping(value = "/unpublish", method = RequestMethod.GET) + public void unpublish(@RequestParam final String datasourceApi, @RequestParam(required = false) String ariadneplusTarget) throws AriadnePlusPublisherException { + getAriadnePlusPublisherHelper().unpublish(datasourceApi, getTarget(ariadneplusTarget)); + } + + @RequestMapping(value = "/dropRegistry", method = RequestMethod.GET) + public void unpublish() throws AriadnePlusPublisherException { + getAriadnePlusPublisherHelper().dropRegistry(); + } + + private AriadnePlusTargets getTarget(String value) { + return AriadnePlusTargets.valueOf(value); + } + + public AriadnePlusPublisherHelper getAriadnePlusPublisherHelper() { + return ariadneplusPublisherHelper; + } + + public void setAriadnePlusPublisherHelper(final AriadnePlusPublisherHelper ariadneplusPublisherHelper) { + this.ariadneplusPublisherHelper = ariadneplusPublisherHelper; + } +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherException.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherException.java new file mode 100644 index 0000000..2aaa015 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherException.java @@ -0,0 +1,28 @@ +package eu.dnetlib.ariadneplus.publisher; + +/** + * Created by Alessia Bardi on 29/08/2017. + * + * @author Alessia Bardi + */ +public class AriadnePlusPublisherException extends Exception{ + + public AriadnePlusPublisherException() { + } + + public AriadnePlusPublisherException(final String message) { + super(message); + } + + public AriadnePlusPublisherException(final String message, final Throwable cause) { + super(message, cause); + } + + public AriadnePlusPublisherException(final Throwable cause) { + super(cause); + } + + public AriadnePlusPublisherException(final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java new file mode 100644 index 0000000..ecab5e9 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherHelper.java @@ -0,0 +1,97 @@ +package eu.dnetlib.ariadneplus.publisher; + +import java.io.IOException; +import java.net.URISyntaxException; + +import eu.dnetlib.ariadneplus.jrr.JRRPublisher; +import eu.dnetlib.ariadneplus.virtuoso.VirtuosoClient; +import eu.dnetlib.ariadneplus.virtuoso.VirtuosoClientFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Created by Alessia Bardi on 11/08/2017. + * + * @author Alessia Bardi + */ +@Component +public class AriadnePlusPublisherHelper { + + private static final Log log = LogFactory.getLog(AriadnePlusPublisherHelper.class); + + public enum AriadnePlusTargets{ + VIRTUOSO, JRR + } + + @Autowired + private VirtuosoClientFactory virtuosoClientFactory; + @Autowired + private JRRPublisher jrrPublisher; + + public void publish(final String record, final AriadnePlusTargets target) throws AriadnePlusPublisherException { + switch(target){ + case VIRTUOSO: + publishVirtuoso(record); + break; + case JRR: + try { + publishJRR(record); + break; + } catch(IOException | URISyntaxException | InterruptedException e){ + throw new AriadnePlusPublisherException(e); + } + default: throw new AriadnePlusPublisherException("Target "+target+" not supported yet"); + } + + } + + public long unpublish(final String datasourceInterface, final AriadnePlusTargets target) throws AriadnePlusPublisherException { + long res = 0; + switch(target){ + case VIRTUOSO: + res = unpublishVirtuoso(datasourceInterface); + break; + default: throw new AriadnePlusPublisherException("Target "+target+" not supported yet"); + } + return res; + } + + private void publishVirtuoso(final String record) throws AriadnePlusPublisherException { + log.debug("Publishing on virtuoso"); + VirtuosoClient virtuosoClient = this.virtuosoClientFactory.getVirtuosoClient(); + virtuosoClient.feed(record); + } + + private void publishJRR(final String record) + throws AriadnePlusPublisherException, IOException, URISyntaxException, InterruptedException { + log.debug("Publishing on JRR (registry and catalogue)"); + jrrPublisher.register(record); + } + + private int unpublishJRR(final String datasourceInterface){ + //TODO: for this to work we have to add somewhere the information about the dsInterface from which the resource was initially collected + //Note that this method might not be a good idea if we want to keep the uuid and only update the facets/rels + //maybe it is worth to implement the incremental in the ResourceRegistrator. We slow down things, but it may be worthy... + log.debug("Unpublishing from registry "+datasourceInterface); + //TODO: implement me + throw new UnsupportedOperationException("Not implemented yet"); + } + + private long unpublishVirtuoso(final String datasourceInterface) { + log.info("Unpublishing from virtuoso "+datasourceInterface); + VirtuosoClient virtuosoClient = this.virtuosoClientFactory.getVirtuosoClient(); + long deletedTriples = virtuosoClient.drop(datasourceInterface); + log.info("# triples deleted for "+datasourceInterface+": "+deletedTriples); + return deletedTriples; + } + + public void dropRegistry(){ + log.debug("Dropping JRR"); + //TODO: implement me + throw new UnsupportedOperationException("Not implemented yet"); + } + + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/SaxonHelper.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/SaxonHelper.java new file mode 100644 index 0000000..1e4a0be --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/publisher/SaxonHelper.java @@ -0,0 +1,178 @@ +package eu.dnetlib.ariadneplus.publisher; + +import java.io.StringReader; +import java.util.Map; +import java.util.Map.Entry; +import javax.xml.transform.sax.SAXSource; + +import com.google.common.collect.Maps; +import net.sf.saxon.s9api.*; +import net.sf.saxon.s9api.Serializer.Property; +import org.springframework.stereotype.Component; +import org.xml.sax.InputSource; + +/** + * Created by alessia on 10/03/17. + */ +@Component +public class SaxonHelper { + + private Processor xmlProcessor = new Processor(false); + + + public Helper help(){ + return new Helper(); + } + + public class Helper{ + private Serializer serializer; + + Helper() { + this.serializer = xmlProcessor.newSerializer(); + serializer.setOutputProperty(Property.METHOD, "xml"); + serializer.setOutputProperty(Property.INDENT, "yes"); + } + + public Helper setSerializerProperty(Property p, String value){ + serializer.setOutputProperty(p, value); + return this; + } + + public XdmNode parseXML(final String xmlSource) throws SaxonApiException { + SAXSource source = new SAXSource(new InputSource(new StringReader(xmlSource))); + DocumentBuilder docBuilder = xmlProcessor.newDocumentBuilder(); + return docBuilder.build(source); + } + + /** + * Evaluate the given xpath on the given XML source. + * + * @param xmlSource XML source string + * @param xpath the xpath to evaluate + * @param namespaces the map of namespaces to be declared to evaluate the xpath + * @return an XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + */ + public XdmItem evaluateSingle(final String xmlSource, final String xpath, final Map namespaces) throws SaxonApiException { + XPathSelector xpathSelector = prepareXPathSelector(xpath, namespaces); + return evaluateSingle(xmlSource, xpathSelector); + } + + /** + * Applies the given xpath selector on the given XML source. + * + * @param xmlSource XML source string + * @param xpathSelector the configured xpath selector to apply + * @return an XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + */ + public XdmItem evaluateSingle(final String xmlSource, final XPathSelector xpathSelector) throws SaxonApiException { + XdmNode xdmNode = parseXML(xmlSource); + xpathSelector.setContextItem(xdmNode); + return xpathSelector.evaluateSingle(); + } + + /** + * Get an XPathSelector for the given xpath and namespaces. + * @param xpath the xpath + * @param namespaces the map of namespaces to be declared to evaluate the xpath + * @return XPathSelector + * @throws SaxonApiException + */ + public XPathSelector prepareXPathSelector(final String xpath,final Map namespaces) throws SaxonApiException { + XPathCompiler compiler = xmlProcessor.newXPathCompiler(); + for (Entry ns : namespaces.entrySet()) { + compiler.declareNamespace(ns.getKey(), ns.getValue()); + } + XPathExecutable xpathExecutable = compiler.compile(xpath); + XPathSelector xpathSelector = xpathExecutable.load(); + return xpathSelector; + } + + /** + * Get an XPathSelector for the given xpath and namespaces. + * @param xpath the xpath + * @param nsPrefix namespace prefix + * @param ns namespace URI + * @return XPathSelector + * @throws SaxonApiException + */ + public XPathSelector prepareXPathSelector(final String xpath,final String nsPrefix, final String ns) throws SaxonApiException { + Map map = Maps.newHashMap(); + map.put(nsPrefix, ns); + return prepareXPathSelector(xpath, map); + } + + /** + * Evaluate the given xpath on the given XML source. + * @param xmlSource XML source string + * @param xpath the xpath to evaluate + * @param nsPrefix namespace prefix + * @param ns namespace URI + * @return an XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + * @throws SaxonApiException + * + */ + public XdmItem evaluateSingle(final String xmlSource, final String xpath, final String nsPrefix, final String ns) throws SaxonApiException { + Map map = Maps.newHashMap(); + map.put(nsPrefix, ns); + return evaluateSingle(xmlSource, xpath, map); + } + /** + * Evaluate the given xpath on the given XML source. + * + * @param xmlSource XML source string + * @param xpath the xpath to evaluate. xpath must evaluate to an xdmNode + * @param namespaces the map of namespaces to be declared to evaluate the xpath + * @return the XML serialization as string of the XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + * @throws ClassCastException if xpath is not evaluated to a node. + */ + public String evaluateSingleAsString(final String xmlSource, final String xpath, final Map namespaces) throws SaxonApiException { + XdmItem item = evaluateSingle(xmlSource, xpath, namespaces); + if(item != null){ + XdmNode node = (XdmNode) item; + return serializer.serializeNodeToString(node); + } + else return null; + } + + + /** + * Applies the given xpath selector on the given XML source. + * + * @param xmlSource XML source string + * @param xpathSelector the configured xpath selector to apply + * @return the XML serialization as string of the XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + * @throws ClassCastException if xpath is not evaluated to a node. + */ + public String evaluateSingleAsString(final String xmlSource, final XPathSelector xpathSelector) throws SaxonApiException { + XdmItem item = evaluateSingle(xmlSource, xpathSelector); + if(item != null){ + XdmNode node = (XdmNode) item; + return serializer.serializeNodeToString(node); + } + else return null; + } + + /** + * Evaluate the given xpath on the given XML source. + * + * @param xmlSource XML source string + * @param xpath the xpath to evaluate. xpath must evaluate to an xdmNode + * @param nsPrefix namespace prefix + * @param ns namespace URI + * @return the XML serialization as string of the XdmItem resulting from the evaluation of the xpath. Returns null if nothing matches. + * @throws ClassCastException if xpath is not evaluated to a node. + */ + public String evaluateSingleAsString(final String xmlSource, final String xpath, final String nsPrefix, final String ns) throws SaxonApiException { + Map map = Maps.newHashMap(); + map.put(nsPrefix, ns); + return evaluateSingleAsString(xmlSource, xpath, map); + } + + + } + + + + + +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelper.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelper.java new file mode 100644 index 0000000..5677f0e --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelper.java @@ -0,0 +1,98 @@ +package eu.dnetlib.ariadneplus.rdf; + +import java.util.Map; +import javax.annotation.PostConstruct; + +import eu.dnetlib.ariadneplus.publisher.SaxonHelper; +import net.sf.saxon.s9api.SaxonApiException; +import net.sf.saxon.s9api.Serializer; +import net.sf.saxon.s9api.XPathSelector; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.ext.com.google.common.collect.Maps; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * Created by Alessia Bardi on 15/03/2018. + * + * @author Alessia Bardi + */ +@Component +public class RecordParserHelper { + + private static final Log log = LogFactory.getLog(RecordParserHelper.class); + + public static final String OAI_NAMESPACE_URI = "http://www.openarchives.org/OAI/2.0/"; + public static final String DRI_NAMESPACE_URI = "http://www.driver-repository.eu/namespace/dri"; + public static final String RDF_NAMESPACE_URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + + @Autowired + private SaxonHelper saxonHelper; + + private XPathSelector xpathSelectorObjIdentifier; + private XPathSelector xpathSelectorCollectionDate; + private XPathSelector xpathSelectorTransformationDate; + private XPathSelector xpathSelectorDatasourceName; + private XPathSelector xpathSelectorDatasourceApi; + private XPathSelector xpathSelectorRDF; + + @PostConstruct + public void init() throws SaxonApiException { + prepareXpathSelectors(); + } + + public String getCollectionDate(final String record) { + return extractFromRecord(record, xpathSelectorCollectionDate); + } + + public String getTransformationDate(final String record) { + return extractFromRecord(record, xpathSelectorTransformationDate); + } + + public String getDatasourceName(final String record) { + return extractFromRecord(record, xpathSelectorDatasourceName); + } + + public String getDatasourceApi(final String record) { + return extractFromRecord(record, xpathSelectorDatasourceApi); + } + + public String getObjIdentifier(final String record) { + return extractFromRecord(record, xpathSelectorObjIdentifier); + } + + public String getRDF(final String record) { + return extractFromRecord(record, xpathSelectorRDF); + } + + private String extractFromRecord(final String record, final XPathSelector xPathSelector) { + try { + return this.saxonHelper.help().setSerializerProperty(Serializer.Property.OMIT_XML_DECLARATION, "yes").evaluateSingleAsString(record, xPathSelector); + } catch (SaxonApiException e) { + log.error(e); + throw new RuntimeException("Cannot extract content from path "+ xPathSelector.toString(), e); + } + } + + private void prepareXpathSelectors() throws SaxonApiException { + Map namespaces = Maps.newHashMap(); + namespaces.put("oai", OAI_NAMESPACE_URI); + namespaces.put("dri", DRI_NAMESPACE_URI); + namespaces.put("rdf", RDF_NAMESPACE_URI); + xpathSelectorObjIdentifier = this.saxonHelper.help().prepareXPathSelector("//oai:header/dri:objIdentifier/text()", namespaces); + xpathSelectorCollectionDate = this.saxonHelper.help().prepareXPathSelector("//oai:header/dri:dateOfCollection/text()", namespaces); + xpathSelectorTransformationDate = this.saxonHelper.help().prepareXPathSelector("//oai:header/dri:dateOfTransformation/text()", namespaces); + xpathSelectorDatasourceName = this.saxonHelper.help().prepareXPathSelector("//oai:header/dri:datasourcename/text()", namespaces); + xpathSelectorDatasourceApi = this.saxonHelper.help().prepareXPathSelector("//oai:header/dri:datasourceapi/text()", namespaces); + xpathSelectorRDF = this.saxonHelper.help().prepareXPathSelector("//oai:metadata/rdf:RDF", namespaces); + } + + public SaxonHelper getSaxonHelper() { + return saxonHelper; + } + + public void setSaxonHelper(final SaxonHelper saxonHelper) { + this.saxonHelper = saxonHelper; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/ResourceReader.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/ResourceReader.java new file mode 100644 index 0000000..5ac00c3 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/rdf/ResourceReader.java @@ -0,0 +1,460 @@ +package eu.dnetlib.ariadneplus.rdf; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.CRMpe; +import eu.dnetlib.ariadneplus.catalogue.CatalogueLicense; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.assembler.AssemblerHelp; +import org.apache.jena.rdf.model.*; +import org.apache.jena.vocabulary.RDF; +import org.apache.jena.vocabulary.RDFS; +import org.springframework.stereotype.Component; + +/** + * Created by Alessia Bardi on 11/12/2017. + * + * @author Alessia Bardi + */ +@Component +public class ResourceReader { + + private static final Log log = LogFactory.getLog(ResourceReader.class); + //sparql template for services include field that is not explicit in the model + private Property availibilityProperty = ResourceFactory.createProperty("","availability"); + //sparql template for services include field that is not explicit in the model + private Property activitytypeProperty = ResourceFactory.createProperty("","activitytype"); + //sparql template for datasets include field that is generated from the creation event + private Property encodingProperty = ResourceFactory.createProperty("","encoding"); + //sparql template for datasets include field that is generated from the creation event + private Property usedSoftwareProperty = ResourceFactory.createProperty("","used_software"); + //sparql template for software include field that is generated from the creation event of the resource using the software + private Property usedByProperty = ResourceFactory.createProperty("","usedby"); + //sparql template for datasets include field that is generated from the creation event + private Property creatorProperty = ResourceFactory.createProperty("","creator"); + //sparql template for software include field that is generated from the creation event + private Property creationtimeProperty = ResourceFactory.createProperty("","creationtime"); + + + public String getTitle(final Resource resource) { + final Statement s = resource.getProperty(CRM.P102_has_title); + if (s != null) { + RDFNode obj = s.getObject(); + if(obj.isLiteral()) return obj.asLiteral().getLexicalForm(); + } + //if we do not find the crm:P102_has_title, let's get the label + return getLabel(resource); + } + + public String getLabel(final Resource resource) { + if(resource == null) return ""; + if (resource.hasProperty(RDFS.label)) { + return resource.getProperty(RDFS.label).getString().replace("'", "\'"); + } else return ""; + } + + public Iterator getDescriptions(final Resource resource) { + StmtIterator it = resource.listProperties(CRM.P3_has_note); + return Iterators.transform(it, f -> f.getString().replace("'", "\'")); + } + + + //NOTE: based on the sparql templates competency is a string, in the model it is a PE36_Competency_Type + public Iterator getCompetences(final Resource resource) { + StmtIterator it = resource.listProperties(CRMpe.PP45_has_competency); + return Iterators.transform(it, f -> f.getString()); + } + + public String getAvailability(final Resource resource) { + String availability = ""; + if (resource.hasProperty(availibilityProperty)){ + availability = resource.getProperty(availibilityProperty).getString(); + } + return availability; + } + + public String getConditionOfUse(final Resource resource) { + StmtIterator it = resource.listProperties(CRM.P16_used_specific_object); + while(it.hasNext()){ + Resource obj = it.next().getResource(); + if(obj.hasProperty(RDF.type, CRM.E30_Right) && obj.hasProperty(CRM.P3_has_note)){ + String rightsString = obj.getProperty(CRM.P3_has_note).getString(); + if(obj.hasProperty(CRM.P2_has_type)){ + Resource rightType = obj.getPropertyResourceValue(CRM.P2_has_type); + rightsString += " ["+getLabel(rightType)+"]"; + } + return rightsString; + } + } + return ""; + } + + public CatalogueLicense getCatalogueLicense(final Resource resource){ + if(resource.hasProperty(CRM.P16_used_specific_object)) { + Resource obj = resource.getPropertyResourceValue(CRM.P16_used_specific_object); + if (obj.hasProperty(CRM.P2_has_type)) { + String license = getLabel(obj.getPropertyResourceValue(CRM.P2_has_type)); + return CatalogueLicense.getCatalogueLicenseFor(license); + } + } + return CatalogueLicense.NotSpecified; + } + + public Iterator getRDFClassNames(final Resource resource){ + StmtIterator it = resource.listProperties(RDF.type); + return Iterators.transform(it, f -> f.getResource().getLocalName()); + } + + public Iterator getActivityTypes(final Resource resource){ + StmtIterator it = resource.listProperties(activitytypeProperty); + return Iterators.transform(it, f -> f.getString()); + } + + public Iterator getProviderNames(final Resource resource){ + StmtIterator sit = resource.listProperties(CRMpe.PP2_provided_by); + StmtIterator sit2 = resource.listProperties(CRMpe.PP25_has_maintaining_RI); + return Iterators.transform(Iterators.concat(sit, sit2), f -> { + Resource provider = f.getResource(); + return getTitle(provider); + }); + } + + public Iterator getProviderUris(final Resource resource){ + StmtIterator sit = resource.listProperties(CRMpe.PP2_provided_by); + StmtIterator sit2 = resource.listProperties(CRMpe.PP25_has_maintaining_RI); + return Iterators.transform(Iterators.concat(sit, sit2), f -> { + return f.getResource().getURI(); + }); + } + + public Iterator getProviderContactPoints(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP2_provided_by); + return Iterators.transform(it, f -> { + Resource provider = f.getResource(); + if (provider.hasProperty(CRM.P76_has_contact_point)) { + Resource contactPoint = provider.getPropertyResourceValue(CRM.P76_has_contact_point); + return getLabel(contactPoint); + } + else return ""; + }); + } + + public Iterator getResourceDirectContactPointsURI(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P76_has_contact_point); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + + + public Iterator getHostedStuff(final Resource resource){ + //In inference we trust + StmtIterator sit4 = resource.listProperties(CRMpe.PP4_hosts_object); + return Iterators.transform(sit4, f -> f.getResource().getURI()); +// StmtIterator sit6 = resource.listProperties(CRMpe.PP6_hosts_digital_object); +// StmtIterator sit7 = resource.listProperties(CRMpe.PP7_hosts_software_object); +// StmtIterator sit8 = resource.listProperties(CRMpe.PP8_hosts_dataset); +// Iterator it4 = Iterators.transform(sit4, f -> f.getResource().getURI()); +// Iterator it6 = Iterators.transform(sit6, f -> f.getResource().getURI()); +// Iterator it7 = Iterators.transform(sit7, f -> f.getResource().getURI()); +// Iterator it8 = Iterators.transform(sit8, f -> f.getResource().getURI()); +// return Iterators.concat(it4,it6, it7, it8); + } + + public Iterator getHostedBys(final Resource resource){ + //In inference we trust + StmtIterator sit4 = resource.listProperties(CRMpe.PP4i_is_object_hosted_by); + return Iterators.transform(sit4, f -> f.getResource().getURI()); +// StmtIterator sit6 = resource.listProperties(CRMpe.PP6i_is_digital_object_hosted_by); +// StmtIterator sit7 = resource.listProperties(CRMpe.PP7i_is_software_object_hosted_by); +// StmtIterator sit8 = resource.listProperties(CRMpe.PP8i_is_dataset_hosted_by); +// Iterator it4 = Iterators.transform(sit4, f -> f.getResource().getURI()); +// Iterator it6 = Iterators.transform(sit6, f -> f.getResource().getURI()); +// Iterator it7 = Iterators.transform(sit7, f -> f.getResource().getURI()); +// Iterator it8 = Iterators.transform(sit8, f -> f.getResource().getURI()); +// return Iterators.concat(it4, it6, it7, it8); + } + + + public Iterator getCuratedObjects(final Resource resource){ + //In inference we trust + StmtIterator sit32 = resource.listProperties(CRMpe.PP32_curates); + return Iterators.transform(sit32, f -> f.getResource().getURI()); +// StmtIterator sit11 = resource.listProperties(CRMpe.PP11_curates_volatile_digital_object); +// StmtIterator sit12 = resource.listProperties(CRMpe.PP12_curates_volatile_software); +// StmtIterator sit13 = resource.listProperties(CRMpe.PP13_curates_volatile_dataset); +// Iterator it32 = Iterators.transform(sit32, f -> f.getResource().getURI()); +// Iterator it11 = Iterators.transform(sit11, f -> f.getResource().getURI()); +// Iterator it12 = Iterators.transform(sit12, f -> f.getResource().getURI()); +// Iterator it13 = Iterators.transform(sit13, f -> f.getResource().getURI()); +// return Iterators.concat(it32, it11, it12, it13); + } + + public Iterator getCuratorUrls(final Resource resource){ + //In inference we trust + StmtIterator sit32 = resource.listProperties(CRMpe.PP32i_is_curated_by); + return Iterators.transform(sit32, f -> f.getResource().getURI()); +// StmtIterator sit11 = resource.listProperties(CRMpe.PP11i_is_volatile_digital_object_curated_by); +// StmtIterator sit12 = resource.listProperties(CRMpe.PP12i_is_volatile_software_curated_by); +// StmtIterator sit13 = resource.listProperties(CRMpe.PP13i_is_volatile_dataset_curated_by); +// Iterator it32 = Iterators.transform(sit32, f -> f.getResource().getURI()); +// Iterator it11 = Iterators.transform(sit11, f -> f.getResource().getURI()); +// Iterator it12 = Iterators.transform(sit12, f -> f.getResource().getURI()); +// Iterator it13 = Iterators.transform(sit13, f -> f.getResource().getURI()); +// return Iterators.concat(it32, it11, it12, it13); + } + + public Iterator getResourceCuratorCurationPlans(final Resource resource) { + //In inference we trust + StmtIterator sit32 = resource.listProperties(CRMpe.PP32i_is_curated_by); + return Iterators.concat(Iterators.transform(sit32, c -> getCurationPlans(c.getResource()))); + } + + public Iterator getDeliversOnRequest(final Resource resource){ + StmtIterator sit = resource.listProperties(CRMpe.PP15_delivers_on_request); + return Iterators.transform(sit, f -> f.getResource().getURI()); + } + + public Iterator getRunsOnRequest(final Resource resource){ + StmtIterator sit = resource.listProperties(CRMpe.PP14_runs_on_request); + return Iterators.transform(sit, f -> f.getResource().getURI()); + } + + public Iterator getAccessPoints(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP28_has_designated_access_point); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getDeclarativeTimes(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP42_has_declarative_time); + return Iterators.transform(it, f -> f.getString()); + } + + public Iterator getProtocols(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP29_uses_access_protocol); + return Iterators.transform(it, f -> getLabel(f.getResource())); + } + + public Iterator getCurationPlans(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP31_uses_curation_plan); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getMemberUrls(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P107_has_current_or_former_member); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator isMemberOf(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P107i_is_current_or_former_member_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getProvidedServiceUrls(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP2i_provides); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getHasTypeLabels(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P2_has_type); + return Iterators.transform(it, f -> {if(f.getObject().isLiteral()) return f.getObject().asLiteral().getString(); else return getLabel(f.getResource());}); + } + + public Iterator getIsPartOfUrls(final Resource resource){ + //in inference we trust + //StmtIterator it = resource.listProperties(CRMpe.PP23i_is_dataset_part_of); + StmtIterator it = resource.listProperties(CRM.P106i_forms_part_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getHasPartUrls(final Resource resource){ + //in inference we trust + //StmtIterator it = resource.listProperties(CRMpe.PP23_has_dataset_part); + StmtIterator it = resource.listProperties(CRM.P106_is_composed_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getSubjects(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P129_is_about); + return Iterators.transform( Iterators.filter(it, f -> !f.getResource().hasProperty(RDF.type, CRM.E4_Period) && !f.getResource().hasProperty(RDF.type, CRM.E52_Time_Span) && !f.getResource().hasProperty(RDF.type, CRM.E53_Place)), f -> getLabel(f.getResource())); + } + + public List getTemporalCoverages(final Resource resource){ + List temporalCoverages = getCoverages(resource, CRM.E4_Period); + temporalCoverages.addAll(getCoverageTimeSpan(resource)); + return temporalCoverages; + } + + public List getSpatialCoverages(final Resource resource){ + return getCoverages(resource, CRM.E53_Place); + } + + private List getCoverages(final Resource resource, final Resource coverageType){ + List cov = Lists.newArrayList(); + StmtIterator it = resource.listProperties(CRM.P129_is_about); + while(it.hasNext()){ + Resource r = it.next().getResource(); + if(r.hasProperty(RDF.type, coverageType)){ + cov.add(getLabel(r)); + } + } + return cov; + } + + private List getCoverageTimeSpan(final Resource resource){ + List cov = Lists.newArrayList(); + StmtIterator it = resource.listProperties(CRM.P129_is_about); + while(it.hasNext()){ + Resource r = it.next().getResource(); + if(r.hasProperty(RDF.type, CRM.E52_Time_Span)){ + StmtIterator times = r.listProperties(CRM.P82_at_some_time_within); + while(times.hasNext()){ + Resource t = times.next().getResource(); + cov.add(t.toString()); + } + } + } + return cov; + } + + public Iterator getEncodings(final Resource resource){ + StmtIterator it = resource.listProperties(encodingProperty); + return Iterators.transform(it, f -> f.getString()); + } + + public Iterator getCreatorsURIs(final Resource resource){ + StmtIterator it = resource.listProperties(creatorProperty); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getMetadata(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP39i_has_metadata); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + public Iterator getDescribedDataset(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP39_is_metadata_for); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getOfferedServiceUrls(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP1_currently_offers); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public String getStartTime(final Resource resource){ + Resource timespan = resource.getPropertyResourceValue(CRM.P4_has_time_span); + if(timespan != null){ + if(timespan.hasProperty(CRM.P82a_begin_of_the_begin)) + return timespan.getProperty(CRM.P82a_begin_of_the_begin).getString(); + } + return ""; + } + + public String getFirstCreationTime(final Resource resource){ + StmtIterator it = resource.listProperties(creationtimeProperty); + if(it.hasNext()){ + return it.next().getString(); + } + return ""; + } + + public Iterator getMaintainerUrls(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP44_has_maintaining_team); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public List getMaintainerContacts(final Resource resource){ + List res = Lists.newArrayList(); + StmtIterator it = resource.listProperties(CRMpe.PP44_has_maintaining_team); + while(it.hasNext()){ + Resource maintainer = it.next().getResource(); + Iterator itM = getResourceDirectContactPointsURI(maintainer); + while(itM.hasNext()){ + res.add(itM.next()); + } + } + return res; + } + + public Iterator getMaintainersLabels(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP44_has_maintaining_team); + return Iterators.transform(it, f -> getLabel(f.getResource())); + } + + public Iterator getMaintainedUrls(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP44i_is_maintaining_team_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getSnapshots(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP17_has_snapshot); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getIsSnapshotOfs(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP17i_is_snapshot_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getHasReleases(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP22_has_release); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getIsReleaseOfs(final Resource resource){ + StmtIterator it = resource.listProperties(CRMpe.PP22i_is_release_of); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getUsedSoftware(final Resource resource){ + StmtIterator it = resource.listProperties(usedSoftwareProperty); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + public Iterator getUsedBy(final Resource resource){ + StmtIterator it = resource.listProperties(usedByProperty); + return Iterators.transform(it, f -> f.getResource().getURI()); + } + + //NOTE: languages are resources in CRM but our sparql template make them strings by taking the label. + public Iterator getLanguages(final Resource resource){ + StmtIterator it = resource.listProperties(CRM.P72_has_language); + return Iterators.transform(it, f -> f.getString()); + } + + /** + * Finds the most specific type of res. + * + * @param res Resource you want to find the most specific type + * @param fallbackType Resource representing the type to return if there is no type or if we get AmbiguousSpecificTypeException + * @return Resource: the most specific type, if any. fallbackType otherwise + */ + public Resource findSpecificType(final Resource res, final Resource fallbackType) { + Resource type = fallbackType; + Set types = AssemblerHelp.findSpecificTypes(res, fallbackType); + if (types == null || types.isEmpty()) { + log.warn("No specific type found. Returning the fallback type: " + fallbackType); + } + if (types.size() == 1) { + type = types.iterator().next(); + } + if (types.size() > 1) { + log.warn("Found more than one possible specific type"); + types.stream().forEach((t) -> log.warn(t)); + if(types.contains(CRM.E29_Design_or_Procedure)){ + log.warn("CRM.E29_Design_or_Procedure always wins"); + type = CRM.E29_Design_or_Procedure; + } + else { + log.warn("Choosing the first"); + type = types.iterator().next(); + } + } + return type; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClient.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClient.java new file mode 100644 index 0000000..cdbf5bc --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClient.java @@ -0,0 +1,197 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import eu.dnetlib.ariadneplus.rdf.RecordParserHelper; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.datatypes.xsd.XSDDatatype; +import org.apache.jena.rdf.model.*; +import virtuoso.jena.driver.VirtModel; + +/** + * Created by Alessia Bardi on 12/07/2017. + * + * @author Alessia Bardi + */ +public class VirtuosoClient { + + private static final Log log = LogFactory.getLog(VirtuosoClient.class); + + public static final String PROVENANCE_NS = "http://www.d-net.research-infrastructures.eu/provenance/"; + public static final String PROVENANCE_GRAPH = PROVENANCE_NS+"graph"; + public static Property IS_API_OF = ResourceFactory.createProperty(PROVENANCE_NS, "isApiOf"); + public static Property COLL_FROM = ResourceFactory.createProperty(PROVENANCE_NS, "collectedFrom"); + public static Property COLL_IN_DATE = ResourceFactory.createProperty(PROVENANCE_NS, "collectedInDate"); + public static Property TRANS_IN_DATE = ResourceFactory.createProperty(PROVENANCE_NS, "transformedInDate"); + + private RecordParserHelper recordParserHelper; + + private String connectionString; + private String username; + private String password; + private String defaultBaseURI; + + protected VirtuosoClient(final String connectionString, + final String username, + final String password, + final RecordParserHelper recordParserHelper, + final String defaultBaseURI) { + this.connectionString = connectionString; + this.username = username; + this.password = password; + this.recordParserHelper = recordParserHelper; + this.defaultBaseURI = defaultBaseURI; + } + + //TODO: exploit new method eu.dnetlib.ariadneplus.publisher.SaxonHelper.Helper.parseXML() to avoid re-parsing the full record. + + public long feed(final String record) throws AriadnePlusPublisherException{ + Model md = null ; + try { + if (StringUtils.isBlank(record)) { + log.warn("Got empty record"); + return 0; + } + String objIdentifier = recordParserHelper.getObjIdentifier(record); + if (StringUtils.isBlank(objIdentifier)) { + log.warn("Got record with no objIdentifier -- skipping"); + return 0; + } + String rdfBlock = recordParserHelper.getRDF(record); + if (StringUtils.isBlank(rdfBlock)) { + log.warn("Missing rdf:RDF in record with objIdentifier " + objIdentifier + " all triples in that named graph will be deleted"); + } + String collectionDate = recordParserHelper.getCollectionDate(record); + String transformationDate = recordParserHelper.getTransformationDate(record); + String datasource = recordParserHelper.getDatasourceName(record); + String dsInterface = recordParserHelper.getDatasourceApi(record); + + String namedGraph = getRecordDefaultURI(objIdentifier, dsInterface); + log.debug("Trying to open the database model " + namedGraph+", connection string "+getConnectionString()); + + md = VirtModel.openDatabaseModel(namedGraph, getConnectionString(), getUsername(), getPassword()); + log.debug("Opened virtuoso model for graph " + namedGraph); + md.removeAll(); + log.debug("Removed all triples from graph " + namedGraph); + md.read(IOUtils.toInputStream(rdfBlock, "UTF-8"), getDefaultBaseURI()); + long size = md.size(); + log.debug("Graph " + namedGraph + " now has " + size + " triples"); + + long ntriples = feedProvenance(namedGraph, collectionDate, transformationDate, datasource, dsInterface); + log.debug("provenance graph for " + namedGraph + " updated with " + ntriples + " triples"); + md.close(); + return size; + }catch(Throwable e){ + if (md != null && !md.isClosed()) md.close(); + log.error(e); + throw new AriadnePlusPublisherException(e); + } + } + + long feedProvenance(final String namedGraphURI, final String collectionDate, final String transformationDate, final String datasource, final String api) { + Model md = VirtModel.openDatabaseModel(PROVENANCE_GRAPH, getConnectionString(), getUsername(), getPassword()); + Resource rApi = ResourceFactory.createResource(defaultBaseURI + api); + Resource r = ResourceFactory.createResource(namedGraphURI); + Statement stmApi = + ResourceFactory.createStatement(rApi, IS_API_OF, ResourceFactory.createPlainLiteral(datasource)); + Statement stmCollFrom = + ResourceFactory.createStatement(r, COLL_FROM, rApi); + Statement stmCollDate = ResourceFactory + .createStatement(r, COLL_IN_DATE, ResourceFactory.createTypedLiteral(collectionDate, XSDDatatype.XSDdateTime)); + Statement stmTransDate = ResourceFactory + .createStatement(r, TRANS_IN_DATE, ResourceFactory.createTypedLiteral(transformationDate, XSDDatatype.XSDdateTime)); + + //let's remove previous provenance statements for this resource: + md.removeAll(r, null, null); + //and add the new ones + md.add(stmApi).add(stmCollFrom).add(stmCollDate).add(stmTransDate); + md.close(); + return 3; + } + + public long feed(final Iterable records) throws AriadnePlusPublisherException { + //TODO: can we do it in parallel? if all records have different objIdentifier it is safe, and this must be the case anyway, because the source of records is a D-Net mdstore. + long count = 0; + for (String r : records) count += this.feed(r); + return count; + } + + /** + * Delete all triples in named graphs collected from the given api + * @param api the id of the API + * @return the number of triples deleted from the named graphs associated to the given api + */ + public long drop(final String api){ + Model prov = VirtModel.openDatabaseModel(PROVENANCE_GRAPH, getConnectionString(), getUsername(), getPassword()); + //look for all named graphs associated to the api + Resource rApi = ResourceFactory.createResource(defaultBaseURI + api); + long deletedTriples = 0; + final ResIterator resIterator = prov.listSubjectsWithProperty(COLL_FROM, rApi); + while (resIterator.hasNext()) { + Resource namedGraphURI = resIterator.nextResource(); + //delete all triples belonging to the r named graph + deletedTriples += dropNamedGraph(namedGraphURI.getURI()); + //delete the named graph from the provenance graph + prov.removeAll(namedGraphURI, null, null); + } + //delete the api from the provenance graph + prov.removeAll(null, null, rApi); + prov.removeAll(rApi, null, null); + prov.close(); + return deletedTriples; + } + + private long dropNamedGraph(String namedGraphURI){ + Model namedGraph = VirtModel.openDatabaseModel(namedGraphURI, getConnectionString(), getUsername(), getPassword()); + long deletedTriples = namedGraph.size(); + namedGraph.removeAll(); + namedGraph.close(); + return deletedTriples; + } + + private String getRecordDefaultURI(final String objIdentifier, final String datasourceApi) { + return defaultBaseURI + datasourceApi + "/" + objIdentifier; + } + + public String getConnectionString() { + return connectionString; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public String getDefaultBaseURI() { + return defaultBaseURI; + } + + public RecordParserHelper getRecordParserHelper() { + return recordParserHelper; + } + + public void setRecordParserHelper(final RecordParserHelper recordParserHelper) { + this.recordParserHelper = recordParserHelper; + } + + public void setConnectionString(final String connectionString) { + this.connectionString = connectionString; + } + + public void setUsername(final String username) { + this.username = username; + } + + public void setPassword(final String password) { + this.password = password; + } + + public void setDefaultBaseURI(final String defaultBaseURI) { + this.defaultBaseURI = defaultBaseURI; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientFactory.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientFactory.java new file mode 100644 index 0000000..fcf72d7 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientFactory.java @@ -0,0 +1,75 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import eu.dnetlib.ariadneplus.rdf.RecordParserHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * Created by Alessia Bardi on 12/07/2017. + * + * @author Alessia Bardi + */ +@Component +public class VirtuosoClientFactory { + + private static final Log log = LogFactory.getLog(VirtuosoClientFactory.class); + @Value("${virtuoso.connectionstring}") + private String connectionString; + @Value("${virtuoso.usr}") + private String username; + @Value("${virtuoso.pwd}") + private String password; + @Value("${virtuoso.uri.base.default}") + private String defaultBaseURI; + + @Autowired + private RecordParserHelper recordParserHelper; + + public VirtuosoClient getVirtuosoClient() { + log.debug("Creating VirtuosoClient for "+connectionString); + return new VirtuosoClient(connectionString, username, password, recordParserHelper, defaultBaseURI); + } + + public String getConnectionString() { + return connectionString; + } + + public void setConnectionString(final String connectionString) { + this.connectionString = connectionString; + } + + public String getUsername() { + return username; + } + + public void setUsername(final String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } + + public String getDefaultBaseURI() { + return defaultBaseURI; + } + + public void setDefaultBaseURI(final String defaultBaseURI) { + this.defaultBaseURI = defaultBaseURI; + } + + public RecordParserHelper getRecordParserHelper() { + return recordParserHelper; + } + + public void setRecordParserHelper(final RecordParserHelper recordParserHelper) { + this.recordParserHelper = recordParserHelper; + } +} diff --git a/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPI.java b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPI.java new file mode 100644 index 0000000..2f39d15 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPI.java @@ -0,0 +1,171 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHeaders; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.apache.jena.query.ResultSet; +import org.apache.jena.sparql.engine.http.QueryEngineHTTP; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +/** + * Created by Alessia Bardi on 31/01/2018. + * Read-only API for virtuoso. + * + * //TODO: error handling (http://www.springboottutorial.com/spring-boot-exception-handling-for-rest-services) + * //TODO: pagination + * //TODO swagger documentation? + * + * @author Alessia Bardi + */ +@RestController +public class VirtuosoReadAPI { + + private static final Log log = LogFactory.getLog(VirtuosoReadAPI.class); + + @Value("${virtuoso.sparqlurl}") + private String sparqlUrl; + @Value("${virtuoso.pwd}") + private String username; + @Value("${virtuoso.pwd}") + private String password; + @Value("${virtuoso.uri.base.default}") + private String defaultBaseURI; + @Value("${virtuoso.connectionstring") + private String virtuosoConnectionString; + + @Autowired + private Configuration freemarkerConfig; + + @RequestMapping(value = "/virtuoso/apiSubjectsWithType", produces = { "application/json" }, method = RequestMethod.GET) + public List getSubjectsForApiWithType(@RequestParam final String api, @RequestParam final String typeNamespace, @RequestParam final String typeName, @RequestParam final int limit, @RequestParam final int offset){ + String fullTypeName = typeNamespace + typeName; + log.debug(String.format("Getting subjects of type %s for API %s limit %d offset %d", fullTypeName, api, limit, offset)); + //if I add the ORDER BY the query is too slow: let's hope we are not getting the same subjects over and over again + String queryForSubjectsTemplate = "DEFINE input:inference 'ariadneplus_rules' SELECT DISTINCT ?s WHERE { GRAPH ?g {?s a <%s> .} . GRAPH dnet:graph {?g dnet:collectedFrom <%s> .}} LIMIT %d OFFSET %d"; + String q = String.format(queryForSubjectsTemplate, fullTypeName, defaultBaseURI+api, limit, offset); + log.debug("SPARQL query: "+q); + final QueryEngineHTTP serviceRequest = new QueryEngineHTTP(sparqlUrl, q); + ResultSet subjects = serviceRequest.execSelect(); + Iterator s = Iterators.transform(subjects, qs -> qs.getResource("s").getURI()); + List res = Lists.newArrayList(s); + serviceRequest.close(); + return res; + } + + /** + * Returns the paginated list of resource URI used as subjects in the context of a given api. All subject URIs are returned, except from CRM.E55_Type and CRM.E41_Appellation. + * TODO: probably we can remove this, as it is used only for testing. + * @param api + * @param limit + * @param offset + * @return a page of URIs that are subjects in the context of a given api + * + */ + @Deprecated + @RequestMapping(value = "/virtuoso/apiSubjects", produces = { "application/json" }, method = RequestMethod.GET) + public List getSubjectsForApi(@RequestParam final String api, @RequestParam final int limit, @RequestParam final int offset){ + log.debug(String.format("Getting subjects for API %s, limit %d offset %d", api, limit, offset)); + //if I add the ORDER BY the query is too slow: let's hope we are not getting the same subjects over and over again + String queryForSubjectsTemplate = "DEFINE input:inference 'ariadneplus_rules' SELECT DISTINCT ?s WHERE { GRAPH ?g {?s a ?t . FILTER (?t != <%s> && ?t != <%s>)} . GRAPH dnet:graph {?g dnet:collectedFrom <%s> .}} LIMIT %d OFFSET %d "; + String q = String.format(queryForSubjectsTemplate, CRM.E55_Type.getURI(), CRM.E41_Appellation.getURI(), defaultBaseURI+api, limit, offset); + log.debug("SPARQL query: "+q); + final QueryEngineHTTP serviceRequest = new QueryEngineHTTP(sparqlUrl, q); + ResultSet subjects = serviceRequest.execSelect(); + Iterator s = Iterators.transform(subjects, qs -> qs.getResource("s").getURI()); + List res = Lists.newArrayList(s); + serviceRequest.close(); + return res; + } + + + @RequestMapping(value = "/virtuoso/subject", produces = { "application/rdf+xml", "application/xml" }, method = RequestMethod.GET) + @ResponseStatus(value = HttpStatus.OK) + public void getSubject(@RequestParam final String subjectURL, @RequestParam final String typeName, @RequestParam(name="timeout") final String timeoutMs, final OutputStream responseStream) + throws IOException, TemplateException, AriadnePlusPublisherException { + String templateName = typeName+".sparql"; + Template temp = freemarkerConfig.getTemplate(templateName); + Map values = new HashMap<>(); + values.put("subjectURL", subjectURL); + + StringWriter sw = new StringWriter(); + temp.process(values, sw); + String q = sw.toString(); + log.debug("Querying for "+subjectURL+" with query "+templateName); + sendConstructResponse(q, timeoutMs, responseStream); + } + + + protected void sendConstructResponse(final String query, final String timeoutMs, final OutputStream responseStream) throws IOException, AriadnePlusPublisherException { + String res = executeSparqlPost(query, timeoutMs); + IOUtils.write(res, responseStream); + } + + protected String executeSparqlPost(final String query, final String timeoutMs) throws IOException, AriadnePlusPublisherException { + try (CloseableHttpClient httpclient = HttpClients.createDefault()) { + HttpPost httpPost = new HttpPost(sparqlUrl); + httpPost.setHeader(HttpHeaders.ACCEPT, "application/rdf+xml"); + List nvps = Lists.newArrayList(); + nvps.add(new BasicNameValuePair("query", query)); + if (StringUtils.isNotBlank(timeoutMs)) { + nvps.add(new BasicNameValuePair("timeout", timeoutMs)); + } + httpPost.setEntity(new UrlEncodedFormEntity(nvps)); + + + try (CloseableHttpResponse response2 = httpclient.execute(httpPost)) { + HttpEntity entity2 = response2.getEntity(); + String res = IOUtils.toString(entity2.getContent()); + EntityUtils.consume(entity2); + int statusCode = response2.getStatusLine().getStatusCode(); + switch(statusCode){ + case 200: + return res; + case 504: + String msg = String.format("ERROR 504 on query %s", query); + throw new AriadnePlusPublisherException(msg); + default: + String errorMessage = String.format("ERROR HTTP STATUS CODE %d, REASON PHRASE: %s\n ERROR BODY: %s", statusCode, response2.getStatusLine(), res); + log.error(errorMessage); + return ""; + //throw new AriadnePlusPublisherException(errorMessage); + } + } + } + + + } + + + + + +} diff --git a/dnet-ariadneplus-publisher/src/main/resources/application.properties b/dnet-ariadneplus-publisher/src/main/resources/application.properties new file mode 100644 index 0000000..59e909f --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/application.properties @@ -0,0 +1,15 @@ +server.contextPath = /ariadneplus + +virtuoso.sparqlurl = http://localhost:8890/sparql +virtuoso.connectionstring = jdbc:virtuoso://localhost:1111 +virtuoso.pwd = dba +virtuoso.usr = dba +virtuoso.uri.base.default = http://ariadneplus.d4science.org/handle/ + +gcube.registry.baseurl = http://registry-t-ariadneplus.d4science.org:80/resource-registry +gcube.registry.uri.base.default = http://ariadneplus.d4science.org/handle/ +gcube.registry.application.name = AriadnePlusAggregator +gcube.registry.application.token = + +gcube.catalogue.baseurl = https://gcat.d4science.org/gcat/ +gcube.uri.resolver = https://data.d4science.org/ariadneplus_registry/ diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/D14_Software.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/D14_Software.sparql new file mode 100644 index 0000000..f8fa1bd --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/D14_Software.sparql @@ -0,0 +1,106 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + + <${subjectURL}> crm:P102_has_title ?title . + <${subjectURL}> crm:P3_has_note ?description . + <${subjectURL}> a ?type . + <${subjectURL}> rdfs:label ?label . + + <${subjectURL}> crm:P129_is_about ?about . + ?about a ?aboutType . + ?about rdfs:label ?aboutLabel . + + <${subjectURL}> crm:P2_has_type ?e55TypeLabel . + + <${subjectURL}> crmpe:PP7i_is_software_object_hosted_by ?host . + <${subjectURL}> crmpe:PP32i_is_curated_by ?curatingService . + + <${subjectURL}> crmpe:PP17_has_snapshot ?snapshot1 . + <${subjectURL}> crmpe:PP17i_is_snapshot_of ?snapshot2 . + + <${subjectURL}> crmpe:PP21_has_software_part ?sw1 . + <${subjectURL}> crmpe:PP21i_is_software_part_of ?sw2 . + <${subjectURL}> crmpe:PP22_has_release ?sw3 . + <${subjectURL}> crmpe:PP22i_is_release_of ?sw4 . + + <${subjectURL}> ?adopter . + <${subjectURL}> ?creationtime . +} +WHERE { + <${subjectURL}> a crmdig:D14_Software . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . +} +UNION{ + <${subjectURL}> crm:P3_has_note ?description . +} +UNION{ + <${subjectURL}> rdfs:label ?label . +} +UNION { + <${subjectURL}> crm:P2_has_type ?e55Type . + ?e55Type rdfs:label ?e55TypeLabel . +} + UNION{ + <${subjectURL}> crm:P129_is_about ?about . + ?about a ?aboutType . + ?about rdfs:label ?aboutLabel . + } + UNION{<${subjectURL}> crmpe:PP7i_is_software_object_hosted_by ?host . } + UNION{?host crmpe:PP7_hosts_software_object <${subjectURL}> . } + UNION{<${subjectURL}> crmpe:PP32i_is_curated_by ?curatingService .} + UNION{?curatingService crmpe:PP32_curates <${subjectURL}> .} + UNION{ + <${subjectURL}> crmpe:PP32i_is_curated_by ?curatingService . + ?curatingService crmpe:PP31_uses_curation_plan ?curationplan . + } +UNION{ + ?curatingService crmpe:PP32_curates <${subjectURL}> . + ?curatingService crmpe:PP31_uses_curation_plan ?curationplan . +} + UNION{<${subjectURL}> crmpe:PP17_has_snapshot ?snapshot1 .} + UNION{ ?snapshot1 crmpe:PP17i_is_snapshot_of <${subjectURL}> .} + UNION{<${subjectURL}> crmpe:PP17i_is_snapshot_of ?snapshot2 .} + UNION{ ?snapshot2 crmpe:PP17_has_snapshot <${subjectURL}> .} + + UNION{<${subjectURL}> crmpe:PP21_has_software_part ?sw1 .} + UNION{?sw1 crmpe:PP21i_is_software_part_of <${subjectURL}>.} + + UNION{ ?sw2 crmpe:PP21_has_software_part <${subjectURL}> .} + UNION{<${subjectURL}> crmpe:PP21i_is_software_part_of ?sw2 .} + + UNION{<${subjectURL}> crmpe:PP22_has_release ?sw3 .} + UNION{?sw3 crmpe:PP22i_is_release_of <${subjectURL}> .} + + UNION{<${subjectURL}> crmpe:PP22i_is_release_of ?sw4 .} + UNION{?sw4 crmpe:PP22_has_release <${subjectURL}> .} + + UNION{ + ?adopter crm:P94i_was_created_by ?event . + ?event crmdig:L23_used_software_or_firmware <${subjectURL}> . + } + UNION { + <${subjectURL}> crmdig:L23i_was_software_or_firmware_used_by ?event . + ?adopter crm:P94i_was_created_by ?event . + } + UNION{ + <${subjectURL}> crm:P94i_was_created_by ?event1 . + ?event1 crm:P2_has_type . + ?event1 crm:P4_has_time-span ?timespan . + ?timespan crm:P81_ongoing_throughout ?creationtime . + } +} +LIMIT 1000 \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E29_Design_or_Procedure.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E29_Design_or_Procedure.sparql new file mode 100644 index 0000000..5ef1d16 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E29_Design_or_Procedure.sparql @@ -0,0 +1,51 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { +<${subjectURL}> crm:P1_is_identified_by ?IDRes . +?IDRes a crm:E42_Identifier . +?IDRes rdfs:label ?ID_label . + +<${subjectURL}> crm:P102_has_title ?title . +<${subjectURL}> crm:P3_has_note ?description . +<${subjectURL}> a ?type . +<${subjectURL}> rdfs:label ?label . + +<${subjectURL}> crm:P2_has_type ?e55TypeLabel . + +<${subjectURL}> ?adopter . +<${subjectURL}> ?creationtime . +} +WHERE { + <${subjectURL}> a crm:E29_Design_or_Procedure . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . +} +UNION{ + <${subjectURL}> crm:P3_has_note ?description . +} +UNION{ + <${subjectURL}> rdfs:label ?label . +} +UNION { + <${subjectURL}> crm:P2_has_type ?e55Type . + ?e55Type rdfs:label ?e55TypeLabel . +} +UNION { + ?adopter crmpe:PP31_uses_curation_plan <${subjectURL}> . +} +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?event1 . + ?event1 crm:P2_has_type . + ?event1 crm:P4_has_time-span ?timespan . + ?timespan crm:P81_ongoing_throughout ?creationtime . +} +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E39_Actor.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E39_Actor.sparql new file mode 100644 index 0000000..dfbad19 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E39_Actor.sparql @@ -0,0 +1,68 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { +<${subjectURL}> rdfs:label ?label . +<${subjectURL}> a ?type . +<${subjectURL}> crm:P2_has_type ?e55TypeLabel . + +<${subjectURL}> crm:P1_is_identified_by ?IDRes . +?IDRes a crm:E42_Identifier . +?IDRes rdfs:label ?ID_label . + +<${subjectURL}> crm:P102_has_title ?title . +<${subjectURL}> crm:P3_has_note ?description . + +<${subjectURL}> crm:P76_has_contact_point ?contactpoint . +?contactpoint crm:P2_has_type ?contactpointType . +?contactpoint rdfs:label ?contactpointLabel . +?contactpointType rdfs:label ?contactpointTypeLabel . + +<${subjectURL}> crm:P107_has_current_or_former_member ?member1 . +<${subjectURL}> crm:P107i_is_current_or_former_member_of ?team . +<${subjectURL}> crmpe:PP2i_provides ?service . + +<${subjectURL}> crmpe:PP44i_is_maintaining_team_of ?maintained . +} +WHERE { + <${subjectURL}> a crm:E39_Actor . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . +} +UNION{ <${subjectURL}> crm:P3_has_note ?description .} +UNION{ <${subjectURL}> rdfs:label ?label .} +UNION { + <${subjectURL}> crm:P2_has_type ?e55Type . + ?e55Type rdfs:label ?e55TypeLabel . +} +UNION{ + <${subjectURL}> crm:P76_has_contact_point ?contactpoint . +} + UNION{ + <${subjectURL}> crm:P76_has_contact_point ?contactpoint . + ?contactpoint rdfs:label ?contactpointLabel . +} +UNION{ + <${subjectURL}> crm:P76_has_contact_point ?contactpoint . + ?contactpoint crm:P2_has_type ?contactpointType . + ?contactpointType rdfs:label ?contactpointTypeLabel . + } + UNION{ <${subjectURL}> crm:P107_has_current_or_former_member ?member1 .} + UNION{ ?member1 crm:P107_has_current_or_former_member <${subjectURL}> .} + UNION{ <${subjectURL}> crm:P107i_is_current_or_former_member_of ?team .} + UNION{ ?team crm:P107_has_current_or_former_member <${subjectURL}> .} + + UNION{ <${subjectURL}> crmpe:PP2i_provides ?service .} + UNION{ ?service crmpe:PP2_provided_by <${subjectURL}> .} + + UNION{ <${subjectURL}> crmpe:PP44i_is_maintaining_team_of ?maintained .} + UNION{ ?maintained crmpe:PP44_has_maintaining_team <${subjectURL}> .} +} diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E78_Collection.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E78_Collection.sparql new file mode 100644 index 0000000..98dd6ae --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/E78_Collection.sparql @@ -0,0 +1,73 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + + <${subjectURL}> crm:P102_has_title ?title . + <${subjectURL}> crm:P3_has_note ?description . + <${subjectURL}> a ?type . + <${subjectURL}> rdfs:label ?label . + + <${subjectURL}> crm:P129_is_about ?about . + ?about a ?aboutType . + ?about rdfs:label ?aboutLabel . + + <${subjectURL}> crm:P2_has_type ?e55TypeLabel . + + <${subjectURL}> crm:P46_is_composed_of ?Col_Part . + + <${subjectURL}> crmpe:PP4i_is_object_hosted_by ?host_serv . + <${subjectURL}> crmpe:PP32i_is_curated_by ?curator . + <${subjectURL}> ?creator . + + <${subjectURL}> crm:P72_has_language ?languageLabel . +} +WHERE { + <${subjectURL}> a crm:E78_Collection . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . +} +UNION{ + <${subjectURL}> crm:P3_has_note ?description . +} +UNION{ + <${subjectURL}> rdfs:label ?label . +} +UNION{ +<${subjectURL}> crm:P129_is_about ?about . +?about a ?aboutType . +?about rdfs:label ?aboutLabel . +} +UNION { +<${subjectURL}> crm:P2_has_type ?e55Type . +?e55Type rdfs:label ?e55TypeLabel . +} +UNION{ <${subjectURL}> crm:P46_is_composed_of ?Col_Part .} +UNION{ ?Col_Part crm:P46i_forms_part_of <${subjectURL}> .} + +UNION{ <${subjectURL}> crmpe:PP4i_is_object_hosted_by ?host_serv .} +UNION{ <${subjectURL}> crmpe:PP32i_is_curated_by ?curator .} +UNION{ ?host_serv crmpe:PP4_hosts_object <${subjectURL}> .} +UNION{ ?curator crmpe:PP32_curates <${subjectURL}> .} + +UNION { + <${subjectURL}> crm:P94i_was_created_by ?Creation_event . + ?Creation_event crm:P14_carried_out_by ?creator . +} +UNION { + <${subjectURL}> crm:P72_has_language ?language . + ?language rdfs:label ?languageLabel . +} + +} LIMIT 30000 \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE18_Dataset.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE18_Dataset.sparql new file mode 100644 index 0000000..1012e27 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE18_Dataset.sparql @@ -0,0 +1,138 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + + <${subjectURL}> crm:P102_has_title ?title . + <${subjectURL}> crm:P3_has_note ?description . + <${subjectURL}> a ?type . + <${subjectURL}> rdfs:label ?label . + + <${subjectURL}> crm:P129_is_about ?about . + ?about a ?aboutType . + ?about rdfs:label ?aboutLabel . + + <${subjectURL}> crm:P2_has_type ?e55TypeLabel . + + <${subjectURL}> crmpe:PP8i_is_dataset_hosted_by ?host . + <${subjectURL}> crmpe:PP32i_is_curated_by ?curator . + + <${subjectURL}> crm:P106i_forms_part_of ?container . + <${subjectURL}> crm:P106_is_composed_of ?d3 . + + <${subjectURL}> crmpe:PP39_is_metadata_for ?anotherdataset . + <${subjectURL}> crmpe:PP39i_has_metadata ?metadata . + + <${subjectURL}> crmpe:PP17i_is_snapshot_of ?snapshotted . + <${subjectURL}> crmpe:PP17_has_snapshot ?snapshot . + + <${subjectURL}> ?encoding_label . + <${subjectURL}> ?sw . + <${subjectURL}> ?creator . + <${subjectURL}> ?creationtime . + <${subjectURL}> ?updatetime . + <${subjectURL}> ?custodytime . + <${subjectURL}> ?custodialhistoryNote . + <${subjectURL}> ?curationtime . + <${subjectURL}> crm:P72_has_language ?languageLabel . +} +WHERE { + <${subjectURL}> a crmpe:PE18_Dataset . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . +} +UNION{ + <${subjectURL}> crm:P3_has_note ?description . +} +UNION{ + <${subjectURL}> rdfs:label ?label . +} + UNION{ + <${subjectURL}> crm:P129_is_about ?about . + ?about a ?aboutType . + ?about rdfs:label ?aboutLabel . + } + UNION { + <${subjectURL}> crm:P2_has_type ?e55Type . + ?e55Type rdfs:label ?e55TypeLabel . + } + UNION{ <${subjectURL}> crmpe:PP8i_is_dataset_hosted_by ?host . } + UNION{ ?host crmpe:PP8_hosts_dataset <${subjectURL}> . } + UNION{ <${subjectURL}> crmpe:PP32i_is_curated_by ?curator .} + UNION{ ?curator crmpe:PP32_curates <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP32i_is_curated_by ?curator .} + UNION{ ?curator crmpe:PP32_curates <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP31_uses_curation_plan ?curationplan .} + UNION{ <${subjectURL}> crm:P106i_forms_part_of ?container .} + UNION{ ?container crm:P106_is_composed_of <${subjectURL}> .} + UNION{ <${subjectURL}> crm:P106_is_composed_of ?d3 .} + UNION{ ?d3 crm:P106i_forms_part_of <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP39_is_metadata_for ?anotherdataset .} + UNION{ ?anotherdataset crmpe:PP39i_has_metadata <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP39i_has_metadata ?metadata .} + UNION{ ?metadata crmpe:PP39_is_metadata_for <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP17_has_snapshot ?snapshot .} + UNION{ ?snapshot crmpe:PP17i_is_snapshot_of <${subjectURL}> .} + UNION{ <${subjectURL}> crmpe:PP17i_is_snapshot_of ?snapshotted .} + UNION{ ?snapshotted crmpe:PP17_has_snapshot <${subjectURL}> .} + UNION{ + <${subjectURL}> crm:P94i_was_created_by ?Creation_event . + ?Creation_event crm:P33_used_specific_technique ?technique . + ?technique crm:P2_has_type ?techniquetype . + ?techniquetype rdfs:label ?encoding_label . + } +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?Creation_event . + ?Creation_event crm:P2_has_type . + ?Creation_event crmdig:L23_used_software_or_firmware ?sw . +} +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?Creation_event . + ?Creation_event crm:P2_has_type . + ?Creation_event crm:P14_carried_out_by ?creator . + } +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?event1 . + ?event1 crm:P2_has_type . + ?event1 crm:P4_has_time-span ?timespan . + ?timespan crm:P81_ongoing_throughout ?creationtime . + } +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?updateEvent . + ?updateEvent crm:P2_has_type . + ?updateEvent crm:P4_has_time-span ?timespanUpdate . + ?timespanUpdate crm:P82_at_some_time_within ?updatetime . +} +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?custodialhistory . + ?custodialhistory crm:P2_has_type . + ?custodialhistory crm:P3_has_note ?custodialhistoryNote . +} +UNION{ + <${subjectURL}> crm:P94i_was_created_by ?custodialhistory . + ?custodialhistory crm:P2_has_type . + ?custodialhistory crm:P4_has_time-span ?timespanCustody . + ?timespanCustody crm:P82_at_some_time_within ?custodytime . +} +UNION { + <${subjectURL}> ?hasCurationActivity ?curationActivity . + ?curationActivity a crm:E87_Curation_Activity . + ?curationActivity crm:P4_has_time-span ?curationActivitytimespan . + ?curationActivitytimespan crm:P82_at_some_time_within ?curationtime . +} +UNION { + <${subjectURL}> crm:P72_has_language ?language . + ?language rdfs:label ?languageLabel . +} +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE1_Service.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE1_Service.sparql new file mode 100644 index 0000000..873ea06 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE1_Service.sparql @@ -0,0 +1,148 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { +<${subjectURL}> crm:P1_is_identified_by ?IDRes . +?IDRes a crm:E42_Identifier . +?IDRes rdfs:label ?ID_label . + +<${subjectURL}> crm:P102_has_title ?title . +<${subjectURL}> crm:P3_has_note ?description . +<${subjectURL}> rdfs:label ?label . +<${subjectURL}> a ?type . +<${subjectURL}> crm:P2_has_type ?atypeLabel . + +<${subjectURL}> crmpe:PP2_provided_by ?provider . +?provider crm:P1_is_identified_by ?providerTitle . +?provider rdfs:label ?providerLabel . +?provider crm:P3_has_note ?providerDescr . +?provider crm:P76_has_contact_point ?contactpoint . +?contactpoint crm:P2_has_type ?contactpointType . +?contactpoint rdfs:label ?contactpointLabel . +?contactpointType rdfs:label ?contactpointTypeLabel . + +<${subjectURL}> crmpe:PP4_hosts_object ?object . + +<${subjectURL}> crmpe:PP28_has_designated_access_point ?accesspoint . +<${subjectURL}> crmpe:PP1i_is_currently_offered_by ?offerer . +<${subjectURL}> crmpe:PP45_has_competency ?competenceLabel . + +<${subjectURL}> crmpe:PP31_uses_curation_plan ?curationplan . + +<${subjectURL}> crmpe:PP29_uses_access_protocol ?protocol . +?protocol rdfs:label ?protocolLabel . + +<${subjectURL}> crmpe:PP32_curates ?object2 . + +<${subjectURL}> crmpe:PP15_delivers_on_request ?delivered . +<${subjectURL}> crmpe:PP14_runs_on_request ?ran . + +<${subjectURL}> crmpe:PP42_has_declarative_time ?declTime . + +<${subjectURL}> ?availabilityLabel . +<${subjectURL}> ?activitytypeLabel . + + <${subjectURL}> crm:P16_used_specific_object ?Conditions_of_Use . + ?Conditions_of_Use a crm:E30_Right . + ?Conditions_of_Use crm:P3_has_note ?Conditions_of_Use_Note . + ?Conditions_of_Use crm:P2_has_type ?Conditions_of_Use_Type . + ?Conditions_of_Use_Type rdfs:label ?Conditions_of_Use_Type_label . + +} +WHERE { + <${subjectURL}> a crmpe:PE1_Service . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION +{ + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . + FILTER NOT EXISTS { ?titleRes a crm:E51_Contact_Point } +} +UNION{ + <${subjectURL}> crm:P3_has_note ?description . +} +UNION{ + <${subjectURL}> rdfs:label ?label . +} + UNION{ + <${subjectURL}> crm:P2_has_type ?atype . + ?atype rdfs:label ?atypeLabel . +} +UNION{ + <${subjectURL}> crm:P2_has_type ?availability . + ?availability rdfs:label ?availabilityLabel . + FILTER(STRSTARTS(STR(?availability), "http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Concept/availabilitytype")) +} +UNION{ + <${subjectURL}> crm:P2_has_type ?activitytype . + ?activitytype rdfs:label ?activitytypeLabel . + FILTER(STRSTARTS(STR(?activitytype), "http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Concept/activitytype")) +} +UNION { +<${subjectURL}> crmpe:PP2_provided_by ?provider . + ?provider crm:P1_is_identified_by ?providerTitleRes . + ?providerTitleRes rdfs:label ?providerTitle . +} +UNION { +<${subjectURL}> crmpe:PP2_provided_by ?provider . + ?provider crm:P3_has_note ?providerDescr . +} +UNION { +<${subjectURL}> crmpe:PP2_provided_by ?provider . + ?provider rdfs:label ?providerLabel . +} +UNION { +<${subjectURL}> crmpe:PP2_provided_by ?provider . + ?provider crm:P76_has_contact_point ?contactpoint . +?contactpoint rdfs:label ?contactpointLabel . +} +UNION { +<${subjectURL}> crmpe:PP2_provided_by ?provider . + ?provider crm:P76_has_contact_point ?contactpoint . + ?contactpoint crm:P2_has_type ?contactpointType . + ?contactpointType rdfs:label ?contactpointTypeLabel .} +UNION { <${subjectURL}> crmpe:PP28_has_designated_access_point ?accesspoint .} +UNION { ?accesspoint crmpe:PP28i_is_designated_access_point_of <${subjectURL}> .} +UNION { <${subjectURL}> crmpe:PP1i_is_currently_offered_by ?offerer .} +UNION { ?offerer crmpe:PP1_currently_offers <${subjectURL}> .} +UNION { + <${subjectURL}> crmpe:PP45_has_competency ?competence . + ?competence rdfs:label ?competenceLabel .} +UNION { <${subjectURL}> crmpe:PP4_hosts_object ?object .} +UNION { ?object crmpe:PP4i_is_object_hosted_by <${subjectURL}> .} + +UNION {<${subjectURL}> crmpe:PP31_uses_curation_plan ?curationplan .} +UNION { ?curationplan crmpe:PP31i_is_curation_plan_used_by <${subjectURL}> .} +UNION { + <${subjectURL}> crmpe:PP29_uses_access_protocol ?protocol . + ?protocol rdfs:label ?protocolLabel .} +UNION { + ?protocol crmpe:PP29i_is_access_protocol_used_by <${subjectURL}> . + ?protocol rdfs:label ?protocolLabel .} +UNION { <${subjectURL}> crmpe:PP32_curates ?object2 .} +UNION { ?object2 crmpe:PP32i_is_curated_by <${subjectURL}> .} +UNION { <${subjectURL}> crmpe:PP15_delivers_on_request ?delivered .} +UNION { ?delivered crmpe:PP15i_is_delivered_by <${subjectURL}>.} +UNION { <${subjectURL}> crmpe:PP14_runs_on_request ?ran .} +UNION { ?ran crmpe:PP14i_is_run_by <${subjectURL}>.} + UNION { + <${subjectURL}> crmpe:PP42_has_declarative_time ?declTime .} +UNION { + <${subjectURL}> crm:P16_used_specific_object ?Conditions_of_Use . + ?Conditions_of_Use a crm:E30_Right . + ?Conditions_of_Use crm:P3_has_note ?Conditions_of_Use_Note . +} +UNION { + <${subjectURL}> crm:P16_used_specific_object ?Conditions_of_Use . + ?Conditions_of_Use a crm:E30_Right . + ?Conditions_of_Use crm:P2_has_type ?Conditions_of_Use_Type . + ?Conditions_of_Use_Type rdfs:label ?Conditions_of_Use_Type_label . +} + +} + diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE35_Project.sparql b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE35_Project.sparql new file mode 100644 index 0000000..3695c2a --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/PE35_Project.sparql @@ -0,0 +1,62 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { + <${subjectURL}> rdfs:label ?label . + +<${subjectURL}> crm:P1_is_identified_by ?IDRes . +?IDRes a crm:E42_Identifier . +?IDRes rdfs:label ?ID_label . + +<${subjectURL}> crm:P102_has_title ?title . + + <${subjectURL}> crm:P3_has_note ?description . + + <${subjectURL}> a ?type . + + <${subjectURL}> crmpe:PP1_currently_offers ?offeredservice . + +<${subjectURL}> crmpe:PP44_has_maintaining_team ?team . + ?team crm:P76_has_contact_point ?contactpoint . + ?contactpoint crm:P2_has_type ?contactpointType . + ?contactpoint rdfs:label ?contactpointLabel . + ?contactpointType rdfs:label ?contactpointTypeLabel . + + <${subjectURL}> crm:P4_has_time-span ?time_span . + ?time_span crm:P82a_begin_of_the_begin ?time_actual . +} +WHERE { + <${subjectURL}> a crmpe:PE35_Project . + <${subjectURL}> a ?type . + { + <${subjectURL}> crm:P1_is_identified_by ?IDRes . + ?IDRes a crm:E42_Identifier . + ?IDRes rdfs:label ?ID_label . + } + UNION + { + <${subjectURL}> crm:P1_is_identified_by ?titleRes . + ?titleRes a crm:E41_Appellation . + ?titleRes rdfs:label ?title . + } +UNION{ <${subjectURL}> crm:P3_has_note ?description .} +UNION{ <${subjectURL}> rdfs:label ?label .} + +UNION{ + <${subjectURL}> crmpe:PP1_currently_offers ?offeredservice . +} +UNION{ + <${subjectURL}> crmpe:PP44_has_maintaining_team ?team . + } + UNION{ + <${subjectURL}> crmpe:PP44_has_maintaining_team ?team . + ?team crm:P76_has_contact_point ?contactpoint . + ?contactpoint crm:P2_has_type ?contactpointType . + ?contactpoint rdfs:label ?contactpointLabel . + ?contactpointType rdfs:label ?contactpointTypeLabel . + } +UNION { + <${subjectURL}> crm:P4_has_time-span ?time_span . + ?time_span crm:P82a_begin_of_the_begin ?time_actual . + } + +} diff --git a/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/rdfs_rule_set_isql.txt b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/rdfs_rule_set_isql.txt new file mode 100644 index 0000000..e505fd8 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/eu/dnetlib/parthenos/sparql/rdfs_rule_set_isql.txt @@ -0,0 +1,76 @@ +To check available rules: SELECT * from DB.DBA.SYS_RDF_SCHEMA; + +#### ARIADNEPLUS RULES #### + +### ORIGINAL WITH OFFICIALLY PUBLISHED SCHEMAS + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://www.cidoc-crm.org/cidoc-crm/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/') ; + + +### USING SCHEMAS AVAILABLE FROM THE WORKSPACE + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://www.cidoc-crm.org/cidoc-crm/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('ariadneplus_rules', 'http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/') ; + +#### EXTENDED RULES #### + +# CRMext4SKOSandLabel_v1.4___23-03-2016180729___3031___20-09-2016163145___12893.rdfs +sparql load into ; +# CRMpc_v1.1.1.rdfs +sparql load into ; + +rdfs_rule_set ('extended_rules', 'http://www.cidoc-crm.org/cidoc-crm/') ; +rdfs_rule_set ('extended_rules', 'http://www.ics.forth.gr/isl/CRMext/CRMdig.rdfs/') ; +rdfs_rule_set ('extended_rules', 'http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'https://vocabs.dariah.eu/bbt/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'http://www.cidoc-crm.org/cidoc-crm/CRMarchaeo/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'http://www.cidoc-crm.org/cidoc-crm/CRMgeo/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'http://www.cidoc-crm.org/cidoc-crm/CRMsci/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'http://iflastandards.info/ns/fr/frbr/frbroo/') ; + +SPARQL CLEAR GRAPH ; +sparql load into ; +rdfs_rule_set ('extended_rules', 'http://www.w3.org/2004/02/skos/core#') ; + + + + + + + + + diff --git a/dnet-ariadneplus-publisher/src/main/resources/logback-spring.xml b/dnet-ariadneplus-publisher/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..8da790f --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/logback-spring.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/src/main/resources/res.json b/dnet-ariadneplus-publisher/src/main/resources/res.json new file mode 100644 index 0000000..98f8138 --- /dev/null +++ b/dnet-ariadneplus-publisher/src/main/resources/res.json @@ -0,0 +1,74 @@ +// this is a sample json to send to the registry publisher api for the creation of resources +{ + "header": { /* opt to create the resource with specified UUID */ + "uuid": "3191b0a0-f0f9-11e1-8817-a1c31a96e2a4", + }, + "@class": "EService", + "consistsOf": [ /* list of facets*/ + { + "@class": "IsIdentifiedBy", + "target": { + "name": "Thredds", + "description": "The Thredds NetCDF files repository", + "optional": "false", + "EXPORTED": "EXPORTED_FROM_OLD_GCORE_IS", + "version": "4.2.10-0", + "group": "Gis", + "@class": "SoftwareFacet", + } + } + ], + "isRelatedto" : [ /* optional to create a relation to another existing Resource */ + { + "@class": "isVersionOf", + "target": { + "@class": "Software", + "header": { /* opt */ + "uuid": "7791b0a5-f0f9-11e1-8817-a1c31a96e2a4", + }, + } + } + ] +} + + + +/resource-registry/access/resourceInstances/{EService}/{isIdentifiedBy}/{SoftwareFacet}? +polymorphic=true +&group=VREManagement +&name=SmartExecutor + + +{EService} : Resource Type + +EService -> isIdentifiedBy -> SoftwareFacet + + + +Ex: + +PE8-EService -> isIdentifiedBy -> CazziEMazziFacet + +origID = 123456789 + +/resource-registry/access/resourceInstances/PE8-EService/isIdentifiedBy/CazziEMazziFacet? +polymorphic=false +&origID=123456789 + +when no result : [] + + +---------- + +/resource-registry/access/facetInstances/CazziEMazziFacet? +polymorphic=false +&origID=123456789 + + +/resource-registry/access/relationInstances/ConsistsOf/PE8-EService/CazziEMazziFacet? +polymorphic=false +&origID=123456789 + + + + diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponseTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponseTest.java new file mode 100644 index 0000000..11f2b0a --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueAPIResponseTest.java @@ -0,0 +1,60 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.IOException; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.core.io.ClassPathResource; + +import static org.junit.Assert.*; + +/** + * Created by Alessia Bardi on 15/03/2018. + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +@Deprecated +@Ignore +public class CatalogueAPIResponseTest { + + private String pathToCreated200 = "eu/dnetlib/ariadneplus/registry/catalogue/responses/resourceCreatedResponse.json"; + private String pathToCreationFailed = "eu/dnetlib/ariadneplus/registry/catalogue/responses/resourceCreationFailed.json"; + + @Test + public void testCreated200() throws IOException { + CatalogueAPIResponse res = new CatalogueAPIResponse(); + res.setResponseBody(getString(pathToCreated200)); + assertTrue(res.isSuccess()); + assertTrue(res.hasAriadnePlusRegistryResource()); + assertNotNull(res.getAriadnePlusRegistryResource()); + assertNotNull(res.getAriadnePlusRegistryResource().getUuid()); + assertTrue(StringUtils.isBlank(res.getErrorMessage())); + } + + @Test + public void testFailedCreation() throws IOException { + CatalogueAPIResponse res = new CatalogueAPIResponse(); + res.setResponseBody(getString(pathToCreationFailed)); + assertFalse(res.isSuccess()); + assertFalse(res.hasAriadnePlusRegistryResource()); + assertNull(res.getAriadnePlusRegistryResource()); + assertTrue(StringUtils.isNotBlank(res.getErrorMessage())); + System.out.println(res.getErrorMessage()); + } + + private String getString(final String classpath) { + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return IOUtils.toString(resource.getInputStream(), "UTF-8"); + }catch(IOException e){ + return null; + } + } + + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorIntegrationTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorIntegrationTest.java new file mode 100644 index 0000000..0090817 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorIntegrationTest.java @@ -0,0 +1,105 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; + +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.CRMdig; +import eu.dnetlib.ariadneplus.CRMpe; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.ontology.OntModelSpec; +import org.apache.jena.rdf.model.InfModel; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.ResIterator; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.vocabulary.RDF; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Created by Alessia Bardi on 15/03/2018. + * + * @author Alessia Bardi + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@TestPropertySource( + locations = "classpath:application-integrationtest.properties") +@Ignore +public class CatalogueRegistratorIntegrationTest { + + private String nakalaService = "eu/dnetlib/ariadneplus/registry/nakala.rdf"; + private String resourceCatName = "nakalatest"; + private String error500_1 = "eu/dnetlib/ariadneplus/registry/error500_1.rdf"; + + @Autowired + private CatalogueRegistrator reg; + private OntModel baseModel; + + + + @Before + public void setup() { + baseModel = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_TRANS_INF); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/CRMpe.rdfs"), CRMpe.NS); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/CRMdig.rdfs"), CRMdig.NS); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs"), CRM.NS); + } + + @Test + public void testRegistration() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getStream(nakalaService), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E7_Activity); + Resource nakala = subjects.nextResource(); + String uuid = reg.register(nakala, CRMpe.PE1_Service, "Huma-Num - Nakala"); + System.out.println(uuid); + purge(uuid); + } + + @Test + public void testError500_1() throws Exception { + InfModel model = loadBaseModel(); + model.read(getStream(error500_1), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E29_Design_or_Procedure); + Resource r = subjects.nextResource(); + String uuid = reg.register(r, CRM.E29_Design_or_Procedure, "ARIADNEPLUS"); + System.out.println(uuid); + purge(uuid); + } + + @Test + public void testPurge() throws AriadnePlusPublisherException, URISyntaxException { + reg.purge(resourceCatName); + } + + private void purge(final String uuid) throws AriadnePlusPublisherException, URISyntaxException { + reg.purge(uuid); + } + + private static InputStream getStream(final String classpath) throws IOException { + return new ClassPathResource(classpath).getInputStream(); + } + + protected InfModel loadBaseModel() { + return ModelFactory.createRDFSModel(baseModel); + } + + private InputStream getInputStream(String classpath){ + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return resource.getInputStream(); + }catch(IOException e){ + return null; + } + } +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorTest.java new file mode 100644 index 0000000..5bdf7f5 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/catalogue/CatalogueRegistratorTest.java @@ -0,0 +1,157 @@ +package eu.dnetlib.ariadneplus.catalogue; + +import java.io.IOException; +import java.io.InputStream; + +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.CRMdig; +import eu.dnetlib.ariadneplus.CRMpe; +import eu.dnetlib.ariadneplus.rdf.ResourceReader; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.ontology.OntModelSpec; +import org.apache.jena.rdf.model.InfModel; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.ResIterator; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.vocabulary.RDF; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.core.io.ClassPathResource; + +import static org.junit.Assert.assertEquals; + +/** + * Created by Alessia Bardi on 11/12/2017. + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +public class CatalogueRegistratorTest { + + private CatalogueRegistrator reg; + private ResourceReader reader = new ResourceReader(); + + private String nakalaService = "eu/dnetlib/ariadneplus/registry/nakala.rdf"; + private String test = "eu/dnetlib/ariadneplus/registry/test.rdf"; + private String noRiot = "eu/dnetlib/ariadneplus/registry/sampleNoRiot.rdf"; + private String withproviders = "eu/dnetlib/ariadneplus/registry/withProviders.rdf"; + private String serviceSample = "eu/dnetlib/ariadneplus/registry/PE1_Service_sample.rdf"; + + private OntModel baseModel; + + @Before + public void setup() { + reg = new CatalogueRegistrator(); + reg.setResourceReader(reader); + baseModel = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_TRANS_INF); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/CRMpe.rdfs"), CRMpe.NS); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/CRMdig.rdfs"), CRMdig.NS); + baseModel.read(getInputStream("eu/dnetlib/ariadneplus/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs"), CRM.NS); + } + + @Test + public void readModel() { + InfModel model = loadBaseModel(); + model.read(getInputStream(noRiot), CRMpe.NS); + } + @Test + public void testGetJsonForActivity() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream(nakalaService), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E7_Activity); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForService(subject, "testCatName", "Huma-Num - Nakala"); + System.out.println(json); + } + } + + @Test + public void testGetJsonForWP8Actor() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream("/eu/dnetlib/ariadneplus/registry/testwp8.rdf"), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E39_Actor); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForActor(subject, "xx", "ARIADNEPLUS"); + System.out.println(json); + } + } + + @Test + public void testGetJsonForMetashare() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream("eu/dnetlib/ariadneplus/registry/metashare.rdf"), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E7_Activity); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForService(subject, "testCatName", "METASHARE"); + System.out.println(json); + } + } + + @Test + public void testGetJsonForActor() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream(test), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRM.E39_Actor); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForActor(subject, "testActorName", "CLARIN"); + System.out.println(json); + } + } + + @Test + public void testGetJsonForProject() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream("eu/dnetlib/ariadneplus/registry/sample1.rdf"), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRMpe.PE35_Project); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForProject(subject, "testProjectName", "ARIADNEPLUS"); + System.out.println(json); + } + } + + @Test + public void testGetJsonForDataset() throws Exception{ + InfModel model = loadBaseModel(); + model.read(getInputStream("eu/dnetlib/ariadneplus/registry/sample1.rdf"), CRMpe.NS); + ResIterator subjects = model.listSubjectsWithProperty(RDF.type, CRMpe.PE18_Dataset); + while (subjects.hasNext()) { + Resource subject = subjects.nextResource(); + String json = reg.getJsonForDataset(subject, "testDatasetName", "ARIADNEPLUS"); + System.out.println(json); + } + } + + + @Test + public void availibilityTest(){ + InfModel model = loadBaseModel(); + model.read(getInputStream(serviceSample), CRMpe.NS); + Resource subject = model.getResource("http://ariadneplus.d4science.org/handle/CP/Service/TEST"); + assertEquals("Yes", reader.getAvailability(subject)); + + } + + private InputStream getInputStream(String classpath){ + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return resource.getInputStream(); + }catch(IOException e){ + return null; + } + } + + + + + protected InfModel loadBaseModel() { + return ModelFactory.createRDFSModel(baseModel); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherControllerTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherControllerTest.java new file mode 100644 index 0000000..e6eca8b --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherControllerTest.java @@ -0,0 +1,39 @@ +package eu.dnetlib.ariadneplus.publisher; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Created by Alessia Bardi on 29/08/2017. + * + * @author Alessia Bardi + */ +@RunWith(SpringRunner.class) +@WebMvcTest(AriadnePlusPublisherController.class) +public class AriadnePlusPublisherControllerTest { + @Autowired + private MockMvc mvc; + + @MockBean + private AriadnePlusPublisherHelper ariadneplusPublisherHelper; + + @Test + public void publishOK() throws Exception { + mvc.perform(post("/publish").param("record", "value").param("ariadneplusTarget", "VIRTUOSO")) + .andExpect(status().isOk()); + } + + @Test + public void textEx() throws Exception { + mvc.perform(post("/publish")).andExpect(status().is4xxClientError()); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherTest.java new file mode 100644 index 0000000..f57aa1e --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/publisher/AriadnePlusPublisherTest.java @@ -0,0 +1,93 @@ +package eu.dnetlib.ariadneplus.publisher; + +import java.io.IOException; + +import eu.dnetlib.ariadneplus.AriadnePlusPublisherApplication; +import org.apache.commons.io.IOUtils; +import org.apache.jena.graph.Triple; +import org.apache.jena.util.iterator.ExtendedIterator; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.core.io.ClassPathResource; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import virtuoso.jena.driver.VirtGraph; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Created by Alessia Bardi on 29/08/2017. + * Integration test. + * + * @author Alessia Bardi + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + webEnvironment = WebEnvironment.RANDOM_PORT, + classes = AriadnePlusPublisherApplication.class) +@AutoConfigureMockMvc +@TestPropertySource(locations = "classpath:application-integrationtest.properties") +//Ignore test because it requires a running virtuoso server +@Ignore +public class AriadnePlusPublisherTest { + + private String recordPath = "eu/dnetlib/ariadneplus/virtuoso/test_record_plain.xml"; + @Value("${virtuoso.connectionstring}") + private String connectionString; + @Value("${virtuoso.usr}") + private String testUser ; + @Value("${virtuoso.pwd}") + private String testPwd ; + @Value("${virtuoso.uri.base.default}") + private String defaultURIBaseURl; + + @Autowired + private MockMvc mvc; + + + @Test + public void publishOK() throws Exception { + String graphName = defaultURIBaseURl + "api_________::ariadneplus___::ariadneplus::topLevel/ariadneplus___::8d777f385d3dfec8815d20f7496026dc"; + VirtGraph graph = new VirtGraph(graphName, connectionString, testUser, testPwd); + //ensure we have an empty graph + graph.clear(); + assertEquals(0, graph.getCount()); + + mvc.perform(post("/publish").param("record", getString(recordPath)).param("ariadneplusTarget", "VIRTUOSO")) + .andExpect(status().isOk()); + + //need to wait some seconds to ensure the async call did its job + Thread.sleep(10000); + int count = graph.getCount(); + System.out.println(graphName +" has "+count+" triples:"); + assertNotEquals(0, graph.getCount()); + final ExtendedIterator triples = graph.find(); + while(triples.hasNext()){ + System.out.println(triples.next()); + } + //cleanup the virtuoso graph + graph.clear(); + assertEquals(0, graph.getCount()); + + } + + private String getString(final String classpath) { + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return IOUtils.toString(resource.getInputStream(), "UTF-8"); + }catch(IOException e){ + return null; + } + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelperTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelperTest.java new file mode 100644 index 0000000..6c591cb --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/rdf/RecordParserHelperTest.java @@ -0,0 +1,48 @@ +package eu.dnetlib.ariadneplus.rdf; + +import eu.dnetlib.ariadneplus.publisher.SaxonHelper; +import net.sf.saxon.s9api.SaxonApiException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import static org.junit.Assert.assertEquals; + +/** + * Created by Alessia Bardi on 15/03/2018. + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +public class RecordParserHelperTest { + + private String testRecord = "
http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/Eleni%20Vernardakiapi_________::ariadneplus___::ariadneplus::topLevelARIADNEPLUS
\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
"; + + + private RecordParserHelper help; + private SaxonHelper saxonHelper; + + @Before + public void setup() throws SaxonApiException { + saxonHelper = new SaxonHelper(); + help = new RecordParserHelper(); + help.setSaxonHelper(saxonHelper); + help.init(); + } + + @Test + public void testGetObjId(){ + assertEquals("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/Eleni%20Vernardaki", help.getObjIdentifier(testRecord)); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JacksonTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JacksonTest.java new file mode 100644 index 0000000..48bb63f --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JacksonTest.java @@ -0,0 +1,79 @@ +package eu.dnetlib.ariadneplus.registry; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.UUID; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Created by Alessia Bardi on 02/10/2017. + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +public class JacksonTest { + + @Test + public void testJackson() throws IOException { + JsonFactory jsonFactory = new JsonFactory(); + StringWriter sw = new StringWriter(); + JsonGenerator jgen = jsonFactory.createGenerator(sw); + jgen.writeStartObject(); + jgen.writeNumberField("id", 1); + jgen.writeArrayFieldStart("array"); + jgen.writeStartObject(); + jgen.writeStringField("itemName", "theName"); + jgen.writeNumberField("owner", 3); + jgen.writeEndObject(); + jgen.writeStartObject(); + jgen.writeStringField("itemName", "theName2"); + jgen.writeNumberField("owner", 8); + jgen.writeEndObject(); + jgen.writeEndArray(); + jgen.writeEndObject(); + + jgen.close(); + //sw.flush(); + System.out.println(sw.getBuffer().toString()); + } + + @Test + public void testJacksonEmbeddedObject() throws IOException { + JsonFactory jsonFactory = new JsonFactory(); + StringWriter sw = new StringWriter(); + JsonGenerator jgen = jsonFactory.createGenerator(sw); + jgen.writeStartObject(); + jgen.writeNumberField("id", 1); + jgen.writeObjectFieldStart("embeddedObj"); + jgen.writeStringField("itemName", "theName"); + jgen.writeNumberField("owner", 3); + jgen.writeEndObject(); + jgen.writeEndObject(); + + jgen.close(); + System.out.println(sw.getBuffer().toString()); + } + + @Test + public void testHeader() throws IOException { + JsonFactory jsonFactory = new JsonFactory(); + StringWriter sw = new StringWriter(); + JsonGenerator jgen = jsonFactory.createGenerator(sw); + jgen.writeStartObject(); + jgen.writeObjectFieldStart("header"); + jgen.writeStringField("uuid", UUID.randomUUID().toString()); + jgen.writeEndObject(); + jgen.writeStringField("@class", "specificType"); + jgen.writeArrayFieldStart("consistsOf"); + jgen.writeEndArray(); + jgen.writeEndObject(); + + jgen.close(); + System.out.println(sw.getBuffer().toString()); + } +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JenaInferenceTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JenaInferenceTest.java new file mode 100644 index 0000000..72d0d15 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/registry/JenaInferenceTest.java @@ -0,0 +1,53 @@ +package eu.dnetlib.ariadneplus.registry; + +import org.apache.jena.rdf.model.*; +import org.apache.jena.vocabulary.RDFS; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Created by Alessia Bardi on 29/09/2017. + * + * See https://jena.apache.org/documentation/inference/index.html#OWLcoverage + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +public class JenaInferenceTest { + + private static final String ARIADNEPLUS_MODEL_URL = "http://ariadneplus.d4science.org/CRMext/CRMpe.rdfs"; + private static final String CRM_MODEL_URL = "http://www.cidoc-crm.org/sites/default/files/cidoc_crm_v6.2-draft-2015August.rdfs.xml"; + private static final String CRM_DIG_MODEL_URL ="http://www.ics.forth.gr/isl/CRMext/CRMdig_v3.2.2.rdfs"; + + + @Test + public void testSubProperty(){ + + String NS = "urn:x-hp-jena:eg/"; + + // Build a trivial example data set + Model rdfsExample = ModelFactory.createDefaultModel(); + Property p = rdfsExample.createProperty(NS, "p"); + Property q = rdfsExample.createProperty(NS, "q"); + rdfsExample.add(p, RDFS.subPropertyOf, q); + rdfsExample.createResource(NS+"a").addProperty(p, "foo"); + + InfModel inf = ModelFactory.createRDFSModel(rdfsExample); // [1] + + Resource a = inf.getResource(NS+"a"); +// System.out.println("Statement: " + a.getProperty(q)); +// System.out.println("Statement: " + a.getProperty(p)); + + StmtIterator it = inf.listStatements(new SimpleSelector(a, null, (Object) null)); + while(it.hasNext()){ + System.out.println(it.nextStatement().toString()); + } + } + + @Test + public void testWithSchema(){ + + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/ExampleIO_01.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/ExampleIO_01.java new file mode 100644 index 0000000..cfdb304 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/ExampleIO_01.java @@ -0,0 +1,83 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.ResourceFactory; +import org.apache.jena.riot.RDFDataMgr; +import org.apache.jena.riot.RDFFormat; +import org.apache.jena.riot.RIOT; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.core.io.ClassPathResource; + +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 + *

+ * http://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. + */ +@RunWith(JUnit4.class) +public class ExampleIO_01 { + + @Test + public void test() throws IOException { + InputStream in = getResourceAsStream("eu/dnetlib/ariadneplus/virtuoso/data.ttl"); + + RIOT.init() ; + + Model model = ModelFactory.createDefaultModel(); // creates an in-memory Jena Model + model.read(in, null, "TURTLE"); // parses an InputStream assuming RDF in Turtle format + + // Write the Jena Model in Turtle, RDF/XML and N-Triples format + System.out.println("\n---- Turtle ----"); + model.write(System.out, "TURTLE"); + System.out.println("\n---- RDF/XML ----"); + model.write(System.out, "RDF/XML"); + System.out.println("\n---- RDF/XML Abbreviated ----"); + model.write(System.out, "RDF/XML-ABBREV"); + System.out.println("\n---- N-Triples ----"); + model.write(System.out, "N-TRIPLES"); + System.out.println("\n---- RDF/JSON ----"); + model.write(System.out, "RDF/JSON"); + RDFDataMgr.write(System.out, model.getGraph(), RDFFormat.RDFXML_PLAIN); + System.out.println("\n----RDFDataMgr with model and RDFFormat.RDFXML_PLAIN ----"); + RDFDataMgr.write(System.out, model, RDFFormat.RDFXML_PLAIN); + + + } + + @Test + public void testPropertyNamespace(){ + Property p = ResourceFactory.createProperty("dnet:", "transformedInDate"); + System.out.println(p.toString()); + } + + @Test + public void testPropertyNamespaceUrl(){ + String ns = "http://www.d-net.research-infrastructures.eu/provenance/"; + Property p = ResourceFactory.createProperty(ns, "transformedInDate"); + System.out.println(p.toString()); + } + + private InputStream getResourceAsStream(final String classpath) throws IOException { + final ClassPathResource resource = new ClassPathResource(classpath); + return resource.getInputStream(); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/FreeMarkerTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/FreeMarkerTest.java new file mode 100644 index 0000000..e836f9d --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/FreeMarkerTest.java @@ -0,0 +1,43 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; + +import freemarker.cache.ClassTemplateLoader; +import freemarker.template.Template; +import freemarker.template.TemplateExceptionHandler; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import static org.junit.Assert.assertNotNull; + +/** + * Created by Alessia Bardi on 14/03/2018. + * + * @author Alessia Bardi + */ +@RunWith(JUnit4.class) +public class FreeMarkerTest { + + @Test + public void testFreemarkTemplateLoading() throws IOException { + + freemarker.template.Configuration config = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_27); + ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/eu/dnetlib/ariadneplus/sparql"); + config.setTemplateLoader(ctl); + config.setDefaultEncoding("UTF-8"); + // Sets how errors will appear. + // During web page *development* TemplateExceptionHandler.HTML_DEBUG_HANDLER is better. + config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); + + // Don't log exceptions inside FreeMarker that it will thrown at you anyway: + config.setLogTemplateExceptions(false); + + // Wrap unchecked exceptions thrown during template processing into TemplateException-s. + config.setWrapUncheckedExceptions(true); + + String templateName = "E39_Actor.sparql"; + Template temp = config.getTemplate(templateName); + assertNotNull(temp); + } +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientTest.java new file mode 100644 index 0000000..d1a9374 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoClientTest.java @@ -0,0 +1,88 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; + +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import eu.dnetlib.ariadneplus.publisher.SaxonHelper; +import eu.dnetlib.ariadneplus.rdf.RecordParserHelper; +import net.sf.saxon.s9api.SaxonApiException; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.core.io.ClassPathResource; +import virtuoso.jena.driver.VirtModel; + +/** + * Created by Alessia Bardi on 12/07/2017. + * + * @author Alessia Bardi + */ +@Ignore +@RunWith(JUnit4.class) +public class VirtuosoClientTest { + + private static final Log log = LogFactory.getLog(VirtuosoClientTest.class); + + private String testGraph = "virt:test"; + //private String connectionString = "jdbc:virtuoso://localhost:1111"; + private String connectionString = "jdbc:virtuoso://virtuoso.ariadneplus.d4science.org:1111"; + private String testUser = "dba"; + private String testPwd = "dba"; + private String defaultURIBaseURl = "http://test/"; + + private String recordPath = "eu/dnetlib/ariadneplus/virtuoso/test_record_plain.xml"; + + private VirtuosoClient client; + + private SaxonHelper saxonHelper = new SaxonHelper(); + + + @Before + public void prepare() throws SaxonApiException { + RecordParserHelper rph = new RecordParserHelper(); + rph.setSaxonHelper(saxonHelper); + rph.init(); + client = new VirtuosoClient(connectionString, testUser, testPwd, rph, defaultURIBaseURl); + } + + @Test + public void testConnection(){ + VirtModel.openDatabaseModel("x", connectionString, testUser, testPwd); + } + + + + @Test + public void testFeedProvenance(){ + long res = client.feedProvenance("ariadne_____::0002b8b77eb2d6c62f61c6e1a1ce6891", "2017-05-14T12:06:38.152+02:00" , "2017-05-14T12:11:55.573", "ARIADNE", "ariadne_api"); + Assert.assertEquals(3, res); + } + + @Test + public void testRecord() throws AriadnePlusPublisherException { + System.out.println(client.feed(getString(recordPath))); + } + + @Test + public void testRemoveFromProvenance(){ + long res = client.feedProvenance("ariadne_____::0002b8b77eb2d6c62f61c6e1a1ce6891", "2017-05-14T12:06:38.152+02:00" , "2017-05-14T12:11:55.573", "ARIADNE", "ariadne_api"); + Assert.assertEquals(3, res); + long deleted = client.drop("ariadne_api"); + Assert.assertEquals(0, deleted); + } + + private String getString(final String classpath) { + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return IOUtils.toString(resource.getInputStream(), "UTF-8"); + }catch(IOException e){ + return null; + } + } +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPIIntegrationTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPIIntegrationTest.java new file mode 100644 index 0000000..c3d7024 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPIIntegrationTest.java @@ -0,0 +1,114 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; +import java.util.List; + +import eu.dnetlib.ariadneplus.CRM; +import eu.dnetlib.ariadneplus.CRMdig; +import eu.dnetlib.ariadneplus.CRMpe; +import eu.dnetlib.ariadneplus.publisher.AriadnePlusPublisherException; +import freemarker.template.TemplateException; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Created by Alessia Bardi on 24/03/2018. + * + * @author Alessia Bardi + */ +@Ignore +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@TestPropertySource( + locations = "classpath:application-integrationtest.properties") +public class VirtuosoReadAPIIntegrationTest { + + private static String TIMEOUT = "3000"; + + @Autowired + private VirtuosoReadAPI virtuosoReadAPI; + + @Test + public void testVolatileDataset1() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Dataset/CoCoON%20Dataset", CRMpe.PE18_Dataset.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testSoftware() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Software/ACDM", CRMdig.D14_Software.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testRIConsortium() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/Cendari%20Consortium", CRM.E39_Actor.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testPerson() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/Eleni%20Vernardaki", CRM.E39_Actor.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testService() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Service/Isidore", CRMpe.PE1_Service.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testService2() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Service/LRE%20Map", CRMpe.PE1_Service.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testService3() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Service/ARIADNE%20Visual%20Media%20Service", CRMpe.PE1_Service.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testCurationPlan() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/thing/provided%20by%20DCU", CRMpe.PE28_Curation_Plan.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testProject() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI + .getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Project/Cendari", CRMpe.PE35_Project.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testProject2() throws AriadnePlusPublisherException, TemplateException, IOException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Project/Ariadne%20Project", CRMpe.PE35_Project.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testCollection() throws IOException, TemplateException, AriadnePlusPublisherException { + virtuosoReadAPI.getSubject("http://ariadneplus.d4science.org/handle/EHRI/PORTAL/Thing/164", CRM.E78_Collection.getLocalName(), TIMEOUT, System.out); + } + + @Test + public void testGetSubjectsApiWithType(){ + List list = virtuosoReadAPI.getSubjectsForApiWithType("api_________::ariadne::CYI", CRMpe.getURI(), CRMpe.PE18_Dataset.getLocalName(), 100, 0); + assertFalse(list.isEmpty()); + list.forEach(s -> System.out.println(s)); + } + + @Test + public void testGetSubjectsApiWithTypeAndTooLargeOffset(){ + List list = virtuosoReadAPI.getSubjectsForApiWithType("api_________::ariadne::CYI", CRMpe.getURI(), CRMpe.PE18_Dataset.getLocalName(), 100, 100); + assertTrue(list.isEmpty()); + } + + @Test + public void testGetSubjectsApiWithTypeOffset(){ + List list = virtuosoReadAPI.getSubjectsForApiWithType("api_________::ariadne::CYI", CRMpe.getURI(), CRMpe.PE18_Dataset.getLocalName(), 2, 4); + list.forEach(s -> System.out.println(s)); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPITest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPITest.java new file mode 100644 index 0000000..528ce29 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoReadAPITest.java @@ -0,0 +1,38 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import freemarker.template.Configuration; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Created by Alessia Bardi on 29/08/2017. + * FIX ME: Mock freemarker configuration so the test can be run + * + * @author Alessia Bardi + */ +@Ignore +@RunWith(SpringRunner.class) +@WebMvcTest(VirtuosoReadAPI.class) +public class VirtuosoReadAPITest { + @Autowired + private MockMvc mvc; + + @MockBean + private Configuration freemarkerConfig; + + + @Test + public void testGetSubject() throws Exception { + mvc.perform(get("/virtuoso/subject").param("subjectURL", "xxx").param("timeout", "1234").param("typeName", "D14_Software")).andExpect(status().isOk()); + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoTest.java b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoTest.java new file mode 100644 index 0000000..58b2bba --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/java/eu/dnetlib/ariadneplus/virtuoso/VirtuosoTest.java @@ -0,0 +1,326 @@ +package eu.dnetlib.ariadneplus.virtuoso; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.apache.jena.graph.NodeFactory; +import org.apache.jena.graph.Triple; +import org.apache.jena.query.Query; +import org.apache.jena.query.QueryExecutionFactory; +import org.apache.jena.query.QueryFactory; +import org.apache.jena.query.ResultSet; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.rdf.model.ResourceFactory; +import org.apache.jena.riot.RDFDataMgr; +import org.apache.jena.riot.RDFFormat; +import org.apache.jena.sparql.engine.http.QueryEngineHTTP; +import org.apache.jena.sparql.engine.http.QueryExceptionHTTP; +import org.apache.jena.util.iterator.ExtendedIterator; +import org.assertj.core.util.Lists; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.core.io.ClassPathResource; +import virtuoso.jena.driver.VirtGraph; +import virtuoso.jena.driver.VirtModel; +import virtuoso.jena.driver.VirtuosoQueryExecution; +import virtuoso.jena.driver.VirtuosoQueryExecutionFactory; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * Created by Alessia Bardi on 11/07/2017. + * + * @author Alessia Bardi + */ +@Ignore +@RunWith(JUnit4.class) +public class VirtuosoTest { + + private String testGraph = "virt:test"; + private String connectionString = "jdbc:virtuoso://localhost:1111"; + private String testUser = "dba"; + private String testPwd = "dba"; + private String defaultURIBaseURl = "http://test/"; + private String sparqlEndpoint = "http://localhost:8890/sparql"; + + @Before + public void prepare() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + graph.clear(); + } + + /** + * See also: https://stackoverflow.com/questions/24576190/enable-reasoning-for-sparql-request-via-jena + */ + @Test + public void testInference1() { + String q = "DEFINE input:inference 'ariadneplus_rules' CONSTRUCT {<%s> ?p ?o . } WHERE { <%s> ?p ?o .}"; + String subjectURL = "http://clarin.eu/clarin-eric-datatables/centres"; + String query = String.format(q, subjectURL, subjectURL, subjectURL, subjectURL); + System.out.println(query); + final QueryEngineHTTP request = new QueryEngineHTTP(sparqlEndpoint, query); + Model res = request.execConstruct(); + RDFDataMgr.write(System.out, res, RDFFormat.RDFXML_PLAIN); + res.close(); + request.close(); + } + + @Test + public void testLongQuery() throws IOException { + String q = IOUtils.toString(getResourceAsStream("/eu/dnetlib/ariadneplus/sparql/longQuery.sparql")); + try (CloseableHttpClient httpclient = HttpClients.createDefault()) { + + HttpPost httpPost = new HttpPost(sparqlEndpoint); + List nvps = Lists.newArrayList(); + nvps.add(new BasicNameValuePair("query", q)); + httpPost.setEntity(new UrlEncodedFormEntity(nvps)); + + try (CloseableHttpResponse response2 = httpclient.execute(httpPost)) { + System.out.println(response2.getStatusLine()); + HttpEntity entity2 = response2.getEntity(); + String s = IOUtils.toString(entity2.getContent()); + System.out.println("OUT: " + s); + // do something useful with the response body + // and ensure it is fully consumed + EntityUtils.consume(entity2); + } + } + } + + @Test(expected = QueryExceptionHTTP.class) + public void testLongQueryFails() throws IOException { + String q = IOUtils.toString(getResourceAsStream("/eu/dnetlib/ariadneplus/sparql/longQuery.sparql")); + final QueryEngineHTTP request = new QueryEngineHTTP(sparqlEndpoint, q); + Model res = request.execConstruct(); + RDFDataMgr.write(System.out, res, RDFFormat.RDFXML_PLAIN); + res.close(); + request.close(); + } + + @Test + public void testRemote() { + String q = "DEFINE input:inference 'ariadneplus_rules' CONSTRUCT {<%s> ?p ?o . } WHERE { <%s> ?p ?o .}"; + //String q = "CONSTRUCT {<%s> ?p ?o . } WHERE { <%s> ?p ?o .}"; + String subjectURL = "http://clarin.eu/clarin-eric-datatables/centres"; + String query = String.format(q, subjectURL, subjectURL, subjectURL, subjectURL); + System.out.println(query); + VirtGraph g = new VirtGraph(connectionString, testUser, testPwd); + g.setReadFromAllGraphs(true); + VirtuosoQueryExecution vqe = VirtuosoQueryExecutionFactory.create(query, g); + Model resultModel = vqe.execConstruct(); + RDFDataMgr.write(System.out, resultModel, RDFFormat.RDFXML_PLAIN); + vqe.close(); + g.close(); + } + + @Test + public void testConnection() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + } + + @Test + public void testDescribe() { + //put something in the graph + Model md = VirtModel.openDatabaseModel(testGraph, connectionString, testUser, testPwd); + md.read(getResourceAsStream("eu/dnetlib/ariadneplus/virtuoso/test.rdf"), defaultURIBaseURl); + String resURI = "http://www.ariadneplus-project.eu/ARIADNE/ARIADNECatalog/Dataset/http%3A%2F%2Fregistry.ariadne-infrastructure.eu%2Fdataset%2F25058478"; + //now query for the resource URI + String describeQuery = "DESCRIBE <" + resURI + ">"; + Query query = QueryFactory.create(describeQuery); + String sparqlUrl = "http://localhost:8890/sparql"; + final QueryEngineHTTP serviceRequest = QueryExecutionFactory.createServiceRequest(sparqlUrl, query); + Model resultModel = serviceRequest.execDescribe(); + serviceRequest.close(); + resultModel.write(System.out); + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + graph.clear(); + } + + @Ignore + @Test + public void testDescribeRemote() { + String resURI = "http://hdl.handle.net/11858/00-203C-0000-0029-F5E8-C"; + //now query for the resource URI + String describeQuery = "DESCRIBE <" + resURI + ">"; + Query query = QueryFactory.create(describeQuery); + String sparqlUrl = "https://virtuoso.ariadneplus.d4science.org/sparql"; + final QueryEngineHTTP serviceRequest = QueryExecutionFactory.createServiceRequest(sparqlUrl, query); + Model resultModel = serviceRequest.execDescribe(); + serviceRequest.close(); + resultModel.write(System.out); + } + + @Test + public void testReadForDescribeResource() { + String sparqlUrl = "http://localhost:8890/sparql"; + String queryForGraphs = + "SELECT DISTINCT ?g \n" + + "WHERE {\n" + + " { ?g }\n" + + "}"; + Query query = QueryFactory.create(queryForGraphs); + final QueryEngineHTTP serviceRequest = QueryExecutionFactory.createServiceRequest(sparqlUrl, query); + ResultSet graphs = serviceRequest.execSelect(); + String queryForSubjectsTemplate = "SELECT DISTINCT ?s WHERE {GRAPH <%s> {?s ?p ?o}}"; + int countGraphs = 0; + while (graphs.hasNext()) { + countGraphs++; + Resource g = graphs.next().getResource("g"); + System.out.println("*****GRAPH: " + g.getURI()); + final QueryEngineHTTP serviceRequest2 = + QueryExecutionFactory.createServiceRequest(sparqlUrl, QueryFactory.create(String.format(queryForSubjectsTemplate, g.getURI()))); + ResultSet subjects = serviceRequest2.execSelect(); + int countSubjects = 0; + while (subjects.hasNext()) { + countSubjects++; + Resource s = subjects.next().getResource("s"); + String describeQuery = "DESCRIBE <" + s.getURI() + ">"; + final QueryEngineHTTP serviceRequest3 = QueryExecutionFactory.createServiceRequest(sparqlUrl, QueryFactory.create(describeQuery)); + Model resultModel = serviceRequest3.execDescribe(); + serviceRequest3.close(); + resultModel.write(System.out); + } + serviceRequest2.close(); + System.out.println("Got " + countSubjects + " subjects"); + } + serviceRequest.close(); + assertEquals("unexpected number of graphs", 4, countGraphs); + + } + + @Test + public void testClear() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + graph.clear(); + Assert.assertTrue(graph.isEmpty()); + + } + + @Test + public void testFeedTriple() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + graph.clear(); + Assert.assertTrue(graph.isEmpty()); + Triple t = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_friend_of"), + NodeFactory.createURI("http://test/KevinBacon")); + graph.performAdd(t); + assertEquals(1, graph.getCount()); + graph.clear(); + } + + @Test + public void testFeedRDFFile() { + Model md = VirtModel.openDatabaseModel(testGraph, connectionString, testUser, testPwd); + md.read(getResourceAsStream("eu/dnetlib/ariadneplus/virtuoso/test.rdf"), defaultURIBaseURl); + long size = md.size(); + System.out.println("==Inserted " + size + "triples=="); + + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + Assert.assertFalse(graph.isEmpty()); + + graph.clear(); + } + + /* + If we want to be able to update, we need to store the triples in different named graph. This way we can delete the old triples and add the new ones. + And then we can add triples about the graph (e.g. provenance, last update time, whatever) in another named graph (e.g. 'provenance'), + where all the info about the named graphs are available. + */ + @Test + public void testUpdate() { + String namedGraph = "virt:test:theObjIdentifier"; + Model md = VirtModel.openDatabaseModel(namedGraph, connectionString, testUser, testPwd); + md.read(getResourceAsStream("eu/dnetlib/ariadneplus/virtuoso/test.rdf"), defaultURIBaseURl); + + long size = md.size(); + System.out.println("==Inserted " + size + "triples=="); + md.removeAll(); + Assert.assertTrue(md.isEmpty()); + + md.read(getResourceAsStream("eu/dnetlib/ariadneplus/virtuoso/test_less_data.rdf"), defaultURIBaseURl); + long size2 = md.size(); + System.out.println("==Inserted " + size2 + "triples=="); + + md.removeAll(); + + } + + @Test + public void testRemoveAllWildcards() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + graph.clear(); + Assert.assertTrue(graph.isEmpty()); + Triple t1 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_friend_of"), + NodeFactory.createURI("http://test/KevinBacon")); + Triple t2 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_friend_of"), + NodeFactory.createURI("http://test/BonoVox")); + Triple t3 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_enemy_of"), + NodeFactory.createURI("http://test/Spiderman")); + graph.performAdd(t1); + graph.performAdd(t2); + graph.performAdd(t3); + assertEquals(3, graph.getCount()); + + Model md = VirtModel.openDatabaseModel(testGraph, connectionString, testUser, testPwd); + assertEquals(3, md.size()); + md.removeAll(ResourceFactory.createResource("http://test/1"), ResourceFactory.createProperty("http://test/is_enemy_of"), null); + assertEquals(2, md.size()); + } + + @Test + public void testSearch() { + VirtGraph graph = new VirtGraph(testGraph, connectionString, testUser, testPwd); + assertNotNull(graph); + graph.clear(); + Assert.assertTrue(graph.isEmpty()); + Triple t1 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_friend_of"), + NodeFactory.createURI("http://test/KevinBacon")); + Triple t2 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_friend_of"), + NodeFactory.createURI("http://test/BonoVox")); + Triple t3 = new Triple(NodeFactory.createURI("http://test/1"), NodeFactory.createURI("http://test/is_enemy_of"), + NodeFactory.createURI("http://test/Spiderman")); + graph.performAdd(t1); + graph.performAdd(t2); + graph.performAdd(t3); + assertEquals(3, graph.getCount()); + + final ExtendedIterator friends = graph.find(null, NodeFactory.createURI("http://test/is_friend_of"), null); + while (friends.hasNext()) { + System.out.println(friends.next()); + } + + } + + private InputStream getResourceAsStream(final String classpath) { + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return resource.getInputStream(); + } catch (IOException e) { + return null; + } + } + +} diff --git a/dnet-ariadneplus-publisher/test/main/resources/application-integrationtest.properties b/dnet-ariadneplus-publisher/test/main/resources/application-integrationtest.properties new file mode 100644 index 0000000..a1903d2 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/application-integrationtest.properties @@ -0,0 +1,25 @@ +#virtuoso.sparqlurl = http://localhost:8890/sparql +#virtuoso.connectionstring = jdbc:virtuoso://localhost:1111 +#virtuoso.pwd = dba +#virtuoso.usr = dba + +virtuoso.sparqlurl = https://ip-90-147-167-173.ct1.garrservices.it/sparql +virtuoso.connectionstring = jdbc:virtuoso://ip-90-147-167-173.ct1.garrservices.it:1111 +virtuoso.pwd = d93ab92c7b3bfa1 +virtuoso.usr = dba + +virtuoso.uri.base.default = http://ariadneplus.d4science.org/handle/ + +#gcube.registry.baseurl = https://registry-ariadneplus.d4science.org/resource-registry/ +gcube.registry.baseurl = http://registry-t-ariadneplus.d4science.org:80/resource-registry +gcube.registry.uri.base.default = http://ariadneplus.d4science.org/handle/ +gcube.registry.application.name = AriadnePlusAggregator +gcube.registry.application.token = ff70d166-dc6b-468e-9a2d-81c91a796a40-843339462 + +#gcube.catalogue.baseurl = https://catalogue-ws-t.pre.d4science.org/catalogue-ws/ +#gcube.catalogue.baseurl = https://catalogue-ws.d4science.org/catalogue-ws/ + +#gcube.uri.resolver=https://data1-p.d4science.org/ariadneplus_registry + +gcube.catalogue.baseurl = https://gcat.d4science.org/gcat/ +gcube.uri.resolver = https://data.d4science.org/ariadneplus_registry/ \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMdig.rdfs b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMdig.rdfs new file mode 100644 index 0000000..f596bee --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMdig.rdfs @@ -0,0 +1,638 @@ + + + + + This class comprises identifiable immaterial items that can be represented as sets of bit sequences, + such as data sets, e-texts, images, audio or video items, software, etc., and are documented as single units. + Any aggregation of instances of D1 Digital Object into a whole treated as single unit is also regarded as an instance of D1 Digital Object. + This means that for instance, the content of a DVD, an XML file on it, and an element of this file, are regarded as distinct instances of + D1 Digital Object, mutually related by the P106 is composed of (forms part of) property. +A D1 Digital Object does not depend on a specific physical carrier, and it can exist on one or more carriers simultaneously. + + + + + This class comprises events that result in the creation of instances of D9 Data Object that + represent the appearance and/or form of an instance of E18 Physical Thing such as paper documents, statues, buildings, paintings, etc. + A particular case is the analogue-to-digital conversion of audiovisual material. + This class represents the transition from a material thing to an immaterial representation of it. + The characteristic subsequent processing steps on digital objects are regarded as instances of D3 Formal Derivation. + + + + + This class comprises events that result in the creation of a D1 Digital Object from another one following a deterministic algorithm, + such that the resulting instance of digital object shares representative properties with the original object. + In other words, this class describes the transition from an immaterial object referred to by property L21 used as derivation source (was derivation source for) + to another immaterial object referred to by property L22 created derivative (was derivative created by) preserving the + representation of some things but in a different form. Characteristic examples are colour corrections, contrast changes and resizing of images. + + + + + + This class comprises events that happen on physical digital devices following a human activity that intentionally caused its + immediate or delayed initiation and results in the creation of a new instance of D1 Digital Object on behalf of the human actor. + The input of a D7 Digital Machine Event may be parameter settings and/or data to be processed. + Some D7 Digital Machine Events may form part of a wider E65 Creation event. + In this case, all machine output of the partial events is regarded as creation of the overall activity. + + + + + + This class comprises identifiable material items such as computers, scanners, cameras, etc. that + have the capability to process or produce instances of D1 Digital Object. + + + + + This class comprises instances of D1 Digital Object that are the direct result of a digital + measurement or a formal derivative of it, containing quantitative properties of some physical things or other constellations of matter. + + + + + + This class comprises events by which a digital device runs a software program or a series of computing + operations on a digital object as a single task, which is completely determined by its digital input, + the software and the generic properties of the device. + + + + + This class comprises actions measuring physical properties using a digital device, + that are determined by a systematic procedure and creates an instance of D9 Data Object, + which is stored on an instance of D13 Digital Information Carrier. + In contrast to instances of D10 Software Execution, environmental factors have an intended influence on the outcome of an instance of D11 Digital Measurement Event. + Measurement devices may include running distinct software, such as the RAW to JPEG conversion in digital cameras. + In this case, the event is regarded as instance of both classes, D10 Software Execution and D11 Digital Measurement Event. + + + + + + This class comprises events that transfer a digital object from one digital carrier to another. + Normally, the digital object remains the same. If in general or by observation the transfer implies or has + implied some data corruption, the change of the digital objects may be documented distinguishing input and output + rather than instantiating the property L14 transferred (was transferred by). + + + + + This class comprises all instances of E84 Information Carrier that are explicitly designed to be + used as persistent digital physical carriers of instances of D1 Digital Object. + A D13 Digital Information Carrier may or may not contain information, e.g., an empty diskette. + + + + + This class comprises software codes,computer programs,procedures, and functions that are + used to operate a system of digital objects. + + + + + This class comprises the proper noun name that identifies a person that acts +as an entity. + + + + + + + + + + This class comprises objects that make propositions about other artefacts. + Instances of this class are not the attributes themselves, by which things are annotated, + but represent the connection between the concepts related in a proposition, and the activities of creation, modification and deletion. + + + + + + This class comprises events that describe the creation of associations (Annotation Objects) between objects + or areas of objects of the Repository, with other objects or regions or persons, places, events. It is the event that creates the Annotation Object. + + + + + This class describes a part (of any shape or size) of interest in basically any media object stored in the Object Repository, + i.e., a text, an image, a video or a 3D model. It points to content consisting of just a portion or area of a file. +In some contexts, however, the area can also point to content represented by an integral (i.e., proper) file. It is equal to the METS AREA element + + + + + +This property associates an instance of D2 Digitization Process with an instance of E18 Physical Thing which is a material thing. +This property is a specialisation of P39 measured (was measured by). + + + + + + + + + + + + This property associates an instance of D10 Software Execution with an instance of D1 Digital Object + which is used as a source, a software essential for the performance. +This property is a specialisation of L10F had input (was input of). + + + + + + + + + + + + + This property associates an instance of E1 Entity with an instance of resource used as a preferred lexical label. +This property is a specialisation of rdf schema label. + + + + + + + + This property associates an instance of D7 Digital Machine Event with an instance of D1 Digital Object + which is the input used to specify the machine action. +This property is a specialisation of P16 used specific object(was used for). + + + + + + + + + + + + + + This property associates an instance of D7 Digital Machine Event with an instance of D1 Digital Object + which is the output of the activity. +This property is a specialisation of P94 has created (was created by). + + + + + + + + + + + + +This property associates an instance of D7 Digital Machine Event with an object, + the D8 Digital Device, which happened with, e.g a capturing event that happened on/with a digital camera, etc. +This property is a specialisation of P12 occurred in the presence of (was present at). + + + + + + + + + + + + + This property associates an instance of D10 Software Execution with a digital object + used as a parameter during the process.This property is a specialisation of L1O had input (was input of). + + + + + + + + + + + + +This property identifies a digital object transferred by a D12 Data Transfer Event. +This property is a specialisation of L11 had output (was output of). + + + + + + + + + + + + + + +This property identifies a digital device used as a medium on which data are transferred +through a D12 Data Transfer Event. + + + + + + + + + + + + +This property identifies a digital device used as a medium to receive data +through a D12 Data Transfer Event. + + + + + + + + + + + + +This property associates an instance of D11 Digital Measurement Event with the instance of E55 +Type of object to which it applied. This property is a specialisation of P125 used object of type. + + + + + + + + + + + + +This property identifies a Digital Information Carrier modified in a Digital Machine Event. +This property is a specialisation of P31 has modified. + + + + + + + + + + + + +This property associates an instance of a D13 Digital Information Carrier with the instance of Digital Object +that is stored on it. This property is a specialisation of P128 carries. + + + + + + + + + + + + +This property identifies a Data Object that came into existence as a result of a D11 Digital Measurement Event. +This property is a specialisation of P40 observed dimension and L11 had output. + + + + + + + + + + + + + + +This property associates an instance of a D3 Formal Derivation with the instance of D1 Digital Object that is used as a derivation source. + + + + + + + + + + + + +This property associates an instance of D3 Formal Derivation with the Digital Object it used to create a version of. +This property is a specialisation of L11 had output. + + + + + + + + + + + + +This property associates an instance of D7 Digital Machine Event with the instance of D14 Software that had used. +This property is a specialisation of P16 used specific object. + + + + + + + + + + + + +This property identifies the logfile that was created by a D10 Software Execution in order to record all the activities in the system. + + + + + + + + + + + + +This property describes the participation of a Legal Body in being responsible for the outcome of a specific activity. +This property is a specialisation of P14 carried out by. + + + + + + + + + + + + +This property describes the activity that is being operated by a person. +This property is a specialisation of P14 carried out by. + + + + + + + + + + + + +This property allows the starting point for a D7 Digital Machine Event to be situated. +This property expresses the approximation of the starting date of a time span. + + + + + + +This property allows the ending point for a D7 Digital Machine Event to be situated. +This property expresses the approximation of the ending date of a time span. + + + + + + +This property identifies the maker, the actor who is responsible for the production of a device, + a computer, a digital camera, any kind of a machine that has been produced. +This property is a shortcut of a more fully developed path from CRM E12 Production:P108 has produced:E24 Physical Man-Made Thing. +In this case, there is no need to describe the more detailed property through a production event,so L33 has maker is reccomended to be used instead. + + + + + + + + + + + + +This property describes the participation of a Legal Body in being contractor for the outcome of a specific activity. +This property is a specialisation of L29_has_responsible_organization. + + + + + + + + + + + + +This property describes the participation of a Legal Body in being commissioner for the outcome of a specific activity. +This property is a specialisation of L29_has_responsible_organization. + + + + + + + + + + + + + + +This property describes the associations between objects or areas of objects of the RI, +with other objects or regions or persons, places, events.. + + + + + + + + + +This property is a specialisation of P3 has note and associates a comment with an instance of an object E1 CRM Entity. + + + + + + +This property identifies the D29 Annotation Object (associations) that came into existence as a result of a D30 Annotation Event. +This property is a specialisation of P94 has created. + + + + + + + + + + + + +This property describes the association between a particular area declared in an original digital object. +This property is a specialisation of P106 is composed of. + + + + + + + + + + + + +This property describes the association between an area and the digital object to which it is propagated. +This property is a specialisation of P106 is composed of. + + + + + + + + + + + + +This property defines a personal name used to identify a person. + + + + + + +This property defines the last name used to identify a person. +This property is a specialisation of L4 has preferred label. + + + + + + +This property describes a non unique identification applied to E1 CRM Entity. + + + + + + +This property describes the association kind of "same as" between objects. It is used to declare that two or more objects are +exactly the same. + + + + + +This property describes the association kind of "same as" between objects. It is used to declare that two or more objects are +exactly the same. + + + + + +This property records the inventory number that was used to identify an instance of E1 CRM Entity +at the time this property was record. This property is a specialisation of L53F is not uniquely identified by. + + + + + +This property records the pixel width of the data object; it approximates a dimension that is +part of the image data analysis.This property is a specialisation of P90 has value. + + + + + + +This property records the pixel height of the data object; it approximates a dimension that is +part of the image data analysis.This property is a specialisation of P90 has value. + + + + + + +This property records the serial number that was assigned to identify an instance of E22 Man Made Object. + This property is a specialisation of L53 is not uniquely identified by. + + + + + + +This property describes the CRM Entities documented by instances of Digitization Processes. +This property is a specialisation of P140 assigned attribute to. + + + + + + + + + + +This property describes the minimum period of time covered by a digital machine event. It +identifies the minimum extent of the event. This property is a specialisation of P81 ongoing throughout. + + + + + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMpe.rdfs b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMpe.rdfs new file mode 100644 index 0000000..542cdd2 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/CRMpe.rdfs @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs new file mode 100644 index 0000000..5c9c296 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/rdfs/cidoc_crm_v6.2-draft-2015August.rdfs @@ -0,0 +1,5343 @@ + + + + + Οντότητα CIDOC CRM + CRM Entity + CRM Entität + CRM Сущность + Entité CRM + Entidade CRM + CRM实体 + This class comprises all things in the universe of discourse of the CIDOC Conceptual Reference Model. +It is an abstract concept providing for three general properties: +1. Identification by name or appellation, and in particular by a preferred identifier +2. Classification by type, allowing further refinement of the specific subclass an instance belongs to +3. Attachment of free text for the expression of anything not captured by formal properties +With the exception of E59 Primitive Value, all other classes within the CRM are directly or indirectly specialisations of E1 CRM Entity. + + + + + Entité temporelle + Temporal Entity + Временная Сущность + Έγχρονη Οντότητα + Geschehendes + Entidade Temporal + 时间实体 + This class comprises all phenomena, such as the instances of E4 Periods, E5 Events and states, which happen over a limited extent in time. + In some contexts, these are also called perdurants. This class is disjoint from E77 Persistent Item. This is an abstract class and has no direct instances. E2 Temporal Entity is specialized into E4 Period, which applies to a particular geographic area (defined with a greater or lesser degree of precision), and E3 Condition State, which applies to instances of E18 Physical Thing. + + + + + + Состояние + Condition State + Zustandsphase + État matériel + Κατάσταση + Estado Material + 状态 + This class comprises the states of objects characterised by a certain condition over a time-span. +An instance of this class describes the prevailing physical condition of any material object or feature during a specific E52 Time Span. In general, the time-span for which a certain condition can be asserted may be shorter than the real time-span, for which this condition held. + The nature of that condition can be described using P2 has type. For example, the E3 Condition State “condition of the SS Great Britain between 22 September 1846 and 27 August 1847” can be characterized as E55 Type “wrecked”. + + + + + + Phase + Period + Période + Период + Περίοδος + Período + 期间 + This class comprises sets of coherent phenomena or cultural manifestations occurring in time and space. + +It is the social or physical coherence of these phenomena that identify an E4 Period and not the associated spatiotemporal extent. This extent is only the "ground" or space in an abstract physical sense that the actual process of growth, spread and retreat has covered. Consequently, different periods can overlap and coexist in time and space, such as when a nomadic culture exists in the same area and time as a sedentary culture. This also means that overlapping land use rights, common among first nations, amounts to overlapping periods. + +Often, this class is used to describe prehistoric or historic periods such as the "Neolithic Period", the "Ming Dynasty" or the "McCarthy Era", but also geopolitical units and activities of settlements are regarded as special cases of E4 Period. However, there are no assumptions about the scale of the associated phenomena. In particular all events are seen as synthetic processes consisting of coherent phenomena. Therefore E4 Period is a superclass of E5 Event. For example, a modern clinical E67 Birth can be seen as both an atomic E5 Event and as an E4 Period that consists of multiple activities performed by multiple instances of E39 Actor. + +As the actual extent of an E4 Period in spacetime we regard the trajectories of the participating physical things during their participation in an instance of E4 Period. This includes the open spaces via which these things have interacted and the spaces by which they had the potential to interact during that period or event in the way defined by the type of the respective period or event. Examples include the air in a meeting room transferring the voices of the participants. Since these phenomena are fuzzy, we assume the spatiotemporal extent to be contiguous, except for cases of phenomena spreading out over islands or other separated areas, including geopolitical units distributed over disconnected areas such as islands or colonies. + +Whether the trajectories necessary for participants to travel between these areas are regarded as part of the spatiotemporal extent or not has to be decided in each case based on a concrete analysis, taking use of the sea for other purposes than travel, such as fishing, into consideration. One may also argue that the activities to govern disconnected areas imply travelling through spaces connecting them and that these areas hence are spatially connected in a way, but it appears counterintuitive to consider for instance travel routes in international waters as extensions of geopolitical units. + +Consequently, an instance of E4 Period may occupy a number of disjoint spacetime volumes, however there must not be a discontinuity in the timespan covered by these spacetime volumes. This means that an instance of E4 Period must be contiguous in time. If it has ended in all areas, it has ended as a whole. However it may end in one area before another, such as in the Polynesian migration, and it continues as long as it is ongoing in at least one area. + +We model E4 Period as a subclass of E2 Temporal Entity and of E92 Spacetime volume. The latter is intended as a phenomenal spacetime volume as defined in CRMgeo (Doerr and Hiebel 2013). By virtue of this multiple inheritance we can discuss the physical extent of an E4 Period without representing each instance of it together with an instance of its associated spacetime volume. This model combines two quite different kinds of substance: an instance of E4 Period is a phenomena while a space-time volume is an aggregation of points in spacetime. However, the real spatiotemporal extent of an instance of E4 Period is regarded to be unique to it due to all its details and fuzziness; its identity and existence depends uniquely on the identity of the instance of E4 Period. Therefore this multiple inheritance is unambiguous and effective and furthermore corresponds to the intuitions of natural language. + +There are two different conceptualisations of 'artistic style', defined either by physical features or by historical context. For example, “Impressionism” can be viewed as a period lasting from approximately 1870 to 1905 during which paintings with particular characteristics were produced by a group of artists that included (among others) Monet, Renoir, Pissarro, Sisley and Degas. Alternatively, it can be regarded as a style applicable to all paintings sharing the characteristics of the works produced by the Impressionist painters, regardless of historical context. The first interpretation is an instance of E4 Period, and the second defines morphological object types that fall under E55 Type. + +Another specific case of an E4 Period is the set of activities and phenomena associated with a settlement, such as the populated period of Nineveh. + + + + + + + Συμβάν + Événement + Событие + Event + Ereignis + Evento + 事件 + This class comprises changes of states in cultural, social or physical systems, regardless of scale, brought about by a series or group of coherent physical, cultural, technological or legal phenomena. Such changes of state will affect instances of E77 Persistent Item or its subclasses. +The distinction between an E5 Event and an E4 Period is partly a question of the scale of observation. Viewed at a coarse level of detail, an E5 Event is an ‘instantaneous’ change of state. At a fine level, the E5 Event can be analysed into its component phenomena within a space and time frame, and as such can be seen as an E4 Period. The reverse is not necessarily the case: not all instances of E4 Period give rise to a noteworthy change of state. + + + + + + Разрушение + Destruction + Destruction + Zerstörung + Καταστροφή + Destruição + 摧毁 + This class comprises events that destroy one or more instances of E18 Physical Thing such that they lose their identity as the subjects of documentation. +Some destruction events are intentional, while others are independent of human activity. Intentional destruction may be documented by classifying the event as both an E6 Destruction and E7 Activity. +The decision to document an object as destroyed, transformed or modified is context sensitive: +1. If the matter remaining from the destruction is not documented, the event is modelled solely as E6 Destruction. +2. An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the original. In this case, the new items have separate identities. Matter is preserved, but identity is not. +3. When the initial identity of the changed instance of E18 Physical Thing is preserved, the event should be documented as E11 Modification. + + + + + + Activity + Activité + Handlung + Деятельность + Δράση + Atividade + 活动 + This class comprises actions intentionally carried out by instances of E39 Actor that result in changes of state in the cultural, social, or physical systems documented. +This notion includes complex, composite and long-lasting actions such as the building of a settlement or a war, as well as simple, short-lived actions such as the opening of a door. + + + + + + Acquisition + Απόκτηση + Событие Приобретения + Acquisition + Erwerb + Aquisição + 征集取得 + This class comprises transfers of legal ownership from one or more instances of E39 Actor to one or more other instances of E39 Actor. +The class also applies to the establishment or loss of ownership of instances of E18 Physical Thing. It does not, however, imply changes of any other kinds of right. The recording of the donor and/or recipient is optional. It is possible that in an instance of E8 Acquisition there is either no donor or no recipient. Depending on the circumstances, it may describe: +1. the beginning of ownership +2. the end of ownership +3. the transfer of ownership +4. the acquisition from an unknown source +5. the loss of title due to destruction of the item +It may also describe events where a collector appropriates legal title, for example by annexation or field collection. The interpretation of the museum notion of "accession" differs between institutions. The CRM therefore models legal ownership (E8 Acquisition) and physical custody (E10 Transfer of Custody) separately. Institutions will then model their specific notions of accession and deaccession as combinations of these. + + + + + + Move + Μετακίνηση + Objektbewegung + Перемещение + Déplacement + Locomoção + 移动 + This class comprises changes of the physical location of the instances of E19 Physical Object. +Note, that the class E9 Move inherits the property P7 took place at (witnessed): E53 Place. This property should be used to describe the trajectory or a larger area within which a move takes place, whereas the properties P26 moved to (was destination of), P27 moved from (was origin of) describe the start and end points only. Moves may also be documented to consist of other moves (via P9 consists of (forms part of)), in order to describe intermediate stages on a trajectory. In that case, start and end points of the partial moves should match appropriately between each other and with the overall event. + + + + + + Changement de détenteur + Transfer of Custody + Übertragung des Gewahrsams + Μεταβίβαση Κατοχής + Передача Опеки + Transferência de Custódia + 保管作业转移 + This class comprises transfers of physical custody of objects between instances of E39 Actor. +The recording of the donor and/or recipient is optional. It is possible that in an instance of E10 Transfer of Custody there is either no donor or no recipient. Depending on the circumstances it may describe: +1. the beginning of custody +2. the end of custody +3. the transfer of custody +4. the receipt of custody from an unknown source +5. the declared loss of an object +The distinction between the legal responsibility for custody and the actual physical possession of the object should be expressed using the property P2 has type (is type of). A specific case of transfer of custody is theft. +The interpretation of the museum notion of "accession" differs between institutions. The CRM therefore models legal ownership and physical custody separately. Institutions will then model their specific notions of accession and deaccession as combinations of these. + + + + + + Событие Изменения + Modification + Τροποποίηση + Modification + Bearbeitung + Modificação + 修改 + This class comprises all instances of E7 Activity that create, alter or change E24 Physical Man-Made Thing. +This class includes the production of an item from raw materials, and other so far undocumented objects, and the preventive treatment or restoration of an object for conservation. +Since the distinction between modification and production is not always clear, modification is regarded as the more generally applicable concept. This implies that some items may be consumed or destroyed in a Modification, and that others may be produced as a result of it. An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities. +If the instance of the E29 Design or Procedure utilized for the modification prescribes the use of specific materials, they should be documented using property P68 foresees use of (use foreseen by): E57 Material of E29 Design or Procedure, rather than via P126 employed (was employed in): E57 Material. + + + + + + Production + Παραγωγή + Herstellung + Событие Производства + Production + Produção + 生产 + This class comprises activities that are designed to, and succeed in, creating one or more new items. +It specializes the notion of modification into production. The decision as to whether or not an object is regarded as new is context sensitive. Normally, items are considered “new” if there is no obvious overall similarity between them and the consumed items and material used in their production. In other cases, an item is considered “new” because it becomes relevant to documentation by a modification. For example, the scribbling of a name on a potsherd may make it a voting token. The original potsherd may not be worth documenting, in contrast to the inscribed one. +This entity can be collective: the printing of a thousand books, for example, would normally be considered a single event. +An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities and matter is preserved, but identity is not. + + + + + + + Присвоение Атрибута + Affectation d'attribut + Merkmalszuweisung + Attribute Assignment + Απόδοση Ιδιοτήτων + Atribuição de Característica + 屬性指定 + This class comprises the actions of making assertions about properties of an object or any relation between two items or concepts. +This class allows the documentation of how the respective assignment came about, and whose opinion it was. All the attributes or properties assigned in such an action can also be seen as directly attached to the respective item or concept, possibly as a collection of contradictory values. All cases of properties in this model that are also described indirectly through an action are characterised as "short cuts" of this action. This redundant modelling of two alternative views is preferred because many implementations may have good reasons to model either the action or the short cut, and the relation between both alternatives can be captured by simple rules. +In particular, the class describes the actions of people making propositions and statements during certain museum procedures, e.g. the person and date when a condition statement was made, an identifier was assigned, the museum object was measured, etc. Which kinds of such assignments and statements need to be documented explicitly in structures of a schema rather than free text, depends on if this information should be accessible by structured queries. + + + + + + Εκτίμηση Κατάστασης + Оценка Состояния + Expertise de l'état matériel + Zustandsfeststellung + Condition Assessment + Avaliação do Estado Material + 状态评估 + This class describes the act of assessing the state of preservation of an object during a particular period. +The condition assessment may be carried out by inspection, measurement or through historical research. This class is used to document circumstances of the respective assessment that may be relevant to interpret its quality at a later stage, or to continue research on related documents. + + + + + +Απόδοση Αναγνωριστικού + Назначение Идентификатора + Identifier Assignment + Kennzeichenzuweisung + Attribution d’identificateur + Atribuição de Identificador + 标识符指定 + This class comprises activities that result in the allocation of an identifier to an instance of E1 CRM Entity. An E15 Identifier Assignment may include the creation of the identifier from multiple constituents, which themselves may be instances of E41 Appellation. The syntax and kinds of constituents to be used may be declared in a rule constituting an instance of E29 Design or Procedure. +Examples of such identifiers include Find Numbers, Inventory Numbers, uniform titles in the sense of librarianship and Digital Object Identifiers (DOI). Documenting the act of identifier assignment and deassignment is especially useful when objects change custody or the identification system of an organization is changed. In order to keep track of the identity of things in such cases, it is important to document by whom, when and for what purpose an identifier is assigned to an item. +The fact that an identifier is a preferred one for an organisation can be expressed by using the property E1 CRM Entity. P48 has preferred identifier (is preferred identifier of): E42 Identifier. It can better be expressed in a context independent form by assigning a suitable E55 Type, such as “preferred identifier assignment”, to the respective instance of E15 Identifier Assignment via the P2 has type property. + + + + + + Событие Измерения + Μέτρηση + Messung + Mesurage + Measurement + Medição + 测量 + This class comprises actions measuring physical properties and other values that can be determined by a systematic procedure. +Examples include measuring the monetary value of a collection of coins or the running time of a specific video cassette. +The E16 Measurement may use simple counting or tools, such as yardsticks or radiation detection devices. The interest is in the method and care applied, so that the reliability of the result may be judged at a later stage, or research continued on the associated documents. The date of the event is important for dimensions, which may change value over time, such as the length of an object subject to shrinkage. Details of methods and devices are best handled as free text, whereas basic techniques such as "carbon 14 dating" should be encoded using P2 has type (is type of:) E55 Type. + + + + + + Typuszuweisung + Присвоение Типа + Attribution de type + Type Assignment + Απόδοση Τύπου + Atribuição de Tipo + 类型指定 + This class comprises the actions of classifying items of whatever kind. Such items include objects, specimens, people, actions and concepts. +This class allows for the documentation of the context of classification acts in cases where the value of the classification depends on the personal opinion of the classifier, and the date that the classification was made. This class also encompasses the notion of "determination," i.e. the systematic and molecular identification of a specimen in biology. + + + + + + Materielles + Υλικό Πράγμα + Physical Thing + Chose matérielle + Физическая Вещь + Coisa Material + 实体物 + This class comprises all persistent physical items with a relatively stable form, man-made or natural. + +Depending on the existence of natural boundaries of such things, the CRM distinguishes the instances of E19 Physical Object from instances of E26 Physical Feature, such as holes, rivers, pieces of land etc. Most instances of E19 Physical Object can be moved (if not too heavy), whereas features are integral to the surrounding matter. + +An instance of E18 Physical Thing occupies not only a particular geometric space, but in the course of its existence it also forms a trajectory through spacetime, which occupies a real, that is phenomenal, volume in spacetime. We include in the occupied space the space filled by the matter of the physical thing and all its inner spaces, such as the interior of a box. Physical things consisting of aggregations of physically unconnected objects, such as a set of chessmen, occupy a number of individually contiguous spacetime volumes equal to the number of unconnected objects that constitute the set. + +We model E18 Physical Thing to be a subclass of E72 Legal Object and of E92 Spacetime volume. The latter is intended as a phenomenal spacetime volume as defined in CRMgeo (Doerr and Hiebel 2013). By virtue of this multiple inheritance we can discuss the physical extent of an E18 Physical Thing without representing each instance of it together with an instance of its associated spacetime volume. This model combines two quite different kinds of substance: an instance of E18 Physical Thing is matter while a spacetime volume is an aggregation of points in spacetime. However, the real spatiotemporal extent of an instance of E18 Physical Thing is regarded to be unique to it, due to all its details and fuzziness; its identity and existence depends uniquely on the identity of the instance of E18 Physical Thing. Therefore this multiple inheritance is unambiguous and effective and furthermore corresponds to the intuitions of natural language. + +The CIDOC CRM is generally not concerned with amounts of matter in fluid or gaseous states. + + + + + + + Физический Объект + Objet matériel + Physical Object + Υλικό Αντικείμενο + Materieller Gegenstand + Objeto Material + 实体物件 + This class comprises items of a material nature that are units for documentation and have physical boundaries that separate them completely in an objective way from other objects. +The class also includes all aggregates of objects made for functional purposes of whatever kind, independent of physical coherence, such as a set of chessmen. Typically, instances of E19 Physical Object can be moved (if not too heavy). +In some contexts, such objects, except for aggregates, are also called “bona fide objects” (Smith & Varzi, 2000, pp.401-420), i.e. naturally defined objects. +The decision as to what is documented as a complete item, rather than by its parts or components, may be a purely administrative decision or may be a result of the order in which the item was acquired. + + + + + + Биологический Объект + Biological Object + Βιολογικό Ακτικείμενο + Objet biologique + Biologischer Gegenstand + Objeto Biológico + 生物体 + This class comprises individual items of a material nature, which live, have lived or are natural products of or from living organisms. +Artificial objects that incorporate biological elements, such as Victorian butterfly frames, can be documented as both instances of E20 Biological Object and E22 Man-Made Object. + + + + + + Person + Personne + Person + Личность + Πρόσωπο + Pessoa + 人物 + This class comprises real persons who live or are assumed to have lived. +Legendary figures that may have existed, such as Ulysses and King Arthur, fall into this class if the documentation refers to them as historical figures. In cases where doubt exists as to whether several persons are in fact identical, multiple instances can be created and linked to indicate their relationship. The CRM does not propose a specific form to support reasoning about possible identity. + + + + + + + Objet fabriqué + Ανθρωπογενές Αντικείμενο + Künstlicher Gegenstand + Рукотворный Объект + Man-Made Object + Objeto Fabricado + 人造物件 + This class comprises physical objects purposely created by human activity. +No assumptions are made as to the extent of modification required to justify regarding an object as man-made. For example, an inscribed piece of rock or a preserved butterfly are both regarded as instances of E22 Man-Made Object. + + + + + + + Физическая Рукотворная Вещь + Physical Man-Made Thing + Ανθρωπογενές Υλικό Πράγμα + Hergestelltes + Chose matérielle fabriquée + Coisa Material Fabricada + 人造实体物 + This class comprises all persistent physical items that are purposely created by human activity. +This class comprises man-made objects, such as a swords, and man-made features, such as rock art. No assumptions are made as to the extent of modification required to justify regarding an object as man-made. For example, a “cup and ring” carving on bedrock is regarded as instance of E24 Physical Man-Made Thing. + + + + + + + Caractéristique fabriquée + Man-Made Feature + Искусственный Признак + Ανθρωπογενές Μόρφωμα + Hergestelltes Merkmal + Característica Fabricada + 人造外貌表征 + This class comprises physical features that are purposely created by human activity, such as scratches, artificial caves, artificial water channels, etc. +No assumptions are made as to the extent of modification required to justify regarding a feature as man-made. For example, rock art or even “cup and ring” carvings on bedrock a regarded as types of E25 Man-Made Feature. + + + + + + + Υλικό Μόρφωμα + Physical Feature + Физический Признак + Materielles Merkmal + Caractéristique matérielle + Característica Material + 实体外貌表征 + This class comprises identifiable features that are physically attached in an integral way to particular physical objects. +Instances of E26 Physical Feature share many of the attributes of instances of E19 Physical Object. They may have a one-, two- or three-dimensional geometric extent, but there are no natural borders that separate them completely in an objective way from the carrier objects. For example, a doorway is a feature but the door itself, being attached by hinges, is not. +Instances of E26 Physical Feature can be features in a narrower sense, such as scratches, holes, reliefs, surface colours, reflection zones in an opal crystal or a density change in a piece of wood. In the wider sense, they are portions of particular objects with partially imaginary borders, such as the core of the Earth, an area of property on the surface of the Earth, a landscape or the head of a contiguous marble statue. They can be measured and dated, and it is sometimes possible to state who or what is or was responsible for them. They cannot be separated from the carrier object, but a segment of the carrier object may be identified (or sometimes removed) carrying the complete feature. +This definition coincides with the definition of "fiat objects" (Smith & Varzi, 2000, pp.401-420), with the exception of aggregates of “bona fide objects”. + + + + + + Φυσικός Χώρος + Site + Site + Участок + Gelände + Lugar + 场地 + This class comprises pieces of land or sea floor. +In contrast to the purely geometric notion of E53 Place, this class describes constellations of matter on the surface of the Earth or other celestial body, which can be represented by photographs, paintings and maps. + Instances of E27 Site are composed of relatively immobile material items and features in a particular configuration at a particular location + + + + + Objet conceptuel + Begrifflicher Gegenstand + Концептуальный Объект + Conceptual Object + Νοητικό Αντικείμενο + Objeto Conceitual + 概念物件 + This class comprises non-material products of our minds and other human produced data that have become objects of a discourse about their identity, circumstances of creation or historical implication. The production of such information may have been supported by the use of technical devices such as cameras or computers. +Characteristically, instances of this class are created, invented or thought by someone, and then may be documented or communicated between persons. Instances of E28 Conceptual Object have the ability to exist on more than one particular carrier at the same time, such as paper, electronic signals, marks, audio media, paintings, photos, human memories, etc. +They cannot be destroyed. They exist as long as they can be found on at least one carrier or in at least one human memory. Their existence ends when the last carrier and the last memory are lost. + + + + + + Σχέδιο + Entwurf oder Verfahren + Conception ou procédure + Проект или Процедура + Design or Procedure + Projeto ou Procedimento + 设计或程序 + This class comprises documented plans for the execution of actions in order to achieve a result of a specific quality, form or contents. In particular it comprises plans for deliberate human activities that may result in the modification or production of instances of E24 Physical Thing. +Instances of E29 Design or Procedure can be structured in parts and sequences or depend on others. This is modelled using P69 has association with (is associated with). +Designs or procedures can be seen as one of the following: +1. A schema for the activities it describes +2. A schema of the products that result from their application. +3. An independent intellectual product that may have never been applied, such as Leonardo da Vinci’s famous plans for flying machines. +Because designs or procedures may never be applied or only partially executed, the CRM models a loose relationship between the plan and the respective product. + + + + + + Право + Δικαίωμα + Droit + Right + Recht + Direitos + 权限 + This class comprises legal privileges concerning material and immaterial things or their derivatives. +These include reproduction and property rights + + + + + Document + Document + Dokument + Документ + Τεκμήριο + Documento + 文献 + This class comprises identifiable immaterial items that make propositions about reality. +These propositions may be expressed in text, graphics, images, audiograms, videograms or by other similar means. Documentation databases are regarded as a special case of E31 Document. This class should not be confused with the term “document” in Information Technology, which is compatible with E73 Information Object. + + + + + + Referenzdokument + Официальный Документ + Document de référence + Πηγή Καθιερωμένων Όρων + Authority Document + Documento de Referência + 权威文献 + This class comprises encyclopaedia, thesauri, authority lists and other documents that define terminology or conceptual systems for consistent use. + + + + + + Линвистический Объект + Linguistic Object + Γλωσσικό Αντικείμενο + Objet linguistique + Sprachlicher Gegenstand + Objeto Lingüístico + 语言物件 + This class comprises identifiable expressions in natural language or languages. +Instances of E33 Linguistic Object can be expressed in many ways: e.g. as written texts, recorded speech or sign language. However, the CRM treats instances of E33 Linguistic Object independently from the medium or method by which they are expressed. Expressions in formal languages, such as computer code or mathematical formulae, are not treated as instances of E33 Linguistic Object by the CRM. These should be modelled as instances of E73 Information Object. +The text of an instance of E33 Linguistic Object can be documented in a note by P3 has note: E62 String + + + + + + Επιγραφή + Inscription + Inscription + Надпись + Inschrift + Inscrição + 题字 + This class comprises recognisable, short texts attached to instances of E24 Physical Man-Made Thing. +The transcription of the text can be documented in a note by P3 has note: E62 String. The alphabet used can be documented by P2 has type: E55 Type. This class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of an inscription, but the underlying prototype. The physical embodiment is modelled in the CRM as E24 Physical Man-Made Thing. +The relationship of a physical copy of a book to the text it contains is modelled using E84 Information Carrier. P128 carries (is carried by): E33 Linguistic Object. + + + + + + + Заголовок + Titre + Titel + Title + Τίτλος + Título + 题目 + This class comprises the names assigned to works, such as texts, artworks or pieces of music. +Titles are proper noun phrases or verbal phrases, and should not be confused with generic object names such as “chair”, “painting” or “book” (the latter are common nouns that stand for instances of E55 Type). Titles may be assigned by the creator of the work itself, or by a social group. +This class also comprises the translations of titles that are used as surrogates for the original titles in different social contexts. + + + + + + + Визуальный Предмет + Item visuel + Οπτικό Στοιχείο + Visual Item + Bildliches + Item Visual + 视觉项目 + This class comprises the intellectual or conceptual aspects of recognisable marks and images. +This class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of a visual item, but the underlying prototype. For example, a mark such as the ICOM logo is generally considered to be the same logo when used on any number of publications. The size, orientation and colour may change, but the logo remains uniquely identifiable. The same is true of images that are reproduced many times. This means that visual items are independent of their physical support. +The class E36 Visual Item provides a means of identifying and linking together instances of E24 Physical Man-Made Thing that carry the same visual symbols, marks or images etc. The property P62 depicts (is depicted by) between E24 Physical Man-Made Thing and depicted subjects (E1 CRM Entity) can be regarded as a short-cut of the more fully developed path from E24 Physical Man-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1CRM Entity, which in addition captures the optical features of the depiction. + + + + + + Пометка + Marque + Σήμανση + Mark + Marke + Marca + 标志 + This class comprises symbols, signs, signatures or short texts applied to instances of E24 Physical Man-Made Thing by arbitrary techniques in order to indicate the creator, owner, dedications, purpose, etc. +This class specifically excludes features that have no semantic significance, such as scratches or tool marks. These should be documented as instances of E25 Man-Made Feature. + + + + + +Изображение + Εικόνα + Bild + Image + Image + Imagem + 图像 + This class comprises distributions of form, tone and colour that may be found on surfaces such as photos, paintings, prints and sculptures or directly on electronic media. +The degree to which variations in the distribution of form and colour affect the identity of an instance of E38 Image depends on a given purpose. The original painting of the Mona Lisa in the Louvre may be said to bear the same instance of E38 Image as reproductions in the form of transparencies, postcards, posters or T-shirts, even though they may differ in size and carrier and may vary in tone and colour. The images in a “spot the difference” competition are not the same with respect to their context, however similar they may at first appear. + + + + + +Akteur +Агент + Agent + Δράστης + Actor + Agente + 角色 + This class comprises people, either individually or in groups, who have the potential to perform intentional actions of kinds for which someone may be held responsible. +The CRM does not attempt to model the inadvertent actions of such actors. Individual people should be documented as instances of E21 Person, whereas groups should be documented as instances of either E74 Group or its subclass E40 Legal Body. + + + + + + Collectivité + Juristische Person + Νομικό Πρόσωπο + Юридическое Лицо + Legal Body + Pessoa Jurídica + 法律组织 + This class comprises institutions or groups of people that have obtained a legal recognition as a group and can act collectively as agents. +This means that they can perform actions, own property, create or destroy things and can be held collectively responsible for their actions like individual people. The term 'personne morale' is often used for this in French. + + + + + +Benennung + Обозначение + Appellation + Appellation + Ονομασία + Designação + 称号 + This class comprises signs, either meaningful or not, or arrangements of signs following a specific syntax, that are used or can be used to refer to and identify a specific instance of some class or category within a certain context. +Instances of E41 Appellation do not identify things by their meaning, even if they happen to have one, but instead by convention, tradition, or agreement. Instances of E41 Appellation are cultural constructs; as such, they have a context, a history, and a use in time and space by some group of users. A given instance of E41 Appellation can have alternative forms, i.e., other instances of E41 Appellation that are always regarded as equivalent independent from the thing it denotes. +Specific subclasses of E41 Appellation should be used when instances of E41 Appellation of a characteristic form are used for particular objects. Instances of E49 Time Appellation, for example, which take the form of instances of E50 Date, can be easily recognised. +E41 Appellation should not be confused with the act of naming something. Cf. E15 Identifier Assignment + + + + +Identificateur d'objet + Κωδικός Αναγνώρισης + Идентификатор Объекта + Kennung + Identifier + Identificador de Objeto + 标识符 + This class comprises strings or codes assigned to instances of E1 CRM Entity in order to identify them uniquely and permanently within the context of one or more organisations. Such codes are often known as inventory numbers, registration codes, etc. and are typically composed of alphanumeric sequences. The class E42 Identifier is not normally used for machine-generated identifiers used for automated processing unless these are also used by human agents. + + + +Обозначение Места + Place Appellation + Appellation de lieu + Ortsbenennung + Ονομασία Τόπου + Designação de Local + 地点称号 + This class comprises any sort of identifier characteristically used to refer to an E53 Place. +Instances of E44 Place Appellation may vary in their degree of precision and their meaning may vary over time - the same instance of E44 Place Appellation may be used to refer to several places, either because of cultural shifts, or because objects used as reference points have moved around. Instances of E44 Place Appellation can be extremely varied in form: postal addresses, instances of E47 Spatial Coordinate, and parts of buildings can all be considered as instances of E44 Place Appellation. + + + + +Adresse + Adresse + Διεύθυνση + Адрес + Address + Endereço + 地址 + This class comprises identifiers expressed in coding systems for places, such as postal addresses used for mailing. +An E45 Address can be considered both as the name of an E53 Place and as an E51 Contact Point for an E39 Actor. This dual aspect is reflected in the multiple inheritance. However, some forms of mailing addresses, such as a postal box, are only instances of E51 Contact Point, since they do not identify any particular Place. These should not be documented as instances of E45 Address. + + + + + +Désignation de section + Определение Района + Section Definition + Abschnittsdefinition + Ονομασία Τμήματος + Designação de Seção + 区域定义 + This class comprises areas of objects referred to in terms specific to the general geometry or structure of its kind. +The 'prow' of the boat, the 'frame' of the picture, the 'front' of the building are all instances of E46 Section Definition. The class highlights the fact that parts of objects can be treated as locations. This holds in particular for features without natural boundaries, such as the “head” of a marble statue made out of one block (cf. E53 Place). In answer to the question 'where is the signature?' one might reply 'on the lower left corner'. (Section Definition is closely related to the term “segment” in Gerstl, P.& Pribbenow, S, 1996 “ A conceptual theory of part – whole relations and its applications”, Data & Knowledge Engineering 20 305-322, North Holland- Elsevier ). + + + + +Coordonnées spatiales + Пространственные Координаты + Χωρικές Συντεταγμένες + Raumkoordinaten + Spatial Coordinates + Coordenadas Espaciais + 空间坐标 + This class comprises the textual or numeric information required to locate specific instances of E53 Place within schemes of spatial identification. + +Coordinates are a specific form of E44 Place Appellation, that is, a means of referring to a particular E53 Place. Coordinates are not restricted to longitude, latitude and altitude. Any regular system of reference that maps onto an E19 Physical Object can be used to generate coordinates. + + + + +Название Места + Toponyme + Τοπωνύμιο + Place Name + Orts- oder Flurname + Nome de Local + 地名 + This class comprises particular and common forms of E44 Place Appellation. +Place Names may change their application over time: the name of an E53 Place may change, and a name may be reused for a different E53 Place. Instances of E48 Place Name are typically subject to place name gazetteers. + + + +Обозначение Времени + Ονομασία Χρόνου + Zeitbenennung + Time Appellation + Appellation temporelle + Designação de Tempo + 时间称号 + This class comprises all forms of names or codes, such as historical periods, and dates, which are characteristically used to refer to a specific E52 Time-Span. +The instances of E49 Time Appellation may vary in their degree of precision, and they may be relative to other time frames, “Before Christ” for example. Instances of E52 Time-Span are often defined by reference to a cultural period or an event e.g. ‘the duration of the Ming Dynasty’. + + + + Datum + Ημερομηνία + Дата + Date + Date + Data + 日期 + This class comprises specific forms of E49 Time Appellation. + + + + Kontaktpunkt + Στοιχείο Επικοινωνίας + Coordonnées individuelles + Contact Point + Контакт + Ponto de Contato + 联系方式 + This class comprises identifiers employed, or understood, by communication services to direct communications to an instance of E39 Actor. These include E-mail addresses, telephone numbers, post office boxes, Fax numbers, URLs etc. Most postal addresses can be considered both as instances of E44 Place Appellation and E51 Contact Point. In such cases the subclass E45 Address should be used. +URLs are addresses used by machines to access another machine through an http request. Since the accessed machine acts on behalf of the E39 Actor providing the machine, URLs are considered as instances of E51 Contact Point to that E39 Actor. + + + + + Durée + Zeitspanne + Интервал Времени + Χρονικό Διάστημα + Time-Span + Período de Tempo + 时段 + This class comprises abstract temporal extents, in the sense of Galilean physics, having a beginning, an end and a duration. +Time Span has no other semantic connotations. Time-Spans are used to define the temporal extent of instances of E4 Period, E5 Event and any other phenomena valid for a certain time. An E52 Time-Span may be identified by one or more instances of E49 Time Appellation. +Since our knowledge of history is imperfect, instances of E52 Time-Span can best be considered as approximations of the actual Time-Spans of temporal entities. The properties of E52 Time-Span are intended to allow these approximations to be expressed precisely. An extreme case of approximation, might, for example, define an E52 Time-Span having unknown beginning, end and duration. Used as a common E52 Time-Span for two events, it would nevertheless define them as being simultaneous, even if nothing else was known. + Automatic processing and querying of instances of E52 Time-Span is facilitated if data can be parsed into an E61 Time Primitive. + + + + +Lieu + Place + Τόπος + Место + Ort + Local + 地点 + This class comprises extents in space, in particular on the surface of the earth, in the pure sense of physics: independent from temporal phenomena and matter. +The instances of E53 Place are usually determined by reference to the position of “immobile” objects such as buildings, cities, mountains, rivers, or dedicated geodetic marks. A Place can be determined by combining a frame of reference and a location with respect to this frame. It may be identified by one or more instances of E44 Place Appellation. + It is sometimes argued that instances of E53 Place are best identified by global coordinates or absolute reference systems. However, relative references are often more relevant in the context of cultural documentation and tend to be more precise. In particular, we are often interested in position in relation to large, mobile objects, such as ships. For example, the Place at which Nelson died is known with reference to a large mobile object – H.M.S Victory. A resolution of this Place in terms of absolute coordinates would require knowledge of the movements of the vessel and the precise time of death, either of which may be revised, and the result would lack historical and cultural relevance. +Any object can serve as a frame of reference for E53 Place determination. The model foresees the notion of a "section" of an E19 Physical Object as a valid E53 Place determination. + + + +Dimension + Dimensions + Μέγεθος + Величина + Maß + Dimensão + 规模数量 + This class comprises quantifiable properties that can be measured by some calibrated means and can be approximated by values, i.e. points or regions in a mathematical or conceptual space, such as natural or real numbers, RGB values etc. +An instance of E54 Dimension represents the true quantity, independent from its numerical approximation, e.g. in inches or in cm. The properties of the class E54 Dimension allow for expressing the numerical approximation of the values of an instance of E54 Dimension. If the true values belong to a non-discrete space, such as spatial distances, it is recommended to record them as approximations by intervals or regions of indeterminacy enclosing the assumed true values. For instance, a length of 5 cm may be recorded as 4.5-5.5 cm, according to the precision of the respective observation. Note, that interoperability of values described in different units depends critically on the representation as value regions. +Numerical approximations in archaic instances of E58 Measurement Unit used in historical records should be preserved. Equivalents corresponding to current knowledge should be recorded as additional instances of E54 Dimension as appropriate. + + + + +Τύπος + Type + Type + Тип + Typus + Tipo + 类型 + This class comprises concepts denoted by terms from thesauri and controlled vocabularies used to characterize and classify instances of CRM classes. Instances of E55 Type represent concepts in contrast to instances of E41 Appellation which are used to name instances of CRM classes. +E55 Type is the CRM’s interface to domain specific ontologies and thesauri. These can be represented in the CRM as subclasses of E55 Type, forming hierarchies of terms, i.e. instances of E55 Type linked via P127 has broader term (has narrower term). Such hierarchies may be extended with additional properties. + + + + +Langue + Язык + Language + Γλώσσα + Sprache + Língua + 语言 + This class is a specialization of E55 Type and comprises the natural languages in the sense of concepts. +This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E56 Language, e.g.: “instances of Mandarin Chinese”. +It is recommended that internationally or nationally agreed codes and terminology are used to denote instances of E56 Language, such as those defined in ISO 639:1988. + + + + + Matériau + Υλικό + Материал + Material + Material + Material + 材料 + This class is a specialization of E55 Type and comprises the concepts of materials. +Instances of E57 Material may denote properties of matter before its use, during its use, and as incorporated in an object, such as ultramarine powder, tempera paste, reinforced concrete. Discrete pieces of raw-materials kept in museums, such as bricks, sheets of fabric, pieces of metal, should be modelled individually in the same way as other objects. Discrete used or processed pieces, such as the stones from Nefer Titi's temple, should be modelled as parts (cf. P46 is composed of). +This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E57 Material, e.g.: “instances of gold”. +It is recommended that internationally or nationally agreed codes and terminology are used. + + + + Unité de mesure + Measurement Unit + Μονάδα Μέτρησης + Maßeinheit + Единица Измерения + Unidade de Medida + 测量单位 + This class is a specialization of E55 Type and comprises the types of measurement units: feet, inches, centimetres, litres, lumens, etc. +This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E58 Measurement Unit, e.g.: “instances of cm”. +Syst?me International (SI) units or internationally recognized non-SI terms should be used whenever possible. (ISO 1000:1992). Archaic Measurement Units used in historical records should be preserved. + + + + + Début d'existence + Beginning of Existence + Daseinsbeginn + Αρχή Ύπαρξης + Начало Существования + Início da Existência + 存在开始 + This class comprises events that bring into existence any E77 Persistent Item. +It may be used for temporal reasoning about things (intellectual products, physical items, groups of people, living beings) beginning to exist; it serves as a hook for determination of a terminus post quem and ante quem. + + + + Daseinsende + Конец Существования + Τέλος Ύπαρξης + Fin d'existence + End of Existence + Fim da Existência + 存在结束 + This class comprises events that end the existence of any E77 Persistent Item. +It may be used for temporal reasoning about things (physical items, groups of people, living beings) ceasing to exist; it serves as a hook for determination of a terminus postquem and antequem. In cases where substance from a Persistent Item continues to exist in a new form, the process would be documented by E81 Transformation. + + + + + Δημιουργία + Событие Творения + Création + Begriffliche Schöpfung + Creation + Criação + 创造 + This class comprises events that result in the creation of conceptual items or immaterial products, such as legends, poems, texts, music, images, movies, laws, types etc. + + + + + + Formation + Событие Формирования + Formation + Gruppenbildung + Συγκρότηση Ομάδας + Formação + 组成 + This class comprises events that result in the formation of a formal or informal E74 Group of people, such as a club, society, association, corporation or nation. + +E66 Formation does not include the arbitrary aggregation of people who do not act as a collective. +The formation of an instance of E74 Group does not require that the group is populated with members at the time of formation. In order to express the joining of members at the time of formation, the respective activity should be simultaneously an instance of both E66 Formation and E85 Joining. + + + + + + Birth + Рождение + Naissance + Geburt + Γέννηση + Nascimento + 诞生 + This class comprises the births of human beings. E67 Birth is a biological event focussing on the context of people coming into life. (E63 Beginning of Existence comprises the coming into life of any living beings). +Twins, triplets etc. are brought into life by the same E67 Birth event. The introduction of the E67 Birth event as a documentation element allows the description of a range of family relationships in a simple model. Suitable extensions may describe more details and the complexity of motherhood with the intervention of modern medicine. In this model, the biological father is not seen as a necessary participant in the E67 Birth event. + + + + + Роспуск + Gruppenauflösung + Διάλυση Ομάδας + Dissolution + Dissolution + Dissolução + 解散 + This class comprises the events that result in the formal or informal termination of an E74 Group of people. +If the dissolution was deliberate, the Dissolution event should also be instantiated as an E7 Activity. + + + + + Смерть + Death + Tod + Mort + Θάνατος + Morte + 死亡 + This class comprises the deaths of human beings. +If a person is killed, their death should be instantiated as E69 Death and as E7 Activity. The death or perishing of other living beings should be documented using E64 End of Existence. + + + + + + + Chose + Thing + Πράγμα + Sache + Coisa + 万物 + This general class comprises discrete, identifiable, instances of E77 Persistent Item that are documented as single units, that either consist of matter or depend on being carried by matter and are characterized by relative stability. +They may be intellectual products or physical things. They may for instance have a solid physical form, an electronic encoding, or they may be a logical concept or structure. + + + + + +Künstliches + Chose fabriquée + Рукотворная Вещь + Man-Made Thing + Ανθρώπινο Δημιούργημα + Coisa Fabricada + 人造物 + This class comprises discrete, identifiable man-made items that are documented as single units. +These items are either intellectual products or man-made physical things, and are characterized by relative stability. They may for instance have a solid physical form, an electronic encoding, or they may be logical concepts or structures. + + + + +Objet juridique + Объект Права + Νομικό Αντικείμενο + Legal Object + Rechtsobjekt + Objeto Jurídico + 法律物件 + This class comprises those material or immaterial items to which instances of E30 Right, such as the right of ownership or use, can be applied. +This is true for all E18 Physical Thing. In the case of instances of E28 Conceptual Object, however, the identity of the E28 Conceptual Object or the method of its use may be too ambiguous to reliably establish instances of E30 Right, as in the case of taxa and inspirations. Ownership of corporations is currently regarded as out of scope of the CRM. + + + + + Informationsgegenstand + Information Object + Πληροφοριακό Αντικείμενο + Objet d'information + Информационный Объект + Objeto de Informação + 信息物件 + This class comprises identifiable immaterial items, such as a poems, jokes, data sets, images, texts, multimedia objects, procedural prescriptions, computer program code, algorithm or mathematical formulae, that have an objectively recognizable structure and are documented as single units. The encoding structure known as a "named graph" also falls under this class, so that each "named graph" is an instance of an E73 Information Object. +An E73 Information Object does not depend on a specific physical carrier, which can include human memory, and it can exist on one or more carriers simultaneously. +Instances of E73 Information Object of a linguistic nature should be declared as instances of the E33 Linguistic Object subclass. Instances of E73 Information Object of a documentary nature should be declared as instances of the E31 Document subclass. Conceptual items such as types and classes are not instances of E73 Information Object, nor are ideas without a reproducible expression. + + + + + +Группа + Group + Ομάδα + Menschliche Gruppe + Groupe + Grupo + 群组 + This class comprises any gatherings or organizations of E39 Actors that act collectively or in a similar way due to any form of unifying relationship. In the wider sense this class also comprises official positions which used to be regarded in certain contexts as one actor, independent of the current holder of the office, such as the president of a country. In such cases, it may happen that the Group never had more than one member. A joint pseudonym (i.e., a name that seems indicative of an individual but that is actually used as a persona by two or more people) is a particular case of E74 Group. +A gathering of people becomes an E74 Group when it exhibits organizational characteristics usually typified by a set of ideas or beliefs held in common, or actions performed together. These might be communication, creating some common artifact, a common purpose such as study, worship, business, sports, etc. Nationality can be modeled as membership in an E74 Group (cf. HumanML markup). Married couples and other concepts of family are regarded as particular examples of E74 Group. + + + + + Appellation d'objet conceptuel + Обозначение Концептуального Объекта + Begriff- oder Konzeptbenennung + Conceptual Object Appellation + Ονομασία Νοητικού Αντικειμένου + Designação de Objeto Conceitual + 概念物件称号 + This class comprises appellations that are by their form or syntax specific to identifying instances of E28 Conceptual Object, such as intellectual products, standardized patterns etc. + + + + Persistent Item + Постоянная Сущность + Seiendes + Ον + Entité persistante + Entidade Persistente + 持续性项目 + This class comprises items that have a persistent identity, sometimes known as “endurants” in philosophy. +They can be repeatedly recognized within the duration of their existence by identity criteria rather than by continuity or observation. Persistent Items can be either physical entities, such as people, animals or things, or conceptual entities such as ideas, concepts, products of the imagination or common names. +The criteria that determine the identity of an item are often difficult to establish -; the decision depends largely on the judgement of the observer. For example, a building is regarded as no longer existing if it is dismantled and the materials reused in a different configuration. On the other hand, human beings go through radical and profound changes during their life-span, affecting both material composition and form, yet preserve their identity by other criteria. Similarly, inanimate objects may be subject to exchange of parts and matter. The class E77 Persistent Item does not take any position about the nature of the applicable identity criteria and if actual knowledge about identity of an instance of this class exists. There may be cases, where the identity of an E77 Persistent Item is not decidable by a certain state of knowledge. +The main classes of objects that fall outside the scope the E77 Persistent Item class are temporal objects such as periods, events and acts, and descriptive properties. + + + + Коллекция + Συλλογή + Collection + Collection + Sammlung + Coleção + 收藏 + This class comprises aggregations of instances of E18 Physical Thing that are assembled and maintained ("curated" and "preserved", in museological terminology) by one or more instances of E39 Actor over time for a specific purpose and audience, and according to a particular collection development plan. +Items may be added or removed from an E78 Collection in pursuit of this plan. This class should not be confused with the E39 Actor maintaining the E78 Collection often referred to with the name of the E78 Collection (e.g. “The Wallace Collection decided…”). +Collective objects in the general sense, like a tomb full of gifts, a folder with stamps or a set of chessmen, should be documented as instances of E19 Physical Object, and not as instances of E78 Collection. This is because they form wholes either because they are physically bound together or because they are kept together for their functionality. + + + + + Addition d'élément + Part Addition + Teilhinzufügung + Добавление Части + Προσθήκη Μερών + Adição de Parte + 部件增加 + This class comprises activities that result in an instance of E24 Physical Man-Made Thing being increased, enlarged or augmented by the addition of a part. +Typical scenarios include the attachment of an accessory, the integration of a component, the addition of an element to an aggregate object, or the accessioning of an object into a curated E78 Collection. Objects to which parts are added are, by definition, man-made, since the addition of a part implies a human activity. Following the addition of parts, the resulting man-made assemblages are treated objectively as single identifiable wholes, made up of constituent or component parts bound together either physically (for example the engine becoming a part of the car), or by sharing a common purpose (such as the 32 chess pieces that make up a chess set). This class of activities forms a basis for reasoning about the history and continuity of identity of objects that are integrated into other objects over time, such as precious gemstones being repeatedly incorporated into different items of jewellery, or cultural artifacts being added to different museum instances of E78 Collection over their lifespan. + + + + + Teilentfernung + Soustraction d'élément + Part Removal + Удаление Части + Αφαίρεση Μερών + Remoção de Parte + 部件删除 + This class comprises the activities that result in an instance of E18 Physical Thing being decreased by the removal of a part. +Typical scenarios include the detachment of an accessory, the removal of a component or part of a composite object, or the deaccessioning of an object from a curated E78 Collection. If the E80 Part Removal results in the total decomposition of the original object into pieces, such that the whole ceases to exist, the activity should instead be modelled as an E81 Transformation, i.e. a simultaneous destruction and production. In cases where the part removed has no discernible identity prior to its removal but does have an identity subsequent to its removal, the activity should be regarded as both E80 Part Removal and E12 Production. This class of activities forms a basis for reasoning about the history, and continuity of identity over time, of objects that are removed from other objects, such as precious gemstones being extracted from different items of jewelry, or cultural artifacts being deaccessioned from different museum collections over their lifespan. + + + + +Трансформация + Transformation + Transformation + Umwandlung + Μετατροπή + Transformação + 转变 + This class comprises the events that result in the simultaneous destruction of one or more than one E77 Persistent Item and the creation of one or more than one E77 Persistent Item that preserves recognizable substance from the first one(s) but has fundamentally different nature and identity. +Although the old and the new instances of E77 Persistent Item are treated as discrete entities having separate, unique identities, they are causally connected through the E81 Transformation; the destruction of the old E77 Persistent Item(s) directly causes the creation of the new one(s) using or preserving some relevant substance. Instances of E81 Transformation are therefore distinct from re-classifications (documented using E17 Type Assignment) or modifications (documented using E11 Modification) of objects that do not fundamentally change their nature or identity. Characteristic cases are reconstructions and repurposing of historical buildings or ruins, fires leaving buildings in ruins, taxidermy of specimen in natural history and the reorganization of a corporate body into a new one. + + + + + + Actor Appellation + Обозначение Агента + Ονομασία Δράστη + Appellation d'agent + Akteurbenennung + Designação de Agente + 角色称号 + This class comprises any sort of name, number, code or symbol characteristically used to identify an E39 Actor. +An E39 Actor will typically have more than one E82 Actor Appellation, and instances of E82 Actor Appellation in turn may have alternative representations. The distinction between corporate and personal names, which is particularly important in library applications, should be made by explicitly linking the E82 Actor Appellation to an instance of either E21 Person or E74 Group/E40 Legal Body. If this is not possible, the distinction can be made through the use of the P2 has type mechanism. + + + + +Typuserfindung + Создание Типа + Type Creation + Création de type + Δημιουργία Τύπου + Criação de Tipo + 类型创造 + This class comprises activities formally defining new types of items. +It is typically a rigorous scholarly or scientific process that ensures a type is exhaustively described and appropriately named. In some cases, particularly in archaeology and the life sciences, E83 Type Creation requires the identification of an exemplary specimen and the publication of the type definition in an appropriate scholarly forum. The activity of E83 Type Creation is central to research in the life sciences, where a type would be referred to as a “taxon,” the type description as a “protologue,” and the exemplary specimens as “orgininal element” or “holotype”. + + + + +Φορέας Πληροφορίας + Information Carrier + Носитель Информации + Support d'information + Informationsträger + Suporte de Informação + 信息载体 + This class comprises all instances of E22 Man-Made Object that are explicitly designed to act as persistent physical carriers for instances of E73 Information Object. +An E84 Information Carrier may or may not contain information, e.g., a diskette. Note that any E18 Physical Thing may carry information, such as an E34 Inscription. However, unless it was specifically designed for this purpose, it is not an Information Carrier. Therefore the property P128 carries (is carried by) applies to E18 Physical Thing in general. + + + + + Beitritt + Joining + 加入 + This class comprises the activities that result in an instance of E39 Actor becoming a member of an instance of E74 Group. This class does not imply initiative by either party. It may be the initiative of a third party. +Typical scenarios include becoming a member of a social organisation, becoming employee of a company, marriage, the adoption of a child by a family and the inauguration of somebody into an official position. + + + + + + Austritt + Leaving + 脱离 + This class comprises the activities that result in an instance of E39 Actor to be disassociated from an instance of E74 Group. This class does not imply initiative by either party. It may be the initiative of a third party. +Typical scenarios include the termination of membership in a social organisation, ending the employment at a company, divorce, and the end of tenure of somebody in an official position. + + + + Kuratorische Tätigkeit + Curation Activity + 典藏管理 + This class comprises the activities that result in the continuity of management and the preservation and evolution of instances of E78 Collection, following an implicit or explicit curation plan. +It specializes the notion of activity into the curation of a collection and allows the history of curation to be recorded. +Items are accumulated and organized following criteria like subject, chronological period, material type, style of art etc. and can be added or removed from an E78 Collection for a specific purpose and/or audience. The initial aggregation of items of a collection is regarded as an instance of E12 Production Event while the activity of evolving, preserving and promoting a collection is regarded as an instance of E87 Curation Activity. + + + + + + Aussagenobjekt + Propositional Object + 陈述性物件 + This class comprises immaterial items, including but not limited to stories, plots, procedural prescriptions, algorithms, laws of physics or images that are, or represent in some sense, sets of propositions about real or imaginary things and that are documented as single units or serve as topics of discourse. + +This class also comprises items that are “about” something in the sense of a subject. In the wider sense, this class includes expressions of psychological value such as non-figural art and musical themes. However, conceptual items such as types and classes are not instances of E89 Propositional Object. This should not be confused with the definition of a type, which is indeed an instance of E89 Propositional Object. + + + + + Symbolisches Objekt + Symbolic Object + 符号物件 + This class comprises identifiable symbols and any aggregation of symbols, such as characters, identifiers, traffic signs, emblems, texts, data sets, images, musical scores, multimedia objects, computer program code or mathematical formulae that have an objectively recognizable structure and that are documented as single units. + It includes sets of signs of any nature, which may serve to designate something, or to communicate some propositional content. + An instance of E90 Symbolic Object does not depend on a specific physical carrier, which can include human memory, and it can exist on one or more carriers simultaneously. An instance of E90 Symbolic Object may or may not have a specific meaning, for example an arbitrary character string. + In some cases, the content of an instance of E90 Symbolic Object may completely be represented by a serialized content model, such.. as the property P3 has note allows for describing this content model…P3.1 has type: E55 Type to specify the encoding.. + + + + + + + + Spacetime Volume + This class comprises 4 dimensional point sets (volumes) in physical spacetime regardless its true geometric form. They may derive their identity from being the extent of a material phenomenon or from being the interpretation of an expression defining an extent in spacetime. + Intersections of instances of E92 Spacetime Volume, Place and Timespan are also regarded as instances of E92 Spacetime Volume. An instance of E92 Spacetime Volume is either contiguous or composed of a finite number of contiguous subsets. + Its boundaries may be fuzzy due to the properties of the phenomena it derives from or due to the limited precision up to which defining expression can be identified with a real extent in spacetime. The duration of existence of an instance of a spacetime volume is trivially its projection on time. + + + + + + Presence + This class comprises instances of E92 Spacetime Volume that result from intersection of instances of E92 Spacetime Volume with an instance of E52 Time-Span. The identity of an instance of this class is determined by the identities of the constituing spacetime volume and the time-span. + +This class can be used to define temporal snapshots at a particular time-span, such as the extent of the Roman Empire at 33 B.C., or the extent occupied by a museum object at rest in an exhibit. In particular, it can be used to define the spatial projection of a spacetime volume during a particular time-span, such as the maximal spatial extent of a flood at some particular hour, or all areas covered by the Poland within the 20th century AD. + + + + + + αναγνωρίζεται ως + wird bezeichnet als + is identified by + идентифицируется посредством + est identifiée par + é identificado por + 有识别称号 + This property describes the naming or identification of any real world item by a name or any other identifier. +This property is intended for identifiers in general use, which form part of the world the model intends to describe, and not merely for internal database identifiers which are specific to a technical system, unless these latter also have a more general use outside the technical context. This property includes in particular identification by mathematical expressions such as coordinate systems used for the identification of instances of E53 Place. The property does not reveal anything about when, where and by whom this identifier was used. A more detailed representation can be made using the fully developed (i.e. indirect) path through E15 Identifier Assignment. + + + + + + + bezeichnet + идентифицирует + identifie + είναι αναγνωριστικό + identifies + identifica + 被用来识别 + + + + + + hat den Typus + has type + έχει τύπο + est de type + имеет тип + é do tipo + 有类型 + This property allows sub typing of CRM entities - a form of specialisation – through the use of a terminological hierarchy, or thesaurus. +The CRM is intended to focus on the high-level entities and relationships needed to describe data structures. Consequently, it does not specialise entities any further than is required for this immediate purpose. However, entities in the isA hierarchy of the CRM may by specialised into any number of sub entities, which can be defined in the E55 Type hierarchy. E51 Contact Point, for example, may be specialised into “e-mail address”, “telephone number”, “post office box”, “URL” etc. none of which figures explicitly in the CRM hierarchy. Sub typing obviously requires consistency between the meaning of the terms assigned and the more general intent of the CRM entity in question. + + + + + + +является типом для + est le type de + είναι ο τύπος του/της + ist Typus von + is type of + é o tipo de + 被用来分类 + + + + + + hat Anmerkung + имеет примечание + has note + a pour note + έχει επεξήγηση + tem nota + 有说明 + This property is a container for all informal descriptions about an object that have not been expressed in terms of CRM constructs. +In particular it captures the characterisation of the item itself, its internal structures, appearance etc. +Like property P2 has type (is type of), this property is a consequence of the restricted focus of the CRM. The aim is not to capture, in a structured form, everything that can be said about an item; indeed, the CRM formalism is not regarded as sufficient to express everything that can be said. Good practice requires use of distinct note fields for different aspects of a characterisation. The P3.1 has type property of P3 has note allows differentiation of specific notes, e.g. “construction”, “decoration” etc. +An item may have many notes, but a note is attached to a specific item. + + + + + + +a pour durée + has time-span + hat Zeitspanne + βρισκόταν σε εξέλιξη + имеет временной отрезок + tem período de tempo + 发生时段是 + This property describes the temporal confinement of an instance of an E2 Temporal Entity. +The related E52 Time-Span is understood as the real Time-Span during which the phenomena were active, which make up the temporal entity instance. It does not convey any other meaning than a positioning on the “time-line” of chronology. The Time-Span in turn is approximated by a set of dates (E61 Time Primitive). A temporal entity can have in reality only one Time-Span, but there may exist alternative opinions about it, which we would express by assigning multiple Time-Spans. Related temporal entities may share a Time-Span. Time-Spans may have completely unknown dates but other descriptions by which we can infer knowledge. + + + + + + + is time-span of + είναι χρονικό διάστημα του/της + est la durée de + является временным отрезком для + ist Zeitspanne von + é o período de tempo de + 开始并完成了 + + + + + + + consists of + consiste en + αποτελείται από + besteht aus + состоит из + consiste de + 包含 + This property describes the decomposition of an E3 Condition State into discrete, subsidiary states. +It is assumed that the sub-states into which the condition state is analysed form a logical whole - although the entire story may not be completely known – and that the sub-states are in fact constitutive of the general condition state. For example, a general condition state of “in ruins” may be decomposed into the individual stages of decay + + + + + + bildet Teil von + fait partie de + формирует часть + forms part of + αποτελεί μέρος του/της + faz parte de + 组成了 + + + + + + + a eu lieu dans + совершался на + έλαβε χώρα σε + fand statt in + took place at + ocorreu em + 发生地在 + This property describes the spatial location of an instance of E4 Period. + +The related E53 Place should be seen as an approximation of the geographical area within which the phenomena that characterise the period in question occurred. P7took place at (witnessed) does not convey any meaning other than spatial positioning (generally on the surface of the earth). For example, the period "Révolution française" can be said to have taken place in “France”, the “Victorian” period, may be said to have taken place in “Britain” and its colonies, as well as other parts of Europe and north America. +A period can take place at multiple locations. +It is a shortcut of the more fully developed path from E4 Period through P161 has spatial projection, E53 Place, P89 falls within (contains) to E53 Place. + + + + + + + a été témoin de + witnessed + bezeugte + был местом совершения + υπήρξε τόπος του + testemunhou + 发生过 + + + + + + + имел место на или в + έλαβε χώρα σε ή εντός + fand statt auf oder innerhalb von + took place on or within + a eu lieu sur ou dans + ocorreu em ou dentro + 发生所在物件是 + This property describes the location of an instance of E4 Period with respect to an E19 Physical Object. +P8 took place on or within (witnessed) is a shortcut of the more fully developed path from E4 Period through P7 took place at, E53 Place, P156 occupies (is occupied by) to E18 Physical Thing. + +It describes a period that can be located with respect to the space defined by an E19 Physical Object such as a ship or a building. The precise geographical location of the object during the period in question may be unknown or unimportant. +For example, the French and German armistice of 22 June 1940 was signed in the same railway carriage as the armistice of 11 November 1918. + + + + + + + являлся местом для + bezeugte + witnessed + a été témoin de + υπήρξε τόπος του + testemunhou + 发生过 + + + + + + + αποτελείται από + consists of + setzt sich zusammen aus + состоит из + consiste en + consiste de + 包含子时期 + This property associates an instance of E4 Period with another instance of E4 Period that is defined by a subset of the phenomena that define the former. Therefore the spacetime volume of the latter must fall within the spacetime volume of the former. + + + + + + + + αποτελεί μέρος του/της + формирует часть + bildet Teil von + fait partie de + forms part of + faz parte de + 附属於 + + + + + + + находится в пределах + εμπίπτει + s’insère dans le cours de + falls within + fällt in + está contido em + 发生时间涵盖於 + This property associates an instance of E92 Spacetime Volume with another instance of E92 Spacetime Volume that falls within the latter. In other words, all points in the former are also points in the latter. + + + + + + + περιλαμβάνει + содержит + contains + contient + enthält + contém + 时间上涵盖 + + + + + + + a eu pour participant + имел участника + hatte Teilnehmer + had participant + είχε συμμέτοχο + tem participante + 有参与者 + This property describes the active or passive participation of instances of E39 Actors in an E5 Event. +It connects the life-line of the related E39 Actor with the E53 Place and E50 Date of the event. The property implies that the Actor was involved in the event but does not imply any causal relationship. The subject of a portrait can be said to have participated in the creation of the portrait. + + + + + + + + συμμετείχε σε + nahm Teil an + участвовал в + participated in + a participé à + participa em + 参与了 + + + + + + + + occurred in the presence of + появился в присутствии + fand statt im Beisein von + συνέβη παρουσία του/της + est arrivé en présence de + ocorreu na presença de + 发生现场存在 + This property describes the active or passive presence of an E77 Persistent Item in an E5 Event without implying any specific role. +It connects the history of a thing with the E53 Place and E50 Date of an event. For example, an object may be the desk, now in a museum on which a treaty was signed. The presence of an immaterial thing implies the presence of at least one of its carriers. + + + + + + +was present at + ήταν παρών/παρούσα/παρόν σε + war anwesend bei + était présent à + присутствовал при + estava presente no + 当时在场於 + + + + + + + zerstörte + a détruit + уничтожил + κατέστρεψε + destroyed + destruiu + 毁灭了 + This property allows specific instances of E18 Physical Thing that have been destroyed to be related to a destruction event. +Destruction implies the end of an item’s life as a subject of cultural documentation – the physical matter of which the item was composed may in fact continue to exist. A destruction event may be contiguous with a Production that brings into existence a derived object composed partly of matter from the destroyed object. + + + + + + + + wurde zerstört durch + was destroyed by + καταστράφηκε από + a été détruite par + был уничтожен посредством + foi destruído por + 被毁灭於 + + + + + + + + wurde ausgeführt von + réalisée par + carried out by + πραγματοποιήθηκε από + выполнялся + realizada por + 有执行者 + This property describes the active participation of an E39 Actor in an E7 Activity. +It implies causal or legal responsibility. The P14.1 in the role of property of the property allows the nature of an Actor’s participation to be specified. + + + + + + + + выполнял + πραγματοποίησε + führte aus + performed + a exécuté + executou + 执行了 + + + + + + + + wurde beeinflußt durch + a été influencée par + επηρεάστηκε από + находился под влиянием + was influenced by + foi influenciado por + 有影响事物 + This is a high level property, which captures the relationship between an E7 Activity and anything that may have had some bearing upon it. +The property has more specific sub properties. + + + + + + + оказал влияние на + επηρέασε + a influencé + beeinflußte + influenced + influenciou + 影响了 + + + + + + + a utilisé l'objet spécifique + χρησιμοποίησε αντικείμενο + used specific object + benutzte das bestimmte Objekt + использовал особый объект + usou objeto específico + 使用特定物 + This property describes the use of material or immaterial things in a way essential to the performance or the outcome of an E7 Activity. +This property typically applies to tools, instruments, moulds, raw materials and items embedded in a product. It implies that the presence of the object in question was a necessary condition for the action. For example, the activity of writing this text required the use of a computer. An immaterial thing can be used if at least one of its carriers is present. For example, the software tools on a computer. +Another example is the use of a particular name by a particular group of people over some span to identify a thing, such as a settlement. In this case, the physical carriers of this name are at least the people understanding its use. + + + + + + + + + a été utilisé pour + wurde benutzt für + был использован для + was used for + χρησιμοποιήθηκε για + foi usado por + 被用於 + + + + + + + + + был обусловлен посредством + wurde angeregt durch + είχε ως αφορμή + was motivated by + a été motivée par + foi motivado por + + 有促动事物 + This property describes an item or items that are regarded as a reason for carrying out the E7 Activity. +For example, the discovery of a large hoard of treasure may call for a celebration, an order from head quarters can start a military manoeuvre. + + + + + + + + ήταν αφορμή + motivated + regte an + обусловил + a motivé + motivou + 促动了 + + + + + + + + был предполагаемым использованием для + était l'utilisation prévue de + war beabsichtigteter Gebrauch von + ήταν προορισμένη χρήση του + was intended use of + era prevista a utilização de + 特别使用了 + This property relates an E7 Activity with objects created specifically for use in the activity. +This is distinct from the intended use of an item in some general type of activity such as the book of common prayer which was intended for use in Church of England services (see P101 had as general use (was use of)). + + + + + + a été fabriquée pour + έγινε για + был создан для + wurde hergestellt für + was made for + foi feito para + 被制造来用於 + + + + + + + hatte den bestimmten Zweck + avait pour but spécifique + είχε συγκεκριμένο σκοπό + had specific purpose + имел конкретную цель + tinha propósito específico + 有特定目地 + This property identifies the relationship between a preparatory activity and the event it is intended to be preparation for. +This includes activities, orders and other organisational actions, taken in preparation for other activities or events. +P20 had specific purpose (was purpose of) implies that an activity succeeded in achieving its aim. If it does not succeed, such as the setting of a trap that did not catch anything, one may document the unrealized intention using P21 had general purpose (was purpose of):E55 Type and/or P33 used specific technique (was used by): E29 Design or Procedure. + + + + + + war Zweck von + был целью для + ήταν σκοπός του/της + était le but de + was purpose of + era o propósito de + 之準備活動是 + + + + + + + είχε γενικό σκοπό + hatte den allgemeinen Zweck + avait pour but général + имел общую цель + had general purpose + tinha propósito geral + 有通用目地 + This property describes an intentional relationship between an E7 Activity and some general goal or purpose. +This may involve activities intended as preparation for some type of activity or event. P21had general purpose (was purpose of) differs from P20 had specific purpose (was purpose of) in that no occurrence of an event is implied as the purpose. + + + + + + + был целью для + était le but de + ήταν σκοπός του/της + war Zweck von + was purpose of + era o propósito de + 可利用 + + + + + + + μετεβίβασε τον τίτλο σε + a fait passer le droit de propriété à + übertrug Besitztitel auf + transferred title to + передал право собственности + transferiu os direitos de propriedade para + 转交所有权给 + This property identifies the E39 Actor that acquires the legal ownership of an object as a result of an E8 Acquisition. +The property will typically describe an Actor purchasing or otherwise acquiring an object from another Actor. However, title may also be acquired, without any corresponding loss of title by another Actor, through legal fieldwork such as hunting, shooting or fishing. +In reality the title is either transferred to or from someone, or both. + + + + + + + + + απέκτησε τον τίτλο μέσω + acquired title through + erwarb Besitztitel durch + a acquis le droit de propriété du fait de + получил право собственности через + adquiriu os direitos de propriedade por meio da + 获取所有权於 + + + + + + + + + μετεβίβασε τον τίτλο από + a fait passer le droit de propriété de + передал право собственности от + übertrug Besitztitel von + transferred title from + transferiu os direitos de propriedade de + 原所有权者是 + + This property identifies the E39 Actor or Actors who relinquish legal ownership as the result of an E8 Acquisition. +The property will typically be used to describe a person donating or selling an object to a museum. In reality title is either transferred to or from someone, or both. + + + + + + + + + a perdu le droit de propriété du fait de + trat Besitztitel ab in + право собственности отдано через + surrendered title through + παρέδωσε τον τίτλο μέσω + perdeu os direitos de propriedade por meio da + 交出所有权於 + + + + + + + + übertrug Besitz über + передал право собственности на + μετεβίβασε τον τίτλο του/της + a fait passer le droit de propriété sur + transferred title of + transferiu os direitos de propriedade sobre o + 转移所有权的标的物是 + This property identifies the E18 Physical Thing or things involved in an E8 Acquisition. +In reality, an acquisition must refer to at least one transferred item. + + + + + + + + сменил владельца через + changed ownership through + ging über in Besitz durch + άλλαξε ιδιοκτησία μέσω + a changé de mains du fait de + mudou de proprietário por meio de + 转移了所有权於 + + + + + + + moved + μετεκίνησε + переместил + a déplacé + bewegte + locomoveu + 移动了 + This property identifies an instance of E19 Physical Object that was moved by a move event. A move must concern at least one object. + +The property implies the object's passive participation. For example, Monet's painting "Impression sunrise" was moved for the first Impressionist exhibition in 1874. + + + + + + + + перемещен посредством + moved by + μετακινήθηκε από + a été déplacé par + wurde bewegt durch + foi locomovido por + 被移动於 + + + + + + + + + μετακινήθηκε προς + moved to + a déplacé vers + перемещен в + bewegte bis zu + locomoveu para + 移入物件至 + + This property identifies a destination of a E9 Move. +A move will be linked to a destination, such as the move of an artefact from storage to display. A move may be linked to many terminal instances of E53 Place by multiple instances of this property. In this case the move describes a distribution of a set of objects. The area of the move includes the origin(s), route and destination(s). +Therefore the described destination is an instance of E53 Place which P89 falls within (contains) the instance of E53 Place the move P7 took place at. + + + + + + + + was destination of + war Zielort von + ήταν προορισμός του/της + был пунктом назначения для + a été la destination de + era destinação de + 被作为移入地於 + + + + + + + + μετακινήθηκε από + moved from + a retiré de + bewegte weg von + перемещен из + locomoveu de + 有移出地 + This property identifies a starting E53 Place of an E9 Move. + +A move will be linked to an origin, such as the move of an artefact from storage to display. A move may be linked to many starting instances of E53 Place by multiple instances of this property. In this case the move describes the picking up of a set of objects. The area of the move includes the origin(s), route and destination(s). +Therefore the described origin is an instance of E53 Place which P89 falls within (contains) the instance of E53 Place the move P7 took place at. + + + + + + + was origin of + war Ausgangsort von + был исходной точкой для + a été l'origine de + ήταν αφετηρία του/της + era origem de + 被作为移出地於 + + + + + + + + + changement de détenteur au détriment de + übergab Gewahrsam an + custody surrendered by + μετεβίβασε κατοχή από + опека отдана + custódia concedida por + 有原保管人 + + This property identifies the E39 Actor or Actors who surrender custody of an instance of E18 Physical Thing in an E10 Transfer of Custody activity. +The property will typically describe an Actor surrendering custody of an object when it is handed over to someone else’s care. On occasion, physical custody may be surrendered involuntarily – through accident, loss or theft. +In reality, custody is either transferred to someone or from someone, or both. + + + + + + + + surrendered custody through + опека отдана через + a cessé d’être détenteur à cause de + παρέδωσε κατοχή μέσω + wurde Gewahrsam übergeben durch + final da custódia por meio de + 交出保管作业於 + + + + + + + +μετεβίβασε κατοχή σε + опека получена + custody received by + changement de détenteur au profit de + übertrug Gewahrsam auf + custódia recebida por + 移转保管作业给 + + This property identifies the E39 Actor or Actors who receive custody of an instance of E18 Physical Thing in an E10 Transfer of Custody activity. +The property will typically describe Actors receiving custody of an object when it is handed over from another Actor’s care. On occasion, physical custody may be received involuntarily or illegally – through accident, unsolicited donation, or theft. +In reality, custody is either transferred to someone or from someone, or both. + + + + + + + + παρέλαβε κατοχή μέσω + received custody through + получил опеку через + est devenu détenteur grâce à + erhielt Gewahrsam durch + início da custódia por meio de + 取得保管作业於 + + + + + + + + + передало опеку на + transferred custody of + changement de détenteur concernant + übertrug Gewahrsam über + μετεβίβασε κατοχή του/της/των + transferida custódia de + 有保管标的物 + + This property identifies an item or items of E18 Physical Thing concerned in an E10 Transfer of Custody activity. +The property will typically describe the object that is handed over by an E39 Actor to another Actor’s custody. On occasion, physical custody may be transferred involuntarily or illegally – through accident, unsolicited donation, or theft. + + + + + + + custody transferred through + άλλαξε κατοχή μέσω + a changé de détenteur du fait de + wechselte Gewahrsam durch + опека передана через + custódia transferida por meio de + 被移转了保管作业於 + + + + + + + veränderte + a modifié + has modified + изменил + τροποποίησε + modificou + 修改了 + + This property identifies the E24 Physical Man-Made Thing modified in an E11 Modification. +If a modification is applied to a non-man-made object, it is regarded as an E22 Man-Made Object from that time onwards. + + + + + + + + + a été modifié par + wurde verändert durch + τροποποιήθηκε από + был изменен посредством + was modified by + foi modificada por + 被修改於 + + + + + + + + + χρησιμοποίησε γενική τεχνική + benutzte das allgemeine Verfahren + a employé comme technique générique + использовал общую технику + used general technique + usou técnica geral + 使用通用技术 + + This property identifies the technique or method that was employed in an activity. +These techniques should be drawn from an external E55 Type hierarchy of consistent terminology of general techniques or methods such as embroidery, oil-painting, carbon dating, etc. Specific documented techniques should be described as instances of E29 Design or Procedure. This property identifies the technique that was employed in an act of modification. + + + + + + + + + был техникой для + ήταν τεχνική του/της + war Verfahren von + was technique of + a été la technique mise en œuvre dans + foi técnica da + 被使用於 + + + + + + + + + χρησιμοποίησε συγκεκριμένη τεχνική + used specific technique + a employé comme technique spécifique + использовал особую технику + benutzte das bestimmte Verfahren + usou técnica específica + 使用特定技术 + + This property identifies a specific instance of E29 Design or Procedure in order to carry out an instance of E7 Activity or parts of it. +The property differs from P32 used general technique (was technique of) in that P33 refers to an instance of E29 Design or Procedure, which is a concrete information object in its own right rather than simply being a term or a method known by tradition. +Typical examples would include intervention plans for conservation or the construction plans of a building. + + + + + + + + + was used by + a été employée par + был использован посредством + wurde benutzt von + χρησιμοποιήθηκε για + foi usada por + 被特别使用於 + + + + + + + + + αφορούσε σε + имел дело с + betraf + concerned + a concerné + interessada + 评估了 + This property identifies the E18 Physical Thing that was assessed during an E14 Condition Assessment activity. +Conditions may be assessed either by direct observation or using recorded evidence. In the latter case the E18 Physical Thing does not need to be present or extant. + + + + + + + + + wurde beurteilt durch + εκτιμήθηκε από + expertisé par le biais de + was assessed by + был оценен посредством + foi avaliada por + 被评估於 + + + + + + + + + идентифицировал + hat identifiziert + a identifié + έχει διαπιστώσει + has identified + identificou + 评估认定了 + This property identifies the E3 Condition State that was observed in an E14 Condition Assessment activity. + + + + + + + + идентифицирован посредством + wurde identifiziert durch + est identifié par + έχει διαπιστωθεί από + was identified by + foi identificado por + 被评估认定於 + + + + + + + + + a attribué + απέδωσε + assigned + wies zu + назначил + atribuiu + 指定标识符为 + This property records the identifier that was assigned to an item in an Identifier Assignment activity. +The same identifier may be assigned on more than one occasion. +An Identifier might be created prior to an assignment. + + + + + + + + + wurde zugewiesen durch + αποδόθηκε ως ιδιότητα από + was assigned by + был присвоен посредством + a été attribuée par + foi atribuído por + 被指定为标识符於 + + + + + + + + + ακύρωσε + отменил назначение + deassigned + hob Zuweisung auf von + a désattribué + retirou a atribuição do + 取消标识符 + This property records the identifier that was deassigned from an instance of E1 CRM Entity. +Deassignment of an identifier may be necessary when an item is taken out of an inventory, a new numbering system is introduced or items are merged or split up. +The same identifier may be deassigned on more than one occasion. + + + + + + + + + был отменен посредством + a été désattribué par + wurde aufgehoben durch + ακυρώθηκε από + was deassigned by + foi retirada a atribuição por + 被取消标识符於 + + + + + + + + + a mesuré + vermaß + μέτρησε + measured + измерил + mediu + 测量了 + + This property associates an instance of E16 Measurement with the instance of E1 CRM Entity to which it applied. An instance of E1 CRM Entity may be measured more than once. Material and immaterial things and processes may be measured, e.g. the number of words in a text, or the duration of an event. + + + + + + + + + wurde vermessen durch + был измерен посредством + was measured by + μετρήθηκε από + a été mesuré par + foi medida por + 被测量於 + + + + + + + + + observed dimension + παρατήρησε + определил величину + beobachtete Dimension + a relevé comme dimension + verificou a dimensão + 观察认定的规模是 + This property records the dimension that was observed in an E16 Measurement Event. +E54 Dimension can be any quantifiable aspect of E70 Thing. Weight, image colour depth and monetary value are dimensions in this sense. One measurement activity may determine more than one dimension of one object. +Dimensions may be determined either by direct observation or using recorded evidence. In the latter case the measured Thing does not need to be present or extant. +Even though knowledge of the value of a dimension requires measurement, the dimension may be an object of discourse prior to, or even without, any measurement being made. + + + + + + + + + наблюдался в + παρατηρήθηκε από + was observed in + wurde beobachtet in + a été relevée au cours de + foi verificada durante + 被观察认定於 + + + + + + + + + классифицировал + classified + a classifié + χαρακτήρισε + klassifizierte + classificou + 分类了 + This property records the item to which a type was assigned in an E17 Type Assignment activity. +Any instance of a CRM entity may be assigned a type through type assignment. Type assignment events allow a more detailed path from E1 CRM Entity through P41 classified (was classified), E17 Type Assignment, P42 assigned (was assigned by) to E55 Type for assigning types to objects compared to the shortcut offered by P2 has type (is type of). + + + + + + + + + a été classifiée par le biais de + was classified by + был классифицирован посредством + χαρακτηρίσθηκε από + wurde klassifiziert durch + foi classificada por + 被分类於 + + + + + + + + + απέδωσε ως ιδιότητα + assigned + a attribué + назначил + wies zu + atribuiu + 指定类型为 + + This property records the type that was assigned to an entity by an E17 Type Assignment activity. +Type assignment events allow a more detailed path from E1 CRM Entity through P41 classified (was classified by), E17 Type Assignment, P42 assigned (was assigned by) to E55 Type for assigning types to objects compared to the shortcut offered by P2 has type (is type of). +For example, a fragment of an antique vessel could be assigned the type “attic red figured belly handled amphora” by expert A. The same fragment could be assigned the type “shoulder handled amphora” by expert B. +A Type may be intellectually constructed independent from assigning an instance of it. + + + + + + + + + был присвоен посредством + αποδόθηκε από + was assigned by + wurde zugewiesen durch + a été attribué par + foi atribuído por + 被指定类型於 + + + + + + + + + hat Dimension + a pour dimension + имеет величину + has dimension + έχει μέγεθος + tem dimensão + 有规模数量 + This property records a E54 Dimension of some E70 Thing. +It is a shortcut of the more fully developed path from E70 Thing through P39 measured (was measured by), E16 Measurement P40 observed dimension (was observed in) to E54 Dimension. It offers no information about how and when an E54 Dimension was established, nor by whom. +An instance of E54 Dimension is specific to an instance of E70 Thing. + + + + + + + + ist Dimension von + is dimension of + является величиной для + est dimension de + είναι μέγεθος του + é dimensão de + 估量的标的物是 + + + + + + + + имеет условие + hat Zustand + a pour état matériel + has condition + έχει κατάσταση + tem estado material + 有状态 + + This property records an E3 Condition State for some E18 Physical Thing. +It is a shortcut of the more fully developed path from E18 Physical Thing through P34 concerned (was assessed by), E14 Condition Assessment P35 has identified (was identified by) to E3 Condition State. It offers no information about how and when the E3 Condition State was established, nor by whom. +An instance of Condition State is specific to an instance of Physical Thing. + + + + + + + + ist Zustand von + état matériel de + είναι κατάσταση του + является условием для + is condition of + estado material de + 描述的标的物是 + + + + + + + + consiste en + αποτελείται από + besteht aus + consists of + составлен из + consiste de + 有构成材料 + + This property identifies the instances of E57 Materials of which an instance of E18 Physical Thing is composed. +All physical things consist of physical materials. P45 consists of (is incorporated in) allows the different Materials to be recorded. P45 consists of (is incorporated in) refers here to observed Material as opposed to the consumed raw material. +A Material, such as a theoretical alloy, may not have any physical instances + + + + + + + ist enthalten in + είναι ενσωματωμένος/η/ο σε + is incorporated in + входит в состав + est présent dans + está presente em + 被用来构成 + + + + + + + + is composed of + est composée de + αποτελείται από + ist zusammengesetzt aus + составлен из + é composto de + 有组件 + + This property allows instances of E18 Physical Thing to be analysed into component elements. + +Component elements, since they are themselves instances of E18 Physical Thing, may be further analysed into sub-components, thereby creating a hierarchy of part decomposition. An instance of E18 Physical Thing may be shared between multiple wholes, for example two buildings may share a common wall. This property does not specify when and for how long a component element resided in the respective whole. If a component is not part of a whole from the beginning of existence or until the end of existence of the whole, the classes E79 Part Addition and E90 Part Removal can be used to document when a component became part of a particular whole and/or when it stopped being a part of it. For the time-span of being part of the respective whole, the component is completely contained in the place the whole occupies. + +This property is intended to describe specific components that are individually documented, rather than general aspects. Overall descriptions of the structure of an instance of E18 Physical Thing are captured by the P3 has note property. + +The instances of E57 Material of which an item of E18 Physical Thing is composed should be documented using P45 consists of (is incorporated in). + + + + + + + + формирует часть + fait partie de + αποτελεί μέρος του/της + bildet Teil von + forms part of + faz parte de + 被用来组成 + + + + + + + + has preferred identifier + a pour identificateur retenu + hat bevorzugtes Kennzeichen + имеет предпочтительный идентификатор + έχει προτιμώμενο αναγνωριστικό + tem identificador preferido + 有首选标识符 + + This property records the preferred E42 Identifier that was used to identify an instance of E1 CRM Entity at the time this property was recorded. +More than one preferred identifier may have been assigned to an item over time. +Use of this property requires an external mechanism for assigning temporal validity to the respective CRM instance. +P48 has preferred identifier (is preferred identifier of), is a shortcut for the path from E1 CRM Entity through P140 assigned attribute to (was attributed by), E15 Identifier Assignment, P37 assigned (was assigned by) to E42 Identifier. The fact that an identifier is a preferred one for an organisation can be better expressed in a context independent form by assigning a suitable E55 Type to the respective instance of E15 Identifier Assignment using the P2 has type property. + + + + + + + + + is preferred identifier of + является предпочтительным идентификатором для + ist bevorzugtes Kennzeichen für + είναι προτιμώμενο αναγνωριστικό + est l’identificateur retenu de + é o identificador preferido de + 首选标识符的标的物是 + + + + + + + + + имеет бывшего или текущего смотрителя + είναι ή ήταν στην κατοχή του + est ou a été détenu par + hat früheren oder derzeitigen Betreuer + has former or current keeper + é ou foi guardada por + 有前任或现任保管者 + + This property identifies the E39 Actor or Actors who have or have had custody of an instance of E18 Physical Thing at some time. +The distinction with P50 has current keeper (is current keeper of) is that P49 has former or current keeper (is former or current keeper of) leaves open the question as to whether the specified keepers are current. +P49 has former or current keeper (is former or current keeper of) is a shortcut for the more detailed path from E18 Physical Thing through P30 transferred custody of (custody transferred through), E10 Transfer of Custody, P28 custody surrendered by (surrendered custody through) or P29 custody received by (received custody through) to E39 Actor. + + + + + + + + is former or current keeper of + κατέχει ή κατείχε + est ou a été détenteur de + ist früherer oder derzeitiger Betreuer von + является бывшим или текущим смотрителем для + é ou foi guardador de + 目前或曾经保管 + + + + + + + + hat derzeitigen Betreuer + has current keeper + είναι στην κατοχή του + est actuellement détenu par + имеет текущего смотрителя + é guardada por + 有现任保管者 + + This property identifies the E39 Actor or Actors who had custody of an instance of E18 Physical Thing at the time of validity of the record or database containing the statement that uses this property. + P50 has current keeper (is current keeper of) is a shortcut for the more detailed path from E18 Physical Thing through P30 transferred custody of (custody transferred through), E10 Transfer of Custody, P29 custody received by (received custody through) to E39 Actor. + + + + + + + + + является текущим смотрителем для + is current keeper of + ist derzeitiger Betreuer von + est actuel détenteur de + κατέχει + é guardador de + 目前保管 + + + + + + + + + hat früheren oder derzeitigen Besitzer + имеет бывшего или текущего владельца + έχει ή είχε ιδιοκτήτη + est ou a été possédée par + has former or current owner + é ou foi propriedade de + 有前任或现任物主 + + This property identifies the E39 Actor that is or has been the legal owner (i.e. title holder) of an instance of E18 Physical Thing at some time. +The distinction with P52 has current owner (is current owner of) is that P51 has former or current owner (is former or current owner of) does not indicate whether the specified owners are current. P51 has former or current owner (is former or current owner of) is a shortcut for the more detailed path from E18 Physical Thing through P24 transferred title of (changed ownership through), E8 Acquisition, P23 transferred title from (surrendered title through), or P22 transferred title to (acquired title through) to E39 Actor. + + + + + + + + является бывшим или текущим владельцем для + είναι ή ήταν ιδιοκτήτης του/της + est ou a été propriétaire de + is former or current owner of + ist früherer oder derzeitiger Besitzer von + é ou foi proprietário de + 目前或曾经拥有 + + + + + + + + has current owner + hat derzeitigen Besitzer + имеет текущего владельца + est actuellement possédée par + έχει ιδιοκτήτη + é propriedade de + 有现任物主 + + This property identifies the E21 Person, E74 Group or E40 Legal Body that was the owner of an instance of E18 Physical Thing at the time of validity of the record or database containing the statement that uses this property. +P52 has current owner (is current owner of) is a shortcut for the more detailed path from E18 Physical Thing through P24 transferred title of (changed ownership through), E8 Acquisition, P22 transferred title to (acquired title through) to E39 Actor, if and only if this acquisition event is the most recent. + + + + + + + + + + ist derzeitiger Besitzer von + est le propriétaire actuel de + is current owner of + является текущим владельцем для + είναι ιδιοκτήτης του + é proprietário de + 目前拥有 + + + + + + + + + + a ou a eu pour localisation + βρίσκεται ή βρισκόταν σε + имеет текущее или бывшее местоположение + has former or current location + hat früheren oder derzeitigen Standort + é ou foi localizada em + 目前或曾经被置放於 + This property allows an instance of E53 Place to be associated as the former or current location of an instance of E18 Physical Thing. +In the case of E19 Physical Objects, the property does not allow any indication of the Time-Span during which the Physical Object was located at this Place, nor if this is the current location. +In the case of immobile objects, the Place would normally correspond to the Place of creation. +P53 has former or current location (is former or current location of) is a shortcut. A more detailed representation can make use of the fully developed (i.e. indirect) path from E19 Physical Object through P25 moved (moved by), E9 Move, P26 moved to (was destination of) or P27 moved from (was origin of) to E53 Place. + + + + + + + + является текущим или бывшим местоположением для + is former or current location of + είναι ή ήταν θέση του + ist früherer oder derzeitiger Standort von + est ou a été localisation de + é ou foi localização de + 目前或曾经被置放了 + + + + + + + + a actuellement pour localisation à demeure + hat derzeitigen permanenten Standort + has current permanent location + έχει μόνιμη θέση + имеет текущее постоянное местоположение + é localizado permanentemente em + 目前的永久位置位於 + + This property records the foreseen permanent location of an instance of E19 Physical Object at the time of validity of the record or database containing the statement that uses this property. +P54 has current permanent location (is current permanent location of) is similar to P55 has current location (currently holds). However, it indicates the E53 Place currently reserved for an object, such as the permanent storage location or a permanent exhibit location. The object may be temporarily removed from the permanent location, for example when used in temporary exhibitions or loaned to another institution. The object may never actually be located at its permanent location. + + + + + + + + είναι μόνιμη θέση του/της + ist derzeitiger permanenter Standort von + est actuellement localisation à demeure de + is current permanent location of + является текущим постоянным местоположением для + é localização permanente de + 目前被用来永久置放 + + + + + + + + βρίσκεται σε + has current location + a pour localisation actuelle + в данный момент находится в + hat derzeitigen Standort + é localizado em + 目前被置放於 + + This property records the location of an E19 Physical Object at the time of validity of the record or database containing the statement that uses this property. + This property is a specialisation of P53 has former or current location (is former or current location of). It indicates that the E53 Place associated with the E19 Physical Object is the current location of the object. The property does not allow any indication of how long the Object has been at the current location. +P55 has current location (currently holds) is a shortcut. A more detailed representation can make use of the fully developed (i.e. indirect) path from E19 Physical Object through P25 moved (moved by), E9 Move P26 moved to (was destination of) to E53 Place if and only if this Move is the most recent. + + + + + + + + + hält derzeitig + είναι θέση του + в данный момент содержит + est localisation actuelle de + currently holds + é localização atual de + 目前置放了 + + + + + + + + + несет признак + trägt Merkmal + présente pour caractéristique + φέρει μόρφωμα + bears feature + possui característica + 有外貌表征 + This property links an instance of E19 Physical Object to an instance of E26 Physical Feature that it bears. +An E26 Physical Feature can only exist on one object. One object may bear more than one E26 Physical Feature. An E27 Site should be considered as an E26 Physical Feature on the surface of the Earth. +An instance B of E26 Physical Feature being a detail of the structure of another instance A of E26 Physical Feature can be linked to B by use of the property P46 is composed of (forms part of). This implies that the subfeature B is P56i found on the same E19 Physical Object as A. +P56 bears feature (is found on) is a shortcut. A more detailed representation can make use of the fully developed (i.e. indirect) path from E19 Physical Object through P59 has section (is located on or +Definition of the CIDOC Conceptual Reference Model 149 within), E53 Place, P53 has former or current location (is former or current location of) to E26 Physical Feature. + + + + + + + + + βρίσκεται σε + se trouve sur + wird gefunden auf + is found on + найден на + é encontrada em + 被见於 + + + + + + + + + has number of parts + имеет число частей + έχει αριθμό μερών + a pour nombre de parties + hat Anzahl Teile + tem número de partes + 有组件数目 + + This property documents the E60 Number of parts of which an instance of E19 Physical Object is composed. +This may be used as a method of checking inventory counts with regard to aggregate or collective objects. What constitutes a part or component depends on the context and requirements of the documentation. Normally, the parts documented in this way would not be considered as worthy of individual attention. +For a more complete description, objects may be decomposed into their components and constituents using P46 is composed of (forms parts of) and P45 consists of (is incorporated in). This allows each element to be described individually. + + + + + + + + has section definition + hat Abschittsdefinition + имеет определение района + έχει ορισμό τμήματος + a pour désignation de section + tem designação de seção + 有区域定义 + + This property links an area (section) named by a E46 Section Definition to the instance of E18 Physical Thing upon which it is found. +The CRM handles sections as locations (instances of E53 Place) within or on E18 Physical Thing that are identified by E46 Section Definitions. Sections need not be discrete and separable components or parts of an object. +This is part of a more developed path from E18 Physical Thing through P58, E46 Section Definition, P87 is identified by (identifies) that allows a more precise definition of a location found on an object than the shortcut P59 has section (is located on or within). +A particular instance of a Section Definition only applies to one instance of Physical Thing. + + + + + + + определяет район + defines section + definiert Abschitt auf oder von + définit une section de + ορίζει τμήμα σε + define uma seção de + 界定了区域於 + + + + + + + + has section + έχει τομέα + hat Bereich + имеет район + a pour section + tem seção + 有区域 + This property links an area to the instance of E18 Physical Thing upon which it is found. +It is typically used when a named E46 Section Definition is not appropriate. +E18 Physical Thing may be subdivided into arbitrary regions. +P59 has section (is located on or within) is a shortcut. If the E53 Place is identified by a Section Definition, a more detailed representation can make use of the fully developed (i.e. indirect) path from E18 Physical Thing through P58 has section definition (defines section), E46 Section Definition, P87 is identified by (identifies) to E53 Place. A Place can only be located on or within one Physical Object. + + + + + + + + находится на или внутри + befindet sich auf oder in + βρίσκεται σε ή εντός + se situe sur ou dans + is located on or within + está localizada sobre ou dentro de + 位於 + + + + + + + + bildet ab + описывает + depicts + απεικονίζει + figure + retrata + 描绘 + This property identifies something that is depicted by an instance of E24 Physical Man-Made Thing. Depicting is meant in the sense that the surface of the E24 Physical Man-Made Thing shows, through its passive optical qualities or form, a representation of the entity depicted. It does not pertain to inscriptions or any other information encoding. + +This property is a shortcut of the more fully developed path from E24 Physical Man-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1 CRM Entity. P62.1 mode of depiction allows the nature of the depiction to be refined. + + + + + + + + απεικονίζεται σε + wird abgebildet durch + is depicted by + описан посредством + est figurée sur + é retratada por + 被描绘於 + + + + + + + + présente l'item visuel + shows visual item + zeigt Bildliches + показывает визуальный предмет + εμφανίζει οπτικό στοιχείο + apresenta item visual + 显示视觉项目 + + This property documents an E36 Visual Item shown by an instance of E24 Physical Man-Made Thing. +This property is similar to P62 depicts (is depicted by) in that it associates an item of E24 Physical Man-Made Thing with a visual representation. However, P65 shows visual item (is shown by) differs from the P62 depicts (is depicted by) property in that it makes no claims about what the E36 Visual Item is deemed to represent. E36 Visual Item identifies a recognisable image or visual symbol, regardless of what this image may or may not represent. +For example, all recent British coins bear a portrait of Queen Elizabeth II, a fact that is correctly documented using P62 depicts (is depicted by). Different portraits have been used at different periods, however. P65 shows visual item (is shown by) can be used to refer to a particular portrait. +P65 shows visual item (is shown by) may also be used for Visual Items such as signs, marks and symbols, for example the 'Maltese Cross' or the 'copyright symbol’ that have no particular representational content. +This property is part of the fully developed path from E24 Physical Man-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1 CRM Entity which is shortcut by, P62 depicts (is depicted by). + + + + + + + + + wird gezeigt durch + est présenté par + is shown by + εμφανίζεται σε + показан посредством + é apresentado por + 被显示於 + + + + + + + + + αναφέρεται σε + refers to + ссылается на + fait référence à + verweist auf + referencia + 论及 + + This property documents that an E89 Propositional Object makes a statement about an instance of E1 CRM Entity. P67 refers to (is referred to by) has the P67.1 has type link to an instance of E55 Type. This is intended to allow a more detailed description of the type of reference. This differs from P129 is about (is subject of), which describes the primary subject or subjects of the E89 Propositional Object. + + + + + + + + est référencé par + αναφέρεται από + wird angeführt von + is referred to by + имеет ссылку на себя от + é referenciado por + 被论及於 + + + + + + + foresees use of + sieht den Gebrauch vor von + обычно применяет + utilise habituellement + συνήθως χρησιμοποιεί + normalmente emprega + 指定使用材料 + + This property identifies an E57 Material foreseeen to be used by an E29 Design or Procedure. +E29 Designs and procedures commonly foresee the use of particular E57 Materials. The fabrication of adobe bricks, for example, requires straw, clay and water. This property enables this to be documented. +This property is not intended for the documentation of E57 Materials that were used on a particular occasion when an instance of E29 Design or Procedure was executed. + + + + + + + + + συνήθως χρησιμοποιείται από + vorgesehen für Gebrauch durch defined + est habituellement utilisé par + обычно используется посредством + use foreseen by + é empregado por + 被指定使用於 + + + + + + + + + est associée à + σχετίζεται με + ассоциирован с + ist verbunden mit + is associated with + é associado com + + 相关於 + This property generalises relationships like whole-part, sequence, prerequisite or inspired by between instances of E29 Design or Procedure. Any instance of E29 Design or Procedure may be associated with other designs or procedures. The property is considered to be symmetrical unless otherwise indicated by P69.1 has type. +The P69.1 has type property of P69 has association with allows the nature of the association to be specified reading from domain to range; examples of types of association between instances of E29 Design or Procedure include: has part, follows, requires, etc. +The property can typically be used to model the decomposition of the description of a complete workflow into a series of separate procedures. + + + + + + + + mentionne + документирует + τεκμηριώνει + documents + belegt + documenta + 记录了 + + This property describes the CRM Entities documented by instances of E31 Document. +Documents may describe any conceivable entity, hence the link to the highest-level entity in the CRM hierarchy. This property is intended for cases where a reference is regarded as being of a documentary character, in the scholarly or scientific sense. + + + + + + + + + is documented in + τεκμηριώνεται σε + wird belegt in + est mentionnée dans + документирован в + é documentado em + 被记录於 + + + + + + + + + listet + перечисляет + lists + περιλαμβάνει + définit + define + 条列出 + + This property documents a source E32 Authority Document for an instance of an E1 CRM Entity. + + + + + + + + + περιλαμβάνεται σε + wird aufgelistet in + is listed in + перечислен в + est défini par + é definido por + 被条列於 + + + + + + + + + est en langue + имеет язык + has language + hat Sprache + έχει γλώσσα + é da língua + 使用语言 + + This property describes the E56 Language of an E33 Linguistic Object. +Linguistic Objects are composed in one or more human Languages. This property allows these languages to be documented. + + + + + + + + ist Sprache von + είναι γλώσσα του/της + est la langue de + является языком для + is language of + é a língua de + 被用来撰写 + + + + + + + + έχει μετάφραση + hat Übersetzung + имеет перевод + has translation + a pour traduction + tem tradução + 有译文 + + This property describes the source and target of instances of E33Linguistic Object involved in a translation. +When a Linguistic Object is translated into a new language it becomes a new Linguistic Object, despite being conceptually similar to the source object. + + + + + + + + est la traduction de + является переводом + είναι μετάφραση του/της + ist Übersetzung von + is translation of + é tradução de + 翻译自 + + + + + + + + имеет текущее или бывшее местожительства + has current or former residence + hat derzeitigen oder früheren Sitz + έχει ή είχε κατοικία + réside ou a résidé à + reside ou residiu em + 目前或曾经居住於 + + This property describes the current or former E53 Place of residence of an E39 Actor. +The residence may be either the Place where the Actor resides, or a legally registered address of any kind. + + + + + + + είναι ή ήταν κατοικία του/της + ist derzeitiger oder früherer Sitz von + est ou a été la résidence de + является текущим или бывшим местом жительства для + is current or former residence of + é ou foi residência de + 历年来的居住者包括 + + + + + + + владеет + κατέχει + besitzt + est détenteur de + possesses + é detentor de + 拥有 + + This property identifies former or current instances of E30 Rights held by an E39 Actor. + + + + + + κατέχεται από + принадлежит + sind im Besitz von + est détenu par + is possessed by + são detidos por + 有拥有者 + + + + + + + has contact point + имеет контакт + a pour coordonnées individuelles + έχει σημείο επικοινωνίας + hat Kontaktpunkt + possui ponto de contato + 有联系方式 + This property identifies an E51 Contact Point of any type that provides access to an E39 Actor by any communication method, such as e-mail or fax. + + + + + + + permettent de contacter + bietet Zugang zu + provides access to + παρέχει πρόσβαση σε + предоставляет доступ к + é ponto de contado de + 被用来联系 + + + + + + + αναγνωρίζεται ως + est identifiée par + is identified by + идентифицируется посредством + wird bezeichnet als + é identificado por + 有识别称号 + + This property identifies an E52 Time-Span using an E49Time Appellation. + + + + + + + identifies + bezeichnet + identifie + είναι αναγνωριστικό + идентифицирует + identifica + 被用来识别 + + + + + + + + αρχή προσδιορίζεται από + начало ограничено + hat Anfangsbegründung + beginning is qualified by + début est qualifié par + início é qualificado por + 起点认定的性质是 + + This property qualifies the beginning of an E52 Time-Span in some way. +The nature of the qualification may be certainty, precision, source etc. + + + + + + + + τέλος προσδιορίζεται από + fin est qualifiée par + hat Begründung des Endes + конец ограничен + end is qualified by + final é qualificado por + 终点认定的性质是 + + This property qualifies the end of an E52 Time-Span in some way. +The nature of the qualification may be certainty, precision, source etc. + + + + + + + + ongoing throughout + καθόλη τη διάρκεια του/της + andauernd während + couvre au moins + длится в течение + abrange no mínimo + 时段的数值至少涵盖 + + This property describes the minimum period of time covered by an E52 Time-Span. +Since Time-Spans may not have precisely known temporal extents, the CRM supports statements about the minimum and maximum temporal extents of Time-Spans. This property allows a Time-Span’s minimum temporal extent (i.e. its inner boundary) to be assigned an E61 Time Primitive value. Time Primitives are treated by the CRM as application or system specific date intervals, and are not further analysed. + + + + + + + κάποτε εντός + некоторое время в течение + irgendwann innerhalb von + couvre au plus + at some time within + abrange no máximo + 时段的数值不会超越 + + This property describes the maximum period of time within which an E52 Time-Span falls. +Since Time-Spans may not have precisely known temporal extents, the CRM supports statements about the minimum and maximum temporal extents of Time-Spans. This property allows a Time-Span’s maximum temporal extent (i.e. its outer boundary) to be assigned an E61 Time Primitive value. Time Primitives are treated by the CRM as application or system specific date intervals, and are not further analysed. + + + + + + + a duré au moins + είχε ελάχιστη διάρκεια + hatte Mindestdauer + had at least duration + имеет длительность по крайней мере больше чем + durou no mínimo + 时间最少持续了 + + This property describes the minimum length of time covered by an E52 Time-Span. +It allows an E52 Time-Span to be associated with an E54 Dimension representing it’s minimum duration (i.e. it’s inner boundary) independent from the actual beginning and end. + + + + + + + είναι ελάχιστη διάρκεια του/της + a été la durée minimum de + был минимальной длительностью для + was minimum duration of + war Mindestdauer von + foi a duração mínima de + + + + + + + είχε μέγιστη διάρκεια + had at most duration + hatte Höchstdauer + имеет длительность меньше чем + a duré au plus + durou no máximo + 时间最多持续了 + + This property describes the maximum length of time covered by an E52 Time-Span. +It allows an E52 Time-Span to be associated with an E54 Dimension representing it’s maximum duration (i.e. it’s outer boundary) independent from the actual beginning and end. + + + + + + + был максимальной длительностью для + war längste Dauer von + was maximum duration of + είναι μέγιστη διάρκεια του/της + a été la durée maximum de + foi a duração máxima de + + + + + + + +falls within + содержится в + περιέχεται σε + s’insère dans + fällt in + está contido em + 时间上被涵盖於 + This property describes the inclusion relationship between two instances of E52 Time-Span. +This property supports the notion that a Time-Span’s temporal extent falls within the temporal extent of another Time-Span. It addresses temporal containment only, and no contextual link between the two instances of Time-Span is implied. + + + + + + + inclut + enthält + contains + περιέχει + содержит + contém + 时间上涵盖了 + + + + + + + αναγνωρίζεται ως + is identified by + идентифицируется посредством + est identifié par + wird bezeichnet als + é identificado por + 有辨认码 + + This property identifies an E53 Place using an E44 Place Appellation. +Examples of Place Appellations used to identify Places include instances of E48 Place Name, addresses, E47 Spatial Coordinates etc. + + + + + + + + bezeichnet + είναι αναγνωριστικό + идентифицирует + identifie + identifies + identifica + 被用来辨认 + + + + + + + + s’insère dans + falls within + содержится в + fällt in + περιέχεται σε + está contido em + 空间上被包围於 + + This property identifies an instance of E53 Place that falls wholly within the extent of another E53 Place. +It addresses spatial containment only, and does not imply any relationship between things or phenomena occupying these places. + + + + + + + inclut + содержит + περιέχει + enthält + contains + contém + 空间上包含了 + + + + + + + hat Wert + έχει τιμή + a la valeur + имеет значение + has value + tem valor + 有数值 + + This property allows an E54 Dimension to be approximated by an E60 Number primitive. + + + + + + + имеет единицу + έχει μονάδα μέτρησης + a pour unité + hat Einheit + has unit + tem unidade + 有单位 + + This property shows the type of unit an E54 Dimension was expressed in. + + + + + + является единицей для + est l'unité de + ist Einheit von + αποτελεί μονάδα μέτρησης του/της + is unit of + é unidade de + 被当做单位来表示 + + + + + + + a fait exister + brought into existence + создал + brachte in Existenz + γέννησε + trouxe à existência + 开始了 + + This property allows an E63 Beginning of Existence event to be linked to the E77 Persistent Item brought into existence by it. +It allows a “start” to be attached to any Persistent Item being documented i.e. E70 Thing, E72 Legal Object, E39 Actor, E41 Appellation, E51 Contact Point and E55 Type + + + + + + + was brought into existence by + γεννήθηκε από + wurde in Existenz gebracht durch + a commencé à exister du fait de + был создан посредством + passou a existir por + 被开始於 + + + + + + + + a fait cesser d’exister + положил конец существованию + beendete die Existenz von + took out of existence + αναίρεσε + cessou a existência de + 结束了 + + This property allows an E64 End of Existence event to be linked to the E77 Persistent Item taken out of existence by it. +In the case of immaterial things, the E64 End of Existence is considered to take place with the destruction of the last physical carrier. +This allows an “end” to be attached to any Persistent Item being documented i.e. E70 Thing, E72 Legal Object, E39 Actor, E41 Appellation, E51 Contact Point and E55 Type. For many Persistent Items we know the maximum life-span and can infer, that they must have ended to exist. We assume in that case an End of Existence, which may be as unnoticeable as forgetting the secret knowledge by the last representative of some indigenous nation. + + + + + + + + прекратил существование посредством + a cessé d’exister du fait de + was taken out of existence by + αναιρέθηκε από + wurde seiner Existenz beraubt durch + deixou de existir + 被结束於 + + + + + + + + δημιούργησε + создал + has created + hat erschaffen + a créé + criou + 创造了 + + This property allows a conceptual E65 Creation to be linked to the E28 Conceptual Object created by it. +It represents the act of conceiving the intellectual content of the E28 Conceptual Object. It does not represent the act of creating the first physical carrier of the E28 Conceptual Object. As an example, this is the composition of a poem, not its commitment to paper. + + + + + + + + δημιουργήθηκε από + a été créé par + был создан посредством + was created by + wurde erschaffen durch + foi criado por + 被创造於 + + + + + + + + a fondé + сформировал + hat gebildet + has formed + σχημάτισε + formou + 组成了 + This property links the founding or E66 Formation for an E74 Group with the Group itself. + + + + + + + + a été fondé par + wurde gebildet von + σχηματίστηκε από + was formed by + была сформирована посредством + foi formado por + 被组成於 + + + + + + + + посредством матери + durch Mutter + de mère + by mother + είχε μητέρα + pela mãe + 来自生母 + + This property links an E67 Birth event to an E21 Person as a participant in the role of birth-giving mother. + +Note that biological fathers are not necessarily participants in the Birth (see P97 from father (was father for)). The Person being born is linked to the Birth with the property P98 brought into life (was born). This is not intended for use with general natural history material, only people. There is no explicit method for modelling conception and gestation except by using extensions. This is a sub-property of P11 had participant (participated in). + + + + + + + + ήταν μητέρα του/της + a donné naissance à + gave birth + дал рождение + gebar + deu nascimento + 成为生母於 + + + + + + + +gab Vaterschaft + от отца + from father + είχε πατέρα + de père + pelo pai + 来自父亲 + + This property links an E67 Birth event to an E21 Person in the role of biological father. +Note that biological fathers are not seen as necessary participants in the Birth, whereas birth-giving mothers are (see P96 by mother (gave birth)). The Person being born is linked to the Birth with the property P98 brought into life (was born). +This is not intended for use with general natural history material, only people. There is no explicit method for modelling conception and gestation except by using extensions. +A Birth event is normally (but not always) associated with one biological father. + + + + + + + was father for + ήταν πατέρας του/της + a été père dans + war Vater für + был отцом для + foi pai para + 成为生父於 + + + + + + + a donné vie à + brachte zur Welt + brought into life + породил + έφερε στη ζωή + trouxe à vida + 诞生了 + This property links an E67Birth event to an E21 Person in the role of offspring. +Twins, triplets etc. are brought into life by the same Birth event. This is not intended for use with general Natural History material, only people. There is no explicit method for modelling conception and gestation except by using extensions. + + + + + + + + est né + γεννήθηκε + wurde geboren durch + was born + был рожден + veio à vida pelo + 诞生於 + + + + + + + + διέλυσε + распустил + a dissous + dissolved + löste auf + dissolveu + 解散了 + + This property links the disbanding or E68 Dissolution of an E74 Group to the Group itself. + + + + + + + + wurde aufgelöst durch + был распущен посредством + a été dissous par + διαλύθηκε από + was dissolved by + foi dissolvido por + 被解散於 + + + + + + + + + was death of + a été la mort de + ήταν θάνατος του/της + Tod von + был смертью для + foi a morte para + 灭亡了 + + This property property links an E69 Death event to the E21 Person that died. + + + + + + + starb in + est mort par + died in + πέθανε σε + умер в + morreu em + 死亡於 + + + + + + + + had as general use + avait comme utilisation générale + είχε ως γενική χρήση + hatte die allgemeine Verwendung + имел основное применение + tem como uso geral + 被惯用於 + + This property links an instance of E70 Thing to an E55 Type of usage. +It allows the relationship between particular things, both physical and immaterial, and general methods and techniques of use to be documented. Thus it can be asserted that a baseball bat had a general use for sport and a specific use for threatening people during the Great Train Robbery. + + + + + + + war die Verwendung von + was use of + était l’utilisation de + был применением для + ήταν χρήση του/της + foi uso de + 可使用 + + + + + + + has title + имеет заголовок + trägt den Titel + a pour titre + έχει τίτλο + tem título + 有标题 + This property describes the E35 Title applied to an instance of E71 Man-Made Thing. The E55 Type of Title is assigned in a sub property. +The P102.1 has type property of the P102 has title (is title of) property enables the relationship between the Title and the thing to be further clarified, for example, if the Title was a given Title, a supplied Title etc. +It allows any man-made material or immaterial thing to be given a Title. It is possible to imagine a Title being created without a specific object in mind. + + + + + + + + is title of + ist der Titel von + είναι τίτλος του/της + est le titre de + является заголовком для + é título de + 被用为标题来称呼 + + + + + + + + + était destiné à + was intended for + bestimmt für + был задуман для + προοριζόταν για + era destinado à + 被制作来用於 + + This property links an instance of E71 Man-Made Thing to an E55 Type of usage. +It creates a property between specific man-made things, both physical and immaterial, to Types of intended methods and techniques of use. Note: A link between specific man-made things and a specific use activity should be expressed using P19 was intended use of (was made for). + + + + + + war Bestimmung von + was intention of + был интенцией для + ήταν προορισμός του + était la raison d'être de + era a destinação de + + + + + + + est sujet à + is subject to + является объектом для + υπόκειται σε + Gegenstand von + está sujeito à + + 受制於 + This property links a particular E72 Legal Object to the instances of E30 Right to which it is subject. +The Right is held by an E39 Actor as described by P75 possesses (is possessed by). + + + + + + + ισχύει για + s’applique à + findet Anwendung auf + применяется к + applies to + se aplicam à + 被应用於 + + + + + + + право принадлежит + droit détenu par + Rechte stehen zu + δικαίωμα κατέχεται από + right held by + são direitos de + 有权限持有者 + + This property identifies the E39 Actor who holds the instances of E30 Right to an E72 Legal Object. + It is a superproperty of P52 has current owner (is current owner of) because ownership is a right that is held on the owned object. +P105 right held by (has right on) is a shortcut of the fully developed path from E72 Legal Object through P104 is subject to (applies to), E30 Right, P75 possesses (is possessed by) to E39 Actor. + + + + + + + hat Rechte an + владеет правом на + has right on + détient un droit sur + έχει δικαίωμα σε + possui direitos sobre + 持有权限来管制 + + + + + + + ist zusammengesetzt aus + составлен из + is composed of + est composé de + αποτελείται από + é composto de + 有组成元素 + + This property associates an instance of E90 Symbolic Object with a part of it that is by itself an instance of E90 Symbolic Object, such as fragments of texts or clippings from an image. + + + + + + + формирует часть + αποτελεί μέρος του/της + bildet Teil von + fait partie de + forms part of + faz parte de + 组成了 + + + + + + + a pour membre actuel ou ancien + has current or former member + έχει ή είχε μέλος + имеет действующего или бывшего члена + hat derzeitiges oder früheres Mitglied + tem ou teve membro + 有现任或前任成员 + + This property relates an E39 Actor to the E74 Group of which that E39 Actor is a member. +Groups, Legal Bodies and Persons, may all be members of Groups. A Group necessarily consists of more than one member. +This property is a shortcut of the more fully developed path from E74 Group through P144 joined with (gained member by), E85 Joining, P143 joined (was joined by) to E39 Actor +The property P107.1 kind of member can be used to specify the type of membership or the role the member has in the group. + + + + + + + είναι ή ήταν μέλος του/της + is current or former member of + ist derzeitiges oder früheres Mitglied von + является действующим или бывшим членом + est actuel ou ancien membre de + é ou foi membro de + 目前或曾经加入群组 + + + + + + + παρήγαγε + a produit + произвел + hat hergestellt + has produced + produziu + 有产出物 + + This property identifies the E24 Physical Man-Made Thing that came into existence as a result of an E12 Production. +The identity of an instance of E24 Physical Man-Made Thing is not defined by its matter, but by its existence as a subject of documentation. An E12 Production can result in the creation of multiple instances of E24 Physical Man-Made Thing. + + + + + + + + + παρήχθη από + a été produit par + wurde hergestellt durch + был произведен посредством + was produced by + foi produzido por + 被制作於 + + + + + + + + + a pour conservateur actuel ou ancien + hat derzeitigen oder früheren Kurator + has current or former curator + έχει ή είχε επιμελητή + имеет действующего или бывшего хранителя + tem ou teve curador + 有现任或前任典藏管理员 + + This property identifies the E39 Actor or Actors who assume or have assumed overall curatorial responsibility for an E78 Collection. + +It does not allow a history of curation to be recorded. This would require use of an Event initiating a curator being responsible for a Collection. + + + + + + + + является действующим или бывшим хранителем + είναι ή ήταν επιμελητής του/της + est ou a été le conservateur de + ist derzeitiger oder früherer Kurator von + is current or former curator of + é ou foi curador de + 目前或曾经典藏管理 + + + + + + + + + увеличил + a augmenté + erweiterte + επαύξησε + augmented + aumentou + 扩增了 + + This property identifies the E24 Physical Man-Made Thing that is added to (augmented) in an E79 Part Addition. +Although a Part Addition event normally concerns only one item of Physical Man-Made Thing, it is possible to imagine circumstances under which more than one item might be added to (augmented). For example, the artist Jackson Pollock trailing paint onto multiple canvasses. + + + + + + + + + a été augmenté par + was augmented by + был увеличен посредством + επαυξήθηκε από + wurde erweitert durch + foi aumentada por + 被扩增於 + + + + + + + + fügte hinzu + προσέθεσε + a ajouté + added + добавил + adicionou + 附加上部件 + + This property identifies the E18 Physical Thing that is added during an E79 Part Addition activity + + + + + + + + + a été ajouté par + wurde hinzugefügt durch + was added by + προστέθηκε από + был добавлен посредством + foi adicionado por + 被附加於 + + + + + + + + + уменьшил + diminished + verminderte + a diminué + εξάλειψε + diminuiu + 缩减了 + This property identifies the E24 Physical Man-Made Thing that was diminished by E80 Part Removal. +Although a Part removal activity normally concerns only one item of Physical Man-Made Thing, it is possible to imagine circumstances under which more than one item might be diminished by a single Part Removal activity. + + + + + + + + was diminished by + εξαλείφθηκε από + a été diminué par + был уменьшен посредством + wurde vermindert durch + foi diminuído por + 被缩减於 + + + + + + + + удален + entfernte + removed + αφαίρεσε + a enlevé + removeu + 移除了 + + This property identifies the E18 Physical Thing that is removed during an E80 Part Removal activity. + + + + + + + αφαιρέθηκε από + wurde entfernt durch + was removed by + a été enlevée par + был удален посредством + foi removido por + 被移除於 + + + + + + + + est temporellement égale à + zeitgleich zu + συμπίπτει χρονικά με + равен по времени + is equal in time to + é temporalmente igual a + 时段相同於 + + This symmetric property allows the instances of E2 Temporal Entity with the same E52 Time-Span to be equated. +This property is only necessary if the time span is unknown (otherwise the equivalence can be calculated). +This property is the same as the "equal" relationship of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + finishes + заканчивает + beendet + termine + περατώνει + finaliza + 结束了 + This property allows the ending point for a E2 Temporal Entity to be situated by reference to the ending point of another temporal entity of longer duration. +This property is only necessary if the time span is unknown (otherwise the relationship can be calculated). This property is the same as the "finishes / finished-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + est terminée par + заканчивается + περατώνεται με + wurde beendet mit + is finished by + é finalizada por + 被结束于 + + + + + + + commence + starts + начинает + beginnt + αρχίζει + inicia + 开始了 + This property allows the starting point for a E2 Temporal Entity to be situated by reference to the starting point of another temporal entity of longer duration. +This property is only necessary if the time span is unknown (otherwise the relationship can be calculated). This property is the same as the "starts / started-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + est commencée par + wurde begonnen mit + αρχίζει με + начинается + is started by + é iniciada por + 被开始于 + + + + + + fällt in + εμφανίζεται κατά τη διάρκεια + появляется во течение + occurs during + a lieu pendant + ocorre durante + 时段被涵盖於 + This property allows the entire E52 Time-Span of an E2 Temporal Entity to be situated within the Time-Span of another temporal entity that starts before and ends after the included temporal entity. +This property is only necessary if the time span is unknown (otherwise the relationship can be calculated). This property is the same as the "during / includes" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + περιλαμβάνει + включает + comporte + includes + beinhaltet + inclui + 时段涵盖了 + + + + + + overlaps in time with + перекрывает во времени + προηγείται μερικώς επικαλύπτοντας + überlappt zeitlich mit + est partiellement recouverte dans le temps par + sobrepõe temporalmente + 时段重叠了 + This property identifies an overlap between the instances of E52 Time-Span of two instances of E2 Temporal Entity. +It implies a temporal order between the two entities: if A overlaps in time B, then A must start before B, and B must end after A. This property is only necessary if the relevant time spans are unknown (otherwise the relationship can be calculated). +This property is the same as the "overlaps / overlapped-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + wird zeitlich überlappt von + перекрывается во времени + recouvre partiellement dans le temps + is overlapped in time by + έπεται μερικώς επικαλυπτόμενο + é sobreposto temporalmente por + 时段被重叠于 + + + + + + meets in time with + προηγείται + trifft zeitlich auf + следует во времени за + est temporellement contiguë avec + é temporalmente contíguo com + 紧接续了 + This property indicates that one E2 Temporal Entity immediately follows another. +It implies a particular order between the two entities: if A meets in time with B, then A must precede B. This property is only necessary if the relevant time spans are unknown (otherwise the relationship can be calculated). +This property is the same as the "meets / met-by" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + est immédiatement précédé par + έπεται + is met in time by + wird zeitlich getroffen von + предшествует во времени + é imediatamente precedido por + 紧接续於 + + + + + + появляется до + a lieu avant + εμφανίζεται πριν + occurs before + kommt vor + ocorre antes + 发生时段先於 + This property identifies the relative chronological sequence of two temporal entities. +It implies that a temporal gap exists between the end of A and the start of B. This property is only necessary if the relevant time spans are unknown (otherwise the relationship can be calculated). +This property is the same as the "before / after" relationships of Allen’s temporal logic (Allen, 1983, pp. 832-843). + + + + + + + a lieu après + εμφανίζεται μετά + появляется после + kommt nach + occurs after + ocorre depois + 发生时段后於 + + + + + + επικαλύπτεται με + überlappt mit + chevauche + пересекается с + overlaps with + sobrepõe com + 空间重叠于 + This symmetric property allows the instances of E53 Place with overlapping geometric extents to be associated with each other. +It does not specify anything about the shared area. This property is purely spatial, in contrast to Allen operators, which are purely temporal. + + + + + + + граничит с + borders with + jouxte + grenzt an + συνορεύει με + fronteira com + 接壤于 + This symmetric property allows the instances of E53 Place which share common borders to be related as such. +This property is purely spatial, in contrast to Allen operators, which are purely temporal. + + + + + + + a eu pour résultat + ergab + είχε ως αποτέλεσμα + повлек появление + resulted in + resultou em + 转变出 + This property identifies the E77 Persistent Item or items that are the result of an E81 Transformation. +New items replace the transformed item or items, which cease to exist as units of documentation. The physical continuity between the old and the new is expressed by the link to the common Transformation. + + + + + + + + est le résultat de + προέκυψε από + был результатом + ergab sich aus + resulted from + resultado de + 肇因於 + + + + + + + transformed + wandelte um + μετέτρεψε + трансформировал + a transformé + transformou + 转变了 + This property identifies the E77 Persistent Item or items that cease to exist due to a E81 Transformation. +It is replaced by the result of the Transformation, which becomes a new unit of documentation. The continuity between both items, the new and the old, is expressed by the link to the common Transformation. + + + + + + + + a été transformé par + был трансформирован посредством + μετατράπηκε από + was transformed by + wurde umgewandelt durch + foi transformado por + 被转变於 + + + + + + + +used object of type + a employé un objet du type + использовал объект типа + benutzte Objekt des Typus + χρησιμοποίησε αντικείμενο τύπου + usou objeto do tipo + 有使用物件类型 + This property defines the kind of objects used in an E7 Activity, when the specific instance is either unknown or not of interest, such as use of "a hammer". + + + + + + + был типом объекта использованного в + was type of object used in + Objekt des Typus ... wurde benutzt in + était le type d’objet employé par + ήταν o τύπος αντικείμενου που χρησιμοποιήθηκε σε + foi tipo do objeto usado em + 被使用於 + + + + + + a employé + verwendete + employed + использовал + χρησιμοποίησε + empregou + 采用了材料 + This property identifies E57 Material employed in an E11 Modification. +The E57 Material used during the E11 Modification does not necessarily become incorporated into the E24 Physical Man-Made Thing that forms the subject of the E11 Modification. + + + + + + + was employed in + wurde verwendet bei + использовался в + χρησιμοποιήθηκε σε + a été employé dans + foi empregado em + 被使用於 + + + + + + έχει ευρύτερο όρο + a pour terme générique + hat den Oberbegriff + has broader term + имеет вышестоящий термин + tem termo genérico + 有广义术语 + This property identifies a super-Type to which an E55 Type is related. + It allows Types to be organised into hierarchies. This is the sense of "broader term generic (BTG)" as defined in ISO 2788 + + + + + + + a pour terme spécifique + hat den Unterbegriff + has narrower term + έχει στενότερο όρο + tem termo específico + 有狭义术语 + + + + + + carries + est le support de + несет + φέρει + trägt + é o suporte de + 承载信息 + This property identifies an E90 Symbolic Object carried by an instance of E18 Physical Thing. + + + + + + + + φέρεται από + is carried by + переносится посредством + a pour support + wird getragen von + é suportado por + 被承载于 + + + + + + + est au sujet de + is about + касается + έχει ως θέμα + handelt über + é sobre + 陈述关於 + This property documents that an E89 Propositional Object has as subject an instance of E1 CRM Entity. + + + + + + + + est le sujet de + wird behandelt in + является предметом для + είναι θέμα του/της + is subject of + é assunto de + 被陈述於 + + + + + + + παρουσιάζει χαρακτηριστικά του/της + shows features of + демонстрирует признаки + présente des caractéristiques de + zeigt Merkmale von + apresenta características de + 外观特征原出现於 + This property generalises the notions of "copy of" and "similar to" into a dynamic, asymmetric relationship, where the domain expresses the derivative, if such a direction can be established. +Otherwise, the relationship is symmetric. It is a short-cut of P15 was influenced by (influenced) in a creation or production, if such a reason for the similarity can be verified. Moreover it expresses similarity in cases that can be stated between two objects only, without historical knowledge about its reasons. + + + + + + + + + χαρακτηριστικά του βρίσκονται επίσης σε + a des caractéristiques se trouvant aussi sur + Merkmale auch auf + признаки также найдены на + features are also found on + características são também encontradas em + 外观特征被复制於 + + + + + + αναγνωρίζεται ως + wird identifziert durch + is identified by + est identifié par + идентифицируется посредством + é identificado por + 有称号 + This property identifies a name used specifically to identify an E39 Actor. +This property is a specialisation of P1 is identified by (identifies) is identified by. + + + + + + + + identifie + identifies + είναι αναγνωριστικό + идентифицирует + identifiziert + identifica + 被用来识别 + + + + + + + επικαλύπτεται με + überlappt mit + chevauche + пересекается с + overlaps with + sobrepõe + 时空重叠于 + This symmetric property allows instances of E4 Period that overlap both temporally and spatially to be related, i,e. they share some spatio-temporal extent. +This property does not imply any ordering or sequence between the two periods, either spatial or temporal. + + + + + + + getrennt von + is separated from + διαχωρίζεται από + est séparée de + отделен от + é separado de + 时空不重叠于 + This symmetric property allows instances of E4 Period that do not overlap both temporally and spatially, to be related i,e. they do not share any spatio-temporal extent. +This property does not imply any ordering or sequence between the two periods either spatial or temporal. + + + + + + + setzte sich fort in + συνέχισε + продолжил + est la suite de + continued + continuou + 延续了 + This property associates two instances of E7 Activity, where the domain is considered as an intentional continuation of the range. A continuation of an activity may happen when the continued activity is still ongoing or after the continued activity has completely ended. The continuing activity may have started already before it decided to continue the other one. Continuation implies a coherence of intentions and outcomes of the involved activities. + + + + + + + + wurde fortgesetzt durch + был продолжен + a été continuée par + was continued by + συνεχίστηκε από + foi continuada por + 有延续活动 + + + + + + + created type + erschuf Typus + δημιούργησε τύπο + a créé le type + создал тип + criou tipo + 创造了类型 + This property identifies the E55 Type, which is created in an E83Type Creation activity. + + + + + + + was created by + wurde geschaffen durch + a été créé par + δημιουργήθηκε από + был создан посредством + foi criado por + 被创造於 + + + + + + + s’est fondée sur + был основан на + stützte sich auf + βασίστηκε σε + was based on + foi baseado em + 根据了 + This property identifies one or more items that were used as evidence to declare a new E55 Type. +The examination of these items is often the only objective way to understand the precise characteristics of a new Type. Such items should be deposited in a museum or similar institution for that reason. The taxonomic role renders the specific relationship of each item to the Type, such as "holotype" or "original element". + + + + + + + + supported type creation + υποστήριξε τη δημιουργία τύπου + a justifié la création de type + belegte + поддержал создание типа + suportou a criação de tipo + 提供證據给类型创造 + + + + + + + exemplifies + exemplifie + δειγματίζει + поясняет + erläutert + é exemplificado por + 例示了 + This property allows an item to be declared as a particular example of an E55 Type or taxon + The P137.1 in the taxonomic role property of P137 exemplifies (is exemplified by) allows differentiation of taxonomic roles. The taxonomic role renders the specific relationship of this example to the Type, such as "prototypical", "archetypical", "lectotype", etc. The taxonomic role "lectotype" is not associated with the Type Creation (E83) itself, but selected in a later phase. + + + + + + + + поясняется посредством + erläutert durch Beispiel + is exemplified by + δειγματίζεται από + est exemplifié par + exemplifica + 有例示 + + + + + + + παριστάνει + represents + представляет + stellt dar + représente + representa + 描绘了 + This property establishes the relationship between an E36 Visual Item and the entity that it visually represents. +Any entity may be represented visually. This property is part of the fully developed path from E24 Physical Man-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1 CRM Entity, which is shortcut by P62depicts (is depicted by). P138.1 mode of representation allows the nature of the representation to be refined. +This property is also used for the relationship between an original and a digitisation of the original by the use of techniques such as digital photography, flatbed or infrared scanning. Digitisation is here seen as a process with a mechanical, causal component rendering the spatial distribution of structural and optical properties of the original and does not necessarily include any visual similarity identifiable by human observation. + + + + + + + + has representation + имеет представление + est représentée par + παριστάνεται από + wird dargestellt durch + tem representação + 有图像描绘 + + + + + + + a pour autre forme + имеет альтернативную форму + has alternative form + hat alternative Form + έχει εναλλακτική μορφή + tem forma alternativa + 有替代称号 + This property establishes a relationship of equivalence between two instances of E41 Appellation independent from any item identified by them. It is a dynamic asymmetric relationship, where the range expresses the derivative, if such a direction can be established. Otherwise, the relationship is symmetric. The relationship is not transitive. +The equivalence applies to all cases of use of an instance of E41 Appellation. Multiple names assigned to an object, which are not equivalent for all things identified with a specific instance of E41 Appellation, should be modelled as repeated values of P1 is identified by (identifies). +P139.1 has type allows the type of derivation, such as “transliteration from Latin 1 to ASCII” be refined.. + + + + + + + wies Merkmal zu + απέδωσε ιδιότητα σε + assigned attribute to + a affecté un attribut à + присвоил атрибут для + atribuiu atributo para + 指定属性给 + This property indicates the item to which an attribute or relation is assigned. + + + + + + was attributed by + a reçu un attribut par + получил атрибут посредством + bekam Merkmal zugewiesen durch + χαρακτηρίστηκε από + foi atribuído por + 被指定属性於 + + + + + + assigned + присвоил + wies zu + απέδωσε + a attribué + atribuiu + 指定了属性值 + This property indicates the attribute that was assigned or the item that was related to the item denoted by a property P140 assigned attribute to in an Attribute assignment action. + + + + + + + был присвоен посредством + wurde zugewiesen durch + a été attribué par + was assigned by + αποδόθηκε από + foi atribuído por + 被指定了属性值於 + + + + + + used constituent + benutzte Bestandteil + 使用称号构成部分 + This property associates the event of assigning an instance of E42 Identifier to an entity, with the instances of E41 Appellation that were used as elements of the identifier. + + + + + + + + wurde benutzt in + was used in + 被用来构成称号於 + + + + + + + joined + verband + 加入了成员 + This property identifies the instance of E39 Actor that becomes member of a E74 Group in an E85 Joining. + Joining events allow for describing people becoming members of a group with a more detailed path from E74 Group through P144 joined with (gained member by), E85 Joining, P143 joined (was joined by) to E39 Actor, compared to the shortcut offered by P107 has current or former member (is current or former member of). + + + + + + + + was joined by + wurde verbunden durch + 被加入为成员於 + + + + + + + joined with + verband mit + 加入成员到 + This property identifies the instance of E74 Group of which an instance of E39 Actor becomes a member through an instance of E85 Joining. +Although a Joining activity normally concerns only one instance of E74 Group, it is possible to imagine circumstances under which becoming member of one Group implies becoming member of another Group as well. +Joining events allow for describing people becoming members of a group with a more detailed path from E74 Group through P144 joined with (gained member by), E85 Joining, P143 joined (was joined by) to E39 Actor, compared to the shortcut offered by P107 has current or former member (is current or former member of). +The property P144.1 kind of member can be used to specify the type of membership or the role the member has in the group. + + + + + + + + gained member by + erwarb Mitglied durch + 获得成员於 + + + + + + + separated + entließ + 分离了成员 + This property identifies the instance of E39 Actor that leaves an instance of E74 Group through an instance of E86 Leaving. + + + + + + + left by + wurde entlassen durch + 脱离群组於 + + + + + + + separated from + entließ von + 脱离了群组 + This property identifies the instance of E74 Group an instance of E39 Actor leaves through an instance of E86 Leaving. +Although a Leaving activity normally concerns only one instance of E74 Group, it is possible to imagine circumstances under which leaving one E74 Group implies leaving another E74 Group as well. + + + + + + + + lost member by + verlor Mitglied durch + 失去成员於 + + + + + + + curated + betreute kuratorisch + 典藏管理了 + This property associates an instance of E87 Curation Activity with the instance of E78 Collection that is subject of that curation activity. + + + + + + + was curated by + wurde kuratorisch betreut durch + 被典藏管理於 + + + + + + has component + hat Bestandteil + 有组件 + This property associates an instance of E89 Propositional Object with a structural part of it that is by itself an instance of E89 Propositional Object. + + + + + + is component of + ist Bestandteil von + 被用来组成 + + + + + + is identified by + This property identifies an instance of E28 Conceptual Object using an instance of E75 Conceptual Object Appellation. + + + + + + + identifies + + + + + + + defines typical parts of + The property "broaderPartitive" associates an instance of E55 Type “A” with an instance of E55 Type “B”, when items of type “A” typically form part of items of type “B”, such as “car motors” and “cars”. +It allows Types to be organised into hierarchies. This is the sense of "broader term partitive (BTP)" as defined in ISO 2788 and “broaderPartitive” in SKOS. + + + + + + + defines typical wholes for + + + + + + was formed from + This property associates an instance of E66 Formation with an instance of E74 Group from which the new group was formed preserving a sense of continuity such as in mission, membership or tradition. + + + + + + + + participated in + + + + + + + has parent + This property associates an instance of E21 Person with another instance of E21 Person who plays the role of the first instance’s parent, regardless of whether the relationship is biological parenthood, assumed or pretended biological parenthood or an equivalent legal status of rights and obligations obtained by a social or legal act. + This property is, among others, a shortcut of the fully developed paths from ‘E21Person’ through ‘P98i was born’, ‘E67 Birth’, ‘P96 by mother’ to ‘E21 Person’, and from ‘E21Person’ through ‘P98i was born’, ‘E67 Birth’, ‘P97 from father’ to ‘E21 Person’. + + + + + + + is parent of + + + + + + occupies + This property describes the largest volume in space that an instance of E18 Physical Thing has occupied at any time during its existence, with respect to the reference space relative to itself. This allows you to describe the thing itself as a place that may contain other things, such as a box that may contain coins. In other words, it is the volume that contains all the points which the thing has covered at some time during its existence. In the case of an E26 Physical Feature the default reference space is the one in which the object that bears the feature or at least the surrounding matter of the feature is at rest. In this case there is a 1:1 relation of E26 Feature and E53 Place. For simplicity of implementation multiple inheritance (E26 Feature IsA E53 Place) may be a practical approach. + +For instances of E19 Physical Objects the default reference space is the one which is at rest to the object itself, i.e. which moves together with the object. We include in the occupied space the space filled by the matter of the physical thing and all its inner spaces. + +This property is a subproperty of P161 has spatial projection because it refers to its own domain as reference space for its range, whereas P161 has spatial projection may refer to a place in terms of any reference space. For some instances of E18 Physical Object the relative stability of form may not be sufficient to define a useful local reference space, for instance for an amoeba. In such cases the fully developed path to an external reference space and using a temporal validity component may be adequate to determine the place they have occupied. + +In contrast to P156 occupies, the property P53 has former or current location identifies an instance of E53 Place at which a thing is or has been for some unspecified time span. Further it does not constrain the reference space of the referred instance of P53 Place. + + + + + + + + is occupied by + + + + + + + is at rest relative to + This property associates an instance of P53 Place with the instance of E18 Physical Thing that determines a reference space for this instance of P53 Place by being at rest with respect to this reference space. The relative stability of form of an E18 Physical Thing defines its default reference space. The reference space is not spatially limited to the referred thing. For example, a ship determines a reference space in terms of which other ships in its neighbourhood may be described. Larger constellations of matter, such as continental plates, may comprise many physical features that are at rest with them and define the same reference space. + + + + + + + + provides reference space for + + + + + + + + has temporal projection + This property describes the temporal projection of an instance of an E92 Spacetime Volume. The property P4 has time-span is the same as P160 has temporal projection if it is used to document an instance of E4 Period or any subclass of it. + + + + + + + is temporal projection of + + + + + + has spatial projection + This property associates an instance of a E92 Spacetime Volume with an instance of E53 Place that is the result of the spatial projection of the instance of a E92 Spacetime Volume on a reference space. In general there can be more than one useful reference space to describe the spatial projection of a spacetime volume, such as that of a battle ship versus that of the seafloor. Therefore the projection is not unique. +This is part of the fully developed path that is shortcut by P7took place at (witnessed).The more fully developed path from E4 Period through P161 has spatial projection, E53 Place, P89 falls within (contains) to E53 Place. + + + + + + + is spatial projection of + + + + + + during + This property relates an E93 Presence with an arbitrary E52 Time-Span that defines the section of the spacetime volume that this instance of E93 Presence is related to by P166 was a presence of (had presence) that is concerned by this instance of E93 Presence. + + + + + + + was time-span of + + + + + + incorporates + This property associates an instance of E73 Information Object with an instance of E90 Symbolic Object (or any of its subclasses) that was included in it. +This property makes it possible to recognise the autonomous status of the incorporated signs, which were created in a distinct context, and can be incorporated in many distinct self-contained expressions, and to highlight the difference between structural and accidental whole-part relationships between conceptual entities. +It accounts for many cultural facts that are quite frequent and significant: the inclusion of a poem in an anthology, the re-use of an operatic aria in a new opera, the use of a reproduction of a painting for a book cover or a CD booklet, the integration of textual quotations, the presence of lyrics in a song that sets those lyrics to music, the presence of the text of a play in a movie based on that play, etc. +In particular, this property allows for modelling relationships of different levels of symbolic specificity, such as the natural language words making up a particular text, the characters making up the words and punctuation, the choice of fonts and page layout for the characters. +A digital photograph of a manuscript page incorporates the text of the manuscript page. + + + + + + + + is incorporated in + + + + + + + was a presence of + This property relates an E93 Presence with the STV it is part of… + + + + + + + had presence + + + + + + was at + This property points to a wider area in which my thing /event was… + + + + + + + was place of + + + + + + place is defined by + This property associates an instance of E53 Place with an instance of E94 Space Primitive that defines it. Syntactic variants or use of different scripts may result in multiple instances of E94 Space Primitive defining exactly the same place. Transformations between different reference systems in general result in new definitions of places approximating each other and not in alternative definitions. Note that it is possible for a place to be defined by phenomena causal to it or other forms of identification rather than by an instance of E94 Space Primitive. In this case, this property must not be used for approximating the respective instance of E53 Place with an instance of E94 Space Primitive. + + + + + + + end of the begin + τέλος της αρχής + Ende des Anfangs + fin du début + конец начала + fim do início + This is defined as the first boundary of the property P81 + + + + + + + begin of the end + début de la fin + αρχή του τέλους + Anfang vom Ende + начать в конце + começar do fim + This is defined as the second boundary of the property P81 + + + + + + + begin of the begin + début du début + αρχή της αρχής + Anfang des Anfangs + начать с начала + começar do início + This is defined as the first boundary of the property P82 + + + + + + + end of the end + fin de la fin + τέλος του τέλους + Ende vom Ende + конец конец + fim do fim + This is defined as the second boundary of the property P82 + + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample.rdf new file mode 100644 index 0000000..abb4d6d --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample.rdf @@ -0,0 +1,54 @@ + + + Title of a test service + This is a service for testing purposes + testService + + + + + + + + aTypeLabel + + + + + + + + Competency label + + + + + + + + + The declarative time, whatever it means + Yes + + + The Provider of the service (title) + Description of the provider of the service + + + + + Label of the contact point + + + Fake contact point + + + + + + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample_withHeader.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample_withHeader.rdf new file mode 100644 index 0000000..51407f1 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/PE1_Service_sample_withHeader.rdf @@ -0,0 +1,87 @@ + + +

+ http://ariadneplus.d4science.org/handle/CP/Service/TEST + datasourceInterface + datasourceName +
+ + + + Title of a test service + This is a service for testing purposes + testService + + + + + + + + aTypeLabel + + + + + + + + Competency label + + + + + + + + + The declarative time, whatever it + means + Yes + + + The Provider of the service + (title) + Description of the provider of the service + + + + + Label of the contact point + + + Fake contact point + + + + + + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreatedResponse.json b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreatedResponse.json new file mode 100644 index 0000000..cca7383 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreatedResponse.json @@ -0,0 +1,65 @@ +{ + "result": { + "isopen": false, + "private": false, + "notes": null, + "num_resources": 0, + "extras": [ + { + "value": "http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Service/Appellation/Nakala2", + "key": "AriadnePlus URL" + }, + { + "value": "E41_Appellation", + "key": "instance of" + }, + { + "value": "E70_Thing", + "key": "system:type" + }, + { + "value": "http://data-d.d4science.org/ctlg/ARIADNEPLUS_PRE/nakala1", + "key": "Item URL" + } + ], + "owner_org": "bf3c7b47-ccbb-48c4-9aed-223ba80b004b", + "type": "dataset", + "title": "Nakala", + "maintainer": null, + "num_tags": 0, + "author_email": "alessia.bardi@isti.cnr.it", + "id": "3aa0dbfe-3d9a-4427-bb77-dc6b770e9d06", + "state": "active", + "relationships_as_object": [], + "revision_id": "d0165452-7427-4ab0-bb73-cd4d52abc9aa", + "creator_user_id": "d34aa5ac-b501-49f9-a0d4-3f685851a1f7", + "metadata_modified": "2018-03-15T17:17:20.772406", + "author": "Alessia Bardi", + "relationships_as_subject": [], + "metadata_created": "2018-03-15T17:17:20.772396", + "resources": [], + "groups": [], + "version": "1", + "url": null, + "tags": [], + "license_id": "notspecified", + "organization": { + "created": "2017-12-19T12:48:06.303197", + "image_url": "", + "approval_status": "approved", + "name": "ariadneplus_pre", + "description": "", + "state": "active", + "id": "bf3c7b47-ccbb-48c4-9aed-223ba80b004b", + "title": "ARIADNEPLUS_PRE", + "is_organization": true, + "type": "organization", + "revision_id": "1216049e-bc9a-4b7f-86e0-dedddf24f16b" + }, + "name": "nakala1", + "license_title": "License Not Specified", + "maintainer_email": null + }, + "help": "https://wiki.gcube-system.org/gcube/GCube_Data_Catalogue", + "success": true +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreationFailed.json b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreationFailed.json new file mode 100644 index 0000000..c2034bf --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceCreationFailed.json @@ -0,0 +1 @@ +{"help":"https:\/\/wiki.gcube-system.org\/gcube\/GCube_Data_Catalogue","success":false,"error":{"__type":"Validation Error","name":["Must be purely lowercase alphanumeric (ascii) characters and these symbols: -_"]}} diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceExistResponse.json b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceExistResponse.json new file mode 100644 index 0000000..5980414 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceExistResponse.json @@ -0,0 +1,121 @@ +{ + "license_title": "License Not Specified", + "maintainer": "", + "relationships_as_object": [], + "private": false, + "maintainer_email": null, + "num_tags": 9, + "id": "69a5ad81-9714-454d-b63d-89db9d3ca584", + "metadata_created": "2019-05-13T14:20:35.225920", + "metadata_modified": "2019-05-13T14:20:35.225928", + "author": "ariadneplus_aggregator", + "author_email": "ariadneplus.aggregator@d4science.org", + "state": "active", + "version": null, + "creator_user_id": "57b8beb1-438b-4477-9e7b-d670ed4f0414", + "type": "dataset", + "resources": [], + "num_resources": 0, + "tags": [ + { + "vocabulary_id": null, + "state": "active", + "display_name": "E1_CRM_Entity", + "id": "c4537f22-2981-4c13-8587-b1a66b4fe710", + "name": "E1_CRM_Entity" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "E2_Temporal_Entity", + "id": "ac19c26d-103b-453f-9324-53a0ae2b1a68", + "name": "E2_Temporal_Entity" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "E4_Period", + "id": "63d3617a-8d6a-48e9-b60e-1404bff9540e", + "name": "E4_Period" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "E5_Event", + "id": "5679c6ec-9091-47c4-9845-8635b66bec3e", + "name": "E5_Event" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "E7_Activity", + "id": "ea9fb3f3-53e2-4520-a9c8-9ad292944545", + "name": "E7_Activity" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "E92_Spacetime_Volume", + "id": "9b79f939-3088-4331-94c3-16e21d891620", + "name": "E92_Spacetime_Volume" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "PE26_RI_Project", + "id": "6668c2fc-876e-4dd6-af90-a958092ad59c", + "name": "PE26_RI_Project" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "PE35_Project", + "id": "7feec186-ffff-45c1-997d-15b32e824cc2", + "name": "PE35_Project" + }, + { + "vocabulary_id": null, + "state": "active", + "display_name": "Resource", + "id": "e130773e-9e34-439c-a61b-201b61d41c59", + "name": "Resource" + } + ], + "groups": [], + "license_id": "notspecified", + "relationships_as_subject": [], + "organization": { + "description": "META-SHARE is an open and secure network of repositories for sharing and exchanging language data, tools and related web services.", + "created": "2018-07-09T15:02:11.728061", + "title": "METASHARE", + "name": "metashare", + "is_organization": true, + "state": "active", + "image_url": "http://www.meta-share.org/assets/cms/img/logo.png", + "revision_id": "6a56b490-c417-4cbc-8c1e-a5e934ae3431", + "type": "organization", + "id": "4edf7403-a4c9-4b57-a247-7d82980eb8ff", + "approval_status": "approved" + }, + "name": "test123", + "isopen": false, + "url": null, + "notes": "", + "owner_org": "4edf7403-a4c9-4b57-a247-7d82980eb8ff", + "extras": [ + { + "key": "AriadnePlus URL", + "value": "http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Project/test123" + }, + { + "key": "instance of", + "value": "PE26_RI_Project" + }, + { + "key": "system:type", + "value": "Service" + } + ], + "title": "A TEST", + "revision_id": "69599ed8-5adf-4773-a25e-7f3e034c336d" +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceNotExistResponse200.json b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceNotExistResponse200.json new file mode 100644 index 0000000..43a975e --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/catalogue/responses/resourceNotExistResponse200.json @@ -0,0 +1,8 @@ +{ + "help": "https://wiki.gcube-system.org/gcube/GCube_Data_Catalogue", + "success": false, + "error": { + "__type": "Not Found Error", + "message": "Not found" + } +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/error500_1.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/error500_1.rdf new file mode 100644 index 0000000..f01ccc9 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/error500_1.rdf @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + https://github.com/AriadnePlusWP4/SSK/blob/master/spec/TEI_SSK_ODD.xml + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.json b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.json new file mode 100644 index 0000000..ca8f16e --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.json @@ -0,0 +1,138 @@ +{ + "name":"testCatName", + "license_id":"notspecified", + "title":"Metashare", + "notes":"META-SHARE is an open and secure network\n\t\t\tof repositories for sharing and exchanging\n\t\t\tlanguage data, tools and related web services.", + "tags":[ + { + "name":"PE1_Service" + }, + { + "name":"PE2_Hosting_Service" + }, + { + "name":"E92_Spacetime_Volume" + }, + { + "name":"PE17_Curated_Data_E-Service" + }, + { + "name":"E2_Temporal_Entity" + }, + { + "name":"PE5_Digital_Hosting_Service" + }, + { + "name":"E5_Event" + }, + { + "name":"PE8_E-Service" + }, + { + "name":"PE12_Data_Curating_Service" + }, + { + "name":"PE3_Curating_Service" + }, + { + "name":"PE10_Digital_Curating_Service" + }, + { + "name":"PE15_Data_E-Service" + }, + { + "name":"E1_CRM_Entity" + }, + { + "name":"E4_Period" + }, + { + "name":"E7_Activity" + }, + { + "name":"PE7_Data_Hosting_Service" + }, + { + "name":"Resource" + } + ], + "groups":[ + { + "name":"ILC-CNR" + }, + { + "name":"IIT-CNR" + } + ], + "maintainer":"", + "extras":[ + { + "key":"system:type", + "value":"E7_Activity" + }, + { + "key":"instance of", + "value":"PE17_Curated_Data_E-Service" + }, + { + "key":"AriadnePlus URL", + "value":"http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Service/Metashare" + }, + { + "key":"competence", + "value":"NLP" + }, + { + "key":"activity type", + "value":"" + }, + { + "key":"condition of use", + "value":"" + }, + { + "key":"contact points", + "value":"" + }, + { + "key":"provided by", + "value":"http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/ILC-CNR, http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Actor/IIT-CNR" + }, + { + "key":"online access point", + "value":"http://www.meta-share.org/" + }, + { + "key":"protocol", + "value":"" + }, + { + "key":"delivers on request", + "value":"" + }, + { + "key":"runs on request", + "value":"" + }, + { + "key":"hosts", + "value":"http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Dataset/Metashare%20Dataset" + }, + { + "key":"curates", + "value":"http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Dataset/Metashare%20Dataset" + }, + { + "key":"declared begin/end of operation", + "value":"2010" + }, + { + "key":"availability", + "value":"" + }, + { + "key":"uses curation plan", + "value":"" + } + ] +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.rdf new file mode 100644 index 0000000..ce0a0fc --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/metashare.rdf @@ -0,0 +1,59 @@ + + + IIT-CNR + + + ILC-CNR + + + + + + + + + + + + + + + + + + + + + Metashare + 2010 + + + + Metashare + http://www.meta-share.org/ + META-SHARE is an open and secure network + of repositories for sharing and exchanging + language data, tools and related web services. + + + Computational Linguistics + Machine Translation + NLP + + + + Via Moruzzi 1, Pisa 56124 + + + monica.monachini@ilc.cnr.it + + + + Email + E-mail + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/nakala.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/nakala.rdf new file mode 100644 index 0000000..90f4b98 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/nakala.rdf @@ -0,0 +1,17 @@ + + + + + + Considering the fact that many scientific data producers do not have the digital infrastructure to provide a persistent and interoperable access to their data, Huma-Num has implemented a new tool called “Nakala” to expose research data in order to facilitate their reuse. + Nakala provides mainly three types of services: a permanent identifier to the resource, a permanent access to the data and associated metadata and an exposition of metadata based on semantic web technologies and OAI-PMH server. + + + + Nakala + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sample1.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sample1.rdf new file mode 100644 index 0000000..f5b82d8 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sample1.rdf @@ -0,0 +1,2659 @@ + + + FOAF + + + + Clarin Centres Registry + + + + Umbria Region + + + + + The Italian Dictionary (OVI-Opera del Vocabolario Italiano) is an Institute of the CNR with the institutional task of compiling an historical dictionary of the Italian language. At present the researchers of the OVI are working on the first section of this dictionary, called Tesoro della Lingua Italiana delle Origini (TLIO), i.e. “Thesaurus of the oldest Italian language”. + The present-day activity of the OVI is the continuation of a project started by the Accademia della Crusca in 1965 with funding from the CNR. This project, a new historical dictionary of Italian, was to be the heir of the glorious Vocabolario degli Accademici, but with the difference that it would not be prescriptive (i.e. proposing a model for how language should be used), but historically descriptive (i.e. offering documentation of the vocabulary of Italian in the course of its history). From the beginning, the Accademia della Crusca decided to make use of computers to manage the documentation, a method then to a large extent unknown in the lexicographical tradition. + The principal activities are: + • the compilation of the Tesoro della Lingua Italiana delle Origini (TLIO) + • the development, necessary for the dictionary work, of the database of Old Italian texts + • the development of software for lexicographical and linguistic purposes + + + CNR-OVI + + + + + + + EAD + + + + + + + + + + + + + + + + http://www.culturaitalia.it/ + + + + + + + + The Uffizi Galleries preserves inventories and extensive documentation on museum art works managed by MiBACT. The main inventories offer a complete historical and iconographic documentation of works of art preserved in Galleries museums. + For AriadnePlus: 15.400 results/ Visual art works; Documentary resources; Works of applied arts; Instruments; Architectural Heritage + + + Polo Museale fiorentino Dataset + + + + + + + DM2E + + + + + + + Creation of CoCoON Dataset + + + + + Creation of Istituto Nazionale per la Grafica Dataset + + + + Ministry for Cultural Heritage and Activities and Tourism (MiBACT) + + + + + + + + META-NET, a Network of Excellence consisting of 60 research centres from 34 countries, + is dedicated to building the technological foundations of a multilingual European information society. + META-NET is forging META, the Multilingual Europe Technology Alliance. + + + + + + META-NET Network of Excellence + + + + http://www.culturaitalia.it/opencms/museid/index_museid.jsp?language=it&tematica=header&selected=0 + + + + + The Ministry of Cultural Heritage, Activities and Tourism, MiBACT, is responsible for the valorisation of culture, and the preservation of artistic and cultural heritage, landscape and tourism policies. + + + + + Ministry for Cultural Heritage and Activities and Tourism (MiBACT) + + + + ARIADNE Visual Media Service + + + + Landscape Services - Cloud Hosting + + + + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/documenti/picoap/picoap1.0.xml + + + + + + + + Creation of Regione Marche Dataset + + + + Condition of Use Rights for Ariadne catalogue + + + + + + + Creation of Cendari Dataset + + + + + + + + + + + The Italian Geographic Society is a moral entity whose object is to promote the advancement of geographic knowledge, scientific research and to develop its dissemination through the organization of conferences and study trips. It was founded on May 12, 1867 in Florence as a free association and in 1869 it was recognized as a moral entity. + + + Italian Geographic Society Onlus + + + + Uffizi Galleries + + + + + CulturaItalia Portal Dataset + + + + + CulturaItalia is the Portal of Italian Culture, managed by the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), in which are involved cultural institutions from all sectors and levels (national, regional and local). CulturaItalia, as national aggregator, plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. CulturaItalia presents an integrated Digital Library, named MuseiD-Italia, with the most important digital collections of the Italian museums. CulturaItalia offers a thematic consultation of the Metadata Index and in the sectors of Visual art works, Anthropological Heritage; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Instruments and Means of transport. Currently we selected for AriadnePlus project about 2.200.000 cultural items (objects) and 368 Collections( from MuseiD-Italia). + + + + + + FLaReNet + + + + + Athanasios Karasimos + + + + Metashare Dataset + + + + Lombardia Region + + + + http://registries.dyas-net.gr/en + + + + + + + Academy of Athens (DYAS Team) Anagnostopoulou 14, 10673 Athens + + + + + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + + ICCU + + + + CoCoon + + + + + + Creation of Clarin Virtual Language Observatory Dataset + + + + + + + + + + + + + + + + ILC-ELRA + + + + + + + http://landscape.ariadne-infrastructure.eu/vpb-service.php + + + + + + + EDM + + + + + + + Cendari + + + + DARIAH-IT resources registry + + + + + + + Via di Castello, 46, + 50141 Firenze + + + + + + + ILC-CNR + + + + http://www.dariah.eu/ + + + + + One of the most famous museums in the world, the Uffizi Gallery boasts exceptional collections of paintings and ancient sculptures. The invaluable collection of statues and busts adorning the corridors was gathered by the Medici family and is made up of Roman copies after lost Greek originals. Originally built to host the administrative offices of the Medici's government, today the Gallery is located on the last floor of the imposing building constructed between 1560 and 1580 after a design by Giorgio Vasari. In the Uffizi Galleries manages also the Department of Prints and Drawings; Uffizi Library and Digital Archives. + + Uffizi Galleries + + + + + The Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) was born in 1974 as an instrument for regional planning and local council consultancy in the field of cultural heritage. The Institute promotes the valorisation and restoration of the historical and artistic heritage, the protection, valorisation and preservation of historical centers, by providing its advice to the Region and local authorities. + + + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + + + + 2008 + Time Span of Project of ICCU - CulturaItalia + + + + + + + + + + + + + + Achille Felicetti + + + + + + + + + + + + + + + + CLARIN Centres, their capabilities (especially available endpoints), as well as responsible persons + + Clarin Centres Registry Dataset + + + + Cendari + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Lombardia Region + + + + + + + + + + https://archives.cendari.dariah.eu/ + + + + + + + + + + + + + + + + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Marche Region + + + + + + + + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. + + + + + EHRI Consortium + + + + CulturaItalia Portal Dataset + + + + Regione Piemonte Dataset + + + + + + + + + + + + + + + + DARIAH-GR/ΔΥΑΣ + + + + + + + Creation of Nakala Dataset + + + + + + + CMD profiles (/metadata schemas) + + Component Registry Dataset + + + + + Creation of Archivio storico delle arti contemporanee Dataset + + + + Sun Aug 31 2008 17:00:00 GMT-0400 (EDT) + Time Span of Project of FLaReNet project + + + + + + + + + + + + + + + + + Selection of dataset related to Cultural Heritage + + + Nakala Dataset + + + + + + ICCU + + + + + Creation of Regione Lombardia Dataset + + + + + Ariadne Consortium + + + ARIADNE brings together and integrates existing archaeological research data infrastructures so that researchers can use the various distributed datasets and new and powerful technologies as an integral component of the archaeological research methodology. There is now a large availability of archaeological digital datasets that, together, span different periods, domains and regions; more are continuously created as a result of the increasing use of IT. These are the accumulated outcome of the research of individuals, teams and institutions, but form a vast and fragmented corpus and their potential has been constrained by difficult access and non-homogenous perspectives. + + + + + + + + + + + + + + + + Meta-Net Project + + + + ICCU Vast-LAB + + + + + + 2016 + + You can use this service to process DEM, geo-images and shapefiles to produce large 3D terrain Datasets optimised for real-time visualization and web streaming. + + Landscape Services - 3D Terrain Service + + + + maurizio.sanesi@virgilio.it + + + + 1500-1861 + + + + Condition of Use Rights for Landscape Services - 3D Terrain Service + + + + + + Creation of Isidore Dataset + + + + EHRI Consortium + + + + Clarin Virtual Language Observatory Dataset + + + + 2008 + Time Span of Project of Clarin-EU + + + + + + + + + + EHRI Portal Dataset + + + + + + + + BISLAM (Bibliotheca Scriptorum Latinorum Medii Recentiorisque Aevi),is a series of onomastic, biographical, bibliographic and historical-literary repertoires of mediolatine literature. + + BISLAM + + + + Ariadne Catalogue Dataset + + + + + + + + + + + + + + + Creation of Ariadne Catalogue Dataset + + + + + + + Cendari Consortium + + + + ICCD RA Thesaurus for archaeological objects + + + + + + + + + + Dimitris Gavrilis + + + + Clarin Centres Registry Dataset + + + + + + The archive of the Institute for the History of the Italian Risorgimento - located in Rome in the Vittoriano complex - preserves a complex of extremely diverse documents in which it is possible to identify different archives and funds. The vast artistic and documentary heritage is one of the main sources for studying Italy and the international context from the mid 18th century to the end of the First World War. + For AriadnePlus: 50.530 results/ Visual art works; Documentary resources; Works of applied arts + + + Istituto Centrale per la Storia del Risorgimento Dataset + + + + Condition of Use Rights for Cendari Archival Directory + + + + + + + Piemonte Region + + + + + + + + + + SAN - Sistema Archivistico Nazionale Dataset + + + + + La Biennale di Venezia was founded in 1895 and it is now one of the most famous and prestigious cultural organizations in the world. La Biennale, who stands at the forefront of research and promotion of new contemporary art trends, organizes exhibitions and research in all its specific sectors: Arts (1895), Architecture (1980), Cinema (1932), Dance (1999), Music (1930), and Theatre (1934). Its history is documented at the Historical Archives of Contemporary Arts (Asac) that recently has been completely renovated. + + + La Biennale di Venezia + + + + DCTerms + + + + + + + DARIAH-IT resources registry + + + + + The Photographic Archive of the Italian Geographic Society (SGI) represents a great value in the national scenario. The Archive collects about 400,000 phototypes (positive, negative, slides, postcards), many of which combine documentary value with an intrinsic artistic value. This is mostly rare, often unpublished materials. The oldest collection dates back to 1866, while the latest acquisitions reveal contemporaryity. + For AriadnePlus: 23.000 results/ Visual art works + + + Società Geografica Italiana Dataset + + + + + + + https://vlo.clarin.eu/ + + + + MuseiD-Italia Dataset + + + + + ASAC dati is a database system for the management of information related to the ASAC collections. At present, the database manages data concerning the Film Library, part of the Photo Library, and the Venice Film Festival. + In the future, the project aims to include information concerning the other collections of the Biennale Archives, alongside bibliographic, historical and scientific records. + For AriadnePlus: 100.632 results/ Visual art works; Documentary resources + + + Archivio storico delle arti contemporanee Dataset + + + + Huma-num Consortium + + + + TGIR HUMA-NUM -UMS 3598 + 54 boulevard Raspail + 75006 Paris + + + + + Condition of Use Rights for Clarin Centres Registry + + + + http://portal.ariadne-infrastructure.eu/ + + + + + + + + + + A beta version of the ARIADNE portal is available at http://portal.ariadne-infrastructure.eu/. The portal brings together existing archaeological research datasets from ARIADNE partners so that researchers can browse and access the various distributed datasets for use in their projects. + + + Ariadne catalogue + + + + THEMAS Humanities Thesauri + + + + + The Institute for the History of the Italian Risorgimento has the task of promoting and facilitating the studies of the Italian history from the period of Unity and Independence of Italy until the end of the First World + War. The Institute aims at gathering documents, publications and memorabilia, editing sources and memoirs, also by organizing scientific congresses. + + + + Institute for the History of the Italian Risorgimento + + + + + Khalid Choukri + + + + http://visual.ariadne-infrastructure.eu/ + + + + + The Institute for Computational Linguistics “A. Zampolli” (ILC) is a centre of reference in the field of Computational Linguistics at both national and international levels. The Institute is part of the Department of Social Science and Humanities, Cultural Heritage (DSU) (link is external) of the Italian National Research Council (CNR) (link is external) and carries out research activities in strategic scientific areas of the discipline, as well as publishing activities, training and education activities and technology transfer. + + Instituto di Linguistica Computazionale «A. Zampolli» + + + + + + + A collection of archaeological datasets from across Europe. + + Ariadne Catalogue Dataset + + + + + + + LRE Map + + + + + + + + + + + PatER – Catalogue of the Cultural Heritage of Emilia-Romagna, is the portal that combines and integrates the digital resources created by the IBC (Institute for Cultural and Natural Art of the Emilia-Romagna Region) in its activities of valorisation, cataloging , preservation and development of the regional system of museums and cultural collections, making it visible and accessible not only to specialists, but to anyone who is browsing the web. + For AriadnePlus: 37.197 results/ Visual art works; Documentary resources + + + Regione Emilia Romagna Dataset + + + + + + + full access to metadata / possible restriction for data + Condition of Use Rights for CoCoon + + + + + + + + + + + + + + + + + S.I.S.M.E.L. is a leader in national and international research projects in the field of medieval culture and one of the most advanced research centers in Italy for the creation of innovative applications in digital humanities, including: bibliographic and onomastic databases, catalogues of authors, texts and manuscripts, tools for research data discoverability, interoperability and semantic integration and enrichment. + + + + + SISMEL + + + + + DARIAH is a pan-european infrastructure for arts and humanities scholars working with ICT-enabled methods. It supports digital research as well as the teaching of digital research methods. + + Dariah EU + + + + CoCoON Dataset + + + + Cendari Dataset + + + + Istituto Nazionale per la Grafica Dataset + + + + + + + + + Huma-Num + + + + http://www.resourcebook.eu/lremap/owl/instances/ + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Umbria Region + + + + Contemporary Period + + + + + + 2015 + + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + + + EHRI Portal + + + + + + Sismel + + + + Condition of Use Rights for TRAME + + + + + Creation of Component Registry Dataset + + + + + + + CLARIN Centres Registry is the primary starting/entry point into the CLARIN universe. It is the authoritative source of approved CLARIN Centres including information about the contact and the different available endpoints. Other parts of the infrastructure (especially the harvester) consult this registry to find out about (discover) existing centres and the endpoints they feature. + + Clarin Centres Registry + + + + + + 2012 + + The Digital Library MuseiD-Italy is integrated in CulturaItalia, it contains the digital collections of Italian museums; MuseiD-Italia contains about 70,000 items included in 685 collections and 6380 museums. + + + MuseiD-Italia + + + + + Maurizio Sanesi + + + + Modern Period + + + + DARIAH-GR/ΔΥΑΣ + + + + + + Creation of DARIAH-IT resources registry + + + + + + + Eleni Vernardaki + + + + Modern Age + + + + + The Portal UmbriaCultura integrates different types of resources: Museums, Archaeological Sites, Villas and Gardens, Rocche and Castles, Historical Theaters, Libraries, Historical Archives. + For AriadnePlus: 5.400 results/ Visual art works + + + Regione Umbria Dataset + + + + + + + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. Apart from providing an online platform, EHRI also facilitates an extensive network of researchers, archivists and others to increase cohesion and co-ordination among practitioners and to initiate new transnational and collaborative approaches to the study of the Holocaust. + + EHRI Project + + + + emiliano.degli.innocenti@gmail.com + + + + + + + The available archive files contain over 900000 datasets (language resources, tools, lexicons, corpora): XML files CLARIN harvested, in CLARIN format (CMDI, http://www.clarin.eu/cmd/), organised in one folder per content provider. These are description of datasets (e.g. linguistic corpora) and tools. + + Clarin Virtual Language Observatory Dataset + + + + + + + + + + + + + + + + + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + + EHRI Portal Dataset + + + + Huma-num + + + + Isidore Dataset + + + + Italian Geographic Society Onlus + + + + http://git-trame.fefonlus.it/sparql/ + + + + + + + Isidore + + + + + + + + Creation of Clarin Centres Registry Dataset + + + + + + + + It is the unified access point to national archival resources made available on the web by national, regional and local information systems, databases and digital search tools developed by the State, Regions and other public and private entities. + For AriadnePlus: 754.889 results/ Archival Heritage + (15 sub-set) + + + SAN - Sistema Archivistico Nazionale Dataset + + + + + + 2016 + + This is the main service to access, manage and eventually share your online data. This includes DEM input data, Geo-images, 3D models, etc. + + + Landscape Services - Cloud Hosting + + + + + Monica Monachini + + + + + + + + LRE Map is a mechanism intended to monitor the use and creation of language resources by collecting information on both existing and newly-created resources during the submission process. It is a collective enterprise of the LREC community, as a first step towards the creation of a very broad, community-built, Open Resource Infrastructure. It is meant to become an essential instrument to monitor the field and to identify shifts in shifts in the production, use, and evaluation of LRs and LTs over the years. + + LRE Map Dataset + + + + + + DCU + + + + Polo Museale fiorentino Dataset + + + + Clarin-EU + + + + + + + Dariah-GR Consortium + + + + Huma-Num + + + + + + + + + + + + + + + + Nicolas.Larrousse@huma-num.fr + + + + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/thesaurus/4.3/thesaurus_4.3.0.skos.xml + + + + + + + e.rotteveel@niod.knaw.nl + + + + www.nakala.fr + + + + + + + The Virtual Language Observatory (VLO) faceted browser was developed within CLARIN as a means to explore linguistic resources, services and tools available within CLARIN and related communities. All information in the VLO faceted browser is based on the metadata descriptions of resources as provided by the parties (CLARIN centers ) that host the original data. It gets refreshed regularly but may not be completely up-to-date with the current state of the original data and metadata depending on the date, time and state of the metadata providing/retrieval process (OAI-PMH is employed). + The VLO wants to help researchers to easily find suitable language resources and tools to carry out their research work. They can do this by searching, browsing and navigating geographically. Once they have found a useful resource they can then easily find tools, which may work on it. The purpose is that users may directly access the resources or services they have found, given they have the necessary permissions. + + + + Virtual Language Observatory + + + + + + + + Creation of Biblioteca del Senato Dataset + + + + full access to metadata / possible restriction for data + Condition of Use Rights for Nakala + + + + + + + + + + https://www.clarin.eu/conceptregistry/ + + + + Dublin Core + + + + Regione Umbria Dataset + + + + + + + + + + OLAC + + + + Nakala Schema + + + + https://portal.ehri-project.eu/ + + + + + + + Istituto Centrale per la Storia del Risorgimento Dataset + + + + + + + Middle Ages + + + + provided by DCU + + + + https://www.clarin.eu/componentregistry + + + + + + + + + + Ariadne Project + + + + + + + Component Registry Dataset + + + + + + + + + + + + + achille.felicetti@gmail.com + + + + + Sara Di Giorgio + + + + Condition of Use Rights for ICCD RA Thesaurus for archaeological objects + + + + + + + + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + + + + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + + + + + Creation of EHRI Portal Dataset + + + + + + + + + + + + + PICO application profile + + + + http://www.dyas-net.gr/?lang=en + + + + Clarin Concept Registry Dataset + + + + + The library's holdings amount to some 700,000 mondern and contemporary books, pamphlets and other printed documents, 80 incunabula, 2,000 editions from the 16th century, 8,000 maps, 850 manuscripts, and 2,000 autograph items. The 3,500 periodical titles (Italian and foreign, current and discontinued) and 400 newspapers (Italian and foreign, of which 90 are currently received) constitute one of the most important such collections to be found in Italy, those dating to the 19th century being especially noteworthy. + The core holdings are Parliamentary papers (from Italy and elsewhere) and scholarly publications relating to Law, Political Sciences, History of Political Thought, and History of Journalism. They are complemented by numerous special collections, each of which boasts items of historical interest or bibliographical rarity. Of these, the most remarkable are: holdings of the Statutes of Italian Comuni and other bodies, from the late Middle Ages until modern times; complete sets of legislation passed by the independent states that made up pre-unity Italy; publications relating to local and regional Italian history; and a significant body of early texts on civil and canon law. + + + + Senate of the Republic - Library + + + + full access to metadata / possible restriction for data + Condition of Use Rights for Isidore + + + + + + + + + + + + + DYAS Organizations and Collections Registries + + + + + + + CoCoon + CoCoON is a repository dedicated to oral resources, described in OLAC format (a specific extension of DC for oral resources) and frequently associated with transcriptions. + The CoCoON platform provides an OAI-PMH access to metadata as well as an access via a Triple Store using EDM (Europeana Data Model). + CoCoON provides also a long term preservation service for data based on Huma-Num’s service. The author and institution remains responsible for the submitted documents and can have restricted and secure access to their data for a defined period if the content of the information is considered sensitive. + + + + + + + + + + The National Infrastructure for Digital Research in the Humanities is implemented by a network of academic institutions, universities and research centers, which is established in order to contribute to the development of research in the Humanities using information technologies. The introduction of information management and digital research methods in the Humanities necessitated this initiative which will facilitate the use of methodological and technological standards, best practices, as well as the exchange of expertise and access to cognitive resources. + + + + + Dariah-GR Consortium + + + + + + + + + + + + 2010 + The LRE Map (Language Resources and Evaluation) is a large database of language resources dedicated to Natural language processing (NLP). Information is collected during the submission phase of conferences in the sector of NLP; those making submissions are asked to provide metadata describing the resources they have used. + + LRE Map + + + + + + Hélène Gautier + + + + + + 2011 + + The resources of the Index of CulturaItalia Portal are classified on the basis of a Thesaurus, a specialised dictionary, designed to manage and arrange diverse elements of information as well as information coming from different cataloguing systems. + + Thesaurus PICO + + + + FLaReNet project + + + + + + + + + + + + + + + + + + + + + + + + + + + + CNR ITABC + + + + + + + Cendari + + + + LLL + + + + + Internet Culturale, catalogues and digital collections from Italian libraries, is the portal providing access to the cultural heritage held by Italian public libraries and important cultural institutions. It is a multimedia web tool that allows both bibliographic information and the digital library to be viewed in the same virtual place. + For AriadnePlus: 925,791 results/ Documentary resources (66 sub-set) + + + Internet Culturale Dataset + + + + META-NET Network of Excellence + + + + + + The registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. + + + + + + + + + Dyas Catalogue Dataset + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Piemonte Region + + + + BISLAM + + + + + It contains collections made through census and inventory campaigns carried out with the support of the Piemonte Region on historical archives produced or preserved by various public and private subjects. + For AriadnePlus: 74.232 results/ Visual art works + + + Regione Piemonte Dataset + + + + http://www.cendari.eu + + + + + + + + + + Clarin-EU + + + + + + + + + + + + + + + + + + + Isidore Schema + + + + + Creation of MuseiD-Italia Dataset + + + + + + + + Creation of Regione Umbria Dataset + + + + MuseiD-Italia + + + + + Anastasia Falierou + + + + + + + + + + + + + http://git-trame.fefonlus.it/ + + + + + + + 15th century to the present + + + + + + + http://www.culturaitalia.it/oaiProviderCI/OAIHandler + + + + + Creation of Regione Piemonte Dataset + + + + + Creation of Polo Museale fiorentino Dataset + + + + https://www.ehri-project.eu/ + + + + + Huma-Num is a Very Large Facility which aims to facilitate the digital turn in humanities and social sciences. + + To perform this mission, Huma-Num is built on an original organisation. It organises a collective dialogue with communities via consortia accredited by Huma-Num and provides a technological infrastructure on a national and European scale based on a vast network of partners and operators. + + Through consortia of actors in scientific communities, Huma-Num favors the coordination of the collective production of corpora of sources (scientific recommendations, technological best practices). It also provides research teams in the Human and Social sciences with a range of utilities to facilitate the processing, access, storage and interoperability of various types of digital data. This set of shared services comprises the provision of a Grid of services, a platform for the unified access to data (ISIDORE) and long-term archival facilities. + + + + + + + Huma-num Consortium + + + + + + + + The available dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + + Cendari Dataset + + + + TRAME + + + + + + 2016 + + The ARIADNE Visual Media Service provides easy publication and presentation on the web of complex visual media assets. It is an automatic service that allows to upload visual media files on an ARIADNE server and to transform them into an efficient web format, making them ready for web-based visualization. + + + ARIADNE Visual Media Service + + + + + Marche Beni Culturali is a portal designed to provide to the public with a unique access tool based on the Regional Heritage Information System (SIRPaC), which integrates the various digital resources collected by the Region in its activities and offers a vision of the regional heritage. + For AriadnePlus: 73000 results/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Means of transport. + + + Regione Marche Dataset + + + + + + + + + + Regione Emilia Romagna Dataset + + + + After contact with the DCU team (http://www.dcu.gr/) + Condition of Use Rights for DYAS Software Registry + full access to metadata/ possible restriction for data of the analogue collections + Condition of Use Rights for DYAS Organizations and Collections Registries + + + + Visual Computing Lab - ISTI - CNR + + + + Archivio storico delle arti contemporanee Dataset + + + + + + + SISMEL + + + + + + + Ariadne Consortium + + + + Dariah EU + + + + + + Creation of BISLAM + + + + + + + ACDM + + + + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Calabria Region + + + + Condition of Use Rights for Virtual Language Observatory + + + + + + + + + + + + + + + + sara.digiorgio@beniculturali.it + + + + Institute for the History of the Italian Risorgimento + + + + Contemporary Age + + + + + + + IIT-CNR + + + + + + + + + Metashare Dataset + + + + + CulturaItalia is an ever-growing collaborative network of public and private institutions. The participant-driven project is intended to bring together various players in the fields of Italian cultural production and access, partners who will be able to contribute to the development of the portal and thus to improve the visibility of their contents and initiatives on a national and international level. Museums, archives, libraries and other cultural entities both public and private can participate by making contents organised into databases available, or by sending news regarding initiatives, organisations and activities. CulturaItalia manages a catalog – Index – which gathers and indexes the information provided by the partners, by means of metadata. The original data will remain on the website of the provider, to which the user is guided, via link, for a complete consultation. For example, in the case of a photograph in the Index, the preview image (thumbnail) is visible along with identifying data and a link to the providers website, where the user can visualise the photograph in its original format, accompanied by all the information and the services in order to get the full benefit of the item. In CulturaItalia there is a section devoted to open data (http://dati.culturaitalia.it), where the data are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search via SPARQL END POINT a datasets selection available in Linked Open Data format. + + + CulturaItalia Portal + + 2008 + + + + + + ICCU - CulturaItalia + + + + + + + + Elske Rotteveel + + + + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + + + + http://www.ariadne-infrastructure.eu/ + + + + Marche Culture Foundation + + + + + + + DIGITAL CURATION UNIT (Institute for the Management of Information Systems, Athena Research Centre) Aigialeias 48 & Epidavrou, 151 25 Maroussi, Greece + + + + + + + + + + + + + monica.monachini@ilc.cnr.it + + + + + + + http://cocoon.huma-num.fr + + + + Via Moruzzi 1, Pisa 56124 + + + + + + + Meta-Net Project + + + + + + Isidore Dataset + + + + + Selection of dataset related to Cultural Heritage + + + + + + http://vast-lab.org/thesaurus/ra/vocab/ + + + + + + + Società Geografica Italiana Dataset + + + + + Creation of Clarin Concept Registry Dataset + + + + Regione Calabria Dataset + + + + Condition of Use Rights for Component Registry + + + + CNR-OVI + + + + + Creation of Società Geografica Italiana Dataset + + + + Metashare + + + + + + + + CLARIN ERIC is the governing and coordinating body of CLARIN (Common Languages Resources and Technology Infrastructure). It is a consortium of ca. 20 countries and intergovernmental organisations (and counting), represented by their ministries + + + + Clarin-EU + + + + Landscape Services - 3D Terrain Service + + + + National Institute for Graphics (ING) + + + + + + + + + + TRAME is a metasearch tool for medieval manuscripts, hosted by the Fondazione Ezio Franceschini and SISMEL. It aims to assist users in finding primary sources for the study of medieval culture. Originally developed in 2011 to allow a combined search on a group of different Italian repositories and databases, it has increasingly widened its scope to become a global research infrastructure for all scholars of the Middle Ages. Its main aim is to build a research infrastructure that focuses on promoting interoperability and fostering discoverability among the different digital resources available in the medieval digital ecosystem. + + TRAME + + + + Marche Region + + + + Ancient Age + + + + CulturaItalia Portal + + + + + + + The Concept Registry can be accessed by anyone using a read-only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators. If you have such a request you should contact your national coordinator or, in case your country has not assigned one yet, send your request to ccr@clarin.eu. The coordinators will then discuss the request and get in touch with you about the handling of it. + Condition of Use Rights for Clarin Concept Registry + + + + + + + + + + afalierou@academyofathens.gr + + + + + + + Ariadne Project + + + + https://www.rechercheisidore.fr/api + + + + + + + + + + The CLARIN Component Metadata Infrastructure (CMDI) provides a framework to create and use self-defined metadata formats. It relies on a modular model of so-called metadata components, which can be assembled together, to improve reuse, interoperability and cooperation among metadata modelers. The CMDI Component Registry was created to promote the re-use and sharing of metadata components and profiles. The registry contains all CLARIN metadata components and metadata profiles used to describe all metadata. It is expected to contain around 1.000 components and around 200 profiles. Reuse of components and profiles is stimulated as much as possible. Components and profiles are linked to the concepts from CCR for interoperability reason. + + The component Registry has the following features: + Register and store CMDI components/profile + Enable a user to edit and create Components/Profile + Enable a user to browse and registered Components/Profile + + + + Component Registry + + + + Clarin Concept Registry + + + + + Charles Riondet + + + + + + + La Biennale di Venezia + + + + + + + http://www.meta-share.org + + + + + The Network is organised according to two main dimensions: + + in concentric circles, corresponding to the degree of involvement in the Network activities: + the core circle, composed by the Coordinator and the Work Packages Leaders, who form the Steering Committee; + the second circle, composed by the Network Partners appearing in the project proposal; + the third circle, composed by the Network Institutional Members, namely other organizations that may be useful to add during the life of the Network, which should be involved on a regular basis in activities, meetings and interactions (the flexibility of the Network composition is very important to cope with issues or requirements arising during the project; some companies and institutions have already expressed their interest to be part of the Network); + the fourth circle, composed by the Network Individual Subscribers; + in the Working Groups corresponding to the topical Work Packages described in the Work Plan; here the relevant dimension is the topic, which is the focus of each activity. + During the life of the Network, the Network Support Group appearing in the project proposal will be contacted for specific meetings, workshops and activities and will be able to provide feedback and advice. + + + + + FLaReNet + + + + + Emiliano Degl'Innocenti + + + + Senate of the Republic - Library + + + + + + + Greece + + + + + + + + + + Condition of Use Rights for Metashare + + + + + + + Instituto di Linguistica Computazionale «A. Zampolli» + + + + + + + + + + + + + Dyas Catalogue Dataset + + + + Prehistory + + + + ELRA + + + + Cendari Archival Directory + + + + + Nicolas Larrousse + + + + + + + + Collections of oral resources from different parts of the world (https://cocoon.huma-num.fr/exist/crdo/collections.xql) + + CoCoON Dataset + + + + + + + + 2010 + Metashare + + + + + META-SHARE is an open and secure network + of repositories for sharing and exchanging + language data, tools and related web services. + + + + + + + + Creation of SAN - Sistema Archivistico Nazionale Dataset + + + + + + + 2010 + Time Span of Project of Meta-Net Project + + + + Condition of Use Rights for ARIADNE Visual Media Service + + + + http://landscape.ariadne-infrastructure.eu/oc/ + + + + General Directorate for Archives (DGA) + + + + + Creation of Regione Emilia Romagna Dataset + + + + + + + Nakala + + + + http://www.flarenet.eu/ + + + + DYAS Software Registry + + + + Condition of Use Rights for Cendari + + + + + + + Considering the fact that many scientific data producers do not have the digital infrastructure to provide a persistent and interoperable access to their data, Huma-Num has implemented a new tool called “Nakala” to expose research data in order to facilitate their reuse. + Nakala provides mainly three types of services: a permanent identifier to the resource, a permanent access to the data and associated metadata and an exposition of metadata based on semantic web technologies and OAI-PMH server. + + + + Nakala + + + + + + + Regione Lombardia Dataset + + + + + Medieval Culture & WWI: Throughout the project, the CENDARI project team has worked on the establishment of an Archival Directory through the identification, description and cataloguing of archival holdings and other collections of value for research within the two project pilot areas – World War I and Medieval European Culture. A total of 168 Cultural Heritage Institutions were involved and the final + CENDARI Archive Directory contained approximately 830,000 datasets available for users. + By the end of the project, the number of archival descriptions established manually by the team was 3,107 (2,320 for the modern period and 787 for the medieval period) and the number of cultural heritage institutions described in the Archival Directory was 1,251. An overview of the approximately 830,000 datasets harvested by CENDARI. + + + + + + + Cendari Consortium + + + + 2010 + Time Span of Project of EHRI Project + + + + + + + + + + + + + Regione Marche Dataset + + + + + + Tue Mar 24 2015 18:00:00 GMT-0400 (EDT) + + The RA terminological tool, curated by ICCU and VAST-LAB, constitutes a reworked version of the RA Thesaurus issued by the ICCD. The RA Thesaurus provides all the necessary terminological facilities for an efficent and well structured recording of the object coming from archaeological excavations. The vocabulary has been implemented by ICCD to support the encoding of two specific fields (OGTD - CLS). These two fields describe the definition of the object and its class and production. + + ICCD RA Thesaurus for archaeological objects + + + + + + + Clarin-EU + + + + charles.riondet@inria.fr + + + + khalid.choukri@elra.fr + + + + + + + + + + + + + Condition of Use Rights for LRE Map + + + + http://clarin.eu/clarin-eric-datatables/centres + + + + + + + + + + Ariadne catalogue + + + + + Creation of Metashare Dataset + + + + + + + Condition of Use Rights for EHRI Portal + + + + + + + + + 2014/ until 2020 (?) + + + + DYAS Organizations and Collections Registries + + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + + + + + Component Registry + + + + EHRI Project + + + + + + + 2012 + Time Span of Project of Ariadne Project + + + + Condition of Use Rights for Thesaurus PICO + + + + + + + + + + + IreSud Portal - a regional level database that links the Museums of Calabria; This is a collection of works and information relating to museums of historical and demo-anthropological. + For AriadnePlus: 3.024 results/ Visual art works; Anthropological Heritage + + + Regione Calabria Dataset + + + + + + + Condition of Use Rights for MuseiD-Italia + + + + http://www.meta-share.org/ + + + + + Creation of LRE Map Dataset + + + + helene.gautier@huma-num.fr + + + + Antiquity + + + + + + + + + + CMDI + + + + LACITO + + + + + + + + + + Concepts used for semantic annotation of metadata schemas and their definitions + + Clarin Concept Registry Dataset + + + + Thesaurus PICO + + + + + + + EHRI Portal + + + + + + + OVI + + + + Magna Graecia + + + + + + + + + + + + + + Creation of Internet Culturale Dataset + + + + 2014 + Time Span of Project of DARIAH-GR/ΔΥΑΣ + + + + Condition of Use Rights for Landscape Services - Cloud Hosting + + + + + + + + + + The Archival Directory is a large database of archival descriptions and collections and is part of the CENDARI Virtual Research Environment. + It has a strong transnational focus and one of its aims is to include many archives and institutions which are little known or rarely used by researchers. The Archival Directory allows historians to view sources in a rarely seen transnational and comparative view. It is focused on archives and libraries containing resources on the Medieval era and World War One. + + + + Cendari Archival Directory + + + + Internet Culturale Dataset + + + + + Creation of Istituto Centrale per la Storia del Risorgimento Dataset + + + + + + + + Creation of Regione Calabria Dataset + + + + + + + + + CulturaItalia offers a thematic consultation of the Metadata Index, and in particular in the Cultural heritage thematic area, 2.268.000 items are available. In CulturaItalia there is a section devoted to the open data (http://dati.culturaitalia.it), where they are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search a datasets selection via SPARQL END POINT available in Linked Open Data format. CulturaItalia presents a section called MuseiD-Italia, dedicated to museums in which you can search and compare works from cultural collections of different Italian Institutes. + + ICCU - CulturaItalia + + + + http://www.huma-num.fr/ + + + + + The Central Institute for Graphics was born from the union of "Calcografia Nazionale" of Pontifical Heritage and of the National Printing Council. Since its foundation, the Institute has been gathering an ever-increasing number of matrices, xylograph, photographs and artist videos. It also preserves prints, drawings and engravings from the library of Prince Corsini. + + National Institute for Graphics (ING) + + + + https://www.clarin.eu/ + + + + Calabria Region + + + + + Lombardia Beni Culturali is the unified portal of the Lombardia cultural heritage. It includes the profiles of major culture institutes such as museums, archives and libraries, heritage catalogs, preserved heritage descriptions, architectural complexes and significant urban planning, historical archive resources, and thematic collections. + For AriadnePlus: 24.800 results/ Visual art works; Anthropological Heritage; Documentary resources; Works of applied arts; Instruments + + + Regione Lombardia Dataset + + + + + + + + Digital Library of the cultural heritage preserved in the Italian museums of various sectors; the digital library has a dedicated interface called 'MuseiD-Italia' integrated with the CulturaItalia Portal. + For AriadnePlus: 368 collections/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Natural Heritage; Literary works; Environmental and landscape Heritage; Means of transport; Installations + + + MuseiD-Italia Dataset + + + + LRE Map Dataset + + + + Nakala Dataset + + + + PICO Application Profile + + + + + + + Creation of Dyas Catalogue Dataset + + + + + + 2008 + + In the CulturaItalia Portal, importing metadata from external data sources occurs with mapping in one schema. This schema is expressed according to the Qualified Dublin Core standard, which has been further extended to define the PICO Application Profile (designed for the Portal) that includes a set of basic elements that can be used to describe any type of resource: Title, Creator, Subject, Description, Publisher, Contributor, Date, Type, Format, Identifier, Source, Language, Relation, Coverage, Rights, to which 3 additional elements have been added: Audience, Provenance, and RightsHolder. To these are added 18 additional elements, 33 element-refinement and a set of encodingschems (controlled ontologies or vocabularies). + + + PICO application profile + + + + + + Creation of CulturaItalia Portal Dataset + + + + Virtual Language Observatory + + + + Creative Commons CC0 1.0 Universal Public Domain Dedication + Condition of Use Rights for CulturaItalia Portal + + + + + The Foundation manages the Marche Cultural Heritage system on behalf of the Marche Region. Visual works and objects of memory, audiovisual documents and oral tradition, architectural monuments. + + Marche Culture Foundation + + + + + + + + + + + + + + + + + + + Cendari provides access to data through a SPARQL access point. The dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + + Cendari + + + + + + + A major condition for the take-off of the field of Language Resources and Language Technologies is the creation of a shared policy for the next years. + + FLaReNet aims at developing a common vision of the area and fostering a European strategy for consolidating the sector, thus enhancing competitiveness at EU level and worldwide. + + By creating a consensus among major players in the field, the mission of FLaReNet is to identify priorities as well as short, medium, and long-term strategic objectives and provide consensual recommendations in the form of a plan of action for EC, national organisations and industry. + + Through the exploitation of new collaborative modalities as well as workshops and meetings, FLaReNet will sustain international cooperation and (re)create a wide Language community. + + + FLaReNet project + + + + + + + ISIDORE is an aggregator that harvests more than 5 thousand sources from Humanities and Social Sciences and provides access to more than 5 million data. + Technically, ISIDORE uses OAI-PMH repositories to retrieve metadata and thereafter apply a full chain of processes (classification, enrichment, link resources with Semantic Web technologies etc.) + ISIDORE takes data in French, Spanish and English, enriches them in those three languages and provides also a multilingual web interface. + + + + Isidore + + + + akarasimos@academyofathens.gr + + + + Metashare Consortium + + + + + + 2014 + + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + + + DYAS Software Registry + + + + + + + The CLARIN Concept Registry (CCR) is an OpenSKOS instance, which implements the W3C SKOS recommendation and data model. The CLARIN Concept Registry (CCR) forms the basis of the semantic interoperability layer of CLARIN, especially in the context of metadata, i.e., the Component MetaData Infrastructure (CMDI ). It does so by offering a collection of concepts, identifiable by their persistent identifiers, relevant for the domain of language resources. This registry contains the relevant concepts (based on the corresponding ISOcat data categories), such as those used by CMDI. The Concept Registry can be accessed by anyone using a read only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators, whose mission is to improve the quality of the concepts used within CLARIN. + + + Clarin Concept Registry + + + + Condition of Use Rights for PICO application profile + + + + + The General Directorate for Archives, in accordance with the Code of Cultural Heritage and Landscape and within the guidelines specified by the Ministry, promotes and coordinates activities related to the conservation, protection and enhancement of national archival heritage. + + General Directorate for Archives (DGA) + + + + + + + + + The Senate Library's heritage, about 600,000 volumes, is made up of several collections that have developed over the years through targeted acquisitions and donations of particularly valuable funds by senators and scholars. Local statute and local history databases contain texts - manuscripts and prints of communes, corporations, confraternities and associations, selected among the most significant in the Senate Library's collection of content, rarity, or elegance of the edition. The local history database includes the bibliographic descriptions of about 1,200 ancient editions of Italian local history edited between 1500 and 1861. + For AriadnePlus: 90.568 results/ Visual art works; Documentary resources + + + Biblioteca del Senato Dataset + + + + + + + + + + CIDOC-CRM + + + + + + + + + + Biblioteca del Senato Dataset + + + + + + + + + CalcoGRAFICA is the system that publishes the digital collections of the Central Institute for Graphics (ING) on the web and offers a full overview of the history of the image through engraved prints and matrices, drawings and photographs along a chronological period from the 15th century to the present. + For AriadnePlus: 23.740 results/ Visual art works; Documentary resources + + + Istituto Nazionale per la Grafica Dataset + + + + + + + + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sampleNoRiot.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sampleNoRiot.rdf new file mode 100644 index 0000000..9eb71a9 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/sampleNoRiot.rdf @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + https://github.com/AriadnePlusWP4/SSK/blob/master/spec/TEI_SSK_ODD.xml + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/test.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/test.rdf new file mode 100644 index 0000000..9c6ccde --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/test.rdf @@ -0,0 +1,25 @@ + + + + + + Main Hosting for Online Personal Exploration and Navigation of SoNaR + + + + + + + + Institute for Dutch Lexicology (Instituut voor Nederlandse Lexicologie, INL) + + + + + 31 (0)715272276 + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/testwp8.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/testwp8.rdf new file mode 100644 index 0000000..2559078 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/testwp8.rdf @@ -0,0 +1,28 @@ + + + + + + + Special Interest Group AudioVisual Material in Digital Humanities + + Associations, consortia and committees + + + Special Interest Group AudioVisual Material in Digital Humanities + AVinDH SIG + + + Contact Page + + + https://avindhsig.wordpress.com/ + + + https://avindhsig.wordpress.com/contact/ + + + diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/withProviders.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/withProviders.rdf new file mode 100644 index 0000000..d2c3dde --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/registry/withProviders.rdf @@ -0,0 +1,33 @@ + + + + + + + Cendari provides access to data through a SPARQL access point. The dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + + + Cendari Sparql Endpoint + + + + + + + + SISMEL + S.I.S.M.E.L. is a leader in national and international research projects in the field of medieval culture and one of the most advanced research centers in Italy for the creation of innovative applications in digital humanities, including: bibliographic and onomastic databases, catalogues of authors, texts and manuscripts, tools for research data discoverability, interoperability and semantic integration and enrichment. + SISMEL + + + + + + + + EHRI Consortium + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/sparql/longQuery.sparql b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/sparql/longQuery.sparql new file mode 100644 index 0000000..9b54965 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/sparql/longQuery.sparql @@ -0,0 +1,100 @@ +DEFINE input:inference 'ariadneplus_rules' + +CONSTRUCT { + crm:P1_is_identified_by ?title . + crm:P3_has_note ?description . + a ?type . + crmpe:PP2_provided_by ?provider . +?provider crm:P1_is_identified_by ?providerTitle . +?provider crm:P3_has_note ?providerDescr . +?provider crm:P76_has_contact_point ?contactpoint . +?contactpoint crm:P2_has_type ?contactpointType . +?contactpoint rdfs:label ?contactpointLabel . +?contactpointType rdfs:label ?contactpointTypeLabel . + crmpe:PP28_has_designated_access_point ?accesspoint . + crmpe:PP1i_is_currently_offered_by ?offerer . + crmpe:PP45_has_competency ?competency . + crmpe:PP4_hosts_object ?object . + crmpe:PP31_uses_curation_plan ?curationplan . + crmpe:PP32_curates ?object2 . + crmpe:PP6_hosts_digital_object ?object3 . + crmpe:PP7_hosts_software_object . + crmpe:PP8_hosts_dataset ?dataset . + crmpe:PP29_uses_access_protocol ?protocol . + crmpe:PP47_has_protocol_type ?protocoltype . + crmpe:PP48_uses_protocol_parameter ?protocolparam . + crmpe:PP46_brokers_access_to ?brokered . + crmpe:PP11_curates_volatile_digital_object ?curatedObj . + crmpe:PP12_curates_volatile_software ?curatedSw . + crmpe:PP13_curates_volatile_dataset ?curatedData . + crmpe:PP15_delivers_on_request ?delivered . + +} +WHERE { + a crmpe:PE1_Service . + a ?type . +OPTIONAL { + crm:P1_is_identified_by ?titleRes . + ?titleRes rdfs:label ?title . +} +OPTIONAL{ + crm:P3_has_note ?description . +} + OPTIONAL{ + crmpe:PP2_provided_by ?provider . +} +OPTIONAL { + crmpe:PP2_provided_by ?provider . + ?provider crm:P1_is_identified_by ?providerTitleRes . + ?providerTitleRes rdfs:label ?providerTitle . +} +OPTIONAL { + crmpe:PP2_provided_by ?provider . + ?provider crm:P3_has_note ?providerDescr . +} +OPTIONAL { + crmpe:PP2_provided_by ?provider . + ?provider crm:P76_has_contact_point ?contactpoint . +?contactpoint rdfs:label ?contactpointLabel . +} +OPTIONAL { + crmpe:PP2_provided_by ?provider . + ?provider crm:P76_has_contact_point ?contactpoint . + ?contactpoint crm:P2_has_type ?contactpointType . +?contactpointType rdfs:label ?contactpointTypeLabel .} +OPTIONAL { + crmpe:PP28_has_designated_access_point ?accesspoint .} +OPTIONAL { + crmpe:PP1i_is_currently_offered_by ?offerer .} +OPTIONAL { + crmpe:PP45_has_competency ?competency .} +OPTIONAL { + crmpe:PP4_hosts_object ?object .} +OPTIONAL { + crmpe:PP31_uses_curation_plan ?curationplan .} +OPTIONAL { + crmpe:PP32_curates ?object2 .} +OPTIONAL { + crmpe:PP6_hosts_digital_object ?object3 .} +OPTIONAL { + crmpe:PP7_hosts_software_object .} +OPTIONAL { + crmpe:PP8_hosts_dataset ?dataset .} +OPTIONAL { + crmpe:PP29_uses_access_protocol ?protocol .} +OPTIONAL { + crmpe:PP47_has_protocol_type ?protocoltype .} +OPTIONAL { + crmpe:PP48_uses_protocol_parameter ?protocolparam .} +OPTIONAL { + crmpe:PP46_brokers_access_to ?brokered .} +OPTIONAL { + crmpe:PP11_curates_volatile_digital_object ?curatedObj .} +OPTIONAL { + crmpe:PP12_curates_volatile_software ?curatedSw .} +OPTIONAL { + crmpe:PP13_curates_volatile_dataset ?curatedData .} +OPTIONAL { + crmpe:PP15_delivers_on_request ?delivered .} + +} \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/data.ttl b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/data.ttl new file mode 100644 index 0000000..e914d43 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/data.ttl @@ -0,0 +1,21 @@ +@prefix : . +@prefix foaf: . + +:alice + a foaf:Person ; + foaf:name "Alice" ; + foaf:mbox ; + foaf:knows :bob ; + foaf:knows :charlie ; + foaf:knows :snoopy ; + . + +:bob + foaf:name "Bob" ; + foaf:knows :charlie ; + . + +:charlie + foaf:name "Charlie" ; + foaf:knows :alice ; + . diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test.rdf new file mode 100644 index 0000000..e79e83e --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test.rdf @@ -0,0 +1,234 @@ + + + + + + Pesaro + + + + + http://vocab.getty.edu/aat/300178243 + + + ex-votos (religious visual works) + + + + + + + + Regione Calabria + + + + + + + + + + + + Technical Responsible + Legal Responsible + Creator + Contributor + publisher + + + + + + + http://registry.ariadne-infrastructure.eu/dataset/25058478 + + + + + + + Access Rights + + + Creative Commons CC0 1.0 Universal Public Domain Dedication + + + + + + + + + + + Access Policy + + + http://www.culturaitalia.it/opencms/aderisci_al_portale_en.jsp?language=en&tematica=static + + + + + + + ex voto + + + + ex voto + + + + + + http://registry.ariadne-infrastructure.eu/collection/22391628 + + + STCC=integro + + + ex voto + + + + + + + + + + + + + http://sirpac.cultura.marche.it/web/Ricerca.aspx?ids=91961 + + + + + + + + + Original ID + + + + + + + + Artefact databases or image collections + + + + + MISA=8.5; MISL=5.5; MISP=2.5 + + + + + + + + + + + + + ARIADNE Content Legal Responsibility + ARIADNE Content Creation + ARIADNE Content Contribution + ARIADNE Content Provision + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organization + + + + + MIBACT-ICCU - Central Institute of the Union Catalogue + + + MIBACT-ICCU - Central Institute of the Union Catalogue + + + + + + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_less_data.rdf b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_less_data.rdf new file mode 100644 index 0000000..41b1122 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_less_data.rdf @@ -0,0 +1,57 @@ + + + + + + + Regione Calabria + + + + + + + + + + + + Technical Responsible + Legal Responsible + Creator + Contributor + publisher + + + + + + + http://registry.ariadne-infrastructure.eu/dataset/25058478 + + + \ No newline at end of file diff --git a/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_record_plain.xml b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_record_plain.xml new file mode 100644 index 0000000..d413809 --- /dev/null +++ b/dnet-ariadneplus-publisher/test/main/resources/eu/dnetlib/parthenos/virtuoso/test_record_plain.xml @@ -0,0 +1,2652 @@ + + + + ariadneplus___::8d777f385d3dfec8815d20f7496026dc + data + 2017-08-10T16:58:21.472+02:00 + ariadneplus___ + ARIADNEPLUS + api_________::ariadneplus___::ariadneplus::topLevel + 2017-08-10T16:58:30.086 + + + + + FOAF + + + + Clarin Centres Registry + + + + Umbria Region + + + + + The Italian Dictionary (OVI-Opera del Vocabolario Italiano) is an Institute of the CNR with the institutional task of compiling an historical dictionary of the Italian language. At present the researchers of the OVI are working on the first section of this dictionary, called Tesoro della Lingua Italiana delle Origini (TLIO), i.e. “Thesaurus of the oldest Italian language”. + The present-day activity of the OVI is the continuation of a project started by the Accademia della Crusca in 1965 with funding from the CNR. This project, a new historical dictionary of Italian, was to be the heir of the glorious Vocabolario degli Accademici, but with the difference that it would not be prescriptive (i.e. proposing a model for how language should be used), but historically descriptive (i.e. offering documentation of the vocabulary of Italian in the course of its history). From the beginning, the Accademia della Crusca decided to make use of computers to manage the documentation, a method then to a large extent unknown in the lexicographical tradition. + The principal activities are: + • the compilation of the Tesoro della Lingua Italiana delle Origini (TLIO) + • the development, necessary for the dictionary work, of the database of Old Italian texts + • the development of software for lexicographical and linguistic purposes + + CNR-OVI + + + + + + + EAD + + + + + + + + + + + + + + + + http://www.culturaitalia.it/ + + + + + + + + The Uffizi Galleries preserves inventories and extensive documentation on museum art works managed by MiBACT. The main inventories offer a complete historical and iconographic documentation of works of art preserved in Galleries museums. + For AriadnePlus: 15.400 results/ Visual art works; Documentary resources; Works of applied arts; Instruments; Architectural Heritage + + Polo Museale fiorentino Dataset + + + + + + + DM2E + + + + + + + Creation of CoCoON Dataset + + + + + Creation of Istituto Nazionale per la Grafica Dataset + + + + Ministry for Cultural Heritage and Activities and Tourism (MiBACT) + + + + + + + + META-NET, a Network of Excellence consisting of 60 research centres from 34 countries, + is dedicated to building the technological foundations of a multilingual European information society. + META-NET is forging META, the Multilingual Europe Technology Alliance. + + + + + META-NET Network of Excellence + + + + http://www.culturaitalia.it/opencms/museid/index_museid.jsp?language=it&tematica=header&selected=0 + + + + + The Ministry of Cultural Heritage, Activities and Tourism, MiBACT, is responsible for the valorisation of culture, and the preservation of artistic and cultural heritage, landscape and tourism policies. + + + + + Ministry for Cultural Heritage and Activities and Tourism (MiBACT) + + + + ARIADNE Visual Media Service + + + + Landscape Services - Cloud Hosting + + + + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/documenti/picoap/picoap1.0.xml + + + + + + + + Creation of Regione Marche Dataset + + + + Condition of Use Rights for Ariadne catalogue + + + + + + + Creation of Cendari Dataset + + + + + + + + + + + The Italian Geographic Society is a moral entity whose object is to promote the advancement of geographic knowledge, scientific research and to develop its dissemination through the organization of conferences and study trips. It was founded on May 12, 1867 in Florence as a free association and in 1869 it was recognized as a moral entity. + + + Italian Geographic Society Onlus + + + + Uffizi Galleries + + + + + CulturaItalia Portal Dataset + + + + + CulturaItalia is the Portal of Italian Culture, managed by the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), in which are involved cultural institutions from all sectors and levels (national, regional and local). CulturaItalia, as national aggregator, plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. CulturaItalia presents an integrated Digital Library, named MuseiD-Italia, with the most important digital collections of the Italian museums. CulturaItalia offers a thematic consultation of the Metadata Index and in the sectors of Visual art works, Anthropological Heritage; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Instruments and Means of transport. Currently we selected for AriadnePlus project about 2.200.000 cultural items (objects) and 368 Collections( from MuseiD-Italia). + + + + + + FLaReNet + + + + + Athanasios Karasimos + + + + Metashare Dataset + + + + Lombardia Region + + + + http://registries.dyas-net.gr/en + + + + + + + Academy of Athens (DYAS Team) Anagnostopoulou 14, 10673 Athens + + + + + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + + ICCU + + + + CoCoon + + + + + + Creation of Clarin Virtual Language Observatory Dataset + + + + + + + + + + + + + + + + ILC-ELRA + + + + + + + http://landscape.ariadne-infrastructure.eu/vpb-service.php + + + + + + + EDM + + + + + + + Cendari + + + + DARIAH-IT resources registry + + + + + + + Via di Castello, 46, + 50141 Firenze + + + + + + ILC-CNR + + + + http://www.dariah.eu/ + + + + + One of the most famous museums in the world, the Uffizi Gallery boasts exceptional collections of paintings and ancient sculptures. The invaluable collection of statues and busts adorning the corridors was gathered by the Medici family and is made up of Roman copies after lost Greek originals. Originally built to host the administrative offices of the Medici's government, today the Gallery is located on the last floor of the imposing building constructed between 1560 and 1580 after a design by Giorgio Vasari. In the Uffizi Galleries manages also the Department of Prints and Drawings; Uffizi Library and Digital Archives. + + Uffizi Galleries + + + + + The Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) was born in 1974 as an instrument for regional planning and local council consultancy in the field of cultural heritage. The Institute promotes the valorisation and restoration of the historical and artistic heritage, the protection, valorisation and preservation of historical centers, by providing its advice to the Region and local authorities. + + + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + + + + 2008 + Time Span of Project of ICCU - CulturaItalia + + + + + + + + + + + + + + Achille Felicetti + + + + + + + + + + + + + + + + CLARIN Centres, their capabilities (especially available endpoints), as well as responsible persons + + Clarin Centres Registry Dataset + + + + Cendari + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Lombardia Region + + + + + + + + + + https://archives.cendari.dariah.eu/ + + + + + + + + + + + + + + + + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Marche Region + + + + + + + + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. + + + + + EHRI Consortium + + + + CulturaItalia Portal Dataset + + + + Regione Piemonte Dataset + + + + + + + + + + + + + + + + DARIAH-GR/ΔΥΑΣ + + + + + + + Creation of Nakala Dataset + + + + + + + CMD profiles (/metadata schemas) + + Component Registry Dataset + + + + + Creation of Archivio storico delle arti contemporanee Dataset + + + + Sun Aug 31 2008 17:00:00 GMT-0400 (EDT) + Time Span of Project of FLaReNet project + + + + + + + + + + + + + + + + + Selection of dataset related to Cultural Heritage + + + Nakala Dataset + + + + + + ICCU + + + + + Creation of Regione Lombardia Dataset + + + + + Ariadne Consortium + + + ARIADNE brings together and integrates existing archaeological research data infrastructures so that researchers can use the various distributed datasets and new and powerful technologies as an integral component of the archaeological research methodology. There is now a large availability of archaeological digital datasets that, together, span different periods, domains and regions; more are continuously created as a result of the increasing use of IT. These are the accumulated outcome of the research of individuals, teams and institutions, but form a vast and fragmented corpus and their potential has been constrained by difficult access and non-homogenous perspectives. + + + + + + + + + + + + + + + + Meta-Net Project + + + + ICCU Vast-LAB + + + + + + 2016 + + You can use this service to process DEM, geo-images and shapefiles to produce large 3D terrain Datasets optimised for real-time visualization and web streaming. + + Landscape Services - 3D Terrain Service + + + + maurizio.sanesi@virgilio.it + + + + 1500-1861 + + + + Condition of Use Rights for Landscape Services - 3D Terrain Service + + + + + + Creation of Isidore Dataset + + + + EHRI Consortium + + + + Clarin Virtual Language Observatory Dataset + + + + 2008 + Time Span of Project of Clarin-EU + + + + + + + + + + EHRI Portal Dataset + + + + + + + + BISLAM (Bibliotheca Scriptorum Latinorum Medii Recentiorisque Aevi),is a series of onomastic, biographical, bibliographic and historical-literary repertoires of mediolatine literature. + + BISLAM + + + + Ariadne Catalogue Dataset + + + + + + + + + + + + + + + Creation of Ariadne Catalogue Dataset + + + + + + + Cendari Consortium + + + + ICCD RA Thesaurus for archaeological objects + + + + + + + + + + Dimitris Gavrilis + + + + Clarin Centres Registry Dataset + + + + + + The archive of the Institute for the History of the Italian Risorgimento - located in Rome in the Vittoriano complex - preserves a complex of extremely diverse documents in which it is possible to identify different archives and funds. The vast artistic and documentary heritage is one of the main sources for studying Italy and the international context from the mid 18th century to the end of the First World War. + For AriadnePlus: 50.530 results/ Visual art works; Documentary resources; Works of applied arts + + Istituto Centrale per la Storia del Risorgimento Dataset + + + + Condition of Use Rights for Cendari Archival Directory + + + + + + + Piemonte Region + + + + + + + + + + SAN - Sistema Archivistico Nazionale Dataset + + + + + La Biennale di Venezia was founded in 1895 and it is now one of the most famous and prestigious cultural organizations in the world. La Biennale, who stands at the forefront of research and promotion of new contemporary art trends, organizes exhibitions and research in all its specific sectors: Arts (1895), Architecture (1980), Cinema (1932), Dance (1999), Music (1930), and Theatre (1934). Its history is documented at the Historical Archives of Contemporary Arts (Asac) that recently has been completely renovated. + + + La Biennale di Venezia + + + + DCTerms + + + + + + + DARIAH-IT resources registry + + + + + The Photographic Archive of the Italian Geographic Society (SGI) represents a great value in the national scenario. The Archive collects about 400,000 phototypes (positive, negative, slides, postcards), many of which combine documentary value with an intrinsic artistic value. This is mostly rare, often unpublished materials. The oldest collection dates back to 1866, while the latest acquisitions reveal contemporaryity. + For AriadnePlus: 23.000 results/ Visual art works + + Società Geografica Italiana Dataset + + + + + + + https://vlo.clarin.eu/ + + + + MuseiD-Italia Dataset + + + + + ASAC dati is a database system for the management of information related to the ASAC collections. At present, the database manages data concerning the Film Library, part of the Photo Library, and the Venice Film Festival. + In the future, the project aims to include information concerning the other collections of the Biennale Archives, alongside bibliographic, historical and scientific records. + For AriadnePlus: 100.632 results/ Visual art works; Documentary resources + + Archivio storico delle arti contemporanee Dataset + + + + Huma-num Consortium + + + + TGIR HUMA-NUM -UMS 3598 + 54 boulevard Raspail + 75006 Paris + + + + Condition of Use Rights for Clarin Centres Registry + + + + http://portal.ariadne-infrastructure.eu/ + + + + + + + + + + A beta version of the ARIADNE portal is available at http://portal.ariadne-infrastructure.eu/. The portal brings together existing archaeological research datasets from ARIADNE partners so that researchers can browse and access the various distributed datasets for use in their projects. + + + Ariadne catalogue + + + + THEMAS Humanities Thesauri + + + + + The Institute for the History of the Italian Risorgimento has the task of promoting and facilitating the studies of the Italian history from the period of Unity and Independence of Italy until the end of the First World + War. The Institute aims at gathering documents, publications and memorabilia, editing sources and memoirs, also by organizing scientific congresses. + + + Institute for the History of the Italian Risorgimento + + + + + Khalid Choukri + + + + http://visual.ariadne-infrastructure.eu/ + + + + + The Institute for Computational Linguistics “A. Zampolli” (ILC) is a centre of reference in the field of Computational Linguistics at both national and international levels. The Institute is part of the Department of Social Science and Humanities, Cultural Heritage (DSU) (link is external) of the Italian National Research Council (CNR) (link is external) and carries out research activities in strategic scientific areas of the discipline, as well as publishing activities, training and education activities and technology transfer. + + Instituto di Linguistica Computazionale «A. Zampolli» + + + + + + + A collection of archaeological datasets from across Europe. + + Ariadne Catalogue Dataset + + + + + + + LRE Map + + + + + + + + + + + PatER – Catalogue of the Cultural Heritage of Emilia-Romagna, is the portal that combines and integrates the digital resources created by the IBC (Institute for Cultural and Natural Art of the Emilia-Romagna Region) in its activities of valorisation, cataloging , preservation and development of the regional system of museums and cultural collections, making it visible and accessible not only to specialists, but to anyone who is browsing the web. + For AriadnePlus: 37.197 results/ Visual art works; Documentary resources + + Regione Emilia Romagna Dataset + + + + + + + full access to metadata / possible restriction for data + Condition of Use Rights for CoCoon + + + + + + + + + + + + + + + + + S.I.S.M.E.L. is a leader in national and international research projects in the field of medieval culture and one of the most advanced research centers in Italy for the creation of innovative applications in digital humanities, including: bibliographic and onomastic databases, catalogues of authors, texts and manuscripts, tools for research data discoverability, interoperability and semantic integration and enrichment. + + + + + SISMEL + + + + + DARIAH is a pan-european infrastructure for arts and humanities scholars working with ICT-enabled methods. It supports digital research as well as the teaching of digital research methods. + + Dariah EU + + + + CoCoON Dataset + + + + Cendari Dataset + + + + Istituto Nazionale per la Grafica Dataset + + + + + + + + + Huma-Num + + + + http://www.resourcebook.eu/lremap/owl/instances/ + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Umbria Region + + + + Contemporary Period + + + + + + 2015 + + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + + + EHRI Portal + + + + + + Sismel + + + + Condition of Use Rights for TRAME + + + + + Creation of Component Registry Dataset + + + + + + + CLARIN Centres Registry is the primary starting/entry point into the CLARIN universe. It is the authoritative source of approved CLARIN Centres including information about the contact and the different available endpoints. Other parts of the infrastructure (especially the harvester) consult this registry to find out about (discover) existing centres and the endpoints they feature. + + Clarin Centres Registry + + + + + + 2012 + + The Digital Library MuseiD-Italy is integrated in CulturaItalia, it contains the digital collections of Italian museums; MuseiD-Italia contains about 70,000 items included in 685 collections and 6380 museums. + + + MuseiD-Italia + + + + + Maurizio Sanesi + + + + Modern Period + + + + DARIAH-GR/ΔΥΑΣ + + + + + + Creation of DARIAH-IT resources registry + + + + + + + Eleni Vernardaki + + + + Modern Age + + + + + The Portal UmbriaCultura integrates different types of resources: Museums, Archaeological Sites, Villas and Gardens, Rocche and Castles, Historical Theaters, Libraries, Historical Archives. + For AriadnePlus: 5.400 results/ Visual art works + + Regione Umbria Dataset + + + + + + + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. Apart from providing an online platform, EHRI also facilitates an extensive network of researchers, archivists and others to increase cohesion and co-ordination among practitioners and to initiate new transnational and collaborative approaches to the study of the Holocaust. + + EHRI Project + + + + emiliano.degli.innocenti@gmail.com + + + + + + + The available archive files contain over 900000 datasets (language resources, tools, lexicons, corpora): XML files CLARIN harvested, in CLARIN format (CMDI, http://www.clarin.eu/cmd/), organised in one folder per content provider. These are description of datasets (e.g. linguistic corpora) and tools. + + Clarin Virtual Language Observatory Dataset + + + + + + + + + + + + + + + + + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + + EHRI Portal Dataset + + + + Huma-num + + + + Isidore Dataset + + + + Italian Geographic Society Onlus + + + + http://git-trame.fefonlus.it/sparql/ + + + + + + + Isidore + + + + + + + + Creation of Clarin Centres Registry Dataset + + + + + + + + It is the unified access point to national archival resources made available on the web by national, regional and local information systems, databases and digital search tools developed by the State, Regions and other public and private entities. + For AriadnePlus: 754.889 results/ Archival Heritage + (15 sub-set) + + SAN - Sistema Archivistico Nazionale Dataset + + + + + + 2016 + + This is the main service to access, manage and eventually share your online data. This includes DEM input data, Geo-images, 3D models, etc. + + + Landscape Services - Cloud Hosting + + + + + Monica Monachini + + + + + + + + LRE Map is a mechanism intended to monitor the use and creation of language resources by collecting information on both existing and newly-created resources during the submission process. It is a collective enterprise of the LREC community, as a first step towards the creation of a very broad, community-built, Open Resource Infrastructure. It is meant to become an essential instrument to monitor the field and to identify shifts in shifts in the production, use, and evaluation of LRs and LTs over the years. + + LRE Map Dataset + + + + + + DCU + + + + Polo Museale fiorentino Dataset + + + + Clarin-EU + + + + + + + Dariah-GR Consortium + + + + Huma-Num + + + + + + + + + + + + + + + + Nicolas.Larrousse@huma-num.fr + + + + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/thesaurus/4.3/thesaurus_4.3.0.skos.xml + + + + + + + e.rotteveel@niod.knaw.nl + + + + www.nakala.fr + + + + + + + The Virtual Language Observatory (VLO) faceted browser was developed within CLARIN as a means to explore linguistic resources, services and tools available within CLARIN and related communities. All information in the VLO faceted browser is based on the metadata descriptions of resources as provided by the parties (CLARIN centers ) that host the original data. It gets refreshed regularly but may not be completely up-to-date with the current state of the original data and metadata depending on the date, time and state of the metadata providing/retrieval process (OAI-PMH is employed). + The VLO wants to help researchers to easily find suitable language resources and tools to carry out their research work. They can do this by searching, browsing and navigating geographically. Once they have found a useful resource they can then easily find tools, which may work on it. The purpose is that users may directly access the resources or services they have found, given they have the necessary permissions. + + + Virtual Language Observatory + + + + + + + + Creation of Biblioteca del Senato Dataset + + + + full access to metadata / possible restriction for data + Condition of Use Rights for Nakala + + + + + + + + + + https://www.clarin.eu/conceptregistry/ + + + + Dublin Core + + + + Regione Umbria Dataset + + + + + + + + + + OLAC + + + + Nakala Schema + + + + https://portal.ehri-project.eu/ + + + + + + + Istituto Centrale per la Storia del Risorgimento Dataset + + + + + + + Middle Ages + + + + provided by DCU + + + + https://www.clarin.eu/componentregistry + + + + + + + + + + Ariadne Project + + + + + + + Component Registry Dataset + + + + + + + + + + + + + achille.felicetti@gmail.com + + + + + Sara Di Giorgio + + + + Condition of Use Rights for ICCD RA Thesaurus for archaeological objects + + + + + + + + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + + + + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + + + + + Creation of EHRI Portal Dataset + + + + + + + + + + + + + PICO application profile + + + + http://www.dyas-net.gr/?lang=en + + + + Clarin Concept Registry Dataset + + + + + The library's holdings amount to some 700,000 mondern and contemporary books, pamphlets and other printed documents, 80 incunabula, 2,000 editions from the 16th century, 8,000 maps, 850 manuscripts, and 2,000 autograph items. The 3,500 periodical titles (Italian and foreign, current and discontinued) and 400 newspapers (Italian and foreign, of which 90 are currently received) constitute one of the most important such collections to be found in Italy, those dating to the 19th century being especially noteworthy. + The core holdings are Parliamentary papers (from Italy and elsewhere) and scholarly publications relating to Law, Political Sciences, History of Political Thought, and History of Journalism. They are complemented by numerous special collections, each of which boasts items of historical interest or bibliographical rarity. Of these, the most remarkable are: holdings of the Statutes of Italian Comuni and other bodies, from the late Middle Ages until modern times; complete sets of legislation passed by the independent states that made up pre-unity Italy; publications relating to local and regional Italian history; and a significant body of early texts on civil and canon law. + + + Senate of the Republic - Library + + + + full access to metadata / possible restriction for data + Condition of Use Rights for Isidore + + + + + + + + + + + + + DYAS Organizations and Collections Registries + + + + + + + CoCoon + CoCoON is a repository dedicated to oral resources, described in OLAC format (a specific extension of DC for oral resources) and frequently associated with transcriptions. + The CoCoON platform provides an OAI-PMH access to metadata as well as an access via a Triple Store using EDM (Europeana Data Model). + CoCoON provides also a long term preservation service for data based on Huma-Num’s service. The author and institution remains responsible for the submitted documents and can have restricted and secure access to their data for a defined period if the content of the information is considered sensitive. + + + + + + + + + The National Infrastructure for Digital Research in the Humanities is implemented by a network of academic institutions, universities and research centers, which is established in order to contribute to the development of research in the Humanities using information technologies. The introduction of information management and digital research methods in the Humanities necessitated this initiative which will facilitate the use of methodological and technological standards, best practices, as well as the exchange of expertise and access to cognitive resources. + + + + + Dariah-GR Consortium + + + + + + + + + + + + 2010 + The LRE Map (Language Resources and Evaluation) is a large database of language resources dedicated to Natural language processing (NLP). Information is collected during the submission phase of conferences in the sector of NLP; those making submissions are asked to provide metadata describing the resources they have used. + + LRE Map + + + + + + Hélène Gautier + + + + + + 2011 + + The resources of the Index of CulturaItalia Portal are classified on the basis of a Thesaurus, a specialised dictionary, designed to manage and arrange diverse elements of information as well as information coming from different cataloguing systems. + + Thesaurus PICO + + + + FLaReNet project + + + + + + + + + + + + + + + + + + + + + + + + + + + + CNR ITABC + + + + + + + Cendari + + + + LLL + + + + + Internet Culturale, catalogues and digital collections from Italian libraries, is the portal providing access to the cultural heritage held by Italian public libraries and important cultural institutions. It is a multimedia web tool that allows both bibliographic information and the digital library to be viewed in the same virtual place. + For AriadnePlus: 925,791 results/ Documentary resources (66 sub-set) + + Internet Culturale Dataset + + + + META-NET Network of Excellence + + + + + + The registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. + + + + + + + + + Dyas Catalogue Dataset + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Piemonte Region + + + + BISLAM + + + + + It contains collections made through census and inventory campaigns carried out with the support of the Piemonte Region on historical archives produced or preserved by various public and private subjects. + For AriadnePlus: 74.232 results/ Visual art works + + Regione Piemonte Dataset + + + + http://www.cendari.eu + + + + + + + + + + Clarin-EU + + + + + + + + + + + + + + + + + + + Isidore Schema + + + + + Creation of MuseiD-Italia Dataset + + + + + + + + Creation of Regione Umbria Dataset + + + + MuseiD-Italia + + + + + Anastasia Falierou + + + + + + + + + + + + + http://git-trame.fefonlus.it/ + + + + + + + 15th century to the present + + + + + + + http://www.culturaitalia.it/oaiProviderCI/OAIHandler + + + + + Creation of Regione Piemonte Dataset + + + + + Creation of Polo Museale fiorentino Dataset + + + + https://www.ehri-project.eu/ + + + + + Huma-Num is a Very Large Facility which aims to facilitate the digital turn in humanities and social sciences. + + To perform this mission, Huma-Num is built on an original organisation. It organises a collective dialogue with communities via consortia accredited by Huma-Num and provides a technological infrastructure on a national and European scale based on a vast network of partners and operators. + + Through consortia of actors in scientific communities, Huma-Num favors the coordination of the collective production of corpora of sources (scientific recommendations, technological best practices). It also provides research teams in the Human and Social sciences with a range of utilities to facilitate the processing, access, storage and interoperability of various types of digital data. This set of shared services comprises the provision of a Grid of services, a platform for the unified access to data (ISIDORE) and long-term archival facilities. + + + + + + Huma-num Consortium + + + + + + + + The available dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + + Cendari Dataset + + + + TRAME + + + + + + 2016 + + The ARIADNE Visual Media Service provides easy publication and presentation on the web of complex visual media assets. It is an automatic service that allows to upload visual media files on an ARIADNE server and to transform them into an efficient web format, making them ready for web-based visualization. + + + ARIADNE Visual Media Service + + + + + Marche Beni Culturali is a portal designed to provide to the public with a unique access tool based on the Regional Heritage Information System (SIRPaC), which integrates the various digital resources collected by the Region in its activities and offers a vision of the regional heritage. + For AriadnePlus: 73000 results/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Means of transport. + + Regione Marche Dataset + + + + + + + + + + Regione Emilia Romagna Dataset + + + + After contact with the DCU team (http://www.dcu.gr/) + Condition of Use Rights for DYAS Software Registry + full access to metadata/ possible restriction for data of the analogue collections + Condition of Use Rights for DYAS Organizations and Collections Registries + + + + Visual Computing Lab - ISTI - CNR + + + + Archivio storico delle arti contemporanee Dataset + + + + + + + SISMEL + + + + + + + Ariadne Consortium + + + + Dariah EU + + + + + + Creation of BISLAM + + + + + + + ACDM + + + + + + + + + + + + + + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + + + Calabria Region + + + + Condition of Use Rights for Virtual Language Observatory + + + + + + + + + + + + + + + + sara.digiorgio@beniculturali.it + + + + Institute for the History of the Italian Risorgimento + + + + Contemporary Age + + + + + + + IIT-CNR + + + + + + + + + Metashare Dataset + + + + + CulturaItalia is an ever-growing collaborative network of public and private institutions. The participant-driven project is intended to bring together various players in the fields of Italian cultural production and access, partners who will be able to contribute to the development of the portal and thus to improve the visibility of their contents and initiatives on a national and international level. Museums, archives, libraries and other cultural entities both public and private can participate by making contents organised into databases available, or by sending news regarding initiatives, organisations and activities. CulturaItalia manages a catalog – Index – which gathers and indexes the information provided by the partners, by means of metadata. The original data will remain on the website of the provider, to which the user is guided, via link, for a complete consultation. For example, in the case of a photograph in the Index, the preview image (thumbnail) is visible along with identifying data and a link to the providers website, where the user can visualise the photograph in its original format, accompanied by all the information and the services in order to get the full benefit of the item. In CulturaItalia there is a section devoted to open data (http://dati.culturaitalia.it), where the data are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search via SPARQL END POINT a datasets selection available in Linked Open Data format. + + + CulturaItalia Portal + + 2008 + + + + + + ICCU - CulturaItalia + + + + + + + + Elske Rotteveel + + + + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + + + + http://www.ariadne-infrastructure.eu/ + + + + Marche Culture Foundation + + + + + + + DIGITAL CURATION UNIT (Institute for the Management of Information Systems, Athena Research Centre) Aigialeias 48 & Epidavrou, 151 25 Maroussi, Greece + + + + + + + + + + + + + monica.monachini@ilc.cnr.it + + + + + + + http://cocoon.huma-num.fr + + + + Via Moruzzi 1, Pisa 56124 + + + + + + + Meta-Net Project + + + + + + Isidore Dataset + + + + + Selection of dataset related to Cultural Heritage + + + + + + http://vast-lab.org/thesaurus/ra/vocab/ + + + + + + + Società Geografica Italiana Dataset + + + + + Creation of Clarin Concept Registry Dataset + + + + Regione Calabria Dataset + + + + Condition of Use Rights for Component Registry + + + + CNR-OVI + + + + + Creation of Società Geografica Italiana Dataset + + + + Metashare + + + + + + + + CLARIN ERIC is the governing and coordinating body of CLARIN (Common Languages Resources and Technology Infrastructure). It is a consortium of ca. 20 countries and intergovernmental organisations (and counting), represented by their ministries + + + + Clarin-EU + + + + Landscape Services - 3D Terrain Service + + + + National Institute for Graphics (ING) + + + + + + + + + + TRAME is a metasearch tool for medieval manuscripts, hosted by the Fondazione Ezio Franceschini and SISMEL. It aims to assist users in finding primary sources for the study of medieval culture. Originally developed in 2011 to allow a combined search on a group of different Italian repositories and databases, it has increasingly widened its scope to become a global research infrastructure for all scholars of the Middle Ages. Its main aim is to build a research infrastructure that focuses on promoting interoperability and fostering discoverability among the different digital resources available in the medieval digital ecosystem. + + TRAME + + + + Marche Region + + + + Ancient Age + + + + CulturaItalia Portal + + + + + + + The Concept Registry can be accessed by anyone using a read-only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators. If you have such a request you should contact your national coordinator or, in case your country has not assigned one yet, send your request to ccr@clarin.eu. The coordinators will then discuss the request and get in touch with you about the handling of it. + Condition of Use Rights for Clarin Concept Registry + + + + + + + + + + afalierou@academyofathens.gr + + + + + + + Ariadne Project + + + + https://www.rechercheisidore.fr/api + + + + + + + + + + The CLARIN Component Metadata Infrastructure (CMDI) provides a framework to create and use self-defined metadata formats. It relies on a modular model of so-called metadata components, which can be assembled together, to improve reuse, interoperability and cooperation among metadata modelers. The CMDI Component Registry was created to promote the re-use and sharing of metadata components and profiles. The registry contains all CLARIN metadata components and metadata profiles used to describe all metadata. It is expected to contain around 1.000 components and around 200 profiles. Reuse of components and profiles is stimulated as much as possible. Components and profiles are linked to the concepts from CCR for interoperability reason. + + The component Registry has the following features: + Register and store CMDI components/profile + Enable a user to edit and create Components/Profile + Enable a user to browse and registered Components/Profile + + + Component Registry + + + + Clarin Concept Registry + + + + + Charles Riondet + + + + + + + La Biennale di Venezia + + + + + + + http://www.meta-share.org + + + + + The Network is organised according to two main dimensions: + + in concentric circles, corresponding to the degree of involvement in the Network activities: + the core circle, composed by the Coordinator and the Work Packages Leaders, who form the Steering Committee; + the second circle, composed by the Network Partners appearing in the project proposal; + the third circle, composed by the Network Institutional Members, namely other organizations that may be useful to add during the life of the Network, which should be involved on a regular basis in activities, meetings and interactions (the flexibility of the Network composition is very important to cope with issues or requirements arising during the project; some companies and institutions have already expressed their interest to be part of the Network); + the fourth circle, composed by the Network Individual Subscribers; + in the Working Groups corresponding to the topical Work Packages described in the Work Plan; here the relevant dimension is the topic, which is the focus of each activity. + During the life of the Network, the Network Support Group appearing in the project proposal will be contacted for specific meetings, workshops and activities and will be able to provide feedback and advice. + + + + FLaReNet + + + + + Emiliano Degl'Innocenti + + + + Senate of the Republic - Library + + + + + + + Greece + + + + + + + + + + Condition of Use Rights for Metashare + + + + + + + Instituto di Linguistica Computazionale «A. Zampolli» + + + + + + + + + + + + + Dyas Catalogue Dataset + + + + Prehistory + + + + ELRA + + + + Cendari Archival Directory + + + + + Nicolas Larrousse + + + + + + + + Collections of oral resources from different parts of the world (https://cocoon.huma-num.fr/exist/crdo/collections.xql) + + CoCoON Dataset + + + + + + + + 2010 + Metashare + + + + + META-SHARE is an open and secure network + of repositories for sharing and exchanging + language data, tools and related web services. + + + + + + + Creation of SAN - Sistema Archivistico Nazionale Dataset + + + + + + + 2010 + Time Span of Project of Meta-Net Project + + + + Condition of Use Rights for ARIADNE Visual Media Service + + + + http://landscape.ariadne-infrastructure.eu/oc/ + + + + General Directorate for Archives (DGA) + + + + + Creation of Regione Emilia Romagna Dataset + + + + + + + Nakala + + + + http://www.flarenet.eu/ + + + + DYAS Software Registry + + + + Condition of Use Rights for Cendari + + + + + + + Considering the fact that many scientific data producers do not have the digital infrastructure to provide a persistent and interoperable access to their data, Huma-Num has implemented a new tool called “Nakala” to expose research data in order to facilitate their reuse. + Nakala provides mainly three types of services: a permanent identifier to the resource, a permanent access to the data and associated metadata and an exposition of metadata based on semantic web technologies and OAI-PMH server. + + + Nakala + + + + + + + Regione Lombardia Dataset + + + + + Medieval Culture & WWI: Throughout the project, the CENDARI project team has worked on the establishment of an Archival Directory through the identification, description and cataloguing of archival holdings and other collections of value for research within the two project pilot areas – World War I and Medieval European Culture. A total of 168 Cultural Heritage Institutions were involved and the final + CENDARI Archive Directory contained approximately 830,000 datasets available for users. + By the end of the project, the number of archival descriptions established manually by the team was 3,107 (2,320 for the modern period and 787 for the medieval period) and the number of cultural heritage institutions described in the Archival Directory was 1,251. An overview of the approximately 830,000 datasets harvested by CENDARI. + + + + + + Cendari Consortium + + + + 2010 + Time Span of Project of EHRI Project + + + + + + + + + + + + + Regione Marche Dataset + + + + + + Tue Mar 24 2015 18:00:00 GMT-0400 (EDT) + + The RA terminological tool, curated by ICCU and VAST-LAB, constitutes a reworked version of the RA Thesaurus issued by the ICCD. The RA Thesaurus provides all the necessary terminological facilities for an efficent and well structured recording of the object coming from archaeological excavations. The vocabulary has been implemented by ICCD to support the encoding of two specific fields (OGTD - CLS). These two fields describe the definition of the object and its class and production. + + ICCD RA Thesaurus for archaeological objects + + + + + + + Clarin-EU + + + + charles.riondet@inria.fr + + + + khalid.choukri@elra.fr + + + + + + + + + + + + + Condition of Use Rights for LRE Map + + + + http://clarin.eu/clarin-eric-datatables/centres + + + + + + + + + + Ariadne catalogue + + + + + Creation of Metashare Dataset + + + + + + + Condition of Use Rights for EHRI Portal + + + + + + + + + 2014/ until 2020 (?) + + + + DYAS Organizations and Collections Registries + + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + + + + + Component Registry + + + + EHRI Project + + + + + + + 2012 + Time Span of Project of Ariadne Project + + + + Condition of Use Rights for Thesaurus PICO + + + + + + + + + + + IreSud Portal - a regional level database that links the Museums of Calabria; This is a collection of works and information relating to museums of historical and demo-anthropological. + For AriadnePlus: 3.024 results/ Visual art works; Anthropological Heritage + + Regione Calabria Dataset + + + + + + + Condition of Use Rights for MuseiD-Italia + + + + http://www.meta-share.org/ + + + + + Creation of LRE Map Dataset + + + + helene.gautier@huma-num.fr + + + + Antiquity + + + + + + + + + + CMDI + + + + LACITO + + + + + + + + + + Concepts used for semantic annotation of metadata schemas and their definitions + + Clarin Concept Registry Dataset + + + + Thesaurus PICO + + + + + + + EHRI Portal + + + + + + + OVI + + + + Magna Graecia + + + + + + + + + + + + + + Creation of Internet Culturale Dataset + + + + 2014 + Time Span of Project of DARIAH-GR/ΔΥΑΣ + + + + Condition of Use Rights for Landscape Services - Cloud Hosting + + + + + + + + + + The Archival Directory is a large database of archival descriptions and collections and is part of the CENDARI Virtual Research Environment. + It has a strong transnational focus and one of its aims is to include many archives and institutions which are little known or rarely used by researchers. The Archival Directory allows historians to view sources in a rarely seen transnational and comparative view. It is focused on archives and libraries containing resources on the Medieval era and World War One. + + + Cendari Archival Directory + + + + Internet Culturale Dataset + + + + + Creation of Istituto Centrale per la Storia del Risorgimento Dataset + + + + + + + + Creation of Regione Calabria Dataset + + + + + + + + + CulturaItalia offers a thematic consultation of the Metadata Index, and in particular in the Cultural heritage thematic area, 2.268.000 items are available. In CulturaItalia there is a section devoted to the open data (http://dati.culturaitalia.it), where they are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search a datasets selection via SPARQL END POINT available in Linked Open Data format. CulturaItalia presents a section called MuseiD-Italia, dedicated to museums in which you can search and compare works from cultural collections of different Italian Institutes. + + ICCU - CulturaItalia + + + + http://www.huma-num.fr/ + + + + + The Central Institute for Graphics was born from the union of "Calcografia Nazionale" of Pontifical Heritage and of the National Printing Council. Since its foundation, the Institute has been gathering an ever-increasing number of matrices, xylograph, photographs and artist videos. It also preserves prints, drawings and engravings from the library of Prince Corsini. + + National Institute for Graphics (ING) + + + + https://www.clarin.eu/ + + + + Calabria Region + + + + + Lombardia Beni Culturali is the unified portal of the Lombardia cultural heritage. It includes the profiles of major culture institutes such as museums, archives and libraries, heritage catalogs, preserved heritage descriptions, architectural complexes and significant urban planning, historical archive resources, and thematic collections. + For AriadnePlus: 24.800 results/ Visual art works; Anthropological Heritage; Documentary resources; Works of applied arts; Instruments + + Regione Lombardia Dataset + + + + + + + + Digital Library of the cultural heritage preserved in the Italian museums of various sectors; the digital library has a dedicated interface called 'MuseiD-Italia' integrated with the CulturaItalia Portal. + For AriadnePlus: 368 collections/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Natural Heritage; Literary works; Environmental and landscape Heritage; Means of transport; Installations + + MuseiD-Italia Dataset + + + + LRE Map Dataset + + + + Nakala Dataset + + + + PICO Application Profile + + + + + + + Creation of Dyas Catalogue Dataset + + + + + + 2008 + + In the CulturaItalia Portal, importing metadata from external data sources occurs with mapping in one schema. This schema is expressed according to the Qualified Dublin Core standard, which has been further extended to define the PICO Application Profile (designed for the Portal) that includes a set of basic elements that can be used to describe any type of resource: Title, Creator, Subject, Description, Publisher, Contributor, Date, Type, Format, Identifier, Source, Language, Relation, Coverage, Rights, to which 3 additional elements have been added: Audience, Provenance, and RightsHolder. To these are added 18 additional elements, 33 element-refinement and a set of encodingschems (controlled ontologies or vocabularies). + + + PICO application profile + + + + + + Creation of CulturaItalia Portal Dataset + + + + Virtual Language Observatory + + + + Creative Commons CC0 1.0 Universal Public Domain Dedication + Condition of Use Rights for CulturaItalia Portal + + + + + The Foundation manages the Marche Cultural Heritage system on behalf of the Marche Region. Visual works and objects of memory, audiovisual documents and oral tradition, architectural monuments. + + Marche Culture Foundation + + + + + + + + + + + + + + + + + + + Cendari provides access to data through a SPARQL access point. The dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + + Cendari + + + + + + + A major condition for the take-off of the field of Language Resources and Language Technologies is the creation of a shared policy for the next years. + + FLaReNet aims at developing a common vision of the area and fostering a European strategy for consolidating the sector, thus enhancing competitiveness at EU level and worldwide. + + By creating a consensus among major players in the field, the mission of FLaReNet is to identify priorities as well as short, medium, and long-term strategic objectives and provide consensual recommendations in the form of a plan of action for EC, national organisations and industry. + + Through the exploitation of new collaborative modalities as well as workshops and meetings, FLaReNet will sustain international cooperation and (re)create a wide Language community. + + FLaReNet project + + + + + + + ISIDORE is an aggregator that harvests more than 5 thousand sources from Humanities and Social Sciences and provides access to more than 5 million data. + Technically, ISIDORE uses OAI-PMH repositories to retrieve metadata and thereafter apply a full chain of processes (classification, enrichment, link resources with Semantic Web technologies etc.) + ISIDORE takes data in French, Spanish and English, enriches them in those three languages and provides also a multilingual web interface. + + + Isidore + + + + akarasimos@academyofathens.gr + + + + Metashare Consortium + + + + + + 2014 + + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + + + DYAS Software Registry + + + + + + + The CLARIN Concept Registry (CCR) is an OpenSKOS instance, which implements the W3C SKOS recommendation and data model. The CLARIN Concept Registry (CCR) forms the basis of the semantic interoperability layer of CLARIN, especially in the context of metadata, i.e., the Component MetaData Infrastructure (CMDI ). It does so by offering a collection of concepts, identifiable by their persistent identifiers, relevant for the domain of language resources. This registry contains the relevant concepts (based on the corresponding ISOcat data categories), such as those used by CMDI. The Concept Registry can be accessed by anyone using a read only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators, whose mission is to improve the quality of the concepts used within CLARIN. + + + Clarin Concept Registry + + + + Condition of Use Rights for PICO application profile + + + + + The General Directorate for Archives, in accordance with the Code of Cultural Heritage and Landscape and within the guidelines specified by the Ministry, promotes and coordinates activities related to the conservation, protection and enhancement of national archival heritage. + + General Directorate for Archives (DGA) + + + + + + + + + The Senate Library's heritage, about 600,000 volumes, is made up of several collections that have developed over the years through targeted acquisitions and donations of particularly valuable funds by senators and scholars. Local statute and local history databases contain texts - manuscripts and prints of communes, corporations, confraternities and associations, selected among the most significant in the Senate Library's collection of content, rarity, or elegance of the edition. The local history database includes the bibliographic descriptions of about 1,200 ancient editions of Italian local history edited between 1500 and 1861. + For AriadnePlus: 90.568 results/ Visual art works; Documentary resources + + Biblioteca del Senato Dataset + + + + + + + + + + CIDOC-CRM + + + + + + + + + + Biblioteca del Senato Dataset + + + + + + + + + CalcoGRAFICA is the system that publishes the digital collections of the Central Institute for Graphics (ING) on the web and offers a full overview of the history of the image through engraved prints and matrices, drawings and photographs along a chronological period from the 15th century to the present. + For AriadnePlus: 23.740 results/ Visual art works; Documentary resources + + Istituto Nazionale per la Grafica Dataset + + + + + + + + + + + http%3A%2F%2Fdata.d4science.org%2Fem1EemhBdUZ0bjNGTWJNNjlxVDltcm9acDFmMHlBSVVHbWJQNStIS0N6Yz0 + + + + + + + + diff --git a/dnet-ariadneplus/.factorypath b/dnet-ariadneplus/.factorypath new file mode 100644 index 0000000..4b001e0 --- /dev/null +++ b/dnet-ariadneplus/.factorypath @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus/deploy.info b/dnet-ariadneplus/deploy.info new file mode 100644 index 0000000..7638869 --- /dev/null +++ b/dnet-ariadneplus/deploy.info @@ -0,0 +1,10 @@ +{ + "type_source": "SVN", + "goal": "clean dependency:tree package -U source:jar", + "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet50/modules/dnet-ariadneplus/trunk/", + "deploy_repository": "dnet5-snapshots", + "version": "5", + "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", + "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet5-snapshots", + "name": "dnet-ariadneplus" +} \ No newline at end of file diff --git a/dnet-ariadneplus/pom.xml b/dnet-ariadneplus/pom.xml new file mode 100644 index 0000000..22ee12e --- /dev/null +++ b/dnet-ariadneplus/pom.xml @@ -0,0 +1,175 @@ + + + + eu.dnetlib + dnet-parent + 2.0.0-SNAPSHOT + + + 4.0.0 + eu.dnetlib + dnet-ariadneplus + jar + 1.0.1-SNAPSHOT + + scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet50/modules/dnet-ariadneplus/trunk + + + + junit + junit + ${junit.version} + + + org.springframework + spring-core + ${spring.version} + provided + + + eu.dnetlib + dnet-data-services + [2.0.0-SAXONHE, 3.0.0-SAXONHE) + + + eu.dnetlib + dnet-msro-service + [6.0.0-SAXONHE, 7.0.0-SAXONHE) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UTF-8 + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinAPIGeneratorJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinAPIGeneratorJobNode.java new file mode 100644 index 0000000..14592c5 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinAPIGeneratorJobNode.java @@ -0,0 +1,122 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import eu.dnetlib.clients.enabling.ISLookUpClient; +import eu.dnetlib.enabling.locators.UniqueServiceLocator; +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.AsyncJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.msro.workflows.util.WorkflowsConstants; +import eu.dnetlib.rmi.datasource.DatasourceManagerService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Created by Alessia Bardi on 12/01/2018. + * + * @author Alessia Bardi + */ +public class ClarinAPIGeneratorJobNode extends AsyncJobNode { + + private static final Log log = LogFactory.getLog(ClarinAPIGeneratorJobNode.class); + + /** Path to a local folder containing the subfolders with Clarin mapping files **/ + private String folderPath; + /** Path to a local folder containing the subfolders with Clarin input files **/ + private String inputBaseUrlPrefix; + + private String metadataIdentifierPath; + + private String clarinDatasourceProfileID; + private String clarinDatasourceOriginalId; + + @Autowired + private UniqueServiceLocator serviceLocator; + @Autowired + private ISLookUpClient isLookupClient; + + + @Override + protected String execute(final Env env) throws Exception { + Path folder = Paths.get(getFolderPath()); + if (!Files.isDirectory(folder)){ + throw new IllegalArgumentException(getFolderPath()+" must be a directory"); + } + final DatasourceManagerService dsMan = getServiceLocator().getService(DatasourceManagerService.class); + + List apiIds = getIsLookupClient().search("//RESOURCE_PROFILE[./HEADER/RESOURCE_IDENTIFIER/@value='"+getClarinDatasourceProfileID()+"']//INTERFACE/@id/string()"); + + ClarinFileVisitor visitor = new ClarinFileVisitor(getClarinDatasourceProfileID(), getClarinDatasourceOriginalId(), + getInputBaseUrlPrefix(), getMetadataIdentifierPath(), apiIds, getServiceLocator(), getIsLookupClient()); + Files.walkFileTree(folder, visitor); + + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX +"visitedFiles", visitor.getCountVisitedFiles()); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX +"createdTDS", visitor.getCountCreatedTDS()); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX +"updatedTDS", visitor.getCountUpdatedTDS()); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX +"visitedFolders", visitor.getCountVisitedFolders()); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX +"createdInterfaces", visitor.getCountCreatedInterfaces()); + return Arc.DEFAULT_ARC; + + } + + public String getFolderPath() { + return folderPath; + } + + public void setFolderPath(final String folderPath) { + this.folderPath = folderPath; + } + + public String getInputBaseUrlPrefix() { + return inputBaseUrlPrefix; + } + + public void setInputBaseUrlPrefix(final String inputBaseUrlPrefix) { + this.inputBaseUrlPrefix = inputBaseUrlPrefix; + } + + public String getMetadataIdentifierPath() { + return metadataIdentifierPath; + } + + public void setMetadataIdentifierPath(final String metadataIdentifierPath) { + this.metadataIdentifierPath = metadataIdentifierPath; + } + + public String getClarinDatasourceProfileID() { + return clarinDatasourceProfileID; + } + + public void setClarinDatasourceProfileID(final String clarinDatasourceProfileID) { + this.clarinDatasourceProfileID = clarinDatasourceProfileID; + } + + public String getClarinDatasourceOriginalId() { + return clarinDatasourceOriginalId; + } + + public void setClarinDatasourceOriginalId(final String clarinDatasourceOriginalId) { + this.clarinDatasourceOriginalId = clarinDatasourceOriginalId; + } + + public UniqueServiceLocator getServiceLocator() { + return serviceLocator; + } + + public void setServiceLocator(final UniqueServiceLocator serviceLocator) { + this.serviceLocator = serviceLocator; + } + + public ISLookUpClient getIsLookupClient() { + return isLookupClient; + } + + public void setIsLookupClient(final ISLookUpClient isLookupClient) { + this.isLookupClient = isLookupClient; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinFileVisitor.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinFileVisitor.java new file mode 100644 index 0000000..9eaa603 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ClarinFileVisitor.java @@ -0,0 +1,263 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import eu.dnetlib.clients.enabling.ISLookUpClient; +import eu.dnetlib.enabling.locators.UniqueServiceLocator; +import eu.dnetlib.miscutils.datetime.DateUtils; +import eu.dnetlib.rmi.datasource.DatasourceManagerService; +import eu.dnetlib.rmi.datasource.DatasourceManagerServiceException; +import eu.dnetlib.rmi.datasource.IfaceDesc; +import eu.dnetlib.rmi.enabling.ISLookUpException; +import eu.dnetlib.rmi.enabling.ISRegistryException; +import eu.dnetlib.rmi.enabling.ISRegistryService; +import org.antlr.stringtemplate.StringTemplate; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static java.nio.file.FileVisitResult.CONTINUE; + +/** + * Created by Alessia Bardi on 12/01/2018. + * + * @author Alessia Bardi + */ +public class ClarinFileVisitor extends SimpleFileVisitor { + + private static final Log log = LogFactory.getLog(ClarinFileVisitor.class); + private static final String API_PREFIX = "api_________::"; + private static final String TDS_TEMPLATE ="/eu/dnetlib/ariadneplus/workflows/nodes/clarin_tds.xml.st"; + + private List interfaces = Lists.newArrayList(); + private String clarinDatasourceProfileID; + private String clarinDatasourceOriginalId; + private DatasourceManagerService dsMan = null; + private String inputBaseUrlPrefix; + private String metadataIdentifierPath; + private ISLookUpClient lookupClient; + private ISRegistryService registryService; + + private int countVisitedFiles = 0; + private int countCreatedTDS = 0; + private int countUpdatedTDS = 0; + private int countVisitedFolders = 0; + private int countCreatedInterfaces = 0; + + + @Override + public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException { + log.info("Processing " + dir.toString()); + countVisitedFolders++; + String dirName = dir.getFileName().toString(); + if(dirName.equalsIgnoreCase("x3ml-mappings")) return CONTINUE; + String apiId = API_PREFIX + getClarinDatasourceOriginalId() + "::" + dirName; + if (!interfaces.contains(apiId)) { + //API TO BE CREATED + IfaceDesc iface = new IfaceDesc(); + iface.setActive(false); + iface.setCompliance("metadata"); + iface.setContentDescription("metadata"); + iface.setId(apiId); + iface.setRemovable(true); + iface.setTypology("dnet:repository::clarin"); + iface.setAccessProtocol("filesystem"); + Map accessParams = Maps.newHashMap(); + accessParams.put("extensions", "xml"); + iface.setAccessParams(accessParams); + iface.setBaseUrl(StringUtils.appendIfMissing(getInputBaseUrlPrefix(), "/") + dirName); + Map extraFields = Maps.newHashMap(); + extraFields.put("metadata_identifier_path", getMetadataIdentifierPath()); + iface.setExtraFields(extraFields); + try { + dsMan.addInterface(getClarinDatasourceProfileID(), iface); + countCreatedInterfaces++; + log.info("CREATED NEW INTERFACE " + iface.getId() + " for " + getClarinDatasourceOriginalId() + "(" + getClarinDatasourceProfileID() + ")"); + } catch (DatasourceManagerServiceException e) { + log.error("Can't add interface " + iface.getId() + " to " + getClarinDatasourceOriginalId() + "(" + getClarinDatasourceProfileID() + ")", e); + return CONTINUE; + } + } else { + if (log.isDebugEnabled()) { + log.debug("Interface " + apiId + " already exists"); + } + } + return CONTINUE; + } + + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { + String filename = file.getFileName().toString(); + log.info("Processing " + file.toString()); + countVisitedFiles++; + String tdsTitle = filename; + //call Files.lines which will use a stream to iterate over each line of the file. + //Next we will convert the stream to a string by calling Collectors.joining() which will join all the strings together. + String updatedCode = Files.lines(file).collect(Collectors.joining()).replace("", ""); + try { + List res = this.lookupClient.search("//RESOURCE_PROFILE[.//RESOURCE_TYPE/@value=\"TransformationRuleDSResourceType\" and .//CONFIGURATION/SCRIPT/TITLE/string()=\""+tdsTitle+"\"]/HEADER/RESOURCE_IDENTIFIER/@value/string()"); + if(res == null || res.isEmpty()){ + log.debug("Creating new TDS profile for "+filename); + final String template = IOUtils.toString(getClass().getResourceAsStream(TDS_TEMPLATE), Charset.forName("UTF-8")); + final StringTemplate st = new StringTemplate(template); + st.setAttribute("date", DateUtils.calculate_ISO8601(DateUtils.now())); + st.setAttribute("title", tdsTitle); + st.setAttribute("mapping", ""); + String profId = this.registryService.registerProfile(st.toString()); + countCreatedTDS++; + log.info("REGISTERED NEW TDS FOR "+filename+": "+profId); + } + else{ + String tdsProfileId = res.get(0); + log.debug("Updating TDS profile "+tdsProfileId+"for "+filename); + + boolean done = this.registryService.updateProfileNode(tdsProfileId, "//CONFIGURATION/SCRIPT/CODE", ""); + if(done){ + log.info("TDS PROFILE "+tdsProfileId+" UPDATED with contents from "+filename); + countUpdatedTDS++; + } + if(!done){ + log.error("!!! TDS PROFILE "+tdsProfileId+" COULD NOT BE UPDATED with contents from "+filename); + } + } + } catch (ISLookUpException | ISRegistryException e) { + log.error("CANNOT UPDATE/CREATE TDS PROFILE FOR "+filename, e); + } + + return CONTINUE; + } + + protected ClarinFileVisitor() { + super(); + } + + public ClarinFileVisitor(final String clarinDatasourceProfileID, final String clarinDatasourceOriginalId, + final String inputBaseUrlPrefix, final String metadataIdentifierPath, final List interfaces, + final UniqueServiceLocator locator, final ISLookUpClient lookupClient) { + super(); + this.clarinDatasourceOriginalId = clarinDatasourceOriginalId; + this.clarinDatasourceProfileID = clarinDatasourceProfileID; + this.inputBaseUrlPrefix = inputBaseUrlPrefix; + this.metadataIdentifierPath = metadataIdentifierPath; + this.interfaces = interfaces; + this.dsMan = locator.getService(DatasourceManagerService.class); + this.registryService = locator.getService(ISRegistryService.class); + this.lookupClient = lookupClient; + } + + public List getInterfaces() { + return interfaces; + } + + public void setInterfaces(final List interfaces) { + this.interfaces = interfaces; + } + + public String getClarinDatasourceOriginalId() { + return clarinDatasourceOriginalId; + } + + public void setClarinDatasourceOriginalId(final String clarinDatasourceOriginalId) { + this.clarinDatasourceOriginalId = clarinDatasourceOriginalId; + } + + public DatasourceManagerService getDsMan() { + return dsMan; + } + + public void setDsMan(final DatasourceManagerService dsMan) { + this.dsMan = dsMan; + } + + public String getInputBaseUrlPrefix() { + return inputBaseUrlPrefix; + } + + public void setInputBaseUrlPrefix(final String inputBaseUrlPrefix) { + this.inputBaseUrlPrefix = inputBaseUrlPrefix; + } + + public String getMetadataIdentifierPath() { + return metadataIdentifierPath; + } + + public void setMetadataIdentifierPath(final String metadataIdentifierPath) { + this.metadataIdentifierPath = metadataIdentifierPath; + } + + public String getClarinDatasourceProfileID() { + return clarinDatasourceProfileID; + } + + public void setClarinDatasourceProfileID(final String clarinDatasourceProfileID) { + this.clarinDatasourceProfileID = clarinDatasourceProfileID; + } + + public ISLookUpClient getLookupClient() { + return lookupClient; + } + + public void setLookupClient(final ISLookUpClient lookupClient) { + this.lookupClient = lookupClient; + } + + public ISRegistryService getRegistryService() { + return registryService; + } + + public void setRegistryService(final ISRegistryService registryService) { + this.registryService = registryService; + } + + public int getCountVisitedFiles() { + return countVisitedFiles; + } + + public void setCountVisitedFiles(final int countVisitedFiles) { + this.countVisitedFiles = countVisitedFiles; + } + + public int getCountCreatedTDS() { + return countCreatedTDS; + } + + public void setCountCreatedTDS(final int countCreatedTDS) { + this.countCreatedTDS = countCreatedTDS; + } + + public int getCountUpdatedTDS() { + return countUpdatedTDS; + } + + public void setCountUpdatedTDS(final int countUpdatedTDS) { + this.countUpdatedTDS = countUpdatedTDS; + } + + public int getCountVisitedFolders() { + return countVisitedFolders; + } + + public void setCountVisitedFolders(final int countVisitedFolders) { + this.countVisitedFolders = countVisitedFolders; + } + + public int getCountCreatedInterfaces() { + return countCreatedInterfaces; + } + + public void setCountCreatedInterfaces(final int countCreatedInterfaces) { + this.countCreatedInterfaces = countCreatedInterfaces; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishAbstractJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishAbstractJobNode.java new file mode 100644 index 0000000..2e015b4 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishAbstractJobNode.java @@ -0,0 +1,140 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import eu.dnetlib.enabling.resultset.client.ResultSetClient; +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.AsyncJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.msro.workflows.util.WorkflowsConstants; +import eu.dnetlib.rmi.common.ResultSet; +import eu.dnetlib.rmi.manager.MSROException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Created by Alessia Bardi on 09/10/2017. + * + * @author Alessia Bardi + */ +public abstract class PublishAbstractJobNode extends AsyncJobNode { + + private static final Log log = LogFactory.getLog(PublishAbstractJobNode.class); + + private String inputEprParam; + + @Autowired + private ResultSetClient resultSetClient; + + private String publisherEndpoint; + + //for parallel requests to the publisher endpoint + private int nThreads = 5; + private ExecutorService executorService = Executors.newFixedThreadPool(nThreads); + private List> resList = Lists.newArrayList(); + + @Override + protected String execute(final Env env) throws Exception { + + final ResultSet rsIn = env.getAttribute(getInputEprParam(), ResultSet.class); + if ((rsIn == null)) { throw new MSROException("InputEprParam (" + getInputEprParam() + ") not found in ENV"); } + + int countAll = 0; + int countOk = 0; + Map errors = Maps.newHashMap(); + log.info("Publisher endpoint: " + getPublisherEndpoint()); + + for (String record : getResultSetClient().iter(rsIn, String.class)) { + countAll++; + Future res = executorService.submit( () -> { + try { + HttpPost post = new HttpPost(getPublisherEndpoint()); + List params = Lists.newArrayList(); + params.add(new BasicNameValuePair("record", record)); + params.add(new BasicNameValuePair("ariadneplusTarget", getTarget())); + UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, "UTF-8"); + post.setEntity(ent); + HttpClient client = HttpClients.createDefault(); + HttpResponse responsePOST = client.execute(post); + int statusCode = responsePOST.getStatusLine().getStatusCode(); + switch (statusCode) { + case 200: + return statusCode; + default: + log.error(responsePOST.getStatusLine().getStatusCode() + ": " + responsePOST.getStatusLine().getReasonPhrase()); + log.error("Source record causing error: " + record); + errors.merge(statusCode, 1, Integer::sum); + return statusCode; + } + } catch (IOException e) { + e.printStackTrace(); + errors.merge(-1, 1, Integer::sum); + } + return -1; + }); + resList.add(res); + } + executorService.shutdown(); + + //now let's wait for the results. We can block ourselves here: we have nothing else to do + log.info("Waiting for responses"); + for(Future res : resList){ + if(res.get() == 200) countOk++; + } + log.info(String.format("Got all responses. Ok %s/%s", countOk, countAll)); + + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "countOk", countOk); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "countAll", countAll); + env.setAttribute(WorkflowsConstants.MAIN_LOG_PREFIX + "errorsMap", new Gson().toJson(errors)); + + log.info("publishing completed"); + if (!errors.isEmpty()) { + log.warn("Problems in publishing on "+getTarget()+": "+countOk+"/"+countAll+" see error maps for details"); + } + if(countAll == 0) log.warn("0 resources to publish"); + return Arc.DEFAULT_ARC; + } + + public abstract String getTarget(); + + public String getInputEprParam() { + return this.inputEprParam; + } + + public void setInputEprParam(final String inputEprParam) { + this.inputEprParam = inputEprParam; + } + + public String getPublisherEndpoint() { + return publisherEndpoint; + } + + public void setPublisherEndpoint(final String publisherEndpoint) { + this.publisherEndpoint = publisherEndpoint; + } + + public ResultSetClient getResultSetClient() { + return resultSetClient; + } + + public void setResultSetClient(final ResultSetClient resultSetClient) { + this.resultSetClient = resultSetClient; + } + +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishJRRJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishJRRJobNode.java new file mode 100644 index 0000000..338b6ed --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishJRRJobNode.java @@ -0,0 +1,10 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +public class PublishJRRJobNode extends PublishAbstractJobNode { + + @Override + public String getTarget() { + return "JRR"; + } + +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishVirtuosoJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishVirtuosoJobNode.java new file mode 100644 index 0000000..2759d49 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/PublishVirtuosoJobNode.java @@ -0,0 +1,10 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +public class PublishVirtuosoJobNode extends PublishAbstractJobNode { + + @Override + public String getTarget() { + return "VIRTUOSO"; + } + +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoByTypeJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoByTypeJobNode.java new file mode 100644 index 0000000..6ad9c9d --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoByTypeJobNode.java @@ -0,0 +1,51 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.rmi.common.ResultSet; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 26/01/2018. + * + * @author Alessia Bardi + */ +public class ReadVirtuosoByTypeJobNode extends ReadVirtuosoJobNode { + + private static final Log log = LogFactory.getLog(ReadVirtuosoByTypeJobNode.class); + + private String typeNamespace; + private String typeName; + + @Override + protected String execute(final Env env){ + log.info("Using virtuoso reader at : " + getVirtuosoReaderAPIUrl()); + RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); + + VirtuosoAriadnePlusByTypeIterator iterator = new VirtuosoAriadnePlusByTypeIterator().typeNamespace(typeNamespace).typeName(typeName).datasourceInterface(getDatasourceInterface()).virtuosoReaderAPIUrl(getVirtuosoReaderAPIUrl()).datasourceName(getDatasourceName()).restTemplate(restTemplate); + log.debug(String.format("Created iterator for %s:%s : ", typeNamespace, typeName )); + ResultSet rs = getRsFactory().createResultSet(() -> iterator); + + env.setAttribute("virtuoso_rs", rs); + + return Arc.DEFAULT_ARC; + } + + public String getTypeNamespace() { + return typeNamespace; + } + + public void setTypeNamespace(final String typeNamespace) { + this.typeNamespace = typeNamespace; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(final String typeName) { + this.typeName = typeName; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoJobNode.java new file mode 100644 index 0000000..4c2c45d --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReadVirtuosoJobNode.java @@ -0,0 +1,87 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import eu.dnetlib.enabling.resultset.factory.ResultSetFactory; +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.AsyncJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.rmi.common.ResultSet; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 26/01/2018. + * + * @author Alessia Bardi + */ +public class ReadVirtuosoJobNode extends AsyncJobNode { + + private static final Log log = LogFactory.getLog(ReadVirtuosoJobNode.class); + + private String datasourceName; + private String datasourceInterface; + private String virtuosoReaderAPIUrl; + private int readTimeout = 30000; + + @Autowired + private ResultSetFactory rsFactory; + + @Override + protected String execute(final Env env){ + log.info("Using virtuoso reader at : " + getVirtuosoReaderAPIUrl()); + RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); + + VirtuosoAriadnePlusIterator iterator = new VirtuosoAriadnePlusIterator().datasourceInterface(getDatasourceInterface()).virtuosoReaderAPIUrl(getVirtuosoReaderAPIUrl()).datasourceName(getDatasourceName()).restTemplate(restTemplate); + ResultSet rs = rsFactory.createResultSet(() -> iterator); + + env.setAttribute("virtuoso_rs", rs); + + return Arc.DEFAULT_ARC; + } + + + protected ClientHttpRequestFactory getClientHttpRequestFactory() { + HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); + clientHttpRequestFactory.setReadTimeout(readTimeout); + return clientHttpRequestFactory; + } + + public String getDatasourceName() { + return datasourceName; + } + + public void setDatasourceName(final String datasourceName) { + this.datasourceName = datasourceName; + } + + public String getDatasourceInterface() { + return datasourceInterface; + } + + public void setDatasourceInterface(final String datasourceInterface) { + this.datasourceInterface = datasourceInterface; + } + + public String getVirtuosoReaderAPIUrl() { + return virtuosoReaderAPIUrl; + } + + public void setVirtuosoReaderAPIUrl(final String virtuosoReaderAPIUrl) { + this.virtuosoReaderAPIUrl = virtuosoReaderAPIUrl; + } + + public int getReadTimeout() { + return readTimeout; + } + + public void setReadTimeout(final int readTimeout) { + this.readTimeout = readTimeout; + } + + public ResultSetFactory getRsFactory() { + return rsFactory; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/RegisterClarinWorkflowFromTemplateJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/RegisterClarinWorkflowFromTemplateJobNode.java new file mode 100644 index 0000000..8e39398 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/RegisterClarinWorkflowFromTemplateJobNode.java @@ -0,0 +1,108 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.nio.charset.Charset; + +import com.google.common.base.Joiner; +import eu.dnetlib.clients.enabling.ISLookUpClient; +import eu.dnetlib.enabling.locators.UniqueServiceLocator; +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.SimpleJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.msro.workflows.procs.ProcessAware; +import eu.dnetlib.msro.workflows.procs.WorkflowProcess; +import eu.dnetlib.msro.workflows.util.WorkflowsConstants; +import eu.dnetlib.rmi.enabling.ISLookUpException; +import eu.dnetlib.rmi.enabling.ISRegistryService; +import org.antlr.stringtemplate.StringTemplate; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Copied from eu.dnetlib.msro.workflows.nodes.repohi.RegisterWorkflowFromTemplateJobNode + * + * Clarin specific implementation for setting the transformation rules automatically. + * + * @author alessia + */ +public class RegisterClarinWorkflowFromTemplateJobNode extends SimpleJobNode implements ProcessAware { + + private static final Log log = LogFactory.getLog(RegisterClarinWorkflowFromTemplateJobNode.class); + private String wfName; + private String wfTemplate; + private String description; + private WorkflowProcess process; + @Autowired + private UniqueServiceLocator serviceLocator; + @Autowired + private ISLookUpClient isLookUpClient; + + public String getWfName() { + return this.wfName; + } + + public void setWfName(final String wfName) { + this.wfName = wfName; + } + + public String getWfTemplate() { + return this.wfTemplate; + } + + public void setWfTemplate(final String wfTemplate) { + this.wfTemplate = wfTemplate; + } + + public String getDescription() { + return this.description; + } + + public void setDescription(final String description) { + this.description = description; + } + + @Override + protected String execute(final Env env) throws Exception { + final String dsId = this.process.getDsId(); + final String ifaceId = this.process.getDsInterface(); + final String dsName = this.process.getDsName(); + + final StringTemplate profTemplate = new StringTemplate(IOUtils.toString(getClass().getResourceAsStream(getWfTemplate()), Charset.forName("UTF-8"))); + profTemplate.setAttribute("name", StringEscapeUtils.escapeXml11(this.wfName)); + profTemplate.setAttribute("desc", StringEscapeUtils.escapeXml11(this.description)); + profTemplate.setAttribute("priority", WorkflowsConstants.DEFAULT_WF_PRIORITY); + profTemplate.setAttribute("dsId", StringEscapeUtils.escapeXml11(dsId)); + profTemplate.setAttribute("interface", StringEscapeUtils.escapeXml11(ifaceId)); + profTemplate.setAttribute("dsName", StringEscapeUtils.escapeXml11(dsName)); + profTemplate.setAttribute("tdsCsv", getListOfTDS(ifaceId)); + + final String profId = this.serviceLocator.getService(ISRegistryService.class).registerProfile(profTemplate.toString()); + + env.setAttribute("repoWfId", profId); + + log.info("A new repo wf has been registered, id: " + profId); + + return Arc.DEFAULT_ARC; + } + + private String getListOfTDS(final String ifaceId) throws ISLookUpException { + String lastAPIPart = StringUtils.substringAfterLast(ifaceId, "::"); + String query = "for $x in collection('/db/DRIVER/TransformationRuleDSResources/TransformationRuleDSResourceType') return $x[starts-with(.//TITLE/text() , '"+lastAPIPart+"')]//RESOURCE_IDENTIFIER/@value/string()"; + return Joiner.on(',').join(isLookUpClient.search(query)); + } + + public WorkflowProcess getProcess() { + return this.process; + } + + @Override + public void setProcess(final WorkflowProcess process) { + this.process = process; + } + + + +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReportReaderJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReportReaderJobNode.java new file mode 100644 index 0000000..b31aedc --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/ReportReaderJobNode.java @@ -0,0 +1,50 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.util.Map; + +import com.google.gson.Gson; +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.AsyncJobNode; +import eu.dnetlib.msro.workflows.nodes.SimpleJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import eu.dnetlib.msro.workflows.util.WorkflowsConstants; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created by Alessia Bardi on 05/04/17. + * + * @author Alessia Bardi + */ +public class ReportReaderJobNode extends AsyncJobNode { + + private static final Log log = LogFactory.getLog(ReportReaderJobNode.class); + private String reportEnvParam = "validationReport"; + private String outputParam = reportEnvParam; + + @Override + protected String execute(final Env env) throws Exception { + Map report = env.getAttribute(reportEnvParam, Map.class); + Gson gson = new Gson(); + String theReport = gson.toJson(report); + env.setAttribute( WorkflowsConstants.MAIN_LOG_PREFIX+outputParam, theReport); + log.debug("Found the report: "+theReport); + return Arc.DEFAULT_ARC; + } + + public String getReportEnvParam() { + return reportEnvParam; + } + + public void setReportEnvParam(final String reportEnvParam) { + this.reportEnvParam = reportEnvParam; + } + + public String getOutputParam() { + return outputParam; + } + + public void setOutputParam(final String outputParam) { + this.outputParam = outputParam; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/UnpublishVirtuosoJobNode.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/UnpublishVirtuosoJobNode.java new file mode 100644 index 0000000..a083b10 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/UnpublishVirtuosoJobNode.java @@ -0,0 +1,53 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.net.URI; + +import eu.dnetlib.msro.workflows.graph.Arc; +import eu.dnetlib.msro.workflows.nodes.AsyncJobNode; +import eu.dnetlib.msro.workflows.procs.Env; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +public class UnpublishVirtuosoJobNode extends AsyncJobNode { + + private static final Log log = LogFactory.getLog(UnpublishVirtuosoJobNode.class); + + private String datasourceInterface; + private String publisherEndpoint; + + @Override + protected String execute(final Env env) throws Exception { + URI getURI = new URIBuilder(getPublisherEndpoint()).addParameter("datasourceApi", getDatasourceInterface()).addParameter("ariadneplusTarget", "VIRTUOSO").build(); + HttpClient c = HttpClients.createDefault(); + HttpResponse res = c.execute(new HttpGet(getURI)); + String nTriples = EntityUtils.toString(res.getEntity()); + + log.info("Deleted " + nTriples + " triples in Virtuoso server"); + + env.setAttribute("triples", nTriples); + return Arc.DEFAULT_ARC; + + } + + public String getDatasourceInterface() { + return datasourceInterface; + } + + public void setDatasourceInterface(final String datasourceInterface) { + this.datasourceInterface = datasourceInterface; + } + + public String getPublisherEndpoint() { + return publisherEndpoint; + } + + public void setPublisherEndpoint(final String publisherEndpoint) { + this.publisherEndpoint = publisherEndpoint; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusByTypeIterator.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusByTypeIterator.java new file mode 100644 index 0000000..fbf090f --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusByTypeIterator.java @@ -0,0 +1,91 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.client.utils.URIBuilder; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 01/03/2018. + * + * @author Alessia Bardi + */ +public class VirtuosoAriadnePlusByTypeIterator extends VirtuosoAriadnePlusIterator { + + private static final Log log = LogFactory.getLog(VirtuosoAriadnePlusByTypeIterator.class); + private String typeName; + private String typeNamespace; + + @Override + protected URI getURIForSubjectList(final int offset) throws URISyntaxException { + URIBuilder builder = new URIBuilder(getVirtuosoReaderAPIUrl() + "/apiSubjectsWithType"); + builder.addParameter("api", getDatasourceInterface()); + builder.addParameter("typeNamespace", typeNamespace); + builder.addParameter("typeName", typeName); + builder.addParameter("limit", Integer.toString(LIMIT)); + builder.addParameter("offset", Integer.toString(offset)); + return builder.build(); + } + + @Override + protected URI getURIForRDFRequest(final String subjectURL) throws URISyntaxException { + URIBuilder builder = new URIBuilder(getVirtuosoReaderAPIUrl() + "/subject").addParameter("subjectURL", subjectURL).addParameter("typeName", typeName).addParameter("timeout", ANY_TIME_QUERY_MS); + return builder.build(); + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(final String typeName) { + this.typeName = typeName; + } + + public String getTypeNamespace() { + return typeNamespace; + } + + public void setTypeNamespace(final String typeNamespace) { + this.typeNamespace = typeNamespace; + } + + public VirtuosoAriadnePlusByTypeIterator typeName(final String typeName) { + this.typeName = typeName; + return this; + } + + public VirtuosoAriadnePlusByTypeIterator typeNamespace(final String typeNamespace) { + this.typeNamespace = typeNamespace; + return this; + } + + @Override + public VirtuosoAriadnePlusByTypeIterator restTemplate(final RestTemplate restTemplate) { + setRestTemplate(restTemplate); + return this; + } + @Override + public VirtuosoAriadnePlusByTypeIterator datasourceInterface(final String datasourceInterface) { + setDatasourceInterface(datasourceInterface); + return this; + } + @Override + public VirtuosoAriadnePlusByTypeIterator virtuosoReaderAPIUrl(final String virtuosoReaderAPIUrl) { + setVirtuosoReaderAPIUrl(virtuosoReaderAPIUrl); + return this; + } + @Override + public VirtuosoAriadnePlusByTypeIterator datasourceName(final String datasourceName) { + setDatasourceName(datasourceName); + return this; + } + @Override + public VirtuosoAriadnePlusByTypeIterator errors(final Map errors) { + setErrors(errors); + return this; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusException.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusException.java new file mode 100644 index 0000000..daaef3c --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusException.java @@ -0,0 +1,24 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +/** + * Created by Alessia Bardi on 17/02/2018. + * + * @author Alessia Bardi + */ +public class VirtuosoAriadnePlusException extends Exception{ + + public VirtuosoAriadnePlusException() { + } + + public VirtuosoAriadnePlusException(final String message) { + super(message); + } + + public VirtuosoAriadnePlusException(final String message, final Throwable cause) { + super(message, cause); + } + + public VirtuosoAriadnePlusException(final Throwable cause) { + super(cause); + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIterator.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIterator.java new file mode 100644 index 0000000..7ccef34 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIterator.java @@ -0,0 +1,352 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; +import eu.dnetlib.data.collector.ThreadSafeIterator; +import eu.dnetlib.rmi.data.CollectorServiceRuntimeException; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.client.utils.URIBuilder; +import org.springframework.http.*; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +/** + * Created by Alessia Bardi on 31/01/2018. + * + * @author Alessia Bardi + */ +public class VirtuosoAriadnePlusIterator extends ThreadSafeIterator { + + private static final Log log = LogFactory.getLog(VirtuosoAriadnePlusIterator.class); + protected static final String ANY_TIME_QUERY_MS = "1800000"; //1800000 == 3 mins + protected static final int QUEUE_TIMEOUT_SECONDS = 600; + public final static String TERMINATOR = "ARNOLD"; + public final static String ERROR_TERMINATOR = "SCHWARZ"; + protected final static int SLEEP_MS = 5000; + protected final static int MAX_RETRIES = 3; + protected final static int LIMIT = 100; + + private String datasourceName; + private String datasourceInterface; + private String virtuosoReaderAPIUrl; + private boolean started = false; + private Map errors = Maps.newHashMap(); + private List listForClass = Lists.newArrayList(); + private BlockingQueue elements = Queues.newArrayBlockingQueue(10); + + private String currentElement = null; + private ExecutorService executor = Executors.newSingleThreadExecutor(); + + private RestTemplate restTemplate; + + + private synchronized void verifyStarted(){ + if (!this.started) { + this.started = true; + fillQueue(); + getNextElement(MAX_RETRIES); + } + } + + protected void fillQueue(){ + log.info("Virtuoso reader at : " + getVirtuosoReaderAPIUrl()); + getExecutor().submit(() -> { + try { + int offset = 0; + boolean again; + do { + List subjectList = getSubjectList(offset); + for (String subject : subjectList) { + String xmlFile = tryGetRDF(subject, MAX_RETRIES); + if (StringUtils.isBlank(xmlFile)) { + log.warn("Skipping blank RDF for " + subject); + } else { + getElements().offer(xmlFile, QUEUE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + } + again = subjectList.size() == LIMIT; + offset += LIMIT; + } while(again); + log.debug("End of subject list, adding terminator to the queue"); + getElements().offer(TERMINATOR, QUEUE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } catch (Exception e) { + log.error(e.getMessage()); + try { + getElements().offer(ERROR_TERMINATOR, QUEUE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } catch (InterruptedException e1) { + log.error(e1.getMessage()); + } + } + + }); + getExecutor().shutdown(); + } + + + protected String tryGetRDF(final String subjectURL, int attempt) throws URISyntaxException, InterruptedException, VirtuosoAriadnePlusException { + //this is something George said: if it has no http URI, then it is not to be considered relevant by itself + if(!subjectURL.startsWith("http")){ + log.debug("Skipping as non-http url: "+subjectURL); + errors.merge("Non-http URLs", 1, Integer::sum); + return null; + } + log.debug("Querying Api, remaining attempts: "+attempt); + if (attempt <= 0) { + errors.merge("Failed tryGetRDF", 1, Integer::sum); + return null; + } + ResponseEntity response = null; + try { + response = getRDF(subjectURL); + }catch(ResourceAccessException e){ + //request timed out --> sleep and try again + log.warn("Request timeout for "+subjectURL+": I'll sleep and then try again"); + Thread.sleep(SLEEP_MS); + return tryGetRDF(subjectURL, --attempt); + } + HttpStatus responseStatus = response.getStatusCode(); + if (responseStatus.is2xxSuccessful()) { + String rdfFile = response.getBody(); + if(StringUtils.isBlank(rdfFile)){ + log.warn("Got blank RDF for "+subjectURL+" , let's try again..."); + Thread.sleep(SLEEP_MS); + return tryGetRDF(subjectURL, --attempt); + } + else { + final String xmlFile = completeXML(rdfFile, subjectURL); + return xmlFile; + } + } else { + if (responseStatus.is5xxServerError()) { + //sleep for a while and re-try + log.warn("HTTP ERROR: "+responseStatus.value() + ": " + responseStatus.getReasonPhrase()+": I'll sleep and then try again"); + Thread.sleep(SLEEP_MS); + return tryGetRDF(subjectURL, --attempt); + } else { + log.error("ERROR: Can't get the RDF for " + subjectURL + " " + responseStatus.value() + ": " + responseStatus.getReasonPhrase()); + errors.merge(responseStatus.value() + ": " + responseStatus.getReasonPhrase(), 1, Integer::sum); + } + } + return null; + } + + protected URI getURIForSubjectList(final int offset) throws URISyntaxException { + URIBuilder builder = new URIBuilder(getVirtuosoReaderAPIUrl() + "/apiSubjects"); + builder.addParameter("api", getDatasourceInterface()); + builder.addParameter("limit", Integer.toString(LIMIT)); + builder.addParameter("offset", Integer.toString(offset)); + return builder.build(); + } + + protected List getSubjectList(final int offset) throws URISyntaxException, VirtuosoAriadnePlusException { + URI uri = getURIForSubjectList(offset); + log.debug("fillQueue -- Calling for subject list: " + uri.toString()); + List subjectList; + try { + subjectList = getRestTemplate().getForObject(uri, getListForClass().getClass()); + }catch(RestClientException rce){ + throw new VirtuosoAriadnePlusException(rce); + } + return subjectList; + } + + protected URI getURIForRDFRequest(final String subjectURL) throws URISyntaxException { + URIBuilder builder = new URIBuilder(getVirtuosoReaderAPIUrl() + "/subject").addParameter("subjectURL", subjectURL).addParameter("timeout", ANY_TIME_QUERY_MS); + return builder.build(); + } + + protected ResponseEntity getRDF(final String subjectURL) throws URISyntaxException { + HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Lists.newArrayList(MediaType.APPLICATION_XML)); + URI uri = getURIForRDFRequest(subjectURL); + log.debug("fillQueue -- Calling for subject RDF: " + uri.toString()); + HttpEntity entity = new HttpEntity<>("parameters", headers); + return restTemplate.exchange(uri, HttpMethod.GET, entity, String.class); + } + + + public String completeXML(final String rdfFile, final String url) { + String xmlEscapedURL = StringEscapeUtils.escapeXml11(url); + String rdfFileNoXmlDecl = rdfFile.replaceAll("\\<\\?xml(.+?)\\?\\>", "").trim(); + return "
" + + xmlEscapedURL + "" + datasourceInterface + "" + datasourceName + + "
" + rdfFileNoXmlDecl + "
"; + } + + @Override + public boolean doHasNext() { + try { + verifyStarted(); + } catch (Exception e) { + getExecutor().shutdownNow(); + throw new CollectorServiceRuntimeException(e); + } + switch(currentElement){ + case TERMINATOR: + if(!executor.isTerminated()) executor.shutdownNow(); + return false; + case ERROR_TERMINATOR: + executor.shutdownNow(); + throw new CollectorServiceRuntimeException("Error getting elements from virtuoso"); + default: + return true; + } + } + + @Override + public String doNext() { + if(!hasNext()) { + log.error("Next called but hasNext is false", new NoSuchElementException()); + throw new NoSuchElementException(); + } + switch(currentElement){ + case TERMINATOR: + case ERROR_TERMINATOR: + executor.shutdownNow(); + throw new NoSuchElementException(); + default: + String res = currentElement; + getNextElement(MAX_RETRIES); + return res; + } + } + + private void getNextElement(int attempt){ + log.debug("polling from queue, remaining attempts: "+attempt); + if(attempt <= 0) currentElement = ERROR_TERMINATOR; + else{ + try { + currentElement = elements.take(); + } catch (InterruptedException e) { + //current thread interrupted. Let's end. + currentElement = ERROR_TERMINATOR; + executor.shutdownNow(); + } + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + public VirtuosoAriadnePlusIterator datasourceInterface(final String datasourceInterface) { + this.datasourceInterface = datasourceInterface; + return this; + } + + public VirtuosoAriadnePlusIterator virtuosoReaderAPIUrl(final String virtuosoReaderAPIUrl) { + this.virtuosoReaderAPIUrl = virtuosoReaderAPIUrl; + return this; + } + + public VirtuosoAriadnePlusIterator datasourceName(final String datasourceName) { + this.datasourceName = datasourceName; + return this; + } + + public VirtuosoAriadnePlusIterator errors(final Map errors) { + this.errors = errors; + return this; + } + + public String getDatasourceInterface() { + return datasourceInterface; + } + + public String getVirtuosoReaderAPIUrl() { + return virtuosoReaderAPIUrl; + } + + public Map getErrors() { + return errors; + } + + public BlockingQueue getElements() { + return elements; + } + + public RestTemplate getRestTemplate() { + return restTemplate; + } + + public VirtuosoAriadnePlusIterator restTemplate(final RestTemplate restTemplate) { + this.restTemplate = restTemplate; + return this; + } + + public String getDatasourceName() { + return datasourceName; + } + + public boolean isStarted() { + return started; + } + + public List getListForClass() { + return listForClass; + } + + public String getCurrentElement() { + return currentElement; + } + + public ExecutorService getExecutor() { + return executor; + } + + public void setDatasourceName(final String datasourceName) { + this.datasourceName = datasourceName; + } + + public void setDatasourceInterface(final String datasourceInterface) { + this.datasourceInterface = datasourceInterface; + } + + public void setVirtuosoReaderAPIUrl(final String virtuosoReaderAPIUrl) { + this.virtuosoReaderAPIUrl = virtuosoReaderAPIUrl; + } + + public void setStarted(final boolean started) { + this.started = started; + } + + public void setErrors(final Map errors) { + this.errors = errors; + } + + public void setListForClass(final List listForClass) { + this.listForClass = listForClass; + } + + public void setElements(final BlockingQueue elements) { + this.elements = elements; + } + + public void setCurrentElement(final String currentElement) { + this.currentElement = currentElement; + } + + public void setExecutor(final ExecutorService executor) { + this.executor = executor; + } + + public void setRestTemplate(final RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRICollectorPlugin.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRICollectorPlugin.java new file mode 100644 index 0000000..4533a6d --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRICollectorPlugin.java @@ -0,0 +1,41 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import eu.dnetlib.rmi.data.CollectorServiceException; +import eu.dnetlib.rmi.data.InterfaceDescriptor; +import eu.dnetlib.rmi.data.plugin.AbstractCollectorPlugin; + +/** + * This collector plugins collects metadata records from the EHRI portal export URL in the form https://portal.ehri-project.eu/units//export. + * IDs of units are retrieved from the EHRI GraphQL API, see docs at https://portal.ehri-project.eu/api/graphql + * Created by Alessia Bardi on 19/04/2017. + * + * @author Alessia Bardi + */ +public class EHRICollectorPlugin extends AbstractCollectorPlugin { + + private EHRIIteratorFactory ehriIteratorFactory; + + @Override + public Iterable collect(final InterfaceDescriptor interfaceDescriptor, final String fromDate, final String untilDate) + throws CollectorServiceException { + + // https://portal.ehri-project.eu/units + final String baseUrl = interfaceDescriptor.getBaseUrl(); + // export + final String suffixToUrl = interfaceDescriptor.getParams().get("suffixToBaseUrl"); + + //info to get the identifiers from the graphQL API: + final String graphQLURL = interfaceDescriptor.getParams().get("graphQLURL"); + final String graphQLQuery = interfaceDescriptor.getParams().get("graphQLQuery"); + + return () -> ehriIteratorFactory.newIterator(graphQLURL, graphQLQuery, baseUrl, suffixToUrl); + } + + public EHRIIteratorFactory getEhriIteratorFactory() { + return ehriIteratorFactory; + } + + public void setEhriIteratorFactory(final EHRIIteratorFactory ehriIteratorFactory) { + this.ehriIteratorFactory = ehriIteratorFactory; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClient.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClient.java new file mode 100644 index 0000000..9d70093 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClient.java @@ -0,0 +1,77 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Iterator; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import eu.dnetlib.rmi.data.CollectorServiceException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +/** + * IDs of units are retrieved from the EHRI GraphQL API, see docs at https://portal.ehri-project.eu/api/graphql + * + * Created by Alessia Bardi on 19/04/2017. + * + * @author Alessia Bardi + */ +public class EHRIGraphQLClient { + + private static final Log log = LogFactory.getLog(EHRIGraphQLClient.class); + + public Iterator collect(final String baseURL, final String graphQLQuery) throws URISyntaxException, IOException, CollectorServiceException { + /* + The curl equivalent: + curl --header X-Stream:true \ + --header Content-type:application/json \ + https://portal.ehri-project.eu/api/graphql \ + --data-binary '{"query":"{topLevelDocumentaryUnits{items{id}}}"}' + */ + CloseableHttpClient httpClient = HttpClients.createDefault(); + URI baseURI = new URI(baseURL); + HttpPost httpPost = new HttpPost(); + httpPost.setURI(baseURI); + httpPost.setHeader("X-Stream", "true"); + httpPost.setHeader("Content-type", "application/json" ); + log.info(graphQLQuery); + StringEntity postQuery = new StringEntity(graphQLQuery); + httpPost.setEntity(postQuery); + HttpEntity entity = null; + try(CloseableHttpResponse response = httpClient.execute(httpPost)) { + switch(response.getStatusLine().getStatusCode()){ + case 200: + entity = response.getEntity(); + InputStreamReader reader = new InputStreamReader(entity.getContent()); + return getIdentifiers(reader); + default: + log.error(httpPost); + log.error(response.getStatusLine()); + throw new CollectorServiceException(response.getStatusLine().toString()); + } + } finally { + if(entity != null) EntityUtils.consume(entity); + } + } + + protected Iterator getIdentifiers(final InputStreamReader input){ + JsonObject jsonObject = new JsonParser().parse(input).getAsJsonObject(); + JsonArray items = jsonObject.getAsJsonObject("data").getAsJsonObject("topLevelDocumentaryUnits").getAsJsonArray("items"); + log.debug(items); + return Lists.newArrayList(Iterables.transform(items, jelem -> jelem.getAsJsonObject().get("id").getAsString())).iterator(); + } + +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIterator.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIterator.java new file mode 100644 index 0000000..c09b56f --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIterator.java @@ -0,0 +1,107 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URL; +import java.util.Iterator; + +import com.ximpleware.*; +import eu.dnetlib.data.collector.ThreadSafeIterator; +import eu.dnetlib.rmi.data.CollectorServiceRuntimeException; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created by Alessia Bardi on 03/05/2017. + * + * @author Alessia Bardi + */ +public class EHRIIterator extends ThreadSafeIterator { + + private static final Log log = LogFactory.getLog(EHRIIterator.class); + private static int MAX_FAILED = 100; + private Iterator identifiers; + private String baseUrl; + private String suffix; + private int failed = 0; + + + public EHRIIterator(final Iterator idIterator, final String baseUrl, final String suffix){ + this.identifiers = idIterator; + this.baseUrl = baseUrl; + this.suffix = suffix; + } + + @Override + public boolean doHasNext() { + return identifiers.hasNext(); + } + + @Override + public String doNext() { + String target = baseUrl+"/"+identifiers.next()+"/"+suffix; + log.debug("Getting "+target); + try { + URL url = new URL(target); + String record = IOUtils.toString(url, "UTF-8"); + return removeDefaultEADNamespace(record); + } catch (IOException e) { + log.error("Unable to get "+target, e); + failed++; + if(failed > MAX_FAILED){ + throw new CollectorServiceRuntimeException("Could not download more than "+MAX_FAILED+"documents from EHRI. Stopping."); + } + if(this.hasNext()){ + return this.next(); + } + else return ""; + } + } + + protected String removeDefaultEADNamespace(final String xml) { + try { + VTDGen vg = new VTDGen(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + vg.setDoc(xml.getBytes()); + vg.parse(false); // turn off namespace awareness so that + VTDNav vn = vg.getNav(); + AutoPilot ap = new AutoPilot(vn); + XMLModifier xm = new XMLModifier(vn); + ap.selectXPath("/ead/@xmlns"); + int i = 0; + while ((i = ap.evalXPath()) != -1) { + xm.remove(); + } + xm.output(baos); + return baos.toString(); + }catch(Exception e){ + log.error("Cannot remove default namespace from ead element: "+xml); + throw new CollectorServiceRuntimeException("Cannot remove default namespace from ead element", e); + } + } + + public Iterator getIdentifiers() { + return identifiers; + } + + public void setIdentifiers(final Iterator identifiers) { + this.identifiers = identifiers; + } + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(final String baseUrl) { + this.baseUrl = baseUrl; + } + + public String getSuffix() { + return suffix; + } + + public void setSuffix(final String suffix) { + this.suffix = suffix; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorFactory.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorFactory.java new file mode 100644 index 0000000..0d65ecc --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorFactory.java @@ -0,0 +1,38 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Iterator; + +import eu.dnetlib.rmi.data.CollectorServiceException; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Created by Alessia Bardi on 03/05/2017. + * + * @author Alessia Bardi + */ +public class EHRIIteratorFactory { + + @Autowired + private EHRIGraphQLClient ehriGraphQLClient; + + public Iterator newIterator(final String baseURLIdentifiers, final String queryIdentifiers, + final String baseUrl, + final String suffix) { + try { + Iterator ids = ehriGraphQLClient.collect(baseURLIdentifiers, queryIdentifiers); + return new EHRIIterator(ids, baseUrl, suffix); + } catch (CollectorServiceException | IOException | URISyntaxException e) { + throw new RuntimeException(e); + } + } + + public EHRIGraphQLClient getEhriGraphQLClient() { + return ehriGraphQLClient; + } + + public void setEhriGraphQLClient(final EHRIGraphQLClient ehriGraphQLClient) { + this.ehriGraphQLClient = ehriGraphQLClient; + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreCollectorPlugin.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreCollectorPlugin.java new file mode 100644 index 0000000..642dccc --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreCollectorPlugin.java @@ -0,0 +1,53 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.isidore; + +import eu.dnetlib.miscutils.functional.xml.SaxonHelper; +import eu.dnetlib.rmi.data.CollectorServiceException; +import eu.dnetlib.rmi.data.InterfaceDescriptor; +import eu.dnetlib.rmi.data.plugin.AbstractCollectorPlugin; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @author alessia bardi + * + */ +public class IsidoreCollectorPlugin extends AbstractCollectorPlugin { + + @Autowired + private SaxonHelper saxonHelper; + + @Override + public Iterable collect(InterfaceDescriptor ifDescriptor, String arg1, String arg2) + throws CollectorServiceException { + final String baseUrl = ifDescriptor.getBaseUrl(); + final String queryParams = ifDescriptor.getParams().get("queryParams"); + final String pageParam = ifDescriptor.getParams().get("pageParam"); + final String startFromPage = ifDescriptor.getParams().get("startFromPage"); + final String nextPagePath = ifDescriptor.getParams().get("nextPagePath"); + final String pageSizeParam = ifDescriptor.getParams().get("pageSizeParam"); + final String pageSize = ifDescriptor.getParams().get("pageSize"); + final String resultTotalXpath = ifDescriptor.getParams().get("resultTotalXpath"); + final String entityXpath = ifDescriptor.getParams().get("entityXpath"); + + if (StringUtils.isBlank(baseUrl)) {throw new CollectorServiceException("Param 'baseUrl' is null or empty");} + if (StringUtils.isBlank(pageParam)) {throw new CollectorServiceException("Param 'pageParam' is null or empty");} + if (StringUtils.isBlank(startFromPage)) {throw new CollectorServiceException("Param 'startFromPage' is null or empty");} + if (StringUtils.isBlank(nextPagePath)) {throw new CollectorServiceException("Param 'nextPagePath' is null or empty");} + if (StringUtils.isBlank(pageSizeParam)) {throw new CollectorServiceException("Param 'pageSizeParam' is null or empty");} + if (StringUtils.isBlank(pageSize)) {throw new CollectorServiceException("Param 'pageSize' is null or empty");} + if (StringUtils.isBlank(resultTotalXpath)) {throw new CollectorServiceException("Param 'resultTotalXpath' is null or empty");} + if (StringUtils.isBlank(entityXpath)) {throw new CollectorServiceException("Param 'entityXpath' is null or empty");} + + return () -> new IsidoreIterator( + saxonHelper, + baseUrl, + queryParams, + pageParam, + Integer.parseInt(startFromPage), + nextPagePath, + pageSizeParam, + Integer.parseInt(pageSize), + resultTotalXpath, + entityXpath); + } +} diff --git a/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIterator.java b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIterator.java new file mode 100644 index 0000000..0f92726 --- /dev/null +++ b/dnet-ariadneplus/src/main/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIterator.java @@ -0,0 +1,169 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.isidore; /** + * log.debug(...) equal to log.trace(...) in the application-logs + *

+ * known bug: at resumptionType 'discover' if the (resultTotal % resultSizeValue) == 0 the collecting fails -> change the resultSizeValue + */ + +import java.io.InputStream; +import java.net.URL; +import java.util.Iterator; +import java.util.Queue; +import java.util.concurrent.PriorityBlockingQueue; + +import com.google.common.collect.Maps; +import eu.dnetlib.miscutils.functional.xml.SaxonHelper; +import eu.dnetlib.rmi.data.CollectorServiceException; +import net.sf.saxon.s9api.*; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @author Jochen Schirrwagen, Aenne Loehden, Andreas Czerniak, Alessia Bardi + * @date 2018-09-03 + * + */ +public class IsidoreIterator implements Iterator { + + private static final Log log = LogFactory.getLog(IsidoreIterator.class); // NOPMD by marko on 11/24/08 5:02 PM + + private SaxonHelper saxonHelper; + private Queue recordQueue = new PriorityBlockingQueue(); + private InputStream resultStream; + private String query; + private String querySize; + private String queryPage; + private int resultTotal = -1; + + private String baseUrl; + private String queryParams; + private String pageParam; + private int page; + private String pageSizeParam; + private int pageSize; + + private XPathSelector xprEntity; + private XPathSelector xprResultTotalPath; + private XPathSelector xprNextPagePath; + + public IsidoreIterator( + final SaxonHelper saxonHelper, + final String baseUrl, + final String queryParams, + final String pageParam, + final int startFromPage, + final String nextPagePath, + final String pageSizeParam, + final int pageSize, + final String resultTotalXpath, + final String entityXpath + ) { + this.saxonHelper = saxonHelper; + this.baseUrl = baseUrl; + this.queryParams = queryParams; + this.pageParam = pageParam; + this.page = startFromPage; + this.queryPage = this.pageParam+"="+this.page; + this.pageSizeParam = pageSizeParam; + this.pageSize = pageSize; + this.querySize = this.pageSizeParam+"="+this.pageSize; + try { + initXpathSelector(resultTotalXpath, nextPagePath, entityXpath); + } catch (Exception e) { + throw new IllegalStateException("xml transformation init failed: " + e.getMessage()); + } + initQuery(); + } + + private void initXpathSelector(final String resultTotalXpath,final String nextPagePath, final String entityXpath) + throws SaxonApiException { + xprResultTotalPath = this.saxonHelper.help().prepareXPathSelector(resultTotalXpath, Maps.newHashMap()); + xprNextPagePath = this.saxonHelper.help().prepareXPathSelector(nextPagePath, Maps.newHashMap()); + xprEntity = this.saxonHelper.help().prepareXPathSelector(entityXpath, Maps.newHashMap()); + } + + private void initQuery() { + query = baseUrl + "?" + queryParams +"&"+ querySize +"&"+ queryPage; + } + + private void disconnect() { + // TODO close inputstream + } + + /* (non-Javadoc) + * @see java.util.Iterator#hasNext() + */ + @Override + public boolean hasNext() { + if (recordQueue.isEmpty() && query.isEmpty()) { + disconnect(); + return false; + } else { + return true; + } + } + + /* (non-Javadoc) + * @see java.util.Iterator#next() + */ + @Override + public String next() { + synchronized (recordQueue) { + while (recordQueue.isEmpty() && !query.isEmpty()) { + try { + log.info("get Query: " + query); + query = downloadPage(query); + log.debug("next queryURL from downloadPage(): " + query); + } catch (CollectorServiceException e) { + log.debug("CollectorPlugin.next()-Exception: " + e); + throw new RuntimeException(e); + } + } + return recordQueue.poll(); + } + } + + /* + * download page and return nextQuery + */ + private String downloadPage(String query) throws CollectorServiceException { + String nextQuery = ""; + XdmValue nodeList; + + try { + URL qUrl = new URL(query); + resultStream = qUrl.openStream(); + String resultPage = IOUtils.toString(resultStream); + nodeList = this.saxonHelper.help().evaluate(resultPage, xprEntity); + log.debug("nodeList.size: " + nodeList.size()); + for(XdmItem entity : nodeList){ + recordQueue.add(this.saxonHelper.help().serialize((XdmNode) entity)); + } + + String nextPage = this.saxonHelper.help().evaluateSingleAsString(resultPage, xprNextPagePath); + if(StringUtils.isBlank(nextPage)){ + log.info("No next page available, we reached the end"); + } + else{ + this.queryPage = pageParam+"="+nextPage; + return baseUrl + "?" + queryParams +"&"+ querySize +"&"+ queryPage; + } + + if (resultTotal == -1) { + String tot = this.saxonHelper.help().evaluateSingleAsString(resultPage, xprResultTotalPath); + resultTotal = Integer.parseInt(tot); + log.info("resultTotal was -1 is now: " + resultTotal); + } + log.info("resultTotal: " + resultTotal); + log.debug("nextQueryUrl: " + nextQuery); + return nextQuery; + + } catch (Exception e) { + log.error(e); + throw new IllegalStateException("collection failed: " + e.getMessage()); + } + } + + +} diff --git a/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/ariadneplus_mail_template.xml b/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/ariadneplus_mail_template.xml new file mode 100644 index 0000000..c95c212 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/ariadneplus_mail_template.xml @@ -0,0 +1,46 @@ + +

+ + + + + +
+ + AriadnePlus workflow message + [ARIADNEPLUS AGGREGATOR] $proc.status$: $proc.name$ + + +

**** This mail has been generated automatically by the D-NET Manager Service of the AriadnePlus Aggregator, please don't reply ****

+

+ Datasource name:$proc.dsName$
+ Datasource API:$proc.dsInterface$
+ Workflow:$proc.name$
+ Status: $proc.status$
+

+
+

+ Workflow details:
+ + + + + $if(proc.outputParams)$ + $proc.outputParams.keys:{k|}$ + $endif$ +
Process ID: $proc.id$
Start date: $proc.humanStartDate$
End date: $proc.humanEndDate$
$k$: $proc.outputParams.(k)$
+

+ $if(error)$ +
+

+ Error message: $proc.error$
+ Error stacktrace:
+

$proc.errorStacktrace$
+

+ $endif$ + + ]]> +
+ + diff --git a/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/updateNotifications.txt b/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/updateNotifications.txt new file mode 100644 index 0000000..58405d4 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu.dnetlib.bootstrap.profiles.EmailDSResourceType/updateNotifications.txt @@ -0,0 +1,11 @@ +To automatically update the NOTIFICATIONS section of workflows to modify the list of people to notify, the following xqueries can be run: + +for $x in collection('/db/DRIVER/WorkflowDSResources/WorkflowDSResourceType') +return update insert +into $x[.//WORKFLOW_NAME = 'wf name']//NOTIFICATIONS + +where: +- xxx@xxx.com is the email that will receive notifications +- COND is the sending criteria and must be one of the following values: ONLY_SUCCESS, ONLY_FAILED, ALWAYS, NEVER +- wf name is the name of the workflow. E.g. 'Publish', 'Aggregate Metadata (X3M)', 'CLARIN: Aggregate Metadata (X3M)' + diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/applicationContext-ariadneplus.properties b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/applicationContext-ariadneplus.properties new file mode 100644 index 0000000..0d1441d --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/applicationContext-ariadneplus.properties @@ -0,0 +1 @@ +service.index.layoutToRecordStylesheet=classpath:/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl \ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/CLARIN_README.txt b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/CLARIN_README.txt new file mode 100644 index 0000000..c821a9d --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/CLARIN_README.txt @@ -0,0 +1,8 @@ +Getting the latest mappings: +1. wget "https://github.com/acdh-oeaw/ariadneplus_mapping/archive/development.zip" +2. Extract the zip +The workflow is configured to read from /var/lib/ariadneplus-data/clarin/ariadneplus_mapping-development/batch/x3ml-mappings + +Getting the latest records +1. Rename possibly existing folder results +2. Run prepareClarin.sh (with noHup or screen) \ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/prepareClarin.sh b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/prepareClarin.sh new file mode 100755 index 0000000..a761d31 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/clarin/prepareClarin.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Author: Wolfgang Sauer. +# See https://support.d4science.org/issues/8626#change-58157 + +# this has to be changed ++++++++++++++++++++++++ +WORK_DIR=/var/lib/ariadneplus-data/clarin + +# fix paths ++++++++++++++++++++++++++++++++++++++ +HARVESTER_URL=https://vlo.clarin.eu/resultsets +RESULTSETS='clarin.tar.bz2 others.tar.bz2' +CMDI_PATH=results/cmdi +# end fix paths +++++++++++++++++++++++++++++++++ + +if [ -e $WORK_DIR/results ]; then + echo "removing old results..." + rm -rf $WORK_DIR/results +fi + +cd $WORK_DIR + +#download harvested records, unpack, clean +for RESULTSET in $RESULTSETS; do + #download tar + wget $HARVESTER_URL/$RESULTSET + + echo "unpacking $RESULTSET..." + #unpack CMDI 1.2 files + tar xjf $RESULTSET $CMDI_PATH + + #delete tar + rm $RESULTSET +done + +echo "correcting hdl string and reorganizing files by profile id..." + +find $WORK_DIR/$CMDI_PATH -name '*.xml'| while read -r file; do + echo "treating file $file" +# add http to hdl string + sed -i 's/hdl:/http:\/\/hdl.handle.net\//g' $file + +# organizing files by profile id + profileID=$(grep -oP '.+p_[0-9]+' $file|grep -oE p_[0-9]+) + if [ -n "$profileID" ]; then + outDir=$WORK_DIR/$CMDI_PATH/$profileID + else + outDir=$WORK_DIR/$CMDI_PATH/noProfileID + fi + + if [ ! -e $outDir ]; then + mkdir $outDir + fi + + mv $file $outDir +done + +echo "removing empty directories..." +rmdir --ignore-fail-on-non-empty $WORK_DIR/$CMDI_PATH + +echo "finished!" \ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl new file mode 100644 index 0000000..965be43 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/index/ariadneplusLayoutToRecordStylesheet.xsl @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + . + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/applicationContext-ariadneplus-msro-nodes.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/applicationContext-ariadneplus-msro-nodes.xml new file mode 100644 index 0000000..cb4cbfe --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/applicationContext-ariadneplus-msro-nodes.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/clarin_tds.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/clarin_tds.xml.st new file mode 100644 index 0000000..2f17d72 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/nodes/clarin_tds.xml.st @@ -0,0 +1,22 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/CLARIN_aggregation_wf.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/CLARIN_aggregation_wf.xml.st new file mode 100644 index 0000000..725240a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/CLARIN_aggregation_wf.xml.st @@ -0,0 +1,150 @@ + + +
+ + + + + +
+ + $name$ + $desc$ + + aggregator + $priority$ + + + + + INCREMENTAL + + + false + REFRESH + + + $tdsCsv$ + 4d94a3f0-a5c8-441e-a506-8328af17a6f3_VHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZXMvVHJhbnNmb3JtYXRpb25SdWxlRFNSZXNvdXJjZVR5cGU= + + e508ddc7-ff5e-45dc-9116-96a2201d0bc9_Q2xlYW5lckRTUmVzb3VyY2VzL0NsZWFuZXJEU1Jlc291cmNlVHlwZQ== + + + + transformed + REFRESH + + CIDOC + OAI + transformed + oaistore_ariadneplus + + + + Collect metadata + + + + + + + + + + + + + + + + + + + Transform records + + + + + + + + + + + + + + + + + + + + + + + + + + Index record + + + + + + + + + + + + + + + + + + + Send to OAI-PMH Publisher + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/JRR_publish_wf.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/JRR_publish_wf.xml.st new file mode 100644 index 0000000..ff7ecd6 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/JRR_publish_wf.xml.st @@ -0,0 +1,55 @@ + + +
+ + + + + +
+ + $name$ + $desc$ + + publishing + $priority$ + + + + + http://beta-ariadneplus.d4science.org:8080/ariadneplus/publish + http://beta-ariadneplus.d4science.org:8080/ariadneplus/virtuoso + + + + Feed the JRR + + + + + + + + + + + + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/NEW_publish_wf.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/NEW_publish_wf.xml.st new file mode 100644 index 0000000..ce3f244 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/NEW_publish_wf.xml.st @@ -0,0 +1,79 @@ + + +
+ + + + + +
+ + $name$ + $desc$ + + publishing + $priority$ + + + + + + + public + REFRESH + http://beta-ariadneplus.d4science.org:8080/ariadneplus/publish + + + + Store RDF files in Virtuoso + + + + + + + + + + + + + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/unpublish_wf.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/unpublish_wf.xml.st new file mode 100644 index 0000000..4740940 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/unpublish_wf.xml.st @@ -0,0 +1,45 @@ + + +
+ + + + + +
+ + $name$ + $desc$ + + publishing + $priority$ + + + + http://beta-ariadneplus.d4science.org:8080/ariadneplus/unpublish + + + + Drop from Virtuoso + + + + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/x3m_aggregation_wf.xml.st b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/x3m_aggregation_wf.xml.st new file mode 100644 index 0000000..fcdaeed --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/ariadneplus/workflows/repo-hi/x3m_aggregation_wf.xml.st @@ -0,0 +1,149 @@ + + +
+ + + + + +
+ + $name$ + $desc$ + + aggregator + $priority$ + + + + + INCREMENTAL + + + false + REFRESH + + + + + + + + + transformed + REFRESH + + CIDOC + OAI + transformed + oaistore_ariadneplus + + + + Collect metadata + + + + + + + + + + + + + + + + + + + Transform records + + + + + + + + + + + + + + + + + + + + + + + + + + Index record + + + + + + + + + + + + + + + + + + + Send to OAI-PMH Publisher + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/CleanerDSResourceType/cleaning_rule.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/CleanerDSResourceType/cleaning_rule.xml new file mode 100644 index 0000000..53dd45f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/CleanerDSResourceType/cleaning_rule.xml @@ -0,0 +1,61 @@ + +
+ + + + + +
+ + + AriadnePlus Default cleaning rules + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/LightUiDSResourceType/lightui_ariadneplus.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/LightUiDSResourceType/lightui_ariadneplus.xml new file mode 100644 index 0000000..2ec7ccd --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/LightUiDSResourceType/lightui_ariadneplus.xml @@ -0,0 +1,89 @@ + + +
+ + + + + +
+ + + D-Net content Checker + Content Checker for AriadnePlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/public-CIDOC.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/public-CIDOC.xml new file mode 100644 index 0000000..6bd76b5 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/public-CIDOC.xml @@ -0,0 +1,71 @@ + +
+ + + + + +
+ + + CIDOC + CIDOC Metadata Format + public + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/transformed-CIDOC.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/transformed-CIDOC.xml new file mode 100644 index 0000000..325c097 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MDFormatDSResourceType/transformed-CIDOC.xml @@ -0,0 +1,114 @@ + +
+ + + + + +
+ + + CIDOC + CIDOC Metadata Format + transformed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MetadataFormatDSResourceType/7-de9a7d86-00cd-4348-905d-0c977b2b996d.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MetadataFormatDSResourceType/7-de9a7d86-00cd-4348-905d-0c977b2b996d.xml new file mode 100644 index 0000000..21ed0a1 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/MetadataFormatDSResourceType/7-de9a7d86-00cd-4348-905d-0c977b2b996d.xml @@ -0,0 +1,24 @@ + +
+ + + + + +
+ + + dnet:metadata_formats + Metadata formats + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/OAIPublisherConfigurationDSResourceType/oai-configuration.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/OAIPublisherConfigurationDSResourceType/oai-configuration.xml new file mode 100644 index 0000000..d117c95 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/OAIPublisherConfigurationDSResourceType/oai-configuration.xml @@ -0,0 +1,52 @@ + +
+ + + + + +
+ + + oai + ariadneplus + oaistore_ariadneplus + + + + + + + + + + + http://www.cidoc-crm.org/cidoc-crm/ + http://www.cidoc-crm.org/cidoc-crm/ + + + *=* + + + + + + + + + + + + + + SECURITY_PARAMETERS + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadne.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadne.xml new file mode 100644 index 0000000..16420f1 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadne.xml @@ -0,0 +1,148 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadne + false + + D-Net + + 0 + + 0 + UNAVAILABLE + ARIADNE + ARIADNE + + EU + + 10.42 + 43.71 + 0.0 + + http://www.ariadne-infrastructure.eu/ + ARIADNE + franca.debole@isti.cnr.it + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/old/acdm_correct + 2017-11-03T18:44:43+01:00 + 81618d0e-c816-46ce-808a-d540e9d97429_TURTdG9yZURTUmVzb3VyY2VzL01EU3RvcmVEU1Jlc291cmNlVHlwZQ== + 1623731 + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/ADS + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/AIAC + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/ARHEO + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/ARUP + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/CSIC + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/CYI + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/DAI + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/DANS + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/Discovery + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/INRAP + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/MIBAC + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/MNM + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/NIAM + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/OEAW + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/SND + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + sftpPubKeyAuthentication + sftp://ariadne2.isti.cnr.it/../../data/transform/test/ACDM_ORIGINAL_DATASETS/ZRC + //*[namespace-uri()='http://purl.org/dc/terms/' and local-name() = 'identifier' and starts-with(./text(),'http://registry.ariadne-infrastructure.eu')] + + + + + + aggregatorName + DNET + + + NamespacePrefix + ariadne_____ + + + + + 0 + + + + + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_topLevel.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_topLevel.xml new file mode 100644 index 0000000..0bb10a2 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_topLevel.xml @@ -0,0 +1,61 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::ariadneplus + false + + + + null + 0 + 0 + 0 + ARIADNEPLUS + ARIADNEPLUS + null + EU + + 0.0 + 0.0 + 0.0 + + http:// + ARIADNEPLUS + alessia.bardi@isti.cnr.it + + + httpSimple + http://data.d4science.org/em1EemhBdUZ0bjNGTWJNNjlxVDltcm9acDFmMHlBSVVHbWJQNStIS0N6Yz0 + concat('toplevel_', //data/local-name()) + + + + + NamespacePrefix + ariadneplus___ + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp3.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp3.xml new file mode 100644 index 0000000..ae2b6ef --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp3.xml @@ -0,0 +1,61 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::wp3 + false + + + + null + 0 + 0 + 0 + ARIADNEPLUS WP3 + ARIADNEPLUS WP3 + null + EU + + 0.0 + 0.0 + 0.0 + + http:// + ARIADNEPLUS + alessia.bardi@isti.cnr.it + + + httpSimple + http://data.d4science.org/eElreEVndEVONDRVMDNmTHoyTytaYWtqWnNYZC9FcXRHbWJQNStIS0N6Yz0 + //x + + + + + NamespacePrefix + ariadnepluswp3 + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp4.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp4.xml new file mode 100644 index 0000000..535638a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp4.xml @@ -0,0 +1,61 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::wp4 + false + + + + null + 0 + 0 + 0 + ARIADNEPLUS WP4 + ARIADNEPLUS WP4 + null + EU + + 0.0 + 0.0 + 0.0 + + http:// + ARIADNEPLUS + alessia.bardi@isti.cnr.it + + + httpSimple + http://data.d4science.org/MTRaQzNCTms4Wnl1czdsSkRIa0EvejRHRFIydEhKR3BHbWJQNStIS0N6Yz0 + concat('wp4_', /docs/local-name()) + + + + + NamespacePrefix + ariadnepluswp4 + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp7.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp7.xml new file mode 100644 index 0000000..af3ade5 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp7.xml @@ -0,0 +1,55 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::wp7 + false + + + + null + 0 + 0 + 0 + ARIADNEPLUS WP7 + ARIADNEPLUS WP7 + null + EU + + 0.0 + 0.0 + 0.0 + + http:// + ARIADNEPLUS + alessia.bardi@isti.cnr.it + + + + NamespacePrefix + ariadnepluswp7 + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp8.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp8.xml new file mode 100644 index 0000000..e098ac4 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ariadneplus_wp8.xml @@ -0,0 +1,61 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::wp8 + false + + + + null + 0 + 0 + 0 + ARIADNEPLUS WP8 + ARIADNEPLUS WP8 + null + EU + + 0.0 + 0.0 + 0.0 + + http:// + ARIADNEPLUS + alessia.bardi@isti.cnr.it + + + httpSimple + http://data.d4science.org/a1VZYXFVZ3BEeWl1czdsSkRIa0EvNkN2eS9kKzZpWEVHbWJQNStIS0N6Yz0 + concat('wp8_', //data/local-name()) + + + + + NamespacePrefix + ariadnepluswp8 + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/clarin.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/clarin.xml new file mode 100644 index 0000000..d55fc12 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/clarin.xml @@ -0,0 +1,74 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::clarin + false + + + + unknown + 0 + 0 + 0 + CLARIN + CLARIN + https://www.clarin.eu/sites/default/files/clarin-frontpage-logo.jpg + EU + + 0.0 + 0.0 + 0.0 + + https://www.clarin.eu/ + CLARIN + Matej.Durco@oeaw.ac.at + + + filesystem + file:///var/lib/ariadneplus-data/clarin/results-restruct/p_1271859438164 + //*[local-name()="MdSelfLink"] + + + filesystem + file:///var/lib/ariadneplus-data/clarin/results-restruct/p_1381926654438 + //*[local-name()="MdSelfLink"] + + + + + NamespacePrefix + clarin______ + + + dateOfCollection + Fri May 12 00:14:35 CEST 2017 + + + dateOfValidation + null + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/culturaitalia.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/culturaitalia.xml new file mode 100644 index 0000000..40b8625 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/culturaitalia.xml @@ -0,0 +1,66 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::culturaitalia + false + + + + null + 0 + 0 + 0 + Cultura Italia + Cultura Italia + + IT + + 0.0 + 0.0 + 0.0 + + http://www.culturaitalia.it/ + Cultura Italia + sara.digiorgio@beniculturali.it + + + oai + http://www.culturaitalia.it/oaiProviderCI/OAIHandler + //*[local-name()='header']/*[local-name()='identifier'] + + + oai + http://www.culturaitalia.it/oaiProviderCI/OAIHandler + //*[local-name()='header']/*[local-name()='identifier'] + + + + + NamespacePrefix + cultitalia__ + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/dariah-gr.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/dariah-gr.xml new file mode 100644 index 0000000..8a20ff0 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/dariah-gr.xml @@ -0,0 +1,75 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::dariahGR + false + + + + null + 0 + 0 + 0 + DARIAH-GR + DARIAH-GR + null + GR + + 0.0 + 0.0 + 0.0 + + http:// + DARIAH-GR + akarasimos@academyofathens.gr + + + oai + http://registry-dyas.imis.athena-innovation.gr:8080/dyas + 2017-09-20T10:35:18+02:00 + e3597b21-14e9-4aca-98d9-dc47ee913bda_TURTdG9yZURTUmVzb3VyY2VzL01EU3RvcmVEU1Jlc291cmNlVHlwZQ== + 4474 + 2017-09-20T10:53:24+02:00 + 146cf20b-5cfc-4882-8077-7bb53e7c9126_TURTdG9yZURTUmVzb3VyY2VzL01EU3RvcmVEU1Jlc291cmNlVHlwZQ== + //*[local-name() = 'header']/*[local-name() = 'identifier'] + 4461 + + + + + NamespacePrefix + dariah_gr___ + + + dateOfCollection + Thu Aug 10 15:02:13 CEST 2017 + + + dateOfValidation + null + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ehri.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ehri.xml new file mode 100644 index 0000000..ad5d486 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/ehri.xml @@ -0,0 +1,69 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::ehri + false + + + + null + 0 + 0 + 0 + European Holocaust Research Infrastructure + European Holocaust Research Infrastructure + http://www.locloud.eu/var/mdr_site/storage/images/media/images/ehri-logo/9694-1-eng-GB/EHRI-Logo_imagefull.jpg + EU + + 0.0 + 0.0 + 0.0 + + https://www.ehri-project.eu/ + EHRI + charles.riondet@inria.fr + + + ehri + https://portal.ehri-project.eu/units + //*[local-name()="eadheader"]/*[local-name()="eadid"] + + + + + NamespacePrefix + ehri________ + + + dateOfCollection + Thu May 11 17:02:23 CEST 2017 + + + dateOfValidation + null + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/isidore.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/isidore.xml new file mode 100644 index 0000000..a75fca0 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/isidore.xml @@ -0,0 +1,96 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::isidore + false + + + + null + 0 + 0 + 0 + Huma-Num - Isidore + Huma-Num - Isidore + https://www.rechercheisidore.fr/img/isidore.svg + FR + + 0.0 + 0.0 + 0.0 + + https://www.rechercheisidore.fr/ + Huma-Num + nicolas.Larrousse@huma-num.fr + + + httpSimple + https://data.huma-num.fr/ariadneplus/isidore/ + /data/PE24[1]/Handle[1] + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + isidore + https://api.rechercheisidore.fr/resource/search + //reply/@uri + + + + + NamespacePrefix + isidore_____ + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/lre.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/lre.xml new file mode 100644 index 0000000..6f0a59f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/lre.xml @@ -0,0 +1,65 @@ + +
+ + + + + + +
+ + + dnet:repository + lremap + false + + D-Net + + 0 + + 0 + UNAVAILABLE + LRE MAP + LRE MAP + + IT + + 10.4017 + 43.7228 + 0.0 + + http://www.unknown.eu/ + ILC + anasfkhan81@gmail.com + + + fileGzip + file:///var/lib/ariadneplus-data/LRE/LREMAPCLEAN.xml.gz + //resource/resourceID + + + + + aggregatorName + DNET + + + NamespacePrefix + lremap______ + + + + + 0 + + + + + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/metashare.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/metashare.xml new file mode 100644 index 0000000..1b616a7 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/metashare.xml @@ -0,0 +1,65 @@ + +
+ + + + + + +
+ + + dnet:repository + metashare + false + + D-Net + + 0 + + 0 + UNAVAILABLE + METASHARE + METASHARE + + IT + + 10.4017 + 43.7228 + 0.0 + + http://www.unknown.eu/ + ILC + anasfkhan81@gmail.com + + + filesystem + file:///var/lib/ariadneplus-data/METASHARE/ariadneplus/tmp/ariadneplus/dump/home/iit/git/META-SHARE-v3/storage + //*[local-name()='resourceInfo']/*[local-name()='identificationInfo']/*[local-name()='identifier'] + + + + + aggregatorName + DNET + + + NamespacePrefix + metashare___ + + + + + 0 + + + + + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/mockDatasource.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/mockDatasource.xml new file mode 100644 index 0000000..9cee8d6 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/mockDatasource.xml @@ -0,0 +1,72 @@ + +
+ + + + + + +
+ + + dnet:repository + mock + false + + D-Net + + 0 + + 0 + OCTOPUS + Mock repository + Mock repository + + IT + + 10.42 + 43.71 + 0.0 + + http://www.mock.it + Mock Institution + admin@mock.it + + + filesystem + file:///var/lib/dnet/mock-repository-content + //*[local-name()='header']/*[local-name()='identifier'] + + + oai + http://openbioresources.metajnl.com/index.php/up/oai + //*[local-name()='header']/*[local-name()='identifier'] + + + + + aggregatorName + DNET + + + NamespacePrefix + dnet____mock + + + + + 0 + + + + + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/nakala.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/nakala.xml new file mode 100644 index 0000000..dde9e7d --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/RepositoryServiceResourceType/nakala.xml @@ -0,0 +1,81 @@ + +
+ + + + + + +
+ + + dnet:repository + ariadneplus___::nakala + false + + + + null + 0 + 0 + 0 + Huma-Num - Nakala + Huma-Num - Nakala + https://www.nakala.fr/logo_nakala.png + FR + + 0.0 + 0.0 + 0.0 + + https://www.nakala.fr/ + Huma-Num + nicolas.Larrousse@huma-num.fr + + + httpSimple + http://data.huma-num.fr/ariadneplus/nakala/ + /data/PE24[1]/Identifier[1] + + + oai + https://www.nakala.fr/oai/11280/c92869d3 + //oai:identifier + + + oai + https://www.nakala.fr/oai/11280/19606173 + //oai:identifier + + + oai + http://www.nakala.fr/oai/11280/3a8f680b + //*[local-name()='header']/*[local-name()='identifier'] + + + oai + http://www.nakala.fr/oai/11280/1e065877 + //oai:identifier + + + + + NamespacePrefix + nakala______ + + + + + + 0 + + + + 0 + + 0 + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadne_dataset_444_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadne_dataset_444_mapping.xml new file mode 100644 index 0000000..079a125 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadne_dataset_444_mapping.xml @@ -0,0 +1,2414 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_policy1.5.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_policy1.5.xml new file mode 100644 index 0000000..f16630f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_policy1.5.xml @@ -0,0 +1,163 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_toplevel_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_toplevel_mapping.xml new file mode 100644 index 0000000..8548613 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_toplevel_mapping.xml @@ -0,0 +1,4360 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp3.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp3.xml new file mode 100644 index 0000000..0d333e8 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp3.xml @@ -0,0 +1,1983 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp4.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp4.xml new file mode 100644 index 0000000..90ed582 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp4.xml @@ -0,0 +1,397 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp5.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp5.xml new file mode 100644 index 0000000..10bc8d2 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp5.xml @@ -0,0 +1,23 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp8.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp8.xml new file mode 100644 index 0000000..32853bd --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ariadneplus_wp8.xml @@ -0,0 +1,1818 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_authors_486.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_authors_486.xml new file mode 100644 index 0000000..a728b9e --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_authors_486.xml @@ -0,0 +1,626 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_manuscripts_485.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_manuscripts_485.xml new file mode 100644 index 0000000..61cd9b5 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_manuscripts_485.xml @@ -0,0 +1,587 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_texts_487.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_texts_487.xml new file mode 100644 index 0000000..9c12c3c --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/cendari_texts_487.xml @@ -0,0 +1,337 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/clarin_test_523.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/clarin_test_523.xml new file mode 100644 index 0000000..d50960a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/clarin_test_523.xml @@ -0,0 +1,949 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei-actors_416_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei-actors_416_mapping.xml new file mode 100644 index 0000000..783a122 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei-actors_416_mapping.xml @@ -0,0 +1,395 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei_312_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei_312_mapping.xml new file mode 100644 index 0000000..4863d98 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/culturaitalia_musei_312_mapping.xml @@ -0,0 +1,518 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-DE_417_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-DE_417_mapping.xml new file mode 100644 index 0000000..69050a7 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-DE_417_mapping.xml @@ -0,0 +1,372 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-GR_515_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-GR_515_mapping.xml new file mode 100644 index 0000000..c3343df --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/dariah-GR_515_mapping.xml @@ -0,0 +1,1060 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/deprecated_dariah-GR_435_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/deprecated_dariah-GR_435_mapping.xml new file mode 100644 index 0000000..1d2e1ec --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/deprecated_dariah-GR_435_mapping.xml @@ -0,0 +1,1059 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ehri_328_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ehri_328_mapping.xml new file mode 100644 index 0000000..5af0d76 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/ehri_328_mapping.xml @@ -0,0 +1,1128 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/identity.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/identity.xml new file mode 100644 index 0000000..2df4719 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/identity.xml @@ -0,0 +1,31 @@ + +
+ + + + + +
+ + + + + + + SECURITY_PARAMETERS + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_398_item_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_398_item_mapping.xml new file mode 100644 index 0000000..15f3279 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_398_item_mapping.xml @@ -0,0 +1,2814 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_432_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_432_mapping.xml new file mode 100644 index 0000000..c49107a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/isidore_432_mapping.xml @@ -0,0 +1,401 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/lre_447_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/lre_447_mapping.xml new file mode 100644 index 0000000..567782f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/lre_447_mapping.xml @@ -0,0 +1,616 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/metashare_439_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/metashare_439_mapping.xml new file mode 100644 index 0000000..abef28f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/metashare_439_mapping.xml @@ -0,0 +1,2616 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_433_mapping.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_433_mapping.xml new file mode 100644 index 0000000..584a597 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_433_mapping.xml @@ -0,0 +1,312 @@ + +
+ + + + + +
+ + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_517_karnak.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_517_karnak.xml new file mode 100644 index 0000000..c99c4ee --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_517_karnak.xml @@ -0,0 +1,561 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_520_3D.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_520_3D.xml new file mode 100644 index 0000000..3240079 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_520_3D.xml @@ -0,0 +1,560 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_521_MOM.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_521_MOM.xml new file mode 100644 index 0000000..6f4ab7a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_521_MOM.xml @@ -0,0 +1,559 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_522_AOROC.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_522_AOROC.xml new file mode 100644 index 0000000..035b41a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/nakala_522_AOROC.xml @@ -0,0 +1,559 @@ + +
+ + + + + +
+ + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/contact_point_types.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/contact_point_types.xml new file mode 100644 index 0000000..3993a1f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/contact_point_types.xml @@ -0,0 +1,93 @@ + +
+ + + + + +
+ + + ContactPointTypes + Part of the Common European Research Information Format (CERIF), a data model for exchange and storage of information about research. Relevant classification schemes are Electronic Address Type, Person Contact Details and Organisation Contact Details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_encodings.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_encodings.xml new file mode 100644 index 0000000..f25b291 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_encodings.xml @@ -0,0 +1,49 @@ + +
+ + + + + +
+ + + ariadneplus:dataset_encodings + Encodings of datasets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_subjects.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_subjects.xml new file mode 100644 index 0000000..72349a9 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_subjects.xml @@ -0,0 +1,20 @@ + +
+ + + + + +
+ + + ariadneplus:dataset_subjects + Roles that datasets can play in research + + + + + + String + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_types.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_types.xml new file mode 100644 index 0000000..71b443a --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dataset_types.xml @@ -0,0 +1,602 @@ + + +
+ + + + + +
+ + + DatasetTypes + Part of the Common European Research Information Format (CERIF), + a data model for exchange and storage of information about research. Relevant + classification scheme is the Output Types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_compatibilities.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_compatibilities.xml new file mode 100644 index 0000000..e202f47 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_compatibilities.xml @@ -0,0 +1,30 @@ + +
+ + + + + +
+ + + dnet:compatibilityLevel + API compatibility + + + + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_protocols.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_protocols.xml new file mode 100644 index 0000000..ff370ce --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_api_protocols.xml @@ -0,0 +1,75 @@ + +
+ + + + + +
+ + + dnet:protocols + API protocols + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_content_typologies.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_content_typologies.xml new file mode 100644 index 0000000..41884d2 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_content_typologies.xml @@ -0,0 +1,27 @@ + +
+ + + + + +
+ + + D-Net Content Description Typologies + D-Net Content Description Typologies + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_countries.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_countries.xml new file mode 100644 index 0000000..073f841 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_countries.xml @@ -0,0 +1,1343 @@ + +
+ + + + + +
+ + + dnet:countries + OASIS list of country codes Country Code List: ISO 3166-1993 (E) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_datasource_typologies.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_datasource_typologies.xml new file mode 100644 index 0000000..d80f9f1 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_datasource_typologies.xml @@ -0,0 +1,28 @@ + +
+ + + + + +
+ + + Datasource typologies + D-Net datasource typologies + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_languages.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_languages.xml new file mode 100644 index 0000000..971f3ec --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/dnet_languages.xml @@ -0,0 +1,2037 @@ + +
+ + + + + +
+ + + Languages + ISO 639-2 list of languages. It defines + mapping from iso639-1. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + String + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/periods.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/periods.xml new file mode 100644 index 0000000..1044ff9 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/periods.xml @@ -0,0 +1,21 @@ + +
+ + + + + +
+ + + Periods + PeriodO is a gazetteer of scholarly definitions of historical, art-historical, and archaeological periods. It eases the task of linking among datasets that define periods differently. It also helps scholars and students see where period definitions overlap or diverge. + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/place_types.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/place_types.xml new file mode 100644 index 0000000..2f2ca2c --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/place_types.xml @@ -0,0 +1,22 @@ + + +
+ + + + + +
+ + + PlaceTypes + The Getty Thesaurus of Geographic Names (TGN) is intended to aid cataloging, research, and discovery of art historical, archaeological, and other scholarly information. However, its unique thesaural structure and emphasis on historical places make it useful for other disciplines in the broader Linked Open Data cloud + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/places.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/places.xml new file mode 100644 index 0000000..40e1e1b --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/places.xml @@ -0,0 +1,21 @@ + +
+ + + + + +
+ + + Places + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/placesSimple.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/placesSimple.xml new file mode 100644 index 0000000..4701f4e --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/placesSimple.xml @@ -0,0 +1,244 @@ + +
+ + + + + +
+ + + Places simple + A simpler version of the place vocabulary. The provided one seems not correct and anyway too large to be managed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/schemas.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/schemas.xml new file mode 100644 index 0000000..ef3cf78 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/schemas.xml @@ -0,0 +1,32 @@ + + +
+ + + + + +
+ + + Schemas + Metadata Standards - a list of metadata vocabularies, schemas, application profiles, and registries. + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/service_competence.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/service_competence.xml new file mode 100644 index 0000000..e4bfe0b --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/service_competence.xml @@ -0,0 +1,20 @@ + +
+ + + + + +
+ + + ariadneplus:service_competences + The ability of a service to do something successfully: is a relation that connects a service with an activity type + + + + + + String + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/software_programming_languages.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/software_programming_languages.xml new file mode 100644 index 0000000..5d9c279 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/VocabularyDSResourceType/software_programming_languages.xml @@ -0,0 +1,22 @@ + + +
+ + + + + +
+ + + ProgrammingLanguages + Wikipedia list. The aim of this list of programming languages is to include all notable programming languages in existence, both those in current use and historical ones, in alphabetical order, except for dialects of BASIC, esoteric programming languages, and markup languages. + + + + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/JRRPublish_repo_hi_x3m.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/JRRPublish_repo_hi_x3m.xml new file mode 100644 index 0000000..ca05ee3 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/JRRPublish_repo_hi_x3m.xml @@ -0,0 +1,59 @@ + + +
+ + + + + +
+ + PUBLISH ON JRR + publish on catalogue and resource registry + + Publish + Content Provider + + REPO_HI + 20 + + + + + Verify if DS is pending + + + + + + + + + + Validate DS + + + + + + + Create Workflow + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/NEW_repo_hi_x3m.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/NEW_repo_hi_x3m.xml new file mode 100644 index 0000000..f11882f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/NEW_repo_hi_x3m.xml @@ -0,0 +1,180 @@ + + +
+ + + + + +
+ + Aggregate Metadata (X3M) + Collect, transform with X3M, and export metadata + + Aggregate Metadata + Content Provider + + REPO_HI + 20 + + + + + Verify if DS is pending + + + + + + + + + + + Validate DS + + + + + + + Create Workflow + + + + + + + + + + + + + Create native store + + + + + + + + + + + + Create CIDOC store + + + + + + + + + + + + Prepare create index + + + + + + + + + + + Create index + + + + + + + + + Update Workflow Parameters + + + + + + + + + + + + + + + Create Workflow + + + + + + + + + + + + + Update Workflow Parameters + + + + + + + + + + + + + + Create Workflow + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/clarin_ds_tds_generation.wf.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/clarin_ds_tds_generation.wf.xml new file mode 100644 index 0000000..f80afff --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/clarin_ds_tds_generation.wf.xml @@ -0,0 +1,46 @@ + +
+ + + + + +
+ + Update DS and TDS for Clarin + Update DS and TDS for Clarin + + Consistency + 30 + + + /var/lib/ariadneplus-data/clarin/ariadneplus_mapping-development/batch/x3ml-mappings + file:///var/lib/dnet/data/ariadneplus/clarin/results/cmdi + //*[local-name()="MdSelfLink"] + 18b60922-44a4-4c0d-ab24-4b9835186a0a_UmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZXMvUmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZVR5cGU= + ariadneplus___::clarin + + + + Update DS and TDS for Clarin + + + + + + + + + + + + + + + + 29 5 22 ? * * + 10080 + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/collection_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/collection_template.xml new file mode 100644 index 0000000..5acf9d1 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/collection_template.xml @@ -0,0 +1,93 @@ + +
+ + + + + +
+ + + + + + + + + + + + Refresh or incremental? + + + + + + + + + + Find Date Range For Incremental Harvesting + + + + + + + + + Start Harvesting + + + + + + + + + + + + + Prepare mdstore records + + + + + + + + + + + + + Store mdstore records + + + + + + + + + + + + Update datasouce API extra fields + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/feed_oai_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/feed_oai_template.xml new file mode 100644 index 0000000..f879cdd --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/feed_oai_template.xml @@ -0,0 +1,59 @@ + +
+ + + + + +
+ + + + + + + + + + + + Fetch records from MDStore + + + + + + + + + + Clean original records + + + + + + + + + + + + + + Update set counters + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/index_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/index_template.xml new file mode 100644 index 0000000..17aab0b --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/index_template.xml @@ -0,0 +1,48 @@ + + +
+ + + + + +
+ + + + + + + + + + + + + Fetch records from MDStore + + + + + + + + + + Feed index records + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/nop.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/nop.xml new file mode 100644 index 0000000..c7b3007 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/nop.xml @@ -0,0 +1,24 @@ + + +
+ + + + + +
+ + + + + + Perform no op + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/post_feed_oai_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/post_feed_oai_template.xml new file mode 100644 index 0000000..a939752 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/post_feed_oai_template.xml @@ -0,0 +1,73 @@ + +
+ + + + + +
+ + + + + + + + + + + + + Create composite indexes for the OAI store + + + + + + + + + + + + + Ensure an index exists on fields as specified in the configuration profile + + + + + + + + + + + + Reads the current OAI configuration and upsert OAI sets accordingly + + + + + + + + + + + + Count records in each OAI set, for each exported metadata format linked to the given oai collection + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/jrr_publish_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/jrr_publish_template.xml new file mode 100644 index 0000000..5beb21f --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/jrr_publish_template.xml @@ -0,0 +1,183 @@ + + +
+ + + + + +
+ + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + Fetch records from Virtuoso + + + + + + + + + + + + + Feed records into the JRR (registry and catalogue) + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/virtuoso_publish_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/virtuoso_publish_template.xml new file mode 100644 index 0000000..0bb2ff1 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/publish/virtuoso_publish_template.xml @@ -0,0 +1,41 @@ + + +
+ + + + + +
+ + + + + + + + + Fetch records from MDStore + + + + + + + + + + + Feed records into Virtuoso + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_bye_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_bye_template.xml new file mode 100644 index 0000000..67a5b47 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_bye_template.xml @@ -0,0 +1,87 @@ + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + Delete the mdstore of collected records + + + + + + + + + Delete the mdstore of cleaned records + + + + + + + + + Delete the index + + + + + + + + + Reset the extrafields of the api + + + + + + + + + + + + + + + + + + + + Delete from OAI-PMH + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_hi_CLARIN.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_hi_CLARIN.xml new file mode 100644 index 0000000..6d08021 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/repo_hi_CLARIN.xml @@ -0,0 +1,180 @@ + + +
+ + + + + +
+ + CLARIN: Aggregate Metadata (X3M) + Collect, transform with X3M, and export metadata for CLARIN + + Aggregate Metadata + Content Provider + + REPO_HI + 20 + + + + + Verify if DS is pending + + + + + + + + + + + Validate DS + + + + + + + Create Workflow + + + + + + + + + + + + + Create native store + + + + + + + + + + + + Create CIDOC store + + + + + + + + + + + + Prepare create index + + + + + + + + + + + Create index + + + + + + + + + Update Workflow Parameters + + + + + + + + + + + + + + + Create Workflow + + + + + + + + + + + + + Create Workflow + + + + + + + + + + + + + + 9 9 9 ? * * + 10080 + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/transform_x3m_template.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/transform_x3m_template.xml new file mode 100644 index 0000000..f2ba9a9 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/bootstrap/profiles/workflows/transform_x3m_template.xml @@ -0,0 +1,132 @@ + +
+ + + + + +
+ + + + + + + + + + + + + + + + + Refresh or incremental? + + + + + + + + + + Find Date Range For Incremental Harvesting + + + + + + + + + Fetch records from MDStore + + + + + + + + + + + + + + + + + + + + + + + + + + + Transform valid records + + + + + + + + + + + + + + Clean records + + + + + + + + + + + Store mdtore records + + + + + + + + + + + + + + + + + + + + Update datasouce API extra fields + + + + + + + + + + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/data/collector/plugins/parthenos/applicationContext-ariadneplus-collector-plugins.xml b/dnet-ariadneplus/src/main/resources/eu/dnetlib/data/collector/plugins/parthenos/applicationContext-ariadneplus-collector-plugins.xml new file mode 100644 index 0000000..cae354c --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/data/collector/plugins/parthenos/applicationContext-ariadneplus-collector-plugins.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_document.xslt b/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_document.xslt new file mode 100644 index 0000000..41fbf06 --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_document.xslt @@ -0,0 +1,1357 @@ + + + + + + + +
+
+ +
+
+ +

+ + +

+
+
+
+ +
+
+
GENERAL INFORMATION
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Original identifier +
+ Provenance + + Data source: + +
+ D-Net API: + +
+ Collected + + +
+ Transformed + + +
+ Resource types + + + () -- + +
+
MINIMAL METADATA
+ + + + + + + + +
+
+
+ + +
INDEXED RECORD
+ + + +
+
+ + + + + + Label + + + + +
+ + P1_is_identified_by + + + + +
+ + P2_has_type + + + + +
+ + P3_has_note + + + + +
+ + + + P4_has_time-span + + + + +
+ + P7_took_place_at + + + + +
+ + P8_took_place_on_or_within + + + + +
+ + + + P14_carried_out_by + + + + +
+ + P11_had_participant + + + + +
+ + + PP4_hosts_object + + + + +
+
+ + + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + PP7_hosts_software_object + + + + +
+ + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + PP8_hosts_dataset + + + + +
+ + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + PP32_curates + + + + +
+
+ + + PP11_curates_volatile_digital_object + + + + +
+ + PP32_curates + + + + +
+
+ + + PP12_curates_volatile_software + + + + +
+ + PP11_curates_volatile_digital_object + + + + +
+ + PP32_curates + + + + +
+
+ + + PP13_curates_volatile_dataset + + + + +
+ + PP11_curates_volatile_digital_object + + + + +
+ + PP32_curates + + + + +
+
+ + + PP14_runs_on_request + + + + +
+ + PP7_hosts_software_object + + + + +
+ + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + PP15_delivers_on_request + + + + +
+ + PP7_hosts_software_object + + + + +
+ + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + PP12_curates_volatile_software + + + + +
+ + PP11_curates_volatile_digital_object + + + + +
+ + PP32_curates + + + + +
+ + PP14_runs_on_request + + + + +
+ + PP15_delivers_on_request + + + + +
+ + PP7_hosts_software_object + + + + +
+ + PP6_hosts_digital_object + + + + +
+ + PP4_hosts_object + + + + +
+
+ + + P16_used_specific_object + + + + +
+ + P125_used_object_of_type + + + + +
+ + P12_occurred_in_the_presence_of + + + + +
+ + + PP31_uses_curation_plan + + + + +
+
+ + P33_used_specific_technique + + + + +
+ + P32_used_general_technique + + + + +
+ + P20_had_specific_purpose + + + + +
+ + P21_had_general_purpose + + + + +
+ + + + + E73_Information_Object :
+ + Label + + + + +
+ + P1_is_identified_by + + + + +
+ + P149_is_identified_by + + + + +
+ + P102_has_title + + + + +
+ + P2_has_type + + + + +
+ + P3_has_note + + + + +
+ + P129_is_about + + + + +
+ + P67_refers_to + + + + +
+ + P94i_was_created_by + + + + +
+ + P106i_forms_part_of + + + + +
+ + P106_is_composed_of + + + + +
+ + P165_incorporates + + + + +
+ + P43_has_dimension + + + + +
+ + P105_right_held_by + + + + +
+ + P104_is_subject_to + + + + +
+ + P67i_is_referred_to_by + + + + +
+ + P70i_is_documented_in + + + + +
+ + +
+ + + + + E33_Linguistic_Object :
+ + Label + + + + +
+ + P1_is_identified_by + + + + +
+ + P149_is_identified_by + + + + +
+ + P94i_was_created_by + + + + +
+ + P105_right_held_by + + + + +
+ + P3_has_note + + + + +
+ + P72_has_language + + + + +
+ + P73_has_translation + + + + +
+ + P129_is_about + + + + +
+ + P43_has_dimension + + + + +
+ + P106_is_composed_of + + + + +
+ + P165_incorporates + + + + +
+ + P106i_forms_part_of + + + + +
+ + P104_is_subject_to + + + + +
+ + P67_refers_to + + + + +
+ + PP67i_is_referred_to_by + + + + +
+ + P70i_is_documented_in + + + + + + +
+ + + + +
+ RDF types: + +
+
+ + +
+ +
+ + + PP43_supported_project_activity + + + + + +
+ + PP25_has_maintaining_RI + + + + +
+
+ + PP44_has_maintaining_team + + + + +
+
+ + + +
+ + + + + E39_Actor :
+ + Label + + + + +
+ + P1_is_identified_by + + + + +
+ + P149_is_identified_by + + + + +
+ + P48_has_preferred_identifier + + + + +
+ + P2_has_type + + + + +
+ + P3_has_note + + + + +
+ + P98i_was_born + + + + +
+ + P100i_died_in + + + + +
+ + P74_has_current_or_former_residence + + + + +
+ + P107i_is_current_or_former_member_of + + + + +
+ + P76_has_contact_point + + + + +
+ + +
+ + + + + E53_Place :
+ + Label + + + + +
+ + P2_has_type + + + + +
+ + P1_is_identified_by + + + + +
+ + P87_is_identified_by + + + + +
+ + P89_falls_within + + + + +
+ + P67i_is_referred_to_by + + + + + + +
+ + + + +
+ RDF types: + +
+
+ + +
+ + PP1i_is_currently_offered_by + + + + +
+ + PP42_has_declarative_time + + + + +
+ +
+ + PP2_provided_by + + + + +
+ + +
+ + PP45_has_competency + + + + + + +
+ + + + +
+ RDF types: + +
+
+ + +
+ + PP28_has_designated_access_point + + + + +
+ + PP29_uses_access_protocol + + + + +
+ + P47_has_protocol_type + + + + +
+ + PP48_uses_protocol_parameter + + + + +
+ + PP1i_is_currently_offered_by + + + + +
+ + PP42_has_declarative_time + + + + +
+ +
+ + PP2_provided_by + + + + +
+ + +
+ + PP45_has_competency + + + + + + + +
+ + + + + +
+ RDF types: + +
+
+ + + +
+ + P102_has_title + + + + +
+ + P129_is_about + + + + +
+ + P67_refers_to + + + + +
+ + PP8i_is_dataset_hosted_by + + + + +
+ + PP6i_is_digital_object_hosted_by + + + + +
+ + PP4i_is_object_hosted_by + + + + +
+ + L11i_was_output_of + + + + +
+ + L10i_was_input_of + + + + +
+ + P94i_was_created_by + + + + +
+ + PP20_has_persistent_dataset_part + + + + +
+ + PP20i_is_persistent_dataset_part_of + + + + +
+ + PP16_has_persistent_digital_object_part + + + + +
+ + PP16i_is_persistent_digital_object_part_of + + + + +
+ + PP24i_is_dataset_snapshot_of + + + + +
+ + P17i_is_snapshot_of + + + + +
+ + PP18i_is_digital_object_part_of + + + + +
+ + P106i_forms_part_of + + + + +
+ + P106_is_composed_of + + + + +
+ + P165_incorporates + + + + +
+ + P43_has_dimension + + + + +
+ + P105_right_held_by + + + + +
+ + P104_is_subject_to + + + + +
+ + P67i_is_referred_to_by + + + + +
+ + P70i_is_documented_in + + + + + + + +
+ + + + + PE1_Service :
+ + +
+ +
+ + PP2_provided_by + + + + +
+ + PP42_has_declarative_time + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + +      + + +
+ + + + + + + + + + > + + + + + + + > + + + + + + + + + + + + +
+ + + + +
+ +  /> + +
+
+
+ + + + + + + +
diff --git a/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_row.xslt b/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_row.xslt new file mode 100644 index 0000000..b95edee --- /dev/null +++ b/dnet-ariadneplus/src/main/resources/eu/dnetlib/functionality/modular/ui/lightui/xslt/cidoc_2_row.xslt @@ -0,0 +1,62 @@ + + + + + + + + +
+ +
The record contains the following uncleaned fields + + + + + + + + + + + + + + + +
XPathValueVocabulary
+
+
+ + + + + +
+ + + D-Net identifier:
+ Original identifier:
+ Data Source:
+ Data Source API:
+ Resource types: + + () -- + +
+ Notes:

+
+ +
+
+
+ +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/AriadnePlusRRTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/AriadnePlusRRTest.java new file mode 100644 index 0000000..0b4fa8a --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/AriadnePlusRRTest.java @@ -0,0 +1,24 @@ +package eu.dnetlib; + +/** + * Created by alessia on 23/03/17. + * + * See tests in https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry-publisher/ + * for usage example + * See https://wiki.gcube-system.org/gcube/Information_System_Resource_Registry#ER_Management + * for a description of the API. + * + * Before using the Java API we must define the classes implementing interfaces in ariadneplus-registry. + * + */ +public class AriadnePlusRRTest { + + private String registryHost; + + public void pippo(){ + + //ResourceRegistryPublisher rrp = ResourceRegistryPublisherFactory.create(); + + + } +} diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIteratorTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIteratorTest.java new file mode 100644 index 0000000..7f9e73b --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/ariadneplus/workflows/nodes/VirtuosoAriadnePlusIteratorTest.java @@ -0,0 +1,69 @@ +package eu.dnetlib.ariadneplus.workflows.nodes; + +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Created by Alessia Bardi on 09/02/2018. + * + * @author Alessia Bardi + */ +public class VirtuosoAriadnePlusIteratorTest { + + private VirtuosoAriadnePlusIterator it; + + @Before + public void setup(){ + it = new VirtuosoAriadnePlusMockIterator(); + } + + @Test + public void fillQueueTest() throws Exception { + it.fillQueue(); + String s = it.getElements().take(); + while(!s.equals(VirtuosoAriadnePlusIterator.TERMINATOR)){ + System.out.println(s); + s = it.getElements().take(); + } + Map errors = it.getErrors(); + for (Iterator> it1 = errors.entrySet().iterator(); it1.hasNext(); ) { + final Entry e = it1.next(); + System.out.println(e.getKey() +" - "+e.getValue()); + } + } + + @Test + public void testHasNext(){ + assertTrue(it.hasNext()); + } + + @Test + public void testIterate(){ + while(it.hasNext()) + System.out.println(it.next()); + } + + @Test + public void testCompleteXml(){ + String s = ""; + String completed = it.completeXML(s, "http://ariadneplus.d4science.org/handle/AriadnePlus/REG/Thing/Appellation/urp%40regione.umbria.it"); + System.out.println(completed); + } + + @Test + public void testRemoveXmlDeclaration(){ + String s = "", "").trim(); + assertEquals("", "").trim(); + assertEquals(" elements = Lists.newArrayList("rdf1", "rdf2", "rdf3", "rdf4", "rdf5", "rdf6"); + + @Override + protected void fillQueue() { + new Thread(() -> { + try { + for (String e : elements) { + + getElements().offer(e, QUEUE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + } catch (InterruptedException ee) { + ee.printStackTrace(); + } finally { + try { + getElements().offer(TERMINATOR, QUEUE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } catch (InterruptedException ee) { + System.out.println(ee); + } + } + }).start(); + } +} diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClientTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClientTest.java new file mode 100644 index 0000000..0691021 --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIGraphQLClientTest.java @@ -0,0 +1,72 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Iterator; + +import eu.dnetlib.rmi.data.CollectorServiceException; +import org.apache.commons.io.IOUtils; +import org.junit.Ignore; +import org.junit.Test; + +/** + * Created by Alessia Bardi on 19/04/2017. + * + * @author Alessia Bardi + */ +public class EHRIGraphQLClientTest { + + private EHRIGraphQLClient client = new EHRIGraphQLClient(); + private String baseUrl = "https://portal.ehri-project.eu/api/graphql"; + private String query = "{\"query\":\"{topLevelDocumentaryUnits{items{id}}}\"}"; + + private String simpleOutput = "{\n" + + " \"data\" : {\n" + + " \"topLevelDocumentaryUnits\" : {\n" + + " \"items\" : [ {\n" + + " \"id\" : \"at-001985-ikg_ar_1\"\n" + + " }, {\n" + + " \"id\" : \"at-001985-ikg_ar_11\"\n" + + " }]\n" + + " }\n" + + " }\n" + + "}"; + + @Test + public void testGetIdentifiers() throws IOException { + Iterator it = client.getIdentifiers(new InputStreamReader(IOUtils.toInputStream(simpleOutput, "UTF-8"))); + while(it.hasNext()) + System.out.println(it.next()); + } + + @Ignore + @Test + public void testRemoteCollect() throws CollectorServiceException, IOException, URISyntaxException { + Iterator it =client.collect(baseUrl, query); + int stopAt = 5; + for(int i = 0; i < stopAt && it.hasNext(); i++){ + System.out.println(it.next()); + } + } + + @Ignore + @Test + public void testGetResource() throws IOException { + String id = "at-001985-ikg_ar_11"; + String target = "https://portal.ehri-project.eu/units/"+id+"/export"; + URL url = new URL(target); + String res = IOUtils.toString(url, "UTF-8"); + System.out.println(res); + } + +// @Test +// public void testDotNotation(){ +// JsonObject jsonObject = new JsonParser().parse(simpleOutput).getAsJsonObject(); +// JsonArray items = jsonObject.getAsJsonArray("data.topLevelDocumentaryUnits.items"); +// for(JsonElement id : items){ +// System.out.println(id.getAsJsonObject().get("id")); +// } +// } +} diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorTest.java new file mode 100644 index 0000000..718ac33 --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/ehri/EHRIIteratorTest.java @@ -0,0 +1,32 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.ehri; + +import org.junit.Test; + +/** + * Created by Alessia Bardi on 13/06/2017. + * + * @author Alessia Bardi + */ +public class EHRIIteratorTest { + + + private EHRIIterator ehriIterator = new EHRIIterator(null, null, null); + final String test = "\n" + + " \n" + + " us-005578-irn516886\n" + + "\t\n" + + "\t"; + + @Test + public void testRemoveDefaultEADNamespace(){ + System.out.println(ehriIterator.removeDefaultEADNamespace(test)); + } +} diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIteratorTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIteratorTest.java new file mode 100644 index 0000000..f486dc3 --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/data/collector/plugins/ariadneplus/isidore/IsidoreIteratorTest.java @@ -0,0 +1,47 @@ +package eu.dnetlib.data.collector.plugins.ariadneplus.isidore; + +import javax.xml.transform.TransformerFactory; + +import eu.dnetlib.miscutils.functional.xml.SaxonHelper; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +/** + * Created by Alessia Bardi on 17/11/2018. + * + * @author Alessia Bardi + */ + +public class IsidoreIteratorTest { + + TransformerFactory tf = TransformerFactory.newInstance(); + SaxonHelper saxonHelper = new SaxonHelper(); + + private String baseUrl = "https://api.rechercheisidore.fr/resource/search"; + private String queryParams = "source_tree=10670/3.ji0kr6|10670/2.rao8tk"; + private String pageParam = "page"; + private int startFromPage = 1; + private String nextPagePath = "//page/@next"; + private String pageSizeParam = "size"; + private int pageSize = 10; + private String resultTotalXpath = "//replies/meta/@items"; + private String entityXpath = "//reply"; + + @Before + public void setup(){ + saxonHelper.setSaxonTransformerFactory(tf); + } + + @Ignore + @Test + public void test(){ + IsidoreIterator rip = new IsidoreIterator(saxonHelper, baseUrl, queryParams,pageParam, startFromPage, + nextPagePath, pageSizeParam, pageSize, resultTotalXpath, entityXpath); + while(rip.hasNext()){ + String record = rip.next(); + System.out.println(record); + } + } + +} diff --git a/dnet-ariadneplus/src/test/java/eu/dnetlib/x3m/ApplyX3MappingTest.java b/dnet-ariadneplus/src/test/java/eu/dnetlib/x3m/ApplyX3MappingTest.java new file mode 100644 index 0000000..2eb36d6 --- /dev/null +++ b/dnet-ariadneplus/src/test/java/eu/dnetlib/x3m/ApplyX3MappingTest.java @@ -0,0 +1,149 @@ +package eu.dnetlib.x3m; + +import java.io.IOException; +import java.io.InputStream; + +import eu.dnetlib.msro.workflows.nodes.transform.ApplyX3Mapping; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.io.SAXReader; +import org.junit.Test; +import org.springframework.core.io.ClassPathResource; + +/** + * Created by alessia on 13/03/17. + */ +public class ApplyX3MappingTest { + + private static final Log log = LogFactory.getLog(ApplyX3MappingTest.class); + + private static String basePathProfiles = "/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/"; + + + //AriadnePlus mappings + final String ariadneplusPolicyPath = "ariadneplus_policy1.5.xml"; + final String mappingAriadnePath = "ariadne_dataset_444_mapping.xml"; + final String mappingEhriPath = "ehri_328_mapping.xml"; + final String mappingCulturaItaliaPath = "culturaitalia_musei_312_mapping.xml"; + + //AriadnePlus records + final String ariadnePath = "/eu/dnetlib/x3m/new-10304736.xml"; + final String ehriRecord = "/eu/dnetlib/x3m/ehri_test.xml"; + final String ehriRecord2 = "/eu/dnetlib/x3m/EHRI_sample_record_328.xml"; + final String[] ariadneFiles = + new String[] { "/eu/dnetlib/x3m/new-10304737.xml", "/eu/dnetlib/x3m/new-10304738.xml", "/eu/dnetlib/x3m/new-10304739.xml", + "/eu/dnetlib/x3m/new-10304740.xml", "/eu/dnetlib/x3m/new-10304741.xml", "/eu/dnetlib/x3m/new-10304742.xml" }; + + final String culturaItaliaPath = "/eu/dnetlib/x3m/culturaItalia_record.xml"; + + + @Test + public void testAriadne() { + doBasicTest(this.mappingAriadnePath, this.ariadnePath); + } + + @Test + public void testAriadneAll() throws IOException { + String m = loadFromTransformationProfile(mappingAriadnePath); + String g = getString(ariadneplusPolicyPath); + + ApplyX3Mapping x3m = new ApplyX3Mapping(new String[]{m}, g, false); + for(String path : ariadneFiles){ + String res = x3m.apply(getString(path)); + log.debug(res); + } + } + + + @Test + public void testEhri() throws IOException { + doBasicTest(this.mappingEhriPath, this.ehriRecord); + } + @Test + public void testEhri2(){ + doBasicTest(this.mappingEhriPath, this.ehriRecord2); + } + + @Test + public void testCulturaItalia() throws IOException { + doBasicTest(this.mappingCulturaItaliaPath, this.culturaItaliaPath); + } + + @Test + public void testMetashare(){ + doBasicTest("metashare_439_mapping.xml", "/eu/dnetlib/x3m/metashare.xml"); + } + + @Test + public void testCendariAuthors() { + doBasicTest("ariadneplus_policy1.5.xml", "cendari_authors_486.xml", "/eu/dnetlib/x3m/cendari_author_ex1.xml"); + } + @Test + public void testCendariAuthors2() { + doBasicTest("ariadneplus_policy1.5.xml", "cendari_authors_486.xml", "/eu/dnetlib/x3m/cendari_author_ex2.xml"); + } + + @Test + public void testCendariTesti1() { + doBasicTest("ariadneplus_policy1.5.xml", "cendari_texts_487.xml", "/eu/dnetlib/x3m/cendari_testi1.xml"); + } + + @Test + public void testCendariManoscritto(){ + doBasicTest("cendari_manuscripts_485.xml", "/eu/dnetlib/x3m/cendari_manoscritto.xml"); + } + + + @Test + public void testWp8_ok() { + doBasicTest("ariadneplus_policy1.5.xml", "ariadneplus_wp8.xml", "/eu/dnetlib/x3m/wp8.xml"); + } + + @Test + public void testTopLevel() { + doBasicTest("ariadneplus_policy1.5.xml", "ariadneplus_toplevel_mapping.xml", "/eu/dnetlib/x3m/topLevel.xml"); + } + + + public void doBasicTest(String mappingPath, String recordPath){ + doBasicTest(ariadneplusPolicyPath, mappingPath, recordPath); + } + public void doBasicTest(String policyPath, String mappingPath, String recordPath){ + String m = loadFromTransformationProfile(mappingPath); + String g = loadFromTransformationProfile(policyPath); + String r = getString(recordPath); + ApplyX3Mapping x3m = new ApplyX3Mapping(new String[]{m}, g, true); + String res = x3m.apply(r); + System.out.println("res is \n"+res); + } + + + private String getString(final String classpath) { + try { + final ClassPathResource resource = new ClassPathResource(classpath); + return IOUtils.toString(resource.getInputStream(), "UTF-8"); + }catch(IOException e){ + return null; + } + } + + + private String loadFromTransformationProfile(String profilePath){ + log.info("Loading xslt from: " + basePathProfiles + profilePath); + InputStream profile = getClass().getResourceAsStream(basePathProfiles + profilePath); + SAXReader saxReader = new SAXReader(); + Document doc = null; + try { + doc = saxReader.read(profile); + } catch (DocumentException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + String s = doc.selectSingleNode("//SCRIPT/CODE").getText(); + //log.debug(profilePath+": "+s); + return s; + } +} diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/EHRI_sample_record_328.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/EHRI_sample_record_328.xml new file mode 100644 index 0000000..3fc7826 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/EHRI_sample_record_328.xml @@ -0,0 +1,90 @@ + + + + us-005578-irn516886 + + + Romana Primus photograph collection + + + United States Holocaust Memorial Museum +
+ 100 Raoul Wallenberg Place, S.W. + DC 20024-2126 + Washington + District of Columbia + US + 202 488 0400 + 202-479-9726 + http://www.ushmm.org/ + archives@ushmm.org + United States +
+
+ + +

This encoded description is derived from structured data provided to EHRI by a partner institution but may differ in structure and/or content from its source. The collection holding institution considers this description as an accurate reflection of the archival holdings to which it refers at the moment of data transfer.

+
+
+
+ + This file was exported automatically from the EHRI database administration tool and represents a work-in-progress. + 2017-06-01T16:15:08.688+01:00 + + + English + + + + + 2014-12-19T16:12:54.402Z + These files were provided by the United States Holocaust Memorial Museum to EHRI on 2014-11-21. + + [ingest] + + +
+ + + irn516886 + Romana Primus photograph collection + 1946-1947 + + United States Holocaust Memorial Museum + + + +

+
+ +

+
+ +

+
+ +

+
+ +

+
+ +

+
+ + Refugees--Germany--1940-1950. + Refugee camps--Germany--1940-1950. + + + Photographs. + + + Kirszenbaum, Halina Grauman. + Brechner, Dosia Grinburg. + Weinreich, Hela. + Strochlitz, Rose Grinburg. + Strochlitz, Sigmund. + Primus, Romana Strochlitz. + +
+
\ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex1.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex1.xml new file mode 100644 index 0000000..6d349d5 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex1.xml @@ -0,0 +1,288 @@ + + + + cendari_____::000298d8a61b4f7b0fe5c7fd3d8c4c9c + 223141 + 2018-10-11T18:17:36.268+02:00 + cendari_____ + CENDARI + api_________::ariadneplus___::cendari::autori + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BISLAM + CALMA + + + + + + + file%3A%2F%2F%2Fvar%2Flib%2Fariadneplus-data%2Fcendari%2FCAutori + + + + + + + + diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex2.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex2.xml new file mode 100644 index 0000000..2c17953 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_author_ex2.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BISLAM + CALMA + MEL + + + diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_manoscritto.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_manoscritto.xml new file mode 100644 index 0000000..731c70e --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_manoscritto.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MEL + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_testi1.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_testi1.xml new file mode 100644 index 0000000..5c72453 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/cendari_testi1.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + LIO + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/culturaItalia_record.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/culturaItalia_record.xml new file mode 100644 index 0000000..f98a87b --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/culturaItalia_record.xml @@ -0,0 +1,212 @@ + + + + cultitalia__::001190b56346cf563fdec1ccadc7b89e + oai:culturaitalia.it:oai:culturaitalia.it:museiditalia-coll_91 + 2017-08-10T17:21:47.365+02:00 + cultitalia__ + Cultura Italia + api_________::ariadneplus___::culturaitalia::musei + oai:culturaitalia.it:oai:culturaitalia.it:museiditalia-coll_91 + 2017-03-07T12:04:37Z + museiditalia_opere + museiditalia_coll + + + + coll_91 + Collezione di telecomunicazioni del Museo Nazionale della Scienza e della Tecnologia "Leonardo da Vinci" + La raccolta si compone di oltre 1300 beni, dal 1850 ad oggi, ed è costituita da strumenti ed apparati di tipo storico e didattico per la comunicazione a distanza, provenienti da enti pubblici, università, aziende e privati cittadini. Fanno parte di questa collezione cimeli rari come quelli marconiani e importanti riproduzioni storiche (come i telefoni di Meucci, il pantelegrafo di Caselli), impianti o parti di apparati pubblici e privati, dispositivi utilizzati in laboratori specialistici e prodotti industriali di largo consumo. + Nell'ambito del Sistema Informativo Regionale Beni Culturali sono state realizzate 148 schede di catalogo. + La raccolta di telecomunicazioni nei primi anni di vita del Museo, 1953-1958, contava già più di cento importanti beni provenienti da istituti pubblici e privati e da privati cittadini (CNR, l'allora Ministero delle Poste e Telecomunicazioni, la Società Radiomattima, la Compagnia Marconi, la Magneti Marelli, o il cavalier Donner Flori). Nel 1971, in occasione dell'inaugurazione di una nuova sala dedicata alle telecomunicazioni, la raccolta si arricchì di beni aventi una più ampia apertura verso le tecnologie della rete, grazie anche alle collaborazioni con società come la SIT-Siemens, la SIP, la Sirti, la Telettra. La raccolta è costantemente incrementata e aggiornata sulle nuove tecnologie anche in relazione alle nuove sezione espositive di Telegrafo e telefono, Radio (2005) e Televisione (2008). + Museo Nazionale della Scienza e della Tecnologia "Leonardo da Vinci", Via San Vittore, 21 - Milano (MI), Italia - proprietà privata + name=Milano; year=2001; code=015146 + 1953 post; XX/ XXI + start=1953; end=1953 + Collezioni + Collection + oai:culturaitalia.it:museiditalia-mus_4467 + oai:culturaitalia.it:museiditalia-work_7244 + oai:culturaitalia.it:museiditalia-work_7245 + oai:culturaitalia.it:museiditalia-work_7246 + oai:culturaitalia.it:museiditalia-work_7247 + oai:culturaitalia.it:museiditalia-work_7248 + oai:culturaitalia.it:museiditalia-work_7249 + oai:culturaitalia.it:museiditalia-work_7250 + oai:culturaitalia.it:museiditalia-work_7251 + oai:culturaitalia.it:museiditalia-work_7252 + oai:culturaitalia.it:museiditalia-work_7253 + oai:culturaitalia.it:museiditalia-work_7254 + oai:culturaitalia.it:museiditalia-work_7255 + oai:culturaitalia.it:museiditalia-work_7256 + oai:culturaitalia.it:museiditalia-work_7257 + oai:culturaitalia.it:museiditalia-work_7258 + oai:culturaitalia.it:museiditalia-work_7259 + oai:culturaitalia.it:museiditalia-work_7260 + oai:culturaitalia.it:museiditalia-work_7261 + oai:culturaitalia.it:museiditalia-work_7262 + oai:culturaitalia.it:museiditalia-work_7263 + oai:culturaitalia.it:museiditalia-work_7264 + oai:culturaitalia.it:museiditalia-work_7265 + oai:culturaitalia.it:museiditalia-work_7266 + oai:culturaitalia.it:museiditalia-work_7267 + oai:culturaitalia.it:museiditalia-work_7268 + oai:culturaitalia.it:museiditalia-work_7269 + oai:culturaitalia.it:museiditalia-work_7270 + oai:culturaitalia.it:museiditalia-work_7271 + oai:culturaitalia.it:museiditalia-work_7272 + oai:culturaitalia.it:museiditalia-work_7273 + oai:culturaitalia.it:museiditalia-work_7274 + oai:culturaitalia.it:museiditalia-work_7275 + oai:culturaitalia.it:museiditalia-work_7276 + oai:culturaitalia.it:museiditalia-work_7277 + oai:culturaitalia.it:museiditalia-work_7278 + oai:culturaitalia.it:museiditalia-work_7279 + oai:culturaitalia.it:museiditalia-work_7280 + oai:culturaitalia.it:museiditalia-work_7281 + oai:culturaitalia.it:museiditalia-work_7282 + oai:culturaitalia.it:museiditalia-work_7283 + oai:culturaitalia.it:museiditalia-work_7284 + oai:culturaitalia.it:museiditalia-work_7285 + oai:culturaitalia.it:museiditalia-work_7286 + oai:culturaitalia.it:museiditalia-work_7287 + oai:culturaitalia.it:museiditalia-work_7288 + oai:culturaitalia.it:museiditalia-work_7289 + oai:culturaitalia.it:museiditalia-work_7290 + oai:culturaitalia.it:museiditalia-work_7291 + oai:culturaitalia.it:museiditalia-work_7292 + oai:culturaitalia.it:museiditalia-work_7293 + oai:culturaitalia.it:museiditalia-work_7294 + oai:culturaitalia.it:museiditalia-work_7295 + oai:culturaitalia.it:museiditalia-work_7296 + oai:culturaitalia.it:museiditalia-work_7297 + oai:culturaitalia.it:museiditalia-work_7298 + oai:culturaitalia.it:museiditalia-work_7299 + oai:culturaitalia.it:museiditalia-work_7300 + oai:culturaitalia.it:museiditalia-work_7301 + oai:culturaitalia.it:museiditalia-work_7302 + oai:culturaitalia.it:museiditalia-work_7303 + oai:culturaitalia.it:museiditalia-work_7304 + oai:culturaitalia.it:museiditalia-work_7305 + oai:culturaitalia.it:museiditalia-work_7306 + oai:culturaitalia.it:museiditalia-work_7307 + oai:culturaitalia.it:museiditalia-work_7308 + oai:culturaitalia.it:museiditalia-work_7309 + oai:culturaitalia.it:museiditalia-work_7310 + oai:culturaitalia.it:museiditalia-work_7311 + oai:culturaitalia.it:museiditalia-work_7312 + oai:culturaitalia.it:museiditalia-work_7313 + oai:culturaitalia.it:museiditalia-work_7314 + oai:culturaitalia.it:museiditalia-work_7315 + oai:culturaitalia.it:museiditalia-work_7316 + oai:culturaitalia.it:museiditalia-work_7317 + oai:culturaitalia.it:museiditalia-work_7318 + oai:culturaitalia.it:museiditalia-work_7319 + oai:culturaitalia.it:museiditalia-work_7320 + oai:culturaitalia.it:museiditalia-work_7321 + oai:culturaitalia.it:museiditalia-work_7322 + oai:culturaitalia.it:museiditalia-work_7323 + oai:culturaitalia.it:museiditalia-work_7324 + oai:culturaitalia.it:museiditalia-work_7325 + oai:culturaitalia.it:museiditalia-work_7326 + oai:culturaitalia.it:museiditalia-work_7327 + oai:culturaitalia.it:museiditalia-work_7328 + oai:culturaitalia.it:museiditalia-work_7329 + oai:culturaitalia.it:museiditalia-work_7330 + oai:culturaitalia.it:museiditalia-work_7331 + oai:culturaitalia.it:museiditalia-work_7332 + oai:culturaitalia.it:museiditalia-work_7333 + oai:culturaitalia.it:museiditalia-work_7334 + oai:culturaitalia.it:museiditalia-work_7335 + oai:culturaitalia.it:museiditalia-work_7336 + oai:culturaitalia.it:museiditalia-work_7337 + oai:culturaitalia.it:museiditalia-work_7338 + oai:culturaitalia.it:museiditalia-work_7339 + oai:culturaitalia.it:museiditalia-work_7340 + oai:culturaitalia.it:museiditalia-work_7341 + oai:culturaitalia.it:museiditalia-work_7342 + oai:culturaitalia.it:museiditalia-work_7343 + oai:culturaitalia.it:museiditalia-work_7344 + oai:culturaitalia.it:museiditalia-work_7345 + oai:culturaitalia.it:museiditalia-work_7346 + oai:culturaitalia.it:museiditalia-work_7347 + oai:culturaitalia.it:museiditalia-work_7348 + oai:culturaitalia.it:museiditalia-work_7349 + oai:culturaitalia.it:museiditalia-work_7350 + oai:culturaitalia.it:museiditalia-work_7351 + oai:culturaitalia.it:museiditalia-work_7352 + oai:culturaitalia.it:museiditalia-work_7353 + oai:culturaitalia.it:museiditalia-work_7354 + oai:culturaitalia.it:museiditalia-work_7355 + oai:culturaitalia.it:museiditalia-work_7356 + oai:culturaitalia.it:museiditalia-work_7357 + oai:culturaitalia.it:museiditalia-work_7358 + oai:culturaitalia.it:museiditalia-work_7359 + oai:culturaitalia.it:museiditalia-work_7360 + oai:culturaitalia.it:museiditalia-work_7361 + oai:culturaitalia.it:museiditalia-work_7362 + oai:culturaitalia.it:museiditalia-work_7363 + oai:culturaitalia.it:museiditalia-work_7364 + oai:culturaitalia.it:museiditalia-work_7365 + oai:culturaitalia.it:museiditalia-work_7366 + oai:culturaitalia.it:museiditalia-work_7367 + oai:culturaitalia.it:museiditalia-work_7368 + oai:culturaitalia.it:museiditalia-work_7369 + oai:culturaitalia.it:museiditalia-work_7370 + oai:culturaitalia.it:museiditalia-work_7371 + oai:culturaitalia.it:museiditalia-work_7372 + oai:culturaitalia.it:museiditalia-work_7373 + oai:culturaitalia.it:museiditalia-work_7374 + oai:culturaitalia.it:museiditalia-work_7375 + oai:culturaitalia.it:museiditalia-work_7376 + oai:culturaitalia.it:museiditalia-work_7377 + oai:culturaitalia.it:museiditalia-work_7378 + oai:culturaitalia.it:museiditalia-work_7379 + oai:culturaitalia.it:museiditalia-work_7380 + oai:culturaitalia.it:museiditalia-work_7381 + oai:culturaitalia.it:museiditalia-work_7382 + oai:culturaitalia.it:museiditalia-work_7383 + oai:culturaitalia.it:museiditalia-work_7384 + oai:culturaitalia.it:museiditalia-work_7385 + oai:culturaitalia.it:museiditalia-work_7386 + oai:culturaitalia.it:museiditalia-work_7387 + oai:culturaitalia.it:museiditalia-work_7388 + oai:culturaitalia.it:museiditalia-work_7389 + oai:culturaitalia.it:museiditalia-work_7390 + scheda SIRBeC COL: COL-ST010-0000002 + http://194.242.241.163/fedora/objects/coll:91/datastreams/MM258501/content + title=visualizza il file Mets; URL=fedora/objects/coll:91/datastreams/export/content + + + + + + http%3A%2F%2Fwww.culturaitalia.it%2FoaiProviderCI%2FOAIHandler + oai:culturaitalia.it:oai:culturaitalia.it:museiditalia-coll_91 + 2017-03-07T12:04:37Z + + + + + + diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah.xml new file mode 100644 index 0000000..01ee062 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah.xml @@ -0,0 +1,97 @@ + + + + dariah_gr___::35cf8659cfcb13224cbd47863a34fc58 + 796 + 2017-09-20T12:03:30.827+02:00 + dariah_gr___ + DARIAH-GR + api_________::ariadneplus___::dariahGR::oai + 796 + 2016-11-09T20:21:34Z + + + + + Το εραλδικό φαινόμενο, η πρώτη εμφάνιση του οποίου εντοπίζεται στη Δυτική και Κεντρική Ευρώπη, στο δεύτερο τέταρτο του 12ου αιώνα, παρουσιάζεται στον Ελλαδικό χώρο καθυστερημένα και διαδίδεται σε μικρότερη έκταση. + Στην Ελλάδα, τα πρώτα εραλδικά κατάλοιπα, όπως τα εντοπίζει η ιστορική έρευνα, χρονολογούνται από τον 14ο αιώνα, για να πυκνώσουν αποφασιστικά τον 15ο και 16ο, όταν το φαινόμενο φθάνει στη μεγαλύτερη ακμή του, και να συνεχίσουν με μια ύφεση, παραμένοντας ωστόσο σε ένα αξιόλογο επίπεδο, μέχρι τα τέλη του 19ου αιώνα. + Το Ινστιτούτο Νεοελληνικών Ερευνών αναγνωρίζοντας τη σημασία της μελέτης του φαινομένου αυτού για τη νεότερη ελληνική ιστορία και την ανάγκη να υπερκεραστεί το στάδιο της ερασιτεχνικής προσέγγισής του, έχει εντάξει στις ερευνητικές του δραστηριότητες τη συστηματική αναζήτηση, καταγραφή, φωτογράφηση και ταξινόμησή τους, με στόχο τη συγκρότηση ενός αρχείου των εραλδικών μνημείων στην Ελλάδα. + Τρεις είναι οι βασικές γεωγραφικές περιοχές με τη μεγαλύτερη συμβολή: + οι Λατινοκρατούμενες Κυκλάδες, + τα Δωδεκάνησα των Ιωαννιτών ιπποτών και + η Βενετική κυριαρχία κυρίως στην Κρήτη, τα Επτάνησα και την Πελοπόννησο + + Δευτερεύουσες συμβολές προκύπτουν από τη Γενοβέζικη παρουσία (κυρίως στο Βορειοανατολικό Αιγαίο), την Καθολική εκκλησία (που διασταυρώνει όλα τα προηγούμενα) και τέλος τη μικρή ομάδα των Φαναριωτών. + Στην παρούσα βάση παρουσιάζονται ενδεικτικά 443 εγγραφές. Από αυτές, οι 147 χρονολογούνται μεταξύ του 13ου-15ου αιώνα, οι 170 από τον 16ο-17ο αιώνα, οι 105 από τον 18ο-19ο αιώνα, ενώ 21 προέρχονται από τον 20ό αιώνα. Χωροταξικά ο μεγάλος όγκος προέρχεται από τα νησιά του Αιγαίου (258 εγγραφές), ενώ εκπροσωπούνται επίσης η Κρήτη (85 εγγραφές), τα Επτάνησα (44 εγγραφές), η Στερεά Ελλάδα (38 εγγραφές) και η Πελοπόννησος (18 εγγραφές). Κάθε εγγραφή περιλαμβάνει τη θέση στην οποία βρίσκεται το μνημείο, την ταύτιση και τη χρονολόγησή του, ένα σύντομο ιστορικό σημείωμα, μια ενδεικτική βιβλιογραφία και μία πρόσφατη απεικόνισή του. + Η μεταγραφή των ελληνικών χαρακτήρων σε λατινικούς έγινε με βάση το Ελληνικό Πρότυπο του ΕΛΟΤ 743, 2η έκδοση. + + + + Heraldic Database of Greece + + http://pandektis.ekt.gr/pandektis/handle/10442/1 + 0 + + Εθνικό Ίδρυμα Ερευνών + + Δεν υπάρχουν περιορισμοί πνευματικών δικαιωμάτων σε ό,τι αφορά τα ιστορικά στοιχεία που εμφανίζονται στις εγγραφές. Σε ό,τι αφορά τις απεικονίσεις, τα πνευματικά δικαιώματα ανήκουν στο Ινστιτούτο Νεοελληνικών Ερευνών του ΕΙΕ και, συνεπώς, απαιτείται η άδειά του για την αντιγραφή ή την περαιτέρω χρήση τους. + 0 + Νεότερα μνημεία, Οικογένειες, Νεότερη Κοινωνική Ιστορία, Εραλδική + Αρχείο Εραλδικών Μνημείων του Ελλαδικού Χώρου + + Συλλογή + + 0 + 0 + 0 + + 443 εγγραφές + + + + coll:796 + + Πανδέκτης: Ψηφιακός Θησαυρός Πρωτογενών Τεκμηρίων Ελληνικής Ιστορίας και Πολιτισμού + + + + + + + + Ελληνικά, Νέα (1453-) + + + Αγγλικά + + + Εθνικό Ίδρυμα Ερευνών + + + Αιγαίο + + + Κρήτη + + + Επτάνησα + + + Στερεά Ελλάδα + + + Πελοπόννησος + + + + + + + http%3A%2F%2Fregistry-dyas.imis.athena-innovation.gr%3A8080%2Fdyas + 796 + 2016-11-09T20:21:34Z + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah2.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah2.xml new file mode 100644 index 0000000..5092477 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah2.xml @@ -0,0 +1,81 @@ + + + + dariah_gr___::000871c1fc726f0b52dc86a4eeb027de + 4612 + 2017-11-03T16:02:26.229+01:00 + dariah_gr___ + DARIAH-GR + api_________::ariadneplus___::dariahGR::oai + 4612 + 2016-11-09T20:24:58Z + + + + + Η συλλογή περιλαμβάνει αντικείμενα που χρονολογούνται από την νεολιθική ως και τη ρωμαϊκή εποχή. Ξεχωρίζουν σημαντικά έργα της αρχαίας ελληνικής γλυπτικής, όπως το ακέραιο μαρμάρινο άγαλμα της Γοργούς, δύο μαρμάρινες ανάγλυφες πλάκες από το Ηρώο του Αρχιλόχου, μαρμάρινο κολοσσικό άγαλμα Αρτέμιδας από το ιερό του Απόλλωνα Δηλίου και της Αρτέμιδας Δηλίας, στο Δήλιο της Πάρου. + + + Archaeological Museum of Paros Collection + + 1390 + + Αρχαιολογικό Μουσείο Πάρου + + 0 + Προϊστορική Αρχαιολογία, Κλασική Aρχαιολογία, Γλυπτική, Επιγραφική, Μικροτεχνία, + Συλλογή Αρχαιολογικού Μουσείου Πάρου + + Συλλογή + + 0 + 0 + 0 + + + + + + coll:4612 + + + + + + μάρμαρο + + + πηλός + + + + Ελληνικά, Νέα (1453-) + + + Αρχαιολογικό Μουσείο Πάρου + + + + Πάρος + + + + + + + http%3A%2F%2Fregistry-dyas.imis.athena-innovation.gr%3A8080%2Fdyas + 4612 + 2016-11-09T20:24:58Z + + + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah_orig.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah_orig.xml new file mode 100644 index 0000000..57c9be7 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/dariah_orig.xml @@ -0,0 +1,59 @@ + + +
+ 4612 + 2016-11-09T20:24:58Z +
+ + + + Η συλλογή περιλαμβάνει αντικείμενα που χρονολογούνται από την νεολιθική ως και τη ρωμαϊκή εποχή. Ξεχωρίζουν σημαντικά έργα της αρχαίας ελληνικής γλυπτικής, όπως το ακέραιο μαρμάρινο άγαλμα της Γοργούς, δύο μαρμάρινες ανάγλυφες πλάκες από το Ηρώο του Αρχιλόχου, μαρμάρινο κολοσσικό άγαλμα Αρτέμιδας από το ιερό του Απόλλωνα Δηλίου και της Αρτέμιδας Δηλίας, στο Δήλιο της Πάρου. + + + Archaeological Museum of Paros Collection + + 1390 + + Αρχαιολογικό Μουσείο Πάρου + + 0 + Προϊστορική Αρχαιολογία, Κλασική Aρχαιολογία, Γλυπτική, Επιγραφική, Μικροτεχνία, + Συλλογή Αρχαιολογικού Μουσείου Πάρου + + Συλλογή + + 0 + 0 + 0 + + + + + + coll:4612 + + + + + + μάρμαρο + + + πηλός + + + + Ελληνικά, Νέα (1453-) + + + Αρχαιολογικό Μουσείο Πάρου + + + + Πάρος + + + +
+ diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/ehri_test.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/ehri_test.xml new file mode 100644 index 0000000..62bd7cb --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/ehri_test.xml @@ -0,0 +1,100 @@ + + + us-005578-irn516886 + + + Romana Primus photograph collection + + + United States Holocaust Memorial Museum +
+ 100 Raoul Wallenberg Place, S.W. + DC 20024-2126 + Washington + District of Columbia + US + 202 488 0400 + 202-479-9726 + http://www.ushmm.org/ + archives@ushmm.org + United States +
+
+ + +

This encoded description is derived from structured data provided to EHRI by a partner institution but may differ in structure and/or content from its source. The collection holding institution considers this description as an accurate reflection of the archival holdings to which it refers at the moment of data transfer.

+
+
+
+ + This file was exported automatically from the EHRI database administration tool and represents a work-in-progress. + 2017-05-13T09:25:31.407+01:00 + + + English + + + + + 2014-12-19T16:12:54.402Z + These files were provided by the United States Holocaust Memorial Museum to EHRI on 2014-11-21. + + [ingest] + + + +
+ + + irn516886 + Romana Primus photograph collection + 1946-1947 + + United States Holocaust Memorial Museum + + + +

The collection consists of four photographs of Romana Strochlitz Primus as a baby, her parents, Sigmund and Ruzka (Rose) Grinburg Strochlitz, and other refugees at the Bergen-Belsen displaced persons camp in Germany after World War II.

+
+ +

No restrictions on access

+
+ +

No restrictions on use

+
+ +

Accession number: 1999.18

+
+ +

The collection was donated to the United States Holocaust Memorial Museum by Romana Strochlitz Primus in 1999.

+
+ +

Record type: Document

+
+ + Refugees--Germany--1940-1950. + Refugee camps--Germany--1940-1950. + + + Kirszenbaum, Halina Grauman. + Brechner, Dosia Grinburg. + Weinreich, Hela. + Strochlitz, Rose Grinburg. + Strochlitz, Sigmund. + Primus, Romana Strochlitz. + + + Photographs. + +
+
+ + diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/metashare.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/metashare.xml new file mode 100644 index 0000000..6c2de08 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/metashare.xml @@ -0,0 +1,297 @@ + + + + Strongly Comparable and Aligned Legal News EN-FR-RO News Corpus + This corpus is a collection of strongly comparable English, French and Romanian documents collected from http://ec.europa.eu/ website that are sentence split, POS tagged, lemmatized and chunked and that are also sentence aligned using Moore's sentence aligner (http://research.microsoft.com/pubs/68886/sent-align2-amta-final.pdf). + NOT_DEFINED_FOR_V2 + RACAIEnFrRoNewsCorpus + + + available-restrictedUse + + MSCommons-BY-NC-ND + academic-nonCommercialUse + attribution + informLicensor + noRedistribution + accessibleThroughInterface + downloadable + Please cite this paper: "Radu Ion, Dan Tufiş, Tiberiu Boroş, Alexandru Ceauşu, and Dan Ştefănescu. On-Line Compilation of Comparable Corpora and their Evaluation. In Marko Tadić, Mila Dimitrova-Vulchanova, and Svetla Koeva (eds.), Proceedings of The 7th International Conference Formal Approaches to South Slavic and Balkan Languages (FASSBL-7), pp. 29—34, Croatian Language Technologies Society – Faculty of Humanities and Social Sciences, Zagreb, Croatia, October 2010. ISBN: 978-953-55375-2-6." + + + Research Institute for Artificial Intelligence, Romanian Academy + RACAI + ICIA + NLP Group + + office@racai.ro + http://www.racai.ro/ +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, București, România, 050711
+ 050711 + Bucharest + Romania + 0040 21 3188103 + 0040 21 3188142 +
+
+
+ + + Research Institute for Artificial Intelligence, Romanian Academy + RACAI + ICIA + NLP Group + + office@racai.ro + http://www.racai.ro/ +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, București, România, 050711
+ 050711 + Bucharest + Romania + 0040 21 3188103 + 0040 21 3188142 +
+
+
+ academic + commercial +
+ + + Research Institute for Artificial Intelligence, Romanian Academy + RACAI + ICIA + NLP Group + + office@racai.ro + http://www.racai.ro/ +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, București, România, 050711
+ 050711 + Bucharest + Romania + 0040 21 3188103 + 0040 21 3188142 +
+
+
+
+ + Ion + Radu + + radu@racai.ro + http://www.racai.ro/~radu +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3318
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+ senior researcher, 3rd grade + + "Mihai Drăgănescu" Research Institute for Artificial Intelligence of the Romanian Academy + RACAI + NLP Group + + office@racai.ro + http://www.racai.ro +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3310
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+
+
+ + 2012-12-18 + + Ion + Radu + + radu@racai.ro + http://www.racai.ro/~radu +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3318
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+ senior researcher, 3rd grade + + "Mihai Drăgănescu" Research Institute for Artificial Intelligence of the Romanian Academy + RACAI + NLP Group + + office@racai.ro + http://www.racai.ro +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3310
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+
+
+ METANET4U + 3.0 + English + en + 2012-12-18 +
+ + true + formal + automatic + Parsed for XCES conformance. + full + + + Ion + Radu + + radu@racai.ro + http://www.racai.ro/~radu +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3318
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+ senior researcher, 3rd grade + + "Mihai Drăgănescu" Research Institute for Artificial Intelligence of the Romanian Academy + RACAI + NLP Group + + office@racai.ro + http://www.racai.ro +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3310
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+
+
+
+
+ + + + manual + Strongly Comparable and Aligned Legal News EN-FR-RO News Corpus + Radu Ion + http://ws.racai.ro:9191/narratives/batch3/EnFrRoSentenceAlignedCorpus.pdf + parallel corpus, English, Romanian, French, POS-tagged, lemmatized, chunked + English + en + + + manual + + + + + Ion + Radu + + radu@racai.ro + http://www.racai.ro/~radu +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3318
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+ senior researcher, 3rd grade + + "Mihai Drăgănescu" Research Institute for Artificial Intelligence of the Romanian Academy + RACAI + NLP Group + + office@racai.ro + http://www.racai.ro +
Casa Academiei, Calea 13 Septembrie nr. 13, etaj 3, birou 3310
+ 050711 + București + România + 0040 21 3188103 + 0040 21 3188142 +
+
+
+
+
+ + + corpus + + + text + + multilingual + comparable + A parallel sub-corpus is extracted. + + + en + English + + 1848 + files + + + + fr + French + + 1809 + files + + + + ro + Romanian + + 966 + files + + + + writtenLanguage + + + 4623 + files + + + text/xml + + + UTF-8 + + + Legal news + other + + + Years 2010-2011 + + + automatic + + + + + +
\ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304736.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304736.xml new file mode 100755 index 0000000..cfcbaac --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304736.xml @@ -0,0 +1,40 @@ + + + + + + PIT + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + No title + Pre 1350 coal pit + 2004-09-15 00:00:00.0 + 2004-09-15 00:00:00.0 + 977352 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=977352 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1066 + 1540 + + + ENGLAND + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304736 + pits (earthworks)http://vocab.getty.edu/aat/300008027 + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304737.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304737.xml new file mode 100755 index 0000000..a5cc61d --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304737.xml @@ -0,0 +1,43 @@ + + + + + + TERRACED HOUSE + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + 19 QUEEN ANNES GROVE, EALING + TERRACED HOUSE - 19 QUEEN ANNES GROVE, EALING + 1999-05-06 00:00:00.0 + 1999-05-06 00:00:00.0 + 637688 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=637688 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1540 + 1901 + + + 19 QUEEN ANNES GROVE + 51.49648 + -.25671 + England + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304737 + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304738.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304738.xml new file mode 100755 index 0000000..6ca3fd9 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304738.xml @@ -0,0 +1,42 @@ + + + + + + WINDMILL + + + + Archaeology Data Service + Organization + + + Sustainability Group, Shropshire County Council + Organization + + Crudgington Windmill + Windmill &lt;1&gt; + 2002-11-20 00:00:00.0 + 2002-11-20 00:00:00.0 + 67142 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=67142 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1540 + 1901 + + + 52.758881 + -2.552782 + England + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304738 + windmillshttp://vocab.getty.edu/aat/300006273 + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304739.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304739.xml new file mode 100755 index 0000000..e159b84 --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304739.xml @@ -0,0 +1,60 @@ + + + + + + EARTHWORK + + + + + FISHPOND + + + + + MANOR HOUSE + + + + + MOAT + + + + + TRACKWAY + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + MOAT FARM + Medieval moated manor house. House replaced by a 19th century farmhouse. Other features include fishponds, trackways and field system. + 2004-09-15 00:00:00.0 + 2004-09-15 00:00:00.0 + 1055485 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=1055485 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1066 + 1540 + + + ENGLAND + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304739 + earthworks (engineering works)http://vocab.getty.edu/aat/300008020fishpondshttp://vocab.getty.edu/aat/300008689manor houseshttp://vocab.getty.edu/aat/300005579 + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304740.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304740.xml new file mode 100755 index 0000000..719fb0c --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304740.xml @@ -0,0 +1,57 @@ + + + + + + COUNTRY HOUSE + + + + + DEMOLISHED BUILDING + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + STOKE PARK HOUSE + Country house constructed between 1629 and 1635 possibly by Inigo Jones. the principal south front of the house was three storeys above a basement. The two principal storeys were defined by a giant Ionic order supporting an entablature. Alteratins were carried out after 1786 to deisgns by Levison Vernon. The house was destroyed by a fire in 1886. + 2004-09-15 00:00:00.0 + 2004-09-15 00:00:00.0 + 1052615 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=1052615 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1540 + 1901 + + + 1886 + 1886 + + + 1786 + 1786 + + + 1629 + 1635 + + + ENGLAND + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304740 + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304741.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304741.xml new file mode 100755 index 0000000..a82cc0b --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304741.xml @@ -0,0 +1,44 @@ + + + + + + BUILDING + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + BIRMINGHAM MIDLAND INSTITUTE (FY THE BIRMINGHAM LIBRARY) + 1899 + 2004-09-15 00:00:00.0 + 2004-09-15 00:00:00.0 + 1046309 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=1046309 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + 1540 + 1901 + + + 1899 + 1899 + + + ENGLAND + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304741 + buildings (structures)http://vocab.getty.edu/aat/300004792 + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304742.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304742.xml new file mode 100755 index 0000000..5d29d7d --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/new-10304742.xml @@ -0,0 +1,50 @@ + + + + + + FINDSPOT + + + + + RAPIER + + + + + SWORD + + + + Archaeology Data Service + Organization + + + Historic England + Organization + + No title + Bronze age rapier + 2004-09-15 00:00:00.0 + 2004-09-15 00:00:00.0 + 1050544 + en + http://archaeologydataservice.ac.uk/archsearch/record.jsf?titleId=1050544 + http://archaeologydataservice.ac.uk/advice/termsOfUseAndAccess + ADS Terms and Conditions + + -2600 + -700 + + + ENGLAND + EPSG:27700 + + Sites and monuments databases or inventories + + http://registry.ariadne-infrastructure.eu/collection/22721290 + http://registry.ariadne-infrastructure.eu/dataset/10304742 + rapiershttp://vocab.getty.edu/aat/300037085swordshttp://vocab.getty.edu/aat/300037048archaeological siteshttp://vocab.getty.edu/aat/300000810 + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/topLevel.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/topLevel.xml new file mode 100644 index 0000000..46ba01d --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/topLevel.xml @@ -0,0 +1,1453 @@ + + + + + RI Project + 1 + ARIADNE Project + ARIADNE brings together and integrates existing archaeological research data infrastructures so that researchers can use the various distributed datasets and new and powerful technologies as an integral component of the archaeological research methodology. + ARIADNE catalogue + ARIADNE Visual Media Service + Landscape Services - Cloud Hosting + Landscape Services - 3D Terrain Service + ICCD RA Thesaurus for archaeological objects + ARIADNE Consortium + 2012 + 2015 + Achille Felicetti + achille.felicetti@gmail.com + + + RI Project + 2 + DARIAH-GR/ΔΥΑΣ + The DYAS network implements the actions of DARIAH-GR in coordination with the European Research Infrastructure for Arts and Humanities DARIAH, of which Greece is a founding member. It is also Greece’s managing authority European Infrastructure. The National Infrastructure, funded by the General Secretariat of Research and Technology within the NSRF, entered the construction phase on 1st May, 2013. + DYAS Organizations and Collections Registries + DYAS Software Registry + THEMAS Humanities Thesauri + DARIAH-GR Consortium + 2014 + Thu Dec 31 2015 17:00:00 GMT-0500 (EST) + Athanasios Karasimos + akarasimos@academyofathens.gr + Anastasia Falierou + afalierou@academyofathens.gr + + + RI Project + 3 + EHRI Project + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. Apart from providing an online platform, EHRI also facilitates an extensive network of researchers, archivists and others to increase cohesion and co-ordination among practitioners and to initiate new transnational and collaborative approaches to the study of the Holocaust. + EHRI Portal + EHRI Consortium + 2010 + Charles Riondet + charles.riondet@inria.fr + Elske Rotteveel + e.rotteveel@niod.knaw.nl + + + RI Project + 4 + Huma-Num + Supported by the CNRS (the French National Center for Scientific Research), Aix-Marseille University and the Campus Condorcet, Huma-Num is a French Very Large Research Infrastructure (“Très Grande Infrastructure de Recherche”, TGIR) with international reach devoted to Social Sciences and Humanities. It is part of the national ESFRI roadmap, which is in turn aligned with the European Union’s ESFRI framework. Indeed, Huma-Num is entrusted with France’s participation in two European Research Infrastructure Consortia (ERIC): DARIAH (Digital Research Infrastructure for the Arts and Humanities) and CLARIN (Common Language Resources and Technologies Infrastructure). It is also involved in European and international projects. + Nakala + Isidore + CoCoon + Huma-num Consortium + 2015 + Hélène Gautier + helene.gautier@huma-num.fr + Nicolas Larrousse + Nicolas.Larrousse@huma-num.fr + + + RI Project + 5 + CENDARI + CENDARI Archival Directory + CENDARI Sparql Endpoint + CENDARI Consortium + Emiliano Degl'Innocenti + emiliano.degli.innocenti@gmail.com + Maurizio Sanesi + maurizio.sanesi@virgilio.it + + + RI Project + 7 + META-NET Project + META-NET, a Network of Excellence consisting of 60 research centres from 34 countries, + is dedicated to building the technological foundations of a multilingual European information society. + META-NET is forging META, the Multilingual Europe Technology Alliance. + Metashare + META-NET Network of Excellence + 2010 + Monica Monachini + monica.monachini@ilc.cnr.it + Khalid Choukri + khalid.choukri@elra.fr + + + RI Project + 8 + CLARIN + CLARIN is the European Research Infrastructure for Language Resorces and Technology, making digital language resources available to scholars, researchers, students and citizen-scientists from all disciplines, especially in the humanities and social sciences, through single sign-on access. CLARIN offers long-term solutions and technology services for deploying, connecting, analyzing and sustaining digital language data and tools. CLARIN supports scholars who want to engage in cutting edge data-driven research, contributing to a truly multilingual European Research Area. + Virtual Language Observatory + CLARIN Concept Registry + Component Registry + CLARIN Centres Registry + CLARIN-EU + 2008 + 2015 + + + RI Project + FLaReNet project + A major condition for the take-off of the field of Language Resources and Language Technologies is the creation of a shared policy for the next years. + + FLaReNet aims at developing a common vision of the area and fostering a European strategy for consolidating the sector, thus enhancing competitiveness at EU level and worldwide. + + By creating a consensus among major players in the field, the mission of FLaReNet is to identify priorities as well as short, medium, and long-term strategic objectives and provide consensual recommendations in the form of a plan of action for EC, national organisations and industry. + + Through the exploitation of new collaborative modalities as well as workshops and meetings, FLaReNet will sustain international cooperation and (re)create a wide Language community. + LRE Map + FLaReNet + Sun Aug 31 2008 17:00:00 GMT-0400 (EDT) + Tue Aug 30 2011 17:00:00 GMT-0400 (EDT) + Monica Monachini + monica.monachini@ilc.cnr.it + + + RI Project + ICCU - CulturaItalia + CulturaItalia offers a thematic consultation of the Metadata Index, and in particular in the Cultural heritage thematic area, 2.268.000 items are available. In CulturaItalia there is a section devoted to the open data (http://dati.culturaitalia.it), where they are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search a datasets selection via SPARQL END POINT available in Linked Open Data format. CulturaItalia presents a section called MuseiD-Italia, dedicated to museums in which you can search and compare works from cultural collections of different Italian Institutes. + CulturaItalia Portal + MuseiD-Italia + PICO application profile + Thesaurus PICO + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + 2008 + Sara Di Giorgio + sara.digiorgio@beniculturali.it + + + RI Project + ARIADNEPLUS Project + A cluster project bringing together RIs from the disciplines of archaeology, humanities, cultural heritage and linguistics, inter alia, the ARIADNEPLUS Project aims to provide common solutions for RI activities and make available cross-disciplinary resources and communication. + ARIADNEPLUS Policy Wizard + Foresight studies + ARIADNEPLUS International Liaisons + Standardization Survival Kit + AriadnePlus Reference Resources Management + ARIADNEPLUS Project Consortium + 2015 + + + + + PE24 Volatile Dataset + 2 + ARIADNE Catalogue Dataset + A collection of archaeological datasets from across Europe. + ARIADNE catalogue + ARIADNE catalogue + XML + ACDM + Archaeology + ARIADNE Consortium + + + PE24 Volatile Dataset + 3 + CLARIN Virtual Language Observatory Dataset + The available archive files contain over 900000 datasets (language resources, tools, lexicons, corpora): XML files CLARIN harvested, in CLARIN format (CMDI, http://www.clarin.eu/cmd/), organised in one folder per content provider. These are description of datasets (e.g. linguistic corpora) and tools. + Virtual Language Observatory + Virtual Language Observatory + XML + CMDI + Linguistics + CLARIN-EU + + + PE24 Volatile Dataset + 4 + CENDARI Dataset + The available dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + CENDARI Archival Directory + CENDARI Archival Directory + XML + CIDOC-CRM + DM2E + MiddleAges + Middle Ages + CENDARI + + + PE24 Volatile Dataset + CLARIN Centres Registry Dataset + CLARIN Centres, their capabilities (especially available endpoints), as well as responsible persons + CLARIN Centres Registry + CLARIN Centres Registry + CLARIN-EU + + + PE24 Volatile Dataset + Component Registry Dataset + CMD profiles (/metadata schemas) + Component Registry + Component Registry + CLARIN-EU + + + PE24 Volatile Dataset + CLARIN Concept Registry Dataset + Concepts used for semantic annotation of metadata schemas and their definitions + CLARIN Concept Registry + CLARIN Concept Registry + CLARIN-EU + + + PE24 Volatile Dataset + 6 + DYAS Catalogue Dataset + The registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. + Analogue Collections of Humanities and Arts + DYAS Organizations and Collections Registries + DYAS Organizations and Collections Registries + provided by DCU + XML + Dublin Core + FOAF + Philosophy + Theory of Sciences + Greek Literature + Greek Theatre and Theatrology + Turcology + Folklore and Ethnology + Linguistics + Archaeology + Classical Philology + Arts + Musicology + History + Philosophy + Greek Language and Linguistics + Anthropology + Literature + History of Arts + Archeology + Greek Theater and Theatrology + Musicology + Antiquity + Middle Ages + Modern Period + Contemporary Period + Greece + Magna Graecia + DARIAH-GR Consortium + + + PE24 Volatile Dataset + 7 + LRE Map Dataset + LRE Map is a mechanism intended to monitor the use and creation of language resources by collecting information on both existing and newly-created resources during the submission process. It is a collective enterprise of the LREC community, as a first step towards the creation of a very broad, community-built, Open Resource Infrastructure. It is meant to become an essential instrument to monitor the field and to identify shifts in shifts in the production, use, and evaluation of LRs and LTs over the years. + LRE Map + RDF + Relational DB + Computational Linguistics + NLP + Language resources + Modern Period + ILC-ELRA + + + PE24 Volatile Dataset + 8 + Metashare Dataset + Metashare + Metashare + Machine Translation + Computational Linguistics + NLP + Modern Period + Metashare Consortium + + + PE24 Volatile Dataset + 9 + Isidore Dataset + Selection of dataset related to Cultural Heritage + Isidore + Isidore + XML + RDF + Isidore Schema + Humanities + Social Sciences + Cultural Heritage + Prehistory + Antiquity + Middle Ages + Early Modern Period + Modern Period + Huma-num + + + PE24 Volatile Dataset + 10 + Nakala Dataset + Selection of dataset related to Cultural Heritage + Nakala + Nakala + XML + RDF + Nakala Schema + DCTerms + Humanities + Social Sciences + Cultural Heritage + Prehistory + Antiquity + Middle Ages + Early Modern Period + Modern Period + Huma-num + + + PE24 Volatile Dataset + 11 + CoCoON Dataset + Collections of oral resources from different parts of the world (https://cocoon.huma-num.fr/exist/crdo/collections.xql) + CoCoon + CoCoon + XML + RDF + EDM + OLAC + DCTerms + Oral Corpora + Cultural Heritage + Modern Period + + + PE24 Volatile Dataset + 12 + EHRI Portal Dataset + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + EHRI Portal + EHRI Portal + EAD + Holocaust Related Archive Material + Modern Period + + + PE24 Volatile Dataset + 13 + DARIAH-IT resources registry + Within the infrastructure each partner can contribute to the budget also in the form of inkind. In these datasets there are information collected by DARIAH-IT about collaborators, inkind(contributions), projects and partners + XML + CIDOC-CRM + National Resources + Capabilities + Sources + Contemporary Period + CNR-OVI + + + PE24 Volatile Dataset + 14 + BISLAM + BISLAM (Bibliotheca Scriptorum Latinorum Medii Recentiorisque Aevi),is a series of onomastic, biographical, bibliographic and historical-literary repertoires of mediolatine literature. + CENDARI Archival Directory + CENDARI Archival Directory + XML + CIDOC-CRM + MiddleAges + Middle Ages + SISMEL + + + PE24 Volatile Dataset + CulturaItalia Portal Dataset + CulturaItalia is the Portal of Italian Culture, managed by the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), in which are involved cultural institutions from all sectors and levels (national, regional and local). CulturaItalia, as national aggregator, plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. CulturaItalia presents an integrated Digital Library, named MuseiD-Italia, with the most important digital collections of the Italian museums. CulturaItalia offers a thematic consultation of the Metadata Index and in the sectors of Visual art works, Anthropological Heritage; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Instruments and Means of transport. Currently we selected for ARIADNEPLUS project about 2.200.000 cultural items (objects) and 368 Collections( from MuseiD-Italia). + CulturaItalia Portal + CulturaItalia Portal + XML + PICO Application Profile + Cultural heritage + Documentary resources + Visual art works + Works of applied arts + Architectural Heritage + Anthropological Heritage + Instruments + Means of transport + Ancient Age + Middle Ages + Modern Age + Contemporary Age + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + Internet Culturale Dataset + Internet Culturale, catalogues and digital collections from Italian libraries, is the portal providing access to the cultural heritage held by Italian public libraries and important cultural institutions. It is a multimedia web tool that allows both bibliographic information and the digital library to be viewed in the same virtual place. + For ARIADNEPLUS: 925,791 results/ Documentary resources (66 sub-set) + CulturaItalia Portal Dataset + XML + MAG + Documentary resources + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + SAN - Sistema Archivistico Nazionale Dataset + It is the unified access point to national archival resources made available on the web by national, regional and local information systems, databases and digital search tools developed by the State, Regions and other public and private entities. + For ARIADNEPLUS: 754.889 results/ Archival Heritage + (15 sub-set) + CulturaItalia Portal Dataset + XML + CAT SAN + Documentary resources + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + Archivio storico delle arti contemporanee Dataset + ASAC dati is a database system for the management of information related to the ASAC collections. At present, the database manages data concerning the Film Library, part of the Photo Library, and the Venice Film Festival. + In the future, the project aims to include information concerning the other collections of the Biennale Archives, alongside bibliographic, historical and scientific records. + For ARIADNEPLUS: 100.632 results/ Visual art works; Documentary resources + CulturaItalia Portal Dataset + Visual art works + Photographs + Documentary resources + La Biennale di Venezia + + + PE24 Volatile Dataset + Regione Marche Dataset + Marche Beni Culturali is a portal designed to provide to the public with a unique access tool based on the Regional Heritage Information System (SIRPaC), which integrates the various digital resources collected by the Region in its activities and offers a vision of the regional heritage. + For ARIADNEPLUS: 73000 results/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Environmental and landscape Heritage; Means of transport. + CulturaItalia Portal Dataset + Visual art works + Anthropological Heritage + Instruments + Documentary resources + Architectural Heritage + Works of applied arts + Environmental and landscape Heritage + Means of transport + Marche Region + + + PE24 Volatile Dataset + Biblioteca del Senato Dataset + The Senate Library's heritage, about 600,000 volumes, is made up of several collections that have developed over the years through targeted acquisitions and donations of particularly valuable funds by senators and scholars. Local statute and local history databases contain texts - manuscripts and prints of communes, corporations, confraternities and associations, selected among the most significant in the Senate Library's collection of content, rarity, or elegance of the edition. The local history database includes the bibliographic descriptions of about 1,200 ancient editions of Italian local history edited between 1500 and 1861. + For ARIADNEPLUS: 90.568 results/ Visual art works; Documentary resources + CulturaItalia Portal Dataset + Visual art works + Documentary resources + 1500-1861 + Senate of the Republic - Library + + + PE24 Volatile Dataset + Regione Piemonte Dataset + It contains collections made through census and inventory campaigns carried out with the support of the Piemonte Region on historical archives produced or preserved by various public and private subjects. + For ARIADNEPLUS: 74.232 results/ Visual art works + CulturaItalia Portal Dataset + Visual art works + Piemonte Region + + + PE24 Volatile Dataset + MuseiD-Italia Dataset + Digital Library of the cultural heritage preserved in the Italian museums of various sectors; the digital library has a dedicated interface called 'MuseiD-Italia' integrated with the CulturaItalia Portal. + For ARIADNEPLUS: 368 collections/ Visual art works; Anthropological Heritage; Instruments; Documentary resources; Architectural Heritage; Works of applied arts; Natural Heritage; Literary works; Environmental and landscape Heritage; Means of transport; Installations + CulturaItalia Portal Dataset + XML + Mets + Visual art works + Anthropological Heritage + Instruments + Documentary resources + Architectural Heritage + Works of applied arts + Natural Heritage + Literary works + Environmental and landscape Heritage + Means of transport + Installations + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + Istituto Centrale per la Storia del Risorgimento Dataset + The archive of the Institute for the History of the Italian Risorgimento - located in Rome in the Vittoriano complex - preserves a complex of extremely diverse documents in which it is possible to identify different archives and funds. The vast artistic and documentary heritage is one of the main sources for studying Italy and the international context from the mid 18th century to the end of the First World War. + For ARIADNEPLUS: 50.530 results/ Visual art works; Documentary resources; Works of applied arts + CulturaItalia Portal Dataset + Visual art works + Documentary resources + Works of applied arts + Contemporary Age + Institute for the History of the Italian Risorgimento + + + PE24 Volatile Dataset + Regione Emilia Romagna Dataset + PatER – Catalogue of the Cultural Heritage of Emilia-Romagna, is the portal that combines and integrates the digital resources created by the IBC (Institute for Cultural and Natural Art of the Emilia-Romagna Region) in its activities of valorisation, cataloging , preservation and development of the regional system of museums and cultural collections, making it visible and accessible not only to specialists, but to anyone who is browsing the web. + For ARIADNEPLUS: 37.197 results/ Visual art works; Documentary resources + CulturaItalia Portal Dataset + Visual art works + Documentary resources + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + + + PE24 Volatile Dataset + Regione Lombardia Dataset + Lombardia Beni Culturali is the unified portal of the Lombardia cultural heritage. It includes the profiles of major culture institutes such as museums, archives and libraries, heritage catalogs, preserved heritage descriptions, architectural complexes and significant urban planning, historical archive resources, and thematic collections. + For ARIADNEPLUS: 24.800 results/ Visual art works; Anthropological Heritage; Documentary resources; Works of applied arts; Instruments + CulturaItalia Portal Dataset + Visual art works + Anthropological Heritage + Documentary resources + Works of applied arts + Instruments + Lombardia Region + + + PE24 Volatile Dataset + Istituto Nazionale per la Grafica Dataset + CalcoGRAFICA is the system that publishes the digital collections of the Central Institute for Graphics (ING) on the web and offers a full overview of the history of the image through engraved prints and matrices, drawings and photographs along a chronological period from the 15th century to the present. + For ARIADNEPLUS: 23.740 results/ Visual art works; Documentary resources + CulturaItalia Portal Dataset + Visual art works + Drawings + Prints/Engravings/Matrices + Documentary resources + 15th century to the present + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + Società Geografica Italiana Dataset + The Photographic Archive of the Italian Geographic Society (SGI) represents a great value in the national scenario. The Archive collects about 400,000 phototypes (positive, negative, slides, postcards), many of which combine documentary value with an intrinsic artistic value. This is mostly rare, often unpublished materials. The oldest collection dates back to 1866, while the latest acquisitions reveal contemporaryity. + For ARIADNEPLUS: 23.000 results/ Visual art works + CulturaItalia Portal Dataset + Visual art works + Photographs + Italian Geographic Society Onlus + + + PE24 Volatile Dataset + Polo Museale fiorentino Dataset + The Uffizi Galleries preserves inventories and extensive documentation on museum art works managed by MiBACT. The main inventories offer a complete historical and iconographic documentation of works of art preserved in Galleries museums. + For ARIADNEPLUS: 15.400 results/ Visual art works; Documentary resources; Works of applied arts; Instruments; Architectural Heritage + CulturaItalia Portal Dataset + Works of applied arts + Instruments + Architectural Heritage + Ministry for Cultural Heritage and Activities (MiBAC) + + + PE24 Volatile Dataset + Regione Umbria Dataset + The Portal UmbriaCultura integrates different types of resources: Museums, Archaeological Sites, Villas and Gardens, Rocche and Castles, Historical Theaters, Libraries, Historical Archives. + For ARIADNEPLUS: 5.400 results/ Visual art works + CulturaItalia Portal Dataset + Visual art works + Umbria Region + + + PE24 Volatile Dataset + Regione Calabria Dataset + IreSud Portal - a regional level database that links the Museums of Calabria; This is a collection of works and information relating to museums of historical and demo-anthropological. + For ARIADNEPLUS: 3.024 results/ Visual art works; Anthropological Heritage + CulturaItalia Portal Dataset + Visual art works + Anthropological Heritage + Calabria Region + + + PE24 Volatile Dataset + ARIADNEPLUS Policy Wizard Dataset + ARIADNEPLUS Policy Wizard + XML + Policy + ARIADNEPLUS Project Consortium + + + PE24 Volatile Dataset + Standardization Survival Kit Dataset + The underlying dataset of the SSK is a set of research scenarios (divided in steps) encoded in TEI documents that are linked together with referencing mechanisms. The scenarios and their steps can be easily extended, reused and customized. As steps are considered as autonomous objects in the architecture, they can be used in several scenarios. Customisation mechanisms make sure that the information displayed is linked to the context of the scenarios as much as possible, namely according to disciplines, research objects and techniques. + Standardization Survival Kit + Standardization Survival Kit + https://github.com/ARIADNEPLUSWP4/SSK/blob/master/spec/TEI_SSK_ODD.xml + XML + TEI + ODD + RNG + Standardization + Arts and Humanities + Best practices + Data modeling + Data management + ARIADNEPLUS Project Consortium + + + PE24 Volatile Dataset + Foresight Studies Dataset + This dataset integrates info about literature, seminars, topics, research trends and interviews concerning the evolution of the digital humanities in a medium term perspective. These data are collected by Task 3.4 (Foresight study and interdisciplinary research agenda). + Foresight studies + XML + Humanities + Foresight studies + ARIADNEPLUS Project Consortium + + + PE24 Volatile Dataset + International Liaisons Contact information Dataset + Information collected from ARIADNEPLUS partners about the organisations that they collaborate with. This data consists of the (public) contact details and classification of areas of interest by discipline and type as well as the name (fill and acronym), organisational structure and geographic scope. + ARIADNEPLUS International Liaisons + ARIADNEPLUS International Liaisons + XML + ARIADNEPLUS Project Consortium + + + PE24 Volatile Dataset + AriadnePlus Standard Reference Resources + A list of standard reference resources used by AriadnePlus + AriadnePlus Reference Resources Management + CSV + ARIADNEPLUS Project Consortium + + + + + PE17 + 1 + ARIADNE catalogue + A beta version of the ARIADNE portal is available at http://portal.ariadne-infrastructure.eu/. The portal brings together existing archaeological research datasets from ARIADNE partners so that researchers can browse and access the various distributed datasets for use in their projects. + Archaeological Datasets + ARIADNE Consortium + http://portal.ariadne-infrastructure.eu/ + OAI-PMH + + + PE13 + ARIADNE Visual Media Service + The ARIADNE Visual Media Service provides easy publication and presentation on the web of complex visual media assets. It is an automatic service that allows to upload visual media files on an ARIADNE server and to transform them into an efficient web format, making them ready for web-based visualization. + 3D Models + RTI Images + High Resolution Images + ARIADNE Consortium + CNR-ISTI + 2016-2020 + 2017 + Sun Dec 31 2017 17:00:00 GMT-0500 (EST) + Sun Jul 23 2017 17:00:00 GMT-0400 (EDT) + Open Access + http://visual.ariadne-infrastructure.eu/index.php/upload/terms + Users of the Visual Media Service: will not upload material you are not the copyright owner of; will not upload inappropriate material; will not use the media on display without consent from the owner; will give proper credits to us if you use the service. + Visual Computing Lab - ISTI - CNR, FEDERICO PONCHIO + Visual Computing Lab - ISTI - CNR, ROBERTO SCOPIGNO + send email to the provided communication address email + ponchio@isti.cnr.it + Backup + http://visual.ariadne-infrastructure.eu/ + + + PE7 + Landscape Services - Cloud Hosting + This is the main service to access, manage and eventually share your online data. This includes DEM input data, Geo-images, 3D models, etc. + 3D Data Hosting + ARIADNE Consortium + 2016 + CNR ITABC + Bruno.Fanini@itabc.cnr.it + http://landscape.ariadne-infrastructure.eu/oc/ + + + PE13 + Landscape Services - 3D Terrain Service + You can use this service to process DEM, geo-images and shapefiles to produce large 3D terrain Datasets optimised for real-time visualization and web streaming. + 3D Data Processing + ARIADNE Consortium + 2016 + CNR ITABC + Bruno.Fanini@itabc.cnr.it + http://landscape.ariadne-infrastructure.eu/vpb-service.php + + + PE17 + ICCD RA Thesaurus for archaeological objects + The RA terminological tool, curated by ICCU and VAST-LAB, constitutes a reworked version of the RA Thesaurus issued by the ICCD. The RA Thesaurus provides all the necessary terminological facilities for an efficent and well structured recording of the object coming from archaeological excavations. The vocabulary has been implemented by ICCD to support the encoding of two specific fields (OGTD - CLS). These two fields describe the definition of the object and its class and production. + Thesauri + ARIADNE Consortium + Tue Mar 24 2015 18:00:00 GMT-0400 (EDT) + ICCU Vast-LAB + http://vast-lab.org/thesaurus/ra/vocab/ + Sparql + API + RSS + + + PE15 + 3 + CENDARI Sparql Endpoint + CENDARI provides access to data through a SPARQL access point. The dataset is composed by 16 different resources, all related to medieval and romance philology and history. It contains data about 115000+ manuscripts, 95000+ texts and 18000+ authors. + Cultural Heritage Dataset + Sismel + Emiliano Degl'Innocenti + Via di Castello, 46, + 50141 Firenze + http://git-trame.fefonlus.it/sparql/ + + + PE17 + 5 + DYAS Organizations and Collections Registries + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + Analogue and Digital Collections Registry + Humanities Organisations Registry + DARIAH-GR Consortium + DCU + 2014/ until 2020 (?) + 2017 + Thu Dec 31 2015 17:00:00 GMT-0500 (EST) + Yes + Free/ CC + http://registries.dyas-net.gr/en/developer + full access to metadata/ possible restriction for data of the analogue collections + Eleni Vernardaki + Anastasia Falierou + Academy of Athens (DYAS Team) Anagnostopoulou 14, 10673 Athens + evernardaki@academyofathens.gr + http://registries.dyas-net.gr/en + OAI-PMH + DCAP + + + PE15 + 6 + LRE Map + The LRE Map (Language Resources and Evaluation) is a large database of language resources dedicated to Natural language processing (NLP). Information is collected during the submission phase of conferences in the sector of NLP; those making submissions are asked to provide metadata describing the resources they have used. + NLP + Computational Linguistics + Language Resources + ILC-CNR + ILC-ELRA + 2010 + Monica Monachini + Via Moruzzi 1, Pisa 56124 + monica.monachini@ilc.cnr.it + http://www.resourcebook.eu/lremap/owl/instances/ + + + PE15 + 7 + Metashare + META-SHARE is an open and secure network + of repositories for sharing and exchanging + language data, tools and related web services. + Machine Translation + Computational Linguistics + NLP + ILC-CNR + IIT-CNR + 2010 + Monica Monachini + Via Moruzzi 1, Pisa 56124 + monica.monachini@ilc.cnr.it + http://www.meta-share.org/ + + + PE17 + 8 + Isidore + ISIDORE is an aggregator that harvests more than 5 thousand sources from Humanities and Social Sciences and provides access to more than 5 million data. + Technically, ISIDORE uses OAI-PMH repositories to retrieve metadata and thereafter apply a full chain of processes (classification, enrichment, link resources with Semantic Web technologies etc.) + ISIDORE takes data in French, Spanish and English, enriches them in those three languages and provides also a multilingual web interface. + Humanities + Social Sciences + Cultural Heritage + Huma-num Consortium + full access to metadata / possible restriction for data + Hélène Gautier + Nicolas Larrousse + TGIR HUMA-NUM -UMS 3598 + 54 boulevard Raspail + 75006 Paris + https://www.rechercheisidore.fr/api + Restful API + + + PE17 + 9 + Nakala + Considering the fact that many scientific data producers do not have the digital infrastructure to provide a persistent and interoperable access to their data, Huma-Num has implemented a new tool called “Nakala” to expose research data in order to facilitate their reuse. + Nakala provides mainly three types of services: a permanent identifier to the resource, a permanent access to the data and associated metadata and an exposition of metadata based on semantic web technologies and OAI-PMH server. + Humanities + Social Sciences + Cultural Heritage + Huma-num Consortium + full access to metadata / possible restriction for data + Hélène Gautier + Nicolas Larrousse + TGIR HUMA-NUM -UMS 3598 + 54 boulevard Raspail + 75006 Paris + www.nakala.fr + OAI-PMH + Sparql Endpoint + + + PE17 + 10 + CoCoon + CoCoON is a repository dedicated to oral resources, described in OLAC format (a specific extension of DC for oral resources) and frequently associated with transcriptions. + The CoCoON platform provides an OAI-PMH access to metadata as well as an access via a Triple Store using EDM (Europeana Data Model). + CoCoON provides also a long term preservation service for data based on Huma-Num’s service. The author and institution remains responsible for the submitted documents and can have restricted and secure access to their data for a defined period if the content of the information is considered sensitive. + Oral Corpora + Cultural Heritage + Huma-num Consortium + LACITO + LLL + full access to metadata / possible restriction for data + Hélène Gautier + Nicolas Larrousse + TGIR HUMA-NUM -UMS 3598 + 54 boulevard Raspail + 75006 Paris + http://cocoon.huma-num.fr + OAI-PMH + + + PE17 + 11 + EHRI Portal + The EHRI portal offers access to information on Holocaust-related archival material held in institutions across Europe and beyond. + Holocaust Related Archive Material + EHRI Consortium + 2015 + https://portal.ehri-project.eu/terms + Charles Riondet + https://portal.ehri-project.eu/ + Restful API + + + PE17 + 12 + TRAME + TRAME is a metasearch tool for medieval manuscripts, hosted by the Fondazione Ezio Franceschini and SISMEL. It aims to assist users in finding primary sources for the study of medieval culture. Originally developed in 2011 to allow a combined search on a group of different Italian repositories and databases, it has increasingly widened its scope to become a global research infrastructure for all scholars of the Middle Ages. Its main aim is to build a research infrastructure that focuses on promoting interoperability and fostering discoverability among the different digital resources available in the medieval digital ecosystem. + SISMEL + Emiliano Degl'Innocenti + Maurizio Sanesi + http://git-trame.fefonlus.it/ + Restful API + + + PE17 + DYAS Software Registry + This tool was developed within the project DARIAH-GR Developing a Greek Research Infrastructure for the Humanities DYAS. The user, an arts and humanities researcher or scholar can use the registries to access information on Greek institutions or individuals, and the collections, both analogue and digital, they own or manage. The tool takes advantage of the expertise and the available digital resources to improve the quality of users’ research or for educational purposes. Cultural heritage managers (archivists, librarians, museum curators) leverage the collective expertise to maximize the social use of digital resources in the humanities and cultural heritage. The content of the digital tool is being continuously enriched and updated with the aim to enhance the visibility of Greek analogue and digital content and to provide increased access to scholarly content. Therefore the contribution of users is essential. The result was made possible thanks to the invaluable assistance of all the contributors of the institutions who responded to DYAS’ invitation. We are most grateful for the time they took to help with the project. + Registry Software + Metadata Aggregator + DCU + 2014 + 2015 + Thu Dec 31 2015 17:00:00 GMT-0500 (EST) + Yes + CC + http://registries.dyas-net.gr/en/developer + After contact with the DCU team (http://www.dcu.gr/) + Dimitris Gavrilis + Stavros Aggelis + DIGITAL CURATION UNIT (Institute for the Management of Information Systems, Athena Research Centre) Aigialeias 48 & Epidavrou, 151 25 Maroussi, Greece + contact@dcu.gr + http://registries.dyas-net.gr/en + OAI-PMH + DCAP + + + PE17 + CENDARI Archival Directory + The Archival Directory is a large database of archival descriptions and collections and is part of the CENDARI Virtual Research Environment. + It has a strong transnational focus and one of its aims is to include many archives and institutions which are little known or rarely used by researchers. The Archival Directory allows historians to view sources in a rarely seen transnational and comparative view. It is focused on archives and libraries containing resources on the Medieval era and World War One. + Medieval Archival Material + World War One Archival Material + CENDARI Consortium + Emiliano Degl'Innocenti + Maurizio Sanesi + https://archives.cendari.dariah.eu/ + + + PE17 + CLARIN Centres Registry + CLARIN Centres Registry is the primary starting/entry point into the CLARIN universe. It is the authoritative source of approved CLARIN Centres including information about the contact and the different available endpoints. Other parts of the infrastructure (especially the harvester) consult this registry to find out about (discover) existing centres and the endpoints they feature. + CLARIN-EU + http://clarin.eu/clarin-eric-datatables/centres + + + PE17 + Component Registry + The CLARIN Component Metadata Infrastructure (CMDI) provides a framework to create and use self-defined metadata formats. It relies on a modular model of so-called metadata components, which can be assembled together, to improve reuse, interoperability and cooperation among metadata modelers. The CMDI Component Registry was created to promote the re-use and sharing of metadata components and profiles. The registry contains all CLARIN metadata components and metadata profiles used to describe all metadata. It is expected to contain around 1.000 components and around 200 profiles. Reuse of components and profiles is stimulated as much as possible. Components and profiles are linked to the concepts from CCR for interoperability reason. The component Registry has the following features: Register and store CMDI components/profile Enable a user to edit and create Components/Profile Enable a user to browse and registered Components/Profile + CLARIN-EU + cmdi@clarin.eu + https://www.clarin.eu/componentregistry + + + PE17 + CLARIN Concept Registry + The CLARIN Concept Registry (CCR) is an OpenSKOS instance, which implements the W3C SKOS recommendation and data model. The CLARIN Concept Registry (CCR) forms the basis of the semantic interoperability layer of CLARIN, especially in the context of metadata, i.e., the Component MetaData Infrastructure (CMDI ). It does so by offering a collection of concepts, identifiable by their persistent identifiers, relevant for the domain of language resources. This registry contains the relevant concepts (based on the corresponding ISOcat data categories), such as those used by CMDI. The Concept Registry can be accessed by anyone using a read only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators, whose mission is to improve the quality of the concepts used within CLARIN. + CLARIN-EU + The Concept Registry can be accessed by anyone using a read-only facetted browser or via the search facilities of the CMDI Component Registry. Adding new concepts or changing existing ones can only be done by the national CCR coordinators. If you have such a request you should contact your national coordinator or, in case your country has not assigned one yet, send your request to ccr@clarin.eu. The coordinators will then discuss the request and get in touch with you about the handling of it. + ccr@clarin.eu + https://www.clarin.eu/conceptregistry/ + + + PE17 + Virtual Language Observatory + The Virtual Language Observatory (VLO) faceted browser was developed within CLARIN as a means to explore linguistic resources, services and tools available within CLARIN and related communities. All information in the VLO faceted browser is based on the metadata descriptions of resources as provided by the parties (CLARIN centers ) that host the original data. It gets refreshed regularly but may not be completely up-to-date with the current state of the original data and metadata depending on the date, time and state of the metadata providing/retrieval process (OAI-PMH is employed). + The VLO wants to help researchers to easily find suitable language resources and tools to carry out their research work. They can do this by searching, browsing and navigating geographically. Once they have found a useful resource they can then easily find tools, which may work on it. The purpose is that users may directly access the resources or services they have found, given they have the necessary permissions. + CLARIN-EU + vlo@clarin.eu + https://vlo.clarin.eu/ + + + PE17 + CulturaItalia Portal + CulturaItalia is an ever-growing collaborative network of public and private institutions. The participant-driven project is intended to bring together various players in the fields of Italian cultural production and access, partners who will be able to contribute to the development of the portal and thus to improve the visibility of their contents and initiatives on a national and international level. Museums, archives, libraries and other cultural entities both public and private can participate by making contents organised into databases available, or by sending news regarding initiatives, organisations and activities. CulturaItalia manages a catalog – Index – which gathers and indexes the information provided by the partners, by means of metadata. The original data will remain on the website of the provider, to which the user is guided, via link, for a complete consultation. For example, in the case of a photograph in the Index, the preview image (thumbnail) is visible along with identifying data and a link to the providers website, where the user can visualise the photograph in its original format, accompanied by all the information and the services in order to get the full benefit of the item. In CulturaItalia there is a section devoted to open data (http://dati.culturaitalia.it), where the data are available in Dublin Core, PICO (CulturaItalia Application Profile) and CIDOC-CRM format. It’s also possible to search via SPARQL END POINT a datasets selection available in Linked Open Data format. + Cultural Heritage Dataset + Ministry for Cultural Heritage and Activities (MiBAC) + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + 2008 + 2016 + Creative Commons CC0 1.0 Universal Public Domain Dedication + Sara Di Giorgio + c/o Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + http://www.culturaitalia.it/oaiProviderCI/OAIHandler + OAI-PMH + + + PE17 + PICO application profile + In the CulturaItalia Portal, importing metadata from external data sources occurs with mapping in one schema. This schema is expressed according to the Qualified Dublin Core standard, which has been further extended to define the PICO Application Profile (designed for the Portal) that includes a set of basic elements that can be used to describe any type of resource: Title, Creator, Subject, Description, Publisher, Contributor, Date, Type, Format, Identifier, Source, Language, Relation, Coverage, Rights, to which 3 additional elements have been added: Audience, Provenance, and RightsHolder. To these are added 18 additional elements, 33 element-refinement and a set of encodingschems (controlled ontologies or vocabularies). + Cultural Heritage Dataset + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + 2008 + 2016 + Sara Di Giorgio + c/o Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/documenti/picoap/picoap1.0.xml + + + PE17 + Thesaurus PICO + The resources of the Index of CulturaItalia Portal are classified on the basis of a Thesaurus, a specialised dictionary, designed to manage and arrange diverse elements of information as well as information coming from different cataloguing systems. + Cultural Heritage Dataset + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + 2011 + Sara Di Giorgio + c/o Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + http://www.culturaitalia.it/opencms/export/sites/culturaitalia/attachments/thesaurus/4.3/thesaurus_4.3.0.skos.xml + + + PE17 + MuseiD-Italia + The Digital Library MuseiD-Italy is integrated in CulturaItalia, it contains the digital collections of Italian museums; MuseiD-Italia contains about 70,000 items included in 685 collections and 6380 museums. + Cultural Heritage Dataset + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + 2012 + Sara Di Giorgio + c/o Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + http://www.culturaitalia.it/opencms/museid/index_museid.jsp?language=it&tematica=header&selected=0 + OAI-PMH + + + PE17 + ARIADNEPLUS Policy Wizard + Policy + ARIADNEPLUS Project Consortium + 2018 + Hella Hollander + + + PE17 + Standardization Survival Kit + The SSK is designed as a comprehensive interface for guiding Arts and Humanities scholars through all available resources (collected within a dedicated Zotero library), on the basis of reference scenarios. The interface provides a single entry point for both novice and advanced scholars in the domain of digital methods, so that they can have quick access to the information needed for managing digital content, or applying the appropriate method in a scholarly context. Users will be able to explore the platform according to their needs, thanks to precise research criteria: disciplines, standards, research activities and research objects. + Guidance + Arts and Humanities + Research process + ARIADNEPLUS Project Consortium + 2018 + CC-by + Laurent Romary + temporary: http://ssk-application.ariadneplus.d4science.org/ssk/ + Restful API + + + PE12 + Foresight studies + Task 3.4 (Foresight study and interdisciplinary research agenda) concerns the evolution of the sector in a medium term perspective (5-10 years), preparing an agenda to achieve the desired service and knowledge integration. It surveys indications of trends within the partecipating research communities and analyses literature on the relevant topics. It also organizes expert seminars and focus groups to fine-tune the description of the research trends and the corresponding sector evolution, outlining appropriate strategies and interventions by academic and serearch institutions, funding agencies and research teams. All these collected information will be mapped in CIDOC-CRM according to the project guidelines. + Humanities + Foresight studies + ARIADNEPLUS Project Consortium + Mark Hedges + Maurizio Sanesi + + + PE12 + DARIAH-IT Registry + With this tool provided by DARIAH-IT an user can perform an advanced search of partners, in-kind contributions, funding opportunities and projects. + + Compared to the site of the funding opportunities HUB, here DARIAH-IT provides a wider information database, where there are numerous institutions and private companies that have been in contact with DARIAH, on the occasion of research projects or professional collaborations. + + With the ability to refine the search, the user will get only information which meet the interest expressed. + Digital Humanities + Research process + Guidance + DARIAH-IT + Emiliano Degl'Innocenti + Lino Leonardi + emiliano.deglinnocenti@cnr.it + http://it.dariah.eu/registro/it/ + + + PE12 + RUBRICA + RUBRICA (Reference Resources Integration plAtform) aims to foster the interoperability and integration of various reference resources used in different disciplines. Starting from trusted knowledge bases (i.e.: databases, thesauri, authority lists etc.) researchers could create, merge, edit and reuse specialized reference resources, developed according to specific research purposes, without performing repetitive tasks on each resource. RUBRICA also allows to share this knowledge base with other users thanks to the IT structure on which ARIADNEPLUS is based. RUBRICA , is being developed Within and for the ARIADNEPLUS project. + Reference resources + Research process + Humanities + SISMEL + Maurizio Sanesi + maurizio.sanesi@virgilio.it + https://services.d4science.org/group/rubrica + + + P17 + ARIADNEPLUS International Liaisons + Collection of organisations related to Humanities disciplines and/or areas of interest (such as standards and training) with whom the ARIADNEPLUS network has established relations. New collaborations are actively welcomed via Cooperation Agreements and by adding their details to the existing set of contacts (via a Google form which can then be added to the Registry). + ARIADNEPLUS Project Consortium + Fri Apr 13 2018 17:00:00 GMT-0400 (EDT) + Public + CC0 + Bente Maegaard + Sheena Bassett + bmaegaard@hum.ku.dk + + + PE17 + AriadnePlus Reference Resources Management + Activity of WP5 to gather and make available reference resources datasets of use to the RI information maangement community. + Reference resources + ARIADNEPLUS Project Consortium + Public + CC0 + George Bruseker + bruseker@ics.forth.gr + https://docs.google.com/spreadsheets/d/1dltpwfD2OpcWFs2ZwaLE6ArKHY8tt7CGCAW0U7iOuqc/edit?usp=sharing + + + + + If you are referencing the software as such, use volatile. If you are referencing a versio, use persistent. + An Identifier for the software + A name for the software + A free text description of the software + Indicate version number if applicable. + If the software belongs to a larger software package, identify it here. + If the software is available through an online hosting service, name this service here and fill in a service record on servicee apge. + If the software is curated (ie it is being developed), create a record for a curation service on the services tab. + If you can download the software from a service, indicate the name of this service here and fill out a relevant record for this service on the service page. + If you can run the software from a service, indicate the name of this service here and fill out a relevant record for this service on the service page. + The link at which the software resource can be run. + Indicate the programming languages which were used in the development of this software. + Indicate the type of action this software is intended to carry out. e.g. lemmatizer + Indicate the person or team that created the software via their name (and ideally create an actor record in the actors page. + + + + + PE25 RI Consortium + 1 + DARIAH-GR Consortium + The National Infrastructure for Digital Research in the Humanities is implemented by a network of academic institutions, universities and research centers, which is established in order to contribute to the development of research in the Humanities using information technologies. The introduction of information management and digital research methods in the Humanities necessitated this initiative which will facilitate the use of methodological and technological standards, best practices, as well as the exchange of expertise and access to cognitive resources. + DARIAH-GR/ΔΥΑΣ + Academy of Athens + Anagnostopoulou 14 + 10673 Athens + Greece + DARIAH-GR/ΔΥΑΣ + Academy of Athens + Anagnostopoulou 14 + 10673 Athens + Greece + +302103664603 + dyas@academyofathens.gr + http://www.dyas-net.gr/?lang=en + + + PE25 RI Consortium + 2 + CLARIN-EU + CLARIN ERIC is the governing and coordinating body of CLARIN (Common Languages Resources and Technology Infrastructure). It is a consortium of ca. 20 countries and intergovernmental organisations (and counting), represented by their ministries + CLARIN ERIC + c/o Utrecht University + Drift 10 + 3512 BS Utrecht + The Netherlands + contact-ariadneplus@clarin.eu + https://www.clarin.eu/ + + + PE25 RI Consortium + 3 + DARIAH EU + DARIAH is a pan-european infrastructure for arts and humanities scholars working with ICT-enabled methods. It supports digital research as well as the teaching of digital research methods. + DARIAH-EU + c/o TGIR Huma-Num + + CNRS UMS 3598 + 54 boulevard Raspail + 75006 Paris + France + DARIAH-EU Coordination Office + Centre Marc Bloch + Friedrichstraße 191 + D-10117 Berlin + Germany + jakob.epler@dariah.eu + http://www.dariah.eu/ + + + PE25 RI Consortium + 4 + EHRI Consortium + The mission of the European Holocaust Research Infrastructure (EHRI) is to support the Holocaust research community by building a digital infrastructure and facilitating human networks. EHRI provides online access to information about dispersed sources relating to the Holocaust through its Online Portal, and tools and methods that enable researchers and archivists to collaboratively work with such sources. + NIOD Institute for War, Holocaust and Genocide Studies (coordinator EHRI) + Herengracht 380 + 1016 CJ Amsterdam + The Netherlands + info@ehri-project.eu + https://www.ehri-project.eu/ + + + PE25 RI Consortium + 5 + ARIADNE Consortium + ARIADNE brings together and integrates existing archaeological research data infrastructures so that researchers can use the various distributed datasets and new and powerful technologies as an integral component of the archaeological research methodology. There is now a large availability of archaeological digital datasets that, together, span different periods, domains and regions; more are continuously created as a result of the increasing use of IT. These are the accumulated outcome of the research of individuals, teams and institutions, but form a vast and fragmented corpus and their potential has been constrained by difficult access and non-homogenous perspectives. + PIN, Servizi Didattici e scientifici per l'Università di Firenze Piazza G. Ciardi, 25, 59100 Prato (PO), Italy + PIN, Servizi Didattici e scientifici per l'Università di Firenze Piazza G. Ciardi, 25, 59100 Prato (PO), Italy + 00 39 0574 602578 + info@ariadne-infrastructure.eu + http://www.ariadne-infrastructure.eu/ + + + E40 Legal Body + 6 + SISMEL + S.I.S.M.E.L. is a leader in national and international research projects in the field of medieval culture and one of the most advanced research centers in Italy for the creation of innovative applications in digital humanities, including: bibliographic and onomastic databases, catalogues of authors, texts and manuscripts, tools for research data discoverability, interoperability and semantic integration and enrichment. + S.I.S.M.E.L., via Montebello 7, 50123 Firenze + S.I.S.M.E.L., via Montebello 7, 50123 Firenze + 055 204 8501 + maurizio.sanesi@virgilio.it + http://www.sismelfirenze.it/index.php?lang=en + + + E40 Legal Body + 9 + ICCU + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + 06-49210425 + culturaitalia.info@beniculturali.it + http://www.culturaitalia.it/ + + + PE25 RI Consortium + 11 + Huma-num Consortium + Huma-Num is a Very Large Facility which aims to facilitate the digital turn in humanities and social sciences. + + To perform this mission, Huma-Num is built on an original organisation. It organises a collective dialogue with communities via consortia accredited by Huma-Num and provides a technological infrastructure on a national and European scale based on a vast network of partners and operators. + + Through consortia of actors in scientific communities, Huma-Num favors the coordination of the collective production of corpora of sources (scientific recommendations, technological best practices). It also provides research teams in the Human and Social sciences with a range of utilities to facilitate the processing, access, storage and interoperability of various types of digital data. This set of shared services comprises the provision of a Grid of services, a platform for the unified access to data (ISIDORE) and long-term archival facilities. + TGIR HUMA-NUM - UMS 3598 + + 54 boulevard Raspail + 75006 Paris + TGIR HUMA-NUM + CNRS UMS 3598 + + 54 boulevard Raspail + + F-75006 Paris + 01 40 48 64 49 + ariadneplus-suivi@listes.huma-num.fr + http://www.huma-num.fr/ + + + PE25 RI Consortium + 12 + CENDARI Consortium + Medieval Culture & WWI: Throughout the project, the CENDARI project team has worked on the establishment of an Archival Directory through the identification, description and cataloguing of archival holdings and other collections of value for research within the two project pilot areas – World War I and Medieval European Culture. A total of 168 Cultural Heritage Institutions were involved and the final + CENDARI Archive Directory contained approximately 830,000 datasets available for users. + By the end of the project, the number of archival descriptions established manually by the team was 3,107 (2,320 for the modern period and 787 for the medieval period) and the number of cultural heritage institutions described in the Archival Directory was 1,251. An overview of the approximately 830,000 datasets harvested by CENDARI. + Trinity College Dublin, the University of Dublin + (CENDARI coordinator) + College Green + Dublin 2 + Ireland + info@cendari.eu + emiliano.degli.innocenti@gmail.com + uhttp://www.cendari.e + + + E40 Legal Body + 13 + CNR-OVI + The Italian Dictionary (OVI-Opera del Vocabolario Italiano) is an Institute of the CNR with the institutional task of compiling an historical dictionary of the Italian language. At present the researchers of the OVI are working on the first section of this dictionary, called Tesoro della Lingua Italiana delle Origini (TLIO), i.e. “Thesaurus of the oldest Italian language”. + The present-day activity of the OVI is the continuation of a project started by the Accademia della Crusca in 1965 with funding from the CNR. This project, a new historical dictionary of Italian, was to be the heir of the glorious Vocabolario degli Accademici, but with the difference that it would not be prescriptive (i.e. proposing a model for how language should be used), but historically descriptive (i.e. offering documentation of the vocabulary of Italian in the course of its history). From the beginning, the Accademia della Crusca decided to make use of computers to manage the documentation, a method then to a large extent unknown in the lexicographical tradition. + The principal activities are: + • the compilation of the Tesoro della Lingua Italiana delle Origini (TLIO) + • the development, necessary for the dictionary work, of the database of Old Italian texts + • the development of software for lexicographical and linguistic purposes + CNR-OVI + Via di Castello, 46 + 50141 Firenze + 0039 055 452849 + emiliano.deglinnocenti@cnr.it + http://www.ovi.cnr.it + + + PE25 RI Consortium + META-NET Network of Excellence + META-NET, a Network of Excellence consisting of 60 research centres from 34 countries, + is dedicated to building the technological foundations of a multilingual European information society. + META-NET is forging META, the Multilingual Europe Technology Alliance. + monica.monachini@ilc.cnr.it + http://www.meta-share.org + + + PE25 RI Consortium + 22 + Central Institute for the Union Catalogue of Italian Libraries and Bibliographic Information (ICCU) + ICCU - the Central Institute for the Union Catalogue of Italian Libraries (ICCU) of the Italian Ministry of cultural heritage, activities and tourism (MiBACT), manages CulturaItalia Portal the national aggregator, in which are involved cultural institutions from all sectors and levels (national, regional and local). As national aggregator it plays an important role for the development of European initiative for accessing and sharing digital cultural heritage, like Europeana. + Istituto Centrale per il Catalogo Unico, viale Castro Pretorio 105 - + 00185 Roma + Istituto Centrale per il Catalogo Unico viale Castro Pretorio, 105 + 00185 Roma + 00 39 06 49210425 + culturaitalia.info@beniculturali.it + http://www.culturaitalia.it/ + + + E40 Legal Body + General Directorate for Archives (DGA) + The General Directorate for Archives, in accordance with the Code of Cultural Heritage and Landscape and within the guidelines specified by the Ministry, promotes and coordinates activities related to the conservation, protection and enhancement of national archival heritage. + Direzione Generale Archivi, Via di San Michele 22 - 00153 Roma + Via di San Michele 22, 00153 Roma + 0039 06 672361 + dg-a@beniculturali.it + dg-a@beniculturali.it + + + E40 Legal Body + Ministry for Cultural Heritage and Activities (MiBAC) + The Ministry of Cultural Heritage, and Activities (MiBAC), is responsible for the valorisation of culture, and the preservation of artistic and cultural heritage + Ministero dei beni e delle attività culturali e del turismo, Via del Collegio Romano 27 - 00186 Roma + Via del Collegio Romano, 27 00186 Roma + 0039 06 6723.2980 + http://www.beniculturali.it + + + E40 Legal Body + La Biennale di Venezia + La Biennale di Venezia was founded in 1895 and it is now one of the most famous and prestigious cultural organizations in the world. La Biennale, who stands at the forefront of research and promotion of new contemporary art trends, organizes exhibitions and research in all its specific sectors: Arts (1895), Architecture (1980), Cinema (1932), Dance (1999), Music (1930), and Theatre (1934). Its history is documented at the Historical Archives of Contemporary Arts (Asac) that recently has been completely renovated. + La Biennale - Ca’ Giustinian, San Marco 1364/A - 30124 Venezia + Ca’ Giustinian, San Marco 1364/A - 30124 Venezia + 0039 041 5218711 + info@labiennale.org + http://www.labiennale.org + + + E40 Legal Body + Marche Culture Foundation + The Foundation manages the Marche Cultural Heritage system on behalf of the Marche Region. Visual works and objects of memory, audiovisual documents and oral tradition, architectural monuments. + Fondazione Marche Cultura, Via Gentile da Fabriano 9 - + 60125 Ancona (AN) + Piazza Cavour 23 - 60121 Ancona (AN) + 0039 071 9951 62 + info@fondazionemcm.it info@pec.fondazionemcm.it + http://fondazionemcm.it/ + + + E40 Legal Body + Marche Region + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + Regione Marche, via Gentile da Fabriano, 9 - 60125 Ancona + Regione Marche, via Gentile da Fabriano, 9 - 60125 Ancona + 0039 071.8061 + regione.marche.protocollogiunta@emarche.it + http://www.regione.marche.it + + + E40 Legal Body + Senate of the Republic - Library + The library's holdings amount to some 700,000 mondern and contemporary books, pamphlets and other printed documents, 80 incunabula, 2,000 editions from the 16th century, 8,000 maps, 850 manuscripts, and 2,000 autograph items. The 3,500 periodical titles (Italian and foreign, current and discontinued) and 400 newspapers (Italian and foreign, of which 90 are currently received) constitute one of the most important such collections to be found in Italy, those dating to the 19th century being especially noteworthy. + The core holdings are Parliamentary papers (from Italy and elsewhere) and scholarly publications relating to Law, Political Sciences, History of Political Thought, and History of Journalism. They are complemented by numerous special collections, each of which boasts items of historical interest or bibliographical rarity. Of these, the most remarkable are: holdings of the Statutes of Italian Comuni and other bodies, from the late Middle Ages until modern times; complete sets of legislation passed by the independent states that made up pre-unity Italy; publications relating to local and regional Italian history; and a significant body of early texts on civil and canon law. + La Biblioteca del Senato della Repubblica Giovanni Spadolini, Piazza della Minerva, 38 - 00186 Roma + La Biblioteca del Senato della Repubblica Giovanni Spadolini, Piazza della Minerva, 38 - 00186 Roma + 0039 06.6706.3717 + BibliotecaMinerva@senato.it + http://www.senato.it + + + E40 Legal Body + Piemonte Region + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + Direzione Regionale Cultura Turismo e Sport della Regione Piemonte, Via Bertola, 34 - Torino + Direzione Regionale Cultura Turismo e Sport della Regione Piemonte, Via Bertola, 34 - Torino + 0039 011.4321564 | + culturaturismosport@regione.piemonte.it culturaturismosport@cert.regione.piemonte.it + http://www.regione.piemonte.it + + + E40 Legal Body + Institute for the History of the Italian Risorgimento + The Institute for the History of the Italian Risorgimento has the task of promoting and facilitating the studies of the Italian history from the period of Unity and Independence of Italy until the end of the First World + War. The Institute aims at gathering documents, publications and memorabilia, editing sources and memoirs, also by organizing scientific congresses. + Istituto per la Storia del Risorgimento italiano + Complesso del Vittoriano - p.zza Venezia, 00186 Roma + Istituto per la Storia del Risorgimento italiano + Complesso del Vittoriano - p.zza Venezia, 00186 Roma + 0039 06 6793598 + istituto@risorgimento.it + http://www.risorgimento.it + + + E40 Legal Body + Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) + The Institute for Cultural and Natural Art of the Emilia-Romagna Region (IBC) was born in 1974 as an instrument for regional planning and local council consultancy in the field of cultural heritage. The Institute promotes the valorisation and restoration of the historical and artistic heritage, the protection, valorisation and preservation of historical centers, by providing its advice to the Region and local authorities. + Istituto per i beni artistici culturali e naturali della Regione Emilia-Romagna , Via Galliera 21 - 40121 Bologna + Istituto per i beni artistici culturali e naturali della Regione Emilia-Romagna , Via Galliera 21 - 40121 Bologna + 0039 051 5276600 + direzioneibc@postacert.regione.emilia-romagna.it + http://ibc.regione.emilia-romagna.it/ + + + E40 Legal Body + Lombardia Region + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + Regione Lombardia, Piazza Città di Lombardia 1 - 20124 Milano + Regione Lombardia, Piazza Città di Lombardia 1 - 20124 Milano + 0039 02 3232 3325 + http://www.regione.lombardia.it + + + E40 Legal Body + National Institute for Graphics (ING) + The Central Institute for Graphics was born from the union of "Calcografia Nazionale" of Pontifical Heritage and of the National Printing Council. Since its foundation, the Institute has been gathering an ever-increasing number of matrices, xylograph, photographs and artist videos. It also preserves prints, drawings and engravings from the library of Prince Corsini. + Istituto Centrale per la Grafica, + via della Stamperia 6 - 00187 Roma + Istituto Centrale per la Grafica, + via della Stamperia 6 - 00187 Roma + 0039 06 699801 + in-g.calcografica@beniculturali.it + http://www.grafica.beniculturali.it + + + E40 Legal Body + Italian Geographic Society Onlus + The Italian Geographic Society is a moral entity whose object is to promote the advancement of geographic knowledge, scientific research and to develop its dissemination through the organization of conferences and study trips. It was founded on May 12, 1867 in Florence as a free association and in 1869 it was recognized as a moral entity. + Società Geografica Italiana Onlus - Palazzetto Mattei in Villa Celimontana, Via della Navicella 12 - 00184 Roma + Società Geografica Italiana Onlus - Palazzetto Mattei in Villa Celimontana, Via della Navicella 12 - 00184 Roma + 0039 06 7008279 + archiviofotografico@societageografica.it + http://www.archiviofotografico.societageografica.it + + + E40 Legal Body + Uffizi Galleries + One of the most famous museums in the world, the Uffizi Gallery boasts exceptional collections of paintings and ancient sculptures. The invaluable collection of statues and busts adorning the corridors was gathered by the Medici family and is made up of Roman copies after lost Greek originals. Originally built to host the administrative offices of the Medici's government, today the Gallery is located on the last floor of the imposing building constructed between 1560 and 1580 after a design by Giorgio Vasari. In the Uffizi Galleries manages also the Department of Prints and Drawings; Uffizi Library and Digital Archives. + Gallerie degli Uffizi, Piazzale degli Uffizi 6, Firenze + 0039 055 23885 + ga-uff@beniculturali.it; + mbac-ga-uff@mailcert.beniculturali.it + http://www.uffizi.it + + + E40 Legal Body + Umbria Region + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + Regione Umbria, Corso Vannucci, 96 - 06121 Perugia + Regione Umbria, Corso Vannucci, 96 - 06121 Perugia + 0039 075 5043424 + urp@regione.umbria.it + http://www.regione.umbria.it + + + E40 Legal Body + Calabria Region + Regions and local authorities promote the valorization of cultural heritage and the development of cultural activities in their own territory as a factor for civil, social and economic growth of the community. + Segretariato Regionale del MiBACT Calabria, Via Skylletion, 1 - + 88021 Roccelletta di Borgia (CZ) + + Tel. + 0039 0961 391048 + 0039 0961 391079 + 0039 0961 391087 + sr-cal@beniculturali.it + http://www.beniculturalicalabria.it + + + PE25 RI Consortium + FLaReNet + The Network is organised according to two main dimensions: + + in concentric circles, corresponding to the degree of involvement in the Network activities: + the core circle, composed by the Coordinator and the Work Packages Leaders, who form the Steering Committee; + the second circle, composed by the Network Partners appearing in the project proposal; + the third circle, composed by the Network Institutional Members, namely other organizations that may be useful to add during the life of the Network, which should be involved on a regular basis in activities, meetings and interactions (the flexibility of the Network composition is very important to cope with issues or requirements arising during the project; some companies and institutions have already expressed their interest to be part of the Network); + the fourth circle, composed by the Network Individual Subscribers; + in the Working Groups corresponding to the topical Work Packages described in the Work Plan; here the relevant dimension is the topic, which is the focus of each activity. + During the life of the Network, the Network Support Group appearing in the project proposal will be contacted for specific meetings, workshops and activities and will be able to provide feedback and advice. + paola.baroni@ilc.cnr.it + http://www.flarenet.eu/ + + + E40 Legal Body + Instituto di Linguistica Computazionale «A. Zampolli» + The Institute for Computational Linguistics “A. Zampolli” (ILC) is a centre of reference in the field of Computational Linguistics at both national and international levels. The Institute is part of the Department of Social Science and Humanities, Cultural Heritage (DSU) (link is external) of the Italian National Research Council (CNR) (link is external) and carries out research activities in strategic scientific areas of the discipline, as well as publishing activities, training and education activities and technology transfer. + http://www.ilc.cnr.it + + + PE25 RI Consortium + ARIADNEPLUS Project Consortium + The ARIADNEPLUS Project Consortium is a pan-European collective of research partners with Research Infrastructures from across the domains of archaeology, humanities, cultural heritage and linguistics inter alia, forming its core membership. The purpose of the consortium is to research, implement and disseminate common solutions to RI problems and cross-disciplinary access to resources. + PIN, Servizi Didattici e scientifici per l'Università di Firenze Piazza G. Ciardi, 25, 59100 Prato (PO), Italy + PIN, Servizi Didattici e scientifici per l'Università di Firenze Piazza G. Ciardi, 25, 59100 Prato (PO), Italy + 00 39 0574 602578 + http://www.ariadneplus-project.eu/ + + + PE25 RI Consortium + DARIAH-IT + DARIAH - IT is the Italian node of DARIAH - UE, with which it shares the main mission. DARIAH provides advanced services based on the use of ICT for researchers in the field of arts and humanities, combining technological development with education and training, promoting collaboration and joint research, communication and dissemination, sharing of experiences and tools in the field of Digital Humanities for the transmission and use of digital cultural heritage. + + DARIAH - IT also aims to reuse the wealth of available scientific material and develop tools for connection, while ensuring interoperability, data retention and security, in different academic settings and communities. The digital revolution has demonstrated the enormous potential of technology in transforming arts and human research sciences. + + DARIAH - IT provides state-of-the-art digital research tools and promotes their use by a large, multidisciplinary research community. + emiliano.deglinnocenti@cnr.it + http://it.dariah.eu + + + + diff --git a/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/wp8.xml b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/wp8.xml new file mode 100644 index 0000000..3dc937d --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/eu/dnetlib/x3m/wp8.xml @@ -0,0 +1,61 @@ + + Alliance Permanent Access to the Records of Science in Europe Network + APARSEN + http://www.alliancepermanentaccess.org/ + KNAW-DANS, PIN + Projects + Europe + + + + + + + + + + + + + Yes + + + + + + + + + + + + + Yes + + + Yes + Yes + + + + + Yes + + + Yes + Yes + + Yes + + + KNAW-DANS, PIN + + director@alliancepermanentaccess.org + + + + Closed + Yes + + + \ No newline at end of file diff --git a/dnet-ariadneplus/src/test/resources/log4j.properties b/dnet-ariadneplus/src/test/resources/log4j.properties new file mode 100644 index 0000000..f25365f --- /dev/null +++ b/dnet-ariadneplus/src/test/resources/log4j.properties @@ -0,0 +1,19 @@ +org.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger +#log4j.rootLogger=WARN, DNET +# TO DISABLE WHEN BUILDING THE WAR +log4j.rootLogger=WARN, CONSOLE +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n +log4j.appender.DNET=org.apache.log4j.RollingFileAppender +log4j.appender.DNET.File=${catalina.base}/logs/dnet.log +log4j.appender.DNET.Append=true +log4j.appender.DNET.Encoding=UTF-8 +log4j.appender.DNET.Threshold=ALL +log4j.appender.DNET.MaxFileSize=100MB +log4j.appender.DNET.MaxBackupIndex=30 +log4j.appender.DNET.layout=org.apache.log4j.PatternLayout +log4j.appender.DNET.layout.ConversionPattern=%d [%t] %-5p %c- %m%n +log4j.logger.eu.dnetlib=INFO +log4j.logger.eu.dnetlib.x3m=DEBUG +log4j.logger.eu.dnetlib.ariadneplus.workflows.nodes=DEBUG \ No newline at end of file