xsd_type.py
2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""Implementation of the base XSDType object inherited by XSDSimpleTypeFrame and XSDComplexTypeFrame
Notes concerning components of this package :
- take XSD schema as input and generate Tkinter forms satisfying the definition of type included
therein
- XSD form : in this module a Form object is an instance of a graphical interface component.
A Form is a collection of input fields organised in a way that allows the user the edit the contents
of an XML document. The final document must satisfy the type definitions found in the schema.
A Tkinter Form object is a frame that contains widgets allowing the user to input values according
to the types defined in an XSD schema.
- a single XSD schema includes the definition of multiple types, complex and simple. Each of these
types has an associated Form object. XSD Forms are constructed by piecing together multiple Forms.
- a Generator instance is used to instantiate Forms, for example we may want to do something like:
>>> form_generator = Generator(xsd_file = "xsd_file.xsd")
>>> form = form_generator.get_form(type = "Type1")
>>> isinstance(form, tk.Frame)
True
- a parser is needed to extract type definitions from the XSD schema file. This module uses the lxml
module for parsing XML documents. Usage example :
>>> xsd_filename = "myxsd.xsd"
>>> parser = Parser(xsd_file = xsd_filename)
>>> # simpleTypes, complexTypes, groups definitions are available through dictionaries
>>> parser.simple_types
...
>>> parser.complex_types
...
>>> parser.groups
...
- XSD Types come in a variety of formats : supported are simpleType, compleType, group. A type has
a name, and a description of input types.
- SimpleType objects are standalone : they do not depend on any other types in the schema. They are
the easiest to implement. They have a name, an input type (which can be an enumeration of values)
- ComplexType objects are aggregates of SimpleType objects as well as other ComplexType objects.
"""
"""
Base class for all XSD types
"""
class XSDType:
def __init__(self, name=None):
self.name = name
class XSDSimpleType(XSDType):
def __init__(self, name=None, input_type=None):
XSDType.__init__(self, name)
self.input_type = input_type
class XSDComplexType(XSDType):
def __init__(self, name=None):
XSDType.__init__(self, name)