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:
Mark Diggory
2007-07-25 16:54:48 +00:00
parent 98fc9b8786
commit 2834ce7642

View File

@@ -40,7 +40,6 @@
package org.dspace.app.oai;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -64,11 +63,18 @@ public class OAIDCCrosswalk extends Crosswalk
// converting a String to xml
private static final Pattern invalidXmlPattern =
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(
"http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd");
super("http://www.openarchives.org/OAI/2.0/oai_dc/ "
+ "http://www.openarchives.org/OAI/2.0/oai_dc.xsd");
}
public boolean isAvailableFor(Object nativeItem)
@@ -98,19 +104,18 @@ public class OAIDCCrosswalk extends Crosswalk
for (int i = 0; i < allDC.length; i++)
{
String element = allDC[i].element;
String qualifier = allDC[i].qualifier;
// Do not include description.provenance
boolean description = allDC[i].element.equals("description");
boolean provenance = (allDC[i].qualifier != null)
&& allDC[i].qualifier.equals("provenance");
boolean provenance = "description".equals(element)
&& "provenance".equals(qualifier);
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'
if (allDC[i].element.equals("contributor")
&& (allDC[i].qualifier != null)
&& allDC[i].qualifier.equals("author"))
if ("contributor".equals(element) && "author".equals(qualifier))
{
element = "creator";
}