详解XML中的模式Schema
XML模式是一种用于验证XML文档的规范。在XML模式中,可以定义元素、属性和其它与文档相关的内容。XML模式通常使用XSD(XML Schema Definition)语言进行定义。
XSD基础语法
在XSD中,可以使用以下结构定义一个元素:
<xs:element name="element_name" type="data_type" />
其中,name
属性定义了元素的名称,type
属性定义了元素的数据类型。例如:
<xs:element name="product_name" type="xs:string" />
这个定义了一个名称为product_name
、数据类型为字符串类型的元素。
如果要定义一个元素包含子元素,可以使用complexType
关键字:
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="product_name" type="xs:string" />
<xs:element name="product_price" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
这个定义了一个名称为product
的元素,它包含了product_name
和product_price
两个子元素。
XSD数据类型
XSD支持多种数据类型,包括:
xs:string
:字符串类型xs:decimal
:十进制数类型xs:integer
:整数类型xs:boolean
:布尔类型xs:date
:日期类型xs:time
:时间类型xs:dateTime
:日期和时间类型
示例一:验证XML文档
下面是一个简单的XML文档示例:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<product_name>Product A</product_name>
<product_price>19.99</product_price>
</product>
<product>
<product_name>Product B</product_name>
<product_price>29.99</product_price>
</product>
</products>
我们可以使用XSD来验证这个XML文档是否符合规范。下面是一个对应的XSD定义:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="products">
<xs:complexType>
<xs:sequence>
<xs:element name="product" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="product_name" type="xs:string" />
<xs:element name="product_price" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这个XSD定义了一个名称为products
的元素,它包含了一个名称为product
的子元素,而每个子元素都包含了product_name
和product_price
两个子元素。maxOccurs
属性指定了每个product
元素的实例可以出现的最多次数。这里使用了特殊值unbounded
,表示其可以出现任意次。
我们可以使用XSD处理器(如XMLSpy)来验证这个XML文档是否符合规范。
示例二:使用XSD生成Java类
XSD可以被用于生成Java类。下面是一个XSD定义示例:
<?xml version="1.0" encoding="UTF-8"?>
<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:int"/>
<xs:element name="address">
<xs:complexType>
<xs:all>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
<xs:element name="zip" type="xs:decimal"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
使用Java的XJC工具可以将这个XSD定义转换为对应的Java类,命令如下:
xjc myschema.xsd
命令执行后,XJC工具将生成以下Java类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"age",
"address"
})
@XmlRootElement(name = "person")
public class Person {
@XmlElement(required = true)
protected String name;
protected int age;
@XmlElement(required = true)
protected Person.Address address;
// 对应内部的Address类
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"street",
"city",
"state",
"zip"
})
public static class Address {
@XmlElement(required = true)
protected String street;
@XmlElement(required = true)
protected String city;
@XmlElement(required = true)
protected String state;
protected BigDecimal zip;
// 各个属性的getter/setter方法
}
// 各个属性的getter/setter方法
}
这个Java类对应了XSD中定义的person
元素。这个类包含了一个name
字符串元素、一个age
整数元素和一个内部的Address
类,这个类又包含了一些字符串和数字元素。
我们可以在Java应用程序中使用这个类来处理XML数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解XML中的模式Schema - Python技术站