Вложенные XML и XML - определение схемы - PullRequest
1 голос
/ 10 апреля 2020

Я хочу определить схему XML для XML представления данных заказа на покупку.

См. Следующие требования

  • Представление заказа XML должно содержать идентификатор заказа, описание, дату запроса и много строк
  • Каждый элемент позиции должен содержать книгу, количество и цену. Цена (то есть цена за книгу) должна быть ограничена значениями, превышающими 0
  • Каждая книга должна содержать идентификатор книги, название книги, жанр, дату публикации sh и множество авторов. Жанр должен быть ограничен так, чтобы он мог содержать только следующие значения: {фантастика, тайна, триллер, драма}
  • Каждый автор должен содержать биографию, фамилию, имя и необязательное псевдоним.

Критерии оценки

  • допускает много позиций
  • позволяет многим авторам книги и иметь ДОПОЛНИТЕЛЬНОЕ псевдоним
  • позволяет указывать цену и ограничивает значения больше 0
  • позволяет указывать жанр, но ограничивает список значений ТОЛЬКО тем, что указано выше. Пожалуйста, кто-нибудь, помогите мне определить XML определение для этого типа вложенных требований.

вот мой код

XML

<?xml version="1.0" encoding="UTF-8" ?>

<orders>
    <order id="1">
        <description>first order of the day</description>
        <req_date>9-4-2020</req_date>
        <line_items>
            <book>
                <id>1</id>
                <name>Book1</name>
                <publish_date>12-2-2010</publish_date>
                <genre>science-fiction</genre>
                <authors>
                    <author id="120">
                        <bio> description about author120</bio>
                        <first_name>George</first_name>
                        <last_name>Smith</last_name>
                        <pen_name>pen name </pen_name>
                    </author>
                    <author id="122">
                        <bio> description about author122</bio>
                        <first_name>George</first_name>
                        <last_name>Smith</last_name>
                    </author>
                </authors>
            </book>
            <book>
                <id>1</id>
                <name>Book2</name>
                <publish_date>12-2-2010</publish_date>
                <genre>science-fiction</genre>
                <authors>
                    <author id="120">
                        <bio> description about author120</bio>
                        <first_name>George</first_name>
                        <last_name>Smith</last_name>
                        <pen_name>pen name </pen_name>
                    </author>
                </authors>
            </book>
            <quantity>1</quantity>
            <price>20</price>
        </line_items>
    </order>
</orders>

XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="orders">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="order">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element type="xs:string" name="description" />
                            <xs:element type="xs:string" name="req_date" />
                            <!-- criteria 1 -->
                            <xs:element name="line_items" minOccurs="1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="book" maxOccurs="unbounded" minOccurs="0">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element type="xs:byte" name="id" />
                                                    <xs:element type="xs:string" name="name" />
                                                    <xs:element type="xs:string" name="publish_date" />
                                                    <xs:element name="genre" >
                                                        <xs:simpleType>
                                                            <xs:restriction base="xs:string">
                                                                <xs:enumeration value="science-fiction"/>
                                                                <xs:enumeration value="mystery" />
                                                                <xs:enumeration value="thriller" />
                                                                <xs:enumeration value="drama" />

                                                            </xs:restriction>
                                                        </xs:simpleType>
                                                    </xs:element>
                                                    <!-- criteria 2 -->
                                                    <xs:element name="authors" minOccurs="1" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="author" maxOccurs="unbounded" minOccurs="0">
                                                                    <xs:complexType>
                                                                        <xs:sequence>
                                                                            <xs:element type="xs:string" name="bio" />
                                                                            <xs:element type="xs:string" name="first_name" />
                                                                            <xs:element type="xs:string" name="last_name" />
                                                                            <!-- make a pen name optional -->
                                                                            <xs:element type="xs:string" name="pen_name" minOccurs="0" />
                                                                        </xs:sequence>
                                                                        <xs:attribute type="xs:byte" name="id" use="optional" />
                                                                    </xs:complexType>
                                                                </xs:element>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element type="xs:byte" name="quantity" />
                                        <!-- price criteria -->
                                        <xs:element name="price">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:integer">
                                                <xs:minInclusive value="0"/>
                                            </xs:restriction>
                                        </xs:simpleType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:byte" name="id" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Подскажите, если мой подход работает? и подскажите, если я что-то упустил?

...