XSD如何定义一个有属性的简单元素

发布时间 - 2025-12-25 00:00:00    点击率:
在XSD中定义含文本和属性的元素须用simpleContent with extension:先声明complexType含simpleContent,再用extension扩展简单类型并添加attribute;支持具名复用、内联定义、枚举约束及default/fixed属性值。

如果需要在XSD中定义一个既包含文本内容又拥有属性的元素,则该元素不能是纯粹的简单类型,而必须采用“带属性的简单内容”(simpleContent with extension)方式。以下是实现此需求的具体步骤:

一、使用simpleContent与extension声明带属性的简单元素

XML Schema不允许直接为简单类型元素添加属性,必须通过将简单类型嵌入complexType中,并以simpleContent为内容模型,再通过extension扩展属性。该方式保持元素主体为文本值,同时支持附加属性。

1、定义complexType,其内容模型为simpleContent。

2、在simpleContent内使用extension元素,指定base为所需简单类型(如xs:string、xs:integer等)。

3、在extension内部添加attribute子元素,声明所需属性名、类型及是否必需。

4、将该complexType赋予目标元素的type属性或通过匿名定义绑定到element上。

二、定义具名简单类型并扩展为带属性的复合类型

可先声明一个命名的简单类型(如xs:token或自定义restriction),再基于它构建带属性的complexType,提升类型复用性与可维护性。

1、使用xs:simpleType定义名称为myTextType的类型,可附加pattern、maxLength等约束。

2、新建xs:complexType,名称为myElementWithAttr,内部使用xs:simpleContent和xs:extension,base引用myTextType。

3、在xs:extension中添加xs:attribute,设置name为"lang",type为xs:language,use为"optional"。

4、声明xs:element name="title" type="myElementWithAttr"。

三、在元素声明中内联定义带属性的简单内容类型

适用于仅在单处使用的场景,避免全局类型污染,直接在element标签内嵌套complexType定义,结构紧凑且作用域明确。

1、编写xs:element,指定name为"price"。

2、在element内嵌入xs:complexType,不设name属性。

3、在complexType中添加xs:simpleContent,其下嵌套xs:extension,base设为"xs:decimal"。

4、在extension中添加xs:attribute,name为"currency",type为"xs:string",use为"required"。

四、限制属性取值范围并绑定枚举值

当属性需限定为固定集合时,可在attribute内部嵌套xs:simpleType与xs:restriction,并使用xs:enumeration约束合法值,增强数据校验能力。

1、在xs:extension中添加xs:attribute name="status"。

2、在attribute内嵌套xs:simpleType,再嵌套xs:restriction base="xs:string"。

3、添加多个xs:enumeration,value分别设为"active""inactive""pending"

4、确保该attribute的use属性设为"optional"或"required"以匹配业务语义。

五、为属性设置默认值或固定值

当希望未显式提供属性时自动赋予特定值,可使用default或fixed属性。default在实例中未出现该属性时生效;fixed则强制要求值一致且不可覆盖。

1、在xs:attribute中添加default="en",使19.99等效于19.99

2、若使用fixed="USD",则所有实例中的currency属性值必须为"USD",否则校验失败。

3、注意:default与fixed不可同时存在,且仅对use="optional"或use="prohibited"的属性有效。


# 作用域  # red  # String  # Integer  # xml  # Token  # Attribute  # default  # 设为  # 所需  # 绑定  # 复用  # 多个  # 适用于  # 可在  # 自定义  # 并以  # 再用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 米侠浏览器网页背景异常怎么办 米侠显示修复  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  利用python获取某年中每个月的第一天和最后一天  如何在搬瓦工VPS快速搭建网站?  如何彻底删除建站之星生成的Banner?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  如何快速查询域名建站关键信息?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何使用查询构建器?(Query Builder高级用法)  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  在线教育网站制作平台,山西立德教育官网?  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何在IIS中新建站点并解决端口绑定冲突?  python中快速进行多个字符替换的方法小结  无锡营销型网站制作公司,无锡网选车牌流程?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何在橙子建站中快速调整背景颜色?  Laravel如何处理CORS跨域请求?(配置示例)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何获取免费开源的自助建站系统源码?  zabbix利用python脚本发送报警邮件的方法  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何安全更换建站之星模板并保留数据?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  香港服务器如何优化才能显著提升网站加载速度?  如何有效防御Web建站篡改攻击?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  JavaScript实现Fly Bird小游戏  如何快速搭建自助建站会员专属系统?  如何挑选高效建站主机与优质域名?  再谈Python中的字符串与字符编码(推荐)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  javascript中的try catch异常捕获机制用法分析  Android使用GridView实现日历的简单功能  如何快速打造个性化非模板自助建站?  如何在云指建站中生成FTP站点?  Laravel如何自定义错误页面(404, 500)?(代码示例)  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像