Thomas J.S.: element einem XML Schema hinzufügen

Beitrag lesen

Hallo,

muesste aber noch einmal nachhaken. Also das original schema (original.xsd) importiert in der Tat weitere schemas über

<import namespace=".........." .... />

Tja und daran scheiter es schon: denn diese andere Schemas haben sicherlich ein targetNamespace (ist ja auch mehr oder wenigen zwingend, damit man eben die dort definierten Elemente unterschieden kann)

Das Original Schema lasse ich dann wiederum in mein schema importieren (mein.xsd). Mein schema ist nicht als solches im root element der xml Datei verankert und wird beim parsen zur Überprüfung hinzugefügt.

Das verstehe ich nicht, du meinst im schemaLocation des XMLs ist nicht dein Schema angegeben?

die definition vom root element steht an sich nicht in der original.xsd sondern wiederum in einem anderen schema (root.xsd), das in original.xsd importiert wird. Jetzt meine Frage, könnte man das schema, welches das root element (root.xsd) definiert mit einem neuen schema (kopie mit anpassung der möglichen elemente innerhalb des root elements) "überlagen". Etwa ein xsd:include mit rootneu.xsd in mein.xsd aufnehmen.

Man könnte, genau für so etwas ist xs:redefine gedacht, aber ...

Und noch eine Frage zum redefine, weil ich über den Satz irgendwie stolpere:
"Solche Schemadokumente müssen entweder (a) den gleichen targetNamespace wie das <redefine> (neu definierte) Schemadokument oder (b) überhaupt keinen targetNamespace haben. Im letzteren Fall wird dann das <redefine>  (neu definierte) Schemadokument in den targetNamespace des Schemadokuments konvertiert, in dem das <redefine> aufgerufen wurde"

Das heisst also, ein redefine von einem Element ist primär nur möglich, wenn das xsd schema den gleichen targetNamespace hat. Könnte ich dann nicht auch ein schema importieren (oder include?), was dem root.xsd entspricht und dort das ein redefine des root Element durchführen?

... ja, entweder muss das Schema welches du mit xs:redefine einbindest auf denselben targetNamespace hinweisen (wie das Schema in dem du es einbindest) oder gar kein Namesraum (außer xs bzw. xsd) aufweisen.

Jedoch: auch das würde dir nicht helfen, denn auch mit xs:redefine kannst du keine Elemente nue definieren. Der Inhalt von xs:redefine kann nur (annotation | (simpleType | complexType | group | attributeGroup) sein.
Sprich: so lange das root-Element nicht als Typ deklariert ist, kannst du es nicht umdefinieren, egal ob du import oder redefine verwendest. (und so lange das root.xsd importiert und weitergereicht wird, hast du ein Element-Definition.)

Grüße
Thomas