mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 07:23:08 +00:00
Guard against output invalid unqualified Dublin Core.
git-svn-id: http://scm.dspace.org/svn/repo/trunk@2095 9c30dcfa-912a-0410-8fc2-9e0234be79fd
This commit is contained in:
@@ -40,7 +40,6 @@
|
|||||||
package org.dspace.app.oai;
|
package org.dspace.app.oai;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.StringTokenizer;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@@ -64,11 +63,18 @@ public class OAIDCCrosswalk extends Crosswalk
|
|||||||
// converting a String to xml
|
// converting a String to xml
|
||||||
private static final Pattern invalidXmlPattern =
|
private static final Pattern invalidXmlPattern =
|
||||||
Pattern.compile("([^\\t\\n\\r\\u0020-\\ud7ff\\ue000-\\ufffd\\u10000-\\u10ffff]+|[&<>])");
|
Pattern.compile("([^\\t\\n\\r\\u0020-\\ud7ff\\ue000-\\ufffd\\u10000-\\u10ffff]+|[&<>])");
|
||||||
|
|
||||||
public OAIDCCrosswalk(Properties properties)
|
// Pattern to test for only true dc elements.
|
||||||
|
private static final Pattern dcElementPattern = Pattern
|
||||||
|
.compile("(^(title|creator|subject|description|"
|
||||||
|
+ "publisher|contributor|date|type|"
|
||||||
|
+ "format|identifier|source|language|"
|
||||||
|
+ "relation|coverage|rights)$)");
|
||||||
|
|
||||||
|
public OAIDCCrosswalk(Properties properties)
|
||||||
{
|
{
|
||||||
super(
|
super("http://www.openarchives.org/OAI/2.0/oai_dc/ "
|
||||||
"http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd");
|
+ "http://www.openarchives.org/OAI/2.0/oai_dc.xsd");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAvailableFor(Object nativeItem)
|
public boolean isAvailableFor(Object nativeItem)
|
||||||
@@ -98,19 +104,18 @@ public class OAIDCCrosswalk extends Crosswalk
|
|||||||
|
|
||||||
for (int i = 0; i < allDC.length; i++)
|
for (int i = 0; i < allDC.length; i++)
|
||||||
{
|
{
|
||||||
|
String element = allDC[i].element;
|
||||||
|
String qualifier = allDC[i].qualifier;
|
||||||
|
|
||||||
// Do not include description.provenance
|
// Do not include description.provenance
|
||||||
boolean description = allDC[i].element.equals("description");
|
boolean provenance = "description".equals(element)
|
||||||
boolean provenance = (allDC[i].qualifier != null)
|
&& "provenance".equals(qualifier);
|
||||||
&& allDC[i].qualifier.equals("provenance");
|
|
||||||
|
|
||||||
if (!(description && provenance))
|
// Include only OAI DC (guard against outputing invalid DC)
|
||||||
|
if (dcElementPattern.matcher(element).matches() && !provenance)
|
||||||
{
|
{
|
||||||
String element = allDC[i].element;
|
|
||||||
|
|
||||||
// contributor.author exposed as 'creator'
|
// contributor.author exposed as 'creator'
|
||||||
if (allDC[i].element.equals("contributor")
|
if ("contributor".equals(element) && "author".equals(qualifier))
|
||||||
&& (allDC[i].qualifier != null)
|
|
||||||
&& allDC[i].qualifier.equals("author"))
|
|
||||||
{
|
{
|
||||||
element = "creator";
|
element = "creator";
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user