2016-07-22 5 views
1

Ich wurde damit beauftragt, ein Schema für mein Testframework zu erstellen, das überprüft, dass ein Attribut und ein Element zusammenkommen und ein eindeutiges Paar bilden. Ich werde das ein wenig besser erklären, nachdem ich Ihnen das Beispiel-XML-Segment gezeigt habe.Beispiel für xsd: eindeutig mit mehreren verketteten Feldern?

In diesem Szenario sind die beiden Elemente, an denen wir interessiert sind, der Name testName und der Modellname. Im Idealfall ist hier der Fluss der Testfälle

  • Testname = "Test1", modelname = "Modell1" - ist Fein
  • Testname = "Test1", modelname = "Model2" - Fine ist
  • Testname = " Test2" , modelname = ‚Modell1‘ - ist Fein
  • Testname = ‚Test1‘, modelname = ‚Modell1‘ - Würde die Flagge als Duplikat

Jetzt heben, ich habe versucht, das Spiel mit diesem und habe ziemlich viel über Schemata gelernt, die ich nicht kannte, aber ich komme Ich bin ein bisschen ratlos, wie ich diesen Teil davon lösen soll.

Wenn einer von Ihnen irgendeine Anleitung hat, würde ich es sehr schätzen.

+0

Willst du sagen, dass 'Test/@ name', verkettet mit' Test/model/name', eindeutig sein muss oder dass ihre numerischen Suffixe nicht übereinstimmen können? – kjhughes

+0

@kjhughes - Sie haben Recht. Test/@ Name, verkettet mit Test/Modell/Name, sollte eindeutig sein. Die Art und Weise, in der unser Framework Tests meldet, besteht darin, die beiden verketteten Dateien als Dateinamen zu verwenden. Ich habe herausgefunden, dass es Ergebnisse überschrieben hat, weil einige Leute nicht so vorsichtig mit der Benennung ihrer Tests/Modelle waren und ich habe beschlossen, das Schema einzuführen, um es anzugehen. Entschuldigung für die Verwirrung – Roy

Antwort

1

können Sie verwenden xs:unique und mit mehreren xs:fields ihre Verkettung zu begrenzen eine einzigartige Kombination:

<xs:unique name="testNameModelNameUnique"> 
     <xs:selector xpath="Test"/> 
     <xs:field xpath="@name"/> 
     <xs:field xpath="model/name"/> 
    </xs:unique> 

Hier xs:unique in einem XSD, die XML-Validierung werden und Ihre Einschränkung erzwingen:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="Tests"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="Test" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="testNameModelNameUnique"> 
     <xs:selector xpath="Test"/> 
     <xs:field xpath="@name"/> 
     <xs:field xpath="model/name"/> 
    </xs:unique> 
    </xs:element> 
    <xs:element name="Test"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="model"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name" type="xs:string"/> 
      </xs:sequence> 
      <xs:attribute name="cad_sys" type="xs:string"/> 
      <xs:attribute name="dir" type="xs:string"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="active" type="xs:boolean"/> 
     <xs:attribute name="dll" type="xs:string"/> 
     <xs:attribute name="name" use="required" type="xs:string"/> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
Verwandte Themen