一、XML Schema 簡介
XML Schema(XSD,全稱 XML Schema Definition)是用于定義 XML 文檔結構、數據類型和數據約束的標準方式。它比 DTD 更加強大,支持數據類型、默認值、命名空間等,是企業級 XML 應用推薦的驗證方式。
二、XSD 與 DTD 的對比
特性 | DTD | XSD (XML Schema) |
---|---|---|
語法格式 | SGML 風格 | XML 本身 |
數據類型支持 | 無 | 強類型(string、int 等) |
命名空間支持 | 不支持 | 支持 |
可擴展性 | 較差 | 很好 |
可讀性 | 一般 | 較好(XML 結構) |
三、XSD 應用場景
- 校驗 XML 配置文件格式
- 定義 Web 服務數據結構(如 SOAP)
- 系統間數據交換(如訂單、票據、接口返回值)
- 配合 JAXB/JAXP 等框架生成 Java 實體類
四、編輯和驗證工具
工具 | 功能 |
---|---|
VSCode + XML 插件 | 支持 XSD 自動補全和驗證 |
Oxygen XML Editor | 商業級 XML/XSD 編輯器 |
XMLSpy | 專業 XML/XSD 建模工具 |
xmllint | 命令行驗證工具 |
五、XSD 安裝與配置(以 VSCode 為例)
- 安裝 VSCode:https://code.visualstudio.com/
- 安裝插件:
XML Language Support
XML Tools
- 在
settings.json
中配置 XSD schema path(可選) - 保存 XML 文件時自動觸發校驗
六、XML Schema 示例
示例 XML (person.xml
)
<?xml version="1.0"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="person.xsd"><name>小奇</name><age>25</age>
</person>
示例 XSD (person.xsd
)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="person"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:integer"/></xs:sequence></xs:complexType></xs:element>
</xs:schema>
七、常用數據類型
xs:string
xs:integer
xs:boolean
xs:date
xs:decimal
xs:ID
、xs:IDREF
八、常用約束示例
<xs:element name="phone"><xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="\d{11}"/></xs:restriction></xs:simpleType>
</xs:element>
<xs:element name="gender"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="男"/><xs:enumeration value="女"/></xs:restriction></xs:simpleType>
</xs:element>
九、命名空間支持
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.com/person"xmlns="http://www.example.com/person"elementFormDefault="qualified">
十、Java 中使用 XSD 校驗
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("person.xsd"));Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File("person.xml")));
十一、命令行校驗
使用 xmllint
工具:
xmllint --noout --schema person.xsd person.xml
十二、常見問題
Q1: 報錯“Element not allowed here”?
- 元素順序與定義不一致;
- 子元素缺失;
- 命名空間未匹配或未聲明。
Q2: VSCode 不識別 XSD?
- 確保安裝 XML 插件;
- 檢查文件引用路徑是否正確;
- 是否缺少
xsi:noNamespaceSchemaLocation
。
十三、學習資源推薦
- W3School XSD 教程
- MDN XML Schema
- Oxygen XML 編輯器
- B站搜索“小奇Java面試”獲取 XSD 教程視頻
本文由“小奇Java面試”原創發布,轉載請注明出處。
可以搜索【小奇JAVA面試】第一時間閱讀,回復【資料】獲取福利,回復【項目】獲取項目源碼,回復【簡歷模板】獲取簡歷模板,回復【學習路線圖】獲取學習路線圖。