为什么XSD中的“maxLength”属性不限制返回的字符数?

时间:2013-01-08 16:16:35

标签: xml xslt xsd

我有一个XSD元素定义如下:

<xsd:simpleType name="string1500">
    <xsd:restriction base="xsd:string">
        <xsd:maxLength value="1500" />
    </xsd:restriction>
</xsd:simpleType>

此元素在另一个XSD中以下列方式引用:

<xsd:element minOccurs="0" name="Description" type="bons3:string1500" />

bons3 在两个XSD中引用相同的命名空间。)

当一个长度为2000个字符的字符串传递到XSLT中的Description字段时,即使限制了1500个字符,也会保留所有2000个字符。我是否设置了限制错误,还是有另一种方法可以确保XSD中该字段的最大长度为1500个字符?

感谢。

3 个答案:

答案 0 :(得分:1)

XSD不会影响XSLT的行为。如果您想限制XSLT中某个值的长度,可以使用

substring(Description, 1, 1500)

当你提到它时。

答案 1 :(得分:1)

XSLT和XSD是两回事。 XSLT 1.0不关心XSD或任何其他XML模式语言。 XSLT 2.0引入了一个XSD感知扩展,你必须找到一个合适的XSLT处理器,这可能会阻止你处理XML;但是,它不会自动神奇地使它有效。

答案 2 :(得分:0)

如果您使用的是架构感知的XSLT处理器,例如Saxon-EE,则可以编写

<Description xsl:validation="strict">
  ...
</Description>

这将确保元素的内容对模式中Description元素声明的声明类型有效。 (必须使用xsl:import-schema声明将模式导入样式表。)