fjh: Frage zu Namensräumen

Beitrag lesen

Hallo Ralf,


<?xml version="1.0" encoding="ISO-8859-1" ?>
    <bestellung xmlns:produkt="http://localhost/XML/produkt" xmlns:kunde="http://localhost/XML/kunde">
     produkt:nummerp49393</produkt:nummer>
     kunde:lieferadresseDonnerbalkenstr.14, 80111 München</kunde:lieferadresse>
    </bestellung>

Ist ja auch so weit alles klar. Aber wie validiere ich jetzt dieses
mit Hilfe einer XSD Datei?

Bei einer XML-Instanz, die keine Namensräume enthält, referenzierst Du ein Schema über das Attribut xsi:noNamespaceLocation im Wurzelelement des Instanzdokuments. Das weisst du ja schon.

Verwendest Du Namensräume (oder Jargon-mäßiger formuliert: bevölkerst Du Namensräume) in Deinem XML-Schema, musst du im Instanzdokument das Schema über das Attribut xsi:schemaLocation referenzieren. Als Wert gibst Du den/die Namensraum-URI(s) an, die Du im XML-Schema verwendest und den URI, wo sich das Schema befindet:

Also z.B

<bestellung
   xmlns:produkt="http://localhost/XML/produkt"
   xmlns:kunde="http://localhost/XML/kunde">
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://localhost/XML/kunde ../xsd/sch054.xsd">

Im XML-Schema musst Du nun deinen Namensraum als sogenannten Zielnamensräume angeben

<xs:schema
   xmlns:xs="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://localhost/XML/kunde">

Wenn Du nun zwei Namensräume validieren willst, kannst du ein anderes Schema importieren (das einen anderen Namensraum bevölkert) und du musst das Attribut elementFormDefault="qualified" im XML-Schema-Element verwenden. In diese Richtung solltest Du bei den Links von Thomas mal weiterschauen.

Gruß
Franz