验证元素(正则表达式)和属性(字符串)

时间:2015-03-29 16:23:43

标签: xml xsd

我的问题如下: 在我的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上的答案;)),但无济于事。

1 个答案:

答案 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>

现在它验证属性和标记的内容。