Как написать XSD или проводимость

У меня есть требование написать или провести в XSD. Например, memberName может быть companyName, firstName, middleName или lastName. Любое имя должно существовать в XML-документе. Как и любое другое имя, оно является обязательным в XML.

<xs:element name="memberName" nillable="false">
 <xs:complexType>
  <xs:sequence>
    <xs:element name="companyName" type="xs:string"/>
    <xs:element name="firstName" type="xs:string"/>
    <xs:element name="middleName" type="xs:string"/>
    <xs:element name="lastName" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

полный XSD

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema targetNamespace="http://hidden"
    xmlns:tns="http://hidden" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="1.2.0">
    <xs:element name="accountNumber" nillable="false">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10" />
                <xs:pattern value="[0-9]" />
                <xs:whiteSpace value="collapse" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="memberName" nillable="false">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="companyName" type="xs:string"/>
          <xs:element name="firstName" type="xs:string"/>
          <xs:element name="middleName" type="xs:string"/>
          <xs:element name="lastName" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
       </xs:element>    
    <xs:element name="effectiveDate" nillable="false">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10" />
                <xs:whiteSpace value="collapse" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

Как написать ограничение или проведение ИЛИ в XSD.

Спасибо за вашу помощь.


person Community    schedule 05.01.2016    source источник
comment
Пожалуйста, покажите полный образец вашей текущей XML-схемы вместе с XML-документом, который вы хотите согласовать со схемой, и другим документом, который должен быть недействительным. Дополнительная справка: stackoverflow.com/help/mcve.   -  person Mathias Müller    schedule 05.01.2016
comment
@ Матиас Мюллер, мы разрабатываем новый веб-сервис, Потребитель будет вызывать мой сервис с этими полями. Я проверю эти значения в своей БД, создам задачу в своем приложении и отправлю сообщение об успехе или неудаче потребителю.   -  person    schedule 05.01.2016
comment
XSD или проводимость не имеет смысла. Я предлагаю вам предоставить примеры XML, которые должны быть и не должны быть действительными, чтобы помочь нам понять, что вы пытаетесь сделать. Спасибо.   -  person kjhughes    schedule 06.01.2016


Ответы (1)


Я думаю, что вы имеете в виду xs:choice, но я еще не уверен.

<xs:element name="memberName" nillable="false">
 <xs:complexType>
  <xs:choice>
    <xs:element name="companyName" type="xs:string"/>
    <xs:element name="firstName" type="xs:string"/>
    <xs:element name="middleName" type="xs:string"/>
    <xs:element name="lastName" type="xs:string"/>
  </xs:choice>
 </xs:complexType>
</xs:element>

Для этого потребуется, чтобы элемент memberName содержал ровно один из companyName, firstName, middleName или lastName.

Но я уверен, что у большинства людей есть и имя, и фамилия, так как насчет

<xs:choice maxOccurs="4">

что позволило бы использовать несколько дочерних элементов, но также и несколько одинаковых.

person Mathias Müller    schedule 05.01.2016