XSD 1.1中simpleContent扩展元素空文本默认值设置是否正确?
问题解答
你的原写法不符合XSD默认值的生效规则,所以xsData无法识别默认值是正常现象。
原写法失效的原因
XSD规范中,xs:element节点上的default属性仅对两类元素生效:
- 类型为纯简单类型(没有嵌套复杂结构、没有属性)的元素
- 复杂类型仅包含简单内容且没有定义任何属性的元素
你当前定义的pose元素属于「带属性的简单内容复杂类型」,因此元素级的default属性会被解析器忽略,无法关联到元素的文本内容上。
正确的实现方案
你需要将文本内容的默认值绑定到内容本身的类型上,而非元素节点,修改后的XSD定义如下:
<!-- 首先定义带默认值的文本内容类型 --> <xs:simpleType name="PoseContentType"> <xs:restriction base="xs:string"> <xs:default value="0 0 0 0 0 0"/> </xs:restriction> </xs:simpleType> <!-- 定义pose元素,扩展上述内容类型增加可选属性 --> <xs:element name="pose"> <xs:complexType> <xs:simpleContent> <xs:extension base="PoseContentType"> <xs:attribute name="relative_to" type="xs:string" use="optional" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
修改后的定义完全符合你预期的效果:
<pose></pose>会自动补全为<pose>0 0 0 0 0 0</pose><pose relative_to="something"/>会自动补全为<pose relative_to="something">0 0 0 0 0 0</pose>
xsData可以正确识别这种符合XSD规范的默认值定义,重新生成绑定代码即可生效。
内容的提问来源于stack exchange,提问作者FirefoxMetzger
相关产品推荐
相关产品推荐

