Brukermanual Spørretjenesten

Fra GrepWiki

Gå til: navigasjon, søk

Innhold

Brukermanual for Grep Læreplanspørringer

Historikk

Revisjon Dato Revidert av Kommentar
0.9 25.07.2011 Stian G-E Første versjon
0.9.5 15.013.2012 Are Mjølsnes Språkvask og klargjøring

Introduksjon

Utdanningsdirektoratet tilbyr nå et sett med tjenester som gjør det mulig å hente ut data fra Grep. I dette dokumentet gir vi en oppsummering av muligheter og brukseksempler for disse tjenestene.

Webtjenester

Typer elementer

Tjenestene tilbyr uthenting av følgende typer elementer fra Grep:

* Med kortinformasjon, mener vi informasjon som kan brukes videre til å hente ut full informasjon om et gitt element, basert på kode eller id.

Grensesnitt

Disse tjenestene er tilgjengelige på forskjellige grensesnitt og formater. Følgende grensesnitt tilbys:

Definisjon av elementer

Teknisk definisjon av de ulike typene finnes i et separat dokument, Teknisk dokumentasjon av SOAP. Her finner du blant annet nærmere definisjoner på elementer som

Skjemaet/datadefinisjonen for disse elementene er det samme for SOAP- og REST-grensesnittet.

REST-grensesnittet

I tabellen nedenfor har vi listet opp hvilke URLer du kan bruke for å hente ut de ulike elementene. REST-grensesnittet støtter en rekke ulike formater. Om du vil bruke et annet format enn standardformatet (JSON), oppgir du dette ved å legge på {.format} på slutten av URLen. For eksempel oppgir du http://data.udir.no/kl06/fag.xml for å liste ut alle fag i xml-format.


Url
Beskrivelse
Støttede formater
Eksemplel
http://data.udir.no/kl06/fag{.format} Henter ut alle fag i Grep RSS/Atom (.atom)
XML (.xml)
JSON (.json)
http://data.udir.no/kl06/fag (gir tilbake alle fag i standardformat)

http://data.udir.no/kl06/fag.atom

(gir tilbake alle fag som en RSS-feed)
http://data.udir.no/kl06/laereplaner{.format} Henter ut alle læreplaner i Grep RSS/Atom (.atom)
XML (.xml)
JSON (.json)
http://data.udir.no/kl06/laereplaner (gir tilbake alle læreplaner i standardformat)
http://data.udir.no/kl06/laereplaner.atom
(gir tilbake alle læreplaner som en RSS-feed)
http://data.udir.no/kl06/utdanningsprogram{.format} Henter ut alle utdanningsprogam i Grep RSS/Atom (.atom)
XML (.xml)
JSON (.json)
http://data.udir.no/kl06/utdanningsprogram (gir tilbake alle utdanningsprogram i standardformat)
http://data.udir.no/kl06/utdanningsprogram.atom
(gir tilbake alle utdanningsprogram som en RSS-feed)
http://data.udir.no/kl06/programomraader{.format} Henter ut alle programområder i Grep RSS/Atom (.atom)
XML (.xml)JSON (.json)
http://data.udir.no/kl06/programomraader (gir tilbake alle utdanningsprogram i standardformat)
http://data.udir.no/kl06/programomraader.atom
(gir tilbake alle utdanningsprogram som en RSS-feed)
http://data.udir.no/kl06/{kode}{.format} Henter ut et element i Grep. Foreløpig kan disse elementene hentes ut:
  • Fag
  • Læreplaner
  • Utdanningsprogram
  • Programområder*

* Programområder støtter p.t ikke xtm

XML (.xml)
JSON (.json)
XTM 2.0 (.xtm)
http://data.udir.no/kl06/IDR1-01
(Gir tilbake læreplan med kode IDR1-01 i standardformat)
http://data.udir.no/kl06/IDR1-01.xml
(Gir tilbake samme læreplan i xml-format)
http://data.udir.no/kl06/HSF1001
(gir tilbake faget med kode HSF1001 i standardformat)

SOAP-grensesnittet

Grep tilbyr også et SOAP-grensesnitt, og endepunkt-URL for dette grensesnittet er http://data.udir.no/kl06/soap. Wsdl/kontrakten for denne tjenesten kan hentes ut på http://data.udir.no/kl06/soap?wsdl. Kontrakten inneholder tjenestekontrakten og alle relevante datatyper.

