2014-02-11 5 views
1

RelaxNG 및 xml 유효성 검사에 Jing API를 사용하고 있습니다. relaxng을 지정한 문자열의 길이를 확인할 수 없습니다. 자바에서 아래의 독립 실행 형 코드를 작성했습니다. relaxng 파일에서 3으로 minLength 유효성 검사를 지정했으며 코드에서 빈 문자열을 여전히 전달하고 있습니다. api는 임의의 error를 throw하지 않습니다. 문자열의 유효성 검사는 happing이 아닙니다. Jing API를 사용하고 있습니다.Jing Relaxng Length 문자열 유효성 검사

내 코드 :

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

고마워요. 효과가있었습니다. –