1

次のxmlを検証するxsdスキーマを作成しようとしています。

<results>
<row>
    <PersonID key="true">1</PersonID> 
    <FirstName>John</FirstName> 
    <Surname>Smith</Surname> 
    <LogonName>jsmith</LogonName> 
</row>
<row>
    <PersonID key="true">2</PersonID> 
    <FirstName>Steve</FirstName> 
    <Surname>Jones</Surname> 
    <LogonName>sjones</LogonName> 
</row>

結果ノードと行ノードは必須ですが、各行内のノードはオプションであり、リストにない他のノードがある場合があります。1行または多数の行が存在する可能性があります。

以下を作成しましたが、正しく検証できません。

<xs:element name="results">
<xs:complexType>
  <xs:sequence>
    <xs:element name="row" maxOccurs="unbounded" minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="PersonID" minOccurs="0">
            <xs:complexType>
              <xs:simpleContent>
                <xs:extension base="xs:byte">
                  <xs:attribute type="xs:string" name="key" use="optional"/>
                </xs:extension>
              </xs:simpleContent>
            </xs:complexType>
          </xs:element>
          <xs:choice minOccurs="0">
            <xs:element type="xs:string" name="FirstName" minOccurs="0"/>
            <xs:element type="xs:string" name="Surname" minOccurs="0"/>
            <xs:element type="xs:string" name="LogonName" minOccurs="0"/>
            <xs:element type="xs:string" name="GroupName" minOccurs="0"/>
          </xs:choice>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

ありがとう。

4

1 に答える 1

0

などが最大で1回発生する可能性がある場合PersonID、およびその特定の順序で発生する可能性がある場合は、次のことを試してください。FirstName

<xs:element name="results">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="row" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PersonID" minOccurs="0">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:byte">
                    <xs:attribute type="xs:string" name="key" use="optional"/>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element type="xs:string" name="FirstName" minOccurs="0"/>
            <xs:element type="xs:string" name="Surname" minOccurs="0"/>
            <xs:element type="xs:string" name="LogonName" minOccurs="0"/>
            <xs:element type="xs:string" name="GroupName" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

(基本的にはchoice要素をドロップするだけです)。PersonIDなどFirstNameが最大で1回発生する可能性があるが、任意の順序で使用できる場合all

<xs:element name="results">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="row" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element name="PersonID" minOccurs="0">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:byte">
                    <xs:attribute type="xs:string" name="key" use="optional"/>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element type="xs:string" name="FirstName" minOccurs="0"/>
            <xs:element type="xs:string" name="Surname" minOccurs="0"/>
            <xs:element type="xs:string" name="LogonName" minOccurs="0"/>
            <xs:element type="xs:string" name="GroupName" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

内で要素が発生する可能性があることがわからない場合は、row次を使用できます。

<xs:element name="results">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="row" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

内のすべての要素を受け入れますrow

于 2013-01-15T13:02:44.383 に答える