Vorige | Home | Slides: week 6 week 7
XML 2010: Eindopdracht
Dit is de eindopdracht die hoort bij het vak XML 2010, dat gegeven wordt aan de Faculteit der Letteren van de Rijksuniversiteit Groningen.
Voor deze opdrachten is begeleiding aanwezig op dinsdagen tussen 15:00 en 17:00 en op woensdagen tussen 11:00 en 13:00 in zaal 13.0102C. Om in zaal 13.012C op de computers te kunnen werken, heb je een Linuxaccount nodig. Neem contact op met de docent (erikt(at)xs4all.nl) als je zo'n account nog niet hebt.
Je mag de opdrachten ook thuis of op een andere computer maken. Hou er wel rekening mee dat je soms zal moeten inloggen op de prakticumserver siegfried.let.rug.nl . Dat kan bijvoorbeeld met 1 van de programma's winscp, putty of ssh.
De deadline voor het inleveren van de resultaten van deze opdracht is maandag 1 november 2010, 09:00. Plaats de resultaten van jouw opdracht op Nestor.
Deze opdracht bevat zes vragen. Vraag 2 en 3 zijn elk 1 punt waard. Vragen 4, 5 en 6 zijn elk twee punten waard. Daarnaast kunnen nog twee punten worden verdiend met oplossingen die beter of uitgebreider zijn dan de andere ingeleverde oplossingen.
Opdracht
Een RSS-feed is een XML-pagina die een samenvatting geeft van een website of een deel van een website. Alle grote nieuwswebsites hebben tegenwoordig een RSS-feed. In deze opdracht schrijf je XSLT-programma's die informatie selecteren uit twee van deze RSS-feeds (naar keuze) en zet die om in XML-documenten die met een CSS-stijlbestand mooi kunnen worden gepresenteerd in een browser.
Hierboven staat een schematisch overzicht van de opdracht: een RSS-bestand (invoer) moet via een XSLT-bestand omgezet worden naar een XML-bestand met de gewenste teksten (opdrachten 2, 3, en 5). Daarnaast moeten een CSS-bestand (opdracht 4) en een DTD-bestand (opdracht 6) voor dit XML-bestand worden geschreven. De bestanden in de gele vakjes moet je zelf schrijven. Het bestand in het zwarte vakje (RSS) is de invoer van het XSLT-programma. Het bestand in het witte vakje is de uitvoer van dit programma.
(Dit is een herformulering van een opdracht die oorspronkelijk bestond uit vier stappen)
- Kies RSS-feeds van twee verschillende grote Nederlandse nieuwswebsites, bijvoorbeeld van Algemeen Dagblad, De Pers, Metro, NRC, nu.nl, Parool, Spits, Telegraaf, Trouw of Volkskrant. Voorbeeldbestanden van de verschillende feeds kan je ook vinden in de directory /home/erikt/class/xm10/opdracht9. Je mag ook andere RSS-feeds gebruiken dan de hier genoemde maar neem wel even contact op met de docent om dit te melden voordat je ermee gaat werken.
- Schrijf 1 of meerdere XSLT-programma's waarmee je uit elk van de twee RSS-feeds tekst selecteert die interessant is voor de bezoekers van de website, bijvoorbeeld de artikeltitels, de artikelteksten en de eventuele bijbehorende links,
- Zorg ervoor dat XML-elementen worden toegevoegd aan de teksten die uit de XSLT-programma's komen. Plaats de gewenste elementen in de XSLT-programma's. Verzin zelf geschikte namen voor de elementen of gebruik dezelfde elementnamen als in de RSS-feeds.
- Maak een CSS-stijlbestand voor waarmee de uitvoer van de XSLT-programma's op een redelijke manier kan worden gepresenteerd in een browser. Gebruik dezelfde presentatiestijl voor beide bestanden. Zie ook tip C.
- Zorg er met de XSLT-scripts voor dat enige extra informatie wordt geplaatst in de nieuwe XML-documenten. Vermeld in ieder geval het aantal artikelen in de RSS-feed en, indien je er via de feed achter kunt komen, de datum en tijd van het meest-recente artikel. Zorg voor een goede presentatie van deze informatie via het CSS-stijlbestand.
- Schrijf een DTD of een XML-schema dat jouw XML-bestanden (de einduitvoer van de XSLT-programma's) beschrijft. Zorg ervoor dat de structuur van de XML-bestanden voldoet aan de DTD of het XML-schema.
Opmerking: voeg geen HTML-tags toe aan jouw bestanden. Het is de bedoeling dat jouw XSLT-scripts XML-bestanden maken en geen HTML-bestanden.
Hou er verder rekening mee dat jouw XSLT-programma's en DTD/XML-schema zullen worden getest met documenten van een andere datum. Test daarom zelf ook met documenten van verschillende dagen.
Tips
-
Sommige van de RSS-feeds plaatsen veel data op 1 regel. Je kan
de data beter leesbaar maken door het te verdelen over meerdere
regels. Gebruik hiervoor het programma xml2xml op de
prakticummachines. Sla het bestand op en zet het vervolgens om
naar het nieuwe formaat met het volgende commando in een
terminalwindow:
/home/erikt/bin/xml2xml < oud.xml > nieuw.xml
-
Je kan de entities < en > in
de tekst omzetten naar < en > door in XSLT de volgende
constructie te gebruiken:
<xsl:value-of select="..." disable-output-escaping="yes"/>
Plaats dan de naam van het element met de tekst op de plaats de drie puntjes. Het attribuut disable-output-escaping="yes" zorgt voor de gewenste omzetting van de entities (voorbeelden).
-
In deze opdracht moet je met XSLT-instructies een verwijzing naar
een CSS-stijlbestand toevoegen aan de uitvoer van XSLT. Hiervoor
heb je de volgende instructie nodig (bron):
<xsl:processing-instruction name="xml-stylesheet">
href="MIJNSTIJLBESTAND.css" type="text/css"
</xsl:processing-instruction>Plaats hier jouw stijlbestand op de plek van MIJNSTIJLBESTAND.css
-
Hoe een link in een XML-document moet worden geplaatst, staat op
slide 27 van week 3 (pdf).
Een variabele waarde kan aan het attribuut xlink:href
worden toegekend met de code:
<link ...>
<xsl:attribute name="xlink:href">
LINKTEKST
</xsl:attribute>Vervang LINKTEKST door de waarde die je aan het href-attribuut wilt geven (meer informatie).
-
Als je in een XSLT-programma elementen wil gebruiken uit
een andere namespace dan moet je die namespace eerst
bovenin het stylesheet definiëren, bijvoorbeeld
voor de namespace dc:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://purl.org/dc/elements/1.1/">Als je dat niet doet dan geeft xsltproc een foutmelding.
-
Een verwijzing naar een DTD kan door een XSLT-programma aan
de uitvoer worden toegevoegd met het element xml:output :
<xsl:output doctype-system="abc.dtd"/>
Deze definitie moet buiten de templates staan in het XSLT-bestand.
Voorbeeldantwoorden
Plaats al jouw bestanden in 1 tekstbestand met de naam 9-studienummer.txt en lever dit bestand in via Nestor voor maandag 1 november 2010, 09:00
Last update: November 08, 2010. erikt(at)xs4all.nl