Toon posts:

XML/XSL node met hoogste waarde selecteren ??

Pagina: 1
Acties:
  • 210 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ok, we zijn lekker bezig met XML/XSL en het werkt prima moet ik zeggen. Alleen nu wil ik indien een bepaalde parameter niet is meegegeven de node selecteren met de hoogste waarde.

Uit deze XMLdata wil ik dus de row met id 1 selecteren.

<row id="1">
<jaartal>1900</jaartal>
</row>
<row id="2">
<jaartal>1800</jaartal>
</row>

Ik kan geen functie vinden waar dit mee kan. Ik heb al geprobeerd om de door en <xsl:for-each > loop te gaan en dan de laatste in een variabele te plaatsen, alleen is deze variabele alleen beschikbaar binnen de loop. Na de loop is de variabele niet meer aanwezig.

help.. ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan twee dingen doen: makkelijk doen of moeilijk doen.

Moeilijk doen betekent dat je een XPath expressie gaat maken waarin je gaat controleren of er geen enkele andere node is die een grotere waarde heeft. Niet erg lastig, maar dodelijk saai.

Makkelijk doen betekent EXSLT gebruiken. Neem hier maar eens een kijkje :)

http://www.exslt.org/math/functions/max/index.html

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Misschien dat highest trouwens nog wat handiger is in dit geval.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Dit is geen werk voor je xsl, dit is werk voor je xml spuwer.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
markvleth: Dit is geen werk voor je xsl, dit is werk voor je xml spuwer.
Vind je? :+

Lees: leg uit ;)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

omdat de volgorde van de data wel in je xml behoort te staan. Dit heeft niks met opmaak te maken maar domweg met de data zelf. Als het bijvoorbeeld informatie is uit een database zal je daar een "order by" doen om op de juiste manier als xml te representeren. Wat je nu ziet is dat de hele mvc structuur door elkaar wordt gehaald en dat er dus data(xml) en control onderdelen in de visuele laag (xslt) komen te zitten

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
markvleth: omdat de volgorde van de data wel in je xml behoort te staan.
Waarom? Als een auteur bijvoorbeeld een lijst van boeken heeft geschreven moeten die op een volgorde staan? Wat voor volgorde? Publicatie jaar? Titel?

Volgorde is juist wel een presentatie probleem. Als je de volgorde in XML produktie gaat kiezen, houd je je juist bezig met presentatie.
Wat je nu ziet is dat de hele mvc structuur door elkaar wordt gehaald en dat er dus data(xml) en control onderdelen in de visuele laag (xslt) komen te zitten
XSLT heeft helemaal niets met MVC te maken: het is een transformatie taal voor XML. Dat het vaak wordt ingezet om data te presenteren is irrelevant en zelfs als je dat wel relevant vindt, kan je er nog over discussieren of het bepalen van een maximum geen presentatie probleem is.

XSLT transformeert gewoon XML en als je daarbij het maximum van een bepaalde verzamelingen knopen wilt bepalen lijkt mij dat geen enkel probleem. De toepassing van XSLT gaat veel verder dan het stompzinnig 1:1 herschrijven van data naar een presentatie.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Als ik het me goed herinner doet dit het wat jij wil

<xsl:value of select="@row[id=1]" >

of anders <xsl:value of select="row[id=1]" >

doet het even uit mijn hoofd

[ Voor 36% gewijzigd door Verwijderd op 05-03-2003 12:55 ]


Verwijderd

mbravenboer schreef op 05 March 2003 @ 12:43:
Waarom? Als een auteur bijvoorbeeld een lijst van boeken heeft geschreven moeten die op een volgorde staan? Wat voor volgorde? Publicatie jaar? Titel?

