新闻中心
如何在XSD中定义一个抽象类型,并让其他类型继承它?
XSD中定义抽象类型需设abstract="true",仅能被extension或restriction继承,不可直接实例化;配合substitutionGroup可实现xsi:type多态。

在XSD中定义抽象类型,核心是使用 abstract="true" 属性,并配合 extension 或 restriction 实现继承。抽象类型本身不能直接用于元素实例,只能被其他类型扩展或限制。
定义抽象复杂类型
用 <complextype abstract="true"></complextype> 声明一个不可实例化的基类型:
<xs:complexType name="Person" abstract="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
这个 Person 类型不能直接赋给某个 <element></element> 的 type 属性,否则校验会失败。
让具体类型继承抽象类型
使用 <extension base="Perso 扩展抽象基类,添加专属字段:
n"></extension>
<xs:complexType name="Student">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="studentId" type="xs:integer"/>
<xs:element name="grade" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Teacher">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="staffId" type="xs:integer"/>
<xs:element name="subject" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
在元素声明中使用继承后的类型
抽象类型不能直接用,但继承后的具体类型可以:
星辰Agent
科大讯飞推出的智能体Agent开发平台,助力开发者快速搭建生产级智能体
378
查看详情
- 用
type="Student"声明学生元素: - 用
type="Teacher"声明教师元素: - 若需支持多态(如一个
person元素可接受 Student 或 Teacher),可配合xsi:type使用,前提是元素声明使用抽象类型名 +substitutionGroup或abstract="true"配合<element></element>的abstract属性
可选:定义抽象元素(支持多态替换)
如果希望 XML 中能用 这种方式,还需定义抽象元素并设置替代组:
<xs:element name="person" type="Person" abstract="true"/> <xs:element name="student" type="Student" substitutionGroup="person"/> <xs:element name="teacher" type="Teacher" substitutionGroup="person"/>
这样 XML 中就可以写:
<person xsi:type="student"> <name>Alice</name> <email>a@example.com</email> <studentId>1001</studentId> <grade>A</grade> </person>
只要引用了 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",校验器就能根据 xsi:type 正确识别实际类型。
基本上就这些。抽象类型 + extension + substitutionGroup 是 XSD 实现“面向对象式”建模的关键组合,不复杂但容易忽略 abstract 和 substitutionGroup 的配合。
以上就是如何在XSD中定义一个抽象类型,并让其他类型继承它?的详细内容,更多请关注其它相关文章!
# 多态
# 面向对象
# 并让
# 如何在
# 就能
# 相关文章
# 中文网
# 解决问题
# 可选
# ai
# 知乎引流关键词排名查询
# 上海关键词排名案例
# 黄浦区营销推广策划公司
# 请说明seo的定义
# 青州网站建设哪家好
# 衢州网站推广选哪家好些
# 大同营销推广招商项目有哪些
# 网站建设内部链接
# 旺哥seo直播
# 惠阳化工网站建设服务
# 中就
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
C++如何解决segmentation fault_C++段错误调试与原因分析
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
FullCalendar 自定义按钮样式定制指南
J*aScript中向JSON对象添加新属性的正确姿势
Python实现多节点属性重叠度分析教程
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
Win10双系统截图高效法 截屏快捷键速记【技巧】
在python-socketio事件处理器中安全访问Flask应用上下文
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
支付宝如何设置安全保护_支付宝安全设置的全面教程
yy漫画网页版官方入口_yy漫画官网登录页面链接
Go语言JSON解析深度指南:动态访问与结构体映射实践
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
C++ explicit关键字防止隐式转换_C++构造函数安全规范
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
Python类型检查:优化关联可选属性的Mypy推断策略
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
Python getattr() 异常处理深度解析:避免程序意外退出
C++指针和引用有什么区别_C++内存管理核心概念深度解析
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法
React Router 嵌套组件中 URL 重定向问题的解决方案
J*a TimerTask中HashMap意外清空的深层原因与解决方案
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
CSS实现侧边栏导航项全宽圆角悬停背景效果
腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录
Animex动漫社网入口地址 Animex动漫社网正版在线入口
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧
fishbowl官网免费版 fishbowl养鱼网站入口
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法


2025-12-04
浏览次数:次
返回列表