Teknisk dokumentation av gränssnitt och funktioner
Innehåll
Systemets uppbyggnad
- Tekniker som används
- Globalt och lokalt
- Instanser
- Språk- och stränghantering i gränssnittet
- Utveckling och anpassning
Funktioner
- Sökformulär och sökresultat
- Detaljerad vy av publikation
- Publikationslistor (inst, person, nya poster, kommande dissar ...)
- Autentisering och behörighetskontroll
- Inmatnings- och uppdateringsformulär
- Import från Endnote-fil
- Import från OAI-server
- Import från PubMed?
Statistik
- Administrativa funktioner
- OAI-PMH
Systemets uppbyggnad
Tekniker som används
UPL är i grunden en webbapplikation som kräver olika byggstenar såsom webbserver, applikationsserver, Java, databas osv. Vissa av dem är utbytbara men andra krävs för att systemet ska fungera som det är skapat idag. Utöver detta används andra saker mer generellt, t ex XML.
Obligatoriska delar i denna distribution är:
- Java Developers Kit 1.5.0
- Oracle 10g Database, databas för lagring av publikationsdata
- Oracle XSQL servlet, arkitektur för hantering av XML från/till databas med XSLT och skapande av webbsidor till slutanvändaren (del av Oracle XML Developer Kit 10g)
Dessa delar behövs, men kan bytas till likvärdiga från andra tillverkare:
- Apache HTTP Server, webbserver framför applikationsservern
- Apache Tomcat, applikationsserver
- Apache Ant, verktyg för att kompilera Java-klasser och bygga ihop webbapplikationer
Globalt och lokalt
Webbmiljön skiljer på globala och lokala filer. I den globala delen ligger ett bibliotek med alla mallar, XML-filer, Javaskript, bilder och liknande som ska kunna användas i alla webbapplikationer. Den lokala delen är själva webbapplikationen och dess tillhörande parametrar, XML-data och XSL-mallar (undantag eller utökningar av de globala, eller egna tillägg). Globala filer ligger i katalogen web/global/, medan lokala filer ligger i web/(namn)/, t ex web/upl/.
Instanser
UPL är ett sk multi-part-system, vilket innebär att en installation av UPL kan delas mellan flera instanser. Det kan exempelvis vara närliggande lärosäten som har delvis samma struktur, där man vill kunna dela auktoritetsposter och globala malldelar mellan varandras applikationer. Varje webbapplikation skapas var för sig och har då ett unikt instansnummer. Även om man bara har en webbapplikation är denna en instans. Instansbegreppet används både i webbmiljön och databasen. I databasen används instanser för att koppla samman auktoritetsposter till den egna applikationen.
Språk- och stränghantering i gränssnittet
Webbapplikationen stödjer ett obegränsat antal språk. I denna distribution används svenska och engelska. Vill man bara använda ett språk går det bra, men man bör ändå tänka på att indikera i XML-filer och via parametrar vilket språk det är med den rätta ISO-koden.
Språklagret kan styras via olika delar:
- Parametersättning av enda körande språk
- Parametersättning av förvalt språk om inget angetts
- Lagring av valt språk i sk. cookie som ställs in per webbläsare
- Forcering av valt språk via sk. URL-parameter
Den globala XSL-parametern $SystemLanguage? innehåller alltid den ISO-kod för det språk som för tillfället gäller i gränssnittet. I den globala XSL-filen xsl/parameters/parameters.xsl sätts parametern utifrån ett antal seriella villkor, där systemet först kollar om man via en URL-parameter vill ha ett speciellt språk. Finns inte detta, kollas en cookie UPL_lang från webbläsaren. Finns inte heller denna, returneras den förvalda språkkoden (t ex "sv").
För att byta språk och sätta om den cookie som lagrar valet (UPL_lang), anropas följande globala jsp-sida: /global/jsp/setLanguage.jsp?lang=[ISO-kod]
Sidan sätter om UPL_lang till vald sträng och gör sedan en omdirigering till sidan som man kom från (referrer).
För att se en webbsida i UPL på ett önskat språk utan att sätta om UPL_lang, skickar man med URL-parametern "lang" till sidan: /record/index.xsql?pubid=63869&lang=en
Stränghantering
Stränghanteringen i UPL är helt skiktad, vilket betyder att inga texter skrivs ut i klartext i någon XSL-mall. Istället används en global XSL-mall med namn "get-string" för att returnera värdet av en speciell språksträng från XML-filen strings.xml, där alla formuleringar finns lagrade.
Exempel: <xsl:if test="../../request/session/upl.security.authentication_status = 'failed'">
<div class="errormessage">
<xsl:call-template name="get-string">
<xsl:with-param name="string" select="'login-notauthenticated-label'" />
</xsl:call-template>
</div>
</xsl:if> Mallen "get-string" anropas med parametern "string" som är namnet på textsträngen. I den globala XML-filen xml/strings.xml lagras alla textsträngar, däribland den efterfrågade: <string name="login-notauthenticated-label" xml:lang="en">Wrong user name or password. Please try again.</string> <string name="login-notauthenticated-label" xml:lang="sv">Fel användarnamn eller lösenord. Var god försök igen.</string>
Standardattributet xml:lang används i uppmärkningen för att indikera vilken ISO-kod textsträngen hör till. Mallen kommer först att leta efter den sträng där xml:lang motsvarar $SystemLanguage?, och därefter ett string-element utan attributet xml:lang. Finns inget av detta returneras ett felmeddelande på engelska direkt i webbsidan.
Vid normal funktion kommer mallen get-string bara att returnera textnoden inom string-elementet. Vill man ha med XHTML-uppmärkning, t ex <strong> eller <ul> och <li>, går detta bra att använda i XML-datan. Genom att lägga till följande parameter vid kallandet på get-string: <xsl:with-param name="copy" select="true()" />
görs en kopia på hela noden istället för bara textnoden. Detta används på ett par ställen i systemet där längre texter ska skrivas ut, eller där man vill vara säker på att få korrekta radbrytningar på rätt ställen.
Lokal överlagring av språksträngar Det går att skapa en egen strings.xml i den lokala katalogen local/xml, om man vill ändra eller lägga till texter som inte finns. Påträffas den efterfrågade strängen i denna lokala fil kommer i första hand denna att visas.
Språkhantering av datbasfält Eftersom databasfälten redan definieras i sin egen XML-fil database-fields.xml, behöver man inte språkhantera dem via strings.xml. Istället finns en separat XSL-mall "get-db-field-label" som returnerar det lokala namnet på ett fält enligt en viss publikationstyp. Det är nödvändigt att skicka in publikationstypen till mallen eftersom fält kan ha olika beteckningar för olika publikationstyper i den lokala XML-filen publication-types.xml.
Exempel: <div class="fieldName">
<xsl:call-template name="get-db-field-label">
<xsl:with-param name="id" select="'patent_applicant'" /> <xsl:with-param name="type">
<xsl:value-of select="pubtype/pubtype_item/dcname" />
</xsl:with-param>
</xsl:call-template> <xsl:text>:</xsl:text>
</div>
Mallen skriver ut namnet på fältet med id "patent_applicant", för den aktuella publikationstypen i ett UPL-XML-objekt; "pubtype/pubtype_item/dcname". Samma princip för språkhantering gäller här som för strings.xml, i första hand returneras det element där xml:lang motsvarar $SystemLanguage?, i andra hand ett element utan xml:lang. Hittas inget att detta skrivs ett felmeddelande ut i klartext på engelska.
Funktioner
Sökformulär och sökresultat
Sökformulär och resultatsida
XSQL-filer: search/index.xsql search/advanced/index.xsql search/result/index.xsql
XSL-filer: global/xsl/output/html/normal/forms/search-forms.xsl global/xsl/output/html/normal/forms/search-results.xsl
XSL-mallar: upl-search-form-simple upl-search-form-extended upl-render-search-form-field upl-search-results
XSQL Action Handler: upl.Search (src/upl/Search.java)
Sökformuläret finns i två varianter: ett enkelt och ett utökat. Hanteringen av det utökade sker med hjälp av olika delmallar för att rendrera olika typer av fält och data, t ex textfält, menyer för årtal, multipel meny för ämneskategorier osv. Det enkla hanteras på liknande sätt men med enbart en mall för att rendrera ett textfält och en submit-knapp.
Själva sökningen utförs av en sk XSQL Action Handler skriven i Java. Denna innehåller kopplingar till UltraSearch? som används för indexering av publikationerna i databasen. Den läser de URL-parametrar som inkommit, anropar UltraSearch? via klassen oracle.ultrasearch och returnerar ett XML-fragment tillbaka till XSQL som sedan stilas med XSL. Värden som antal sidor i resultatet och aktuell sida hanteras av Java-klassen och inkluderas i det returnerade XML:et. Logiken för rendrering av navigationen på webbsidan sköts av XSL.
Detaljerad vy av publikation
Publikationslistor (inst, person, nya poster, kommande dissar ...)
Autentisering och behörighetskontroll
