git.iko.soy/typeable/xsd-parser
on master help sign in
Nillable element (#7)
be6f2e9Yuras
src/Xsd/Parser.hs+7
@@ -107,11 +107,18 @@ parseElement c = handleNamespaces c $ do
107
107
108 qname <- makeTargetQName name
108 qname <- makeTargetQName name
109
109
110+ nillable <- case anAttribute "nillable" c of
111+ Nothing -> return False
112+ Just "true" -> return True
113+ Just "false" -> return False
114+ _ -> parseError c "Unexpected value of nillable attribute"
115+
110 return Xsd.Element
116 return Xsd.Element
111 { Xsd.elementName = qname
117 { Xsd.elementName = qname
112 , Xsd.elementType = tp
118 , Xsd.elementType = tp
113 , Xsd.elementAnnotations = annotations
119 , Xsd.elementAnnotations = annotations
114 , Xsd.elementOccurs = (minOccurs, maxOccurs)
120 , Xsd.elementOccurs = (minOccurs, maxOccurs)
121+ , Xsd.elementNillable = nillable
115 }
122 }
116
123
117-- | Parse inline type, simple or complex
124-- | Parse inline type, simple or complex
src/Xsd/Types.hs+1
@@ -61,6 +61,7 @@ data Element = Element
61 { elementName :: QName
61 { elementName :: QName
62 , elementType :: RefOr Type
62 , elementType :: RefOr Type
63 , elementOccurs :: (Int, MaxOccurs)
63 , elementOccurs :: (Int, MaxOccurs)
64+ , elementNillable :: Bool
64 , elementAnnotations :: [Annotation]
65 , elementAnnotations :: [Annotation]
65 }
66 }
66 deriving (Show, Eq)
67 deriving (Show, Eq)