Какая хорошая практика для новой реализации в том же XML? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть веб-сервис, который я хочу реализовать новые функции.Интересно, стоит ли добавлять их в 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?

1 Ответ

0 голосов
/ 21 февраля 2019

Во-первых, в вашем новом 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 для обработки вашего нового элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...