hh: XInclude und Namesräume

Hallo,

ich habe ein XML in die eine weitere XML Quelle mit XInclude eingeordnet werden soll

file1.xml

<root xmlns="zzzz" xmlns:hh="http://www.hh.com" xmlns:xi="http://www.w3.org/2001/XInclude">

<test>
<xi:include href="file2.xml" parse="xml" encoding="UTF-8"/>
.
.
<test>

</root>

file2.xml
<root xmlns="http://www.hh.com">
<neuesElement id="neuesElement">
<KindElement>....</kindElement>
</neuesElement>
</root>

Eigetlich sollte dann so etwas kommen:

<root xmlns="zzzz" xmlns:hh="http://www.hh.com" xmlns:xi="http://www.w3.org/2001/XInclude">

<test>
hh:root
<hh:neuesElement id="neuesElement">
hh:KindElement....</hh:kindElement>
</hh:neuesElement>
</hh:root>
<test>
</root>

Es wird jedoch scheinbar "nur" so ohne Namensraum eingebracht:

<root xmlns="zzzz" xmlns:hh="http://www.hh.com" xmlns:xi="http://www.w3.org/2001/XInclude">
<test>
<root>
<neuesElement id="neuesElement">
<KindElement>....</kindElement>
</neuesElement>
</root>
<test>
</root>

Hat jemand eine Idee, wie man den Namespace mit übernehmen?

  1. Hallo,

    ich habe ein XML in die eine weitere XML Quelle mit XInclude eingeordnet werden soll

    Es wird jedoch scheinbar "nur" so ohne Namensraum eingebracht:

    http://www.w3.org/TR/2004/REC-xinclude-20041220/#creating-result
    "Some processors may not be able to represent an element's in-scope namespaces property if it does not include bindings for all the prefixes bound in its parent's in-scope namespaces. Such processors may therefore include additional namespace bindings inherited from the include parent in the in-scope namespaces of the included items."

    und: http://www.w3.org/TR/2004/REC-xinclude-20041220/#namespaces

    Hat jemand eine Idee, wie man den Namespace mit übernehmen?

    Nicht wirklich, aber vielleicht hilf ein:

    <test xmlns="http://www.hh.com">
    <xi:include href="file2.xml" parse="xml" encoding="UTF-8"/>

    Grüße
    Thomas

    1. Hallo Thomas,

      danke für den Hinweis, den hatte ich doch glatt überlesen. Ich werde nachher mal versuchen, in Oxygen einen anderen Processor einzusetzen, mal sehen wie das Ergebnis dann aussieht. Es könnte wirklich daran liegen, denn das xpointer Argument will auch nicht so richtig

      file2.xml
      <hh:root xmlns:hh="http://www.hh.com>
      <hh:menge id="base">
      hh:untermengesomething</hh:untermenge>
      </hh:menge>
      </hh:root>

      ein xi:include funktioniert mit
      <xi:include href="file2.xml" parse="xml" encoding="UTF-8/>

      ein aufruf mit
      <xi:include href="file2.xml" xpointer="base" parse="xml" encoding="UTF-8/>

      wird aber verweigert. Liegt wohl auch am processor?!? Oder muss da noch ein namespace Verweis in das xpointer Attribut? Na ja, wie auch immer, ich habe jetzt die Elemente der einzuschliessenden Datei mit dem prefix versehen, werde aber auf alle Fälle mal den processor austauschen und mir dann das Ergebnis anschauen. Nur gut zu wissen, dass ich nicht gänzlich falsch in meinem Ansatz war ;-)

      Gruß

      1. Hallo,

        danke für den Hinweis, den hatte ich doch glatt überlesen. Ich werde nachher mal versuchen, in Oxygen einen anderen Processor einzusetzen, mal sehen wie das Ergebnis dann aussieht. Es könnte wirklich daran liegen, denn das xpointer Argument will auch nicht so richtig

        file2.xml
        <hh:root xmlns:hh="http://www.hh.com>
        <hh:menge id="base">
        hh:untermengesomething</hh:untermenge>
        </hh:menge>
        </hh:root>

        ein xi:include funktioniert mit
        <xi:include href="file2.xml" parse="xml" encoding="UTF-8/>

        ein aufruf mit
        <xi:include href="file2.xml" xpointer="base" parse="xml" encoding="UTF-8/>

        wird aber verweigert. Liegt wohl auch am processor?!? Oder muss da noch ein namespace Verweis in das xpointer Attribut?

        Solange, du nicht eine Schema oder DTD für file2.xml verwendest (um darin die @id als ID zu definieren), liefert der Pointer einen Error.

        Einen Namensraum könntest du auch verwernden z.B:

        <xi:include xpointer="xmlns(hh=http://www.hh.com) xpointer(/hh:menge)"
                      parse="xml"/>

        Grüße
        Thomas

        1. Hallo Thomas,

          manchmal liegt es an den Kleinigkeiten. Ich habe mein xml immer mit einem extern xsd validiert in Oxygen und dann ganz vergessen, dass auch das dem externen xml kein schema zugeordnet war. Und uha, das wird jetzt richtig schön komplex, da das xsd für file2.xml gleichzeitig das schema für xml1 werden soll. Aber danke dir für den Hinweis.

          Gruß