2016-08-15 1 views
-1

Ich habe XMLXML-Schema-Selektor xsd XPath-Knotennamen

<survey xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="a2.xsd"> 
    <question> 
     <answer> 
      <yes>Yes!!!</yes> 
      <no>No...</no> 
     </answer> 
     <response>yes</response> 
     <response>no</response> 
    </question> 
</survey> 

Und ich brauche response Wert mit jedem Knotennamen in answer übereinstimmen.

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="survey"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="question"> 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="answer"> 
           <xsd:complexType> 
            <xsd:sequence> 
             <xsd:element name="yes" type="xsd:string" /> 
             <xsd:element name="no" type="xsd:string" /> 
            </xsd:sequence> 
           </xsd:complexType> 
          </xsd:element> 
          <xsd:element name="response" maxOccurs="unbounded" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 

        <xsd:keyref name="responseValidAnswerKeyRef" refer="validAnswerKey"> 
         <xsd:selector xpath=".//response" /> 
         <xsd:field xpath="." /> 
        </xsd:keyref> 
        <xsd:key name="validAnswerKey"> 
         <xsd:selector xpath=".//answer/*" /> 
         <xsd:field xpath="???" /> 
        </xsd:key> 
       </xsd:element> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Was soll ich in <xsd:field xpath="???" /> innerhalb validAnswerKey schreiben für Knotennamen zu holen („ja“, „nein“ lautet, keine Werte von ihnen)?

UPD1

Das eigentliche Beispiel. Ich habe Liste von Dolmetschern, php, NodeJS usw. Es sieht aus wie

<interpreters> 
    <php>/usr/bin/php</php> 
    <nodejs>/usr/bin/node</nodejs> 
</interpreters> 

und in dem anderen Knoten muss ich diese Interpreter wählen.

<interpreter_type>php</interpreter_type> 

Deshalb habe ich einen Knotennamen benötigen, stattdessen Wert.

Aber ja, für den Wert Punkt (.) Kann nur für Knotenwert und nicht in diesem Fall verwendet werden.

Antwort

0

Wenn Sie meinen, dass jede Antwort den gleichen Wert wie eine der Antworten haben muss, würde ich Ihnen den Feldwert "." für validAnswerKey.

Das macht die angezeigte Instanz ungültig, da "ja" nicht die gleiche Zeichenfolge wie "Ja !!!" oder Nein...".

Wenn Sie sagen, dass jede Antwort eine Antwort "übereinstimmen muss", meinen Sie, dass nach Antwortfaltung die Antwort ein Präfix der Antwort sein muss, dann denke ich nicht, dass das keyref Konstrukt sein wird Viel hilfreich: Es wird eine Einschränkung auferlegt, dass der Wert dem Wert eines Schlüssels entspricht, und es gibt keinen Datentyp in XSD, für den "Ja" und "Ja !!" map auf den gleichen Wert.

Sie könnten Ihr Design überdenken, oder Sie könnten versuchen, die gewünschte Einschränkung mit einer XSD 1.1-Assertion auszudrücken.

+0

Ja, mit dem Wert des Knotens funktioniert es, aber ich brauche den Namen des Knotens. Ich habe eine Liste von Interpretern, PHP, Nodejs, etc. Es sieht aus wie '/usr/bin/php' und in dem anderen Knoten muss ich diesen Interpreter wählen. ' php'. – Kirby