Lude: Namensraeume und W3C Schema

Hi,

ich habe ein Schema und ein Element des Schemas moechte ich "auf" ein anderes Schema setzen.

Also irgendwie so etwas:

<BIBLIOTHEK>
 <BUCH ID="1">
<!-- anderes Schema -->
 </BUCH>
 <BUCH ID="2">
<!-- noch ein anderes Schema -->
 </BUCH>
</BIBLIOTHEK>

Das Schema fuer die Bibliothek habe ich, aber ich schaffe es nicht '<BUCH>' auf ein anderes Schema zu setzen.

Was tun?

Gruss,
Lude

--
"+"
  1. Hallo,

    ich habe ein Schema und ein Element des Schemas moechte ich "auf" ein anderes Schema setzen.
    Das Schema fuer die Bibliothek habe ich, aber ich schaffe es nicht '<BUCH>' auf ein anderes Schema zu setzen.

    Ich verstehe nicht was du mit "auf ein anderes Schema setzen" meinst.
    Möchtest du im <BUCH> einen anderen Namensraum verwenden, oder möchtest du ein anderes XML-Schema für den Inhalt vom diesem <BUCH> verwenden?

    Du kannst inkludierte Schemas auch redefiniren (d.h du kannst komplexe und einfach Typen (durch Einschränkung bzw. Erweiterung) ableiten und sie dabei redefinieren)

    <xs:redefine schemaLocation="buch.xsd">
      <xs:complexType name="BUCH">
        xs:complexContent
          <xs:restriction base="BUCH">
           <-- Inhaltsmodell -->
          </xs:restriction>
        </xs:complexContent>
      </xs:complexType>
    </xs:redefine>
    ...

    <xs:element name="BUCH" type="BUCH" />

    Es ist aber ein rcht kompliziertes Gebiet, denn man kann nur vollständige Schemas übernehmen und nur auf globaler Ebene (also es ist nicht möglich nur einige Definitionen in einem Schema zu übernehme, andere aber nicht)
    Andere Möglichkeit gibt es mit externen geparsten Entities oder mit XInclude.

    Grüße
    Thomas

    1. Hi,

      Ich verstehe nicht was du mit "auf ein anderes Schema setzen" meinst.

      ich wuerde ja erwarten, dass z.B. Folgendes geht:
      <Bibliothek xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Bibliothek.xsd">
       <BooksNumber>2</BooksNumber>
       <!-- u.s.w. -->
       <Books id="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book1.xsd">
        <Title>Bert, das Brot</Title>
        <!-- u.s.w. -->
       </Books>
       <Books id="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book2.xsd">
        <CoverColor>red</CoverColor>
        <!-- u.s.w. -->
       </Books>
      </Bibliothek>

      Es ist aber ein rcht kompliziertes Gebiet, denn man kann nur vollständige Schemas übernehmen und nur auf globaler Ebene (also es ist nicht möglich nur einige Definitionen in einem Schema zu übernehme, andere aber nicht)

      Ich will das Buch ganzschematisch in die Bibliothek packen.

      Andere Möglichkeit gibt es mit externen geparsten Entities oder mit XInclude.

      Quaele mich schon seit einiger Zeit mit dieser Thematik rum; scheint nicht ganz einfach zu verstehen zu sein.

      Danke fuer Deine Hilfe, uebrigens.

      Gruss,
      Lude

      --
      "BK Schroeder muss weg."
      1. Hi,

        <Bibliothek xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Bibliothek.xsd">
        <Books id="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book1.xsd">
        <Books id="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book2.xsd">

        Du verwendest 3mal denselben Namen xsi für verschiedene Namespaces. Kann das das Problem sein?

        Ich geh mal davon aus, daß das id-Attribut nicht ID als Datentyp hat? Denn sonst wäre ne Ziffer am Anfang falsch...

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hi,

          war nur eine Skizze.

          Habe jetzt folgendes gemacht:
          1.) ein Include: '<xs:include schemaLocation="http://.../Schema-2.xsd"/>'
          2.) ein Attribut 'ref' gesetzt: '<xs:element  ref="RequestEnv" minOccurs="0">'

          Wobei RequestEnv das Root-Element von "Schema-2" ist. Dann geht's.

          Alternativ habe ich zum Root-Element von "Schema-2" einen komplexen Typ angelegt, der alle Elemente beinhaltet, die auch das Rootelement beinhaltet. Dann kann ich, wiederum nach einem Include, in "Schema-1" einem Element den 'type' (s.o. - komplexer Typ) zuweisen.

          Was ich da aber genau mache, bleibt mir doch sehr unklar.   ;-)

          Gruss,
          Lude

          --
          "Gemobbt wird aus Berlin."
      2. Hallo,

        ich wuerde ja erwarten, dass z.B. Folgendes geht:
        <Bibliothek xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Bibliothek.xsd">
        <Books id="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book1.xsd">
        </Books>
        <Books id="2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Book2.xsd">
        </Books>
        </Bibliothek>

        Das ginge hier nur dann tatsächlich, wenn du einen Namensraum für das  2. <Books> einführen würdest.

        --------------------------------------------------
        war nur eine Skizze.

        Habe jetzt folgendes gemacht:
        1.) ein Include: '<xs:include schemaLocation="http://.../Schema-2.xsd"/>'
        2.) ein Attribut 'ref' gesetzt: '<xs:element  ref="RequestEnv" minOccurs="0">'

        Wobei RequestEnv das Root-Element von "Schema-2" ist. Dann geht's.

        Alternativ habe ich zum Root-Element von "Schema-2" einen komplexen Typ angelegt, der alle Elemente beinhaltet, die auch das Rootelement beinhaltet. Dann kann ich, wiederum nach einem Include, in "Schema-1" einem Element den 'type' (s.o. - komplexer Typ) zuweisen.

        Was ich da aber genau mache, bleibt mir doch sehr unklar.   ;-)
        -----------------------------------------------------

        Die "einfachste" alternative wäre, wenn du in deinem <Books> beliebige Elemente zuläßt:

        <xs:any namespace="##any" prozessContent="lax" minOccurs="0" maxOccurs="unbounded" />

        Danke fuer Deine Hilfe, uebrigens.

        Ich bin sicher, man würde mich missverstehen wenn ich sagte "dazu ist das Forum da" ;-)

        Grüße
        Thomas