JSONP API for bruk av katalogens kategorier

ABC Startsiden har en velholdt katalog med flere tusen kategorier, og i forbindelse med at vi skrev om hvordan vi gjorde oppslag i den bestemte vi oss for å gjøre det mulig for utviklere som ønsker å søke i emnene eller linke til katalogen å lage et enkelt JavaScript for å gjøre oppslag. Dette kan f.eks. brukes i “autocomplete”, dvs., idet man taster noen tegn inn i et tekstfelt dukker det opp forslag til kategori, som blir mer nøyaktig etterhvert som man skriver, og så kan man velge en kategori til slutt.

Dette kan du bruke som et eget søkefelt på din side, eller du kan bruke det til å lett finne linker til katalogen. La oss ta et eksempel: Ved å bruke denne URLen http://www.startsiden.no/api/katalog/v1/autocomplete?q=skiskyting&callback=jsonp får man tilbake denne JSONP-strukturen:

jsonp(
  {"katalog":[
    {"url":"http://www.startsiden.no/kategorier/sport/alle_sportsgrenene/skiskyting/",
      "path": ["Sport","Alle sportsgrenene"],
      "abstract_uri":"http://sw.startsiden.no/katalog/v1/skiskyting-13084",
      "title":"Skiskyting"
    },
    {"url":"http://www.startsiden.no/kategorier/sport/alle_sportsgrenene/skiskyting/klubber/",
     "path":["Sport","Alle sportsgrenene","Skiskyting"],
     "abstract_uri":"http://sw.startsiden.no/katalog/v1/klubber-13397",
     "title":"Klubber"
    }]
  }
);

Som du ser, får du en liste (array) med treffene, sortert etter relevans ifølge Startsidens søkemotor, For hvert treff er det fire felter, title som er tittelen til denne kategorien. I url-feltet er URLen til kategorien i katalogen til Startsiden. I feltet path er det en liste (array) som angir hvilke kategorier man må følge fra forsiden for å komme til denne kategorien (altså super-kategoriene). Til slutt er det et felt abstract_uri som vi skal fortelle mer om senere, men kort sagt kan du her finne mer informasjon i maskinlesbar form.

Vi oppfordrer utviklere til å bruke denne APIen. Se et eksempel på hvordan man kan ta det hele i bruk ved hjelp av jQuery og jQuery UI her.

Målet med JSON-APIen er at det skal gå raskest mulig å slå opp, så det er bare den informasjonen man absolutt trenger. Vil du har mer informasjon i applikasjonen din har vi i tillegg har vi lagd en såkalt SKOS-versjon av katalogen. Her kan du finne linker til bredere og smalere kategorier, relaterte kategorier, en beskrivelse, nøkkelord, osv. Dette kan brukes til å tagge innholdet ditt, slik at maskiner i framtiden kan lettere finne fram, noe som vil gi mer trafikk og muligheter til interessante applikasjoner. Mer om dette i en senere blogg-post.

Publisert i APIer, Semantic Web, Uncategorized | Skriv en kommentar

Startsidens katalog tilgjengelig for utviklere

Startsiden har en velholdt katalog med flere tusen kategorier, og vi har nå bestemt oss for å åpne denne katalogstrukturen for utviklere og andre interesserte.

Tagging har utviklet seg til å bli en god måte å klassifisere informasjon på, men den har sine begrensninger når det kommer til å dele informasjon med andre. En ting som typisk er vanskelig med tagger er å skille når noen bruker ordet “ski”, mener man da ski til å gå på, eller tettstedet eller kommunen Ski? En mulig løsning på dette er å koble sine tagger til et felles begrepsapparat som kan deles av flere. Startsidens mange kategorier gir et omfattende begrepsapparat som vil gjøre det mulig for utviklere å bygge løsninger som løser slike problemer. Videre kan man ved å bruke dette la en maskin finne ut at ski er sportsutstyr og at Ski er i Norge. Mulighetene er store.

Løsningen består av to deler: Den ene biten er en formulering av kategoriene med Simple Knowledge Organization System (SKOS), som er en mye brukt web-standard for katalogstrukturer. Denne er sluppet under en Creative Commons-lisens, nærmere bestemt “by-sa”.

Den andre biten er er JSON-API som kan brukes til autocomplete i søkefelt, altså, man kan lage en applikasjon som gir brukeren forslag om kategorier å bruke når man begynner å skrive. Denne er beskrevet i en egen artikkel.

SKOS-eksport

Hva er SKOS?

SKOS er en Semantic Web-standard, noe som betyr at dataene kommer som RDF, og er publisert etter Linked Data-prinsipper på flere forskjellige formater, først og fremst RDF/XML, N-Triples, RDF/JSON og Turtle. Sistnevnte er foretrukket.

Et SKOS-eksempel fra Startsiden

Hvis vi tar pop-kategorien som eksempel, finner vi på http://sw.startsiden.no/katalog/v1/pop-7003/data bl.a. dette:

