Edurep:Metadata verwerking: verschil tussen versies

Uit Kennisnet Developers Documentatie
Naar navigatie springen Naar zoeken springen
(→‎classificaties: ref to migration)
(25 tussenliggende versies door 3 gebruikers niet weergegeven)
Regel 1: Regel 1:
Edurep harvest diverse repositories via het OAI-PMH protocol. Vervolgens kunnen eindgebruikers via een zoekportaal, zoals http://www.wikiwijsleermiddelenplein.nl/, zoeken in het materiaal dat Edurep op deze wijze heeft verzameld. Om de eindgebruiker zo goed mogelijk een antwoord te geven op zijn of haar zoekvraag is het belangrijk dat de regels voor het gebruik van metadata consistent worden toegepast. Edurep voert een aantal validaties en bewerkingen uit op de metadata om de kwaliteit en uniformiteit waar mogelijk te verhogen.
+
Edurep '''harvest''' diverse repositories via het OAI-PMH protocol. Vervolgens kunnen eindgebruikers via de zoekindex '''zoeken''' in het materiaal dat Edurep op deze wijze heeft verzameld. Om de kwaliteit en uniformiteit te garanderen worden er allerlei validaties, bewerkingen en translaties uitgevoerd op de metadata. In het schema hieronder staat een versimpelde weergave van de processen die plaatsvinden binnen Edurep.
  +
# records komen binnen via een specifieke interface
  +
# naast een initiële validatie (xml/toegang) vindt er inhoudelijke validatie plaats
  +
# er worden verschillende [[Edurep:Zoekopdracht/recordSchema|opvraagbare representaties]] gemaakt
  +
# de Schema.org variant wordt gebruikt in de [[#Koppelingen|aggregator]] en zoekindex
   
  +
[[File:EdurepComponentenSimplified.png]]
Deze pagina tracht inzicht te geven in wat er met de metadata van aanbieders gebeurt in Edurep.
 
  +
== OAI-PMH Harvester ==
  +
De harvester haalt de records binnen vanaf de aanbiedersrepository en fungeert daarmee als toegangspoort tot Edurep. Records die niet valideren worden geweigerd en de status is te bekijken op de harvester status pagina.
  +
* Productie: https://harvester.edurep.kennisnet.nl/showHarvesterStatus?domainId=prod10
  +
* Staging: https://harvester.edurep.kennisnet.nl/showHarvesterStatus?domainId=staging10
   
  +
=== Harvester Status pagina ===
== Mapping "oude stijl" VDEX waarden naar OBK waarden en vice versa ==
 
  +
Per kolom in het statusoverzicht volgt nu een uitleg over de betekenis ervan:
Repositories gebruiken voor het metadateren zowel "oude stijl" VDEX'en (bijvoorbeeld http://purl.edustandaard.nl/vdex_classification_kerndoelen_onderbouw_vo_20071115.xml) als termen uit het [http://developers.wiki.kennisnet.nl/index.php?title=OBK:Mappen_naar_het_OBK Onderwijs Begrippenkader]. Voor de uniformiteit van de data past Edurep een mapping voor deze termen toe. Bij de mapping worden alleen termen toegevoegd en niet vervangen. Bijvoorbeeld, indien een record deze metadata bevat:
 
  +
* ''Repository'': De identifier van de repository (of een link naar de repository gegevens, alleen beschikbaar voor de beheerder van Edurep).
<syntaxhighlight lang="xml">
 
  +
* ''Last successful harvest'': Timestamp van de laatste keer dat de harvester een "fout vrij" bezoek heeft gedaan.
<czp:classification>
 
  +
