Author: andre
Date: 2010-01-20 21:31:28 +0100 (Wed, 20 Jan 2010)
New Revision: 40643
Modified:
openimages/trunk/src/main/webapp/feeds/oai/index.jspx
Log:
some of OIP-125 OAI-PMH testing errors
Modified: openimages/trunk/src/main/webapp/feeds/oai/index.jspx
===================================================================
--- openimages/trunk/src/main/webapp/feeds/oai/index.jspx 2010-01-20
16:29:36 UTC (rev 40642)
+++ openimages/trunk/src/main/webapp/feeds/oai/index.jspx 2010-01-20
20:31:28 UTC (rev 40643)
@@ -12,8 +12,8 @@
examples of use:
feeds/oai/?verb=Identify
feeds/oai/?verb=ListSets
- feeds/oai/?verb=ListIdentifiers
- feeds/oai/?verb=ListRecords&set=lastuploaded
+ feeds/oai/?verb=ListIdentifiers&metadataPrefix=oai_dc
+ feeds/oai/?verb=ListRecords&metadataPrefix=oai_dc&set=lastuploaded
feeds/oai/?verb=GetRecord&identifier=oai:openimages.eu:4983
-->
@@ -21,38 +21,63 @@
<mm:import id="max">100</mm:import>
<mm:import id="offset">0</mm:import>
- <mm:import externid="verb">Identify</mm:import>
+ <mm:import externid="verb" />
<mm:import externid="identifier" />
- <mm:import externid="metadataPrefix">oai_dc</mm:import><!-- e.g. oai_dc -->
- <mm:import externid="set">lastuploaded</mm:import><!-- e.g. lastuploaded -->
+ <mm:import externid="metadataPrefix" />
+ <mm:import externid="set" />
- <!-- resumptionToken, looks like: !f1969-07-21!u2003-08-18!oai_dc!200 -->
- <mm:import externid="resumptionToken" /><!-- starts at 0 -->
- <mm:present referid="resumptionToken">
- <c:set var="tokens" value="${fn:split(resumptionToken, '!')}" />
- <c:if test="${fn:length(tokens) eq 4}">
- <c:set var="tfrom" value="${fn:substringAfter(tokens[0], 'f')}" />
- <c:set var="tuntil" value="${fn:substringAfter(tokens[1], 'u')}" />
- <c:if test="${!empty tfrom}">
- <mm:time inputformat="yyyy-MM-dd" time="${tfrom}" precision="days"
id="start" write="false" />
- </c:if>
- <c:if test="${!empty tuntil}">
- <mm:time inputformat="yyyy-MM-dd" time="${tuntil}" precision="days"
id="end" write="false" />
- </c:if>
- <mm:import id="metadataPrefix" reset="true">${tokens[2]}</mm:import>
- <mm:import id="offset" reset="true">${tokens[3]}</mm:import>
- </c:if>
- </mm:present>
-
<mm:import externid="from" /><!-- 1998-01-15 -->
<mm:present referid="from">
- <mm:time inputformat="yyyy-MM-dd" time="$from" precision="days" id="start"
write="false" />
+ <mm:compare referid="from" regexp="[0-9]{4}-[0-9]{2}-[0-9]{2}">
+ <mm:time inputformat="yyyy-MM-dd" time="$from" precision="days"
id="start" write="false" />
+ </mm:compare>
+ <mm:compare referid="from" regexp="[0-9]{4}-[0-9]{2}-[0-9]{2}"
inverse="true">
+ <c:set var="error" value="badArgument" />
+ </mm:compare>
</mm:present>
<mm:import externid="until" />
<mm:present referid="until">
- <mm:time inputformat="yyyy-MM-dd" time="$until" precision="days" id="end"
write="false" />
+ <mm:compare referid="until" regexp="[0-9]{4}-[0-9]{2}-[0-9]{2}">
+ <mm:time inputformat="yyyy-MM-dd" time="$until" precision="days"
id="end" write="false" />
+ </mm:compare>
+ <mm:compare referid="until" regexp="[0-9]{4}-[0-9]{2}-[0-9]{2}"
inverse="true">
+ <c:set var="error" value="badArgument" />
+ </mm:compare>
</mm:present>
+ <!-- resumptionToken, looks like: !f1969-07-21!u2003-08-18!oai_dc!200 -->
+ <mm:import externid="resumptionToken" /><!-- starts at 0 -->
+ <c:choose>
+ <c:when test="${!empty resumptionToken}">
+ <c:if test="${!empty from or !empty until or !empty metadataPrefix or
!empty set}">
+ <c:set var="error" value="badArgument" />
+ </c:if>
+ <c:set var="tokens" value="${fn:split(resumptionToken, '!')}" />
+ <c:choose>
+ <c:when test="${fn:length(tokens) eq 4}">
+ <c:set var="tfrom" value="${fn:substringAfter(tokens[0], 'f')}" />
+ <c:set var="tuntil" value="${fn:substringAfter(tokens[1], 'u')}" />
+ <c:if test="${!empty tfrom}">
+ <mm:time inputformat="yyyy-MM-dd" time="${tfrom}"
precision="days" id="start" write="false" />
+ </c:if>
+ <c:if test="${!empty tuntil}">
+ <mm:time inputformat="yyyy-MM-dd" time="${tuntil}"
precision="days" id="end" write="false" />
+ </c:if>
+ <mm:import id="metadataPrefix" reset="true">${tokens[2]}</mm:import>
+ <mm:import id="offset" reset="true">${tokens[3]}</mm:import>
+ </c:when>
+ <c:otherwise>
+ <c:set var="error" value="badResumptionToken" />
+ </c:otherwise>
+ </c:choose>
+ </c:when>
+ <c:otherwise>
+ <c:if test="${empty metadataPrefix and (verb eq 'ListIdentifiers' or
verb eq 'ListRecords' or verb eq 'GetRecord')}">
+ <c:set var="error" value="badArgument" />
+ </c:if>
+ </c:otherwise>
+ </c:choose>
+
<!-- get the nodenumber from the identifier, f.e. oai:openimages.eu:746 -->
<mm:import id="record" />
<c:if test="${!empty identifier}">
@@ -60,6 +85,18 @@
<c:set var="len" value="${fn:length(pieces)}" />
<mm:import id="record" reset="true">${pieces[len - 1]}</mm:import>
</c:if>
+
+ <!-- fill parameters when empty -->
+ <c:choose>
+ <c:when test="${!empty metadataPrefix and metadataPrefix ne 'oai_dc'}">
+ <c:set var="error" value="badArgument" />
+ </c:when>
+ <c:otherwise>
+ <c:set var="metadataPrefix">oai_dc</c:set>
+ </c:otherwise>
+ </c:choose>
+ <c:if test="${empty verb}"><c:set var="verb">Identify</c:set></c:if>
+ <c:if test="${empty set}"><c:set var="set">lastuploaded</c:set></c:if>
<OAI-PMH
xmlns="http://www.openarchives.org/OAI/2.0/"
@@ -71,6 +108,19 @@
</responseDate>
<c:choose>
+ <c:when test="${error eq 'badArgument'}">
+ <request>${requesturl}</request>
+ <error code="badArgument">
+ The request includes illegal arguments, is missing required
arguments,
+ includes a repeated argument, or values for arguments have an
illegal syntax.
+ </error>
+ </c:when>
+ <c:when test="${error eq 'badResumptionToken'}">
+ <request>${requesturl}</request>
+ <error code="badResumptionToken">
+ The value of the resumptionToken argument is invalid or expired.
+ </error>
+ </c:when>
<c:when test="${verb eq 'Identify'}">
<request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
<Identify>
@@ -78,9 +128,9 @@
<baseURL><mm:url page="/" absolute="true" /></baseURL>
<protocolVersion>2.0</protocolVersion>
<adminEmail>[email protected]</adminEmail>
- <earliestDatestamp>1919-01-01T00:00:00Z</earliestDatestamp>
+ <earliestDatestamp>1919-01-01</earliestDatestamp>
<deletedRecord>no</deletedRecord>
- <granularity>YYYY-MM-DDThh:mm:ssZ</granularity>
+ <granularity>YYYY-MM-DD</granularity>
<description>
<oai-identifier
xmlns="http://www.openarchives.org/OAI/2.0/oai-identifier"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai-identifier
http://www.openarchives.org/OAI/2.0/oai-identifier.xsd">
<scheme>oai</scheme>
@@ -139,25 +189,28 @@
</c:otherwise>
</c:choose>
+ <mm:listnodescontainer type="mediafragments">
+ <mm:constraint field="show" value="true" operator="EQUAL" />
+ <c:if test="${!empty start}">
+ <mm:constraint field="date" value="$start"
operator="GREATER_EQUAL" />
+ </c:if>
+ <c:if test="${!empty end}">
+ <mm:constraint field="date" value="$end" operator="LESS_EQUAL" />
+ </c:if>
+ <mm:sortorder field="number" direction="DOWN" />
+ <mm:size id="size" write="false" />
+ <mm:maxnumber value="$max" />
+ <mm:offset value="$offset" />
+ <mm:size id="foundsome" write="false" />
+ <mm:listnodes id="list" />
+ </mm:listnodescontainer>
+
<c:choose>
- <c:when test="${verb eq 'ListIdentifiers'}">
+ <c:when test="${foundsome gt 0 and verb eq 'ListIdentifiers'}">
<ListIdentifiers>
- <mm:listnodescontainer type="mediafragments">
- <mm:constraint field="show" value="true" operator="EQUAL" />
- <c:if test="${!empty start}">
- <mm:constraint field="date" value="$start"
operator="GREATER_EQUAL" />
- </c:if>
- <c:if test="${!empty end}">
- <mm:constraint field="date" value="$end"
operator="LESS_EQUAL" />
- </c:if>
- <mm:sortorder field="number" direction="DOWN" />
- <mm:size id="size" write="false" />
- <mm:maxnumber value="$max" />
- <mm:offset value="$offset" />
- <mm:listnodes>
- <jsp:include page="/feeds/inc/oai.record.header.jspx" />
- </mm:listnodes>
- </mm:listnodescontainer>
+ <mm:listnodes referid="list">
+ <jsp:include page="/feeds/inc/oai.record.header.jspx" />
+ </mm:listnodes>
<c:if test="${(offset + max) lt size}">
<resumptionToken
completeListSize="${size}"
@@ -165,32 +218,26 @@
</c:if>
</ListIdentifiers>
</c:when>
- <c:otherwise>
+ <c:when test="${foundsome gt 0 and verb eq 'ListRecords'}">
<ListRecords>
- <mm:listnodescontainer type="mediafragments">
- <mm:constraint field="show" value="true" operator="EQUAL" />
- <c:if test="${!empty start}">
- <mm:constraint field="date" value="$start"
operator="GREATER_EQUAL" />
- </c:if>
- <c:if test="${!empty end}">
- <mm:constraint field="date" value="$end"
operator="LESS_EQUAL" />
- </c:if>
- <mm:sortorder field="number" direction="DOWN" />
- <mm:size id="size" write="false" />
- <mm:maxnumber value="$max" />
- <mm:offset value="$offset" />
- <mm:listnodes>
- <jsp:include page="/feeds/inc/oai.record.jspx" />
- </mm:listnodes>
- </mm:listnodescontainer>
+ <mm:listnodes referid="list">
+ <jsp:include page="/feeds/inc/oai.record.jspx" />
+ </mm:listnodes>
<c:if test="${(offset + max) lt size}">
<resumptionToken
completeListSize="${size}"
cursor="${offset}">!f${from}!u${until}!${metadataPrefix}!${offset +
max}</resumptionToken>
</c:if>
</ListRecords>
+ </c:when>
+ <c:otherwise>
+ <error code="noRecordsMatch">
+ The combination of the values of the from, until, set
+ and metadataPrefix arguments results in an empty list.
+ </error>
</c:otherwise>
</c:choose>
+
</c:when>
<!-- GetRecord -->
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs