2016-08-15 4 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> 

И мне нужно, чтобы соответствовать response значения с любым именем узла в answer.

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

Вот почему мне нужно имя с узла, вместо значения.

Но да, для значения dot (.) Можно использовать только для значение узла и не в этом случае.

ответ

0

Если вы имеете в виду, что каждый отклик должен иметь то же значение, что и один из ответов, я думаю, вы хотели бы указать значение поля «.». для validAnswerKey.

Это делает экземпляр, который вы показываете недействительным, так как «да» не является той же строкой, что и «Да !!!». или «Нет ...».

Если, сказав, что каждый ответ должен «соответствовать» ответу, вы имеете в виду, что после разборки кода ответ должен быть префиксом ответа, тогда я не думаю, что конструкция keyref будет много помощи: он налагает ограничение на то, что значение будет таким же, как значение ключа, и в XSD нет типа данных, для которого «да» и «да!» сопоставить одно значение.

Вы можете подумать о своем дизайне, или можете попытаться выразить ограничение, которое вы хотите, с утверждением XSD 1.1.

+0

Да, со значением узла он работает, но мне нужно имя узла. У меня есть список интерпретаторов, php, nodejs и т. Д. Он выглядит как '<переводчики>/usr/bin/php', а в другом узле мне нужно выбрать этот интерпретатор. ' PHP'. – Kirby

Смежные вопросы