XSD 对多个元素使用单一限制
XSD Use single restriction for multiple elements
我有一个从客户系统生成的 XML 文件,其中十进制值使用逗号而不是小数点输出,例如 10,5 或 1250,50 而不是 10.5 或 1250.50。
我需要验证和反序列化这个 XML 文件,所以我试图创建一个 XSD 模式来进行验证,并在验证后反序列化文件。
除了由于逗号而验证数字外,一切正常。
我对 XSD 有以下限制,但我无法弄清楚如何一次添加限制并将其用于多个不同的元素,因为可能有很多带有数字的项目:
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
我尝试在下面的 XSD 示例中的 InvoiceRow 元素内添加以下块,但它似乎破坏了 XSD 格式:
<xs:simpleType name="DecimalValidation">
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
</xs:simpleType>
这是我的XSD,设置"xs:decimal"的地方是数值中有逗号的项目,我需要使用限制来验证它们。
<xs:element name="InvoiceRow" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ArticleIdentifier"/>
<xs:element type="xs:string" name="ArticleName"/>
<xs:element name="OrderedQuantity">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:short">
<xs:attribute type="xs:string" name="QuantityUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UnitPriceAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
<xs:attribute type="xs:string" name="UnitPriceUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:short" name="RowVatRatePercent"/>
<xs:element name="RowVatAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowVatExcludedAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
感谢您提供有关此问题的任何信息或建议。
因为您的简单类型 DecimalValidation
已命名,它应该作为全局声明出现在架构的顶层(即,作为 xs:schema
的子级),然后您应该能够将所有对 xs:decimal
的引用替换为对 DecimalValidation
的引用。 (看起来好像没有涉及命名空间,但如果有,您可能需要添加合适的命名空间前缀。)
我有一个从客户系统生成的 XML 文件,其中十进制值使用逗号而不是小数点输出,例如 10,5 或 1250,50 而不是 10.5 或 1250.50。 我需要验证和反序列化这个 XML 文件,所以我试图创建一个 XSD 模式来进行验证,并在验证后反序列化文件。 除了由于逗号而验证数字外,一切正常。 我对 XSD 有以下限制,但我无法弄清楚如何一次添加限制并将其用于多个不同的元素,因为可能有很多带有数字的项目:
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
我尝试在下面的 XSD 示例中的 InvoiceRow 元素内添加以下块,但它似乎破坏了 XSD 格式:
<xs:simpleType name="DecimalValidation">
<xs:restriction base="xs:string">
<xs:pattern value="^\d+(\,\d{1,2})?$"/>
</xs:restriction>
</xs:simpleType>
这是我的XSD,设置"xs:decimal"的地方是数值中有逗号的项目,我需要使用限制来验证它们。
<xs:element name="InvoiceRow" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ArticleIdentifier"/>
<xs:element type="xs:string" name="ArticleName"/>
<xs:element name="OrderedQuantity">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:short">
<xs:attribute type="xs:string" name="QuantityUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UnitPriceAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
<xs:attribute type="xs:string" name="UnitPriceUnitCode" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element type="xs:short" name="RowVatRatePercent"/>
<xs:element name="RowVatAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowVatExcludedAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="RowAmount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute type="xs:string" name="AmountCurrencyIdentifier" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
感谢您提供有关此问题的任何信息或建议。
因为您的简单类型 DecimalValidation
已命名,它应该作为全局声明出现在架构的顶层(即,作为 xs:schema
的子级),然后您应该能够将所有对 xs:decimal
的引用替换为对 DecimalValidation
的引用。 (看起来好像没有涉及命名空间,但如果有,您可能需要添加合适的命名空间前缀。)