创建和更新操作的不同XSD



考虑以下对象:

<Person>
  <Name/>
  <FirstName/>
  <Street/>
  <City/>
  <SocialSecurityNr/>
  <Gender/>
  <Hobby/>
</Person>

Asume我使用这个对象来创建web服务操作。在调用Create操作时,必须提供Person对象的所有字段,除了'hobby'。现在假设我也有一个Update操作。当更新时,只有socialsecuritynumber是必须的:我不需要更新每个字段。

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

我想做这个区分的原因是我不想在不需要的时候将不必要的字段从发送方发送给接收方。因此,我希望尽可能使用minOccurs = 0。

感觉这是一个常见的问题,但是找不到任何关于它的参考资料

这完全取决于你。两种方法我都见过。

如果我想要对服务契约进行全面的描述,我会使用单独的操作,并且只使用通用的数据类型,这些数据类型在需要时在xsd中定义。

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

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

<xsd:element name="Result" type="xsd:string" nillable="true"/>

允许将xsi:nil属性应用于元素。

[1]

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

标签存在并包含数据。可能存在空的xsi:nil属性,或者该属性不存在。

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

[2]

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

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

*

[3]

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

标签的xsi:nil属性设置为true。它可能包含也可能不包含数据,也可能不自我关闭。相应的字段应该更新为null。

[4]

xml中缺少

标签。

对应的字段不应该发生更新

最新更新