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