SOAP-grensesnittet tilbyr følgende metoder for å finne og hente informasjon fra Grep:


Metode
Beskrivelse
Teknisk dokumentasjon
FinnPlaner Finner læreplaner basert på søkekriterier. Se teknisk dokumentasjon for detaljer rundt parametere FinnPlaner
FinnFag Finner fag basert på søkekriterier. Se teknisk dokumentasjon for detaljer FinnFag
FinnProgramomraader Finner programområder basert på søkekriterier. Se teknisk dokumentasjon for detaljer FinnProgramomraader
FinnUtdanningsprogram Finner utdanningsprogram basert på søkekriterier. Se teknisk dokumentasjon for detaljer FinnUtdanningsprogram
HentPlanFraKode Returnerer en læreplan basert på læreplanens kode HentPlanFraKode
HentPlanFraPsi Returnerer en læreplan basert på læreplanens PSI (id) HentPlanFraPsi
HentFagFraKode Returnerer et fag basert på fagets kode HentFagFraKode
HentFagFraPsi Returnerer et fag basert på fagets PSI (id) HentFagFraPsi
HentProgramomraadeFraKode Returnerer et programområde basert på programområdets kode HentProgramomraadeFraKode
HentProgramomraadeFraPsi Returnerer et programområde basert på programområdets psi HentProgramomraadeFraPsi
HentUtdanningsprogramFraKode Returnerer et utdanningsprogram basert på utdanningsprogrammets kode HentUtdanningsprogramFraKode
HentUtdanningsprogramFraPsi Returnerer et utdanningsprogram basert på PSI (id) HentUtdanningsprogramFraPsi

OData-grensesnittet

Grep tilbyr et enkelt OData-grensesnitt for å søke etter elementer. Dette tilbys som et alternativ til det SOAP-baserte søket, der dette søket er for begrenset, eller om du ikke vil benytte SOAP. OData-grensesnittet forholder seg til spesifikasjonene som finnes på http://www.odata.org/.

Grunn-URL til OData-grensesnittet er http://udir.data.no/kl06/odata.

OData og fag

For å spørre etter fag, oppgir du URLen http://udir.data.no/kl06/odata/Fag (merk: OData-grensesnittet skiller mellom store og små bokstaver). OData leverer som standard en RSS-feed, men du kan også spesifikt be om å få returnert JSON.

Illustrasjon 1: Fag som RSS-feed


Illustrasjon 2: Fag som JSON (merk bruk av ?$format=json i URL)


På fag kan du bruke følgende felter til å filtrere resultater:


Felt
Beskrivelse
Eksempel
Tittel Fagets tittel på default språk http://data.udir.no/kl06/odata/Fag?$filter=startswith(Tittel,'Tverrfaglig') (Returnerer alle fag hvis tittel starter med “Tverrfaglig”)
Kode Fagets kode http://data.udir.no/kl06/odata/Fag?$filter=(Kode%20eq%20'ENG0001') (Returnerer faget hvis kode er ENG0001)
Psi Fagets identifikator (eller PSI i Grep) http://data.udir.no/kl06/odata/Fag?$filter=(Psi%20eq%20'uuid:59d5b28c-963b-40d4-bf41-eff7b333b424') (Returnerer faget med PSI = uuid:59d5b28c-963b-40d4-bf41-eff7b333b424)
UrlData Url til detaljert informasjon om faget for maskinell behandling http://data.udir.no/kl06/odata/Fag?$filter=(Psi eq 'uuid:59d5b28c-963b-40d4-bf41-eff7b333b424')&$select=UrlData&$format=json (Returnerer kun UrlData-feltet på json-format for faget med PSI = uuid:59d5b28c-963b-40d4-bf41-eff7b333b424)
UrlPsi Url til detaljert informasjon om faget for brukere http://data.udir.no/kl06/odata/Fag?$filter=(Psi eq 'uuid:59d5b28c-963b-40d4-bf41-eff7b333b424')&$select=UrlPsi&$format=json (Returnerer kun UrlPsi-feltet på json-format for faget med PSI = uuid:59d5b28c-963b-40d4-bf41-eff7b333b424)
SistEndret Når faget sist ble oppdatert http://data.udir.no/kl06/odata/Fag?$filter=(SistEndret%20gt%20datetime'2011-01-01') (Returnerer alle fag som er endret etter 1 januar 2011)

OData og læreplaner

For å spørre etter læreplaner, oppgir du URLen http://data.udir.no/kl06/odata/Læreplan.

