用于创建和更新操作的不同XSD

用于创建和更新操作的不同XSD,xsd,soa,Xsd,Soa,考虑以下对象: <Person> <Name/> <FirstName/> <Street/> <City/> <SocialSecurityNr/> <Gender/> <Hobby/> </Person> Asume我将此对象用于创建web服务操作。调用创建操作时,必须提供除“hobby”之外的Person对象的所有字段 现在假设我还有一个更新操作。更新时

考虑以下对象:

<Person>
  <Name/>
  <FirstName/>
  <Street/>
  <City/>
  <SocialSecurityNr/>
  <Gender/>
  <Hobby/>
</Person>
Asume我将此对象用于创建web服务操作。调用创建操作时,必须提供除“hobby”之外的Person对象的所有字段 现在假设我还有一个更新操作。更新时,只有socialsecuritynumber是必需的:我不需要更新每个字段

如何在XSD中处理这个问题?您应该为创建和更新操作定义单独的XSD吗

我之所以要做出这种区分,是因为我不想在不需要的时候将不必要的字段从发送者发送给接收者。因此,我希望尽可能多地使用minOccurs=0


感觉这是一个常见的问题,但找不到任何关于它的参考资料。这真的取决于你。这两种方法我都见过

如果我想要对服务契约进行全面的描述,我将使用单独的操作,并且只要在需要时使用xsd中定义的公共数据类型即可


另一个选项是不使用minOccurs=0。这将使xsd变得更短,更灵活,但在描述服务时,也更容易理解,这比好的服务更糟糕。如果您需要将wsdl提供给某人以便将来使用您的服务,则需要在文档中对不同用例的创建/更新进行更多描述。对于开发人员来说,另一种方法更直接、更直观。

我总是使用公共结构来创建和更新。 当在XSD中声明数据承载元素时,它应该将attrivute nilable设置为true,例如:

<xsd:element name="Result" type="xsd:string" nillable="true"/>
标记存在并包含数据。可能存在空xsi:nil属性,或者该属性可能不存在

目标应用程序需要使用指定的数据更新字段

[2]

标记存在且自动关闭或不包含数据。可能存在空xsi:nil属性,或者该属性可能不存在。 目标应用程序需要将字段更新为零长度数据。例如,一个空字符串

某些应用程序可能会将数据更新为null*

[3]

标记的xsi:nil属性设置为true。它可能包含数据,也可能不包含数据,并且可能是自动关闭的,也可能不是自动关闭的。 相应字段应更新为空

[4]

xml中缺少标记

相应字段上不应出现更新

<tag>Data</tag>
<tag xsi:nil=”false”>Data</tag>
<tag xsi:nil=””>Data</tag>
<tag></tag>
<tag xsi:nil=””></tag>
<tag xsi:nil=”false”></tag>
<tag/>
<tag xsi:nil=""/>
<tag xsi:nil=”true”>Data</tag>
<tag xsi:nil=”true”></tag>
<tag xsi:nil=”true”/>