Avatar billede rzj Nybegynder
06. marts 2003 - 09:59 Der er 5 kommentarer og
2 løsninger

namespace - hvor?

Hej E's
Jeg output'er XHTML vhja. af XSL (med Sablotron - PHP). Nu er det sådan at de forskellige XSLT's indgår forskellige steder på siden - pointen er at jeg IKKE medtager <html><head><meta><body> osv. elementer i mine XSLs.

Nu er spg. så hvor jeg skal placere namespace for html - elementerne så der skelnes mellem XML elementer og html-elementer.

Normalt vil et XSL jo se sådan ud:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xhtml" encoding="iso-8859-1"/>
<xsl:template match="news">
    <html xmlns="http://www.w3.org/1999/xhtml">
      <head>

altså med et namespace (xmlns="http://www.w3.org/1999/xhtml) for de elementer der skal forstås/fortolkes som xhtml.

Men jeg anvender jo netop ikke <html> elementet, da jeg udelukkende anvender XSL til at transformere delelementer på andre sider...

Så hvor skal namespaces så placeres eller skal der overhovedet indgå et namespace?

/raz
Avatar billede atoft Nybegynder
06. marts 2003 - 10:54 #1
Du må jo have en side hvor <html xmlns="http://www.w3.org/1999/xhtml"> er på.

Også behøver du ikke at specificerer det igen. Det er jo output-method="xhtml" som bestemmer outputtet og ikke namespacet på html tagget.

Så smid det bare væk.
Avatar billede Slettet bruger
06. marts 2003 - 11:00 #2
Hvis du udelukkende output'er XHTML elementer til sider der i forvejen indeholder <html> elementet med defineret namespace, så er det nemmeste at ignorere namespacet og bare output'e dine elementer.

Hvis du har brug for at benytte namespacet i XSLT, så kan du gøre det ved at
definere namespacet med prefix - f.eks. "h" og så sætte exclude-result-prefixes="h" - eks.:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:h="http://www.w3.org/1999/xhtml"
  exclude-result-prefixes="h"
>
  <xsl:template match="/">
      <h:p>axsl:apply-templates /></h:p>
  </xsl:template>

</xsl:stylesheet>

/CS
Avatar billede rzj Nybegynder
06. marts 2003 - 11:03 #3
atoft>> Det forstår jeg ikke helt, men prøv at se:

Jeg har en side:
<html>
<body>
-->Her bliver der smidt XHTML ind via XSLT
</body>
</html>
Skal jeg så:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
-->Her bliver der smidt XHTML ind via XSLT
</body>
</html>

Og hvad er det jeg skal smide væk? output-method kald eller namespace?

Iøjeblikket HAR jeg smidt namespace væk, men så får jeg indsat et standard ns på alle de xhtml-elementer der anvende i XSL'et...

Eksempel:html>
<head>
<body>
<table border="1" width="100%">
<tr valign="top">
<td colspan="3">
</td>
</tr>
<tr valign="top">
<td>
Module: menu<br/>PlaceID: leftTop<br/><table xmlns="http://www.w3.org/1999/xhtml" border="0" bgcolor="#CCCCCC">
  <tr>
    <td align="right">
      <a href="?pageID=01">Nyheder</a>
      <br />
      <a href="?pageID=0101">sub1</a>

Hvorfor kommer der namespace i nr. to table-element og ikke i første?

/raz
Avatar billede rzj Nybegynder
06. marts 2003 - 11:12 #4
aha - jeg er lidt forvirret når I skriver 'smid det væk' el. 'ignorer namespace' ?

Igen: Hvilket Namespace er det lige jeg skal ignorere? Namespace for stylesheet eller namespace for XHTML ?
Og det med prefix' er meget funky, men ja jeg anvender foreløbigt kun XML/XSL til at reusltere i output som XHTML, men selvfølgeligt skal det være generiks nok til at jeg ikke får problemer senere...

Desuden et lille tillægsspg.? Jeg hiver jo data udfra DB og pakker ind i XML. Hvis dette data indeholder html-elementer (eks. <a><p> osv.) så bliver det jo regnet som en del af XML strukturen og ikke som ren tekst.
Derfor formatere jeg < og > til &lt og &gt; inden det kommer i db og derefter tilbage til < og > efter det er transformeret og lige inden det outputtes til klient.
Er dette 'måden' eller er det noget snyd og humbug og elendigt? Jeg kan ikke umidelbart se måder og det virker faktisk fint...samtidigt for jeg jo også sikret at brugere der indtaster noget med <> (eksempelvis matematiske udtryk) får vist deres indtastning fornuftigt...

Er der laver en eller anden form for standard-parser (evt. i PHP), der sørger for at lagre brugerinput så alle tegn vises fornuftigt :-)

Som sagt er det et tillægsspg. og jeg opretter gerne nyt med point osv...
/raz
Avatar billede Slettet bruger
06. marts 2003 - 11:32 #5
I samme øjeblik du smider stylesheet namespacet væk, virker dit stylesheet ikke længere, så det er XHTML namespacet du skal glemme, hvis du vil.

/CS
Avatar billede rzj Nybegynder
06. marts 2003 - 13:48 #6
greystate>> Og så er min pointe at det HAR jeg gjort. Dvs. jeg anvender ikke noget namespace for XHTML, men jeg får alligevel nedenstående output:
[...]
<head>
<body>
<table border="1" width="100%">
<tr valign="top">
<td colspan="3">
</td>
</tr>
<tr valign="top">
<td>
Module: menu<br/>PlaceID: leftTop<br/><table xmlns="http://www.w3.org/1999/xhtml" border="0" bgcolor="#CCCCCC">
  <tr>
    <td align="right">

[...]

Så hvis det du siger korrekt, hvorfor fremkommer så namespace for table-elementet?
Det er ikke for at være på tværs, jeg undre mig bare....:-)
/raz
Avatar billede rzj Nybegynder
06. marts 2003 - 13:53 #7
OK, jeg har fattet det nu. XSL skal se sådan ud:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

og IKKE sådan:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns="http://www.w3.org/1999/xhtml">

Tak for hjælpen!

Nogle der har forstand på mit tillægs spg. eller skal jeg poste det i seperat tråd?
/raz
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester