XML Schema中xs:attribute的form属性用于控制XSD定义的属性是否会被限定到目标命名空间,这个属性的取值和全局配置会直接影响最终XML实例中属性的命名空间归属,是XML Schema命名空间设计的重要部分。

xs:attribute form属性的基本规则
xs:attribute的form属性有两个可选取值:qualified和unqualified,同时它的取值会受到Schema根元素的attributeFormDefault全局配置影响。
- qualified:该属性会被限定到Schema的目标命名空间,XML实例中使用该属性时必须添加对应的命名空间前缀
- unqualified:该属性不会被限定到目标命名空间,属于无命名空间属性,XML实例中直接使用属性名即可
- 如果xs:attribute没有显式设置form属性,会继承
attributeFormDefault的取值,该全局属性默认值为unqualified
全局配置与局部属性的优先级
Schema根元素的attributeFormDefault是全局默认配置,而单个xs:attribute的form属性是局部配置,局部配置的优先级高于全局配置。我们可以通过下面的XSD示例来验证这个规则:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ipipp.com/ns/test"
xmlns:tns="http://ipipp.com/ns/test"
attributeFormDefault="unqualified">
<!-- 局部form为qualified,优先级高于全局的unqualified -->
<xs:attribute name="id" type="xs:string" form="qualified"/>
<!-- 没有设置form,继承全局的unqualified -->
<xs:attribute name="name" type="xs:string"/>
<xs:element name="user">
<xs:complexType>
<xs:attribute ref="tns:id"/>
<xs:attribute ref="tns:name"/>
</xs:complexType>
</xs:element>
</xs:schema>
XML实例中的命名空间表现
基于上面的XSD定义,对应的合法XML实例需要按照属性的命名空间限定规则编写:
<?xml version="1.0" encoding="UTF-8"?>
<tns:user xmlns:tns="http://ipipp.com/ns/test"
tns:id="1001"
name="张三"/>
可以看到,id属性因为设置了form="qualified",所以必须添加tns前缀,属于目标命名空间;而name属性继承全局的unqualified,不需要前缀,属于无命名空间属性。
与elementFormDefault的区别
很多开发者会混淆attributeFormDefault和elementFormDefault的作用,两者的区别如下:
| 配置项 | 作用对象 | 默认值 |
|---|---|---|
| attributeFormDefault | 所有未显式设置form的xs:attribute属性 | unqualified |
| elementFormDefault | 所有未显式设置form的xs:element元素 | unqualified |
需要注意的是,elementFormDefault不会影响xs:attribute的form取值,两者是独立的全局配置,分别控制元素和属性的默认命名空间限定规则。
使用注意事项
- 如果希望所有属性都默认限定到目标命名空间,可以在Schema根元素设置
attributeFormDefault="qualified",不需要为每个xs:attribute单独设置form属性 - 当引用的属性是其他命名空间的定义时,form属性不会影响引用属性的命名空间,只作用于当前Schema定义的属性
- 无命名空间的属性(form为unqualified)无法被其他命名空间的Schema引用,设计跨命名空间复用的Schema时建议将需要复用的属性设置为qualified
命名空间限定的核心目的是避免不同Schema中同名的元素或属性产生冲突,合理设置form属性能让XML Schema的结构更清晰,实例文档的编写更符合预期规则。
XML_Schemaxs:attributeform属性命名空间XSD属性修改时间:2026-06-17 04:09:34