Community på Sveriges dataportal
Söka efter egenskaper i metadata på dataportal.se
-
Jag undrar hur man gör för att söka på attribut-värden i metadata på dataportal.se (eller mer allmänt matchningar för tripletter i RDF-data)?
Apropå @jonor sa i Nya specifikationer och vägledningar för lediga tomter, matsvinn och snöröjning:
Det står i metadatan för Umeås matsvinn att de publicerat enligt specen, under egenskapen conformsTo. Det borde väl DIGG kunna tala om hur man söker efter värden för en viss egenskap i metadata, är det verkligen något som behöver byggas till?
I dokumentationen nämns dessa konstruktioner:
https://entrystore.org/kb/search/#indexed-information
metadata.predicate.literal.<md5>, metadata.predicate.uri.<md5>
: Used to carry out queries for exact predicate-object combinations.Jag är lite förvirrad över att ovanstående nämner "predicate-object combinations", utan att det framgår var objekt-delen kommer in, men gissar att man kombinerar uttrycket med ett motsvarande för object som nämns längre fram.
metadata.object.uri
: All object URIs.Av det jag förstår har jag har provat att skapa en fråga med kodade värden för predikat och objekt.
http://purl.org/dc/terms/conformsTo
md5sum => 957f77a73041387bf0397bf451b24f8ahttps://www.dataportal.se/specifications/matsvinn/1.0
md5sum => 803c33eb344e3edb4053074963a48ef6Sökuttryck:
metadata.predicate.uri.957f77a7 AND metadata.object.uri.803c33eb
Jag provar att skapa en frågemall på Swagger-sidan och lägger in bas-adressen:
https://entrystore.org/api/#/search/search
"results": 1171,
Sökningen ger ett tusental träffar (jag hade nog förväntat mig 0 eller ett fåtal), och jag kan inte se att resultatet innehåller det jag är ute efter.
Är det något fel i kodning, syntax eller den metod jag använder för att formulera frågan? Varför ger frågan ett stort antal resultat?
Man kan väl också undra om Solr är den mest lämpliga applikationen för att söka i metadata om den inte accepterar parametervärden normalt förekommande i RDF-grafer och metadata? Det förefaller krångligt att behöva koda sökvärden manuellt, och det blir svårare att förstå, felsöka och justera frågor.
https://entrystore.org/kb/search/#indexed-information
Due to restrictions in Solr it was necessary to shorten the predicate URI, which was done using an MD5 hash (hex) of the predicate URI truncated after 8 characters. Collisions are unlikely and in case of occurence non-fatal. The field value is the string value of the object.
-
Ser av ett annat inlägg att jag missat en del aspekter av syntaxen, att kolon-tecknet i dokumentationen ingår i uttrycket, att det generella formatet är egenskap:värde, att det enbart är predikatet som behöver kortas av genom kodning, och att kolon-tecken behöver kodas i övriga delar av uttryck som t.ex. URI:er.
Kommentar gällande dokumentationen
Det skulle vara lättare att förstå om dokumentationen beskriver ett komplett sökuttryck med platshållare för värdet, och med exempel på tillämpning. Inget av fåtalet exempel långt ned på sidan innehåller heller en URI som värde vad jag kan se.
https://entrystore.org/kb/search/#indexed-information
metadata.predicate.literal.<md5>, metadata.predicate.uri.<md5>
: Used to carry out queries for exact predicate-object combinations ...Exempel på förtydligande:
metadata.predicate.literal.<md5>:<value>, metadata.predicate.uri.<md5>:<value>
metadata.predicate.uri.a2b4c6d8:https\://example.com/identifier
Frågeställning
För att återgå till det aktuella problemet; frågeparametern skulle då bli, med kodning för predikat och objektvärde:
metadata.predicate.uri.957f77a7:https\://www.dataportal.se/specifications/matsvinn/1.0
URL, med ytterligare URI-kodning av parametervärden:
Resultatet ger en träff, en datamängd från opendata.umea.se som refererar till specifikationen för matsvinn, vilket verkar rimligt:
"dcat:landingPage": {"@id": "https://opendata.umea.se/explore/dataset/matsvinn/"}
Enklare API
Jag tycker dock att det verkar väl krångligt att konstruera dessa sökningar med kodningar i flera steg. Visserligen går det att automatisera i programkod och skapa ett gränssnitt (vilket då borde ha gjorts från början), men det vore att föredra om det fanns ett API där man kan skicka in frågor mer direkt och använda standard-klienter. Därför tycker jag också det vore lämpligt att koppla på SPARQL-API:et för sökningar i metadata, något som uppenbarligen ingår i den produkt som används för tjänsten.
@august sa i API-användning: Hämta alla dataset kopplade till en specifik organisation:
Det går istället att begränsa sökningen direkt för att enbart få dessa datamängder genom:
https://admin.dataportal.se/store/search?type=solr&query=(rdfType:http%5C%3A%2F%2Fwww.w3.org%2Fns%2Fdcat%23Dataset)+AND+public:true+AND+(metadata.predicate.uri.9259d4c1:http%5C%3A%2F%2Fid.kb.se%2Forganisations%2FSE2021000837)&offset=0
Jag lade till facetten metadata.predicate.uri.<md5> för att söka datamängdens utgivare. I det här fallet är predikatet 'http://purl.org/dc/terms/publisher', men en behöver skapa MD5 hash (och trunkera till 8 chars pga begränsningar i Solr). 'http://purl.org/dc/terms/publisher' blir då 9259d4c1. För mer info om indexeringen som sker via Solr, se: https://entrystore.org/kb/search/ . Där finns också mer info om alla möjliga sätt att söka mot lagringslösningen för admin.dataportal.se