[XML] Includes en inhoudsopgave

Pagina: 1
Acties:

  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Topicstarter
Ten eerste: ik weet niet zeker of dit het juiste forum is voor XML-zaken, schop hem anders maar ergens anders heen...

Voor een verslag over XML ben ik met nog een paar mensen bezig met een verslag in XML. Om hierbij gemakkelijk delen te kunnen updaten bestaat het eindverslag uit een aantal verschillende bestanden. Deze worden geinclude op de volgende manier:
XML:
1
<include href="inleiding.xml"/>

etcetera.
In de XSL, die het verslag moet omzetten naar XHTML, is het include-element gedefinieerd:
XML:
1
2
3
<xsl:template match="include">
<xsl:apply-templates select="document(@href)/*"/>
</xsl:template>

Dit leest dus het te includen document in en past hierop de templates toe alvorens het resultaat in de result tree te plaatsen.

Verder willen we aan het begin een inhoudsopgave maken. Het probleem is, dat we hiervoor ook rekening moeten houden met de includes, en deze in feite nog een keer aan het parsen zijn om te zien wat hier nog aan kopjes in staat. Dit op zich is niet elegant, maar het werkt nog wel.

Nu willen we de kopjes ook nummeren. Hier komt het echte probleem tevoorschijn: omdat de kopjes in aparte bestanden staan, en niet in de source tree van het hoofddocument, worden deze niet doorgenummerd, maar begint de telling telkens overnieuw. Hiervoor hebben we nog geen oplossing kunnen vinden.

Het verslag is hier te vinden. Ik hoop dat hier ergens een tweaker is die slimmer is dan wij en een oplossing weet voor ons probleem ;)

Oh, en inhoudelijke kritiek op het verslag of suggesties tot verbetering -- ook aan de XSL, zolang het niet te veel werk inhoudt -- mogen natuurlijk ook 8)

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Misschien is het een idee om twee transformaties toe te passen, eentje om alle elementen te verwerken tot een groot document en eentje om de hele teringzooi te parsen naar een document in HTML met een inhoudsopgave? Je zou het zelfs met drie transformaties achter elkaar kunnen doen, waarbij je eerst de inhoudsopgave maakt en daarna pas HTML.

Misschien is deze thread nuttig.

Rustacean


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Topicstarter
Kan ik XInclude gebruiken op een willekeurige parser? Firebird leek hem niet te slikken. Geen idee trouwens of het verslag nu wel IE-compatible is, maar dat is niet het streven ;)
Bovendien denk ik niet dat XInclude het probleem oplost.

Ik heb geprobeerd om inderdaad eerst alle includes te parsen en dan een andere XSL eroverheen te halen, maar dat lukte niet... hoe moet ik dat doen? Of kan ik gewoon meerdere transforms opgeven en worden die dan na elkaar uitgevoerd?
Edit: nee, dat krijg ik niet voor elkaar...
Meerdere transforms opgeven doet raar; er staat ook niks over in de W3 specs.
Ik heb ook geprobeerd een XML-bestand te outputten met een nieuwe <?xml-stylesheet ...?> processing instruction... die wordt genegeerd.
<xsl:include/> en <xsl:import/> lijken ook niet het gewenste effect te hebben...

Hoe pas ik op de output van de ene XSL een andere XSL toe?

[ Voor 37% gewijzigd door WildernessChild op 07-01-2004 20:48 ]

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Topicstarter
*schop*
Het moet heel binnenkort af zijn...

De vraag is dus:
Hoe pas ik op de output van de ene XSL een andere XSL toe?
Als er een alternatieve manier is om het doel te bereiken mag dat ook natuurlijk, maar dit lijkt me het beste.

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik begrijp niet zo goed wat je doel nu is... Bij mij telt de nummering goed door en krijg ik gewoon een inhoudsopgave te zien. Ik lees vast niet goed, maar zou je 't nog ff kort samen kunnen vatten?
edit:
overigens fyi: in IE(6) ziet 'ie er zo goed als hetzelfde uit als in FireBird (op wat kleine stijl-details na)

[ Voor 24% gewijzigd door drm op 08-01-2004 18:22 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 20-02 15:44
offtopic:
Waarom voor ieder proggramma een apart bestand? Dit kun je met XML net mooi allemaal in 1 bestand zetten. Dan kun je eenvoudiger aanpassingen aan de site doen.

  • Harm
  • Registratie: Mei 2002
  • Niet online
drm schreef op 08 januari 2004 @ 18:21:
Ik begrijp niet zo goed wat je doel nu is... Bij mij telt de nummering goed door en krijg ik gewoon een inhoudsopgave te zien. Ik lees vast niet goed, maar zou je 't nog ff kort samen kunnen vatten?
Kijk dan even door naar de rest van het document. In de inhoudsopgave gaat het inderdaad goed, maar in de rest van het document niet. De nummers die voor de hoofdkopjes staan in het verhaal zelf, hebben iedere keer weer het nummer 1 in plaats van 1...2...3 enzovoort. Zo helderder? ;)

* Harm heeft bdw geen oplossing.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Harm:
De nummers die voor de hoofdkopjes staan in het verhaal zelf, hebben iedere keer weer het nummer 1 ;)
|:( * drm kijkt met z'n aarsch

Als je de include template vervangt door het volgende:
code:
1
2
3
4
5
6
7
8
<xsl:template match="include">
   <h2>
      <xsl:number count="include" from="/" level="any" format="1. "/>
      <xsl:apply-templates select="document(@href)/section/heading" />
   </h2>
      
   <xsl:apply-templates select="document(@href)/section/section"/>
</xsl:template>
Dan moet het werken. Op voorwaarde dat de hoogste 'section' in de documenten alleen maar 'section's kan bevatten, dus het is niet de netste methode. In andere gevallen zou je in deze <xsl:apply-templates> ook andere nodenames op kunnen nemen.

hth :)
edit:
even uitgelijnd

edit:
Vergeet er nog bij te zeggen dat je de template voor section/heading ook even aan moet passen, maar dat had je waarschijnlijk wel begrepen :)

[ Voor 12% gewijzigd door drm op 08-01-2004 19:36 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Topicstarter
Bedankt voor jullie hulp, het werkt nu!

Helaas is het niet echt netjes, en worden een aantal aannames gedaan over de structuur van de sections en includes (bijv. geneste includes gaan fout, evenals includes binnen een section).

Een echt goede oplossing zou toch 2-pass moeten werken: eerst alle includes, dan de rest van de templates. Voor de toekomst zou ik toch graag willen weten of, en zo ja, hoe, dit mogelijk is...

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

WildernessChild:
Een echt goede oplossing zou toch 2-pass moeten werken: eerst alle includes, dan de rest van de templates.
Daar heb je wel gelijk, 't is een "beetje" quick'n'dirty...
Voor de toekomst zou ik toch graag willen weten of, en zo ja, hoe, dit mogelijk is...
Ik zal nog 's kijken of ik wat kan bedenken :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1