XSD限制xsd类型,同时也允许属性

时间:2010-10-10 17:37:15

标签: xsd attributes floating-point

我是XML新手,目前我正在研究XSD。我应该验证基于信用卡的xml文档。我已经完成了大部分工作,但我仍然坚持声明一个必须是正浮点数的元素,同时还允许该元素具有必需属性,该属性必须具有与之关联的3字母货币类型。 / p>

以下是我必须验证的XML元素的示例:

<total curId="USD">4003.46</total>

这就是我所拥有的:

<xsd:element name="total" type="validAmount"/>

    <xsd:complexType name="validAmount">
        <xsd:simpleContent>
            <xsd:extension base="xsd:decimal">
                <xsd:attribute name= "curId" type = "currencyAttribute" use="required"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

对于curId属性:

<xsd:simpleType name="currencyAttribute">
    <xsd:restriction base="xsd:string">
        <xsd:pattern value="[A-Z]{3}"/>
    </xsd:restriction>
</xsd:simpleType>

我遇到的问题是尝试将扩展名更改为限制,允许小数位为正数(可能将其类型更改为字符串并使用模式构面将其限制为正数)。但是,如果我这样做,我用来验证xml文档的脚本会抛出错误。我知道我可能遗漏了一些非常明显的东西,但就像我说的那样,我是新手,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

http://www.w3.org/TR/xmlschema-2/#decimal

可以使用minInclusive方面限制此类型,这样做可以满足您的需要。

答案 1 :(得分:0)

XSD不允许您在一次“镜头”中实现您想要的效果;你需要先定义一个受限制的简单类型(在restrictedDecimal类型下面),然后用属性扩展它(这里的关键是使用simpleContent)。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="total" type="validAmount"/>

    <xsd:simpleType name="restrictedDecimal">
        <xsd:restriction base="xsd:decimal">
            <xsd:minInclusive value="0"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="validAmount">
        <xsd:simpleContent>
            <xsd:extension base="restrictedDecimal">
                <xsd:attribute name= "curId" type = "currencyAttribute" use="required"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:simpleType name="currencyAttribute">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[A-Z]{3}"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>