Soap 如何在XSD模式中添加采用逗号分隔字符串值的元素

Soap 如何在XSD模式中添加采用逗号分隔字符串值的元素,soap,wsdl,xsd,Soap,Wsdl,Xsd,我是XML模式的新手。。。 我有一个xsd架构文件:- <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.anirban.com/v1" xmlns:tns="http://www.anirban.com/v1" elementFormDefault="qualified">

我是XML模式的新手。。。 我有一个xsd架构文件:-

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.anirban.com/v1"
    xmlns:tns="http://www.anirban.com/v1" elementFormDefault="qualified">

    <complexType name="InputRequest">
        <sequence>
            <element name="Name" maxOccurs="unbounded" type="string">
            </element>
            <element name="Url" type="anyURI" maxOccurs="1" minOccurs="0">
            </element>

            <element name="Employee">
                <complexType>
                    <sequence>
                        <element name="VehicleList" maxOccurs="unbounded" type="string" />
                        <element name="EmployeeName" type="string" default="Anirban" />

                    </sequence>
                </complexType>
            </element>
        </sequence>
    </complexType>


    <complexType name="OutputResponse">
        <sequence>
            <element name="ResponseCode" type="string"></element>
        </sequence>
    </complexType>

    <element name="getInputRequest" type="tns:InputRequest"></element>

    <element name="getOutputResponse" type="tns:OutputResponse"></element>
</schema>

用于创建SOAP请求,如:-

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.anirban.com/v1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:getInputRequest>
         <!--1 or more repetitions:-->
         <v1:Name>Abc</v1:Name>
         <v1:Name>Efg</v1:Name>
         <!--Optional:-->
         <v1:Url>http://localhost:8084/test?wsdl</v1:Url>
         <v1:Employee>
            <!--1 or more repetitions:-->
            <v1:VehicleList>ee</v1:VehicleList>
            <v1:VehicleList>ff</v1:VehicleList>
            <v1:EmployeeName>Anirban</v1:EmployeeName>
         </v1:Employee>
      </v1:getInputRequest>
   </soapenv:Body>
</soapenv:Envelope>

Abc
Efg
http://localhost:8084/test?wsdl
ee
ff
阿尼尔班

现在我的问题是,我想在两者之间添加一个元素,比如:-
Ord1、Ord2、Ord3
,它将接受以逗号分隔的字符串值。。那么,如何在这两者之间添加元素顺序呢?是否可以添加一个元素,该元素将按照complexType的顺序接受逗号分隔的字符串值???请帮助…

正如helderdarocha已经指出的那样,您几乎可以肯定最好将您的元素指定为元素序列:

<v1:Order>Ord1</v1:Order>
<v1:Order>Ord2</v1:Order>
<v1:Order>Ord3</v1:Order>
这样,Orders元素可以声明为简单值的列表,并且可以根据类型(整数、日期、IDREF、NCName、您选择的regex定义的标记等)测试各个值。XSD验证器和模式感知下游软件将看到一系列简单值,而不是一个

从XSD的角度来看,将其设置为逗号分隔的列表是所有可能的解决方案中最糟糕的。XSD列表类型是空格分隔的,而不是逗号分隔的(也不是任意的正则表达式分隔的,不管世界上的Perl爱好者多么喜欢它),因此XSD验证器和下游的模式感知应用程序都不会看到一系列值;他们只会看到一个值,词法空间被一个长而复杂(可能是错误的,除非你比一般程序员更好)的正则表达式所限制。如果单个标记应该表示整数、日期或其他一些XSD简单类型,则不会对它们进行类型验证。如果要限制列表的长度,则只能通过用于验证字符串的正则表达式来实现;又一次犯错的机会


另一方面,如果单个标记没有词法约束,并且您真的坚持使用逗号分隔的列表而不是空格分隔的列表,那么您根本不需要做任何工作:只需将Orders元素声明为xsd:string。因为XSD不会对逗号做任何特殊的处理,所以不需要一个能巧妙处理逗号的模式;由于标记没有词法约束,因此模式在任何情况下都不需要执行任何操作。

要将
Orders
元素添加到哪里?如果
Orders
包含逗号分隔的字符串列表,则它包含可以用正则表达式验证的简单内容。(但是,如果您正在设计此模式,更好的办法是利用XML的结构,并对
订单的内容使用子元素)感谢您的回复。。。实际上,我想在现有元素之间的任意位置插入order元素。。我在网上搜索过,发现它需要实现为simpleType,才能得到逗号分隔的值。。我不知道如何在这些元素之间实现simpleType。。正如你提到的使用子元素,你能提供一些参考如何做到这一点。。。
<v1:Orders>Ord1 Ord2 Ord3</v1:Orders>