2016-08-15 53 views
-1

我有XMLXML模式選擇XSD XPath來節點名

<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> 

而且我需要answer任何節點名稱匹配response值。

<?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> 

我應該怎麼寫<xsd:field xpath="???" />validAnswerKey用於讀取節點名稱(「是」,「否」,而不是它們的值)?

UPD1

的真實的例子。 我有翻譯,PHP的NodeJS等的名單看起來

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

,並在另一個節點,我需要選擇這種解釋。

<interpreter_type>php</interpreter_type> 

這就是爲什麼我需要一個節點名稱,而不是價值。

但是,對於值點(。)只能用於節點值而不是在這種情況下。

回答

0

如果您的意思是每個響應都必須與其中一個答案具有相同的值,那麼我認爲您會希望給出一個字段值「。」。爲validAnswerKey。

這使得您顯示的實例無效,因爲「是」與「是!!!」不是相同的字符串。或沒有...」。

如果說每個回答都必須「匹配」一個答案,那麼您的意思是在案例摺疊後,回覆需要是答案的前綴,那麼我不認爲keyref構造會是很多幫助:它強加一個約束,即該值與某個鍵的值相同,並且在XSD中沒有「yes」和「Yes !!」的數據類型。映射到相同的值。

您可能會重新考慮您的設計,或者您可能會嘗試用XSD 1.1聲明表達您想要的約束。

+0

是的,它的節點的價值工作,但我需要節點的名稱。 我有一個解釋器列表,php,nodejs等等。它看起來像'/usr/bin/php',在另一個節點中,我需要選擇這個解釋器。 ' PHP'。 – Kirby