2017-12-26 11 views
0

Ich entwerfe ein XSD-Schema für alle meine XML-Dateien, die ich im Nachhinein erstellt habe. Ich weiß, dass ich das zuerst machen sollte, aber ich bin irgendwie neu dazu. Bis jetzt funktioniert all mein XML Wunder für meine App, ich will nur eine gute Bestätigung dafür.Verweise auf ein anderes Tag in meinem XML-Schema

Hier ist ein kurzes Beispiel dafür, was ich vorhabe.

<fields> 
 
    <field id="name" type="text"> 
 
    \t <display>Somethings Name</display> 
 
    \t <description>The name of the something.</description> 
 
    </field> 
 
</fields> 
 
<forms> 
 
    <form id="custom_form"> 
 
    <widgets> 
 
     <widget type="text-input"> 
 
     <field id="name"/> 
 
     </widget> 
 
    </widgets> 
 
    </form> 
 
</forms>

Hier ist ein vereinfachtes Beispiel für den XSD ich habe:

<xs:sequence> 
 
    <xs:element name="fields" minOccurs="1" maxOccurs="1"> 
 
    <xs:complexType> 
 
     <xs:sequence> 
 
     <xs:element name="field" type="fieldType" 
 
      minOccurs="1" maxOccurs="unbounded"> 
 
     </xs:element> 
 
     </xs:sequence> 
 
    </xs:complexType> 
 
    </xs:element> 
 
    <xs:element name="forms" maxOccurs="1" minOccurs="1"> 
 
    <xs:complexType> 
 
     <xs:sequence> 
 
     <xs:element name="form" minOccurs="0" maxOccurs="unbounded"> 
 
      <xs:complexType> 
 
      <xs:sequence> 
 
       <xs:element name="widgets" minOccurs="1" maxOccurs="1"> 
 
       <xs:complexType> 
 
        <xs:sequence> 
 
        <xs:element name="widget" minOccurs="1" maxOccurs="unbounded"> 
 
         <!-- What do I put here to reference a field? --> 
 
        </xs:element> 
 
        </xs:sequence> 
 
       </xs:complexType> 
 
       </xs:element> 
 
      </xs:sequence> 
 
      </xs:complexType> 
 
     </xs:element> 
 
     </xs:sequence> 
 
    </xs:complexType> 
 
    </xs:element> 
 
</xs:sequence>

Meine Hauptfrage ist, wie kann ich feststellen, das XSD-Schema, das die Element innerhalb des widget Knotens ist eine Referenz auf eines der Felder defi ned im fields Knoten darüber? Im Moment verwende ich einfach Code für diese Validierung.

Wie soll ich den Feldknoten in diesem Szenario definieren? Soll ich einfach den Knoten field zweimal definieren, einen für die Hauptdefinition und einen für die Referenzierung eines Feldes innerhalb eines Widget-Knotens?

Ich sah auch, gibt es die Möglichkeit, Knoten in einem XSD neu zu definieren. Sollte ich vielleicht die Hauptdefinition field definieren und sie dann als referenzierten Stilknoten für die Widgets definieren? Wie würde ich das überhaupt machen?

Haben Sie Vorschläge für das, was in diesem Szenario häufig oder beliebt ist?

Antwort

1

Sie können den XML-Schema-Schlüssel/das keyref-Konstrukt verwenden, um die möglichen Werte eines Attributs auf diejenigen zu beschränken, die an anderen Stellen in Ihrem Dokument in einer Gruppe von Attributen verwendet werden. Siehe XML Schema key/keyref - how to use them? und die Links in den Antworten zu Anwendungsbeispielen, wobei die JAXB-Besonderheiten ignoriert werden.

+0

Oh dang, genau das, was ich gesucht habe. Seltsame Sache ist W3Schools noch Eclipse XSD-Tools haben keine Erwähnung von Schlüssel/Keyref, so dass ich nie allein kam. Sieht so aus, als gäbe es einige XSD-Features. –

Verwandte Themen