就模式而言,价值不具有分面意义

时间:2015-07-06 16:16:04

标签: java xml validation xsd xstream

我在XSD中有这个元素:

<xs:simpleType name="elementWithAsterisks">
  <xs:restriction base="xs:string">
    <xs:length value="16"/>
    <xs:pattern value="^[0-9*]*$"/>
  </xs:restriction>
</xs:simpleType>

此元素的值可以是数字,数字和星号,其长度必须为16个字符。例如,以下字符串应该有效:

 **1234567****01456**
 **1234567890654321**
 1***************

如果我向此元素发送类似的值,XStream将返回以下消息:

  

cvc-pattern-valid:值'1234567 **** 01456'与facet无效   对于'elementWithAsterisks'类型的模式'^ [0-9 *] * $'。

我正在使用Java和XStream。这是我验证它的代码:

try {
    File xsdFile = new File("validation.xsd");
    SchemaFactory schemaFactory = SchemaFactory.newInstance(SCHEMA_LANGUAGE);
    factory.setSchema(schemaFactory.newSchema(xsdFile);
    SAXParser saxParser = factory.newSAXParser();
    XMLReader reader = saxParser.getXMLReader();
    reader.setErrorHandler(new XmlValidationErrorHandler());
    reader.parse(new InputSource(inputStream));
    isValid = true;
} catch (SAXException | ParserConfigurationException | IOException ex) {
    ex.printStackTrace();
    isValid = false;
}

1 个答案:

答案 0 :(得分:4)

XSD中的正则表达式由$xs:pattern隐式包围。只需从 <xs:pattern value="[0-9*]*"/> 中删除明确的(冗余的),您的XSD就会按预期运行:

<target name="Minifying-Javascript_And_CSS_Files">
 <echo message="Minifying Javascript and CSS Files"/>
 <echo message="${env.WORKSPACE}/Resources/Minifying.sh"/>
  <exec executable="/bin/sh">
  <arg value="/c"/>
  <arg value="${env.WORKSPACE}/Resources/Minifying.sh"/>
  <arg value="-p"/>
  </exec>