Volgorde is juist wel een presentatie probleem. Als je de volgorde in XML produktie gaat kiezen, houd je je juist bezig met presentatie.
Hoewel het zo lijkt is het niet waar. Je doet immers ook de selectie welke data je wilt hebben in je xml (aan de hand van de controller laag). Dus je doet bijvoorbeeld een request van boeken geselecteerd op publicatie datum, je controller laag stuurt dan het verzoek naar je data laag. Deze data laag zal dan als uitkomst bijvoorbeeld een xml aanbieden waarin dus de boeken zijn gesorteerd op datum.
mbravenboer schreef op 05 March 2003 @ 12:43:
XSLT heeft helemaal niets met MVC te maken: het is een transformatie taal voor XML. Dat het vaak wordt ingezet om data te presenteren is irrelevant en zelfs als je dat wel relevant vindt, kan je er nog over discussieren of het bepalen van een maximum geen presentatie probleem is.
Het is uiteraard een transfomatie taal die transformeerd naar de gewenste uitput, en daarmee dus direct een de v in mvc :)
mbravenboer schreef op 05 March 2003 @ 12:43:
XSLT transformeert gewoon XML en als je daarbij het maximum van een bepaalde verzamelingen knopen wilt bepalen lijkt mij dat geen enkel probleem. De toepassing van XSLT gaat veel verder dan het stompzinnig 1:1 herschrijven van data naar een presentatie.
Helaas wel ja, dat had niet mogen gebeuren! Dat het kan wil uiteraard niet altijd zeggen dat je het moet gebruiken. Als je daar eenmaal aan begint is het bijna onzinnig om een xml te gebruiken, aangezien je je veel te veel bezig houd met welke data je wel en niet wilt presenteren. Als je xsl dat kan, kun je toch beter direct een dbms aanspreken???

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
markvleth: Het is uiteraard een transfomatie taal die transformeerd naar de gewenste uitput, en daarmee dus direct een de v in mvc :)
Ik begrijp best wat je bedoelt, maar jij spreekt over een mogelijke toepassing. Je kan XSLT inderdaad in een MVC situatie gebruiken, waarbij het dan uiteraard de visualisatie regelt.

Het kan echter ook in volledig andere situaties gebruikt worden omdat het niets anders is dan een transformatie taal voor XML. Als uitermate extreem voorbeeld zou je er bij voorbeeld een compiler, een partiele evaluator of een interpreter in kunnen bouwen.

Om te bewijzen dat XSLT Turing compleet is, is er bijvoorbeeld iemand geweest die een interpreter voor Turing machines geschreven heeft in XSLT: http://www.unidex.com/turing/ . Zieke bezigheid natuurlijk, maar het laat wel zien wat de scope van XSLT is. Je zou het ook kunnen gebruiken om expressie talen te interpreteren of zelfs een interpreter voor een taal als Java te schrijven!

Als iets logischer voorbeeld zou je kunnen denken aan het omzetten van een presentatie naar data.
Helaas wel ja, dat had niet mogen gebeuren! Dat het kan wil uiteraard niet altijd zeggen dat je het moet gebruiken. Als je daar eenmaal aan begint is het bijna onzinnig om een xml te gebruiken, aangezien je je veel te veel bezig houd met welke data je wel en niet wilt presenteren. Als je xsl dat kan, kun je toch beter direct een dbms aanspreken???
XSLT wordt niet alleen gebruikt om data om te zetten naar een presentatie en XML wordt gelukkig ook niet alleen meer gebruikt om data te representeren die gepresenteerd moet gaan worden.

De toepassing van XML gaat veel verder: uitwisseling van gestructeerde data in boom-achtige structuren tussen software componenten. XSLT is niets meer of minder dan een taal die gebruikt kan worden om deze data te transformeren. Dit heeft niets met presentatie, data, database systemen of andere specfieke toepassingen te maken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
mbravenboer schreef op 05 maart 2003 @ 12:07:
Je kan twee dingen doen: makkelijk doen of moeilijk doen.

Moeilijk doen betekent dat je een XPath expressie gaat maken waarin je gaat controleren of er geen enkele andere node is die een grotere waarde heeft. Niet erg lastig, maar dodelijk saai.

Makkelijk doen betekent EXSLT gebruiken. Neem hier maar eens een kijkje :)

http://www.exslt.org/math/functions/max/index.html
http://www.exslt.org/math/functions/max/index.html werkt alleen niet met MSXML40 :(

Heeft iemand toevallig al zo'n dodelijk saai script geschreven?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kan de template implementatie van de EXSLT functie gebruiken als je XSL processor EXSLT niet ondersteunt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Ik ben het deels met je eens vanwege de mogelijkheden van xsl, maar dat je nou zegt dat xsl niet allen is voor het presenteren van data snap ik echt niet. Het blijft Extensible Stylesheet Language, volgens mij is dat nog altijd presenteren, ongeacht je het nou te zien krijgt of dat het eerst weer naar een bepaalde data laag gaat.

Ik blijf erbij dat in dit specifieke geval het werk is voor de xml spuwer, ongeacht de mogelijkheden van xsl.

Verwijderd

