Ticket #181 (closed defect: fixed)

Opened 4 years ago

Last modified 3 years ago

OAI valideert niet correct

Reported by: Michiel.Schok Owned by: Frans
Priority: major Milestone: MediaMosa 2.2
Component: Core Version:
Keywords: Cc:
MoSCoW: Must Have Estimated time after impact analysis:
Related to project: none Tested: yes
Accepted: yes Estimated Hours: 12

Description

Bij validatie van de OAI op de site van OpenArchive? (  http://www.openarchives.org/data/registerasprovider.html ) wordt de OAI van SURFmedia probleemloos door ronde 1 gestuurd, waarbij de 'Identify' wordt geanalyseerd op correctheid en bruikbaarheid.

Fase 2 levert echter nog problemen op. Hieronder copy/paste de e-mail die werd verstuurd door OpenArchive?.
Details ook online op  http://www.openarchives.org/Register/ValidateSite?log=29515

We received a request to validate (but not register) the following repository:

Base URL: http://oai.surfmedia.nl/request
adminEmail: surfmedia-beheer@surfnet.nl

Complete log available at
http://www.openarchives.org/Register/ValidateSite?log=29515

...............................................................................

Unfortunately your repository did not validate at version 2.0 of the OAI-PMH
according to our OAI protocol conformance tester. The errors received during
testing are listed below.

[1] Response to http://oai.surfmedia.nl/request?verb=ListSets has a
responseDate of 2009-10-29T14:28:36+01:00, which is not in UTC DateTime
(YYYY-MM-DDThh:mm:ssZ) format.

[2] Response to
http://oai.surfmedia.nl/request?verb=ListIdentifiers&metadataPrefix=oai_dc has
a responseDate of 2009-10-29T14:28:37+01:00, which is not in UTC DateTime
(YYYY-MM-DDThh:mm:ssZ) format.

[3] Response to
http://oai.surfmedia.nl/request?verb=ListMetadataFormats&identifier=oai%3Asurfmedia%3A313
has a responseDate of 2009-10-29T14:28:46+01:00, which is not in UTC DateTime
(YYYY-MM-DDThh:mm:ssZ) format.

[4] Response to
http://oai.surfmedia.nl/request?verb=GetRecord&identifier=oai%3Asurfmedia%3A313&metadataPrefix=oai_dc
has a responseDate of 2009-10-29T14:28:47+01:00, which is not in UTC DateTime
(YYYY-MM-DDThh:mm:ssZ) format.

[5] Failed to extract responseDate

[6] ListRecords response gave a noRecordsMatch error when it should have
included at least the record with identifier oai:surfmedia:313. The from and
until parameters of the request were set to the datestamp of this record
(2004-09-10). The from and until parameters are inclusive, see protocol spec
section 2.7.1. The message included in the error response was: 'The
combination of the values of the from, until, set and metadataPrefix arguments
results in an empty list.'

[7] Response to this request did not give error code 'badArgument':
verb=ListRecords

[Warning] Only 12 out of 13 error requests properly handled

[8] Error code badArgument should be given to the request:
verb=ListRecords&metadataPrefix=oai_dc&from=2002-02-05&until=2002-02-06T05:35:00Z
The request has different granularities for the from and until parameters.

[9] POST test 1 was unsuccessful. Response to Identify was:
<?xml version="1.0" encoding="UTF-8"?>
<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"><error code="badVerb"> is not
a valid
verb</error><request>http://oai.surfmedia.nl/request</request></OAI-PMH>

[10] POST test 2 was unsuccessful. Response to Identify was:
<?xml version="1.0" encoding="UTF-8"?>
<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"><error code="badVerb"> is not
a valid
verb</error><request>http://oai.surfmedia.nl/request</request></OAI-PMH>


SUMMARY:

Total exceptions improperly handled: 8 out of 15
Total error count: 10

...............................................................................

To help find your errors, you might use Hussein Suleman's Repository Explorer
at <http://purl.org/net/oai_explorer>. Note that the Repository Explorer has
less stringent tests than this validation service but provides a very
convenient way to examine and navigate OAI responses.

If you wish to rerun the validation tests, you may do so by accessing the
following URL:

http://www.openarchives.org/Register/ValidateSite?c=7OEVMQ5H

If there is something you do not understand about these validation tests or
something you think is in error, please email openarchives@openarchives.org.

The OAI validation service is supported through NSF award number 0127308.


Attachments

feedback-kennisnet-vpcore-oai.doc Download (29.5 KB) - added by Marc Pluijmaekers 3 years ago.
feedback Kennisnet OAI VP-Core
VP-Core OAI output.doc Download (33.5 KB) - added by Marc Pluijmaekers 3 years ago.
VP-Core OAI output

Change History

Changed 4 years ago by Frans

  • priority changed from minor to major
  • milestone changed from MediaMosa X.X to MediaMosa 2.1

Changed 3 years ago by Frans

  • moscow set to Should Have

Changed 3 years ago by Frans

  • moscow changed from Should Have to Must Have
  • milestone changed from MediaMosa 2.1 to MediaMosa 2.2

Changed 3 years ago by robert

  • estimated_hours set to 12

Changed 3 years ago by rklein

Net met Wim, onze OAI guru overlegd en hij kwam met de volgende zaken.

De OpenArchives? validator valideert alleen de OAI provider zelf, inhoudelijk checkt deze niet de gebruikte metadata standaarden. Uiteraard moet de OAI valide zijn, echter ook de metadata. Vandaar dat we de volgende validator mee kunnen geven voor het CZP profiel:  http://contentketen.kennisnet.nl/validatie/czp

De OAI output moet per definitie correct gevalideerd worden alvorens er geaccepteerd kan worden. Vervolgens zal er nog een handmatige controle door Wim moeten plaatsvinden om de business rules te valideren.

Uiteraard is Wim altijd via Marc of ik te benaderen voor vragen omtrent OAI implementaties.

Changed 3 years ago by rklein

Overigens nog een OAI validator:  http://ariadne.cs.kuleuven.be/validationService/validateOaiTarget.jsp
Vul bij metadata format "IMS" in.

Changed 3 years ago by robert

  • owner set to forgacs
  • status changed from new to assigned

Changed 3 years ago by forgacs

  • owner changed from forgacs to marc

Validation 1 & 2:
 http://www.openarchives.org/data/registerasprovider.html
 http://ariadne.cs.kuleuven.be/validationService/validateOaiTarget.jsp
Ready. It needs additional tests after deploying the new version of OAI.

Validation 3:
 http://contentketen.kennisnet.nl/validatie/czp
It has errors, like this:

: regel: 6,karakter: 280
Het element 'czp:rights' is ongeldig. Een van '{"http://www.imsglobal.org/xsd/imsmd_v1p2":educational}' wordt verwacht.
Voor meer informatie, zie: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type

I have checked the code and the generated XML and they seem good and they seem follow the CZP specification. I need more information about what should I change or implement.

Changed 3 years ago by MC-arjen

discussie materiaal voor de telefonische conf call zodirect:

DC
====

-------------------------------------------------------------------------------------------------------
field                 | OAI current          | OAI development      | Remark
-------------------------------------------------------------------------------------------------------
contributor           | NO                   | YES: dc:contributor  |
coverage_spatial      | NO                   | YES: dc:coverage     | Together with "coverage_temporal"
coverage_temporal     | NO                   | YES: dc:coverage     | Together with "coverage_spatial"
creator               | YES  dc:creator      |                      |
date                  | YES: dc:date         |                      |
description           | YES: dc:description  |                      |
format                | NO                   | YES: dc:format       |
identifier            | YES: dc:identifier   |                      | This is the ega_view_url (or identifier metadata, or ega_stream_url)
language              | YES: dc:language     |                      |
publisher             | YES: dc:publisher    |                      |
relation              | NO                   | YES: dc:relation     |
rights                | YES: dc:rights       |                      |
source                | NO                   | YES: dc:source       |
subject               | NO                   | YES: dc:subject      |
title                 | YES: dc:title        |                      |
type                  | YES: dc:type         |                      | If empty, then "Video"
-------------------------------------------------------------------------------------------------------


QDC
=====

-------------------------------------------------------------------------------------------------------
field                 | OAI current          | OAI development      | Remark
-------------------------------------------------------------------------------------------------------
contributor           | NO                   | YES: dc:contributor  |
coverage_spatial      | YES !!!              | YES                  |
                        The old value was dcterms:spatial / dcterms:coverage / dcterms:value.
                        The new value is dc:coverage together with "coverage_temporal".
                        And dcterms:spatial independently.
coverage_temporal     | NO                   | YES                  |
                        The new value is dc:coverage together with "coverage_spatial".
                        And dcterms:temporal independently.
creator               | YES  dc:creator      |                      |
date                  | YES: dc:date         |                      |
description           | YES: dc:description  |                      |
format                | NO                   | YES: dc:format       | The code had a format value generated using ega_still_url. Now the output is the format metadata.
identifier            | YES: dc:identifier   |                      | This is the ega_view_url (or identifier metadata, or ega_stream_url)
language              | YES: dc:language     |                      |
publisher             | YES: dc:publisher    |                      |
relation              | NO                   | YES: dc:relation     |
rights                | YES: dc:rights       |                      |
source                | NO                   | YES: dc:source       |
subject               | YES: dc:subject      |                      |
title                 | YES: dc:title        |                      |
type                  | YES: dc:type         |                      | If empty, then "Video"
-------------------------------------------------------------------------------------------------------
created               | YES: dcterms:created |                      |
description_abstract  | YES: dcterms:abstract|                      |
format_extent         | NO                   | YES: dcterms:extent  |
format_medium         | NO                   | YES: dcterms:medium  |
hasformat             | NO                   |                      | The OAI hasformat field is generated by OAI using asset_id and mediafile_id
isformatof            | NO                   |                      | The OAI isformatof field is generated by OAI using asset_id
isreferencedby        | YES: dcterms:isReferencedBy                 | OAI makes a complet OAI path using the isreferencedby value
issued                | YES: dcterms:issued  |                      |
license               | NO                   |                      | This field is not exists in the QDC specification.
rightsholder          | NO                   |                      | This field is not exists in the QDC specification.
title_alternative     | YES: dcterms:alternative                    |
-------------------------------------------------------------------------------------------------------


CZP
=====

---------------------------------------------
field                 | OAI
--- According to Mediamosa ------------------
aggregatieniveau      | YES
auteursrechten        | NO
beoogde_eindgebruiker | YES (this is the "intendedenduserrole")
beoogde_leeftijdsgroep| YES (this is the "typicalagerange")
beschrijving          | NO
classificatie         | YES
context               | YES (and "taxonpath / taxon")
identificatiecode     | NO
kosten                | NO
omschrijving_rechten  | NO
schemanaam            | NO
sleutelwoord          | NO
soort_leermateriaal   | YES (this is the "learningresourcetype")
status                | YES
taal                  | NO
titel                 | NO
versie                | YES (this is the "version")
---------------------------------------------

Changed 3 years ago by Frans

Nog meer input vanuit SURFfoundation (Magchiel Bijsterbosch)

Gebruikt:

http://oai.surfmedia.nl/request?verb=ListRecords&set=Mediafile&metadataPrefix=lom

Probleem:

Hoi Michiel,

 

Controle van harvesting van SURFmedia door LOREnet wijst uit dat de response die jullie interface een invalide response geeft. Het probleem zit hem in de OAI-PMH header.

 

Het OAI-PMH schema zegt:

 

  <complexType name="headerType">

    <annotation>

      <documentation>A header has a unique identifier, a datestamp,

        and setSpec(s) in case the item from which

        the record is disseminated belongs to set(s).

        the header can carry a deleted status indicating

        that the record is deleted.</documentation>

    </annotation>

    <sequence>

      <element name="identifier" type="oai:identifierType"/>

      <element name="datestamp" type="oai:UTCdatetimeType"/>

      <element name="setSpec" type="oai:setSpecType" minOccurs="0" maxOccurs="unbounded"/>

    </sequence>

    <attribute name="status" type="oai:statusType" use="optional"/>

  </complexType>

 

  <simpleType name="identifierType">

    <restriction base="anyURI"/>

  </simpleType>

 

(http://www.openarchives.org/OAI/openarchivesprotocol.html)

 

Maar SURFmedia geeft het volgende terug:

 

<header>

  <identifier>

    <catalog>URI</catalog>

    <entry>oai:surfmedia:1388</entry>

  </identifier>

  <datestamp>2004-09-10</datestamp>

  <setSpec>Mediafile</setSpec>

</header>

 

Het behoeft verder geen uitleg dat de XML niet overeenkomt met het schema. De wijze waarop het identifier element wordt gebruikt vertoont sterke gelijkenis met de wijze waarop LOM eruit ziet. Deze hoort er volgens het LOM schema namelijk als volgt uit te zien:

 

<!-- 1.1 Identifier -->

  <xs:complexType name="identifier">

    <xs:choice minOccurs="0" maxOccurs="unbounded">

      <xs:group ref="catalog"/>

      <xs:group ref="entry"/>

      <xs:group ref="ex:customElements"/>

    </xs:choice>

    <xs:attributeGroup ref="ag:identifier"/>

    <xs:attributeGroup ref="ex:customAttributes"/>

  </xs:complexType>

 

  <!-- 1.1.1 Catalog -->

  <xs:complexType name="catalog">

    <xs:simpleContent>

      <xs:extension base="CharacterString">

        <xs:attributeGroup ref="ag:catalog"/>

        <xs:attributeGroup ref="ex:customAttributes"/>

      </xs:extension>

    </xs:simpleContent>

  </xs:complexType> 

 

  <!-- 1.1.2 Entry -->

  <xs:complexType name="entry">

    <xs:simpleContent>

      <xs:extension base="CharacterString">

        <xs:attributeGroup ref="ag:entry"/>

        <xs:attributeGroup ref="ex:customAttributes"/>

      </xs:extension>

    </xs:simpleContent>

  </xs:complexType>

 

 

Grappig genoeg zien identifier elementen van de LOM records die jullie opleveren er als volgt uit:

 

<lom:identifier>oai:surfmedia:1388</lom:identifier>

 

Het lijkt er dus op dat de identifier elementen van OAI-PMH en LOM in een XSLTje o.i.d. zijn omgedraaid.

Zou je dit eens na kunnen gaan? 

Changed 3 years ago by forgacs

  • owner changed from marc to MC-arjen

See:  http://vpcore.trac.madcap.nl/ticket/182

This is fixed in the SVN repository.

Example output of LOM request:

...
<header>
  <identifier>
    oai:surfmedia:g2eYYFVrhXUUbQP7WW0Lb7EJ
  </identifier>
  <datestamp>
    2010-08-09
  </datestamp>
  <setSpec>
    coll_id:M1iD8nRgKndVSNkepoclsSxv
  </setSpec>
</header>
<metadata>
  <lom:lom xmlns:lom="http://ltsc.ieee.org/xsd/LOM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsmd_v1p2 http://www.imsglobal.org/xsd/imsmd_v1p2p4.xsd">
    <lom:general>
      <lom:identifier>
        <catalog>
          URI
        </catalog>
        <entry>
          oai:surfmedia:g2eYYFVrhXUUbQP7WW0Lb7EJ
        </entry>
      </lom:identifier>
...

Changed 3 years ago by forgacs

  • owner changed from MC-arjen to arjen

Changed 3 years ago by Frans

  • owner changed from arjen to Frans
  • status changed from assigned to accepted

Waiting for feedback from Wim (KN).
Marc can you take action.

Changed 3 years ago by Marc Pluijmaekers

feedback Kennisnet OAI VP-Core

Changed 3 years ago by Marc Pluijmaekers

Wim heeft ernaar gekeken, bijgevoegd in Word-doc zijn commentaar.

Verder voeg ik ook een opzet toe voor de specificaties tav de voorrang in de output van de OAI provider. Wat te doen als een veld leeg is? Eerst kijken naar gemapte velden, indien niet beschikbaar maar wel verplicht, serveer dan een standaardwaarde. VP-Core zal geen records eruit filteren als de metadata qua formaat niet voldoet. VP-Core zorgt alleen voor de vulling. MDMS doet de validatie.

Changed 3 years ago by Marc Pluijmaekers

VP-Core OAI output

Changed 3 years ago by MC-arjen

  • owner changed from Frans to forgacs
  • status changed from accepted to assigned

Changed 3 years ago by forgacs

  • owner changed from forgacs to Frans

We have checked the issues.

1) In the current solution the CZP Contribute Date has a Description field.
On the Kennisnet site (
 http://edurepdiensten.wiki.kennisnet.nl/Voorbeelden_CZP ) there isn't
Description field.
Should we delete it? It may cause problems with some harvesters.

contribute [0+]
  role [1]
  centity [1+]
    vcard [1]
  date [1]
    datetime [1]

2) Original request:

"Voor nu willen we de volgende configuratie voorstellen:
CZP: indien leeg veld >> serveer het gemapte DC/QDC veld uit >> indien
dit ook leeg is, of er is geen gemapt veld >> serveer een standaard
waarde uit"

# Done.
We used this mapping:
 http://www.imsglobal.org/metadata/imsmdv1p2p1/imsmd_bestv1p2p1.html#1242547
Is it ok, or could you give us the correct CZP mapping?

3) "DC/QDC: indien leeg veld >> serveer het gemapte CZP veld uit >>
indien dit ook leeg is, of er is geen gemapt veld >> serveer een
standaard waarde uit"

