XML和Schema的命名空间用于避免元素和属性名称冲突,同时明确XML文档的结构约束来源。下面通过具体实例展示命名空间的实际使用方式。

Schema定义示例
首先编写一个带有目标命名空间的Schema文件,用于约束用户信息的XML结构。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ippipp.com/user"
xmlns:user="http://www.ippipp.com/user"
elementFormDefault="qualified">
<!-- 定义用户根元素 -->
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<!-- 用户名称元素 -->
<xs:element name="name" type="xs:string"/>
<!-- 用户年龄元素 -->
<xs:element name="age" type="xs:int"/>
</xs:sequence>
<!-- 用户ID属性 -->
<xs:attribute name="id" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
上述Schema中,targetNamespace定义了该Schema约束的命名空间为http://www.ipipp.com/user,elementFormDefault="qualified"表示局部定义的元素也需要使用命名空间前缀。
带自定义命名空间的XML示例
接下来编写符合上述Schema约束的XML文件,使用自定义前缀引用命名空间。
<?xml version="1.0" encoding="UTF-8"?>
<user:user xmlns:user="http://www.ipipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ipipp.com/user user.xsd"
id="1001">
<user:name>张三</user:name>
<user:age>25</user:age>
</user:user>
这里xmlns:user声明了user前缀对应Schema中定义的命名空间,xsi:schemaLocation指定了命名空间对应的Schema文件位置,所有自定义元素都需要加上user前缀。
默认命名空间的XML示例
如果不想使用前缀,可以设置默认命名空间,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<user xmlns="http://www.ipipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ipipp.com/user user.xsd"
id="1002">
<name>李四</name>
<age>30</age>
</user>
默认命名空间下,根元素及其子元素默认都属于声明的命名空间,不需要额外添加前缀,代码更简洁。
命名空间使用注意事项
- 命名空间的值通常是唯一的URI,不需要对应实际可访问的地址,仅作为唯一标识使用
- Schema中
targetNamespace的值需要和XML中声明的命名空间值完全一致,否则校验会失败 - 如果XML中引用了多个不同命名空间的元素,需要为每个命名空间声明不同的前缀
校验代码示例
使用Java代码校验XML是否符合Schema约束的示例如下:
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.File;
public class XmlValidateDemo {
public static void main(String[] args) {
try {
// 创建Schema工厂
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// 加载Schema文件
Schema schema = factory.newSchema(new File("user.xsd"));
// 创建校验器
Validator validator = schema.newValidator();
// 校验XML文件
validator.validate(new StreamSource(new File("user.xml")));
System.out.println("XML校验通过");
} catch (Exception e) {
System.out.println("XML校验失败:" + e.getMessage());
}
}
}
XMLSchema命名空间XML_schema修改时间:2026-07-02 09:18:26