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-request
和 callback-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
下一章:無