# Need a list about the DC/QDC -> CZP mapping.

4) "overige standaarden: indien leeg veld >> serveer een standaard
waarde uit"

# We checked the CZP documentation:
 http://www.edustandaard.nl/attachments/751885/Afspraak_content-zoekprofiel_PO-VO-BVE_v1p3.pdf
And we haven't found default values.
Could you send us a list about the standard values.

DC invoer
=========================

5) "Wanneer geen enkele waarde wordt ingevoerd, wordt de CZP asset
alsnog via OAI uitgevoerd, met lege elementen voor title en description.
Lege elementen mogen niet bestaan in CZP."

# Should we skip the assets, that without title and/or description, or
just we skip the title and/or description of that asset?

6) "Bovendien zijn er een aantal elementen verplicht in CZP. Wanneer de
verplichte elementen niet zijn ingevoerd, zou er geen output voor CZP
mogen plaatsvinden. De oai provider zou een “cannotDisseminateFormat”
error moeten teruggeven."

# OAI documentation (
 http://www.openarchives.org/OAI/openarchivesprotocol.html ) point 3.6:
"cannotDisseminateFormat": Applicable Verbs: "GetRecord?",
"ListIdentifiers?", "ListRecords?"
So if there is a ListRecords? request, and one of the asset doesn't have
the required elements, then the OAI must have provide a
cannotDisseminateFormat error (without any other output about the other
assets)?

