git.iko.soy/typeable/xsd-parser
on master help sign in
7 files changed+307−181
since splitsnapshots
unifiedsplit
src/Xsd.hs+1−1 src/Xsd/Parser.hs+81−30 src/Xsd/Types.hs+53−18 test/Spec.hs+15−13 xsd-parser.cabal+1−1 xsts-test/Main.hs+61−23 xsts.md+95−95
src/Xsd.hs+1−1
@@ -113,7 +113,7 @@ xsdToSchema xsd = Schema
113113 go res [] = res
114114 go (ts, es) (c:cs) = case c of
115115 ChildType n t -> go ((n, t):ts, es) cs
116− ChildElement e -> go (ts, (elementName e, e):es) cs
116+ ChildElement (Inline e) -> go (ts, (elementName e, e):es) cs
117117 _ -> go (ts, es) cs
118118
119119fetchXsd :: URI -> IO Xsd
src/Xsd/Parser.hs+81−30
@@ -48,7 +48,7 @@ parseChild :: Cursor -> P (Maybe Xsd.Child)
4848parseChild c = do
4949 name <- getElementName c
5050 case name of
51− "element" -> Just . Xsd.ChildElement <$> parseElement c
51+ "element" -> Just . Xsd.ChildElement <$> parseElementOrRef c
5252 "simpleType" -> Just <$> parseTopSimpleType c
5353 "complexType" -> Just <$> parseTopComplexType c
5454 "include" -> Just . Xsd.ChildInclude <$> parseInclude c
@@ -81,6 +81,12 @@ parseImport c = do
8181 , Xsd.importNamespace = namespace
8282 }
8383
84+parseElementOrRef :: Cursor -> P (Xsd.RefOr Xsd.Element)
85+parseElementOrRef c = do
86+ case anAttribute "ref" c of
87+ Nothing -> Xsd.Inline <$> parseElement c
88+ Just ref -> Xsd.Ref <$> makeQName c ref
89+
8490parseElement :: Cursor -> P Xsd.Element
8591parseElement c = handleNamespaces c $ do
8692 name <- theAttribute "name" c
@@ -154,18 +160,19 @@ parseSimpleType c = do
154160 unionAxis <- makeElemAxis "union"
155161 case (c $/ restrictionAxis, c $/ listAxis, c $/ unionAxis) of
156162 ([e], [], []) -> Xsd.AtomicType
157− <$> parseRestriction e
163+ <$> parseSimpleRestriction e
158164 <*> parseAnnotations c
159165 ([], [l], []) -> Xsd.ListType
160166 <$> parseList l
161167 <*> parseAnnotations c
162− -- TODO implement me
163− ([], [], [_]) -> parseError c "Not implemented: union"
168+ ([], [], [u]) -> Xsd.UnionType
169+ <$> parseUnion u
170+ <*> parseAnnotations c
164171 _ -> parseError c "Expected exactly of of restriction, list or union"
165172
166173-- | Restriction for simple type
167−parseRestriction :: Cursor -> P Xsd.Restriction
168−parseRestriction c = do
174+parseSimpleRestriction :: Cursor -> P Xsd.SimpleRestriction
175+parseSimpleRestriction c = do
169176 -- XXX: generalaze RefOr parsing
170177 tp <- case anAttribute "base" c of
171178 Nothing -> do
@@ -178,9 +185,9 @@ parseRestriction c = do
178185
179186 constraints <- parseConstrains c
180187
181− return Xsd.Restriction
182− { Xsd.restrictionBase = tp
183− , Xsd.restrictionConstraints = constraints
188+ return Xsd.SimpleRestriction
189+ { Xsd.simpleRestrictionBase = tp
190+ , Xsd.simpleRestrictionConstraints = constraints
184191 }
185192
186193parseConstrains :: Cursor -> P [Xsd.Constraint]
@@ -201,6 +208,15 @@ parseList c =
201208 _ -> parseError c "Multiple types"
202209 Just t -> Xsd.Ref <$> makeQName c t
203210
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+
204220parseComplexType :: Cursor -> P Xsd.ComplexType
205221parseComplexType c = do
206222 annotations <- parseAnnotations c
@@ -231,14 +247,29 @@ parsePlainContent c = do
231247 }
232248
233249parseSimpleContent :: Cursor -> P Xsd.SimpleContent
234−parseSimpleContent c = parseError c "not implemented"
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+ }
235266
236267parseComplexContent :: Cursor -> P Xsd.ComplexContent
237268parseComplexContent c = do
238269 restrictionAxis <- makeElemAxis "restriction"
239270 extenstionAxis <- makeElemAxis "extension"
240271 case (c $/ restrictionAxis, c $/ extenstionAxis) of
241− ([r], []) -> parseError r "not implemented"
272+ ([r], []) -> Xsd.ComplexContentRestriction <$> parseComplexRestriction r
242273 ([], [e]) -> Xsd.ComplexContentExtension <$> parseComplexExtension e
243274 _ -> parseError c "Expected one of restriction or extension"
244275
@@ -253,6 +284,17 @@ parseComplexExtension c = handleNamespaces c $ do
253284 , Xsd.complexExtensionAttributes = attributes
254285 }
255286
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+
256298parseModelGroup :: Cursor -> P (Maybe Xsd.ModelGroup)
257299parseModelGroup c = do
258300 sequenceAxis <- makeElemAxis "sequence"
@@ -275,10 +317,10 @@ parseAll :: Cursor -> P Xsd.ModelGroup
275317parseAll c = Xsd.All <$> parseElements c
276318
277319-- | Get all child elements
278−parseElements :: Cursor -> P [Xsd.Element]
320+parseElements :: Cursor -> P [Xsd.RefOr Xsd.Element]
279321parseElements c = do
280322 elementAxis <- makeElemAxis "element"
281− mapM parseElement (c $/ elementAxis)
323+ mapM parseElementOrRef (c $/ elementAxis)
282324
283325parseAttributes :: Cursor -> P [Xsd.Attribute]
284326parseAttributes c = do
@@ -287,24 +329,33 @@ parseAttributes c = do
287329
288330parseAttribute :: Cursor -> P Xsd.Attribute
289331parseAttribute c = do
290− name <- theAttribute "name" c >>= makeTargetQName
291332 use <- parseUseAttribute c
292−
293− -- XXX: generalaze RefOr parsing
294− tp <- case anAttribute "type" c of
295− Nothing -> do
296− simpleTypeAxis <- makeElemAxis "simpleType"
297− case c $/ simpleTypeAxis of
298− [s] -> Xsd.Inline <$> parseSimpleType s
299− [] -> parseError c "Attribute should have type"
300− _ -> parseError c "Multiple simple types"
301− Just t -> Xsd.Ref <$> makeQName c t
302−
303− return Xsd.Attribute
304− { Xsd.attrName = name
305− , Xsd.attrUse = use
306− , Xsd.attrType = tp
307− }
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"
308359
309360parseUseAttribute :: Cursor -> P Xsd.Use
310361parseUseAttribute c = case anAttribute "use" c of
src/Xsd/Types.hs+53−18
@@ -6,18 +6,23 @@ module Xsd.Types
66, Child(..)
77, Type(..)
88, SimpleType(..)
9−, Restriction(..)
109, Constraint(..)
1110, ComplexType(..)
1211, Content(..)
1312, PlainContent(..)
1413, SimpleContent(..)
14+, SimpleExtension(..)
15+, SimpleRestriction(..)
1516, ComplexContent(..)
1617, ComplexExtension(..)
18+, ComplexRestriction(..)
1719, RefOr(..)
20+, refOr
1821, Element(..)
1922, MaxOccurs(..)
2023, Attribute(..)
24+, AttributeRef(..)
25+, AttributeInline(..)
2126, Annotation(..)
2227, Use(..)
2328, ModelGroup(..)
@@ -48,7 +53,7 @@ newtype Namespace = Namespace
4853 deriving (Show, Eq, Ord)
4954
5055data Child
51− = ChildElement Element
56+ = ChildElement (RefOr Element)
5257 | ChildType QName Type
5358 | ChildImport Import
5459 | ChildInclude Include
@@ -88,9 +93,9 @@ data Include = Include
8893 deriving (Show, Eq)
8994
9095data SimpleType
91− = AtomicType Restriction [Annotation]
96+ = AtomicType SimpleRestriction [Annotation]
9297 | ListType (RefOr SimpleType) [Annotation]
93− -- TODO: also union
98+ | UnionType [RefOr SimpleType] [Annotation]
9499 deriving (Show, Eq)
95100
96101data ComplexType = ComplexType
@@ -114,7 +119,7 @@ data PlainContent = PlainContent
114119
115120data ComplexContent
116121 = ComplexContentExtension ComplexExtension
117− | ComplexContentRestriction -- TODO: implement me
122+ | ComplexContentRestriction ComplexRestriction
118123 deriving (Show, Eq)
119124
120125data ComplexExtension = ComplexExtension
@@ -124,20 +129,39 @@ data ComplexExtension = ComplexExtension
124129 }
125130 deriving (Show, Eq)
126131
127−-- TODO: implement me
128−data SimpleContent = SimpleContent
132+data ComplexRestriction = ComplexRestriction
133+ { complexRestrictionBase :: QName
134+ , complexRestrictionModel :: Maybe ModelGroup
135+ , complexRestrictionAttributes :: [Attribute]
136+ }
137+ deriving (Show, Eq)
138+
139+data SimpleContent
140+ = SimpleContentExtension SimpleExtension
141+ | SimpleContentRestriction SimpleRestriction
129142 deriving (Show, Eq)
130143
131144data ModelGroup
132− = Sequence [Element]
133− | Choice [Element]
134− | All [Element]
145+ = Sequence [RefOr Element]
146+ | Choice [RefOr Element]
147+ | All [RefOr Element]
148+ deriving (Show, Eq)
149+
150+data Attribute
151+ = RefAttribute AttributeRef
152+ | InlineAttribute AttributeInline
153+ deriving (Show, Eq)
154+
155+data AttributeInline = AttributeInline
156+ { attributeInlineName :: QName
157+ , attributeInlineType :: RefOr SimpleType
158+ , attributeInlineUse :: Use
159+ }
135160 deriving (Show, Eq)
136161
137−data Attribute = Attribute
138− { attrName :: QName
139− , attrType :: RefOr SimpleType
140− , attrUse :: Use
162+data AttributeRef = AttributeRef
163+ { attributeRefRef :: QName
164+ , attributeRefUse :: Use
141165 }
142166 deriving (Show, Eq)
143167
@@ -147,10 +171,16 @@ data Use
147171 | Required
148172 deriving (Show, Eq)
149173
150−data Restriction = Restriction
151− { restrictionBase :: RefOr SimpleType
152− -- XXX: could restrictionBase be an inline type? Probably not.
153− , restrictionConstraints :: [Constraint]
174+data SimpleRestriction = SimpleRestriction
175+ { simpleRestrictionBase :: RefOr SimpleType
176+ -- XXX: could simpleRestrictionBase be an inline type? Probably not.
177+ , simpleRestrictionConstraints :: [Constraint]
178+ }
179+ deriving (Show, Eq)
180+
181+data SimpleExtension = SimpleExtension
182+ { simpleExtensionBase :: QName
183+ , simpleExtensionAttributes :: [Attribute]
154184 }
155185 deriving (Show, Eq)
156186
@@ -160,6 +190,11 @@ data RefOr t
160190 | Inline t
161191 deriving (Show, Eq)
162192
193+refOr :: (QName -> a) -> (t -> a) -> RefOr t -> a
194+refOr f g ref = case ref of
195+ Ref name -> f name
196+ Inline t -> g t
197+
163198data Constraint
164199 = Enumeration Text
165200 deriving (Show, Eq)
test/Spec.hs+15−13
@@ -6,6 +6,7 @@ module Spec
66where
77
88import Data.Text (Text)
9+import Data.Maybe
910import Data.Either
1011import Data.Map (Map)
1112import qualified Data.Map as Map
@@ -90,7 +91,7 @@ spec = do
9091 Xsd.AtomicType restriction _ = t
9192 res `shouldSatisfy` isRight
9293 tpName `shouldBe` (Xsd.QName Nothing "str")
93− Xsd.restrictionBase restriction `shouldBe`
94+ Xsd.simpleRestrictionBase restriction `shouldBe`
9495 Xsd.Ref (Xsd.QName (Just (Xsd.Namespace "something")) "string")
9596
9697 context "when restriction contains enumerations" $ do
@@ -114,7 +115,7 @@ spec = do
114115 Xsd.AtomicType restriction _ = t
115116 res `shouldSatisfy` isRight
116117 tpName `shouldBe` (Xsd.QName Nothing "str")
117− Xsd.restrictionConstraints restriction `shouldBe`
118+ Xsd.simpleRestrictionConstraints restriction `shouldBe`
118119 [ Xsd.Enumeration "value1"
119120 , Xsd.Enumeration "value2"
120121 ]
@@ -137,10 +138,10 @@ spec = do
137138 fmap Xsd.children res
138139 Xsd.AtomicType restriction' _ = t
139140 Xsd.Inline (Xsd.AtomicType restriction _) =
140− Xsd.restrictionBase restriction'
141+ Xsd.simpleRestrictionBase restriction'
141142 res `shouldSatisfy` isRight
142143 tpName `shouldBe` (Xsd.QName Nothing "str")
143− Xsd.restrictionBase restriction `shouldBe`
144+ Xsd.simpleRestrictionBase restriction `shouldBe`
144145 Xsd.Ref (Xsd.QName (Just (Xsd.Namespace "something")) "string")
145146
146147 context "when base refers to an unbound prefix" $ do
@@ -199,11 +200,11 @@ spec = do
199200 Right [Xsd.ChildType tpName (Xsd.TypeComplex t)] =
200201 fmap Xsd.children res
201202 Xsd.ContentPlain plain = Xsd.complexContent t
202− [attr] = Xsd.plainContentAttributes plain
203+ [Xsd.InlineAttribute attr] = Xsd.plainContentAttributes plain
203204 res `shouldSatisfy` isRight
204205 tpName `shouldBe` Xsd.QName Nothing "person"
205− Xsd.attrName attr `shouldBe` Xsd.QName Nothing "firstName"
206− Xsd.attrType attr `shouldBe`
206+ Xsd.attributeInlineName attr `shouldBe` Xsd.QName Nothing "firstName"
207+ Xsd.attributeInlineType attr `shouldBe`
207208 Xsd.Ref (Xsd.QName (Just (Xsd.Namespace "something")) "string")
208209
209210 context "when attribute type is inlined" $ do
@@ -225,10 +226,11 @@ spec = do
225226 Right [Xsd.ChildType _ (Xsd.TypeComplex t)] =
226227 fmap Xsd.children res
227228 Xsd.ContentPlain plain = Xsd.complexContent t
228− [attr] = Xsd.plainContentAttributes plain
229− Xsd.Inline (Xsd.AtomicType restriction _) = Xsd.attrType attr
229+ [Xsd.InlineAttribute attr] = Xsd.plainContentAttributes plain
230+ Xsd.Inline (Xsd.AtomicType restriction _) =
231+ Xsd.attributeInlineType attr
230232 res `shouldSatisfy` isRight
231− Xsd.restrictionBase restriction `shouldBe`
233+ Xsd.simpleRestrictionBase restriction `shouldBe`
232234 Xsd.Ref (Xsd.QName (Just (Xsd.Namespace "something")) "string")
233235
234236 context "when it contains a sequence" $ do
@@ -259,8 +261,8 @@ spec = do
259261 Xsd.ContentPlain plain = Xsd.complexContent t
260262 Just (Xsd.Sequence elems) = Xsd.plainContentModel plain
261263 res `shouldSatisfy` isRight
262− map Xsd.elementName elems `shouldBe`
263− map (Xsd.QName Nothing) ["firstName", "lastName"]
264+ mapMaybe (Xsd.refOr (const Nothing) (Just . Xsd.elementName)) elems
265+ `shouldBe` map (Xsd.QName Nothing) ["firstName", "lastName"]
264266
265267 context "when it contains complexContent" $ do
266268 context "when it's an extenstion" $ do
@@ -305,7 +307,7 @@ spec = do
305307 ]
306308 ]
307309 res = Xsd.parse Xsd.defaultConfig doc
308− Right [Xsd.ChildElement e] = fmap Xsd.children res
310+ Right [Xsd.ChildElement (Xsd.Inline e)] = fmap Xsd.children res
309311 res `shouldSatisfy` isRight
310312 Xsd.elementName e `shouldBe`
311313 Xsd.QName Nothing "person"
xsd-parser.cabal+1−1
@@ -24,7 +24,7 @@ library
2424 , Xsd.Parser
2525
2626 -- Other library packages from which modules are imported.
27− build-depends: base ^>=4.12.0.0
27+ build-depends: base >=4.12 && < 5
2828 , bytestring
2929 , containers
3030 , lens >= 4.13
xsts-test/Main.hs+61−23
@@ -19,9 +19,10 @@ import Text.XML.Cursor
1919import qualified Xsd
2020
2121data Stat = Stat
22− { statTestSet :: Text
23− , statTotal :: Int
22+ { statTotal :: Int
2423 , statSucceeded :: Int
24+ , statValidFailed :: Int
25+ , statInvalidSucceeded :: Int
2526 }
2627 deriving (Show)
2728
@@ -34,27 +35,29 @@ okRef :: IORef Int
3435okRef = unsafePerformIO (newIORef 0)
3536
3637{-# NOINLINE statsRef #-}
37−statsRef :: IORef [Stat]
38+statsRef :: IORef [(Text, Stat)]
3839statsRef = unsafePerformIO (newIORef [])
3940
40−dumpResults :: [Stat] -> IO ()
41+dumpResults :: [(Text, Stat)] -> IO ()
4142dumpResults stats = IO.withFile "xsts.md" IO.WriteMode $ \h -> do
4243 IO.hPutStrLn h "This table is generated automatically by `xsts` test."
4344 IO.hPutStrLn h "It contains number of xsd files successfully parsed."
4445 IO.hPutStrLn h "Note that we don't currently attempt to validate xml files"
4546 IO.hPutStrLn h "against the schemata."
4647 IO.hPutStrLn h ""
47− IO.hPutStrLn h "Test set | Total tests | Passed tests"
48− IO.hPutStrLn h "--- | --- | ---"
49− forM_ stats $ \s -> do
48+ IO.hPutStrLn h "Test set | Total tests | Passed tests | Invalid passed | Valid failed"
49+ IO.hPutStrLn h "--- | --- | --- | --- | ---"
50+ forM_ stats $ \(name, s) -> do
5051 IO.hPutStrLn h $ mconcat
51− [ Text.unpack (statTestSet s), " | "
52+ [ Text.unpack name, " | "
5253 , show (statTotal s), " | "
53− , show (statSucceeded s)
54+ , show (statSucceeded s), " | "
55+ , show (statInvalidSucceeded s), " | "
56+ , show (statValidFailed s)
5457 ]
5558
5659expectedFailures :: Int
57−expectedFailures = 5080
60+expectedFailures = 3513
5861
5962main :: IO ()
6063main = do
@@ -90,24 +93,59 @@ runTestSet path = do
9093 results <- mapM (runTestGroup dir) (c $/ laxElement "testGroup")
9194 let
9295 stat = Stat
93− { statTestSet = name
94− , statTotal = (sum . map fst) results
95− , statSucceeded = (sum . map snd) results
96+ { statTotal = (sum . map statTotal) results
97+ , statSucceeded = (sum . map statSucceeded) results
98+ , statValidFailed = (sum . map statValidFailed) results
99+ , statInvalidSucceeded = (sum . map statInvalidSucceeded) results
96100 }
97− modifyIORef' statsRef (stat :)
101+ modifyIORef' statsRef ((name, stat) :)
98102 where
99103 dir = takeDirectory path
100104
101−runTestGroup :: FilePath -> Cursor -> IO (Int, Int)
105+runTestGroup :: FilePath -> Cursor -> IO Stat
102106runTestGroup dir c = do
103107 name <- theAttribute c "name"
104108 results <- mapM (runSchemaTest dir name) (aChild c "schemaTest")
105109 case join results of
106− Nothing -> return (0, 0)
107− Just True -> return (1, 1)
108− Just False -> return (1, 0)
110+ Nothing -> return Stat
111+ { statTotal = 0
112+ , statSucceeded = 0
113+ , statValidFailed = 0
114+ , statInvalidSucceeded = 0
115+ }
116+ Just ValidSucceeded -> return Stat
117+ { statTotal = 1
118+ , statSucceeded = 1
119+ , statValidFailed = 0
120+ , statInvalidSucceeded = 0
121+ }
122+ Just ValidFailed -> return Stat
123+ { statTotal = 1
124+ , statSucceeded = 0
125+ , statValidFailed = 1
126+ , statInvalidSucceeded = 0
127+ }
128+ Just InvalidSucceeded -> return Stat
129+ { statTotal = 1
130+ , statSucceeded = 0
131+ , statValidFailed = 0
132+ , statInvalidSucceeded = 1
133+ }
134+ Just InvalidFailed -> return Stat
135+ { statTotal = 1
136+ , statSucceeded = 1
137+ , statValidFailed = 0
138+ , statInvalidSucceeded = 0
139+ }
140+
141+data Result
142+ = InvalidFailed
143+ | InvalidSucceeded
144+ | ValidFailed
145+ | ValidSucceeded
146+ deriving (Show)
109147
110−runSchemaTest :: FilePath -> Text -> Cursor -> IO (Maybe Bool)
148+runSchemaTest :: FilePath -> Text -> Cursor -> IO (Maybe Result)
111149runSchemaTest dir groupName c = do
112150 path <- do
113151 c' <- theChild c "schemaDocument"
@@ -126,21 +164,21 @@ runSchemaTest dir groupName c = do
126164 case (res, valid) of
127165 (Left _, False) -> do
128166 modifyIORef' okRef succ
129− return (Just True)
167+ return (Just InvalidFailed)
130168 (Right _, True) -> do
131169 modifyIORef' okRef succ
132− return (Just True)
170+ return (Just ValidSucceeded)
133171 (Right _, False) -> do
134172 modifyIORef' errRef succ
135173 putStrLn $ "invalid xsd passed: " <> Text.unpack groupName
136174 <> " (" <> dir </> Text.unpack path <> ")"
137− return (Just False)
175+ return (Just InvalidSucceeded)
138176 (Left err, True) -> do
139177 modifyIORef' errRef succ
140178 putStrLn $ "valid xsd didn't pass: " <> Text.unpack groupName
141179 <> " (" <> dir </> Text.unpack path <> ")"
142180 <> ": " <> show (err :: SomeException)
143− return (Just False)
181+ return (Just ValidFailed)
144182
145183anAttribute :: Cursor -> Text -> Maybe Text
146184anAttribute c name = case c $| laxAttribute name of
xsts.md+95−95
@@ -3,98 +3,98 @@ It contains number of xsd files successfully parsed.
33Note that we don't currently attempt to validate xml files
44against the schemata.
55
6−Test set | Total tests | Passed tests
7−--- | --- | ---
8−yearMonthDuration | 25 | 9
9−XSImportReference | 1 | 1
10−XPathDefaultNSonKeyKeyRefUnique | 13 | 11
11−XML11Support | 11 | 11
12−wildcard | 17 | 9
13−VC | 6 | 5
14−unsignedIntegers | 8 | 8
15−UnitsLength | 8 | 7
16−union | 19 | 6
17−CTA | 6 | 4
18−TypeAlternativeTests | 23 | 9
19−time | 1 | 1
20−TargetNS | 2 | 0
21−substitutionGroup | 5 | 2
22−rf-whiteSpace | 2 | 2
23−RestrictionOfComplexTypes | 13 | 11
24−RegularExpression | 8 | 8
25−PopenContent | 24 | 13
26−list | 2 | 1
27−IdentityConstraint | 12 | 7
28−ID_IDREF | 77 | 44
29−gMonth | 1 | 0
30−gDay | 1 | 1
31−gMonthDay | 1 | 1
32−gYear | 1 | 1
33−gYearMonth | 1 | 1
34−float | 2 | 2
35−explicitTimezone | 18 | 6
36−EDCWildcard | 2 | 2
37−double | 2 | 2
38−DefaultFixed | 5 | 2
39−defaultAttributesApply | 17 | 14
40−dayTimeDuration | 24 | 8
41−dateTimeStamp | 28 | 7
42−date | 1 | 1
43−CyclicDependencies_Redefine_Include_Import_Override | 5 | 0
44−constraintsOnAttribute | 16 | 10
45−ConditionalInclusion | 3 | 2
46−assertion | 51 | 42
47−Assert | 35 | 25
48−anyAttribute | 9 | 7
49−allGroup | 9 | 8
50−IRI | 1 | 0
51−substitution-groups | 6 | 0
52−Zone | 9 | 5
53−Zone | 20 | 16
54−XmlVersions | 13 | 13
55−Wild | 84 | 52
56−VC | 24 | 9
57−TargetNS | 4 | 0
58−Subsgroup | 6 | 3
59−Simple | 58 | 31
60−Override | 30 | 21
61−Open | 51 | 34
62−Missing | 6 | 5
63−Id | 32 | 7
64−CTA | 44 | 13
65−Complex | 25 | 11
66−Assert | 34 | 2
67−All | 62 | 29
68−BoeingXSDTestCases | 6 | 0
69−MS-Wildcards2006-07-15 | 315 | 210
70−MS-SimpleType2006-07-15 | 333 | 146
71−MS-Schema2006-07-15 | 124 | 56
72−MS-Regex2006-07-15 | 2590 | 1988
73−MS-Particles2006-07-15 | 855 | 491
74−MS-Notations2006-07-15 | 116 | 40
75−MS-ModelGroups2006-07-15 | 391 | 221
76−MS-IdentityConstraint2006-07-15 | 844 | 231
77−MS-Group2006-07-15 | 218 | 69
78−MS-Errata102006-07-15 | 19 | 10
79−MS-Element2006-07-15 | 355 | 150
80−MS-DataTypes2006-07-15 | 2247 | 1084
81−MS-ComplexType2006-07-15 | 550 | 270
82−MS-Attribute2006-07-15 | 279 | 137
83−MS-AttributeGroup2006-07-15 | 114 | 64
84−MS-Annotations2006-07-15 | 80 | 50
85−MS-Additional2006-07-15 | 253 | 157
86−Wildcard | 26 | 22
87−Schema | 6 | 6
88−SType | 138 | 123
89−Notation | 13 | 8
90−MGroupDef | 19 | 8
91−MGroup | 40 | 24
92−IdConstrDefs | 27 | 19
93−ElemDecl | 227 | 133
94−CType | 31 | 15
95−AttrUse | 4 | 1
96−AttrDecl | 83 | 73
97−AGroupDef | 13 | 6
98−suntest | 52 | 19
99−NIST2004-01-14 | 3953 | 3873
100−introspection | 1 | 0
6+Test set | Total tests | Passed tests | Invalid passed | Valid failed
7+--- | --- | --- | --- | ---
8+yearMonthDuration | 25 | 13 | 12 | 0
9+XSImportReference | 1 | 0 | 1 | 0
10+XPathDefaultNSonKeyKeyRefUnique | 13 | 13 | 0 | 0
11+XML11Support | 11 | 11 | 0 | 0
12+wildcard | 17 | 15 | 2 | 0
13+VC | 6 | 6 | 0 | 0
14+unsignedIntegers | 8 | 8 | 0 | 0
15+UnitsLength | 8 | 6 | 2 | 0
16+union | 19 | 14 | 5 | 0
17+CTA | 6 | 6 | 0 | 0
18+TypeAlternativeTests | 23 | 16 | 7 | 0
19+time | 1 | 1 | 0 | 0
20+TargetNS | 2 | 2 | 0 | 0
21+substitutionGroup | 5 | 3 | 2 | 0
22+rf-whiteSpace | 2 | 2 | 0 | 0
23+RestrictionOfComplexTypes | 13 | 9 | 4 | 0
24+RegularExpression | 8 | 8 | 0 | 0
25+PopenContent | 24 | 16 | 8 | 0
26+list | 2 | 1 | 1 | 0
27+IdentityConstraint | 12 | 6 | 6 | 0
28+ID_IDREF | 77 | 57 | 20 | 0
29+gMonth | 1 | 0 | 1 | 0
30+gDay | 1 | 1 | 0 | 0
31+gMonthDay | 1 | 1 | 0 | 0
32+gYear | 1 | 1 | 0 | 0
33+gYearMonth | 1 | 1 | 0 | 0
34+float | 2 | 2 | 0 | 0
35+explicitTimezone | 18 | 14 | 4 | 0
36+EDCWildcard | 2 | 2 | 0 | 0
37+double | 2 | 2 | 0 | 0
38+DefaultFixed | 5 | 5 | 0 | 0
39+defaultAttributesApply | 17 | 14 | 3 | 0
40+dayTimeDuration | 24 | 12 | 12 | 0
41+dateTimeStamp | 28 | 11 | 17 | 0
42+date | 1 | 1 | 0 | 0
43+CyclicDependencies_Redefine_Include_Import_Override | 5 | 0 | 5 | 0
44+constraintsOnAttribute | 16 | 6 | 10 | 0
45+ConditionalInclusion | 3 | 2 | 1 | 0
46+assertion | 51 | 50 | 1 | 0
47+Assert | 35 | 35 | 0 | 0
48+anyAttribute | 9 | 7 | 2 | 0
49+allGroup | 9 | 7 | 2 | 0
50+IRI | 1 | 1 | 0 | 0
51+substitution-groups | 6 | 6 | 0 | 0
52+Zone | 9 | 5 | 4 | 0
53+Zone | 20 | 15 | 5 | 0
54+XmlVersions | 13 | 13 | 0 | 0
55+Wild | 84 | 63 | 21 | 0
56+VC | 24 | 19 | 4 | 1
57+TargetNS | 4 | 2 | 2 | 0
58+Subsgroup | 6 | 3 | 3 | 0
59+Simple | 58 | 17 | 41 | 0
60+Override | 30 | 21 | 9 | 0
61+Open | 51 | 37 | 14 | 0
62+Missing | 6 | 4 | 2 | 0
63+Id | 32 | 30 | 2 | 0
64+CTA | 44 | 33 | 11 | 0
65+Complex | 25 | 19 | 6 | 0
66+Assert | 34 | 34 | 0 | 0
67+All | 62 | 26 | 34 | 2
68+BoeingXSDTestCases | 6 | 6 | 0 | 0
69+MS-Wildcards2006-07-15 | 315 | 218 | 97 | 0
70+MS-SimpleType2006-07-15 | 333 | 210 | 123 | 0
71+MS-Schema2006-07-15 | 124 | 56 | 61 | 7
72+MS-Regex2006-07-15 | 2590 | 1988 | 602 | 0
73+MS-Particles2006-07-15 | 855 | 561 | 293 | 1
74+MS-Notations2006-07-15 | 116 | 38 | 78 | 0
75+MS-ModelGroups2006-07-15 | 391 | 215 | 176 | 0
76+MS-IdentityConstraint2006-07-15 | 844 | 621 | 223 | 0
77+MS-Group2006-07-15 | 218 | 138 | 80 | 0
78+MS-Errata102006-07-15 | 19 | 15 | 4 | 0
79+MS-Element2006-07-15 | 355 | 263 | 92 | 0
80+MS-DataTypes2006-07-15 | 2247 | 1491 | 752 | 4
81+MS-ComplexType2006-07-15 | 550 | 311 | 239 | 0
82+MS-Attribute2006-07-15 | 279 | 165 | 114 | 0
83+MS-AttributeGroup2006-07-15 | 114 | 63 | 51 | 0
84+MS-Annotations2006-07-15 | 80 | 51 | 27 | 2
85+MS-Additional2006-07-15 | 253 | 202 | 45 | 6
86+Wildcard | 26 | 22 | 4 | 0
87+Schema | 6 | 6 | 0 | 0
88+SType | 138 | 131 | 7 | 0
89+Notation | 13 | 8 | 5 | 0
90+MGroupDef | 19 | 8 | 11 | 0
91+MGroup | 40 | 24 | 16 | 0
92+IdConstrDefs | 27 | 21 | 6 | 0
93+ElemDecl | 227 | 171 | 56 | 0
94+CType | 31 | 25 | 6 | 0
95+AttrUse | 4 | 3 | 1 | 0
96+AttrDecl | 83 | 78 | 5 | 0
97+AGroupDef | 13 | 6 | 7 | 0
98+suntest | 52 | 30 | 22 | 0
99+NIST2004-01-14 | 3953 | 3953 | 0 | 0
100+introspection | 1 | 0 | 0 | 1