2009-09-05 5 views
0

Une chose que j'ai remarquée avec tous les exemples XML-RPC, y compris la spécification elle-même, est qu'il n'y a pas d'exemple détaillé de schéma utilisant des valeurs (param) récursives . Il est difficile de comprendre ce qui devrait être possible dans XML-RPC sans ces illustrations, et je me demande si quelqu'un pourrait m'aider à mieux comprendre.Comprendre les possibilités des paramètres XML-RPC, notamment la récursivité des valeurs

La spécification indique:

<struct> s peut être récursif, tout <valeur> peut contenir un <struct> ou tout autre type , comprenant un réseau < >, décrit ci-dessous.

<matrices> s peuvent être récursive, toute valeur peut contenir un tableau < > ou tout autre type , y compris un <struct>, décrit ci-dessus .

Est-ce que cela veut dire qu'il est parfaitement légal pour effectuer les opérations suivantes:

<?xml version="1.0"?> 
<methodCall> 
    <methodName>examples.getStateName</methodName> 
    <params> 
     <param> 
      <value> 
       <struct> 
        <member> 
         <name>lowerBound</name> 
         <value> 
          <struct> 
           <member> 
            <name>lowerBound</name> 
            <value><i4>18</i4></value> 
           </member> 
           <member> 
            <name>upperBound</name> 
            <value><i4>139</i4></value> 
           </member> 
          </struct> 
         </value> 
        </member> 
        <member> 
         <name>upperBound</name> 
         <value><i4>139</i4></value> 
        </member> 
       </struct> 
      </value> 
     </param> 
    </params> 
</methodCall> 

Est-il possible de faire aussi ceci:

<?xml version="1.0"?> 
<methodCall> 
    <methodName>examples.getStateName</methodName> 
    <params> 
     <param> 
      <value> 
       <array> 
        <data> 
         <value><i4>12</i4></value> 
         <value> 
          <struct> 
           <member> 
            <name>lowerBound</name> 
            <value> 
             <struct> 
              <member> 
               <name>lowerBound</name> 
               <value><i4>18</i4></value> 
              </member> 
              <member> 
               <name>upperBound</name> 
               <value><i4>139</i4></value> 
              </member> 
             </struct> 
            </value> 
           </member> 
           <member> 
            <name>upperBound</name> 
            <value><i4>139</i4></value> 
           </member> 
          </struct> 
         </value> 
         <value><boolean>0</boolean></value> 
         <value><i4>-31</i4></value> 
        </data> 
       </array> 
      </value> 
     </param> 
    </params> 
</methodCall> 

Je suis en train d'écrire une implémentation et je besoin de connaître toutes les possibilités, et ce qu'il faut vérifier lors de la traversée du schéma de quelqu'un sur le côté serveur. Avec la façon dont la spécification se lit, il semble que vous pouvez imbriquer des tableaux et des structures de façon interchangeable, mais je voulais vérifier que c'est vrai. Merci!

Répondre

1

Absolument. Je maintiens une implémentation Perl de XML-RPC, et manipule l'imbrication arbitraire des données (ceci est plus une question de imbriquant que c'est recursion) était assez simple. Comme vous mentionnez que vous travaillez sur une implémentation de votre choix (bien que vous devriez vraiment vérifier si votre langage a déjà une implémentation), il vaudrait mieux contribuer au développement continu et à la maintenance d'un projet établi), il y a un problème récent que j'ai eu avec l'imbrication et la réelle, réelle, récursive que vous pourriez garder à l'esprit: En supposant que votre langue supporte les références, faites attention à ne pas avoir de références cycliques dans vos structures de données. Je viens de publier un nouveau rev ​​de mon implémentation Perl (http://search.cpan.org/dist/RPC-XML) qui corrige un bug de récurrence infinie quand un tableau ou une structure contient des références cycliques.

1

Oui, je ne vois pas pourquoi. J'ai suivi le développement du protocole de Dave Winer à l'époque et j'ai également conçu et mis en œuvre une solution de calcul en cluster (recherche dans des bases de données de séquences moléculaires) qui utilisait le protocole XML-RPC pour la communication. Il n'a pas utilisé de structures complexes , mais par ex. un élément d'un tableau peut être l'un des 3 (primitive, tableau, struct).

Questions connexes