Robusteres Hinzufügen der Lizenzinformationen
Folgende CSW Antwort führ zu einem Internal Server Error:
<gmd:resourceConstraints>
<gmd:MD_LegalConstraints>
<gmd:useConstraints>
<gmd:MD_RestrictionCode codeList="http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode" codeListValue="otherRestrictions"/>
</gmd:useConstraints>
<gmd:otherConstraints>
<gco:CharacterString>Creative Commons Namensnennung 4.0 International</gco:CharacterString>
</gmd:otherConstraints>
<gmd:otherConstraints>
<gco:CharacterString>
{"id":"CC BY 4.0","name":"Creative Commons Namensnennung 4.0 International","url":"https://creativecommons.org/licenses/by/4.0/deed.de","quelle":""}
</gco:CharacterString>
</gmd:otherConstraints>
</gmd:MD_LegalConstraints>
</gmd:resourceConstraints>
Fehler:
org.apache.jena.irix.IRIException: <http://dcat-ap.de/def/licenses/CC BY 4.0> Code: 17/WHITESPACE in PATH: A single whitespace character. These match no
grammar rules of URIs/IRIs.
Das Problem ist in https://code.schleswig-holstein.de/opendata/csw2dcat/-/blob/main/src/main/java/de/landsh/opendata/csw2dcat/MDMetadata2Dataset.java?ref_type=heads#L535-546:
private void addLicenseInformation(Resource resource, List<Node> otherLegalConstraints) {
final JSONObject licenceInformation = findLicenseInformation(otherLegalConstraints);
if (licenceInformation != null) {
resource.addLiteral(DCATAPde.licenseAttributionByText, licenceInformation.getString("quelle"));
if (licenceInformation.has("url") && licenceInformation.getString("url").startsWith("http://dcat-ap.de/def/licenses/")) {
// Some publishers specify the licence as the URL and not the id.
resource.addProperty(DCTerms.license, model.createResource(licenceInformation.getString("url")));
} else {
resource.addProperty(DCTerms.license, model.createResource("http://dcat-ap.de/def/licenses/" + licenceInformation.getString("id")));
}
}
}
Da im CSW die url zwar angegeben ist, jedoch keine dcat URI darstellt, wird die ID einfach angehängt. Diese enthält im obigen Beispiel aber Leerzeichen.
Ein Fix könnte ein Abgleich mit der licenses.json sein. Allerdings sind obige URIs zu Lizenzen (https://creativecommons.org/licenses/by/4.0/deed.de
) dort nicht bzw. mit anderen URIs gelistet.