* ''Total records'': Totaal aantal records die de harvester heeft opgehaald. (Dit aantal is '''niet''' per definitie hetzelfde als het aantal in Edurep. Het kan bijvoorbeeld voorkomen dat onze [[Edurep:Metadata_verwerking#Deadlink_Checker|deadlink checker]] records met dode links opruimt.)
<czp:purpose>
 
  +
* ''Harvested/Uploaded/Deleted'': De verhouding tussen het aantal nieuwe of gewijzigde, en verwijderde records van het laatste harvest bezoek.
<czp:source>
 
  +
* ''#Validation Errors'': Het aantal validatiefouten. De link verwijst naar een lijst met alle fouten onderaan de statuspagina.
<czp:langstring xml:lang="x-none">http://download.edustandaard.nl/vdex/vdex_classification_purpose_czp_20060628.xml</czp:langstring>
 
  +
* ''#Errors'': Het aantal errors. De link verwijst naar een lijst met alle fouten onderaan de statuspagina.
</czp:source>
 
  +
* ''RSS'': Geeft toegang tot een rss feed voor een specifieke aangesloten collectie.
<czp:value>
 
<czp:langstring xml:lang="x-none">discipline</czp:langstring>
 
</czp:value>
 
</czp:purpose>
 
<czp:taxonpath>
 
<czp:source>
 
<czp:langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</czp:langstring>
 
</czp:source>
 
<czp:taxon>
 
<czp:id>5e86dc82-1981-48df-bbe5-abd4a9b3767b</czp:id>
 
<czp:entry>
 
<czp:langstring xml:lang="nl">Voedsel, natuur en leefomgeving</czp:langstring>
 
</czp:entry>
 
</czp:taxon>
 
</czp:taxonpath>
 
</czp:classification>
 
</syntaxhighlight>
 
   
  +
=== Validatiefouten ===
Dan wordt dat als volgt gemapt:
 
  +
Wanneer een record succesvol wordt geharvest kan deze voor de opname in de zoekmachine nog geweigerd worden op basis van een validatiefout. Op dit moment wordt er alleen gevalideerd tegen het LOM XML schema (beide bindingen IEEE en IMS kunnen worden aangeboden).
<syntaxhighlight lang="xml">
 
<czp:classification>
 
<czp:purpose>
 
<czp:source>
 
<czp:langstring xml:lang="x-none">http://download.edustandaard.nl/vdex/vdex_classification_purpose_czp_20060628.xml</czp:langstring>
 
</czp:source>
 
<czp:value>
 
<czp:langstring xml:lang="x-none">discipline</czp:langstring>
 
</czp:value>
 
</czp:purpose>
 
<czp:taxonpath>
 
<czp:source>
 
<czp:langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</czp:langstring>
 
</czp:source>
 
<czp:taxon>
 
<czp:id>5e86dc82-1981-48df-bbe5-abd4a9b3767b</czp:id>
 
<czp:entry>
 
<czp:langstring xml:lang="nl">Voedsel, natuur en leefomgeving</czp:langstring>
 
</czp:entry>
 
</czp:taxon>
 
</czp:taxonpath>
 
</czp:classification>
 
<czp:classification>
 
<czp:purpose>
 
<czp:source>
 
<czp:langstring xml:lang="x-none">http://purl.edustandaard.nl/vdex_classification_purpose_czp_20060628.xml</czp:langstring>
 
</czp:source>
 
<czp:value>
 
<czp:langstring xml:lang="x-none">discipline</czp:langstring>
 
</czp:value>
 
</czp:purpose>
 
<czp:taxonpath>
 
<czp:source>
 
<czp:langstring xml:lang="x-none">http://purl.edustandaard.nl/vdex_classification_opleidingsdomeinen_en_studierichtingen_mbo_2010.xml</czp:langstring>
 
</czp:source>
 
<czp:taxon>
 
<czp:id>16</czp:id>
 
<czp:entry>
 
<czp:langstring xml:lang="nl">Voedsel, natuur en leefomgeving</czp:langstring>
 
</czp:entry>
 
</czp:taxon>
 
</czp:taxonpath>
 
</czp:classification>
 
</syntaxhighlight>
 
   
  +
In tegenstelling tot een error wordt er wel doorgeharvest na een validatiefout, tot op zekere hoogte. In principe wordt er na 100 validatiefouten niet meer doorgeharvest, er treedt dan voor de harvester een error op.
Dit mechanisme is gebaseerd op de mappings zoals die door Edustandaard gemaakt zijn, een uitgebreide beschrijving is [http://developers.wiki.kennisnet.nl/index.php?title=OBK:Mappen_naar_het_OBK hier] te vinden.
 
Op basis van deze mappings zijn XSLT's gemaakt, deze XSTL's zijn publiekelijk beschikbaar op https://github.com/kennisnet/edurep-xslt.
 
   
  +
Elke validatiefout kan vanuit het foutenoverzicht individueel bekeken worden. De eerste regel van zo'n foutmelding bevat de gegenereerde samenvatting van de fout. In een aantal gevallen zal deze melding voldoende zijn om de fout in kwestie op te sporen. De getoonde xml staat hier in de IEEE LOM binding, maar is inhoudelijk gelijk aan het ingeschoten record.
Het mapping mechanisme is per collectie ingesteld, een overzicht hiervan is [http://developers.wiki.kennisnet.nl/index.php?title=Edurep:Mappen_naar_het_OBK hier] te vinden.
 
   
  +
Soms zegt deze regel echter "Line 105: Unable to transform record". De fout zelf is dan in het xml bestand terug te vinden, en omgeven door expliciete Edurep error xml elementen:
== Inhoudelijk validatie van velden ==
 
  +
Door middel van een XSLT wordt de inhoud van een aantal LOM velden gevalideerd. Dit zijn velden waar een VDEX aan gekoppeld is en waarvan dus bekend is welke waarden hierin mogen staan. Tijdens deze validatie wordt geprobeerd om veel voorkomende fouten te corrigeren. Als dit niet mogelijk is dan wordt er een error gegenereerd en het record geweigerd. Een voorbeeld van zo'n error is:
 
<syntaxhighlight lang="xml" enclose="div">
+
<syntaxhighlight lang="xml" line="GESHI_FANCY_LINE_NUMBERS" line start="105">
<edurep:error xmlns:edurep="http://meresco.org/namespace/users/kennisnet/edurep">Element 'aggregationlevel' deleted due to the use of the invalid value: 'null'.</edurep:error>
+
<edurep:error xmlns:edurep="http://meresco.org/namespace/users/kennisnet/edurep">
  +
<lom:keyword xmlns:lom="http://www.imsglobal.org/xsd/imsmd_v1p2">
  +
<lom:langstring xml:lang="nl"/>
  +
</lom:keyword>
  +
</edurep:error>
 
</syntaxhighlight>
 
</syntaxhighlight>
Deze foutmeldingen zijn in de kolom <source lang="text" enclose="none">#Validation Errors</source> terug te vinden op https://harvester.edurep.kennisnet.nl/page/showHarvesterStatus/show?domainId=production. Hier kan per collectie ook een RSS feed gevolgd worden.
 
   
  +
Wanneer een validatiefout bij de aanbieder wordt gerepareerd en volgens OAI met een nieuwe updated timestamp wordt aangeboden, wordt het record weer regulier meegeharvest en verdwijnt de validatiefout.
De volgende velden worden gevalideerd:
 
*<source lang="text" enclose="none">lom.general.aggregationlevel</source>
 
*<source lang="text" enclose="none">lom.educational.learningresourcetype</source>
 
*<source lang="text" enclose="none">lom.educational.intendedenduserrole</source>
 
*[[Edurep:Validatie_lom.educational.context|<source lang="text" enclose="none">lom.educational.context</source>]]
 
*<source lang="text" enclose="none">lom.educational.typicallearningtime</source>
 
*<source lang="text" enclose="none">lom.rights.cost</source>
 
*<source lang="text" enclose="none">lom.rights.copyrightandotherrestrictions</source>
 
Dit staat ook beschreven op de [http://developers.wiki.kennisnet.nl/index.php?title=Edurep:Metadata_verwerking#XSLT developers wiki]. Per veld zijn ook de toegepaste business rules voor de validatie beschreven.
 
   
  +
== Deadlink Checker ==
== Validatie van de gebruikte UUID's uit het OBK ==
 
  +
De Deadlink Checker controleert of een record een '''geldige''' en '''werkende URL''' bevat in het [[Edurep:Metadata/Url|url veld]]. Een record kan één van de volgende statussen krijgen:
[[Image:Edurep-obk-validatie.png|thumb|350px|OBK validatie proces]]
 
  +
* OK: Het resultaat van de url is een 2.x.x of 3.x.x HTTP status code
Elk record wordt gevalideerd op conformiteit met de LOM xsd. Invalide records worden geweigerd in het [[Edurep:Aanbieder_Status#Validatiefouten|harvestproces]]. Ook de [[OBK:Hoofdpagina|OBK]] identifiers (termen) worden gevalideerd zodanig dat alleen geldige OBK identifiers in de records staan. Wordt er een niet bestaande Begrippenkader identifier gebruikt dan wordt het record geweigerd en gerapporteerd.
 
  +
* NTL: Het record bevat geen url (No Technical Location)
Indien een taxon geen id bevat, maar alleen een entry, wordt de taxon uit het record gehaald omdat de validiteit van de entry niet kan worden bepaald.
 
  +
* FAILED: De url is niet valide of leidt tot een timeout of een 4.x.x of 5.x.x HTTP status code
   
  +
Records met status FAILED worden vervolgens niet getoond in Edurep zoekresultaten.
Voor de duidelijkheid, men geeft middels de taxon source aan dat er wordt gerefereerd naar het OBK. De correcte referentie hierbij is "<nowiki>http://purl.edustandaard.nl/begrippenkader</nowiki>". Zie de [[Standaarden:NL_LOM/lom.classification#OnderwijsBegrippenKader|Standaarden uitleg]] voor meer informatie.
 
   
  +
Ongeveer één keer in de week worden alle records met de status "OK" gecontroleerd. De records met de status "FAILED" worden elke dag gecontroleerd.
<syntaxhighlight lang="xml">
 
<taxonpath>
 
<source>
 
<langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</langstring>
 
</source>
 
<taxon>
 
<!-- uuid komt niet voor in OBK, record invalide -->
 
<id>3a26037c-b635-4027-82b2-0941a4a5bc88</id>
 
</taxon>
 
</taxonpath>
 
</syntaxhighlight>
 
   
  +
{{Info|Het kan toch nog voorkomen dat sommige leerobjecten niet als een dead link worden aangemerkt doordat de URL uitkomt op een zogenaamde landingspagina die zich meldt als een OK ipv FAILED. Deze situaties zijn lastig te herkennen.}}
   
  +
=== Deadlink Checker Status Pagina ===
<syntaxhighlight lang="xml">
 
  +
Er is een statuspagina waar per repository een overzicht van de dode links is op te vragen.
<taxonpath>
 
  +
* Productie: https://wszoeken.edurep.kennisnet.nl/status
<source>
 
  +
* Staging: https://staging.edurep.kennisnet.nl/status
<!-- geen OBK verwijzing, dus elk id mag -->
 
<langstring xml:lang="x-none">http://purl.edustandaard.nl/mijn_begrippenkader</langstring>
 
</source>
 
<taxon>
 
<id>3a26037c-b635-4027-82b2-0941a4a5bc88</id>
 
</taxon>
 
</taxonpath>
 
</syntaxhighlight>
 
   
  +
Per kolom in het statusoverzicht een korte omschrijving:
== Automatische wijzigingen ==
 
  +
* ''Repository'': De repository identifier zoals deze in Edurep bekend is.
Omwille van de kwaliteit van de metadata vult Edurep een aantal velden van de metadata indien deze niet zijn ingevuld door de aanbieder. Het gaat om:
 
  +
* ''Vindbare records'': Het aantal geharveste records minus de records met dode links.
* kosten: Edurep vult cost=yes in wanneer het /lom/rights/cost niet aanwezig is.
 
  +
* ''Deadlink records'': Het aantal records met dode links.
* uitgever: Edurep vult de repository_id in als publisher wanneer de aanbieder geen publisher meegeeft.
 
  +
* ''Totaal'': Het aantal geharveste records
   
  +
Wanneer men doorklikt op een individuele repository, kan men zich abboneren op de rss feeds van de harvester en de deadlink checker, alsmede een overzicht van alle dode link [[Edurep:Metadata/Record Identifier|recordIdentifiers]] downloaden.
Ten behoeve van de optimale vindbaarheid van records tijdens de migratie naar het [[OBK:Hoofdpagina|Begrippenkader]], worden termen van "oude" vocabulaires [[Edurep:Mappen_naar_het_OBK|gemapt]] naar termen uit het Begrippenkader en vica versa.
 
   
  +
== Bewerkingen en Validatie ==
De terugmapping (van Begrippenkader termen naar "oude" vocabulairetermen) vindt plaats naar de nieuwste vocabulaires die voor een bepaald type beschikbaar waren. Bijvoorbeeld, de Begrippenkader "havo_3" wordt alleen teruggemapt naar ''vdex_classification_educationallevel_czp_20071115.xml'' en niet naar ''vdex_classification_educationallevel_czp_20060628.xml'' terwijl deze andersom wel wordt gemapt. Ook worden automatisch aangevulde OBK begrippen niet teruggemapt.
 
  +
Er bestaan in Edurep verschillende bewerkings- en validatieprocessen om de kwaliteit van records te verhogen.
   
=== XSLT ===
+
=== ontbrekende waarden ===
  +
Omwille van de kwaliteit van de metadata vult Edurep een aantal velden van de metadata '''indien deze niet zijn ingevuld door de aanbieder'''. Het gaat om:
Een deel van de automatische wijzigingen op de metadata vinden plaats in de Edurep broncode, een ander deel (met name de collectie-specifieke wijzigingen) door middel van zogenaamde XSLT's. Ten behoeve van de transparantie zijn deze XSLT's van elke collectie te bekijken op [https://github.com/kennisnet/edurep-xslt GitHub].
 
  +
* kosten: Edurep vult cost=yes in wanneer [[Edurep:Metadata/Kosten|kosten]] niet aanwezig is.
  +
* uitgever: Edurep vult de repository_id in als publisher wanneer de aanbieder geen [[Edurep:Metadata/Uitgever|uitgever]] meegeeft.
   
  +
=== vocabulaire waarden ===
De automatische wijzigingen hebben betrekking op veelgebruikte NL LOM vocabulaire velden. Over het algemeen worden alleen de waarden van bepaalde vocabulaires goedgekeurd. Indien een waarde in een veld herleidbaar is tot een van de geldige waarden (bijv. %20 fout, hoofdletter/kleine letter), wordt deze verbeterd tot een geldige waarde. Bij andere waarden wordt het veld uit het record verwijderd.
 
  +
In Edurep worden verschillende vocabulairevelden inhoudelijk gevalideerd.
   
  +
'''legacy:'''<br/>
{| class="wikitable"
 
  +
De legacy oplossing werkt alleen met [https://github.com/kennisnet/edurep-xslt xslt's]. Hierin worden deels oude waarden [[Edurep:Mappen_naar_het_OBK|gemapt]] naar nieuwe waarden, foutieve waarden verwijderd of aangepast. Deze oplossing zal na de 2021-11 release worden uitgefaseerd.
! veld
 
! vocabulaires
 
!
 
|-
 
| lom.general.aggregationlevel
 
| LOMv1.0, http://purl.edustandaard.nl/vdex_aggregationlevel_lomv1p0_20060628.xml, http://purl.edustandaard.nl/vdex_aggregationlevel_czp_20060628.xml
 
| [[Edurep:Validatie_lom.general.aggregationlevel|Meer info]]
 
|-
 
| lom.educational.learningresourcetype
 
| http://purl.edustandaard.nl/vdex_learningresourcetype_czp_20060628.xml
 
| [[Edurep:Validatie_lom.educational.learningresourcetype|Meer info]]
 
|-
 
| lom.educational.intendedenduserrole
 
| LOMv1.0, http://purl.edustandaard.nl/vdex_intendedenduserrole_lomv1p0_20060628.xml
 
| [[Edurep:Validatie_lom.educational.intendedenduserrole|Meer info]]
 
|-
 
| lom.educational.context
 
| LOMv1.0, http://purl.edustandaard.nl/vdex_context_lomv1p0_20060628.xml, http://purl.edustandaard.nl/vdex_context_czp_20060628.xml
 
| [[Edurep:Validatie_lom.educational.context|Meer info]]
 
|-
 
| lom.educational.typicallearningtime
 
| Moet voldoen aan het string formaat zoals beschreven op https://wiki.surfnet.nl/display/nllom/duration
 
|
 
|-
 
| lom.rights.cost
 
| LOMv1.0, http://purl.edustandaard.nl/vdex_cost_lomv1p0_20060628.xml
 
| [[Edurep:Validatie_lom.rights.cost|Meer info]]
 
|-
 
| lom.rights.copyrightandotherrestrictions
 
| LOMv1.0, http://purl.edustandaard.nl/vdex_copyrightsandotherrestrictions_lomv1p0_20060628.xml, http://purl.edustandaard.nl/copyrightsandotherrestrictions_nllom_20110411
 
| [[Edurep:Validatie_lom.rights.copyrightandotherrestrictions|Meer info]]
 
|-
 
|}
 
<br/>
 
De geweigerde records zijn terug te vinden op de status pagina van de harvester https://harvester.edurep.kennisnet.nl/page/showHarvesterStatus/show?domainId=production. Hier kan per collectie ook een RSS feed gevolgd worden.
 
   
  +
'''new:'''<br/>
=== OBK: aanvullen taxon entry ===
 
  +
In de nieuwe oplossing is het voor ons eenvoudiger geworden om meer verbetermogelijkheden toe te passen, maar is ook [[Edurep:Veldenlijst/Schema.org/invalid|explicieter uit te vinden]] wat er niet is gevalideerd.
Het invullen van een taxonentry is niet verplicht volgens NL-LOM, maar wel praktisch voor zoekportalen om vakgebieden ed. af te beelden bij zoekresultaten zonder daar een eigen lookup-service voor in te richten. Edurep vult daarom de taxonentries altijd in voor elk geldig OBK identifier in de taxon id binnen de purpose types discipline, educational level en educational objective. Let wel, elke bestaande entry wordt ook overschreven.
 
  +
  +
=== classificaties ===
  +
Alle NL LOM classificatie velden worden op een bepaalde manier omgezet naar schema.org. Het doel is om de schema.org [[Edurep:Metadata/Vak|vak]], [[Edurep:Metadata/Leerniveau|leerniveau]] en [[Edurep:Metadata/Doel|doel]] te reserveren door algemene curriculum vocabulaires. Globaal hanteren we een aantal regels die in volgorde worden afgelopen:
  +
# een OBK identifier (<nowiki>http://purl.edustandaard.nl/begrippenkader/*</nowiki>) binnen purpose type {{Code|discipline}}, {{Code|educational level}} of {{Code|comptency}} wordt geplaatst in respectievelijk {{Code|schema:educationalAlignment}}, {{Code|schema:educationalLevel}} en {{Code|schema:teaches}}.
  +
# voor specifieke oude VDEX vocabulaire waarden wordt een vertaling gemaakt van oude waarde naar OBK identifier
  +
# specifieke regels voor andere classificatiewaarden, met onder meer de mapping van de [[Edurep:Metadata/Toegang|toegangsrechten]]
  +
# alles wat niet matcht wordt binnen als [[Edurep:Metadata/Trefwoorden|trefwoord]] opgeslagen, met behoud van vocabulaire informatie
  +
  +
Op de 2021 migratie pagina is een [[Edurep:Migraties/2021#Overzicht|volledig overzicht]] te vinden.
  +
  +
=== OBK ===
  +
Het invullen van een label bij een classificatie identifier is niet verplicht, maar wel praktisch voor zoekportalen betekenisvolle namen af te beelden bij zoekresultaten zonder daar een eigen lookup-service voor in te richten. Edurep vult daarom de labels altijd in voor elke geldige purl.edustandaard.nl/begrippenkader classificatie identifier vanuit binnen leerniveau, vak en doel.
  +
* Elke bestaande entry wordt ook '''overschreven'''.
  +
* Indien een taxon geen id bevat, maar alleen een entry, wordt de taxon uit het record gehaald omdat de validiteit van de entry niet kan worden bepaald.
   
 
Voorbeeld input:
 
Voorbeeld input:
Regel 225: Regel 138:
 
</syntaxhighlight>
 
</syntaxhighlight>
   
  +
=== vCard ===
  +
Een {{Standaard|VCARD}} in een centity wordt door Edurep gescand om te kunnen zoeken op "author" of "publisher". Van de mogelijke variabelen in een vCard worden N, FN en ORG gebruikt als mogelijke waarden. Het eerste veld in een vCard wat voldoet aan deze variabelen wordt gebruikt. Een vCard moet voldoen aan versie 3.0. Hierbij zijn de FN, N en VERSION verplicht en niet leeg.
   
  +
== Koppelingen ==
Aangezien sommige aanduidingen voor OBK begrippen contextafhankelijk zijn, probeert Edurep ook de contextafhankelijke term toe te voegen indien dit mogelijk is. Dit gebeurt op basis van de inhoud van het educational context veld (5.6). Alleen wanneer er hier één waarde is ingevuld, kan betrouwbaar een contextspecifieke waarde worden gekozen. In alle andere gevallen wordt de contextonafhankelijke aanduiding gebruikt.
 
  +
Tijdens het verwerkingsproces worden koppelingen tussen records gemaakt zodat er bijvoorbeeld zoekopdrachten kunnen worden gedaan op basis van de gemiddelde beoordeling.
 
Voorbeeld input:
 
<syntaxhighlight lang="xml">
 
<educational>
 
<context>
 
<source>
 
<langstring xml:lang=”x-none”>http://purl.edustandaard.nl/vdex_context_czp_20060628.xml</langstring>
 
</source>
 
<value>
 
<langstring xml:lang=”x-none”>PO</langstring>
 
</value>
 
</context>
 
</educational>
 
<classification>
 
<purpose>
 
<source>
 
<langstring xml:lang=”x-none”>LOMv1.0</langstring>
 
</source>
 
<value>
 
<langstring xml:lang=”x-none”>discipline</langstring>
 
</value>
 
</purpose>
 
<taxonpath>
 
<source>
 
<langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</langstring>
 
</source>
 
<taxon>
 
<id>3401cf6e-82e4-404c-b216-b980ff407159</id>
 
<entry>
 
<langstring xml:lang=”nl”>Nederlands</langstring>
 
</entry>
 
</taxon>
 
</taxonpath>
 
</classification>
 
</syntaxhighlight>
 
 
Resultaat:
 
<syntaxhighlight lang="xml">
 
<educational>
 
<context>
 
<source>
 
<langstring xml:lang=”x-none”>http://purl.edustandaard.nl/vdex_context_czp_20060628.xml</langstring>
 
</source>
 
<value>
 
<langstring xml:lang=”x-none”>PO</langstring>
 
</value>
 
</context>
 
</educational>
 
<classification>
 
<purpose>
 
<source>
 
<langstring xml:lang=”x-none”>LOMv1.0</langstring>
 
</source>
 
<value>
 
<langstring xml:lang=”x-none”>discipline</langstring>
 
</value>
 
</purpose>
 
<taxonpath>
 
<source>
 
<langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</langstring>
 
</source>
 
<taxon>
 
<id>3401cf6e-82e4-404c-b216-b980ff407159</id>
 
<!-- De PO specifieke aanduiding voor Nederlands is Nederlandse Taal -->
 
<entry>
 
<langstring xml:lang=”nl”>Nederlandse Taal</langstring>
 
</entry>
 
</taxon>
 
</taxonpath>
 
</classification>
 
</syntaxhighlight>
 
 
== Doorlooptijd ==
 
De doorlooptijd van het verwerken van metadata in Edurep is de tijd tussen het inschieten SMO's of het ophalen van LOM bij de aanbieder en de beschikbaarheid in Edurep Search. Deze doorlooptijd is near-realtime en in de praktijk nauwelijks merkbaar. De primaire doelstelling van Edurep is de beschikbaarheid van het zoeken naar LOM/SMO's en het inschieten van SMO's. De doorlooptijd zal zoveel mogelijk worden geminimaliseerd.
 
 
== vCard ==
 
Een {{Standaard|VCARD}} in een centity wordt door Edurep gescand om te kunnen zoeken op "author" of "publisher". De geïndexeerde waarden zijn vervolgens ook beschikbaar in het "extra" [[Edurep:LOM_SearchRetrieve/x-recordSchema|x-recordSchema]]. Van de mogelijke variabelen in een vCard worden N, FN en ORG gebruikt als mogelijke waarden. Het eerste veld in een vCard wat voldoet aan deze variabelen wordt gebruikt. Een vCard moet voldoen aan versie 3.0. Hierbij zijn de FN, N en VERSION verplicht en niet leeg.
 
 
== Deadlink Checker ==
 
De Deadlink Checker controleert of een LOM record een geldige en werkende URL bevat in het veld lom.technical.location. Een record kan één van de volgende statussen krijgen:
 
* OK: Het resultaat van de URL in lom.technical.location is een 2.x.x of 3.x.x HTTP status code
 
* NTL: Het LOM record bevat geen lom.technical.location (No Technical Location)
 
* FAILED: Het resultaat van de URL in lom.technical.location is een 4.x.x of een 5.x.x HTTP status code.
 
 
Het [[Edurep:Aanbieder Status#Deadlink Checker|resultaat van deze check]] is dat records met status FAILED niet in het antwoord op een zoekvraag worden teruggegeven.
 
 
De Deadlink Checker verstuurt de URL in de eerste waarde uit het veld lom.technical.location als een request. Op dit request zit een timeout van 5 minuten. Als de server binnen die tijd het request niet volledig beantwoord heeft wordt deze gemarkeerd als “FAILED”. Dit gebeurt dus ook als de data niet binnen 5 minuten gedownload kan worden. De status "FAILED" kan dus de volgende oorzaken hebben:
 
* De URL komt uit op een 2.x.x of 3.x.x
 
* De URL is niet conform de correcte notatie (niet urlencoded).
 
* De server is niet bereikbaar
 
* De data van het leerobject kan niet binnen 5 minuten worden gedownload, bijv. in geval van een film-bestand.
 
 
Ongeveer één keer in de week worden alle records met de status “OK” gecontroleerd. De records met de status “FAILED” worden elke dag gecontroleerd. Als de status gewijzigd is dan wordt dit in Edurep verwerkt.
 
   
  +
=== Beoordeling ===
NB: Het kan toch nog voorkomen dat sommige leerobjecten niet als een dead link worden aangemerkt doordat de URL uitkomt op een "landingspagina" die zich meldt als een OK ipv FAILED. Deze situaties zijn lastig te herkennen.
 
  +
Een koppeling tussen een beoordeling en een leermateriaal record wordt gemaakt op basis van het hreview:info veld in {{Standaard|SMO}} en 1 van de [[Edurep:Metadata/Object Identifier|object identifiers]] in een leermateriaal record. Na de 2021-11 release wordt niet slechts gematched op het 1e record identifier, maar kan er op alle record identifiers een match gemaakt worden. Dit betekent ook dat een beoordeling kan worden gekoppeld op een record die met de originele beoordeling geen direct match had.
   
  +
Bijvoorbeeld kan een beoordeling die wijst naar id:1 via id:2 ook gekoppeld worden aan record B:
== SMO Tag Volgorde ==
 
  +
* record A
Na het inschieten van een SMO kan de volgorde van tags verschillen met de volgorde van de tags in het origineel. Wanneer bijvoorbeeld de tags "Eerste Wereldwereldoorlog" eerst bestonden kan dat na een indexering "Wereldoorlog Eerste" zijn. In een zoekapplicatie zou men bij het zoeken naar tags niet een exacte volgorde van tags moeten implementeren maar één waarbij een OR of AND operator wordt toegepast.
 
  +
** id:1
  +
** id:2
  +
* record B
  +
** id:2
  +
** id:3
   
 
[[Categorie:Edurep]]
 
[[Categorie:Edurep]]

Versie van 24 nov 2021 09:07

Edurep harvest diverse repositories via het OAI-PMH protocol. Vervolgens kunnen eindgebruikers via de zoekindex zoeken in het materiaal dat Edurep op deze wijze heeft verzameld. Om de kwaliteit en uniformiteit te garanderen worden er allerlei validaties, bewerkingen en translaties uitgevoerd op de metadata. In het schema hieronder staat een versimpelde weergave van de processen die plaatsvinden binnen Edurep.

  1. records komen binnen via een specifieke interface
  2. naast een initiële validatie (xml/toegang) vindt er inhoudelijke validatie plaats
  3. er worden verschillende opvraagbare representaties gemaakt
  4. de Schema.org variant wordt gebruikt in de aggregator en zoekindex

EdurepComponentenSimplified.png

OAI-PMH Harvester

De harvester haalt de records binnen vanaf de aanbiedersrepository en fungeert daarmee als toegangspoort tot Edurep. Records die niet valideren worden geweigerd en de status is te bekijken op de harvester status pagina.

Harvester Status pagina

Per kolom in het statusoverzicht volgt nu een uitleg over de betekenis ervan:

  • Repository: De identifier van de repository (of een link naar de repository gegevens, alleen beschikbaar voor de beheerder van Edurep).
  • Last successful harvest: Timestamp van de laatste keer dat de harvester een "fout vrij" bezoek heeft gedaan.
  • Total records: Totaal aantal records die de harvester heeft opgehaald. (Dit aantal is niet per definitie hetzelfde als het aantal in Edurep. Het kan bijvoorbeeld voorkomen dat onze deadlink checker records met dode links opruimt.)
  • Harvested/Uploaded/Deleted: De verhouding tussen het aantal nieuwe of gewijzigde, en verwijderde records van het laatste harvest bezoek.
  • #Validation Errors: Het aantal validatiefouten. De link verwijst naar een lijst met alle fouten onderaan de statuspagina.
  • #Errors: Het aantal errors. De link verwijst naar een lijst met alle fouten onderaan de statuspagina.
  • RSS: Geeft toegang tot een rss feed voor een specifieke aangesloten collectie.

Validatiefouten

Wanneer een record succesvol wordt geharvest kan deze voor de opname in de zoekmachine nog geweigerd worden op basis van een validatiefout. Op dit moment wordt er alleen gevalideerd tegen het LOM XML schema (beide bindingen IEEE en IMS kunnen worden aangeboden).

In tegenstelling tot een error wordt er wel doorgeharvest na een validatiefout, tot op zekere hoogte. In principe wordt er na 100 validatiefouten niet meer doorgeharvest, er treedt dan voor de harvester een error op.

Elke validatiefout kan vanuit het foutenoverzicht individueel bekeken worden. De eerste regel van zo'n foutmelding bevat de gegenereerde samenvatting van de fout. In een aantal gevallen zal deze melding voldoende zijn om de fout in kwestie op te sporen. De getoonde xml staat hier in de IEEE LOM binding, maar is inhoudelijk gelijk aan het ingeschoten record.

Soms zegt deze regel echter "Line 105: Unable to transform record". De fout zelf is dan in het xml bestand terug te vinden, en omgeven door expliciete Edurep error xml elementen:

105<edurep:error xmlns:edurep="http://meresco.org/namespace/users/kennisnet/edurep">
106 <lom:keyword xmlns:lom="http://www.imsglobal.org/xsd/imsmd_v1p2">
107  <lom:langstring xml:lang="nl"/>
108 </lom:keyword>
109</edurep:error>

Wanneer een validatiefout bij de aanbieder wordt gerepareerd en volgens OAI met een nieuwe updated timestamp wordt aangeboden, wordt het record weer regulier meegeharvest en verdwijnt de validatiefout.

Deadlink Checker

De Deadlink Checker controleert of een record een geldige en werkende URL bevat in het url veld. Een record kan één van de volgende statussen krijgen:

  • OK: Het resultaat van de url is een 2.x.x of 3.x.x HTTP status code
  • NTL: Het record bevat geen url (No Technical Location)
  • FAILED: De url is niet valide of leidt tot een timeout of een 4.x.x of 5.x.x HTTP status code

Records met status FAILED worden vervolgens niet getoond in Edurep zoekresultaten.

Ongeveer één keer in de week worden alle records met de status "OK" gecontroleerd. De records met de status "FAILED" worden elke dag gecontroleerd.

Info.gif Het kan toch nog voorkomen dat sommige leerobjecten niet als een dead link worden aangemerkt doordat de URL uitkomt op een zogenaamde landingspagina die zich meldt als een OK ipv FAILED. Deze situaties zijn lastig te herkennen.

Deadlink Checker Status Pagina

Er is een statuspagina waar per repository een overzicht van de dode links is op te vragen.

Per kolom in het statusoverzicht een korte omschrijving:

  • Repository: De repository identifier zoals deze in Edurep bekend is.
  • Vindbare records: Het aantal geharveste records minus de records met dode links.
  • Deadlink records: Het aantal records met dode links.
  • Totaal: Het aantal geharveste records

Wanneer men doorklikt op een individuele repository, kan men zich abboneren op de rss feeds van de harvester en de deadlink checker, alsmede een overzicht van alle dode link recordIdentifiers downloaden.

Bewerkingen en Validatie

Er bestaan in Edurep verschillende bewerkings- en validatieprocessen om de kwaliteit van records te verhogen.

ontbrekende waarden

Omwille van de kwaliteit van de metadata vult Edurep een aantal velden van de metadata indien deze niet zijn ingevuld door de aanbieder. Het gaat om:

  • kosten: Edurep vult cost=yes in wanneer kosten niet aanwezig is.
  • uitgever: Edurep vult de repository_id in als publisher wanneer de aanbieder geen uitgever meegeeft.

vocabulaire waarden

In Edurep worden verschillende vocabulairevelden inhoudelijk gevalideerd.

legacy:
De legacy oplossing werkt alleen met xslt's. Hierin worden deels oude waarden gemapt naar nieuwe waarden, foutieve waarden verwijderd of aangepast. Deze oplossing zal na de 2021-11 release worden uitgefaseerd.

new:
In de nieuwe oplossing is het voor ons eenvoudiger geworden om meer verbetermogelijkheden toe te passen, maar is ook explicieter uit te vinden wat er niet is gevalideerd.

classificaties

Alle NL LOM classificatie velden worden op een bepaalde manier omgezet naar schema.org. Het doel is om de schema.org vak, leerniveau en doel te reserveren door algemene curriculum vocabulaires. Globaal hanteren we een aantal regels die in volgorde worden afgelopen:

  1. een OBK identifier (http://purl.edustandaard.nl/begrippenkader/*) binnen purpose type discipline, educational level of comptency wordt geplaatst in respectievelijk schema:educationalAlignment, schema:educationalLevel en schema:teaches.
  2. voor specifieke oude VDEX vocabulaire waarden wordt een vertaling gemaakt van oude waarde naar OBK identifier
  3. specifieke regels voor andere classificatiewaarden, met onder meer de mapping van de toegangsrechten
  4. alles wat niet matcht wordt binnen als trefwoord opgeslagen, met behoud van vocabulaire informatie

Op de 2021 migratie pagina is een volledig overzicht te vinden.

OBK

Het invullen van een label bij een classificatie identifier is niet verplicht, maar wel praktisch voor zoekportalen betekenisvolle namen af te beelden bij zoekresultaten zonder daar een eigen lookup-service voor in te richten. Edurep vult daarom de labels altijd in voor elke geldige purl.edustandaard.nl/begrippenkader classificatie identifier vanuit binnen leerniveau, vak en doel.

  • Elke bestaande entry wordt ook overschreven.
  • Indien een taxon geen id bevat, maar alleen een entry, wordt de taxon uit het record gehaald omdat de validiteit van de entry niet kan worden bepaald.

Voorbeeld input:

<taxonpath>
  <source>
    <langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</langstring>
  </source>
  <taxon>
    <!-- OBK-id voor Voortgezet Onderwijs -->
    <id>2a1401e9-c223-493b-9b86-78f6993b1a8d</id>
  </taxon>
  <taxon>
    <id>512e4729-03a4-43a2-95ba-758071d1b725</id>
    <entry>
        <langstring xml:lang=”nl”>PO</langstring>
    </entry>
  </taxon>
</taxonpath>

Resultaat:

<taxonpath>
  <source>
    <langstring xml:lang="x-none">http://purl.edustandaard.nl/begrippenkader</langstring>
  </source>
  <taxon>
    <id>2a1401e9-c223-493b-9b86-78f6993b1a8d</id>
    <!-- De entry is automatisch aangevuld -->
    <entry>
        <langstring xml:lang=”nl”>Voortgezet Onderwijs</langstring>
    </entry>
  </taxon>
  <taxon>
    <id>512e4729-03a4-43a2-95ba-758071d1b725</id>
    <!-- De entry is automatisch overschreven -->
    <entry>
        <langstring xml:lang=”nl”>Primair Onderwijs</langstring>
    </entry>
  </taxon>
</taxonpath>

vCard

Een VCARD in een centity wordt door Edurep gescand om te kunnen zoeken op "author" of "publisher". Van de mogelijke variabelen in een vCard worden N, FN en ORG gebruikt als mogelijke waarden. Het eerste veld in een vCard wat voldoet aan deze variabelen wordt gebruikt. Een vCard moet voldoen aan versie 3.0. Hierbij zijn de FN, N en VERSION verplicht en niet leeg.

Koppelingen

Tijdens het verwerkingsproces worden koppelingen tussen records gemaakt zodat er bijvoorbeeld zoekopdrachten kunnen worden gedaan op basis van de gemiddelde beoordeling.

Beoordeling

Een koppeling tussen een beoordeling en een leermateriaal record wordt gemaakt op basis van het hreview:info veld in SMO en 1 van de object identifiers in een leermateriaal record. Na de 2021-11 release wordt niet slechts gematched op het 1e record identifier, maar kan er op alle record identifiers een match gemaakt worden. Dit betekent ook dat een beoordeling kan worden gekoppeld op een record die met de originele beoordeling geen direct match had.

Bijvoorbeeld kan een beoordeling die wijst naar id:1 via id:2 ook gekoppeld worden aan record B:

  • record A
    • id:1
    • id:2
  • record B
    • id:2
    • id:3