1

xsd に xs:unique を記述して、コンテナとリスト オブジェクトの名前を一意に制限しようとしていますが、機能しませんでした。手伝ってくれる?

詳細はこちら

私のオブジェクト構造は次のツリーのようなものです。

App 
  |
  ---container
        |
         --list
              |
               ---container
                     |
                     --list

各「コンテナ」は 0 個以上の「リスト」を持つことができ、各「リスト」は 0 個以上の「コンテナ」を持つことができます。リストとコンテナの両方に「name」属性とその他の異なる属性があります。インスタンス全体のコンテナとリストの両方で「名前」が一意であることを制限したいと思います。一意のセレクタ xpath はどのように記述すればよいですか? これがスキーマです。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my_app="http://www.cisco.com/myapp" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="app">
    <xs:annotation>
        <xs:documentation>Comment describing your root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="container" type="containerType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:unique name="uniquename">
        <xs:selector xpath=""/>
        <xs:field xpath="@name"/>
    </xs:unique>
</xs:element>
<xs:complexType name="listType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="container" type="containerType"/>
    </xs:sequence>
    <xs:attribute name="name"/>
</xs:complexType>
<xs:complexType name="containerType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="list" type="listType"/>
    </xs:sequence>
    <xs:attribute name="name"/>
    </xs:complexType>
</xs:schema>
4

2 に答える 2

0

CMSperberg-McQueen ほぼ正しい。制限された XPath 構文の問題 ( XSD 1.0 Structuresのセクション 3.11.16 に見られるように) は、あなたの場合、. で始まる必要があることです。(ドット)。

したがって、正しい解決策は

    <xs:selector xpath=".//container|.//list"/>

@CMSperberg-McQueenも、空白は合法であり、問​​題を引き起こすべきではないと述べています。ストック Java および .NET バリデーターに上記の問題 (空白の有無にかかわらず) がないことを確認します。以下の XML は、任意のレベルで name 属性の値を複製すると無効になります。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my_app="http://www.cisco.com/myapp">
    <container name="anySimpleType1">
        <list name="anySimpleType2">
            <container name="anySimpleType3">
                <list name="anySimpleType4">
                    <container name="anySimpleType5">
                        <list name="anySimpleType6"/>
                        <list name="anySimpleType7"/>
                    </container>
                    <container name="anySimpleType8">
                        <list name="anySimpleType9"/>
                        <list name="anySimpleType10"/>
                    </container>
                </list>
                <list name="anySimpleType11">
                    <container name="anySimpleType12">
                        <list name="anySimpleType13"/>
                        <list name="anySimpleType14"/>
                    </container>
                </list>
            </container>
            <container name="anySimpleType16">
                <list name="anySimpleType17">
                    <container name="anySimpleType18">
                        <list name="anySimpleType19"/>
                        <list name="anySimpleType20"/>
                    </container>
                </list>
            </container>
        </list>
    </container>
</app>
于 2012-10-31T22:37:16.887 に答える
0

探していると思います

<xs:selector xpath="//container | //list"/>
于 2012-10-18T21:50:50.527 に答える