Soap 如何在XSD模式中添加采用逗号分隔字符串值的元素
我是XML模式的新手。。。 我有一个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 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>