Edurep:LOM SearchRetrieve
LOM data kan in Edurep worden opgevraagd via een SRU of SRW endpoint, gebruik makend van de CQL query taal. Op deze pagina staat een overzicht van de specifieke implementatie van SRU/SRW voor de LOM endpoints.
Endpoints
- LOM SRU https://wszoeken.edurep.kennisnet.nl/edurep/sruns
- LOM SRW: https://wszoeken.edurep.kennisnet.nl/edurep/srwns
- LOM SRW WSDL: https://wszoeken.edurep.kennisnet.nl/edurep/wsdlns
- LOM SRU PLUS https://wszoeken.edurep.kennisnet.nl/edurep/sruns/plus (als sruns, maar metaplus records ontdubbeld, alleen metaplus)
- LOM SRU ORIGINAL https://wszoeken.edurep.kennisnet.nl/edurep/sruns/original (als sruns, maar metaplus records ontdubbeld, alleen originals)
Argumenten
Een overzicht van de ondersteunde argumenten:
naam | # | type | omschrijving |
---|---|---|---|
operation | 1 | tekst | searchRetrieve |
version | 1 | tekst | 1.2 |
query | 1 | cql query | Een zoekopdracht binnen LOM records. |
startRecord | 0-1 | getal | De resultatenlijst wordt getoond vanaf dit record, standaard 1. |
maximumRecords | 0-1 | getal | Het aantal records in de getoonde resultatenlijst, standaard 10, max 100. |
recordSchema | 0-1 | tekst | Het type record wat wordt teruggegeven (lom voor CZP, oai_dc voor DC, LOMv1.0 voor IEEE LOM), standaard lom Lees meer. |
x-recordSchema | 0-* | tekst | Een extra type record wat kan worden meegegeven Lees meer. |
recordPacking | 0-1 | tekst | Het formaat waarin de resultatenlijst wordt teruggegeven Lees meer. |
x-term-drilldown | 0-1 | edurep zoekveld | Het veld waarop een term drilldown wordt gedaan voor de gevonden resultaten Lees meer. |
sortKeys | 0-1 | edurep zoekveld | Het veld waarop gesorteerd moeten worden. |
x-field-drilldown | 0-1 | tekst | De zoekterm voor een field drilldown voor de gevonden resultaten Lees meer. |
x-field-drilldown-fields | 0-1 | lijst | De lomvelden waarbinnen de field drilldown gedaan kan worden Lees meer. |
Query
In Edurep kan er worden gezocht op AND/OR/NOT combinaties van trefwoorden, binnen de totale set of binnen specifieke velden.
- fiets AND pomp
- kasteel AND (ridder OR ridders)
- vis AND walvis NOT potvis
- breuken AND vak=wiskunde
- breuken AND (titel=werkblad OR titel=taak)
Afhankelijk van de gebruikte zoekinterface zijn er verschillende zoekvelden beschikbaar, bekijk de veldenlijst voor een overzicht.
Voorbeelden:
/edurep/sruns: query=fiets AND pomp |
/smo/sruns: query=smo.hReview.info exact "http://wikiwijs.samendelen.nl/get/smpid:5585/DS1" |
Catalogus Service: query=Title=techniek AND Price<500 |
/jsonsearch: query=fiets AND schema:name="werkblad" |
Beperkingen:
- De waarde van het query argument mag maximaal 4096 tekens zijn, na urldecoding.
- De zoekwoorden kunnen alleen letters en cijfers bevatten. Vanwege het indexatieproces zijn speciale karakters als # en $ zijn niet doorzoekbaar.
- Wildcard zoeken is beperkt mogelijk. Zoeken op fiets* is wel mogelijk maar *fiets niet. De fiets* is mogelijk met minimaal 2 karakters. Het zoeken met het wildcard teken in een string (infix) is ook mogelijk, ook met minimaal 2 voorloopkarakters. Er mag maximaal 1 * voorkomen per trefwoord.
Paginering
Edurep resultaten worden gepagineerd aangeboden. Standaard worden de eerste 10 teruggegeven, en het is met parameters mogelijk om de verschillende pagina's van de totale resultatenset op te halen (tot een maximum van 4000). Bij een startRecord hoger, wordt een foutmelding meegegeven, maar wordt de laatste pagina getoond (alsof de startRecord gelijk is aan 4000).
Paginering in SRU werkt met de volgende argumenten:
- startRecord
- maximumRecords
Met maximumRecords kan het aantal resultaten per pagina worden ingesteld, en met startRecord wordt aangegeven wat het eerste record van de resultatenset is.
/edurep/sruns: query=feest&maximumRecords=20&startRecord=21 |
Catalogus Service: query=rekenen&maximumRecords=20&startRecord=21 |
Drilldown
Met een optionele term drilldown worden alle waarden van een bepaald veld cumulatief geteld over alle zoekresultaten. Dit kan slechts op een beperkt aantal velden. Er kunnen meerdere term drilldowns gedaan worden per search request door de velden te scheiden met een komma.
Het gewenste aantal resultaten in de drilldown kan worden aangegeven door ":<nummer>" aan de drilldown term toe te voegen. Als je ":0" toevoegt worden alle drilldown resultaten getoond.
De volgorde van de termen met een gelijk aantal kan verschillen per zoekopdracht. De sortering komt namelijk voort uit hoe het drilldown algoritme werkt. Voor elementen met dezelfde waarde is geen volgorde gedefinieerd omdat dit efficiënter is en weinig toegevoegde waarde heeft.
Een drilldown kan in SRU met het x-term-drilldown argument worden meegegeven.
/edurep/sruns: query=oostenrijk&x-term-drilldown=lom.general.language:5,lom.technical.format |
/smo/sruns: query=leuk&x-term-drilldown=smo.supplierId |
Catalogus Service: query=aardrijkskunde&x-term-drilldown=Supplier |
Response
<dd:drilldown xmlns:dd="http://meresco.org/namespace/drilldown"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://namespace.meresco.org/drilldown http://namespace.drilldown.org/xsd/drilldown.xsd">
<dd:term-drilldown>
<dd:navigator name="lom.educational.context.value">
<dd:item count="921">VO</dd:item>
<dd:item count="319">BVE</dd:item>
<dd:item count="221">PO</dd:item>
<dd:item count="33">primaire onderwijs</dd:item>
<dd:item count="26">beroepsonderwijs en volwasseneneducatie</dd:item>
<dd:item count="26">speciaal onderwijs</dd:item>
<dd:item count="24">voortgezet onderwijs</dd:item>
<dd:item count="16">speciaal basisonderwijs</dd:item>
<dd:item count="13">wetenschappelijk onderwijs</dd:item>
<dd:item count="12">VVE</dd:item>
</dd:navigator>
<dd:navigator name="lom.rights.cost">
<dd:item count="1160">no</dd:item>
<dd:item count="38">yes</dd:item>
</dd:navigator>
<dd:navigator name="lom.technical.format"/>
</dd:term-drilldown>
</dd:drilldown>
naam | # | type | omschrijving |
---|---|---|---|
term-drilldown | 1 | container | De term-drilldown container. |
navigator | 1+ | container | De navigator container. Bevat alle facets voor het betreffende veld. |
item | 0+ | tekst | De naam van de facet. Het aantal staat in het count attribuut. |
Sortering
Er zijn is Edurep verschillende velden waarop gesorteerd kan worden. Standaard wordt de sortering van de zoekmachine aangehouden, en dat is op de door de zoekmachine bepaalde relevantie. Per veld kan er ascending of descending gesorteerd worden.
Het SRU/SRW protocol (versie 1.1) gebruikt het argument sortKeys om een gewenste sortering door te geven. Het is vervolgens mogelijk om in de implementatie aan te geven of het veld oplopend of aflopend wordt gesorteerd. Dit gebeurt door een boolean met de waarde 0 of 1.
Oplopend:
/edurep/sruns: query=beatrix&sortKeys=lom.lifecycle.contribute.publisherdate,,0 |
Aflopend:
/edurep/sruns: query=beatrix&sortKeys=lom.lifecycle.contribute.publisherdate,,1 |
Voorbeeld SRW-Verzoek
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Body>
<SRW:searchRetrieveRequest xmlns:SRW="//www.loc.gov/zing/srw/">
<SRW:version>1.2</SRW:version>
<SRW:operation>searchRetrieve</SRW:operation>
<SRW:query>fiets</SRW:query>
<SRW:startRecord>1</SRW:startRecord>
<SRW:maximumRecords>5</SRW:maximumRecords>
<SRW:recordPacking>xml</SRW:recordPacking>
</SRW:searchRetrieveRequest>
</SOAP:Body>
</SOAP:Envelope>
Voorbeeld Respons
<srw:searchRetrieveResponse>
<srw:version>1.2</srw:version>
<srw:numberOfRecords>1215</srw:numberOfRecords>
<srw:records>
<srw:record>
<srw:recordSchema>lom</srw:recordSchema>
<srw:recordPacking>xml</srw:recordPacking>
<srw:recordIdentifier>Teleblik:oai:vp-core.snkn.nl:19026</srw:recordIdentifier>
<srw:recordData>
...
<!-- Hier staan een gevonden record. -->
...
</srw:recordData>
<srw:extraRecordData>
<srw:recordData recordSchema="<schema>">
...
<!-- Hier staat het betreffende recordSchema van het gevonden record. -->
...
</srw:recordData>
...
<!-- En eventueel nog andere recordSchema's. -->
...
</srw:extraRecordData>
</srw:record>
...
<!-- Hier staan overige gevonden recorddata en extra recorddata. -->
...
</srw:records>
<srw:nextRecordPosition>11</srw:nextRecordPosition>
<srw:echoedSearchRetrieveRequest>
<srw:version>1.2</srw:version>
<srw:query>fiets</srw:query>
<srw:startRecord>6</srw:startRecord>
<srw:recordPacking>string</srw:recordPacking>
<srw:recordSchema>lom</srw:recordSchema>
<srw:x-recordSchema>extra</srw:x-recordSchema>
<srw:x-recordSchema>smo</srw:x-recordSchema>
<srw:x-recordSchema>smbAggregatedData</srw:x-recordSchema>
</srw:echoedSearchRetrieveRequest>
</srw:searchRetrieveResponse>
Eigenschappen
Bij het maken van een koppeling op de zoekinterface van Edurep, dient men rekening te houden met een aantal eigenschappen.
Overbelasting
Het kan voorkomen dat Edurep overbelast is door een teveel aan binnenkomende requests. Deze faciliteit is ingebouwd om te voorkomen dat de responstijden teveel oplopen. In dat geval zal Edurep een HTTP 503 statuscode terugsturen. Het is raadzaam bij de implementatie met deze statuscode rekening te houden en het na een korte pauze opnieuw te proberen. Kans is heel groot dat Edurep dan weer een slot beschikbaar heeft. Voor meer informatie over de HTTP 503 melding bekijk de officiële definitie op W3C.
Compressie
De xml responses van Edurep kunnen gecomprimeerd worden verstuurd. Edurep ondersteunt de zogenaamde "deflate" en "gzip" compressie methoden voor content-encoding. De antwoorden van Edurep worden gecomprimeerd (min. 90%), waardoor het transport van alle XML geen vertragende factor meer is. De impact van het in- en uitpakken is nihil, dus de winst maximaal. De meeste browsers ondersteunen dit tegenwoordig standaard maar in backend code moet dit expliciet worden aangezet. Bijvoorbeeld in PHP-cURL gebeurt dit door het zetten van een cURL-optie: curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');.
Relevantie
Edurep bevat drie soorten velden met elk specifieke mogelijkheden voor het zoeken:
- vrije tekstvelden: voor bepaling relevantie
- vocabulaire velden: voor het filteren van de resultatenset
- numerieke velden: voor het sorteren van de resultatenset
Wanneer in de zoekopdracht geen beperkingen worden aangegeven, worden de resultaten in principe in willekeurige volgorde teruggegeven. De plek van een record in deze willekeurige lijst wordt bij het harvesten van het record bepaald.
Het gebruik van filters (bijv. context=PO) heeft geen invloed op de willekeurige volgorde waarmee de records worden teruggegeven. Wanneer meerdere filters in een OR query worden gesteld, zullen de records die aan alle filters voldoen relevanter zijn en dus hoger in de resultatenlijst komen.
De daadwerkelijke relevantiebepaling wordt gedaan aan de hand van de zoekopdrachten in vrije tekstvelden. De relevantie wordt dan bepaald aan de hand van de relatieve voorkomendheid van de zoekwoorden in een record. Er wordt bijvoorbeeld gezocht op "fiets". Een record met 100 trefwoorden (waarvan 1x fiets) zal minder relevant zijn dan een record met 5 trefwoorden (waarvan 1x fiets).
Spiders
Zoekmachines als Google en Yahoo maken gebruik van programma's die geautomatiseerd het internet afzoeken en de gevonden pagina's indexeren. Het kan voorkomen dat deze spiders via de gebouwde zoekapplicatie zoekopdrachten aan Edurep stellen. Dit type zoekopdrachten zorgen voor een oneigenlijk gebruik van Edurep. Het vervuilt niet alleen de statistieken van Edurep maar ook de statistieken van de betreffende zoekapplicatie.
Er zijn verschillende manieren om de toegang voor spiders op de website te beperken, zodanig dat alleen het zoekdeel van de applicatie voor de spiders wordt afgesloten. Een overzicht hiervan is te vinden op Wikipedia.
Foutmeldingen
Een foutmelding vanuit Edurep is te herkennen aan de aanwezigheid van het diagnostics veld. In dit veld zal dan een diagnostic staan die die volgende elementen bevat:
- een foutcode: in diagnostic/uri
- een titel: in diagnostic/message
- een beschrijving: in diagnostic/details
Voorbeeld
<srw:searchRetrieveResponse>
<srw:version>1.2</srw:version>
<srw:numberOfRecords>0</srw:numberOfRecords>
<srw:diagnostics>
<diagnostic>
<uri>info://srw/diagnostics/1/48</uri>
<details>Unexpected token after parsing ([=], CQL_QUERY(SCOPED_CLAUSE(SEARCH_CLAUSE(SEARCH_TERM(TERM('test')))))).</details>
<message>Query Feature Unsupported</message>
</diagnostic>
</srw:diagnostics>
</srw:searchRetrieveResponse>
Foutcodes
foutcode | titel/message | uitleg |
---|---|---|
info://srw/diagnostics/1/4 | Unsupported Operation | Alleen operaties searchRetrieve en explain worden ondersteund. |
info://srw/diagnostics/1/5 | Unsupported Version | Alleen versies 1.1 en 1.2 worden ondersteund. Gebruik 1.2 |
info://srw/diagnostics/1/6 | Unsupported Parameter Value | De waarde van een query parameter is ongeldig. |
info://srw/diagnostics/1/7 | Mandatory Parameter Not Supplied | Niet alle verplichte argumenten zijn meegegeven. |
info://srw/diagnostics/1/8 | Unsupported Parameter | Een van de query parameters is ongeldig. |
info://srw/diagnostics/1/12 | Too many characters in query | Het query argument mag maximaal 4096 tekens bevatten. |
info://srw/diagnostics/1/48 | Query Feature Unsupported | De query bevat een fout. |