Illustrasjon 3: Læreplaner som RSS-feed
Illustrasjon 4: Læreplaner levert som JSON


På læreplan kan du bruke følgende felter til å filtrere resultater:


Felt
Beskrivelse
Eksempel
Tittel Læreplanens tittel på fastsatt språk http://data.udir.no/kl06/odata/Læreplan?$filter=endswith(Tittel,'engelsk') (Returnerer alle læreplaner hvis tittel slutter med “engelsk”)
Kode Læreplanens kode http://data.udir.no/kl06/odata/Læreplan?$filter=(Kode eq 'SFS2-01') (Returnerer læreplanen hvis kode er SFS2-01)
Psi Læreplanens identifikator (eller PSI i Grep) http://data.udir.no/kl06/odata/Læreplan?$filter=(Psi eq 'uuid:3e9bd273-f1cd-4631-854e-1229e384938c') (Returnerer læreplanen med PSI = uuid:3e9bd273-f1cd-4631-854e-1229e384938c)
UrlData Url til detaljert informasjon om faget for maskinell behandling http://data.udir.no/kl06/odata/Fag?$filter=(Psi%20eq%20'uuid:59d5b28c-963b-40d4-bf41-eff7b333b424')&$select=UrlData&$format=json (Returnerer kun UrlData-feltet på json-format for faget med PSI = uuid:59d5b28c-963b-40d4-bf41-eff7b333b424)
UrlPsi Url til detaljert informasjon om faget for brukere http://data.udir.no/kl06/odata/Fag?$filter=(Psi%20eq%20'uuid:59d5b28c-963b-40d4-bf41-eff7b333b424')&$select=UrlPsi&$format=json (Returnerer kun UrlPsi-feltet på json-format for faget med PSI = uuid:59d5b28c-963b-40d4-bf41-eff7b333b424)
SistEndret Når faget sist ble oppdatert http://data.udir.no/kl06/odata/Fag?$filter=(SistEndret%20gt%20datetime'2011-01-01') (Returnerer alle fag som er endret etter 1 januar 2011)

OData og programområder

For å spørre etter programområder, oppgir du URLen http://data.udir.no/kl06/odata/Programområde

Filtreringsmulighetene er de samme som for fag.

OData og utdanningsprogram

For å spørre etter utdanningsprogram, oppgir du URLen http://data.udir.no/kl06/odata/Utdanningsprogram

Filtreringsmulighetene er de samme som for fag.

Eksempler

Bruk av SOAP-grensesnitt (.Net)

Her følger et enkelt eksempel på hvordan du kan ta i bruk Greps SOAP-grensesnitt i en .Net-basert applikasjon.