Topicstarter
mbravenboer schreef op 05 March 2003 @ 13:14:
Je kan de template implementatie van de EXSLT functie gebruiken als je XSL processor EXSLT niet ondersteunt.
huh?
Ik kan die Math:max functie gewoon gebruiken??

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
markvleth: Ik ben het deels met je eens vanwege de mogelijkheden van xsl, maar dat je nou zegt dat xsl niet allen is voor het presenteren van data snap ik echt niet. Het blijft Extensible Stylesheet Language
XSLT is inderdaad oorspronkelijk ontworpen om data te transformeren naar XSL Formatting Objects. Deze hele keuze is echter nogal ongelukkig geweest toen al snel duidelijk werd dat er veel meer behoefte is voor een taal als XSLT. Ik denk dat nu nog maar een heel klein percentage van de mensen het gebruikt voor transformatie naar XSL Formatting Objects. Het wordt waarschijnlijk het meest gebruikt voor transformaties naar HTML. Dat je dus vooral de nadruk legt op presentatie toepassingen begrijp ik best.

Het W3C omschrijft het ook nog steeds zo:
XSL is a language for expressing stylesheets. It consists of three parts: XSL Transformations (XSLT): a language for transforming XML documents, the XML Path Language (XPath), an expression language used by XSLT to access or refer to parts of an XML document. (XPath is also used by the XML Linking specification). The third part is XSL Formatting Objects: an XML vocabulary for specifying formatting semantics. An XSL stylesheet specifies the presentation of a class of XML documents by describing how an instance of the class is transformed into an XML document that uses the formatting vocabulary.
Merk echter op dat zo hier nadrukkelijk op XSL-FO doelen, terwijl dat dus maar zeer beperkt gebruikt wordt.

Op www.xml.com beschrijven ze XSLT al heel anders:
Two W3C Recommendations, XSLT (the Extensible Stylesheet Language Transformations) and XPath (the XML Path Language), meet that need. They provide a powerful implementation of a tree-oriented transformation language for transmuting instances of XML using one vocabulary into either simple text, the legacy HTML vocabulary, or XML instances using any other vocabulary imaginable. We use the XSLT language, which itself uses XPath, to specify how an implementation of an XSLT processor is to create our desired output from our given marked-up input.

XSLT enables and empowers interoperability.
Ik kijk zelf tegen XSLT aan vanuit andere transformatie talen (Stratego, XDuce) of talen waarin je ook kan transformeren (Haskell). De toepassingen van XML transformaties is dan over het algemeen veel breder. Als jij het alleen wilt gebruiken voor presentatie vind ik dat natuurlijk prima, dan blijft er tenminste ook nog wat werk over voor mij ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
-NW: huh? Ik kan die Math:max functie gewoon gebruiken??
Ja, omdat er ook een implementatie in XSLT zelf is. Bekijk nog maar eens goed het lijstje van implementaties en desnoods de handleiding over het toepassen van EXSLT onderdelen in de verschillende XSL processoren.

Overigens is het bedenken van een XPath die hetzelfde doet ook niet zo heel erg lastig...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

mbravenboer schreef op 05 maart 2003 @ 13:25:
Ik kijk zelf tegen XSLT aan vanuit andere transformatie talen (Stratego, XDuce) of talen waarin je ook kan transformeren (Haskell). De toepassingen van XML transformaties is dan over het algemeen veel breder. Als jij het alleen wilt gebruiken voor presentatie vind ik dat natuurlijk prima, dan blijft er tenminste ook nog wat werk over voor mij ;) .
Ik begrijp best wat je bedoeld hoor, alleen kun je het presenteren ook anders zien. Presenteren kan immers, zoals ik al aangaf, ook het aanbieden zijn van data aan een applicatie (bijvoorbeeld een xml omtoveren tot een httpd.conf bestand).

Verwijderd

Topicstarter
En ik heb een oplossing gevonden:

<xsl:variable name="maxJaarId">
<xsl:for-each select="data/row">
<xsl:sort select="jaartal" data-type="number" order="descending" />
<xsl:if test="position() = 1">
<xsl:value-of select="@id" />
</xsl:if>
</xsl:for-each>
</xsl:variable>

<xsl:call-template name="loopbaandetails">
<xsl:with-param name="itemid" select="$maxJaarId" />
</xsl:call-template>


Wijst zichzelf denk ik of niet?

Verwijderd

En ik heb een oplossing gevonden:
Laat dit nou net de manier zijn die exslt ook gebruikt (zie math.max.template.xsl)

[ Voor 22% gewijzigd door Verwijderd op 05-03-2003 18:50 . Reden: url gemaakt ]

Pagina: 1