Author: andre
Date: 2010-05-10 16:20:08 +0200 (Mon, 10 May 2010)
New Revision: 42128
Modified:
openimages/trunk/src/main/webapp/feeds/oai/index.jspx
Log:
added mm:cloud tag since some methods in MediaProviders need that for request
object, prevents 'The request object has been recycled and is no longer
associated with this facade' error
Modified: openimages/trunk/src/main/webapp/feeds/oai/index.jspx
===================================================================
--- openimages/trunk/src/main/webapp/feeds/oai/index.jspx 2010-05-10
14:10:56 UTC (rev 42127)
+++ openimages/trunk/src/main/webapp/feeds/oai/index.jspx 2010-05-10
14:20:08 UTC (rev 42128)
@@ -7,272 +7,272 @@
xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
<jsp:directive.page session="false" />
-
-<!--
-examples of use:
- feeds/oai/?verb=Identify
- feeds/oai/?verb=ListSets
- 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
--->
-
- <mm:import id="requesturl"><c:out value="${pageContext.request.requestURL}"
/><c:if test="${!empty pageContext.request.queryString}">?<c:out
value="${pageContext.request.queryString}" /></c:if></mm:import>
- <mm:import id="max">100</mm:import>
- <mm:import id="offset">0</mm:import>
-
- <mm:import externid="verb" />
- <mm:import externid="identifier" />
- <mm:import externid="metadataPrefix" />
- <mm:import externid="set" />
+ <!--
+ examples of use:
+ feeds/oai/?verb=Identify
+ feeds/oai/?verb=ListSets
+ 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
+ -->
+ <mm:cloud>
+ <mm:import id="requesturl"><c:out
value="${pageContext.request.requestURL}" /><c:if test="${!empty
pageContext.request.queryString}">?<c:out
value="${pageContext.request.queryString}" /></c:if></mm:import>
+ <mm:import id="max">100</mm:import>
+ <mm:import id="offset">0</mm:import>
- <mm:import externid="from" /><!-- 1998-01-15 -->
- <mm:present referid="from">
- <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: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}">
+ <mm:import externid="verb" />
+ <mm:import externid="identifier" />
+ <mm:import externid="metadataPrefix" />
+ <mm:import externid="set" />
+
+ <mm:import externid="from" /><!-- 1998-01-15 -->
+ <mm:present referid="from">
+ <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" />
- </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')}">
+ </mm:compare>
+ </mm:present>
+ <mm:import externid="until" />
+ <mm:present referid="until">
+ <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" />
- </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}">
- <c:set var="pieces" value="${fn:split(identifier, ':')}" />
- <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/"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+ </mm:compare>
+ </mm:present>
- <responseDate>
- <mm:time format="yyyy-MM-dd" time="now" />T<mm:time format="HH:mm:ss"
time="now" />Z
- </responseDate>
-
+ <!-- resumptionToken, looks like: !f1969-07-21!u2003-08-18!oai_dc!200 -->
+ <mm:import externid="resumptionToken" /><!-- starts at 0 -->
<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>
- <repositoryName>Open Images Platform</repositoryName>
- <baseURL><mm:url page="/" absolute="true" /></baseURL>
- <protocolVersion>2.0</protocolVersion>
- <adminEmail>[email protected]</adminEmail>
- <earliestDatestamp>1919-01-01</earliestDatestamp>
- <deletedRecord>no</deletedRecord>
- <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>
- <repositoryIdentifier>openimages.eu</repositoryIdentifier>
- <delimiter>:</delimiter>
- <sampleIdentifier>oai:openimages.eu:4983</sampleIdentifier>
- </oai-identifier>
- </description>
- </Identify>
- </c:when>
-
- <c:when test="${verb eq 'ListMetadataFormats'}">
- <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
- <ListMetadataFormats>
- <metadataFormat>
- <metadataPrefix>oai_dc</metadataPrefix>
- <schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema>
-
<metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace>
- </metadataFormat>
- </ListMetadataFormats>
- </c:when>
-
- <c:when test="${verb eq 'ListSets'}">
- <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
- <ListSets>
- <set>
- <setSpec>lastuploaded</setSpec>
- <setName>Last uploaded media items</setName>
- </set>
- </ListSets>
- </c:when>
-
- <!-- ListIdentifiers + ListRecords -->
- <c:when test="${verb eq 'ListIdentifiers' or verb eq 'ListRecords'}">
-
+ <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="${!empty resumptionToken}">
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
- set="${set}"
resumptionToken="${resumptionToken}">${requesturl}</request>
+ <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:when test="${!empty from and !empty until}">
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
- set="${set}" from="${from}"
until="${until}">${requesturl}</request>
- </c:when>
- <c:when test="${!empty from and empty until}">
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
- set="${set}" from="${from}">${requesturl}</request>
- </c:when>
- <c:when test="${empty from and !empty until}">
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
- set="${set}" until="${until}">${requesturl}</request>
- </c:when>
<c:otherwise>
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
- set="${set}">${requesturl}</request>
+ <c:set var="error" value="badResumptionToken" />
</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="${foundsome gt 0 and verb eq 'ListIdentifiers'}">
- <ListIdentifiers>
- <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}"
-
cursor="${offset}">!f${from}!u${until}!${metadataPrefix}!${offset +
max}</resumptionToken>
- </c:if>
- </ListIdentifiers>
- </c:when>
- <c:when test="${foundsome gt 0 and verb eq 'ListRecords'}">
- <ListRecords>
- <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 -->
- <c:when test="${verb eq 'GetRecord'}">
-
- <request verb="${verb}" metadataPrefix="${metadataPrefix}"
identifier="${identifier}">${requesturl}</request>
-
- <mm:hasnode number="${record}">
- <mm:node number="${record}">
- <mm:nodeinfo type="type" id="nodetype" write="false" />
- <c:if test="${nodetype eq 'mediafragments'
- or nodetype eq 'audiofragments'
- or nodetype eq 'videofragments'
- or nodetype eq 'imagefragments'
- or nodetype eq 'images'
- }">
- <GetRecord>
- <jsp:include page="/feeds/inc/oai.record.jspx" />
- </GetRecord>
- <c:set var="foundone" value="yes" />
- </c:if>
- </mm:node>
- </mm:hasnode>
-
- <c:if test="${empty foundone}">
- <error code="idDoesNotExist">No matching identifier</error>
+ <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}">
+ <c:set var="pieces" value="${fn:split(identifier, ':')}" />
+ <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>
- <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
+ <c:set var="metadataPrefix">oai_dc</c:set>
</c:otherwise>
-
</c:choose>
-
-
- </OAI-PMH>
+ <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/"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
+
+ <responseDate>
+ <mm:time format="yyyy-MM-dd" time="now" />T<mm:time format="HH:mm:ss"
time="now" />Z
+ </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>
+ <repositoryName>Open Images Platform</repositoryName>
+ <baseURL><mm:url page="/" absolute="true" /></baseURL>
+ <protocolVersion>2.0</protocolVersion>
+ <adminEmail>[email protected]</adminEmail>
+ <earliestDatestamp>1919-01-01</earliestDatestamp>
+ <deletedRecord>no</deletedRecord>
+ <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>
+ <repositoryIdentifier>openimages.eu</repositoryIdentifier>
+ <delimiter>:</delimiter>
+ <sampleIdentifier>oai:openimages.eu:4983</sampleIdentifier>
+ </oai-identifier>
+ </description>
+ </Identify>
+ </c:when>
+
+ <c:when test="${verb eq 'ListMetadataFormats'}">
+ <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
+ <ListMetadataFormats>
+ <metadataFormat>
+ <metadataPrefix>oai_dc</metadataPrefix>
+ <schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema>
+
<metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace>
+ </metadataFormat>
+ </ListMetadataFormats>
+ </c:when>
+
+ <c:when test="${verb eq 'ListSets'}">
+ <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
+ <ListSets>
+ <set>
+ <setSpec>lastuploaded</setSpec>
+ <setName>Last uploaded media items</setName>
+ </set>
+ </ListSets>
+ </c:when>
+
+ <!-- ListIdentifiers + ListRecords -->
+ <c:when test="${verb eq 'ListIdentifiers' or verb eq 'ListRecords'}">
+
+ <c:choose>
+ <c:when test="${!empty resumptionToken}">
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
+ set="${set}"
resumptionToken="${resumptionToken}">${requesturl}</request>
+ </c:when>
+ <c:when test="${!empty from and !empty until}">
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
+ set="${set}" from="${from}"
until="${until}">${requesturl}</request>
+ </c:when>
+ <c:when test="${!empty from and empty until}">
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
+ set="${set}" from="${from}">${requesturl}</request>
+ </c:when>
+ <c:when test="${empty from and !empty until}">
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
+ set="${set}" until="${until}">${requesturl}</request>
+ </c:when>
+ <c:otherwise>
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
+ set="${set}">${requesturl}</request>
+ </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="${foundsome gt 0 and verb eq 'ListIdentifiers'}">
+ <ListIdentifiers>
+ <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}"
+
cursor="${offset}">!f${from}!u${until}!${metadataPrefix}!${offset +
max}</resumptionToken>
+ </c:if>
+ </ListIdentifiers>
+ </c:when>
+ <c:when test="${foundsome gt 0 and verb eq 'ListRecords'}">
+ <ListRecords>
+ <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 -->
+ <c:when test="${verb eq 'GetRecord'}">
+
+ <request verb="${verb}" metadataPrefix="${metadataPrefix}"
identifier="${identifier}">${requesturl}</request>
+
+ <mm:hasnode number="${record}">
+ <mm:node number="${record}">
+ <mm:nodeinfo type="type" id="nodetype" write="false" />
+ <c:if test="${nodetype eq 'mediafragments'
+ or nodetype eq 'audiofragments'
+ or nodetype eq 'videofragments'
+ or nodetype eq 'imagefragments'
+ or nodetype eq 'images'
+ }">
+ <GetRecord>
+ <jsp:include page="/feeds/inc/oai.record.jspx" />
+ </GetRecord>
+ <c:set var="foundone" value="yes" />
+ </c:if>
+ </mm:node>
+ </mm:hasnode>
+
+ <c:if test="${empty foundone}">
+ <error code="idDoesNotExist">No matching identifier</error>
+ </c:if>
+ </c:when>
+
+ <c:otherwise>
+ <request verb="${verb}"
metadataPrefix="${metadataPrefix}">${requesturl}</request>
+ </c:otherwise>
+
+ </c:choose>
+
+
+ </OAI-PMH>
+ </mm:cloud>
</mm:content>
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs