From 3543d563113d1b8d7675f61a0f443cf6f72c8dcb Mon Sep 17 00:00:00 2001 From: codycooperross <50597551+codycooperross@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:03:24 -0400 Subject: [PATCH 1/3] Adds tests for Schema 4.5 and modifies existing tests as needed --- .../meta/kernel-4/example/all-fields-v4.4.xml | 197 ++++++++++++++++++ ...ple-Box_dateCollected_DataCollector-v4.xml | 47 +++++ .../datacite-example-GeoLocation-v4.xml | 54 +++++ .../datacite-example-HasMetadata-v4.xml | 61 ++++++ ...acite-example-ResearchGroup_Methods-v4.xml | 38 ++++ ...mple-ResourceTypeGeneral_Collection-v4.xml | 48 +++++ .../datacite-example-affiliation-v4.xml | 127 +++++++++++ .../datacite-example-ancientdates-v4.xml | 29 +++ .../datacite-example-complicated-v4.xml | 54 +++++ .../datacite-example-dissertation-v4.xml | 55 +++++ .../datacite-example-fundingReference-v4.xml | 56 +++++ ...e-example-relationTypeIsIdenticalTo-v4.xml | 75 +++++++ .../example/datacite-example-video-v4.xml | 28 +++ .../example/datacite-example-workflow-v4.xml | 45 ++++ spec/kernel-4.3/example_dataset_spec.rb | 2 +- spec/kernel-4.3/example_full_spec.rb | 6 +- spec/kernel-4.4/example_dataset_spec.rb | 2 +- spec/kernel-4.4/example_full_spec.rb | 2 +- spec/kernel-4.4/other_spec.rb | 2 +- spec/kernel-4.5/doi_spec.rb | 19 ++ spec/kernel-4.5/example-ancientdates_spec.rb | 39 ++++ spec/kernel-4.5/example_affiliation_spec.rb | 48 +++++ spec/kernel-4.5/example_all_fields_spec.rb | 11 + ..._box_date_collected_data_collector_spec.rb | 49 +++++ spec/kernel-4.5/example_complicated_spec.rb | 11 + spec/kernel-4.5/example_dataset_spec.rb | 17 ++ spec/kernel-4.5/example_dissertation_spec.rb | 17 ++ spec/kernel-4.5/example_documentation_spec.rb | 22 ++ spec/kernel-4.5/example_full_spec.rb | 36 ++++ .../example_funding_reference_spec.rb | 17 ++ spec/kernel-4.5/example_geolocation_spec.rb | 27 +++ spec/kernel-4.5/example_has_metadata_spec.rb | 22 ++ ...mple_relation_type_is_identical_to_spec.rb | 20 ++ .../example_research_group_methods_spec.rb | 28 +++ ...e_resource_type_general_collection_spec.rb | 17 ++ spec/kernel-4.5/example_video_spec.rb | 17 ++ spec/kernel-4.5/example_workflow_spec.rb | 17 ++ spec/kernel-4.5/funding_reference_spec.rb | 111 ++++++++++ spec/kernel-4.5/geolocation_spec.rb | 188 +++++++++++++++++ spec/kernel-4.5/other_spec.rb | 189 +++++++++++++++++ spec/kernel-4.5/pure_example_spec.rb | 40 ++++ spec/kernel-4.5/schema_spec.rb | 10 + spec/kernel-4.5/user_example_spec.rb | 11 + spec/kernel-4/example-ancientdates_spec.rb | 2 +- spec/kernel-4/example_dataset_spec.rb | 2 +- spec/kernel-4/example_full_spec.rb | 14 +- spec/kernel-4/geolocation_spec.rb | 2 +- spec/kernel-4/other_spec.rb | 37 +++- 48 files changed, 1949 insertions(+), 19 deletions(-) create mode 100644 source/meta/kernel-4/example/all-fields-v4.4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-Box_dateCollected_DataCollector-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-GeoLocation-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-HasMetadata-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-ResearchGroup_Methods-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-ResourceTypeGeneral_Collection-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-affiliation-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-ancientdates-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-complicated-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-dissertation-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-fundingReference-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-relationTypeIsIdenticalTo-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-video-v4.xml create mode 100644 source/meta/kernel-4/example/datacite-example-workflow-v4.xml create mode 100644 spec/kernel-4.5/doi_spec.rb create mode 100644 spec/kernel-4.5/example-ancientdates_spec.rb create mode 100644 spec/kernel-4.5/example_affiliation_spec.rb create mode 100644 spec/kernel-4.5/example_all_fields_spec.rb create mode 100644 spec/kernel-4.5/example_box_date_collected_data_collector_spec.rb create mode 100644 spec/kernel-4.5/example_complicated_spec.rb create mode 100644 spec/kernel-4.5/example_dataset_spec.rb create mode 100644 spec/kernel-4.5/example_dissertation_spec.rb create mode 100644 spec/kernel-4.5/example_documentation_spec.rb create mode 100644 spec/kernel-4.5/example_full_spec.rb create mode 100644 spec/kernel-4.5/example_funding_reference_spec.rb create mode 100644 spec/kernel-4.5/example_geolocation_spec.rb create mode 100644 spec/kernel-4.5/example_has_metadata_spec.rb create mode 100644 spec/kernel-4.5/example_relation_type_is_identical_to_spec.rb create mode 100644 spec/kernel-4.5/example_research_group_methods_spec.rb create mode 100644 spec/kernel-4.5/example_resource_type_general_collection_spec.rb create mode 100644 spec/kernel-4.5/example_video_spec.rb create mode 100644 spec/kernel-4.5/example_workflow_spec.rb create mode 100644 spec/kernel-4.5/funding_reference_spec.rb create mode 100644 spec/kernel-4.5/geolocation_spec.rb create mode 100644 spec/kernel-4.5/other_spec.rb create mode 100644 spec/kernel-4.5/pure_example_spec.rb create mode 100644 spec/kernel-4.5/schema_spec.rb create mode 100644 spec/kernel-4.5/user_example_spec.rb diff --git a/source/meta/kernel-4/example/all-fields-v4.4.xml b/source/meta/kernel-4/example/all-fields-v4.4.xml new file mode 100644 index 00000000..7dded077 --- /dev/null +++ b/source/meta/kernel-4/example/all-fields-v4.4.xml @@ -0,0 +1,197 @@ + + + + + + 10.21399/test-data + + + Anne Raugh + Anne + Raugh + 0000-0002-8300-9443 + Annabelle + University of Maryland, College Park + + + + Test Metadata + for Metadata Schema Version 4.4 + Testu metadatojn + Fake Data + + Publisher's Name + 2020 + Null Data Set + + Test Subject + Another Test Subject + Astronomical Reference Materials + Comet Names + + + + Curator, Bob the + Bob the + Curator + Bobby C. + Curators Inc. + + + University Of Maryland, College Park + College Park + University of Maryland + 047s2c258 + + + Astronomy Department + University of Maryland, College Park + + + + 2020-04-01 + 2001-10-02 + 321 BCE + Yesterday + + en + + Alternate ID 1 + Second Alternate ID + + + 10.21399/not-real + http://not.a.real.url + + + + Big Blue Book on the Left + + + Raugh, Anne + Anne + Raugh + + + Anne Raugh Foundation for Artisanal Programmers + + + + Fake Data for All Occasions + Falsaj Datumoj por Ĉiuj Okazoj + + 1865 + 3 + January + II.4 + CDIV + 501 + Pointless Books, LLC + First + + + Hubbard, Old Mother + Old + Hubbard + + + + + + Big Honkin' + 10 PB + 1,000,006 files + + + text/plain + Warm with melted cheese + + -1.0 + + Copyright © 2020 Anne Raugh, All Rights Reserved + All rights for this work are administered by My Evil Twin + License granted for private use + + + + This is test metadata. There are no data. Stop looking for data, because there aren't any. +
+ Seriously, stop looking. +
+ + Ĉi tio estas testaj metadatenoj. Ne estas datumoj. Ĉesu serĉi datumojn, ĉar ne ekzistas. +
+ Grave, ĉesu rigardi. +
+ + This fake metadata exercises all the elements comprising the DataCite Metadata Schema for the + version indicated. The content is schematically valid, though logically ridiculous. This + particular description, however, does not fit the assumptions of the intake processing. + + + + The two abstract fields are equivalent, but in different languages. + +
+ + + + -78.00 + -76.5 + 38.25 + 78.5 + + Frederick, MD + + 39.412327 + -77.425461 + + + + -74.0 + 38.0 + + + -77.0 + 40.0 + + + -80.0 + 39.0 + + + -78.0 + 36.0 + + + -75.0 + 37.0 + + + + + Not Frederick, MD + + + + + My Pocket + Money Source + 00001 + Money for Testing + + + NASA + 10.13039/100000104 + + +
\ No newline at end of file diff --git a/source/meta/kernel-4/example/datacite-example-Box_dateCollected_DataCollector-v4.xml b/source/meta/kernel-4/example/datacite-example-Box_dateCollected_DataCollector-v4.xml new file mode 100644 index 00000000..0ddaf157 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-Box_dateCollected_DataCollector-v4.xml @@ -0,0 +1,47 @@ + + + 10.5072/DataCollector_dateCollected_geoLocationBox + + + Peach, A. + + + + Temperature and Humidity in School Classrooms, Ponhook Lake, N.S., 1961-1962 + + National Research Council Canada + 1963 + + Temperature + Humidity + Classrooms + Ponhook Lake (N.S.) + + + + Pomegranate, B. + + + + 1961-06-01/1962-10-12 + + en + report + + 10 p. + + + The Division has been taking records of temperatures and humidities in groups of houses at various locations in Canada over the past several years. This survey has more recently been extended to include schools. Records obtained from classrooms in six schools in Ponhook Lake, Nova Scotia from June 1, 1961-October 12, 1962 are now reported. + + + + Ponhook Lake, Nova Scotia + + -64.2 + -63.8 + 44.7167 + 44.9667 + + + + diff --git a/source/meta/kernel-4/example/datacite-example-GeoLocation-v4.xml b/source/meta/kernel-4/example/datacite-example-GeoLocation-v4.xml new file mode 100644 index 00000000..cf42158a --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-GeoLocation-v4.xml @@ -0,0 +1,54 @@ + + + 10.5072/geoPointExample + + + Schumann, Kai + + + Völker, David + + + Weinrebe, Wilhelm Reiber + + + + Gridded results of swath bathymetric mapping of Disko Bay, Western Greenland, 2007-2008 + + PANGAEA - Data Publisher for Earth & Environmental Science + 2011 + + Geology, hydrology, meteorology + + + + IFM-GEOMAR Leibniz-Institute of Marine Sciences, Kiel University + + + en + + + 10.5072/timeSeries + + + 4 datasets + + + application/zip + + + + + + A ship-based acoustic mapping campaign was conducted at the exit of Ilulissat Ice Fjord and in the sedimentary basin of Disko Bay to the west of the fjord mouth. Submarine landscape and sediment distribution patterns are interpreted in terms of glaciomarine facies types that are related to variations in the past position of the glacier front. In particular, asymmetric ridges that form a curved entity and a large sill at the fjord mouth may represent moraines hat depict at least two relatively stable positions of the ice front in the Disko Bay and at the fjord mouth. In this respect, Ilulissat Glacier shows prominent differences to the East Greenland Kangerlussuaq Glacier which is comparable in present size and present role for the ice discharge from the inland ice sheet. Two linear clusters of pockmarks in the center of the sedimentary basin seem to be linked to ongoing methane release due to dissociation of gas hydrates, a process fueled by climate warming in the Arctic realm. + + + + Disko Bay + + -52.000000 + 69.000000 + + + + diff --git a/source/meta/kernel-4/example/datacite-example-HasMetadata-v4.xml b/source/meta/kernel-4/example/datacite-example-HasMetadata-v4.xml new file mode 100644 index 00000000..42798c42 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-HasMetadata-v4.xml @@ -0,0 +1,61 @@ + + + 10.5072/example + + + Mari, Bernard + Bernard + Mari + + + Puissegur, Marie-Pierre + Marie-Pierre + Puissegur + + + Barbry, Pascal + Pascal + Barbry + + + Lebrigand, Kevin + Kevin + Lebrigand + + + + Identification of putative novel specific targets of mir-210 in A549 human adenocarcinoma cells + + Institut de Pharmacologie Moleculaire et Cellulaire (IPMC), CNRS UMR6097, Universite de Nice Sophia-Antipolis, 660 route des lucioles, 06560 Valbonne - Sophia-Antipolis, France + 2010 + + Neoplasms + Transcription profiling + Homo sapiens + A549 + DNA microarray + + + + INIST-CNRS + + + en + Experiment report + + http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE18695 + + + 183 ko + 3 pages + + + PDF + + + + + + To identify putative novel specific targets of mir-210, we overexpressed miR-210 as well as miR-34a and a siRNA targeted against E2F3 in A549 human adenocarcinoma cells by transfecting them with synthetic pre-miRNAs or a synthetic negative pre-miRNA as control (miR-Neg). RNA samples were harvested at 48 hours post-transfection and 2 independent experiments performed in dye-swap: miR-210 versus miR-Neg ; miR-34a versus miR-Neg ; si-E2F3 versus miR-Neg ; si-control versus miR-Neg. + + diff --git a/source/meta/kernel-4/example/datacite-example-ResearchGroup_Methods-v4.xml b/source/meta/kernel-4/example/datacite-example-ResearchGroup_Methods-v4.xml new file mode 100644 index 00000000..fcdf9534 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-ResearchGroup_Methods-v4.xml @@ -0,0 +1,38 @@ + + + 10.5072/FK25H7QRS + + + Rizk-Jackson, Angela + Angela + Rizk-Jackson + 0000-0002-1732-8550 + + + + Analysis of ADNI data: Normal to MCI conversion + + University of California, San Francisco + 2013 + + Aging + Cognition + Risk-factor + Mild Cognitive Impairment + Prediction + Modeling + + + + Center for Imaging of Neurodegenerative Disease + + + + + 10.5072/j.jalz.2012.05.911 + + + This study replication data resource includes information referencing specific items in the Alzheimer's Disease Neuroimaging Initiative (ADNI) database that were used with the included analysis scripts (R statistical software) to reach conclusions presented in the referenced publication (DOI: 10.1016/j.jalz.2012.05.911). + Utilizing the ADNI database, we identified 41 individuals who remained stable for 48-months (NC) and 16 who converted to MCI (CNV). Of these 57 subjects, all had available baseline clinical and MRI data, but only 16 NC and 11 CNV had available FDG-PET data. Wilcoxon Rank Sum tests assessed baseline demographic and clinical imbalances between CNV and NC. The effect of conversion status on neuroimaging measures at baseline was tested using linear regression modeling. Finally, linear discriminant analysis (LDA) models were created using features from an a-priori subset of clinical metrics, MRI measures, and FDG-PET measures obtained at baseline to predict which individuals would later convert to MCI and which would remain stable. We used a leave-one-out cross validation strategy and permutation analysis to confirm significance. + + diff --git a/source/meta/kernel-4/example/datacite-example-ResourceTypeGeneral_Collection-v4.xml b/source/meta/kernel-4/example/datacite-example-ResourceTypeGeneral_Collection-v4.xml new file mode 100644 index 00000000..d17dbb2d --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-ResourceTypeGeneral_Collection-v4.xml @@ -0,0 +1,48 @@ + + + 10.5072/1003496 + + + Barton, T. + + + Bowler, D. + + + + Archaeological Evaluation, 64 Kenneth Street, Stornoway Isle of Lewis + + Scottish Urban Archaeological Trust Ltd. + 2008 + + Archaeology + Grey Literature + + en + Report + + 4335 + suatltd1-48159 + + + Doc: 46 kb + PDF: 750 kb + JPG: 700 kb + + + application/msword + application/pdf + image/jpeg + + + Terms of Use and Access to ADS Resources + + + Unpublished fieldwork reports (Grey Literature Library) + + + + Stornoway, Western Isles, Scotland + + + diff --git a/source/meta/kernel-4/example/datacite-example-affiliation-v4.xml b/source/meta/kernel-4/example/datacite-example-affiliation-v4.xml new file mode 100644 index 00000000..8f013dfa --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-affiliation-v4.xml @@ -0,0 +1,127 @@ + + + 10.5072/example-full + + + Miller, Elizabeth + Elizabeth + Miller + 0000-0001-5000-0007 + DataCite + + + Carberry, Josiah + Josiah + Carberry + 0000-0002-1825-0097 + Brown University + Wesleyan University + + + The Psychoceramics Study Group + Brown University + + + + Full DataCite XML Example + Demonstration of DataCite Properties. + + DataCite + 2014 + + computer science + + + + Starr, Joan + Joan + Starr + 0000-0002-7285-027X + California Digital Library + + + + 2021-01-26 + + en-US + XML + + https://schema.datacite.org/meta/kernel-4.4/example/datacite-example-full-v4.4.xml + + + https://data.datacite.org/application/citeproc+json/10.5072/example-full + arXiv:0706.0001 + + + 4 kB + + + application/xml + + 4.3 + + + + + + XML example of all DataCite Metadata Schema v4.4 properties. + + + + + Atlantic Ocean + + -67.302 + 31.233 + + + -71.032 + -68.211 + 41.090 + 42.893 + + + + 41.991 + -71.032 + + + 42.893 + -69.622 + + + 41.991 + -68.211 + + + 41.090 + -69.622 + + + 41.991 + -71.032 + + + + + + + National Science Foundation + https://doi.org/10.13039/100000001 + CBET-106 + Full DataCite XML Example + + + + + 0370-2693 + + Physics letters B + + 2018 + 776 + 249 + 264 + + + diff --git a/source/meta/kernel-4/example/datacite-example-ancientdates-v4.xml b/source/meta/kernel-4/example/datacite-example-ancientdates-v4.xml new file mode 100644 index 00000000..933711b5 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-ancientdates-v4.xml @@ -0,0 +1,29 @@ + + + 10.5072/0945113 + + + Augustus + 0000000121227317 + + + + Silver Denarius of Augustus, Emerita, 25 BC - 23 BC 1969.222.1267 + + American Numismatic Society + 2010 + + -0024/-0022 + + Coin + + 3.47 g + 13.5 mm + + + Metadata are openly licensed with a Open Data Commons Open Database License (ODbL) + + + 1969.222.1267 + + diff --git a/source/meta/kernel-4/example/datacite-example-complicated-v4.xml b/source/meta/kernel-4/example/datacite-example-complicated-v4.xml new file mode 100644 index 00000000..05f90a3c --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-complicated-v4.xml @@ -0,0 +1,54 @@ + + + 10.5072/testpub + + + Smith, John + John + Smith + + + つまらないものですが + 0000000134596520 + + + + Właściwości rzutowań podprzestrzeniowych + Translation of Polish titles + + Springer + 2010 + + German literature & related literatures + Polish Literature + + + + Doe, John + John + Doe + 0000-0001-5393-1421 + + + de + Monograph + + 937-0-4523-12357-6 + + + 10.5272/oldertestpub + + + 256 pages + + + pdf + + 2 + + + + + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + + diff --git a/source/meta/kernel-4/example/datacite-example-dissertation-v4.xml b/source/meta/kernel-4/example/datacite-example-dissertation-v4.xml new file mode 100644 index 00000000..ab8c4b86 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-dissertation-v4.xml @@ -0,0 +1,55 @@ + + + 10.5072/100044 + + + Luo, R + + + Liu, B + + + Xie, Y + + + Li, Z + + + + + Software and supporting material for "SOAPdenovo2: An empirically improved memory-efficient short read de novo assembly" + + + GigaScience Database + 2012 + + DNA (Genetics) + Computer Program + + + 2012-12-13 + + en + + + 10.5072/2047-217X-1-1 + 10.5072/100038 + + + 31 MB + + + + + + + SOAPdenovo2 is the latest de novo genome assembly package from BGI's SOAP (short oligonucleotide analysis package) suite of tools (homepage here: http://soap.genomics.org.cn/). Compared to SOAPdenovo1, this new version has the advantage of a new + algorithm design that reduces memory consumption in graph construction, resolves more repeat regions in contig assembly, increases coverage and length in scaffold construction, improves gap closure, and is optimized for large genomes. Using new + sequencing data from the YH (Homo sapiens) diploid genome - the first sequenced Han Chinese individual, an updated assembly was produced (see dataset here: doi:10.5524/100038), with the N50 scores for the contig and scaffold being 3-fold and 50-fold + longer, respectively, than the first published version. The genome coverage increased from 81.16% to 93.91%, and memory consumption was ~2/3 times lower during the point of largest memory consumption. Benchmarking with Assemblathon1 and GAGE datasets + shows that SOAPdenovo2 greatly surpasses its predecessor SOAPdenovo1 and is competitive to other assemblers on both assembly length and accuracy. In order to facilitate readers to repeat and recreate these findings, configured packages with the + compressed pipelines containing all of the necessary shell scripts and tools are available from the BGI FTP server (ftp://public.genomics.org.cn/BGI/SOAPdenovo2). The latest version of SOAPdenovo2 is available from Sourceforge: + http://soapdenovo2.sourceforge.net/ These pipelines will also soon be made available from our data platform as Galaxy workflows: http://galaxy.cbiit.cuhk.edu.hk/ + + + diff --git a/source/meta/kernel-4/example/datacite-example-fundingReference-v4.xml b/source/meta/kernel-4/example/datacite-example-fundingReference-v4.xml new file mode 100644 index 00000000..2c9bb760 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-fundingReference-v4.xml @@ -0,0 +1,56 @@ + + + 10.5281/zenodo.47394 + + + Dedeurwaerdere, Tom + Tom + Dedeurwaerdere + Université catholique de Louvain + + + + Combining internal and external motivations in multi-actor governance arrangements for biodiversity and ecosystem services + + Zenodo + 2016 + + Internal motivations + Biodiversity + Multi-actor governance + Payment for ecosystem services + Crowding out + + + + European Commission + https://doi.org/10.13039/501100000780 + 282625 + MOTivational strength of ecosystem services and alternative ways to express the value of BIOdiversity + + + European Commission + https://doi.org/10.13039/501100000780 + 284382 + Institutionalizing global genetic-resource commons. Global Strategies for accessing and using essential public knowledge assets in the life sciences + + + + 2016-03-11 + + + + https://zenodo.org/record/47394 + + + https://zenodo.org/record/47394/files/Data_All_Internal_motivations.pdf + https://zenodo.org/record/47394/files/survey_questionnaire_internal_motivations.pdf + + + Open Access + Creative Commons Zero 1.0 Universal + + + These files provide the original survey data of the paper on motivations for biodiversity conservation in Europe. This paper analyses the possibility of building a mutually supportive dynamics between internally and externally motivated behaviour for biodiversity conservation and ecosystem services provision. To this purpose a face to face survey amongst 169 key actors of 34 highly successful and prominent biodiversity arrangements in seven EU countries was conducted. The main finding of the paper is the feasibility of combining inherently intrinsically motivated behaviours (providing enjoyment, pleasure from experimentation and learning, aesthetic satisfaction) and internalized extrinsic motivations (related to the identification with the collective goals of conservation policy) through a common set of governance features. Successful initiatives that combine internal and external motivations share the following features: inclusive decision making processes, a broad monitoring by &ldquo;peers&rdquo; beyond the core staff of the initiatives, and a context that is supportive for the building of autonomous actor competences. These findings are in line with the psycho-sociological theory of motivation, which shows the importance of a psycho-social context leading to a subjective perception of autonomy and a sense of competence of the actors. + + diff --git a/source/meta/kernel-4/example/datacite-example-relationTypeIsIdenticalTo-v4.xml b/source/meta/kernel-4/example/datacite-example-relationTypeIsIdenticalTo-v4.xml new file mode 100644 index 00000000..bda1ff53 --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-relationTypeIsIdenticalTo-v4.xml @@ -0,0 +1,75 @@ + + + 10.5072/10.CPoS-example + + + Kreyenfeld, Michaela + Michaela + Kreyenfeld + 0000000117540116 + + + Hornung, Anne + Anne + Hornung + 304639093 + + + Kubisch, Karolin + Karolin + Kubisch + 303937450 + + + + The German Generations and Gender Survey + Some Critical Reflections on the Validity of Fertility Histories + + Federal Institute for Population Research, Germany + 2013 + + Fertility + Marriage + Germany + Data validation + Mikrozensus + Gender survey + Demography, Population Research + + + + Federal Institute for Population Research + 0000000094455866 + + + en + + + da|ra.14.103 + + + urn:nbn:de:bib-cpos-2013-02en8 + 10.4232/10.CPoS-2013-02en + + + PDF + + 1 + + + + + This paper validates the fertility histories of the German Generations and Gender Survey (GGS). Focusing on the cohorts 1930-69 of West German women, the total number of children, the parity distribution and the parity progression ratios are comparedto external sources. One major result from this validation is that the German GGS understates the fertility for the older cohorts and overstates it for the younger ones. + + + + 10.12765/CPoS-2013-02 + + Comparative Population Studies + + 2013 + 38 + 1 + + + diff --git a/source/meta/kernel-4/example/datacite-example-video-v4.xml b/source/meta/kernel-4/example/datacite-example-video-v4.xml new file mode 100644 index 00000000..2bcc4d6e --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-video-v4.xml @@ -0,0 +1,28 @@ + + + 10.5072/1153992 + + + Lynn, Briscoe + Briscoe + Lynn + + + + Walking Your Space, Evaluating Your Home + Making Energy Efficiency Work for You + + Photovoltaic Institute + 2013 + + Solar Energy + + en + narrated video + + MP4 + + + This hour-long video features John Halter as the narrator. Mr. Halter is best known as a journalist rather than a TV star, and here he plays that role as he does an "expose" type of walkthrough a new home. The home has been advertised as a house with the very latest in state-of-the art energy efficiency, especially solar. Mr. Halter puts the home through an investigation and determines that it can, indeed, live up to its claims. + + diff --git a/source/meta/kernel-4/example/datacite-example-workflow-v4.xml b/source/meta/kernel-4/example/datacite-example-workflow-v4.xml new file mode 100644 index 00000000..b46338ef --- /dev/null +++ b/source/meta/kernel-4/example/datacite-example-workflow-v4.xml @@ -0,0 +1,45 @@ + + + 10.5072/100044 + + + Luo, R + + + Liu, B + + + Xie, Y + + + Li, Z + + + + Software and supporting material for "SOAPdenovo2: An empirically improved memory-efficient short read de novo assembly" + + GigaScience Database + 2012 + + DNA (Genetics) + Computer Program + + + 2012-12-13 + + en + Software + + 10.5072/2047-217X-1-1 + 10.5072/100038 + + + 31 MB + + + + + + SOAPdenovo2 is the latest de novo genome assembly package from BGI's SOAP (short oligonucleotide analysis package) suite of tools (homepage here: http://soap.genomics.org.cn/). Compared to SOAPdenovo1, this new version has the advantage of a new algorithm design that reduces memory consumption in graph construction, resolves more repeat regions in contig assembly, increases coverage and length in scaffold construction, improves gap closure, and is optimized for large genomes. Using new sequencing data from the YH (Homo sapiens) diploid genome - the first sequenced Han Chinese individual, an updated assembly was produced (see dataset here: doi:10.5524/100038), with the N50 scores for the contig and scaffold being 3-fold and 50-fold longer, respectively, than the first published version. The genome coverage increased from 81.16% to 93.91%, and memory consumption was ~2/3 times lower during the point of largest memory consumption. Benchmarking with Assemblathon1 and GAGE datasets shows that SOAPdenovo2 greatly surpasses its predecessor SOAPdenovo1 and is competitive to other assemblers on both assembly length and accuracy. In order to facilitate readers to repeat and recreate these findings, configured packages with the compressed pipelines containing all of the necessary shell scripts and tools are available from the BGI FTP server (ftp://public.genomics.org.cn/BGI/SOAPdenovo2). The latest version of SOAPdenovo2 is available from Sourceforge: http://soapdenovo2.sourceforge.net/ These pipelines will also soon be made available from our data platform as Galaxy workflows: http://galaxy.cbiit.cuhk.edu.hk/ + + diff --git a/spec/kernel-4.3/example_dataset_spec.rb b/spec/kernel-4.3/example_dataset_spec.rb index e6ffa453..c4175b33 100644 --- a/spec/kernel-4.3/example_dataset_spec.rb +++ b/spec/kernel-4.3/example_dataset_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "full example" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.3') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-dataset-v4.xml")) { |c| c.strict }}} diff --git a/spec/kernel-4.3/example_full_spec.rb b/spec/kernel-4.3/example_full_spec.rb index 90931bf2..a00d9d2a 100644 --- a/spec/kernel-4.3/example_full_spec.rb +++ b/spec/kernel-4.3/example_full_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "full example" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.3') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} @@ -11,7 +11,7 @@ it 'has givenName and familyName' do creators = doc.search("creator") - expect(creators.size).to eq(1) + expect(creators.size).to eq(3) creator = creators.first expect(creator.elements.size).to eq(5) @@ -29,7 +29,7 @@ name_identifier = creator.elements[3] expect(name_identifier.name).to eq("nameIdentifier") - expect(name_identifier["schemeURI"]).to eq("https://orcid.org/") + expect(name_identifier["schemeURI"]).to eq("http://orcid.org/") expect(name_identifier["nameIdentifierScheme"]).to eq("ORCID") expect(name_identifier.text).to eq("0000-0001-5000-0007") end diff --git a/spec/kernel-4.4/example_dataset_spec.rb b/spec/kernel-4.4/example_dataset_spec.rb index e6ffa453..307a582d 100644 --- a/spec/kernel-4.4/example_dataset_spec.rb +++ b/spec/kernel-4.4/example_dataset_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "full example" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.4') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-dataset-v4.xml")) { |c| c.strict }}} diff --git a/spec/kernel-4.4/example_full_spec.rb b/spec/kernel-4.4/example_full_spec.rb index 90931bf2..c73b48c9 100644 --- a/spec/kernel-4.4/example_full_spec.rb +++ b/spec/kernel-4.4/example_full_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "full example" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.4') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} diff --git a/spec/kernel-4.4/other_spec.rb b/spec/kernel-4.4/other_spec.rb index 45a82121..d0eb4c00 100644 --- a/spec/kernel-4.4/other_spec.rb +++ b/spec/kernel-4.4/other_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "validate other elements" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.4') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} diff --git a/spec/kernel-4.5/doi_spec.rb b/spec/kernel-4.5/doi_spec.rb new file mode 100644 index 00000000..2a84a47d --- /dev/null +++ b/spec/kernel-4.5/doi_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe "validate DOI" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} + + it '10.5555/123' do + doc.at("identifier").content = "10.5555/123" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it '10.5555/a' do + doc.at("identifier").content = "10.5555/a" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end +end diff --git a/spec/kernel-4.5/example-ancientdates_spec.rb b/spec/kernel-4.5/example-ancientdates_spec.rb new file mode 100644 index 00000000..914728ea --- /dev/null +++ b/spec/kernel-4.5/example-ancientdates_spec.rb @@ -0,0 +1,39 @@ +require 'spec_helper' + +describe "ancientdates example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-ancientdates-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has resourceTypeGeneral Dataset' do + resource_type = doc.at("resourceType") + expect(resource_type["resourceTypeGeneral"]).to eq("PhysicalObject") + expect(resource_type.text).to eq("Coin") + end + + it 'has dates' do + dates = doc.search("dates") + expect(dates.size).to eq(1) + date = dates.first + expect(date.text.strip).to eq("-0024/-0022") + end + + it 'has givenName, familyName, and affiliations' do + creators = doc.search("creator") + expect(creators.size).to eq(1) + creator = creators.first + expect(creator.elements.size).to eq(2) + + creator_name = creator.elements[0] + expect(creator_name.name).to eq("creatorName") + expect(creator_name.text).to eq("Augustus") + + given_name = creator.elements[1] + expect(given_name.name).to eq("nameIdentifier") + expect(given_name.text).to eq("0000000121227317") + end +end diff --git a/spec/kernel-4.5/example_affiliation_spec.rb b/spec/kernel-4.5/example_affiliation_spec.rb new file mode 100644 index 00000000..f440768b --- /dev/null +++ b/spec/kernel-4.5/example_affiliation_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-affiliation-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has resourceTypeGeneral Software' do + resource_type = doc.at("resourceType") + expect(resource_type["resourceTypeGeneral"]).to eq("Software") + expect(resource_type.text).to eq("XML") + end + + it 'has givenName, familyName, nameIdentifier and affiliations' do + creators = doc.search("creator") + expect(creators.size).to eq(3) + creator = creators.first + expect(creator.elements.size).to eq(5) + + creator_name = creator.elements[0] + expect(creator_name.name).to eq("creatorName") + expect(creator_name.text).to eq("Miller, Elizabeth") + + given_name = creator.elements[1] + expect(given_name.name).to eq("givenName") + expect(given_name.text).to eq("Elizabeth") + + family_name = creator.elements[2] + expect(family_name.name).to eq("familyName") + expect(family_name.text).to eq("Miller") + + name_identifier = creator.elements[3] + expect(name_identifier.name).to eq("nameIdentifier") + expect(name_identifier["schemeURI"]).to eq("https://orcid.org/") + expect(name_identifier["nameIdentifierScheme"]).to eq("ORCID") + expect(name_identifier.text).to eq("0000-0001-5000-0007") + + affiliation = creator.elements[4] + expect(affiliation.name).to eq("affiliation") + expect(affiliation.text).to eq("DataCite") + expect(affiliation["affiliationIdentifier"]).to eq("https://ror.org/04wxnsj81") + expect(affiliation["affiliationIdentifierScheme"]).to eq("ROR") + end +end diff --git a/spec/kernel-4.5/example_all_fields_spec.rb b/spec/kernel-4.5/example_all_fields_spec.rb new file mode 100644 index 00000000..540f08e6 --- /dev/null +++ b/spec/kernel-4.5/example_all_fields_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "all fields example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/all-fields-v4.4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_box_date_collected_data_collector_spec.rb b/spec/kernel-4.5/example_box_date_collected_data_collector_spec.rb new file mode 100644 index 00000000..a483bfbd --- /dev/null +++ b/spec/kernel-4.5/example_box_date_collected_data_collector_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-Box_dateCollected_DataCollector-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has dateType Collected' do + dates = doc.search("date") + expect(dates.size).to eq(1) + date = dates.first + expect(date["dateType"]).to eq("Collected") + expect(date.text).to eq("1961-06-01/1962-10-12") + end + + it 'has contributor DataCollector' do + contributors = doc.search("contributor") + expect(contributors.size).to eq(1) + contributor = contributors.first + expect(contributor["contributorType"]).to eq("DataCollector") + contributor_name = contributor.first_element_child + expect(contributor_name.name).to eq("contributorName") + expect(contributor_name.text).to eq("Pomegranate, B.") + end + + it 'has geoLocationBox' do + geo_locations = doc.search("geoLocation") + expect(geo_locations.size).to eq(1) + geo_location = geo_locations.first + expect(geo_location.elements.size).to eq(2) + geo_location_place = geo_location.first_element_child + expect(geo_location_place.name).to eq("geoLocationPlace") + expect(geo_location_place.text).to eq("Ponhook Lake, Nova Scotia") + geo_location_box = geo_location.last_element_child + expect(geo_location_box.name).to eq("geoLocationBox") + expect(geo_location_box.elements[0].name).to eq("westBoundLongitude") + expect(geo_location_box.elements[0].text).to eq("-64.2") + expect(geo_location_box.elements[1].name).to eq("eastBoundLongitude") + expect(geo_location_box.elements[1].text).to eq("-63.8") + expect(geo_location_box.elements[2].name).to eq("southBoundLatitude") + expect(geo_location_box.elements[2].text).to eq("44.7167") + expect(geo_location_box.elements[3].name).to eq("northBoundLatitude") + expect(geo_location_box.elements[3].text).to eq("44.9667") + end +end diff --git a/spec/kernel-4.5/example_complicated_spec.rb b/spec/kernel-4.5/example_complicated_spec.rb new file mode 100644 index 00000000..39736f2f --- /dev/null +++ b/spec/kernel-4.5/example_complicated_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-complicated-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_dataset_spec.rb b/spec/kernel-4.5/example_dataset_spec.rb new file mode 100644 index 00000000..7d59c53a --- /dev/null +++ b/spec/kernel-4.5/example_dataset_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-dataset-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has resourceTypeGeneral Dataset' do + resource_type = doc.at("resourceType") + expect(resource_type["resourceTypeGeneral"]).to eq("Dataset") + expect(resource_type.text).to eq("Environmental data") + end +end diff --git a/spec/kernel-4.5/example_dissertation_spec.rb b/spec/kernel-4.5/example_dissertation_spec.rb new file mode 100644 index 00000000..8f49d552 --- /dev/null +++ b/spec/kernel-4.5/example_dissertation_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-dissertation-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has resourceTypeGeneral Dissertation' do + resource_type = doc.at("resourceType") + expect(resource_type["resourceTypeGeneral"]).to eq("Dissertation") + expect(resource_type.text).to eq("") + end +end diff --git a/spec/kernel-4.5/example_documentation_spec.rb b/spec/kernel-4.5/example_documentation_spec.rb new file mode 100644 index 00000000..fc0baad0 --- /dev/null +++ b/spec/kernel-4.5/example_documentation_spec.rb @@ -0,0 +1,22 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("../../../spec/fixtures/example-schema-documentation.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has one creator' do + creators = doc.search("creator") + expect(creators.size).to eq(1) + creator = creators.first + expect(creator.elements.size).to eq(1) + + creator_name = creator.elements[0] + expect(creator_name.name).to eq("creatorName") + expect(creator_name.text).to eq("DataCite Metadata Working Group") + end +end diff --git a/spec/kernel-4.5/example_full_spec.rb b/spec/kernel-4.5/example_full_spec.rb new file mode 100644 index 00000000..c824bcb2 --- /dev/null +++ b/spec/kernel-4.5/example_full_spec.rb @@ -0,0 +1,36 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has givenName and familyName' do + creators = doc.search("/xmlns:resource/xmlns:creators/xmlns:creator") + expect(creators.size).to eq(2) + creator = creators.first + expect(creator.elements.size).to eq(5) + + creator_name = creator.elements[0] + expect(creator_name.name).to eq("creatorName") + expect(creator_name.text).to eq("ExampleFamilyName, ExampleGivenName") + + given_name = creator.elements[1] + expect(given_name.name).to eq("givenName") + expect(given_name.text).to eq("ExampleGivenName") + + family_name = creator.elements[2] + expect(family_name.name).to eq("familyName") + expect(family_name.text).to eq("ExampleFamilyName") + + name_identifier = creator.elements[3] + expect(name_identifier.name).to eq("nameIdentifier") + expect(name_identifier["schemeURI"]).to eq("https://orcid.org") + expect(name_identifier["nameIdentifierScheme"]).to eq("ORCID") + expect(name_identifier.text).to eq("https://orcid.org/0000-0001-5727-2427") + end +end diff --git a/spec/kernel-4.5/example_funding_reference_spec.rb b/spec/kernel-4.5/example_funding_reference_spec.rb new file mode 100644 index 00000000..02517518 --- /dev/null +++ b/spec/kernel-4.5/example_funding_reference_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-fundingReference-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + # it 'has funderReference' do + # doc.at("funderReferences").first = "" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'empty fundingReference tag' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Missing child element(s). Expected is one of ( {http://datacite.org/schema/kernel-4}funderName, {http://datacite.org/schema/kernel-4}funderIdentifier, {http://datacite.org/schema/kernel-4}awardNumber, {http://datacite.org/schema/kernel-4}awardTitle )") + end + + it 'only funderName' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + European Commission + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'empty funderName' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}funderName': [facet 'minLength'] The value has a length of '0'; this underruns the allowed minimum length of '1'.") + end + + it 'funderIdentifier' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + European Commission + http://doi.org/10.13039/501100000780 + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'funderIdentifier without funderIdentifierType' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + European Commission + http://doi.org/10.13039/501100000780 + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("The attribute 'funderIdentifierType' is required but missing.") + end + + it 'funderIdentifier unknown funderIdentifierType' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + European Commission + http://doi.org/10.13039/501100000780 + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("The value 'ABC' is not an element of the set {'ISNI', 'GRID', 'ROR', 'Crossref Funder ID', 'Other'}.") + end + + it 'awardNumber' do + element = doc.at("fundingReferences") + element.replace (<<-EOT) + + + European Commission + 284382 + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end +end diff --git a/spec/kernel-4.5/geolocation_spec.rb b/spec/kernel-4.5/geolocation_spec.rb new file mode 100644 index 00000000..5d67d2e3 --- /dev/null +++ b/spec/kernel-4.5/geolocation_spec.rb @@ -0,0 +1,188 @@ +require 'spec_helper' + +describe "validate geoLocation" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-GeoLocation-v4.xml")) { |c| c.strict }}} + + it 'empty geoLocations tag' do + element = doc.at("geoLocations") + element.replace "" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'geoLocationPoint' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -52.000000 + 69.000000 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'multiple geoLocationPoint' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -52.000000 + 69.000000 + + + -43.000000 + 78.000000 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'geoLocationPoint missing latitude' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -52.000000 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}geoLocationPoint': Missing child element(s). Expected is ( {http://datacite.org/schema/kernel-4}pointLatitude ).") + end + + it 'geoLocationPoint out of range' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -52.000000 + 110.000000 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}pointLatitude': [facet 'maxInclusive'] The value '110.000000' is greater than the maximum value allowed ('90').") + end + + it 'pointLatitude out of range' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -52.000000 + Disko Bay + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}pointLatitude': 'Disko Bay' is not a valid value of the atomic type '{http://datacite.org/schema/kernel-4}latitudeType'.") + end + + it 'geoLocationPolygon' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + + -52 + 69 + + + -52 + 67 + + + -54 + 67 + + + -54 + 69 + + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'geoLocationPolygon not enough points' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + + -52 + 69 + + + -52 + 67 + + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}geoLocationPolygon': Missing child element(s). Expected is ( {http://datacite.org/schema/kernel-4}polygonPoint ).") + end + + it 'geoLocationBox' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -71.032 + -68.211 + 41.090 + 42.893 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'geoLocationBox missing points' do + element = doc.at("geoLocations") + element.replace (<<-EOT) + + + + -71.032 + 41.090 + + + + EOT + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}geoLocationBox': Missing child element(s). Expected is one of ( {http://datacite.org/schema/kernel-4}eastBoundLongitude, {http://datacite.org/schema/kernel-4}northBoundLatitude ).") + end +end diff --git a/spec/kernel-4.5/other_spec.rb b/spec/kernel-4.5/other_spec.rb new file mode 100644 index 00000000..36654dda --- /dev/null +++ b/spec/kernel-4.5/other_spec.rb @@ -0,0 +1,189 @@ +require 'spec_helper' + +describe "validate other elements" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} + + describe "resourceType" do + it 'missing resourceType' do + element = doc.at("resourceType") + element.replace "" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Missing child element(s). Expected is ( {http://datacite.org/schema/kernel-4}resourceType ).") + end + + it 'missing resourceTypeGeneral' do + element = doc.at("resourceType") + element.replace "" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}resourceType': The attribute 'resourceTypeGeneral' is required but missing.") + end + + it 'missing resourceTypeGeneral with resourceType' do + element = doc.at("resourceType") + element.replace 'Dataset' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("Element '{http://datacite.org/schema/kernel-4}resourceType': The attribute 'resourceTypeGeneral' is required but missing.") + end + + it 'empty resourceTypeGeneral with resourceType' do + element = doc.at("resourceType") + element.replace 'Dataset' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.last).to include("Element '{http://datacite.org/schema/kernel-4}resourceType', attribute 'resourceTypeGeneral': [facet 'enumeration'] The value '' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'Instrument', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'StudyRegistration', 'Text', 'Workflow', 'Other'}.") + end + + it 'empty resourceType' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + + it 'unknown resourceTypeGeneral' do + element = doc.at("resourceType") + element.replace 'Dataset' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(1) + expect(errors.first).to include("The value 'Conference' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'Instrument', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'StudyRegistration', 'Text', 'Workflow', 'Other'}.") + end + + it 'resourceTypeGeneral Book' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral BookChapter' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral ComputationalNotebook' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral ConferencePaper' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral ConferenceProceeding' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Dissertation' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Journal' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral JournalArticle' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral OutputManagementPlan' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral PeerReview' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Preprint' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Report' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Standard' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral Instrument' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral StudyRegistration' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + end + + describe "description" do + it 'empty descriptions tag' do + element = doc.at("descriptions") + element.replace "" + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + end + + describe "publisher with attributes" do + it 'publisher with attributes' do + element = doc.at("publisher") + expect(element.name).to eq("publisher") + expect(element.text).to eq("Example Publisher") + expect(element["xml:lang"]).to eq("en") + expect(element["publisherIdentifier"]).to eq("https://ror.org/04z8jg394") + expect(element["publisherIdentifierScheme"]).to eq("ROR") + expect(element["schemeURI"]).to eq("https://ror.org/") + end + + it 'publisher without attributes' do + element = doc.at("publisher") + element.replace 'Example Publisher' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + end +end diff --git a/spec/kernel-4.5/pure_example_spec.rb b/spec/kernel-4.5/pure_example_spec.rb new file mode 100644 index 00000000..7b34094f --- /dev/null +++ b/spec/kernel-4.5/pure_example_spec.rb @@ -0,0 +1,40 @@ +require 'spec_helper' + +describe "pure example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(RSPEC_ROOT) {Nokogiri::XML(File.read("fixtures/pure-example.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has resourceTypeGeneral Dataset' do + resource_type = doc.at("resourceType") + expect(resource_type["resourceTypeGeneral"]).to eq("Dataset") + expect(resource_type.text).to eq("Dataset") + end + + it 'has givenName, familyName, and affiliations' do + creators = doc.search("creator") + expect(creators.size).to eq(1) + creator = creators.first + expect(creator.elements.size).to eq(4) + + creator_name = creator.elements[0] + expect(creator_name.name).to eq("creatorName") + expect(creator_name.text).to eq("Barbosa, Miguel") + + given_name = creator.elements[1] + expect(given_name.name).to eq("givenName") + expect(given_name.text).to eq("Miguel") + + family_name = creator.elements[2] + expect(family_name.name).to eq("familyName") + expect(family_name.text).to eq("Barbosa") + + affiliation = creator.elements[3] + expect(affiliation.name).to eq("affiliation") + expect(affiliation.text).to eq("School of Biology") + end +end diff --git a/spec/kernel-4.5/schema_spec.rb b/spec/kernel-4.5/schema_spec.rb new file mode 100644 index 00000000..c3e1c56d --- /dev/null +++ b/spec/kernel-4.5/schema_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) { |c| c.strict }}} + + it 'is valid' do + expect(xsd.errors).to be_empty + end +end diff --git a/spec/kernel-4.5/user_example_spec.rb b/spec/kernel-4.5/user_example_spec.rb new file mode 100644 index 00000000..0a6fc115 --- /dev/null +++ b/spec/kernel-4.5/user_example_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "full example" do + let(:doc) { Dir.chdir(RSPEC_ROOT) {Nokogiri::XML(File.read("fixtures/_10.23650.xml")) { |c| c.strict }}} + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + + it 'does not validate' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example-ancientdates_spec.rb b/spec/kernel-4/example-ancientdates_spec.rb index f88f7ac3..914728ea 100644 --- a/spec/kernel-4/example-ancientdates_spec.rb +++ b/spec/kernel-4/example-ancientdates_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe "ancientdates example" do - let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4.3') } + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-ancientdates-v4.xml")) { |c| c.strict }}} diff --git a/spec/kernel-4/example_dataset_spec.rb b/spec/kernel-4/example_dataset_spec.rb index e6ffa453..7d59c53a 100644 --- a/spec/kernel-4/example_dataset_spec.rb +++ b/spec/kernel-4/example_dataset_spec.rb @@ -12,6 +12,6 @@ it 'has resourceTypeGeneral Dataset' do resource_type = doc.at("resourceType") expect(resource_type["resourceTypeGeneral"]).to eq("Dataset") - expect(resource_type.text).to eq("Dataset") + expect(resource_type.text).to eq("Environmental data") end end diff --git a/spec/kernel-4/example_full_spec.rb b/spec/kernel-4/example_full_spec.rb index 90931bf2..c824bcb2 100644 --- a/spec/kernel-4/example_full_spec.rb +++ b/spec/kernel-4/example_full_spec.rb @@ -10,27 +10,27 @@ end it 'has givenName and familyName' do - creators = doc.search("creator") - expect(creators.size).to eq(1) + creators = doc.search("/xmlns:resource/xmlns:creators/xmlns:creator") + expect(creators.size).to eq(2) creator = creators.first expect(creator.elements.size).to eq(5) creator_name = creator.elements[0] expect(creator_name.name).to eq("creatorName") - expect(creator_name.text).to eq("Miller, Elizabeth") + expect(creator_name.text).to eq("ExampleFamilyName, ExampleGivenName") given_name = creator.elements[1] expect(given_name.name).to eq("givenName") - expect(given_name.text).to eq("Elizabeth") + expect(given_name.text).to eq("ExampleGivenName") family_name = creator.elements[2] expect(family_name.name).to eq("familyName") - expect(family_name.text).to eq("Miller") + expect(family_name.text).to eq("ExampleFamilyName") name_identifier = creator.elements[3] expect(name_identifier.name).to eq("nameIdentifier") - expect(name_identifier["schemeURI"]).to eq("https://orcid.org/") + expect(name_identifier["schemeURI"]).to eq("https://orcid.org") expect(name_identifier["nameIdentifierScheme"]).to eq("ORCID") - expect(name_identifier.text).to eq("0000-0001-5000-0007") + expect(name_identifier.text).to eq("https://orcid.org/0000-0001-5727-2427") end end diff --git a/spec/kernel-4/geolocation_spec.rb b/spec/kernel-4/geolocation_spec.rb index 251f7a2e..5d67d2e3 100644 --- a/spec/kernel-4/geolocation_spec.rb +++ b/spec/kernel-4/geolocation_spec.rb @@ -169,7 +169,7 @@ expect(errors).to be_empty end - it 'geoLocationBox mising points' do + it 'geoLocationBox missing points' do element = doc.at("geoLocations") element.replace (<<-EOT) diff --git a/spec/kernel-4/other_spec.rb b/spec/kernel-4/other_spec.rb index 45a82121..36654dda 100644 --- a/spec/kernel-4/other_spec.rb +++ b/spec/kernel-4/other_spec.rb @@ -35,7 +35,7 @@ element.replace 'Dataset' errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } expect(errors.length).to eq(1) - expect(errors.last).to eq("35:0: ERROR: Element '{http://datacite.org/schema/kernel-4}resourceType', attribute 'resourceTypeGeneral': [facet 'enumeration'] The value '' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'Text', 'Workflow', 'Other'}.") + expect(errors.last).to include("Element '{http://datacite.org/schema/kernel-4}resourceType', attribute 'resourceTypeGeneral': [facet 'enumeration'] The value '' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'Instrument', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'StudyRegistration', 'Text', 'Workflow', 'Other'}.") end it 'empty resourceType' do @@ -50,7 +50,7 @@ element.replace 'Dataset' errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } expect(errors.length).to eq(1) - expect(errors.first).to include("The value 'Conference' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'Text', 'Workflow', 'Other'}.") + expect(errors.first).to include("The value 'Conference' is not an element of the set {'Audiovisual', 'Book', 'BookChapter', 'Collection', 'ComputationalNotebook', 'ConferencePaper', 'ConferenceProceeding', 'DataPaper', 'Dataset', 'Dissertation', 'Event', 'Image', 'Instrument', 'InteractiveResource', 'Journal', 'JournalArticle', 'Model', 'OutputManagementPlan', 'PeerReview', 'PhysicalObject', 'Preprint', 'Report', 'Service', 'Software', 'Sound', 'Standard', 'StudyRegistration', 'Text', 'Workflow', 'Other'}.") end it 'resourceTypeGeneral Book' do @@ -143,6 +143,20 @@ errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } expect(errors.length).to eq(0) end + + it 'resourceTypeGeneral Instrument' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'resourceTypeGeneral StudyRegistration' do + element = doc.at("resourceType") + element.replace '' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end end describe "description" do @@ -153,4 +167,23 @@ expect(errors).to be_empty end end + + describe "publisher with attributes" do + it 'publisher with attributes' do + element = doc.at("publisher") + expect(element.name).to eq("publisher") + expect(element.text).to eq("Example Publisher") + expect(element["xml:lang"]).to eq("en") + expect(element["publisherIdentifier"]).to eq("https://ror.org/04z8jg394") + expect(element["publisherIdentifierScheme"]).to eq("ROR") + expect(element["schemeURI"]).to eq("https://ror.org/") + end + + it 'publisher without attributes' do + element = doc.at("publisher") + element.replace 'Example Publisher' + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors).to be_empty + end + end end From 6b896b08c65633d89969486bbca78a9b35bc1ca8 Mon Sep 17 00:00:00 2001 From: codycooperross <50597551+codycooperross@users.noreply.github.com> Date: Thu, 21 Sep 2023 12:35:46 -0400 Subject: [PATCH 2/3] Adds tests for new examples and for relationTypes Collects and IsCollectedBy --- spec/kernel-4.5/example_instrument_spec.rb | 11 +++++++ spec/kernel-4.5/example_multilingual_spec.rb | 11 +++++++ .../kernel-4.5/example_related_item_1_spec.rb | 11 +++++++ .../kernel-4.5/example_related_item_2_spec.rb | 11 +++++++ .../kernel-4.5/example_related_item_3_spec.rb | 11 +++++++ ...tion_type_collects_is_collected_by_spec.rb | 31 +++++++++++++++++++ ...ple_relation_type_is_identifcal_to_spec.rb | 20 ++++++++++++ spec/kernel-4/example_instrument_spec.rb | 11 +++++++ spec/kernel-4/example_multilingual_spec.rb | 11 +++++++ spec/kernel-4/example_related_item_1_spec.rb | 11 +++++++ spec/kernel-4/example_related_item_2_spec.rb | 11 +++++++ spec/kernel-4/example_related_item_3_spec.rb | 11 +++++++ ...tion_type_collects_is_collected_by_spec.rb | 31 +++++++++++++++++++ 13 files changed, 192 insertions(+) create mode 100644 spec/kernel-4.5/example_instrument_spec.rb create mode 100644 spec/kernel-4.5/example_multilingual_spec.rb create mode 100644 spec/kernel-4.5/example_related_item_1_spec.rb create mode 100644 spec/kernel-4.5/example_related_item_2_spec.rb create mode 100644 spec/kernel-4.5/example_related_item_3_spec.rb create mode 100644 spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb create mode 100644 spec/kernel-4.5/example_relation_type_is_identifcal_to_spec.rb create mode 100644 spec/kernel-4/example_instrument_spec.rb create mode 100644 spec/kernel-4/example_multilingual_spec.rb create mode 100644 spec/kernel-4/example_related_item_1_spec.rb create mode 100644 spec/kernel-4/example_related_item_2_spec.rb create mode 100644 spec/kernel-4/example_related_item_3_spec.rb create mode 100644 spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb diff --git a/spec/kernel-4.5/example_instrument_spec.rb b/spec/kernel-4.5/example_instrument_spec.rb new file mode 100644 index 00000000..c7de871d --- /dev/null +++ b/spec/kernel-4.5/example_instrument_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "instrument example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-instrument-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_multilingual_spec.rb b/spec/kernel-4.5/example_multilingual_spec.rb new file mode 100644 index 00000000..59a8e958 --- /dev/null +++ b/spec/kernel-4.5/example_multilingual_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "multilingual example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-multilingual-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_related_item_1_spec.rb b/spec/kernel-4.5/example_related_item_1_spec.rb new file mode 100644 index 00000000..a71dd9ee --- /dev/null +++ b/spec/kernel-4.5/example_related_item_1_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 1 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem1-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_related_item_2_spec.rb b/spec/kernel-4.5/example_related_item_2_spec.rb new file mode 100644 index 00000000..04d99cf8 --- /dev/null +++ b/spec/kernel-4.5/example_related_item_2_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 2 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem2-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_related_item_3_spec.rb b/spec/kernel-4.5/example_related_item_3_spec.rb new file mode 100644 index 00000000..7943eb69 --- /dev/null +++ b/spec/kernel-4.5/example_related_item_3_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 3 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem3-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb b/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb new file mode 100644 index 00000000..2f860a7a --- /dev/null +++ b/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has relationType Collects' do + related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("Collects") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end + + it 'has relationType IsCollectedBy' do + related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("IsCollectedBy") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end +end diff --git a/spec/kernel-4.5/example_relation_type_is_identifcal_to_spec.rb b/spec/kernel-4.5/example_relation_type_is_identifcal_to_spec.rb new file mode 100644 index 00000000..05155d92 --- /dev/null +++ b/spec/kernel-4.5/example_relation_type_is_identifcal_to_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relationTypeIsIdenticalTo-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has relationType IsIdenticalTo' do + related_identifiers = doc.search("relatedIdentifier") + expect(related_identifiers.size).to eq(2) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("IsIdenticalTo") + expect(related_identifier["relatedIdentifierType"]).to eq("URN") + expect(related_identifier.text).to eq("urn:nbn:de:bib-cpos-2013-02en8") + end +end diff --git a/spec/kernel-4/example_instrument_spec.rb b/spec/kernel-4/example_instrument_spec.rb new file mode 100644 index 00000000..c7de871d --- /dev/null +++ b/spec/kernel-4/example_instrument_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "instrument example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-instrument-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example_multilingual_spec.rb b/spec/kernel-4/example_multilingual_spec.rb new file mode 100644 index 00000000..59a8e958 --- /dev/null +++ b/spec/kernel-4/example_multilingual_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "multilingual example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-multilingual-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example_related_item_1_spec.rb b/spec/kernel-4/example_related_item_1_spec.rb new file mode 100644 index 00000000..a71dd9ee --- /dev/null +++ b/spec/kernel-4/example_related_item_1_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 1 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem1-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example_related_item_2_spec.rb b/spec/kernel-4/example_related_item_2_spec.rb new file mode 100644 index 00000000..04d99cf8 --- /dev/null +++ b/spec/kernel-4/example_related_item_2_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 2 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem2-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example_related_item_3_spec.rb b/spec/kernel-4/example_related_item_3_spec.rb new file mode 100644 index 00000000..7943eb69 --- /dev/null +++ b/spec/kernel-4/example_related_item_3_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "related item 3 example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-relateditem3-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end +end diff --git a/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb b/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb new file mode 100644 index 00000000..2f860a7a --- /dev/null +++ b/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe "full example" do + let(:root) { File.join(File.dirname(__FILE__), '../../source/meta/kernel-4') } + let(:xsd) { Dir.chdir(root) { Nokogiri::XML::Schema(File.read("metadata.xsd")) }} + let(:doc) { Dir.chdir(root) { Nokogiri::XML(File.read("example/datacite-example-full-v4.xml")) { |c| c.strict }}} + + it 'validates' do + expect(doc).to pass_validation(xsd) + end + + it 'has relationType Collects' do + related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("Collects") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end + + it 'has relationType IsCollectedBy' do + related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("IsCollectedBy") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end +end From 1ee32ab0eb77714f5c1b1d3804e08fee1053605b Mon Sep 17 00:00:00 2001 From: codycooperross <50597551+codycooperross@users.noreply.github.com> Date: Mon, 25 Sep 2023 17:10:36 -0400 Subject: [PATCH 3/3] Adds tests for relatedItem.relatedItemType and relatedIdentifier.resourceTypeGeneral --- ...tion_type_collects_is_collected_by_spec.rb | 54 +++++++++++++------ spec/kernel-4.5/other_spec.rb | 40 ++++++++++++++ ...tion_type_collects_is_collected_by_spec.rb | 54 +++++++++++++------ spec/kernel-4/other_spec.rb | 40 ++++++++++++++ 4 files changed, 156 insertions(+), 32 deletions(-) diff --git a/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb b/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb index 2f860a7a..cf046aa0 100644 --- a/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb +++ b/spec/kernel-4.5/example_relation_type_collects_is_collected_by_spec.rb @@ -9,23 +9,45 @@ expect(doc).to pass_validation(xsd) end - it 'has relationType Collects' do - related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") - expect(related_identifiers.size).to eq(1) - related_identifier = related_identifiers.first - expect(related_identifier["relationType"]).to eq("Collects") - expect(related_identifier["relatedIdentifierType"]).to eq("DOI") - expect(related_identifier["resourceTypeGeneral"]).to eq("Other") - expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + describe "relatedIdentifier" do + it 'has relationType Collects' do + related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("Collects") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end + + it 'has relationType IsCollectedBy' do + related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("IsCollectedBy") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end end - it 'has relationType IsCollectedBy' do - related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") - expect(related_identifiers.size).to eq(1) - related_identifier = related_identifiers.first - expect(related_identifier["relationType"]).to eq("IsCollectedBy") - expect(related_identifier["relatedIdentifierType"]).to eq("DOI") - expect(related_identifier["resourceTypeGeneral"]).to eq("Other") - expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + describe "relatedItem" do + it 'has relationType Collects' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relationType"] = "Collects" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'has relationType IsCollectedBy' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relationType"] = "IsCollectedBy" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end end end diff --git a/spec/kernel-4.5/other_spec.rb b/spec/kernel-4.5/other_spec.rb index 36654dda..bb153bd4 100644 --- a/spec/kernel-4.5/other_spec.rb +++ b/spec/kernel-4.5/other_spec.rb @@ -159,6 +159,46 @@ end end + describe "relatedItemType" do + it 'relatedItemType Instrument' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relatedItemType"] = "Instrument" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'relatedItemType StudyRegistration' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relatedItemType"] = "StudyRegistration" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + end + + describe "relatedIdentifier resourceTypeGeneral" do + it 'relatedIdentifier resourceTypeGeneral Instrument' do + related_item = doc.search("relatedIdentifiers/relatedIdentifier").first + related_item["resourceTypeGeneral"] = "Instrument" + element = doc.at("relatedIdentifiers/relatedIdentifier") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'relatedIdentifier resourceTypeGeneral StudyRegistration' do + related_item = doc.search("relatedIdentifiers/relatedIdentifier").first + related_item["resourceTypeGeneral"] = "StudyRegistration" + element = doc.at("relatedIdentifiers/relatedIdentifier") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + end + describe "description" do it 'empty descriptions tag' do element = doc.at("descriptions") diff --git a/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb b/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb index 2f860a7a..cf046aa0 100644 --- a/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb +++ b/spec/kernel-4/example_relation_type_collects_is_collected_by_spec.rb @@ -9,23 +9,45 @@ expect(doc).to pass_validation(xsd) end - it 'has relationType Collects' do - related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") - expect(related_identifiers.size).to eq(1) - related_identifier = related_identifiers.first - expect(related_identifier["relationType"]).to eq("Collects") - expect(related_identifier["relatedIdentifierType"]).to eq("DOI") - expect(related_identifier["resourceTypeGeneral"]).to eq("Other") - expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + describe "relatedIdentifier" do + it 'has relationType Collects' do + related_identifiers = doc.search("relatedIdentifier[@relationType='Collects']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("Collects") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end + + it 'has relationType IsCollectedBy' do + related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") + expect(related_identifiers.size).to eq(1) + related_identifier = related_identifiers.first + expect(related_identifier["relationType"]).to eq("IsCollectedBy") + expect(related_identifier["relatedIdentifierType"]).to eq("DOI") + expect(related_identifier["resourceTypeGeneral"]).to eq("Other") + expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + end end - it 'has relationType IsCollectedBy' do - related_identifiers = doc.search("relatedIdentifier[@relationType='IsCollectedBy']") - expect(related_identifiers.size).to eq(1) - related_identifier = related_identifiers.first - expect(related_identifier["relationType"]).to eq("IsCollectedBy") - expect(related_identifier["relatedIdentifierType"]).to eq("DOI") - expect(related_identifier["resourceTypeGeneral"]).to eq("Other") - expect(related_identifier.text).to eq("10.1016/j.epsl.2011.11.037") + describe "relatedItem" do + it 'has relationType Collects' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relationType"] = "Collects" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'has relationType IsCollectedBy' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relationType"] = "IsCollectedBy" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end end end diff --git a/spec/kernel-4/other_spec.rb b/spec/kernel-4/other_spec.rb index 36654dda..bb153bd4 100644 --- a/spec/kernel-4/other_spec.rb +++ b/spec/kernel-4/other_spec.rb @@ -159,6 +159,46 @@ end end + describe "relatedItemType" do + it 'relatedItemType Instrument' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relatedItemType"] = "Instrument" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'relatedItemType StudyRegistration' do + related_item = doc.search("relatedItems/relatedItem").first + related_item["relatedItemType"] = "StudyRegistration" + element = doc.at("relatedItems/relatedItem") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + end + + describe "relatedIdentifier resourceTypeGeneral" do + it 'relatedIdentifier resourceTypeGeneral Instrument' do + related_item = doc.search("relatedIdentifiers/relatedIdentifier").first + related_item["resourceTypeGeneral"] = "Instrument" + element = doc.at("relatedIdentifiers/relatedIdentifier") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + + it 'relatedIdentifier resourceTypeGeneral StudyRegistration' do + related_item = doc.search("relatedIdentifiers/relatedIdentifier").first + related_item["resourceTypeGeneral"] = "StudyRegistration" + element = doc.at("relatedIdentifiers/relatedIdentifier") + element.replace related_item.to_s + errors = xsd.validate(Nokogiri::XML(doc.to_xml)).map { |error| error.to_s } + expect(errors.length).to eq(0) + end + end + describe "description" do it 'empty descriptions tag' do element = doc.at("descriptions")