0

仕様自体を含む、そこにあるすべての XML-RPC の例で気づいたことの 1 つは、再帰 (param) 値を使用するスキーマの詳細な例がないことです。これらの図がなければ、XML-RPC 内で実際に何が可能であるべきかを理解するのは困難です。

仕様は次のように述べています。

<struct> は再帰的である可能性があり、任意の <value> には <struct> または以下で説明する <array> を含むその他のタイプを含めることができます。

<arrays> は再帰的である可能性があり、任意の値に <array> または上記の <struct> を含むその他のタイプを含めることができます。

それは、次のことを行うことが完全に合法であることを意味しますか?

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

これを行うことも可能ですか:

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

私は実装を作成しようとしていますが、すべての可能性と、サーバー側で誰かのスキーマをトラバースするときに何を確認する必要があるかを知る必要があります。仕様の読み方では、配列と構造体を同じようにネストできるように見えますが、それが正しいことを確認したかったのです。ありがとう!

4

2 に答える 2

1

絶対。私はXML-RPCのPerl実装を維持しており、データの任意のネスト(これは再帰よりもネストの問題です)の処理はかなり簡単でした。

あなたがあなた自身の実装に取り​​組んでいるとあなたが言うように(あなたはあなたの言語がすでに実装を持っているかどうか本当に見るべきです-確立されたプロジェクトの進行中の開発と維持に貢献する方が良いでしょう)ネストと実際の実際の再帰に関する最近の問題の1つとして、覚えておく必要があります。言語が参照をサポートしていると仮定すると、データ構造に循環参照がないように注意してください。配列または構造体に循環参照が含まれている場合の無限再帰のバグを修正する、Perl実装の新しいリビジョン(http://search.cpan.org/dist/RPC-XML )をリリースしました。

于 2009-09-05T20:17:47.223 に答える
1

はい、私には理由がわかりません。当時、私は Dave Winer によるプロトコルの開発に従い、通信に XML-RPC プロトコルを使用するクラスター コンピューティング ソリューション (分子配列データベースの検索) を設計および実装しました。複雑な構造は使用しませんでしたが、たとえば、配列内の項目は 3 つ (プリミティブ、配列、構造体) のいずれかになります。

于 2009-09-05T14:35:10.560 に答える