home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-libxml2 / examples / validSchemas.py < prev    next >
Encoding:
Python Source  |  2005-03-30  |  2.0 KB  |  84 lines

  1. #!/usr/bin/python -u
  2. import libxml2
  3. import sys
  4.  
  5. ARG = 'test string'
  6.  
  7. class ErrorHandler:
  8.  
  9.     def __init__(self):
  10.         self.errors = []
  11.  
  12.     def handler(self, msg, data):
  13.         if data != ARG:
  14.             raise Exception, "Error handler did not receive correct argument"
  15.         self.errors.append(msg)
  16.  
  17. # Memory debug specific
  18. libxml2.debugMemory(1)
  19.  
  20. schema="""<?xml version="1.0" encoding="iso-8859-1"?>
  21. <schema xmlns = "http://www.w3.org/2001/XMLSchema">
  22.     <element name = "Customer">
  23.         <complexType>
  24.             <sequence>
  25.                 <element name = "FirstName" type = "string" />
  26.                 <element name = "MiddleInitial" type = "string" />
  27.                 <element name = "LastName" type = "string" />
  28.             </sequence>
  29.             <attribute name = "customerID" type = "integer" />
  30.         </complexType>
  31.     </element>
  32. </schema>"""
  33.  
  34. valid="""<?xml version="1.0" encoding="iso-8859-1"?>
  35. <Customer customerID = "24332">
  36.     <FirstName>Raymond</FirstName>
  37.     <MiddleInitial>G</MiddleInitial>
  38.     <LastName>Bayliss</LastName>
  39. </Customer>    
  40. """
  41.  
  42. invalid="""<?xml version="1.0" encoding="iso-8859-1"?>
  43. <Customer customerID = "24332">
  44.     <MiddleInitial>G</MiddleInitial>
  45.     <LastName>Bayliss</LastName>
  46. </Customer>    
  47. """
  48.  
  49. e = ErrorHandler()
  50. ctxt_parser = libxml2.schemaNewMemParserCtxt(schema, len(schema))
  51. ctxt_schema = ctxt_parser.schemaParse()
  52. ctxt_valid  = ctxt_schema.schemaNewValidCtxt()
  53. ctxt_valid.setValidityErrorHandler(e.handler, e.handler, ARG)
  54.  
  55. # Test valid document
  56. doc = libxml2.parseDoc(valid)
  57. ret = doc.schemaValidateDoc(ctxt_valid)
  58. if ret != 0 or e.errors:
  59.     print "error doing schema validation"
  60.     sys.exit(1)
  61. doc.freeDoc()
  62.  
  63. # Test invalid document
  64. doc = libxml2.parseDoc(invalid)
  65. ret = doc.schemaValidateDoc(ctxt_valid)
  66. if ret == 0 or not e.errors:
  67.     print "Error: document supposer to be schema invalid"
  68.     sys.exit(1)
  69. doc.freeDoc()
  70.  
  71. del ctxt_parser
  72. del ctxt_schema
  73. del ctxt_valid
  74. libxml2.schemaCleanupTypes()
  75.  
  76. # Memory debug specific
  77. libxml2.cleanupParser()
  78. if libxml2.debugMemory(1) == 0:
  79.     print "OK"
  80. else:
  81.     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
  82.     libxml2.dumpMemory()
  83.  
  84.