1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

XSLT => 2 Namespaces in XHTML => XHTML ungültig

    • Frage
  • Friend or Foe ?
  • 12. August 2004 um 02:39
  • Unerledigt
  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 12. August 2004 um 02:39
    • #1

    Hy, ich hab ein schwerwiegendes problem mit XSLT - im resultierende XHTML-Dokument werden nämli zwei namespaces aufgelistet => XHTML Dokument ungültig

    XML-Dokument:

    PHP
    <?xml version="1.0" encoding="UTF-8"?>
         <?xml-stylesheet type="text/xsl" href="personen.xsl"?>
     <personen xmlns="http://localhost/personen" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost/personen personen.xsd">
             <person id="1">
                 <name>flo
                 <alter>20
             </person>
             <person id="2">
                 <name>doris
                 <alter>14
             </person>
             <person id="3">
                 <name>bernd
                 <alter>23
             </person>
         </personen>
    Alles anzeigen



    XSL-Dokument

    PHP
    <?xml version='1.0' encoding="UTF-8"?>
     <xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:data="http://localhost/personen" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" default-validation="strict">
    
     <xsl:output method="xhtml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" standalone="no" media-type="text/xhtml"/>
    
         <xsl:template match="/" >
             <html>
                 <head>
                     <title>Personen
                     <link rel="stylesheet" type="text/css" href="personen.css" />
                 </head>
                 <body>
                     <table>
                         <tr>
                             <th>ID
                             <th>Name
                             <th>Alter
                         </tr>
                         <xsl:for-each select="data:personen/data:person">
                         <tr>
                             <td>
                             <td>
                             <td>
                         </tr>
                         </xsl:for-each>
                     </table>
                 </body>
             </html>
         </xsl:template>
         </xsl:stylesheet>
    Alles anzeigen


    XSLT beendet ohne Fehler - jedoch hab ich jetzt 2 namespaces im XHTML dokument, deswegen ist dieses ungültig

    PHP
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
         <!DOCTYPE html
           PUBLIC "-//W3C/DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
         <html xmlns="http://www.w3.org/1999/xhtml" xmlns:data="http://localhost/personen">
            <head>
               <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8"/>
               <title>Personen
               <link rel="stylesheet" type="text/css" href="personen.css" />
            </head>
            <body>
               <table>
                  <tr>
                     <th>ID
                     <th>Name
                     <th>Alter
                  </tr>
                  <tr>
                     <td>1
                     <td>flo
                     <td>20
                  </tr>
                  <tr>
                     <td>2
                     <td>doris
                     <td>14
                  </tr>
                  <tr>
                     <td>3
                     <td>bernd
                     <td>23
                  </tr>
               </table>
            </body>
         </html>
    Alles anzeigen


    HIER IST MEIN PROBLEM.
    Das XHTML-File ist natürlich ungültig, weil 2 Namespaces drinnen vorkommen, der data-namespace muss also raus, aber wie?
    Soweit ich mich jetzt schon informieren habe können, kommt alle namespaces, die für das xsl-dokument verwendet werden (außer natürlich der xsi-namespace) auch in das xhtml-dokument ... dieser vorgang wird NAMESPACE FIXUP genannt (wenn ich mich nicht täusche)

    Also, wie kann ich das umgehen, dass XSLT mir diesen zweiten namespace reinkopiert.

    BITTE BITTE BITTE - help me!

    ANMERKUNG: In allen XML-Dokumenten sind irgendwie beim kopieren und einfügen die schließenden Tags verloren gegangen! Alle XML-Dokumente (bis auf den beschriebenen XHTML-Namespace-Fehler sind orginal sowohl wohlgeformt als auch gültig (Xml Schema für Xml, RNG für Xsl, DTD Strict für XHTML)

    ... und willst du auch Pommes dazu?

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 12. August 2004 um 13:47
    • #2
    Zitat von Friend or Foe ?

    Das XHTML-File ist natürlich ungültig, weil 2 Namespaces drinnen vorkommen, der data-namespace muss also raus, aber wie?

    Hier ein Beispiel dazu von meinem XSLT für Atom:

    Code
    <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
    	xmlns:atom='http://purl.org/atom/ns#'
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	exclude-result-prefixes="atom dc">
    </xsl:stylesheet>

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • J.Petso
    15
    J.Petso
    Mitglied
    Reaktionen
    14
    Punkte
    2.384
    Beiträge
    457
    • 13. August 2004 um 17:37
    • #3
    Zitat von Friend or Foe ?
    Code
    <person id="1">
        <name>flo
        <alter>20
    </person>


    (...und viele gleichartige Konstrukte...)


    Jetzt einmal unabhängig von dem ganzen Namespace-Wirrwarr:
    Für ein XML-Dokument kommt mir das nicht wirklich wohlgeformt vor.

    Das Grundlegendste, was ich bei XML gelernt hab ist, dass jedes geöffnete Tag auch wieder geschlossen werden muss. Und unter anderem noch bevor das Eltern-Tag wieder geschlossen wird. Wenn du also ein <name>-Tag aufmachst und nicht schließt, dann ist das Dokument ja genauso wenig wohlgeformt wie gültig, oder? Oder hab ich eine Spezialregel versäumt?

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 13. August 2004 um 17:48
    • #4
    Zitat von J.Petso

    Wenn du also ein <name>-Tag aufmachst und nicht schließt, dann ist das Dokument ja genauso wenig wohlgeformt wie gültig, oder? Oder hab ich eine Spezialregel versäumt?

    Nein, hast du nicht.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 15. August 2004 um 14:51
    • #5

    natürlich, petso - entweder ist es ein leeres tag, welches in einem gleich wieder geschlossen wird:

    <name />

    oder es enthält einen (oder mehrere) text oder elementknoten, dann

    <name> ... </name>

    ansonsten ist das xml-dokument nicht wohlgeformt ...


    mein xml-dokument war wohlgeformt, nur sind wohl die schließenden tags entweder beim kopieren oder hier beim einfügen in das forum verloren gegangen ... keine ahnung.

    aber weißt du eine antwort auf meine frage?

    ... und willst du auch Pommes dazu?

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 15. August 2004 um 23:10
    • #6
    Zitat von Friend or Foe ?

    aber weißt du eine antwort auf meine frage?

    Hab ich doch eh schon geschrieben???

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 16. August 2004 um 10:16
    • #7

    Tut mir leid, hal, ich dachte, deine Antwort bezieht sich auf Petso (da du ihn zitiert hast)

    Aber wie ist es dann irgendwie möglich, jemals gültige XHTML-Dokumente zu erzeugen, sobald man für die eigenen Daten einen eigenen Namespace verwendet - des kann doch gar ned sein, dass dann nur mehr ungültiges zeug rauskommt!

    ... und willst du auch Pommes dazu?

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 16. August 2004 um 11:46
    • #8
    Zitat von Friend or Foe ?

    Tut mir leid, hal, ich dachte, deine Antwort bezieht sich auf Petso (da du ihn zitiert hast)

    Hab ich nicht: http://www.informatik-forum.at/showpost.php?p=146118&postcount=2

    Also nochmal für alle, dies nicht mitbekommen haben: Du musst einfach die namespaces die er entfernen soll im exclude-result-prefixes-attribut im stylesheeet-tag angeben, mit space getrennt.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 16. August 2004 um 23:25
    • #9

    DAS IST DIE ANTWORT, DIE ICH GEBRAUCHT HABE - danke hal !!!! (funktioniert)

    ---

    tut mir leid hal, aber irgendwie hab ich dein allererstes posting total übersehen - da hättest du ja immerhin schon die lösung reingeschrieben - tut mir nochmals leid, bin blind wie ein maulwurf

    ... und willst du auch Pommes dazu?

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 16. August 2004 um 23:51
    • #10

    nur eine kleine frage, hal

    wenn z.b. ein dokument habe

    PHP
    <xml>
            <hallo>text</hallo>
         </xml>


    kann ich über xpath zugreifen, z.b: /xml/hallo

    PHP
    <xml xmlns:data="http://...">
            <hallo>text</hallo>
         </xml


    dann z.b: /data:xml/data:hallo

    PHP
    <xml xmlns="http://...">
            <hallo>text</hallo>
         </xml>


    wie funktioniert es dann, weil z.B. /xml/hallo - liefert kein ergebnis

    ich hab das mit 2 xml-editoren ausprobiert (die auch xpath 2.0 unterstützen), liegt es dennoch an den programmen oder muss ich da irgendwie anders drauf zugreifen?

    wär mir eine große hilfe!

    ... und willst du auch Pommes dazu?

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. August 2004 um 17:10
    • #11
    Zitat von Friend or Foe ?


    wenn z.b. ein dokument habe

    Code
    <xml>
            <hallo>text</hallo>
         </xml>


    kann ich über xpath zugreifen, z.b: /xml/hallo

    korrekt

    Zitat
    Code
    <xml xmlns:data="http://...">
            <hallo>text</hallo>
         </xml


    dann z.b: /data:xml/data:hallo

    Nein. Die beiden tags haben keinen namespace, daher immer noch /xml/hallo. Wenn du <xml /> in den namespace geben willst, musst du <data:xml /> schreiben.

    Zitat
    Code
    <xml xmlns="http://...">
            <hallo>text</hallo>
         </xml>

    mit "xmlns=" definierst du einen default namespace, d.h. der wird genommen wenn kein anderer angeben ist, d.h. hier musst du dann im xpath /data:xml/data:hallo verwenden, wenn der data-namespace richtig als "http://..." in der xpath-lib angegeben ist (in XSLT musst es einfach im stylesheet-tag mit xmlns:data="http://..." angeben -- dabei ist es unerheblich, wie das Kürzel im Original-XML angegeben wurde, nur das http://... muss übereinstimmen!).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 18. August 2004 um 07:45
    • #12

    ah, ich denke, dass ich das ganze nun einigermaßen verstanden habe - vielen dank nochmal, hal!

    ... und willst du auch Pommes dazu?

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 18. August 2004 um 12:18
    • #13

    ich hätte schon wieder eine kleine frage, hal

    kennst du dich mit xquery aus?

    angenommen ich habe folgendes query-file:

    PHP
    <result>
    {
    let $e := <xml><length attr="inches">5</length></xml>
    return
    (
    	<h>{$e/child::length/attribute::attribute(attr)}</h>
    )
    }
    </result>



    dann erhalte ich als ergebnis:

    PHP
    <result>
    <h attr="inches" />
    </result>



    gleiches erhalte ich, wenn ich schreibe: $e/child::length/attribute::attr


    so - ich versuche nun das gleiche mit default namespace

    PHP
    declare namespace data = "http://localhost/complex";
     
    <result xmlns="http://localhost/complex">
    {
    let $e := <xml><length attr="inches">5</length></xml>
    return
    (
    	<h>{$e/child::data:length/attribute::attribute(attr)}</h>
    )
    }
    </result>
    Alles anzeigen



    dann erhalte ich

    PHP
    <result xmlns="http://localhost/complex">
    <h />
    </result>



    das attribut fehlt also!

    wenn ich allerdings schreibe: $e/child::data:length/attribute::attr

    dann ist das attribut inkludiert ... (so wie im 1. bsp nur mit namespace)

    ich hab mich mit dem blödsinn schon so lange herumgeschlagen und ich verstehe einfach nicht, warum die attribut-funktion nicht hinhaut, sobald ich einen namespace definiere - liegt das daran, dass die attribut-funktion nicht mehr bekannt ist ... oder warum sonst?
    vielleicht kannst du mir das ja erklären, weil ich kapier das wirklich nicht!

    danke nochmal

    ... und willst du auch Pommes dazu?

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 18. August 2004 um 13:14
    • #14
    Zitat von Friend or Foe ?

    kennst du dich mit xquery aus?

    leider nein, ich bin nur mit XSLT unterwegs.

    Falls das nach $e ein xpath-ausdruck ist, versteh ich allerdings nicht, warum du nicht einfach $e/data:length/@attr machst.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Friend or Foe ?
    3
    Friend or Foe ?
    Mitglied
    Punkte
    55
    Beiträge
    9
    • 19. August 2004 um 21:47
    • #15
    Zitat


    Falls das nach $e ein xpath-ausdruck ist, versteh ich allerdings nicht, warum du nicht einfach $e/data:length/@attr machst.

    naja, das hab ich eh gemacht, nur habe ich statt
    - @attr
    halt
    - attribute::attr
    geschrieben (is ja eh equivalent)

    nur eigentlich sollte es auch mit
    - attribute::attribute(attr)
    funktionieren ...

    aba keine ahnung, wieso des ned geht ...

    ... und willst du auch Pommes dazu?

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung