2005-10-20

wijziging en invoerdatum en wijziger / invoerdersnaam in records

Ik heb gisteravond een nieuwe versie van item, lener en rubriekgedownload. Daarin zitten nu de invoerdatum, invoerder, wijziginsdatumen wijziger in de record attributen cd, cu, md resp mu. Die worden doorwqoracle automatisch bijgewerkt. Daarnaast is in item de veldnaambibliotheek-laatste-status aangepast (er stond laaste ipv laatste).
Ik probeer vandaag de attributen van titelbeschrijving op de (hopelijk)juiste plek te zetten; als dat lukt staat die morgen vernieuwd op deserver. Voor alle vier geldt dat de gegevens dan up-to-date zijn toteergisteren (door een diskruimteprobleem op de hp3000 zijn de bestandenhelaas niet 100% synchroon, er zijn ook wat gegevens van gisterengedeeltelijk verwerkt. Voor het testen zal dat waarschijnlijk geenprobleem zijn).
Nog even een opmerking over invoerdatum en invoerder. Het is debedoeling dat die attributen er op recordniveau ALTIJD zijn, en wqoraclemaakt ze ook altijd aan bij nieuwe records. Bij conversies m.b.v hetconversiescript worden ze daarom vanaf gisteren ook altijd aangemaakt.De algoritme daarvan zit als volgt in elkaar:
- Als er een veld is dat naar éém van die attributen moet wordengeconverteerd, is het noodzakelijk om een conversie-xslt analoog aan devolgende te maken (dit is de huidige versie lener-conversie-utf8.xslt,waarin alle velden nog met hun minisis-tag worden opgenomen):
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"version="1.0"> <!-- AJK 2005-10-19 --> <xsl:import href="default-conversie-utf8.xslt"/> <!-- --> <xsl:output method="xml" version="1.0" encoding="utf-8"indent="yes"/> <!-- LENER --> <xsl:template match="lenerLENER" mode="conversie"> <xsl:element name="lener"> <xsl:apply-templates select="@*" mode="copy"/> <xsl:apply-templates select="N100/N101"mode="cu-attribute"/> <xsl:apply-templates select="N100/N102"mode="cd-attribute"/> <xsl:apply-templates select="N100/N103"mode="mu-attribute"/> <xsl:apply-templates select="N100/N104"mode="md-attribute"/> <xsl:apply-templates select="*" mode="copy"/> </xsl:element> </xsl:template> <!-- do NOT copy the following elements --> <xsl:template match="N101N102N103N104" mode="copy"/> <!-- --></xsl:stylesheet>
de modes "cu-attribute", "cd-attribute", "md-attribute" en"mu-attribute" regelen dat de inhoud van de genoemde velden wordenomgezet in de aangegeven attributes. Voor datumvelden gaan de templateser van uit dat de datum er als "jjjj-mm-dd" in staat. Daar wordt dan"T00:00:00Z" aan toegevoegd om er een geldige timestamp van te maken.
Als er aan het record-element NIET op bovenstaande wijze een cd- en eencu- attrubute zijn toegevoegd, wordt in het cu-attribute "conversie"gezet. Voor het cd-attribute is het iets ingewikkelder. Als er wel eenmd-attribute is gemaakt, wordt dat in het cd-attribute gekopieerd. Alser ook geen md-attribute is, wordt er het tijdstip in gezet waarop dexml-conversie gestart is.
Tenslotte, nu ik het toch over de attributen heb, nog even een uitlegvan de manier waarop wqoracle die dingen vult.Als een record wordt ingevoerd, worden cd en cu op recordniveau gevuldmet de het huidige tijdstip en de gebruikersnaam van degene die inWebQuery is ingelogd. Als niet is ingelogd wordt het ip adres alsgebruikersnaam gebruikt, maar in principe is inloggen verplicht voorvrijwel elke update-functionaliteit.Als een record wordt gewijzigd worden md en mu op analoge wijze gevuldresp aangepast. Bovendien wordt rv met één verhoogd.
Iets soortgelijks gebeurt met de eventueel op andere niveaus van de xsdgedefinieerde attributen. Daarbij gelden echter twee beperkingen omervoor te zorgen dat alleen zinvolle gegevens worden vastgelegd:
a) invoerattributen (cd en cu) worden gevuld op het hoogst mogelijkeniveau. Bij een nieuw record dus allleen op recordniveau.
b) wijzigingsattributen (md, mu en rv) worden gevuld op recordniveau énop het laagst mogelijk niveau.
c) als op een bepaald niveau de attributen niet gedefinieerd zijn komenze terecht op het eerstvolgende hogere niveau waar ze wel gedefinieerd zijn, Age Jan Kuperus

2005-10-13

N op M joins in WQoracle nog niet mogelijk

De engelse en nederlandse rubrieksnamen komen niet goed mee in titelplus. Vergelijk
http://library.wur.nl/WebQuery/titelplus?wq_isn=1671326&wq_sfx=XML (waaruit blijkt dat er iets fout gaat), http://library.wur.nl/WebQuery/clcwwwf/1671326?wq_sfx=XML, (waaruit blijkt dat 't soms wel goed lijkt te gaan, maar alleen bij het eerste onderwerp)

Dit komt omdat oracle geen mogelijkheid heeft om een n op m relatie tussen
twee xml velden goed in éém sql statement te regelen (of omdat we die
mogelijkheid nog niet gevonden hebben)
Op dit moment is het alternatief om de joins bij herhaling 1 en verder met een document lookup te doen n de presentatie xslt. (Zie bijvoorbeeld het template voor A150 en A140 in wurpubs_list.xslt)