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

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

    XML-Dokument:



    XSL-Dokument


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


    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?

  • 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!

  • 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

  • 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!

  • 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?

  • 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!

  • 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?

  • 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!

  • 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?

  • 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?

  • 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!

  • 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



    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?

  • 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!

  • 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?

Jetzt mitmachen!

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