7) "Het DC coverage temporal veld wordt niet opgenomen in de CZP
uitvoer. Bovendien kan er van beide DC coverage maar 1 instantie
toevoegen, terwijl het in CZP in elk geval multi-valued is."

# Which CZP field should contain the DC coverage temporal value?

8) "DC subject is multi-valued, ik kan er echter maar 1 toevoegen."

# Done.

9) "Als DC publisher wordt ingevuld, wordt een correcte CZP publisher
contribute gemaakt. Bij het date-element daarvan echter, wordt wel een
description neergezet, maar geen datum. Hiervan zou DC date gebruikt
moeten worden?
We zien dat hiervoor QDC issued wordt gebruikt."

# DC publisher is used in CZP Contribute Centity Vcard.

# CZP Contribute Date Datetime is the DC date (or QDC issued, if DC date
doesn't exist).

10) "Onderstaande velden komen wel voor in de DC output maar niet in de
CZP output, terwijl ik voor die wel een representatie zou verwachten.
* DC format -> technical.format
* DC identifier -> technical.location
* DC date -> publisher date?"

# CZP:technical.* are calculated fields, whereas DC format/identifier
are not. So we can't overwrite the technical format fields. They are
almost always filled.

# CZP Contribute Date Datetime is DC date (or QDC issued).

11) "Bij het invullen van DC rights wordt bij CZP ook rights.cost
ingevuld (default no). Dit is ongewenst, er kunnen ook auteursrechten
zijn bij cost = yes."

# When there is a DC rights field, and only this case, we have rights.

# The CZP Cost Value is changed to default "yes" now.

QDC invoer
=========================

12) "QDC issued wordt blijkbaar gebruikt als publishing date. (Zie ook
DC publisher)."

# See: above (10).

13) "DC is referenced by, is format of en has format, zouden prima
vertaald kunnen worden naar CZP formaat. Dit gebeurt echter niet."

# See: above (10). CZP Technical Format is the metadata mime type of
mediafile.

14) "QDC license zou wellicht rights.copyrightsandotherrestrictions
kunnen invullen."

# Done.

CZP invoer
=========================

15) "De Vcard delen beginnen met een spatie."

# Done.

16) "Standaard wordt een lege classification taxonpath meegegeven, waar
alleen de source instaat. Dit is incorrect. Er zou een bijbehorende
purpose bij moeten en een taxonpath id, behorend bij de taxon source."

# Done.

17) "De CZP auteursrechten, beschrijving, kosten, beschrijving rechten,
taal, titel worden niet over de DC waarden gemapped. Dit zou ik wel
verwachten."

# Fields: auteursrechten, beschrijving, kosten, omschrijving_rechten,
taal, titel;
CZP title is DC title (and QDC title alternative together).
Please confirm and/or correct where you want to see these fields:
- auteursrechten: CZP Cost Value
- beschrijving: CZP General Description / CZP Lifecycle Contribute Date
Description / CZP Rights Description ?
- kosten: CZP Cost Source
- omschrijving_rechten: ?
- taal: CZP General Language.

18) "De CZP metadataschema naam en het CZP sleutelwoord vullen de
bestaande waarden niet aan."

# "LOMv1.0" was changed to "CZPv1.0" in case of CZP.
Example:
<czp:metametadata><czp:metadatascheme>CZPv1.0</czp:metadatascheme></czp:metametadata>

19) "Wanneer ik iets bij CZP classificatie invul, wordt dit uitgevoerd
in een classification purpose value. Dit is incorrect. Een classificatie
hoort een purpose source en value te bevatten, een bijbehorende
taxonpath source, en tenminste 1 daarbij horende taxons. (Zie
 http://edurepdiensten.wiki.kennisnet.nl/Voorbeelden_CZP#Classification
voor een voorbeeld.)"

# Done.

20) "Een aantal velden is multi-valued in CZP, maar single-valued in
VPcore. Een aantal daarvan zou je wel multi-valued willen hebben,
namelijk; context, classification, beoogde eindgebruiker, soort
leermateriaal"

# Fields: context, classification, beoogde eindgebruiker, soort
leermateriaal;
All fields use multi-values.

21) "De technical duration wordt in een fout formaat aangeleverd.
Bijvoorbeeld, PT05M15.14S. Het formaat mag geen kommagetallen bevatten."

# Done.

Changed 3 years ago by Frans

We are happy:

Total number of exceptions missed: 0

Total error count: 0

Your repository is robust as well as compliant

I suggest to close this issue and address the CZP related issues in a seperate ticket.

Changed 3 years ago by Frans

  • status changed from assigned to closed
  • tested set to yes
  • accepted changed from no to yes
  • resolution set to fixed
Note: See TracTickets for help on using tickets.