2016-05-21 8 views
1

Ich habe diese XML-Datei:Kann XSD 1.0 Attribute basierend auf dem Typ eines Elements erfordern?

<?xml version="1.0" encoding="UTF-8"?> 
<vehicle_list> 
    <vehicle id="v001"> 
     <type registration="ABC-XYZ" year="2010">car</type> 
     <spent_fuel>8</spent_fuel> 
     <constructor>XPTO</constructor> 
    </vehicle> 
    <vehicle id="v002"> 
     <type>bike</type> 
     <spent_fuel>0</spent_fuel> 
     <constructor>XIMA</constructor> 
    </vehicle> 
    <vehicle id="v003"> 
     <type>boat</type> 
     <spent_fuel>40</spent_fuel> 
     <constructor>AnyBoat</constructor> 
    </vehicle> 
</vehicle_list> 

Jetzt brauche ich (für Studienzwecke) eine XSD zu machen, in dem ich Aufzählung verwenden, um Beschränkung der Art von Fahrzeugen (Auto, Fahrrad und Boot) zu machen und definiert die Regel, dass, wenn der Typ "Auto" ist, ich zwei Attribute haben muss: Registrierung und Jahr.

Wie soll ich das schaffen?

Ich habe gelesen, kann aber nichts finden noch, dass mir helfen, die Lösung zu finden.

Ich (XSD nicht 1.1) auf XSD 1.0 beschränkt.

+0

Die Frage ist, dass ich nicht XSD 1.1, nur XSD 1.0 verwenden kann. Es scheint, dass das nicht möglich ist. So weit ich in diesen Fragen lesen konnte. – eclypz

Antwort

1

XSD 1.0 kann eine Einschränkung nicht ausdrücken auf dem Wert eines Elements basiert. Dazu benötigen Sie XSD 1.1-Assertions, und Sie haben in einem Kommentar angegeben, dass Sie nur XSD 1.0 verwenden können.

Wirklich, aber wenn Sie Ihr XML-Design zu beheben, müssen Sie nicht XSD 1.1. Anstatt eine generische vehicle zu haben, die eine weitere Spezifikation über ein type Element erfordert, fördern Sie einfach den type Elementwert, um selbst ein richtiges Element zu sein.

Nämlich:

<?xml version="1.0" encoding="UTF-8"?> 
<vehicle_list> 
    <car id="v001" registration="ABC-XYZ" year="2010"> 
     <spent_fuel>8</spent_fuel> 
     <constructor>XPTO</constructor> 
    </car> 
    <bike id="v002"> 
     <spent_fuel>0</spent_fuel> 
     <constructor>XIMA</constructor> 
    </bike> 
    <boat id="v003"> 
     <spent_fuel>40</spent_fuel> 
     <constructor>AnyBoat</constructor> 
    </boat> 
</vehicle_list> 

Es ist dann trivial ein XSD 1.0 für dieses XML-Design zu schreiben.

+0

Danke, mit diesem Update auf dem XML und mit ich es geschafft, die XSD-Datei zu schreiben. Noch einmal vielen Dank für die Hilfe. – eclypz