2

リストの要素がいくつかのテキスト ノードでソートされて表示される必要があることを XML スキーマで指定する方法はありますか?

例えば:

次の xml が有効な xsd を作成したいと考えています。

<root>
    <Users>
        <User>
            <Id>1</Id>
            <Username>lsuarez</Username>
        </User>
        <User>
            <Id>3</Id>
            <Username>dforlan</Username>
        </User>
        <User>
            <Id>7</Id>
            <Username>ecavanni</Username>
        </User>
    </Users>
</root>

しかし、以下はそうではありません:

<root>
    <Users>
        <User>
            <Id>7</Id>
            <Username>ecavanni</Username>
        </User>
        <User>
            <Id>1</Id>
            <Username>lsuarez</Username>
        </User>
        <User>
            <Id>3</Id>
            <Username>dforlan</Username>
        </User>
    </Users>
</root>

つまり、コレクション内の要素は User.Id でソートされて表示されます。

4

2 に答える 2

5

MS-McQ の回答に追加: 特に XSD 1.1 では、フォームのユーザー要素の複合型に関するアサーションが必要です。

test="every $u in User satisfies not($u/Id le $u/preceding-sibling::User[1]/Id)"

ノート:

  1. アサーションは、アサーションが表示される要素をルートとするサブツリーに関するアサーションであり、そのサブツリーの外部のデータにはアクセスできないため、個々のユーザー要素にアサーションを設定することはできません

  2. 否定形 not(a le b) を意図的に使用しました。これは最初の要素も含めてすべての要素に当てはまるためです

  3. XSD 1.1 プロセッサとして Saxon を使用する場合、「すべてのユーザーが c を満たしている」という形式のアサーションは、アサーションが失敗した場合に、どの特定のユーザーが条件を満たさなかったのかをエラー メッセージが示すという意味で最適化されます。

于 2013-06-28T08:17:07.480 に答える