Angenommen, ich habe ein XML-Schema und möchte einige Erweiterungen an mehreren Knoten unterstützen. Eine Erweiterung sollte innerhalb dieser Knoten gültige XML sein.XML mit unbekannten Elementen erweitern
Ich weiß, dass dies mit dem <beliebigen> Element in Ihrem Schema implementiert werden kann. In meinem XML, das mein Schema verwendet, möchte ich jedoch, dass diese Erweiterung nur Knoten von einem anderen XSD verwendet. So geben Sie das Schema der Erweiterung zur Laufzeit an und können diese Erweiterung dann gegen das Erweiterungsschema validieren.
Im folgenden Beispiel wird ein statisches Extension-Schema:
<xs:element name="notes" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:any namespace="http://www.w3.org/1999/xhtml"
minOccurs="0" maxOccurs="unbounded"
processContents="skip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Jetzt möchte ich dieses Schema in meinem XML angeben, zum Beispiel (Ich bin ein Neuling), wie folgt aus:
<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="myschema.xsd">
<bar>
<extension>
<html namespace="http://www.w3.org/1999/xhtml">
<body>Hello, World!</body>
</html>
</extension>
</bar>
</foo>
Was ist der beste Ansatz dafür? Idealerweise möchte ich in meinem XML eine Liste der Schemas haben, die ich in den Erweiterungsknoten meines XML verwende.
Danke!
== Bearbeitet, ausführlichere Erklärung: ==
Ich möchte benutzerdefinierte XML-Daten in bestimmten Knoten unterstützen. Ich kenne das Schema dieser Erweiterung während des Schreibens meines "Master" -Schemas nicht.
Ich habe das folgende Fragment in meinem XSD angegeben:
<xs:element name="extension">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##other" processContents="strict"/>
</xs:sequence>
</xs:complexType>
</xs:element>
und die folgenden XML verwenden möchten:
<foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd" >
<bar>
<extension>
<html xmlns="http://www.w3.org/1999/xhtml">
<body2>Hello, world!</body2>
</html>
</extension>
</bar>
</foo>
Jetzt mache ich einen Parser-Fehler wollen, weil < body2 nicht gültig ist XHTML-Element. Allerdings beschwert sich der XMLSpy-Parser bereits über das < html> -Element, das nicht gültig ist.
Ich kann keinen Fehler sehen! XMLSpy kann dumm sein und die Namespaces nicht wechseln. Jedoch ... body2 ist an dieser Stelle ein ungültiges Element! Was wenn du Körper nimmst? –
Siehe meine Bearbeitung. XMLSpy hat das Recht, das html-Element abzulehnen: Sie haben nicht angegeben, wo Sie das Schema dafür erhalten sollen. –