<http://sw.startsiden.no/katalog/v1/pop-7003> a skos:Concept ;
	skos:prefLabel "Pop"@no ;
	skos:definition "<div xml:lang=\"no\">Pop er musikk ...</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> ;
	skos:related </katalog/v1/festivaler-217280> ;
	skos:narrower </katalog/v1/musikere-206609> ;
	skos:broader </katalog/v1/musikksjangere-4728> ;
	<http://xmlns.com/foaf/0.1/page> <http://www.startsiden.no/musikk/musikksjangere/pop/> .

Allerede i URIen (adressen) ser vi en forskjell fra hvordan vi er vant til å tenke: Det er forskjell mellom http://sw.startsiden.no/katalog/v1/pop-7003 som identifiserer det abstrakte konseptet “pop” og
http://sw.startsiden.no/katalog/v1/pop-7003/data som identifiserer en informasjon om konseptet. Den store praktiske forskjellen er det ikke, siden du får en “redirect” fra den uten /data til den med.

Så hva er det utdraget betyr? Aller først sier vi hva vi snakker om,
nemlig http://sw.startsiden.no/katalog/v1/pop-7003. Alt som
følger handler om denne ressursen, og det den første linja sier er at den er av typen skos:Concept, altså et konsept i Startsidens begrepsapparat. Den neste linja sier at det foretrukne navnet på dette konseptet er “Pop” og at navnet er på norsk. Deretter kommer en definisjon i HTML-format.

De tre neste linjene forteller om hvilke relasjoner denne kategorien har til andre kategorier: skos:broader forteller at kategorien over i hierarkiet er “Musikksjanger”-kategorien, som er identifisert ved sin URI. Underkategorien(e) vises i skos:narrower og skos:related brukes til @-linkene i katalogen. Til slutt linker vi til Startsiden-siden som hører til dette konseptet.

For topp-kategoriene er det enkelte forskjeller, fordi de ikke har noen bredere kategori får de istedet en skos:topConceptOf til et skos:ConceptScheme som gir en beskrivelse av begrepsapparatet som helhet. Her ligger også lisensen.

Bruke det i egne sider

Hvis du vil komme igang å tagge dine ting med katalogen, kan du bruke RDFa. RDFa er en standard som er på full fart oppover, det er denne standarden som også Facebook’s Open Graph Protocol er bygd på. Vi anbefaler et vokabular som heter Common Tag.

Det aller enkleste er å bare legge inn noe i head i toppen av fila. Hvis du skal tagge en artikkel med sport, vil du kunne tagge artikkelen som helhet slik:

<link xmlns:ctag="http://commontag.org/ns#" rel="ctag:tagged" href="http://sw.startsiden.no/katalog/v1/sport-7679"/>

La oss ta et litt mer avansert eksempel. Si at du idag har en liste med tagger, som hver linker til en side med artiklene som er tagget med akkurat det tagget. La oss si at vi skal tagge med “ski” og “feriesentre”. Da kan det lages som følger:

<ul xmlns:ctag="http://commontag.org/ns#">
<li property="ctag:tagged" resource="http://sw.startsiden.no/katalog/v1/ski-12935">
  <a href="http://example.org/myoldtags/ski">Sport</a>
</li>
<li property="ctag:tagged" resource="http://sw.startsiden.no/katalog/v1/feriesentre-4214">
  <a href="http://example.org/myoldtags/feriesentre">Feriesentre</a>
</li>
</ul>

Hvis du har flere artikler på samme siden, vil du trenge en ID på hver artikkel, men forøvrig kan du gjøre det på samme måte, men du vil trenge et about-attributt for hver artikkel, f.eks hvis ski-ferien bare er en av mange blogg-poster, gjør du:

<ul about="#ski-ferien" xmlns:ctag="http://commontag.org/ns#">
<li property="ctag:tagged" resource="http://sw.startsiden.no/katalog/v1/ski-12935">
  <a href="http://example.org/myoldtags/ski">Sport</a>
</li>
<li property="ctag:tagged" resource="http://sw.startsiden.no/katalog/v1/feriesentre-4214">
  <a href="http://example.org/myoldtags/feriesentre">Feriesentre</a>
</li>
</ul>

Verktøystøtte

For dem som skriver HTML-kode kan man bare følge eksemplene over. Ellers kan man se etter RDFa og CommonTag-støtte i verktøyene man benytter. Det populære CMS-systemet Drupal, som brukes av ABC Nyheter har støtte for dette.

Denne Wikien har også en lang liste over verktøy.

Veien videre

Siden vi bruker SKOS er man ikke begrenset til Startsiden selv om man tar vår struktur i bruk. Alle Wikipedia-kategorier finnes også som SKOS, New York Times bruker SKOS my på samme måte som oss. Videre har vi den amerikanske Library of Congress Subject Headings, og Google-eide Freebase er også relevant, og mange flere. På sikt vil det være aktuelt å linke vårt begrepsapparat til andres, slik at disse kan brukes om hverandre og dermed videreføre Linked Data-prinsippene.

Videre er ikke Startsidens katalog tilstrekkelig til å klassifisere alle situasjoner, men da kan man også bruke SKOS til å formulere sitt eget begrepsapparat, og koble det til Startsiden der det er riktig å gjøre. Dermed er Startsiden også en god startside for den semantiske webben!

Publisert i Semantic Web | Skriv en kommentar