我是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文档的脚本会抛出错误。我知道我可能遗漏了一些非常明显的东西,但就像我说的那样,我是新手,所以任何帮助都会非常感激。
答案 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>