Thomas J.S.: xsd:enumeration aus XML Dokument

Beitrag lesen

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