在XML Schema(XSD)里,如果想让某个XML元素必须带有某属性,就要用到xs:attribute上的use="required"。它告诉校验器:这个属性不能少,否则XML无效。理解它可以帮你写出更严格的接口约定文件。

一、xs:attribute与use属性基础
xs:attribute用来在复杂类型中声明属性。它的use属性有三个可选值:optional(默认,可有可无)、required(必须出现)、prohibited(禁止出现)。当我们写use="required"时,就定义了必选属性。
1.1 基本语法位置
xs:attribute必须放在xs:complexType内部,通常紧跟在xs:sequence或xs:simpleContent之后。
二、最小可运行示例
下面给出一个完整的XSD片段,要求book元素必须有isbn属性:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
</xs:sequence>
<xs:attribute name="isbn" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
对应的合法XML应当写成:
<book isbn="9787111111111"> <title>示例图书</title> </book>
2.1 校验失败的情况
如果去掉isbn属性,大多数校验工具会报类似“元素book缺少必选属性isbn”的错误。
三、required与默认值的区别
有人会问:用default给属性默认值,是不是也算必选?不是。default只在没有写属性时补值,属性本身仍可省略;而required是强制出现,不写就非法。
| 设置方式 | 属性可省略吗 | 效果 |
|---|---|---|
| use="required" | 不可省略 | 校验时必须有该属性 |
| default="x" | 可省略 | 省略时取默认值x |
四、在扩展类型中使用
当通过xs:extension扩展基类型时,也可以在派生类型里追加必选属性:
<xs:complexType name="base">
<xs:sequence>
<xs:element name="id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="derived">
<xs:complexContent>
<xs:extension base="base">
<xs:attribute name="token" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
这样derived类型的实例既要满足基类结构,也必须带上token属性。
五、小结
用xs:attribute的use="required"可以清晰声明必选属性,是XSD约束XML质量的重要手段。写Schema时把它放在complexType内,并注意和default区分,就能减少数据格式隐患。
XSDxs:attributeuse_required修改时间:2026-07-26 15:24:21