From 67882ff7add249d340715f7f3b0ae364692ee1a0 Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Wed, 15 Nov 2017 19:41:05 -0500 Subject: [PATCH] the ld json fragment should now be structured as specified in the issue #2243. --- .../harvard/iq/dataverse/DatasetVersion.java | 66 ++++++++++++------- .../iq/dataverse/util/SystemConfig.java | 4 ++ .../iq/dataverse/DatasetVersionTest.java | 4 +- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index 6e53e4d8614..33ab239e5a7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -3,8 +3,10 @@ import edu.harvard.iq.dataverse.util.MarkupChecker; import edu.harvard.iq.dataverse.DatasetFieldType.FieldType; import edu.harvard.iq.dataverse.util.StringUtil; +import edu.harvard.iq.dataverse.util.SystemConfig; import edu.harvard.iq.dataverse.workflows.WorkflowComment; import java.io.Serializable; +import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -778,7 +780,7 @@ public List getDatasetSubjects() { * @return List of Strings containing the version's Topic Classifications */ public List getTopicClassifications() { - List topicClassifications = new ArrayList<>(); + List topics = new ArrayList<>(); for (DatasetField dsf : this.getDatasetFields()) { if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.topicClassification)) { for (DatasetFieldCompoundValue topicClassValue : dsf.getDatasetFieldCompoundValues()) { @@ -789,14 +791,14 @@ public List getTopicClassifications() { // - in the ideal world. But as we are realizing, they CAN // be null in real life databases. So, a check, just in case: if (!StringUtil.isEmpty(topic)) { - topicClassifications.add(subField.getValue()); + topics.add(subField.getValue()); } } } } } } - return topicClassifications; + return topics; } /** @@ -1226,13 +1228,13 @@ public String getJsonLd() { return ""; } - /*if (jsonLd != null) { + if (jsonLd != null) { return jsonLd; - }*/ + } JsonObjectBuilder job = Json.createObjectBuilder(); job.add("@context", "http://schema.org"); job.add("@type", "Dataset"); - job.add("@id", this.getDataset().getPersistentURL()); + job.add("@identifier", this.getDataset().getPersistentURL()); job.add("name", this.getTitle()); JsonArrayBuilder authors = Json.createArrayBuilder(); for (DatasetAuthor datasetAuthor : this.getDatasetAuthors()) { @@ -1263,6 +1265,7 @@ public String getJsonLd() { */ job.add("dateModified", this.getPublicationDateAsString()); job.add("version", this.getVersionNumber().toString()); + job.add("description", this.getDescriptionPlainText()); /** * "keywords" - contains subject(s), datasetkeyword(s) and topicclassification(s) * metadata fields for the version. -- L.A. @@ -1270,17 +1273,17 @@ public String getJsonLd() { */ JsonArrayBuilder keywords = Json.createArrayBuilder(); - this.getDatasetSubjects().forEach((subjects) -> { - keywords.add(subjects); - }); + for (String subject : this.getDatasetSubjects()) { + keywords.add(subject); + } - this.getTopicClassifications().forEach((topics) -> { - keywords.add(topics); - }); + for (String topic : this.getTopicClassifications()) { + keywords.add(topic); + } - this.getKeywords().forEach((keywordValues) -> { - keywords.add(keywordValues); - }); + for (String keyword : this.getKeywords()) { + keywords.add(keyword); + } job.add("keywords", keywords); @@ -1308,21 +1311,40 @@ public String getJsonLd() { } /** - * spatialCoverage: - * (if available) + * spatialCoverage (if available) * TODO + * (punted, for now - see #2243) + * */ /** - * "funder": + * funder (if available) * TODO - * (see 2243 for info on how to format -- L.A.) - */ + * (punted, for now - see #2243) + */ job.add("schemaVersion", "https://schema.org/version/3.3"); - job.add("publisher", Json.createObjectBuilder() - .add("@type", "Organization") + + TermsOfUseAndAccess terms = this.getTermsOfUseAndAccess(); + if (terms != null) { + if (TermsOfUseAndAccess.License.CC0.equals(terms.getLicense())) { + job.add("license", Json.createObjectBuilder() + .add("@type", "Dataset") + .add("text", "CC0") + .add("url", "https://creativecommons.org/publicdomain/zero/1.0/") + ); + + } else { + job.add("license", Json.createObjectBuilder() + .add("text", terms.getTermsOfUse()) + ); + } + } + + job.add("includedInDataCatalog", Json.createObjectBuilder() + .add("@type", "DataCatalog") .add("name", this.getRootDataverseNameforCitation()) + .add("url", SystemConfig.getDataverseSiteUrlStatic()) ); job.add("provider", Json.createObjectBuilder() diff --git a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java index ee26d1e19c5..76f3bc31c65 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java @@ -275,6 +275,10 @@ public static int getMinutesUntilPasswordResetTokenExpires() { * by the Settings Service configuration. */ public String getDataverseSiteUrl() { + return getDataverseSiteUrlStatic(); + } + + public static String getDataverseSiteUrlStatic() { String hostUrl = System.getProperty(SITE_URL); if (hostUrl != null && !"".equals(hostUrl)) { return hostUrl; diff --git a/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java b/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java index 12550f14665..3c52cb2af0b 100644 --- a/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java @@ -121,7 +121,7 @@ public void testGetJsonLd() throws ParseException { JsonObject obj = jsonReader.readObject(); assertEquals("http://schema.org", obj.getString("@context")); assertEquals("Dataset", obj.getString("@type")); - assertEquals("http://dx.doi.org/10.5072/FK2/LK0D1H", obj.getString("@id")); + assertEquals("http://dx.doi.org/10.5072/FK2/LK0D1H", obj.getString("@identifier")); assertEquals("https://schema.org/version/3.3", obj.getString("schemaVersion")); assertEquals("1955-11-05", obj.getString("dateModified")); assertEquals("1955-11-05", obj.getString("datePublished")); @@ -134,7 +134,7 @@ public void testGetJsonLd() throws ParseException { // TODO: If it ever becomes easier to mock subjects, test them. assertEquals(emptyArray, obj.getJsonArray("keywords")); assertEquals("Dataverse", obj.getJsonObject("provider").getString("name")); - assertEquals("LibraScholar", obj.getJsonObject("publisher").getString("name")); + assertEquals("LibraScholar", obj.getJsonObject("includedInDataCatalog").getString("name")); assertEquals(datasetVersion.getCitation(), obj.getJsonObject("citation").getString("text")); }