Frage

Beim Versuch, gemeinsamen Definitionen aus einem XML-Schema zu importieren, kann ich richtig geteilt Typen verweisen, aber gemeinsam genutzte Elemente verweisen verursacht Validierungsfehler.

Dies ist das Schema, dass die Einfuhren der gemeinsamen Definitionen (example.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  elementFormDefault="qualified"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:shared="http://shared.com">

    <xs:import namespace="http://shared.com" schemaLocation="shared.xsd"/>

    <xs:element name="example">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="importedElement"/>
                <xs:element ref="importedType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="importedElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="shared:fooElement"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="importedType">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bar" type="shared:barType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Dies sind die gemeinsamen Definitionen (shared.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://shared.com"
    targetNamespace="http://shared.com">

    <xs:element name="fooElement">
        <xs:simpleType>
            <xs:restriction base="xs:integer"/>
        </xs:simpleType>
    </xs:element>

    <xs:simpleType name="barType">
        <xs:restriction base="xs:integer"/>
    </xs:simpleType>

</xs:schema>

Sie nun diese XML-Instanz betrachten:

<?xml version="1.0"?>
<example
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     
  xsi:noNamespaceSchemaLocation="example.xsd">
    <importedElement>
        <fooElement>42</fooElement>
    </importedElement>
    <importedType>
        <bar>42</bar>
    </importedType>
</example>

Wenn validiert, die „importedType“ arbeitet völlig in Ordnung, aber das „importedElement“ gibt die folgende Fehlermeldung:

  

ist ungültig Inhalt beginnend mit dem Element ‚fooElement‘ gefunden. Einer von '{ " http://shared.com ": fooElement}' erwartet wird,

Ich würde vermuten, dass meine Probleme zu Namespace-Fragen im Zusammenhang werden (daher der irgendwie irreführend „bekam fooElement aber erwartete fooElement“) - keine Hinweise auf das, was ist los hier

War es hilfreich?

Lösung

Sie verweisen fooElement, als ob es in keinem Namensraum war, müssen Sie den richtigen Namensraum in Ihrem Instanzdokument verwenden:

<?xml version="1.0"?>
<example
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                     
  xsi:noNamespaceSchemaLocation="example.xsd" xmlns:shared="http://shared.com">
    <importedElement>
        <shared:fooElement>42</shared:fooElement>
    </importedElement>
    <importedType>
        <bar>42</bar>
    </importedType>
</example>

Edit: Ich sollte darauf hingewiesen: dass die Unterschiede zwischen Typen ist und Elemente ; nur die letztere erscheint in Dokumenten (mit einigen Ausnahmen), das ist, warum Ihr importierter Typ funktioniert, wie man wollte, und Ihr Element nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top