Skip to content

Commit a18ac7e

Browse files
committed
Made changes to use Map for easy reference to simple and complex types.
1 parent ade9cb3 commit a18ac7e

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

xmlschema.hs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
{-# LANGUAGE DuplicateRecordFields #-}
22

33
import Data.Text
4+
import Data.Map
45

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+
}
615

716
data XsElement = SimpleElt XsSimpleType | ComplexElt XsComplexType deriving Show
817

918
data XsSimpleType = XsSimpleType {
10-
id :: Maybe Text
11-
, name :: Maybe Text
19+
id :: Maybe Id
20+
, name :: Maybe Name
1221
, flatType :: Text
1322
} deriving Show
1423

1524
data XsComplexType = XsComplexType {
16-
id :: Maybe Text
17-
, name :: Maybe Text
25+
id :: Maybe Id
26+
, name :: Maybe Name
1827
, abstract :: Maybe Bool
1928
, mixed :: Maybe Bool
2029
, content :: Maybe Content
@@ -27,20 +36,20 @@ data Content =
2736
deriving Show
2837

2938
data XsSimpleContent = SimpleContent {
30-
id :: Maybe Text
39+
id :: Maybe Id
3140
, kind :: Kind
3241
} deriving Show
3342

3443
data Kind = XSrestriction | XsExtension deriving (Eq, Show)
3544

3645
data XsComplexContent = ComplexContent {
37-
id :: Maybe Text
46+
id :: Maybe Id
3847
, mixed :: Maybe Bool
3948
} deriving Show
4049

4150
data XsGroup = XsGroup {
42-
id :: Maybe Text
43-
, name :: Maybe Text
51+
id :: Maybe Id
52+
, name :: Maybe Name
4453
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
4554
, minOccurs :: Int
4655
, elements :: [ XsGroupElt ]
@@ -51,13 +60,13 @@ data XsGroupElt =
5160
deriving Show
5261

5362
data XsAll = XsAll {
54-
id :: Maybe Text
63+
id :: Maybe Id
5564
, minOccurs :: Int -- maxOccurs is 1. No need to specify
5665
, elements :: [ XsElement ]
5766
} deriving Show
5867

5968
data XsChoice = XsChoice {
60-
id :: Maybe Text
69+
id :: Maybe Id
6170
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
6271
, minOccurs :: Int
6372
, elements :: [ XsChoiceElt ]
@@ -68,13 +77,13 @@ data XsChoiceElt =
6877
ChoiceEltSequence XsSequence | ChoiceEltAny XsAny deriving Show
6978

7079
data XsAny = XsAny {
71-
id :: Maybe Text
80+
id :: Maybe Id
7281
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
7382
, minOccurs :: Int
7483
} deriving Show
7584

7685
data XsSequence = XsSequence {
77-
id :: Maybe Text
86+
id :: Maybe Id
7887
, maxOccurs :: Maybe Int -- Use Nothing for unbounded. Default should be 1.
7988
, minOccurs :: Int
8089
, elements :: [ XsSequenceElt ]

0 commit comments

Comments
 (0)