XSD-10 XSD Schema 的應用場景

10 XSD Schema 的應用場景

介紹一些應用 XSD Schema 的場景;

10.1 存儲一些配置信息

如存儲班級信息

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xsd:element name="class" type="SchoolClass">
    </xsd:element>
    <xsd:complexType name="SchoolClass">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="students" type="Students"/>
        </xsd:sequence>
        <xsd:attribute name="id" use="required" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="Students">
        <xsd:sequence>
            <xsd:element maxOccurs="unbounded" name="student" type="Student"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="Student">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
        </xsd:sequence>
        <xsd:attribute name="id" use="required" type="xsd:string"/>
    </xsd:complexType>
</xsd:schema>

10.2 接口交互

接口請求的 xml 文檔模式 callback-request.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!-- Request XML -->
    <xsd:element name="callback-request" type="CallbackRequest"/>

    <xsd:complexType name="CallbackRequest">
        <xsd:choice>
            <xsd:element name="example-v1-params"      type="ExampleV1Params"/>
            <xsd:element name="example-v2-params"      type="ExampleV1Params"/>
        </xsd:choice>
        <xsd:attribute name="session-id"   type="xsd:string"  use="required"/>
        <xsd:attribute name="request-id"   type="xsd:string"  use="required"/>
        <xsd:attribute name="request-type" type="RequestEnum" use="optional"/>
        <xsd:attribute name="timeout"      type="xsd:long"    use="required"/>
    </xsd:complexType>

    <xsd:complexType name="ExampleV1Params">
        <xsd:sequence>
            <xsd:element name="child-params" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ExampleV2Params">
        <xsd:sequence>
            <xsd:element name="child-params" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:simpleType name="RequestEnum">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="v1"/>
            <xsd:enumeration value="v2"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

接口返回的 xml 文檔模式 callback-respond.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!-- Respond XML -->
    <xsd:element name="callback-respond" type="CallbackRespond"/>

    <xsd:complexType name="CallbackRespond">
        <xsd:choice>
            <xsd:element name="example-v1-respond"        type="ExampleV1Respond"/>
            <xsd:element name="example-v2-respond"        type="ExampleV2Respond"/>
        </xsd:choice>
        <xsd:attribute name="session-id" type="xsd:string" use="required"/>
        <xsd:attribute name="request-id" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="ExampleV1Respond">
        <xsd:sequence>
            <xsd:element name="child-params" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ExampleV2Respond">
        <xsd:sequence>
            <xsd:element name="child-params" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

一般地,將 callback-requestcallback-respond 分開放在不同 schema,通過 xjc 只會生成一個 ObjectFactory.java,然後通過編寫對應的 CallbackRequestXmlSerializer.java 和 CallbackRespondXmlSerializer.java 進行解析。

樣例代碼: JaxbGen.rar

引用

Spring MVC with JAXB, List response based on a Generic class

Spring MVC - set JAXB marshaller property when using @ResponseBody


上一章:XSD-9 Maven + XSD
目錄:學習 JAXB
下一章:無


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章