我的问题如下: 在我的xml文件中,我有以下几点:
<duration notation="mm:ss">03:14</duration>
现在,我需要在我的xml架构中验证这一点。如果这个元素的值是一个简单的字符串而不需要进一步关注,我可以做到:
<xs:element name="duration" type="durationType" maxOccurs="1"/>
<xs:complexType name="durationType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="notation" type="xs:string" fixed="mm:ss"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
不幸的是,我想使用Regex验证此元素中的值。如果这是我需要验证的唯一内容,我会使用:
<xs:simpleType name="durationType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{1,2}:\d{2}"/>
</xs:restriction>
</xs:simpleType>
我的问题是,我似乎无法弄清楚如何同时验证两者。一直在浏览互联网几个小时(正如你可能知道的那样,复杂类型的代码片段直接来自StackOverflow上的答案;)),但无济于事。
答案 0 :(得分:2)
重命名使用其他名称验证标记内容的简单类型(例如durationContent
):
<xs:simpleType name="durationContent">
<xs:restriction base="xs:string">
<xs:pattern value="\d{1,2}:\d{2}"/>
</xs:restriction>
</xs:simpleType>
现在只需使用 类型作为扩展程序的基础,这会添加一个属性:
<xs:complexType name="durationType">
<xs:simpleContent>
<xs:extension base="durationContent">
<xs:attribute name="notation" type="xs:string" fixed="mm:ss"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
现在它验证属性和标记的内容。