Announcement

Collapse
No announcement yet.

XSD-File - Restriction aus importierten Namespace

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSD-File - Restriction aus importierten Namespace

    Hallo, ich bin neu in diesem Forum.

    Ich habe bereits ein paar Stunden in die Problematik versenkt aber ohne Ergebnis, deshalb finde ich hoffentlich hier eine Lösung.

    Zur Zeit entwickel ich eine Struktur für eine komplexe Applikation um Informationen einzutragen und vorgegebene Wert auszuwählen.

    Ich benötige in einer Basis einige Werte die global immer gleich sind, jedoch sind die Verfügbaren Werte immer unterschiedlich oder sollen auf eine globale Vorgabe zugreifen. (Das bezieht sich auf mein komplexes Projekt)


    Mein Problem:

    Die Basisklasse befindet sich in einem extra dafür vorgesehenen XSD-File. (ff.: Q2)

    Möchte ich nur eine restriction anwenden im Bezug auf das importierte XSD-File (ff.: Basis aus Q2) wird mir ein Fehler angezeigt: "derivation-ok-restriction.5.4.2: Error for type 'restriction'. The particle of the type is not a valid restriction of the particle of the base."

    Damit ich Fehler meinerseits ausgeschlossen habe zum Testen (ich bin die Sprache komplett neu am lernen) habe ich die Basis-Klasse in das Ziel XSD rein kopiert und damit funktioniert das einwandfrei.


    hier der kurze Source Code (Falls ich das hier irgendwie anders einfügen kann, bitte um Korrektur-Hilfe :

    <!-- kopiert aus namespace Q2 (vollkommen identisch) -->
    <complexType name="Basis">
    <sequence>
    <element name="StringElement" type="string" />
    </sequence>
    </complexType>

    <!-- funktioniert nicht -->
    <complexType name="restriction">
    <complexContent>
    <restriction base="Q2:Basis">
    <sequence>
    <element name="StringElement" type="string" />
    </sequence>
    </restriction>
    </complexContent>
    </complexType>

    <!-- funktioniert -->
    <complexType name="restriction_local">
    <complexContent>
    <restriction base="tns:Basis">
    <sequence>
    <element name="StringElement" type="string" />
    </sequence>
    </restriction>
    </complexContent>
    </complexType>

  • #2
    Wenn das Element "StringElement" im importierten Schema einen anderen Namensraum hat als im importierendem Schema, dann ist <element name="StringElement" type="string" /> eben im importierendem Schema in einem anderen Namensraum und somit ist die "Restriktion" gar nicht für ein existierendes Element aus dem Basistypen, sondern versucht ein neues Element mit einem anderen Namensraum einzuführen. Die Typrestriktion sollte deshalb im importierten Schema gemacht werden.

    Comment


    • #3
      Vielen Dank für die schnelle Antwort!

      komischerweise bekomme ich nun folgende Detail-Information:
      rcase-NameAndTypeOK.1: Elements have names and target namespaces which are not the same: Element 'StringElement' in namespace 'http://www.example.org/Erweiterung' and element 'StringElement' in namespace 'http://www.example.org/restriction'.

      Das würde das ja genau bestätigen, was du geschrieben hast.

      Dann stellt sich die Frage: Sollte oder Muss das im importierten Schema sein. Weil ich habe am Ende des Tages sonst 200 Restrictionen in dem selben Schema stehen, was es einfach extrem unübersichtlich machen wird (Das will ich eigentlich für die Zukünftige Wartung und Erweiterung strikt vermeiden :/

      Comment


      • #4

        Die Werte, die man per Restriktion von komplexen Typen restringieren kann, sind unter https://www.w3.org/TR/xmlschema-0/#DerivByRestrict dargestellt. Ein Basistyp mit einem Element in einem bestimmten Namensraum kann nicht per Restriktion ein Element des selben Namens, aber in einem anderen Namensraum erhalten. Zumindest soweit ich die Möglichkeiten der W3C Schemasprache verstehe.

        Comment

        Working...
        X