我有一个要实现新功能的Web服务。我想知道是否将它们添加到默认XML是一种好习惯,还是应该为此消耗量创建新方法?
一个例子:我有一个方法可以返回产品的特征,颜色,价格,尺寸等。我想实现一个新功能,该功能还将在多个网站上返回价格。实际的XML:
<Product>
<Name> IPhone X </Name>
<Color> Black </Color>
<Type> Smartphone </Type>
</Product>
新XML:
<Product>
<Name> IPhone X </Name>
<Color> Black </Color>
<PriceInSites>
<Site> www.apple.com </Site>
<Price> 1000.00 </Price>
<PriceInSites>
<Type> Smartphone </Type>
</Product>
鉴于多个客户端已经在不使用该XML块的情况下使用该实现-我应该在单独的方法中使用它吗?
使用相同XML的新实现有什么好的做法?
答案 0 :(得分:0)
首先,在新的XML中,关闭的PriceInSites标记应看起来像这样</PriceInSites>
,而不是这个<PriceInSites>
。其次,答案取决于客户愿意为使用新XML付出多少工作。我看不到您的XML模式文档,因此假设您的原始模式看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" Smartphone "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Product">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name"/>
<xs:element ref="Color"/>
<xs:element ref="Type"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" IPhone X "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" Black "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
然后,您的新XML模式应使新插入的标记为可选:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" Smartphone "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Site">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" www.apple.com "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Product">
<xs:complexType>
<xs:sequence>
<xs:element ref="Name"/>
<xs:element ref="Color"/>
<xs:element ref="PriceInSites" minOccurs="0"/>
<xs:element ref="Type"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PriceInSites">
<xs:complexType>
<xs:sequence>
<xs:element ref="Site"/>
<xs:element ref="Price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Price">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:enumeration value="1000.0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" IPhone X "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Color">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=" Black "/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
...通过将minOccurs设置为零。仅当您希望继续支持不愿意或无法更新其XML定义以处理新元素的现有XML模式使用者时,才应该这样做。