Illustrasjon 5: Opprett en ny applikasjon
Illustrasjon 6: Legg til en ny tjeneste-referanse
Illustrasjon 7: Oppgi URL (http://udir.data.no/soap), trykk "GO" og OK


Endringer i konfigurasjon

I dette tilfellet bruker vi en WCF proxy-klasse for å få tilgang til tjenesten. Denne har en del standardinnstillinger, som blant annet går på hvor mange elementer man kan laste ned, og størrelsen på “pakken” fra tjenesten. Grep-tjenesten kan i utgangspunktet gi en oversikt over alle læreplaner, og dette vil overstige standardinnstillingene. For å endre dette, gå til applikasjonens app.config-fil. Der vil du finne noen linjer som ligner på disse:

<syntaxhighlight lang="xml"> <basicHttpBinding>

               <binding name="GrepSoapBinding_GrepSoap" closeTimeout="00:01:00"
                   openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                   allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                   maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                   messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                   useDefaultWebProxy="true">
                   <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                   <security mode="None">
                       <transport clientCredentialType="None" proxyCredentialType="None"
                           realm="" />
                       <message clientCredentialType="UserName" algorithmSuite="Default" />
                   </security>
               </binding>

</basicHttpBinding> </syntaxhighlight>

Her må/bør du endre maxBufferSize og maxReceivedMessageSize til mer enn 65536 tegn, i tillegg til å øke maks antall objekter i en liste. Et forslag på hvordan konfigurasjonen på denne applikasjonen kan se ut er slik (endringer er uthevet):

<syntaxhighlight lang="xml"> <system.serviceModel>

       <bindings>
           <basicHttpBinding>
               <binding name="GrepSoapBinding_GrepSoap" closeTimeout="00:01:00"
                   openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                   allowCookies="false" bypassProxyOnLocal="false"
                   hostNameComparisonMode="StrongWildcard"
                   maxBufferSize="6553600" maxBufferPoolSize="524288" maxReceivedMessageSize="6553600"
                   messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                   useDefaultWebProxy="true">
                   <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                   <security mode="None">
                       <transport clientCredentialType="None" proxyCredentialType="None"
                           realm="" />
                       <message clientCredentialType="UserName" algorithmSuite="Default" />
                   </security>
               </binding>
           </basicHttpBinding>
       </bindings>
       <client>
           <endpoint address="http://data.udir.no/kl06/soap"
               binding="basicHttpBinding" behaviorConfiguration="GrepBehavior"  
       bindingConfiguration="GrepSoapBinding_GrepSoap"
               contract="Læreplanspørringer.GrepSoap" name="GrepSoapBinding_GrepSoap" />
       </client>
     <behaviors>
       <endpointBehaviors>
         <behavior name="GrepBehavior">
           <dataContractSerializer maxItemsInObjectGraph="2147483647" />
         </behavior>
       </endpointBehaviors>
     </behaviors>

</system.serviceModel> </syntaxhighlight>

Kode

Nå har vi det vi trenger for å kunne bruke tjenestene. Det som gjenstår er litt kode for å faktisk kalle tjenesten.

I eksempelet her vil vi lage en WPF-basert applikasjon for å kunne søke opp læreplaner basert på tittel og gyldig fra-datoen på læreplanen. Vi vil også kunne hente en valgt læreplans vurdering og vise denne.

Først definerer vi brukergrensesnittet (XAMLen).

Her oppretter vi et enkelt stackpanel med en tekstboks for å skrive inn tittel, en datovelger for å velge gyldig fra, en knapp for å starte søk, et grid for å vise søkeresultat (med tittel, kode og gyldig fra som kolonner) og en web-browser for å vise html:

<syntaxhighlight lang="xml"> <Window x:Class="TestApplikasjon.MainWindow"

       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow" Width="973" Closing="WindowClosing">
   <Grid>
       <StackPanel>
           <Label Content="Tittel å søke på"></Label>
           <TextBox Name="txtTittel"></TextBox>
           <Label Content="Gyldig Fra å søke på"></Label>
           <DatePicker Name="dtpGyldigFra"></DatePicker>
           <Button Name="btnSøk" Content="Søk" HorizontalAlignment="Left" Width="40" Click="BtnSøkClick"></Button>
           <ScrollViewer MaxHeight="150">
               <DataGrid Name="dgSøkeresultat" AutoGenerateColumns="False"
               SelectionChanged="DgSøkeresultatSelectionChanged">
                   <DataGrid.Columns>
                       <DataGridTextColumn Binding="{Binding tittel}" Header="Tittel"></DataGridTextColumn>
                       <DataGridTextColumn Binding="{Binding kode}" Header="Kode"></DataGridTextColumn>
                       <DataGridTextColumn Binding="{Binding gyldigfra}" Header="Gyldig fra"></DataGridTextColumn>
                   </DataGrid.Columns>
               </DataGrid>
           </ScrollViewer>
           <Label Content="Vurdering" FontWeight="Bold"></Label>
               <ScrollViewer MaxHeight="150">
                   <WebBrowser Name="webBrowser"></WebBrowser>
           </ScrollViewer>
           
       </StackPanel>
   </Grid>

</Window> </syntaxhighlight>


Deretter definerer vi koden for å søke, og for å vise vurdering:

<syntaxhighlight lang="xml"> public partial class MainWindow : Window

   {
       public MainWindow()
       {
           InitializeComponent();
       }
       private GrepSoapClient Client { get; set; }
       const string HtmlHeadere = @"<html> <head> <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>

</head> <body>";

       const string HtmlSluttHeader = @"</body> </html>";


       // Kode som kjøres når søk-knappen klikkes
       private void BtnSøkClick(object sender, RoutedEventArgs e)
       {
           InitierProxy();
           try
           {
               // Kjører FinnPlaner-metoden med tittel og gyldig-fra som parametere
               dgSøkeresultat.ItemsSource = this.Client.FinnPlaner(
                   new laereplansoekrequest { gyldigfra = dtpGyldigFra.DisplayDate, tittel = txtTittel.Text }).treff;
           }
           catch (Exception ex)
           {
               if (Client.State == CommunicationState.Faulted)
               {
                   this.Client.Abort();
               }
               MessageBox.Show(ex.ToString());
           }
       }
       private void DgSøkeresultatSelectionChanged(object sender, SelectionChangedEventArgs e)
       {
           InitierProxy();
           try
           {
               // Finner koden fra det valgte søkeresultatet i Grid'en
               var valgtKode =
                   e.AddedItems.Cast<laereplansoekeresultat>().Select(soekeresultat =>
    soekeresultat.kode).FirstOrDefault();
               // Henter hele læreplanen fra tjenesten (HentPlanFraKode), og velger ut vurderingen på 'default'-språk

(fastsatt språk)

               var vurdering =
                   Client.HentPlanFraKode(new hentlaereplanfrakoderequest { Kode = valgtKode })
                       .vurdering
                           .Where(v => v.noekkel == "default")
                       .Select(v => v.verdi)
                       .FirstOrDefault();
               // Viser vurderingen i en browser
               if (vurdering != null)
                   webBrowser.NavigateToString(HtmlHeadere + vurdering + HtmlSluttHeader);
           }
           catch (Exception ex)
           {
               if (Client.State == CommunicationState.Faulted)
               {
                   this.Client.Abort();
               }
            
               MessageBox.Show(ex.ToString());
           }
       }
       private void InitierProxy()
       {
           if (Client == null || Client.State == CommunicationState.Faulted)
               Client = new GrepSoapClient();
       }
       private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
       {
           if (Client != null && Client.State == CommunicationState.Opened)
               Client.Close();
       }
   }

</syntaxhighlight>

Demonstrasjon

Når vi kjører denne applikasjonen, kan vi filtrere på tittel og gyldig fra. Om vi oppgir “Natur” som tittel og 01.01.2008 som gyldig fra, vil vi få følgende resultat:

Illustrasjon 8: Testing av applikasjon

Rest-grensesnitt

Utlisting av alle fag i html-side med JQuery

Følgende html-dokument benytter JQuery og REST-grensesnittet for å liste ut en enkel html-side med lenker til alle fag. Lenkene peker på URL-data – URLen, med kode og tittel som beskrivelse av lenken:

Test.html: <syntaxhighlight lang="html4strict"> <!DOCTYPE html> <html> <head> <title>Test</title> <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'> <script src="http://code.jquery.com/jquery-latest.js"> </script>

</head> <body>

<script type="text/jscript">

 $.getJSON("http://data.udir.no/kl06/fag?callback=?",
 {},
 function (data)
 {
       $.each(data, function (i, fag) {$('p').append('<a href=' + fag["url-data"] + '>' + fag.kode + ' - ' + fag.tittel + '</a>
'); }) });

</script> </body> </html> </syntaxhighlight>

Html-side i nettleser:

Illustrasjon 9: HTML-side i nettleser

Kombinasjon av grensesnitt (REST og OData)

Som et eksempel på litt mer avansert bruk, viser vi her et eksempel som tilbyr et “fritekst”-søk etter læreplaner, og mulighet for å se på detaljert informasjon om læreplanen (formålet med læreplanen). Eksempelet tar i bruk JQuery og jQuery-ui (og sannsynligvis ganske amatørmessig utført), men kan like gjerne utføres i andre teknologier.

På bildet under ser du et felt hvor du kan skrive inn deler av kode eller tittel, og får tilbake en liste med treff. Søket går mot OData-grensesnittet, hvor du har stor frihet til å definere hva du vil hente ut, og hvordan. I dette eksempelet vil du hente tilbake kode, tittel og URL-data-feltene fra de læreplanene (maks 25) hvor læreplanens sammenslåtte kode og tittel inneholder deler av søkestrengen.

Illustrasjon 10: Søkefelt for kode eller tittel

Metoden for søket ser slik ut:

<syntaxhighlight lang="Java"> // Søker etter læreplaner

   function soekEtterLaereplaner(soekestreng, maksAntallTreff) {
   
           var url = baseurl + "odata/Læreplan?$callback=?&$format=json";
           
           var filter = "&$filter=substringof('" + soekestreng.toLowerCase() + "', tolower(concat(concat(Kode, ' - '),

Tittel))) eq true";

           var maksResultatFilter = "&$top=" + maksAntallTreff;
         
           var selekterFilter = "&$select=Tittel,Kode,UrlData";
           $.ajax({
               type: "GET",
               url: url + filter + maksResultatFilter + selekterFilter,
               contentType: "application/json; charset=utf-8",
               dataType: "jsonp",
               success: function (msg) {
                   // behandler resultatet
               }
           }
        );
   }

</syntaxhighlight>

Denne benytter standard OData-funksjonalitet for å oppgi filter og hva den vil ha tilbake. I en søke-intensiv applikasjon vil dette spare ressurser og båndbredde for klient-applikasjon og webserveren.

Ved å klikke på ett av treffene, vil den detaljerte læreplanen hentes, og formål vises:


Fra søkeresultatet har vi både URL-data-feltet, og kode-feltet. Begge disse kan brukes for å hente ut detaljer om læreplanen. Vi er kun interessert i å vise formål, og vi velger å vise formål på “default”-språket, som vil tilsvare fastsatt språk på læreplanen:

<syntaxhighlight lang="Java"> // Utdrag av koden for å hente ut detaljert læreplan, og vise formål på default språk $.getJSON(baseurl + "kl06/" + lp.Kode + "?callback=?",function (f) {

$('#f' + f.kode).append('

' + hentDefaultVerdi(f.formaal) + '

');
                 });
     // Henter ut den språkversjonerte verdien med nøkkelen 'default'
     function hentDefaultVerdi(spraakversjonert) {
         var res = "";
         $.each(spraakversjonert, function (i, s) {
             if (s.noekkel = "default")
                res = s.verdi;
         });
         return res;
     }

</syntaxhighlight>

Komplett kode til dette eksempelet (krever jquery-ui med “accordion”-widget)

<syntaxhighlight lang="html4strict"> <!DOCTYPE html> <html> <head> <title>Læreplansøk</title> <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/> <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.14.custom.css" rel="stylesheet" /> <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script> <script src="js/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script> </head> <body> </syntaxhighlight>

<syntaxhighlight lang="javascript"> <script type="text/javascript">

   var baseurl = "http://data.udir.no/";
   var maksAntallTreff = 25;
   // Hekter på event på søke-input til å kalle soekEtterLaereplaner, med søkestreng og maks 25 antall treff
   $(document).ready(function () {
       $('input[name=soek]').keyup(function () { soekEtterLaereplaner($('input[name=soek]').val(), maksAntallTreff); }
       );
   });
   
   // Søker etter læreplaner, kaller lastInnResultater
   function soekEtterLaereplaner(soekestreng, maksAntallTreff) {
   
            var url = baseurl + "odata/Læreplan?$callback=?&$format=json";
           
           var filter = "&$filter=substringof('" + soekestreng.toLowerCase() + "', tolower(concat(concat(Kode, ' - '), Tittel))) eq true";
           var maksResultatFilter = "&$top=" + maksAntallTreff;
           var selekterFilter = "&$select=Tittel,Kode,UrlData";
           $.ajax({
               type: "GET",
               url: url + filter + maksResultatFilter + selekterFilter,
               contentType: "application/json; charset=utf-8",
               dataType: "jsonp",
               success: function (msg) {
                   
                   $("#resultat").accordion('destroy');
                   $("#resultat").text();
                   lastInnResultater(msg.d.results);
                   $("#resultat").accordion({ header: "h3", autoHeight: false, collapsible: true, active: false, height: 180 });
               }
           }
        );
   }
   // Lister ut resultatene, og hekter på et event som gjør at formål hentes fra detaljert informasjon om læreplan når resultatet åpnes
   function lastInnResultater(results) {
       $.each(results, function (i, lp) {
$('#resultat').append("

<a href="#">' + lp.Kode + " - " + lp.Tittel + '</a>

Formål
');
           $("#" + lp.Kode).live("click", function () {
               $.getJSON(baseurl + "kl06/" + lp.Kode + "?callback=?",
                 function (f) {
$('#f' + f.kode).append('

' + hentDefaultVerdi(f.formaal) + '

');
                 });


           });
       });
     }
     // Henter ut den språkversjonerte verdien med nøkkelen 'default'
     function hentDefaultVerdi(spraakversjonert) {
         var res = "";
         $.each(spraakversjonert, function (i, s) {
             if (s.noekkel = "default")
                res = s.verdi;
         });
         return res;
     }

</script> </syntaxhighlight> <syntaxhighlight lang="html4strict">

Søk på læreplaner: <input style="width: 300px;" id="soek" name="soek" type="text"/>

</body> </html> </syntaxhighlight>

Personlige verktøy
Navnerom
Varianter
Handlinger
Navigasjon
Verktøy