1
1
{-# LANGUAGE DuplicateRecordFields #-}
2
2
3
3
import Data.Text
4
+ import Data.Map
4
5
5
- data XsSchema = XsSchema [ XsElement ] deriving Show
6
+ newtype Id = Id Text deriving (Show , Eq )
7
+ newtype Name = Name Text deriving (Show , Eq )
8
+
9
+ data XsSchema = XsSchema {
10
+ elements :: Map Id XsElement
11
+ , simpleTypes :: Map Id XsSimpleType
12
+ , complexTypes :: Map Id XsComplexType
13
+ , topLevels :: [ XsElement ]
14
+ }
6
15
7
16
data XsElement = SimpleElt XsSimpleType | ComplexElt XsComplexType deriving Show
8
17
9
18
data XsSimpleType = XsSimpleType {
10
- id :: Maybe Text
11
- , name :: Maybe Text
19
+ id :: Maybe Id
20
+ , name :: Maybe Name
12
21
, flatType :: Text
13
22
} deriving Show
14
23
15
24
data XsComplexType = XsComplexType {
16
- id :: Maybe Text
17
- , name :: Maybe Text
25
+ id :: Maybe Id
26
+ , name :: Maybe Name
18
27
, abstract :: Maybe Bool
19
28
, mixed :: Maybe Bool
20
29
, content :: Maybe Content
@@ -27,20 +36,20 @@ data Content =
27
36
deriving Show
28
37
29
38
data XsSimpleContent = SimpleContent {
30
- id :: Maybe Text
39
+ id :: Maybe Id
31
40
, kind :: Kind
32
41
} deriving Show
33
42
34
43
data Kind = XSrestriction | XsExtension deriving (Eq , Show )
35
44
36
45
data XsComplexContent = ComplexContent {
37
- id :: Maybe Text
46
+ id :: Maybe Id
38
47
, mixed :: Maybe Bool
39
48
} deriving Show
40
49
41
50
data XsGroup = XsGroup {
42
- id :: Maybe Text
43
- , name :: Maybe Text
51
+ id :: Maybe Id
52
+ , name :: Maybe Name
44
53
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
45
54
, minOccurs :: Int
46
55
, elements :: [ XsGroupElt ]
@@ -51,13 +60,13 @@ data XsGroupElt =
51
60
deriving Show
52
61
53
62
data XsAll = XsAll {
54
- id :: Maybe Text
63
+ id :: Maybe Id
55
64
, minOccurs :: Int -- maxOccurs is 1. No need to specify
56
65
, elements :: [ XsElement ]
57
66
} deriving Show
58
67
59
68
data XsChoice = XsChoice {
60
- id :: Maybe Text
69
+ id :: Maybe Id
61
70
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
62
71
, minOccurs :: Int
63
72
, elements :: [ XsChoiceElt ]
@@ -68,13 +77,13 @@ data XsChoiceElt =
68
77
ChoiceEltSequence XsSequence | ChoiceEltAny XsAny deriving Show
69
78
70
79
data XsAny = XsAny {
71
- id :: Maybe Text
80
+ id :: Maybe Id
72
81
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
73
82
, minOccurs :: Int
74
83
} deriving Show
75
84
76
85
data XsSequence = XsSequence {
77
- id :: Maybe Text
86
+ id :: Maybe Id
78
87
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
79
88
, minOccurs :: Int
80
89
, elements :: [ XsSequenceElt ]
0 commit comments