@@ -160,19 +160,18 @@ parseSimpleType c = do
160160 unionAxis <- makeElemAxis "union"
161161 case (c $/ restrictionAxis, c $/ listAxis, c $/ unionAxis) of
162162 ([e], [], []) -> Xsd.AtomicType
163− <$> parseSimpleRestriction e
163+ <$> parseRestriction e
164164 <*> parseAnnotations c
165165 ([], [l], []) -> Xsd.ListType
166166 <$> parseList l
167167 <*> parseAnnotations c
168− ([], [], [u]) -> Xsd.UnionType
169− <$> parseUnion u
170− <*> parseAnnotations c
168+ -- TODO implement me
169+ ([], [], [_]) -> parseError c "Not implemented: union"
171170 _ -> parseError c "Expected exactly of of restriction, list or union"
172171
173172-- | Restriction for simple type
174−parseSimpleRestriction :: Cursor -> P Xsd.SimpleRestriction
175−parseSimpleRestriction c = do
173+parseRestriction :: Cursor -> P Xsd.Restriction
174+parseRestriction c = do
176175 -- XXX: generalaze RefOr parsing
177176 tp <- case anAttribute "base" c of
178177 Nothing -> do
@@ -185,9 +184,9 @@ parseSimpleRestriction c = do
185184
186185 constraints <- parseConstrains c
187186
188− return Xsd.SimpleRestriction
189− { Xsd.simpleRestrictionBase = tp
190− , Xsd.simpleRestrictionConstraints = constraints
187+ return Xsd.Restriction
188+ { Xsd.restrictionBase = tp
189+ , Xsd.restrictionConstraints = constraints
191190 }
192191
193192parseConstrains :: Cursor -> P [Xsd.Constraint]
@@ -208,15 +207,6 @@ parseList c =
208207 _ -> parseError c "Multiple types"
209208 Just t -> Xsd.Ref <$> makeQName c t
210209
211−parseUnion :: Cursor -> P [Xsd.RefOr Xsd.SimpleType]
212−parseUnion c =
213− case anAttribute "memberTypes" c of
214− Just list ->
215− mapM (fmap Xsd.Ref . makeQName c) (Text.splitOn " " list)
216− Nothing -> do
217− simpleTypeAxis <- makeElemAxis "simpleType"
218− mapM (fmap Xsd.Inline . parseSimpleType) (c $/ simpleTypeAxis)
219−
220210parseComplexType :: Cursor -> P Xsd.ComplexType
221211parseComplexType c = do
222212 annotations <- parseAnnotations c
@@ -247,29 +237,14 @@ parsePlainContent c = do
247237 }
248238
249239parseSimpleContent :: Cursor -> P Xsd.SimpleContent
250−parseSimpleContent c = do
251− restrictionAxis <- makeElemAxis "restriction"
252− extenstionAxis <- makeElemAxis "extension"
253− case (c $/ restrictionAxis, c $/ extenstionAxis) of
254− ([r], []) -> Xsd.SimpleContentRestriction <$> parseSimpleRestriction r
255− ([], [e]) -> Xsd.SimpleContentExtension <$> parseSimpleExtension e
256− _ -> parseError c "Expected one of restriction or extension"
257−
258−parseSimpleExtension :: Cursor -> P Xsd.SimpleExtension
259−parseSimpleExtension c = handleNamespaces c $ do
260− base <- theAttribute "base" c >>= makeQName c
261− attributes <- parseAttributes c
262− return Xsd.SimpleExtension
263− { Xsd.simpleExtensionBase = base
264− , Xsd.simpleExtensionAttributes = attributes
265− }
240+parseSimpleContent c = parseError c "not implemented"
266241
267242parseComplexContent :: Cursor -> P Xsd.ComplexContent
268243parseComplexContent c = do
269244 restrictionAxis <- makeElemAxis "restriction"
270245 extenstionAxis <- makeElemAxis "extension"
271246 case (c $/ restrictionAxis, c $/ extenstionAxis) of
272− ([r], []) -> Xsd.ComplexContentRestriction <$> parseComplexRestriction r
247+ ([r], []) -> parseError r "not implemented"
273248 ([], [e]) -> Xsd.ComplexContentExtension <$> parseComplexExtension e
274249 _ -> parseError c "Expected one of restriction or extension"
275250
@@ -284,17 +259,6 @@ parseComplexExtension c = handleNamespaces c $ do
284259 , Xsd.complexExtensionAttributes = attributes
285260 }
286261
287−parseComplexRestriction :: Cursor -> P Xsd.ComplexRestriction
288−parseComplexRestriction c = handleNamespaces c $ do
289− base <- theAttribute "base" c >>= makeQName c
290− attributes <- parseAttributes c
291− model <- parseModelGroup c
292− return Xsd.ComplexRestriction
293− { Xsd.complexRestrictionBase = base
294− , Xsd.complexRestrictionModel = model
295− , Xsd.complexRestrictionAttributes = attributes
296− }
297−
298262parseModelGroup :: Cursor -> P (Maybe Xsd.ModelGroup)
299263parseModelGroup c = do
300264 sequenceAxis <- makeElemAxis "sequence"
@@ -329,33 +293,24 @@ parseAttributes c = do
329293
330294parseAttribute :: Cursor -> P Xsd.Attribute
331295parseAttribute c = do
296+ name <- theAttribute "name" c >>= makeTargetQName
332297 use <- parseUseAttribute c
333− case (anAttribute "name" c, anAttribute "ref" c) of
334− (Just n, Nothing) -> do
335− name <- makeTargetQName n
336− tp <- case anAttribute "type" c of
337− Nothing -> do
338− simpleTypeAxis <- makeElemAxis "simpleType"
339− case c $/ simpleTypeAxis of
340− [s] -> Xsd.Inline <$> parseSimpleType s
341− [] -> return (Xsd.Ref anySimpleType)
342− _ -> parseError c "Multiple simple types"
343− Just t -> Xsd.Ref <$> makeQName c t
344− return $ Xsd.InlineAttribute $ Xsd.AttributeInline
345− { Xsd.attributeInlineName = name
346− , Xsd.attributeInlineUse = use
347− , Xsd.attributeInlineType = tp
348− }
349− (Nothing, Just r) -> do
350− ref <- makeQName c r
351− return $ Xsd.RefAttribute $ Xsd.AttributeRef
352− { Xsd.attributeRefRef = ref
353− , Xsd.attributeRefUse = use
354− }
355− _ -> parseError c "Should be either name or ref"
356− where
357− anySimpleType =
358− Xsd.QName (Just (Xsd.Namespace Xsd.schemaNamespace)) "anySimpleType"
298+
299+ -- XXX: generalaze RefOr parsing
300+ tp <- case anAttribute "type" c of
301+ Nothing -> do
302+ simpleTypeAxis <- makeElemAxis "simpleType"
303+ case c $/ simpleTypeAxis of
304+ [s] -> Xsd.Inline <$> parseSimpleType s
305+ [] -> parseError c "Attribute should have type"
306+ _ -> parseError c "Multiple simple types"
307+ Just t -> Xsd.Ref <$> makeQName c t
308+
309+ return Xsd.Attribute
310+ { Xsd.attrName = name
311+ , Xsd.attrUse = use
312+ , Xsd.attrType = tp
313+ }
359314
360315parseUseAttribute :: Cursor -> P Xsd.Use
361316parseUseAttribute c = case anAttribute "use" c of