XSD Erweiterung mit benutzerdefinierten Attributen kann, indem zuerst der Brauch in Ihrem eigenen Namensraum-Attributen erreicht werden, wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.mycompany.com"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:attribute name="myAttribute" type="xs:boolean" default="true"/>
</xs:schema>
In diesem Namensraum, http://www.mycompany.com
ein einziges Attribut myAttribute
genannt definiert ist, mit einer Art von xs:boolean
.
Als nächstes diesen Namensraum in Ihrem Zielschema verwendet, wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mc="http://www.mycompany.com"
xsi:schemaLocation="http://www.mycompany.com ./doc.xsd"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="element1" mc:myAttribute="false"/>
</xs:schema>
In diesem Beispiel ist das <schema>
Element enthält Attribute, die den benutzerdefinierten Namespace (xmlns:mc="http://www.mycompany.com"
) und den Speicherort für die benutzerdefinierte Schemadatei definieren (xsi:schemaLocation="http://www.mycompany.com ./doc.xsd"
). Das Zielschema enthält ein einzelnes Element und das oben definierte benutzerdefinierte Attribut myAttribute
mit dem Wert "false"
. Beachten Sie, dass dem Namen des benutzerdefinierten Attributs das benutzerdefinierte Namespacepräfix vorangestellt ist. Beachten Sie außerdem, dass bei Verwendung eines ungültigen Werts (Beispiel: mc:myAttribute="invalid"
) ein Validierungsfehler generiert wird.
Dankeschön an @GhislainFourny und @kjhughes für Hilfe bei dieser Antwort.
XMLSpy erzeugt auch einen Fehler. jedoch mit einem Namespace das Attribut Qualifikation scheint zu funktionieren: ': Schema xmlns: xs =" http: // www. w3.org/2001/XMLSchema "xmlns: myns =" http://www.mycompany.com "elementFormDefault =" qualifiziert "attributeFormDefault =" unqualifiziert "> \t \t ' –
Ja, das wird auch funktionieren. Gute Idee. Antwort aktualisiert – kjhughes
Warum ist das aber gültig? Ich habe keine Dokumentation gefunden, die das beantwortet. Es scheint nicht so, als ob das benutzerdefinierte Attribut tatsächlich im benutzerdefinierten Namespace definiert werden muss. Wenn ich meinen eigenen Namespace "importiere", wird kein Fehler ausgelöst, wenn das Attribut nicht definiert ist, oder zum Beispiel "type =" xs: integer "'. –