André: xsd:enumeration aus XML Dokument

Hallo,

ich möchte in einem Schema die Enumeration auf die Werte in einem separaten XML Dokument beschränken.

Also z.B. in Bestellung.xsd möchte ich Kunde auf die beschränken die in Kunde.xml enthalten sind.

Dabei möchte ich vermeiden aus dem XML mittels XSLT ein Schema zu erstellen.

Danke & Gruß André

  1. Eine dynamische Zuweisung wäre mir neu für xsd schema und ist auch so nicht vorgesehen, also etwa die werte mit einer xpath anweisung abzugreifen. Lasse mich aber gerne eine besseren erleuchten.

    Gruß

    Hallo,

    ich möchte in einem Schema die Enumeration auf die Werte in einem separaten XML Dokument beschränken.

    Also z.B. in Bestellung.xsd möchte ich Kunde auf die beschränken die in Kunde.xml enthalten sind.

    Dabei möchte ich vermeiden aus dem XML mittels XSLT ein Schema zu erstellen.

    Danke & Gruß André

  2. Hallo,

    ich möchte in einem Schema die Enumeration auf die Werte in einem separaten XML Dokument beschränken.

    Also z.B. in Bestellung.xsd möchte ich Kunde auf die beschränken die in Kunde.xml enthalten sind.

    Du kannst(musst) dazu XML ein Schema-Datei erstellen, in der du die betreffenden Teile aus dem ersten Schema ableitest, also in deinem 2. Schema soll dann irgendwo sowas wie:

    <xs:redefine schemaLocation="kunden.xsd">
      ....
    </xs:redefine>

    stehen. Allerdings kannst du nur globale Typen und Gruppen (sowohl Element- als auch Attributgruppen) aus der so inkludierten Schema ableiten. Die Definition die nicht im <redefine> stehen, werden dabei unverändert übernommen.

    Andere Möglichkeiten gibts auch, aber sie sind teils etwas "gewagter":
    Externe geparste Entities in der Schema-Datei z.B:

    <?xml verion=1.0"?>
    <!DOCTYPE xsl:schema[
      <!ENTITY kunden SYTEM "kunde.ent">
    ]

    <xs:schema .... >
       <xs:simpleType ...>
        &kunde;
       </xs:simpleType>
    </xs:schema>

    XInclude geht auch:

    <xs:schema .... >
       <xs:simpleType ...>
          <xi:include href="kunde.xsd" parse="xml" />
       </xs:simpleType>
    </xs:schema>

    oder auch nur ein Fragment:
    <xs:schema .... >
          <xi:include href="kunde.xsd#foobar" parse="xml" />
     </xs:schema>

    kunde.xsd ist ein komplettes schema (kann ja auch ganz klein sein):

    <xs:schema .... >
      ...
       <xs:simpleType ...  id="foobar">
          <xs:restriction base=...">
              .....
           </xs:restriction>
       </xs:simpleType>
     ...
    </xs:schema>

    Grüße
    Thomas