Het probleem kort samengevat:
Ik wil hyperlinks in XML! En ja, ik ken XLinks, maar ik wou het graag helemaal zelf doen, zodat ik mijn eigen DTD kan gebruiken, als enige DTD.
Ik heb een eigen namespace, SmallTalk. Daaronder een onbepaalde hoeveelheid <Paragraph>-node's. En binnen die <Paragraph>-node's bevindt zich tekst en <Reference>-node's. Deze <Reference>-node's moeten omgezet worden naar HTML hyperlinks, maar binnen de context van hun parents.
Disclaimer:
Ik neem aan dat XML onder "Programming & Webscripting" thuishoort, aangezien ik XSL gebruik, en XSL bestaat o.a. uit processing-instructions. Zoniet, excuses.
Ik heb al eens eerder geprobeerd met XML te werken, maar gaf het uiteindelijk op vanwege problemen die ik niet in staat was op te lossen. Natuurlijk heb ik eerst geprobeerd zelf oplossingen te vinden, maar ik ben daar niet in geslaagd. Als ik in mijn problemen het hele concept van XML mis, of voor niks mijn eigen taal gebruik, zeg het gerust, maar hou het constructief, wanneer mogelijk!
Ik hoop dat mijn vraagstellingen duidelijk zijn!
Mocht het enig verschil maken (vast...): Ik gebruik Xerces en Xalan, beide projecten van de Apache Group om mijn XML & XSL naar HTML om te zetten. Dus de pagina's die ik bekijk zijn al in HTMl omgezet, dit gebeurt niet in de browser.
Om sucesvol met de onderstaande code te werken moet ik een aantal <>'s escapen, maar dit zie je niet terug in de code, omdat je ze in het forum allemaal terug ziet als <>'s , sorry hiervoor. Wie bereid is te antwoorden snapt neem ik aan sowieso wel hoe het werkt.
Het probleem:
Als mijn root (Namespace toch?) SmallTalk (gewoon een leuke naam) is, en de children Paragraph's, met als mogelijke children Reference's:
Hoe kan ik dan alle <Reference>-nodes verwerken, zodat ze als html-links weergegeven worden? De enige methode die ik tot nu toe gevonden heb, templates aanroepen, werkt niet (zie hieronder). Aan de ene kant wel logisch hoor: alle <Reference>-node's worden verwerkt waar je zo'n template opvraagt. Maar hoe kan ik dan wel alle <Reference>-node's in place converteren???
De output van dit stylesheet is:
Dus de <Reference>-node's worden verwerkt na de <Paragraph>-node's, in plaats van binnen de <Paragraph>-node's, wat mijn doel is. Tot nu toe heb ik geen XSL-syntax kunnen vinden die ervoor zorgt dat de <Reference>-node's binnen de <Paragraph>-node's omgezet worden in HTML.
Iemand enig idee? Alle suggesties zijn welkom! Bij voorbaat mijn dank,
Peter Odding
Ik wil hyperlinks in XML! En ja, ik ken XLinks, maar ik wou het graag helemaal zelf doen, zodat ik mijn eigen DTD kan gebruiken, als enige DTD.
Ik heb een eigen namespace, SmallTalk. Daaronder een onbepaalde hoeveelheid <Paragraph>-node's. En binnen die <Paragraph>-node's bevindt zich tekst en <Reference>-node's. Deze <Reference>-node's moeten omgezet worden naar HTML hyperlinks, maar binnen de context van hun parents.
Disclaimer:
Ik neem aan dat XML onder "Programming & Webscripting" thuishoort, aangezien ik XSL gebruik, en XSL bestaat o.a. uit processing-instructions. Zoniet, excuses.
Ik heb al eens eerder geprobeerd met XML te werken, maar gaf het uiteindelijk op vanwege problemen die ik niet in staat was op te lossen. Natuurlijk heb ik eerst geprobeerd zelf oplossingen te vinden, maar ik ben daar niet in geslaagd. Als ik in mijn problemen het hele concept van XML mis, of voor niks mijn eigen taal gebruik, zeg het gerust, maar hou het constructief, wanneer mogelijk!
Mocht het enig verschil maken (vast...): Ik gebruik Xerces en Xalan, beide projecten van de Apache Group om mijn XML & XSL naar HTML om te zetten. Dus de pagina's die ik bekijk zijn al in HTMl omgezet, dit gebeurt niet in de browser.
Om sucesvol met de onderstaande code te werken moet ik een aantal <>'s escapen, maar dit zie je niet terug in de code, omdat je ze in het forum allemaal terug ziet als <>'s , sorry hiervoor. Wie bereid is te antwoorden snapt neem ik aan sowieso wel hoe het werkt.
Het probleem:
Als mijn root (Namespace toch?) SmallTalk (gewoon een leuke naam) is, en de children Paragraph's, met als mogelijke children Reference's:
<SmallTalk>
<Paragraph> ... </Paragraph>
<Paragraph> tekst
<Reference Resource="..." Title="..." Description="...">...</Reference>
tekst </Paragraph>
</SmallTalk>Hoe kan ik dan alle <Reference>-nodes verwerken, zodat ze als html-links weergegeven worden? De enige methode die ik tot nu toe gevonden heb, templates aanroepen, werkt niet (zie hieronder). Aan de ene kant wel logisch hoor: alle <Reference>-node's worden verwerkt waar je zo'n template opvraagt. Maar hoe kan ik dan wel alle <Reference>-node's in place converteren???
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="SmallTalk/Title" /></title>
</head>
<body>
[b]<xsl:apply-templates select="SmallTalk/Paragraph" />
<xsl:apply-templates select="SmallTalk/Paragraph/Reference" />[/b]
</body>
</html>
</xsl:template>
[b]<xsl:template match="SmallTalk/Paragraph">
<p><xsl:value-of select="." /></p>
</xsl:template>
<xsl:template match="SmallTalk/Paragraph/Reference">
<a href="<xsl:value-of select="@Resource" />" title="<xsl:value-of select="@Description" />">
<xsl:value-of select="." />
</a>
</xsl:template>
</xsl:stylesheet>[/b]De output van dit stylesheet is:
<html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Testing, 1, 2, 3, ...</title> </head> <body> <p>Dit is een test-link: XML.com in XML.</p> <a href="http://www.xml.com" title="...">XML.com</a> </body> </html>
Dus de <Reference>-node's worden verwerkt na de <Paragraph>-node's, in plaats van binnen de <Paragraph>-node's, wat mijn doel is. Tot nu toe heb ik geen XSL-syntax kunnen vinden die ervoor zorgt dat de <Reference>-node's binnen de <Paragraph>-node's omgezet worden in HTML.
Iemand enig idee? Alle suggesties zijn welkom! Bij voorbaat mijn dank,
Peter Odding