2014-02-11 107 views
1

我使用Jing API进行RelaxNG和xml验证。 我无法验证我指定的字符串的长度为relaxng。 我已经在java中编写了下面的独立代码。 在relaxng文件中,我将minLength验证指定为3,并在代码中传递空字符串,但jing api没有抛出任何错误。字符串的验证不是happing。我使用Jing API。Jing Relaxng验证字符串

我的代码:

public static void main(String[] args) throws JAXBException, IOException, SAXException, IncorrectSchemaException, TransformerConfigurationException, TransformerException, TransformerFactoryConfigurationError { 
     OBJ006 obj006 = new OBJ006(); 
     obj006.setMyInput(""); 
     JAXBContext jc = JAXBContext.newInstance(OBJ006.class); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     JAXBElement<OBJ006> rootElement = 
      new JAXBElement<OBJ006>(new QName("obj006"), 
      OBJ006.class, 
      obj006); 
     StringWriter xmlFile = new StringWriter(); 
     marshaller.marshal(rootElement, xmlFile); 
     String encodedxml = new String(xmlFile.toString().getBytes()); 
     System.out.println(encodedxml); 

     //Get Schema 
     File file = new File("C:/XML/Cardinalities/myRelaxNG.xml"); 
     FileInputStream fileInput = new FileInputStream(file); 
     InputSource schemaSource = new InputSource(fileInput); 

     SchemaReader schemaReader = new AutoSchemaReader(); 
     Schema schema = schemaReader.createSchema(schemaSource, PropertyMap.EMPTY); 
     ErrorHandler errorHandler = new ErrorHandlerImpl(); 
     PropertyMapBuilder builder = new PropertyMapBuilder(); 
     builder.put(ValidateProperty.ERROR_HANDLER, errorHandler); 

     Validator validator = schema.createValidator(builder.toPropertyMap()); 

     TransformerFactory.newInstance().newTransformer() 
     .transform(new StreamSource(new ByteArrayInputStream(encodedxml.getBytes())), 
       new SAXResult(validator.getContentHandler())); 






} 

2.MyRelaxNG.xml

<?xml version="1.0"?> 
<!-- Converted to RelaxNG using http://debeissat.nicolas.free.fr/XSDtoRNG.php --> 
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0" 
    ns="" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> 
     <rng:start combine="choice"> 
     <rng:ref name="obj006" /> 
    </rng:start> 
    <rng:define name="obj006"> 
     <rng:element name="obj006"> 
      <rng:ref name="obj006ref" /> 
     </rng:element> 
    </rng:define> 
      <rng:define name="obj006ref"> 
     <rng:element name="myInput"> 
      <rng:data type="string"> 
       <param name="minlength">3</param> 
       </rng:data> 
     </rng:element> 


     </rng:define> 

    </rng:grammar> 

3)我的计划OUTPUT:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<obj006> 
    <myInput></myInput> 
</obj006> 

回答

2

你需要指定你这样的参数:

<rng:param name="minLength">3</rng:param> 

你有这样的方式,你有<param>,这不在Relax NG命名空间,因此被忽略。另外,您有minlength,但参数名称为minLength且大写字母为'L'。

+0

非常感谢它的工作。 –