Looking for xsd Answers? Try Ask4KnowledgeBase
Looking for xsd Keywords? Try Ask4Keywords

xsd xs: schema elementFormDefault-Attribut


Beispiel

Per Konvention wird elementFormDefault immer auf qualifiziert gesetzt , aber sehen wir uns an, was es tatsächlich tut.


Zuerst mit elementFormDefault auf Qualifiziert.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2017 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" 
           targetNamespace="http://base.com" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyBaseElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ChildA" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XML-Beispieldokument

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2017 (https://www.liquid-technologies.com) -->
<b:MyBaseElement xmlns:b="http://base.com" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://base.com ElementFormDefault_qualified.xsd">
    <b:ChildA>string</b:ChildA>
</b:MyBaseElement>

Beachten Sie, dass das Element ChildA ebenfalls mit dem Namespace 'b' qualifiziert werden muss.


Jetzt betrachten wir es mit elementFormDefault, das auf unqualifiziert gesetzt ist.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2017 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="unqualified" 
           targetNamespace="http://base.com" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyBaseElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ChildA" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

XML-Beispieldokument

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2017 (https://www.liquid-technologies.com) -->
<b:MyBaseElement xmlns:b="http://base.com" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://base.com ElementFormDefault_unqualified.xsd">
    <ChildA>string</ChildA>
</b:MyBaseElement>

Beachten Sie diesmal, dass nur das global definierte Element MyBaseElement mit dem Namespace 'b' qualifiziert ist. Das innere Element ChildA (das innerhalb des Schemas definiert ist) ist nicht qualifiziert.


Im letzten Beispiel haben wir gesehen, dass die global definierten Elemente im XML-Instanzdokument qualifiziert werden müssen, inplace definierte Elemente jedoch nicht. Dies bedeutet jedoch nicht nur das Wurzelelement. Wenn Sie global definierte Elemente haben, auf die verwiesen wird, müssen diese ebenfalls qualifiziert werden.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2017 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="unqualified" 
           targetNamespace="http://base.com" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyBaseElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ChildA" type="xs:string" />
                <xs:element xmlns:q1="http://base.com" ref="q1:MyElement" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="MyElement" type="xs:string" />
</xs:schema>

XML-Beispieldokument

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2017 (https://www.liquid-technologies.com) -->
<b:MyBaseElement xmlns:b="http://base.com" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://base.com ElementFormDefault_unqualified.xsd">
    <ChildA>string</ChildA>
    <b:MyElement>string</b:MyElement>
</b:MyBaseElement>

Beachten Sie, dass MyElement auch qualifiziert werden muss, da es global definiert ist.


Fazit: Wenn elementFormDefault auf qualifiziert gesetzt ist, muss alles mit einem Namespace qualifiziert werden (entweder über einen Namespace-Alias ​​oder durch Festlegen der Standardnamenapce xmlns = "..."). Allerdings ist elementFormDefault auf unqualifiziert gesetzt, die Dinge werden kompliziert und Sie müssen einige eingehende Untersuchungen der Schemata durchführen, um herauszufinden, ob die Dinge qualifiziert werden sollen oder nicht.

Ich gehe davon aus, dass elementFormDefault deshalb immer auf qualifiziert gesetzt ist!