XSD 属性

XSD 中「属性」(attribute)最全、最实用的总结

—— 90% 项目只用下面这几招就够了

1. 属性 vs 元素 快速对比(先搞清楚什么时候用属性)

场景推荐用「属性」推荐用「元素」
简单、元数据、标识符Yes(id、code、status、type、version)No
内容本身是主要数据NoYes(name、price、description)
需要排序、子结构NoYes
可能为空或有多个值NoYes(多电话、多邮箱)
企业规范 / Web Service绝大多数属性都写成 attribute业务数据几乎都用 element

2. 最常用的 6 种属性写法(背会这 6 种就无敌)

写法XSD 示例对应合法 XML说明
1. 必填属性(最常见)<xs:attribute name="id" type="xs:string" use="required"/><book id="B001">不写就验证失败
2. 可选属性<xs:attribute name="status" type="xs:string" use="optional"/>可有可无默认就是 optional,可省略
3. 带默认值<xs:attribute name="currency" type="xs:string" default="CNY"/>不写自动补 CNY常用于货币、语言
4. 固定值(只能是这个值)<xs:attribute name="version" type="xs:string" fixed="2.0"/>只能写 version=”2.0″常用于协议版本
5. 禁止使用该属性<xs:attribute name="deprecated" type="xs:string" use="prohibited"/>完全不允许出现版本升级时封掉老属性
6. 自定义枚举属性见下面第 4 节<order type="NORMAL"/>状态、类型最常用

3. 完整语法(永远只需要记住这一行)

<xs:attribute name="属性名"
              type="xs:string 或 自定义简单类型"
              use="required | optional | prohibited"   <!-- 可省略,默认为 optional -->
              default="默认值"                         <!-- use不能是required时才生效 -->
              fixed="固定值" />                        <!-- 与default互斥 -->

4. 真实项目中最常用的一组属性模板(直接复制)

<!-- 在 complexType 里这样写 -->
<xs:complexType name="BookType">
  <xs:sequence>
    <xs:element name="title" type="xs:string"/>
    <xs:element name="price" type="xs:decimal"/>
  </xs:sequence>

  <!-- 下面是属性区 -->
  <xs:attribute name="id"        type="xs:string"           use="required"/>
  <xs:attribute name="isbn"      type="xs:string"           use="required"/>
  <xs:attribute name="lang"      type="xs:string"           default="zh-CN"/>
  <xs:attribute name="currency"  type="xs:string"           fixed="CNY"/>
  <xs:attribute name="status"    type="BookStatusType"/>            <!-- 自定义枚举 -->
  <xs:attribute name="version"   type="xs:string"           fixed="1.0"/>
</xs:complexType>

<!-- 自定义枚举类型(强烈推荐这样写属性) -->
<xs:simpleType name="BookStatusType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="NORMAL"/>
    <xs:enumeration value="OFF_SHELF"/>
    <xs:enumeration value="DELETED"/>
  </xs:restriction>
</xs:simpleType>

5. 企业级最佳实践(大厂都这么写)

<xs:attribute name="id"         type="xs:string"  use="required"/>
<xs:attribute name="code"       type="xs:string"  use="required"/>
<xs:attribute name="type"       type="xxxEnumType"/>
<xs:attribute name="status"     type="xxxStatusType"/>
<xs:attribute name="version"    type="xs:string"  fixed="1.0"/>
<xs:attribute name="lang"       type="xs:language" default="zh-CN"/>
<xs:attribute name="createTime" type="xs:dateTime" use="optional"/>

6. 常见错误(99% 新手会踩的坑)

错误写法正确写法后果
把属性写在 <xs:sequence>必须写在 sequence 后面验证直接报错
use=”required” 同时又写 defaultdefault 只能和 optional 一起用工具报错或行为异常
属性用了 complexType属性永远只能是 simpleType语法错误
忘记在 complexType 里声明属性必须在 complexType 内部声明XML 中写属性也验证不通过

一句话总结:
属性永远简单、必填、枚举、带默认/固定值,写在 complexType 的最后面,use=required 是最常见用法。

需要我直接给你生成某个实体(用户、订单、商品、支付)的完整属性区,直接说业务名就行!

文章已创建 2783

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部