XML 處理前需驗證,主要兩途徑:DTD(文件類型定義)與 Schema。Schema 同為 XML 文件,表現優於 DTD。本文採用 XDR Schema(menu.xdr)。
<?xml version="1.0" encoding="UTF-8"?>
<Schema name="menus" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<description>menus schema used to validate menu.xml</description>
<ElementType name="menu" model="closed" content="empty">
<AttributeType name="id" dt:type="string" required="yes"/>
<attribute type="id"/>
<element name="topmenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>
</ElementType>
<ElementType name="topmenu" model="closed" content="empty">
<AttributeType name="id" dt:type="string" required="yes"/>
<AttributeType name="text" dt:type="string" required="yes"/>
<AttributeType name="linkurl" dt:type="string" required="yes"/>
<AttributeType name="isparent" dt:type="string" required="yes"/>
<attribute type="id"/>
<attribute type="text"/>
<attribute type="linkurl"/>
<attribute type="isparent"/>
<element name="submenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>
</ElementType>
<ElementType name="submenu" model="closed" content="empty">
<AttributeType name="id" dt:type="string" required="yes"/>
<AttributeType name="text" dt:type="string" required="yes"/>
<AttributeType name="linkurl" dt:type="string" required="yes"/>
<AttributeType name="isparent" dt:type="string" required="yes"/>
<attribute type="id"/>
<attribute type="text"/>
<attribute type="linkurl"/>
<attribute type="isparent"/>
<element name="childrenmenu" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>
</ElementType>
<ElementType name="childrenmenu" model="closed" content="empty">
<AttributeType name="id" dt:type="string" required="yes"/>
<AttributeType name="text" dt:type="string" required="yes"/>
<AttributeType name="linkurl" dt:type="string" required="yes"/>
<AttributeType name="isparent" dt:type="string" required="yes"/>
<attribute type="id"/>
<attribute type="text"/>
<attribute type="linkurl"/>
<attribute type="isparent"/>
<element name="menuitem" model="closed" minOccurs="0" maxOccurs="*" content="empty"/>
</ElementType>
<ElementType name="menuitem" model="closed" content="empty">
<AttributeType name="id" dt:type="string" required="yes"/>
<AttributeType name="text" dt:type="string" required="yes"/>
<attribute type="id"/>
<attribute type="text"/>
</ElementType>
</Schema>
ElementType 定義元素,AttributeType 定義屬性。model="closed" 表示不允許額外屬性/子元素;content="empty" 表示無文字內容。minOccurs/maxOccurs 控制出現次數。element、attribute 實例化引用,使用方式類似 HTML 標籤。熟悉 HTML 的讀者應能快速理解上述結構。