‘restriction’内容必须匹配,无法为XML文档创建有效.xsd文件
解决XSD中"The Content Of 'restriction' Must Match"错误并生成匹配你XML的有效XSD
这个错误大概率是因为你在<restriction>标签里的内容不符合XSD规范——要么是子元素顺序不对,要么是放了该标签不允许的内容。我先帮你梳理清楚你的XML结构,然后生成完全匹配的有效XSD,彻底解决这个问题。
先明确你的XML核心结构:
- 根元素
<Information>,包含任意多个<game>子元素 - 每个
<game>包含:空元素<pic>、<number>、带id属性的<title>、<developer>、<publisher>、<release>(嵌套<year>、<month>、<day>)、<platform>
下面是完全适配你XML的有效XSD代码,我已经规范处理了所有restriction场景,确保结构合规:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 定义release的复合类型 --> <xs:complexType name="ReleaseType"> <xs:sequence> <xs:element name="year" type="YearType"/> <xs:element name="month" type="xs:string"/> <xs:element name="day" type="DayType"/> </xs:sequence> </xs:complexType> <!-- 年份的restriction:强制四位数字格式 --> <xs:simpleType name="YearType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{4}"/> </xs:restriction> </xs:simpleType> <!-- 日期的restriction:允许1-2位数字 --> <xs:simpleType name="DayType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{1,2}"/> </xs:restriction> </xs:simpleType> <!-- 序号的restriction:正整数 --> <xs:simpleType name="NumberType"> <xs:restriction base="xs:positiveInteger"/> </xs:simpleType> <!-- 带id属性的title类型 --> <xs:complexType name="TitleType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:positiveInteger" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> <!-- 定义game的复合类型 --> <xs:complexType name="GameType"> <xs:sequence> <xs:element name="pic" type="xs:string" nillable="true"/> <xs:element name="number" type="NumberType"/> <xs:element name="title" type="TitleType"/> <xs:element name="developer" type="xs:string"/> <xs:element name="publisher" type="xs:string"/> <xs:element name="release" type="ReleaseType"/> <xs:element name="platform" type="xs:string"/> </xs:sequence> </xs:complexType> <!-- 根元素Information --> <xs:element name="Information"> <xs:complexType> <xs:sequence> <xs:element name="game" type="GameType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
关键注意事项(避免restriction错误的核心):
<restriction>标签只能包含XSD允许的子元素,比如<pattern>、<minInclusive>等,不能放置无关内容- 简单类型的restriction必须基于一个合法的基础类型(如
xs:string、xs:integer),且子元素顺序要严格符合规范 - 你的XML里
<pic>是空元素,所以我设置了nillable="true"允许它为空 - 额外提醒:你的XML中第12个
<game>的<month>拼写错误(Octover→October),建议修正避免数据不一致
最后,把这个XSD保存为schema.xsd,和你的XML放在同一目录下,XML里的xsi:schemaLocation可以调整为更规范的写法:
<Information xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="schema.xsd">
这样就能彻底解决你遇到的restriction内容不匹配错误了。
内容的提问来源于stack exchange,提问作者Anastas
相关产品推荐
相关产品推荐

