1 // Written in the D programming language
2 
3 /++
4     This runs some of the spec conformance tests found at
5     $(LINK http://www.w3.org/XML/Test/) on dxml.
6 
7     Copyright: Copyright 2018
8     License:   $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
9     Authors:   Jonathan M Davis
10 
11     See_Also: $(LINK2 http://www.w3.org/TR/REC-xml/, Official Specification for XML 1.0)
12   +/
13 module main;
14 
15 import std.range.primitives;
16 import std.traits;
17 import dxml.parser;
18 
19 void main()
20 {
21     xmltest();
22     japanese();
23     ibm();
24 }
25 
26 void xmltest()
27 {
28     // Unfortunately, because we skip passed the XML declaration and the DTD
29     // section, we fail many tests - either because they validate those sections
30     // or because they include entity references in the main body of the XML
31     // which are not predefined entities (we consider them to be invalid XML,
32     // because we can't process them properly without processing the DTD
33     // section).
34     auto ignoreList =
35     [
36         "xmlconf/xmltest/not-wf/sa/054.xml", "xmlconf/xmltest/not-wf/sa/056.xml", "xmlconf/xmltest/not-wf/sa/057.xml",
37         "xmlconf/xmltest/not-wf/sa/058.xml", "xmlconf/xmltest/not-wf/sa/059.xml", "xmlconf/xmltest/not-wf/sa/060.xml",
38         "xmlconf/xmltest/not-wf/sa/061.xml", "xmlconf/xmltest/not-wf/sa/062.xml", "xmlconf/xmltest/not-wf/sa/064.xml",
39         "xmlconf/xmltest/not-wf/sa/065.xml", "xmlconf/xmltest/not-wf/sa/066.xml", "xmlconf/xmltest/not-wf/sa/067.xml",
40         "xmlconf/xmltest/not-wf/sa/068.xml", "xmlconf/xmltest/not-wf/sa/069.xml", "xmlconf/xmltest/not-wf/sa/078.xml",
41         "xmlconf/xmltest/not-wf/sa/079.xml", "xmlconf/xmltest/not-wf/sa/080.xml", "xmlconf/xmltest/not-wf/sa/082.xml",
42         "xmlconf/xmltest/not-wf/sa/084.xml", "xmlconf/xmltest/not-wf/sa/085.xml", "xmlconf/xmltest/not-wf/sa/086.xml",
43         "xmlconf/xmltest/not-wf/sa/087.xml", "xmlconf/xmltest/not-wf/sa/089.xml", "xmlconf/xmltest/not-wf/sa/091.xml",
44         "xmlconf/xmltest/not-wf/sa/094.xml", "xmlconf/xmltest/not-wf/sa/095.xml", "xmlconf/xmltest/not-wf/sa/096.xml",
45         "xmlconf/xmltest/not-wf/sa/097.xml", "xmlconf/xmltest/not-wf/sa/098.xml", "xmlconf/xmltest/not-wf/sa/099.xml",
46         "xmlconf/xmltest/not-wf/sa/100.xml", "xmlconf/xmltest/not-wf/sa/101.xml", "xmlconf/xmltest/not-wf/sa/102.xml",
47         "xmlconf/xmltest/not-wf/sa/113.xml", "xmlconf/xmltest/not-wf/sa/114.xml", "xmlconf/xmltest/not-wf/sa/121.xml",
48         "xmlconf/xmltest/not-wf/sa/122.xml", "xmlconf/xmltest/not-wf/sa/123.xml", "xmlconf/xmltest/not-wf/sa/124.xml",
49         "xmlconf/xmltest/not-wf/sa/125.xml", "xmlconf/xmltest/not-wf/sa/126.xml", "xmlconf/xmltest/not-wf/sa/127.xml",
50         "xmlconf/xmltest/not-wf/sa/128.xml", "xmlconf/xmltest/not-wf/sa/129.xml", "xmlconf/xmltest/not-wf/sa/130.xml",
51         "xmlconf/xmltest/not-wf/sa/131.xml", "xmlconf/xmltest/not-wf/sa/132.xml", "xmlconf/xmltest/not-wf/sa/133.xml",
52         "xmlconf/xmltest/not-wf/sa/134.xml", "xmlconf/xmltest/not-wf/sa/135.xml", "xmlconf/xmltest/not-wf/sa/136.xml",
53         "xmlconf/xmltest/not-wf/sa/137.xml", "xmlconf/xmltest/not-wf/sa/138.xml", "xmlconf/xmltest/not-wf/sa/139.xml",
54         "xmlconf/xmltest/not-wf/sa/149.xml", "xmlconf/xmltest/not-wf/sa/152.xml", "xmlconf/xmltest/not-wf/sa/158.xml",
55         "xmlconf/xmltest/not-wf/sa/160.xml", "xmlconf/xmltest/not-wf/sa/161.xml", "xmlconf/xmltest/not-wf/sa/162.xml",
56         "xmlconf/xmltest/not-wf/sa/165.xml", "xmlconf/xmltest/not-wf/sa/175.xml", "xmlconf/xmltest/not-wf/sa/180.xml",
57         "xmlconf/xmltest/not-wf/sa/183.xml", "xmlconf/xmltest/not-wf/sa/184.xml",
58         "xmlconf/xmltest/not-wf/not-sa/001.xml", "xmlconf/xmltest/not-wf/not-sa/002.xml",
59         "xmlconf/xmltest/not-wf/not-sa/003.xml", "xmlconf/xmltest/not-wf/not-sa/004.xml",
60         "xmlconf/xmltest/not-wf/not-sa/005.xml", "xmlconf/xmltest/not-wf/not-sa/006.xml",
61         "xmlconf/xmltest/not-wf/not-sa/007.xml", "xmlconf/xmltest/not-wf/not-sa/008.xml",
62         "xmlconf/xmltest/not-wf/not-sa/009.xml", "xmlconf/xmltest/invalid/002.xml", "xmlconf/xmltest/invalid/005.xml",
63         "xmlconf/xmltest/invalid/006.xml", "xmlconf/xmltest/invalid/not-sa/022.xml",
64         "xmlconf/xmltest/valid/sa/023.xml", "xmlconf/xmltest/valid/sa/024.xml", "xmlconf/xmltest/valid/sa/053.xml",
65         "xmlconf/xmltest/valid/sa/066.xml", "xmlconf/xmltest/valid/sa/068.xml", "xmlconf/xmltest/valid/sa/085.xml",
66         "xmlconf/xmltest/valid/sa/086.xml", "xmlconf/xmltest/valid/sa/087.xml", "xmlconf/xmltest/valid/sa/088.xml",
67         "xmlconf/xmltest/valid/sa/089.xml", "xmlconf/xmltest/valid/sa/108.xml", "xmlconf/xmltest/valid/sa/110.xml",
68         "xmlconf/xmltest/valid/sa/114.xml", "xmlconf/xmltest/valid/sa/115.xml", "xmlconf/xmltest/valid/sa/117.xml",
69         "xmlconf/xmltest/valid/sa/118.xml", "xmlconf/xmltest/valid/not-sa/031.xml",
70         "xmlconf/xmltest/valid/ext-sa/001.xml", "xmlconf/xmltest/valid/ext-sa/002.xml",
71         "xmlconf/xmltest/valid/ext-sa/003.xml", "xmlconf/xmltest/valid/ext-sa/004.xml",
72         "xmlconf/xmltest/valid/ext-sa/005.xml", "xmlconf/xmltest/valid/ext-sa/006.xml",
73         "xmlconf/xmltest/valid/ext-sa/007.xml", "xmlconf/xmltest/valid/ext-sa/008.xml",
74         "xmlconf/xmltest/valid/ext-sa/009.xml", "xmlconf/xmltest/valid/ext-sa/010.xml",
75         "xmlconf/xmltest/valid/ext-sa/011.xml", "xmlconf/xmltest/valid/ext-sa/012.xml",
76         "xmlconf/xmltest/valid/ext-sa/013.xml", "xmlconf/xmltest/valid/ext-sa/014.xml",
77     ];
78 
79     validateTests("xmlconf/xmltest/xmltest.xml", ignoreList);
80 }
81 
82 void japanese()
83 {
84     auto ignoreList =
85     [
86         "xmlconf/japanese/pr-xml-little-endian.xml",
87         "xmlconf/japanese/pr-xml-utf-16.xml",
88         "xmlconf/japanese/pr-xml-utf-8.xml",
89         "xmlconf/japanese/weekly-utf-16.xml", // FIXME big-endian
90     ];
91 
92     validateTests("xmlconf/japanese/japanese.xml", ignoreList);
93 }
94 
95 void ibm()
96 {
97     // Unfortunately, because we skip passed the XML declaration and the DTD
98     // section, we fail many tests - either because they validate those sections
99     // or because they include entity references in the main body of the XML
100     // which are not predefined entities (we consider them to be invalid XML,
101     // because we can't process them properly without processing the DTD
102     // section).
103     auto ignoreList =
104     [
105         "xmlconf/ibm/invalid/P28/ibm28i01.xml", "xmlconf/ibm/invalid/P32/ibm32i01.xml",
106         "xmlconf/ibm/invalid/P32/ibm32i03.xml", "xmlconf/ibm/invalid/P32/ibm32i04.xml",
107         "xmlconf/ibm/invalid/P39/ibm39i01.xml", "xmlconf/ibm/invalid/P39/ibm39i02.xml",
108         "xmlconf/ibm/invalid/P39/ibm39i03.xml", "xmlconf/ibm/invalid/P39/ibm39i04.xml",
109         "xmlconf/ibm/invalid/P41/ibm41i01.xml", "xmlconf/ibm/invalid/P41/ibm41i02.xml",
110         "xmlconf/ibm/invalid/P45/ibm45i01.xml", "xmlconf/ibm/invalid/P49/ibm49i01.xml",
111         "xmlconf/ibm/invalid/P50/ibm50i01.xml", "xmlconf/ibm/invalid/P51/ibm51i01.xml",
112         "xmlconf/ibm/invalid/P51/ibm51i03.xml", "xmlconf/ibm/invalid/P56/ibm56i01.xml",
113         "xmlconf/ibm/invalid/P56/ibm56i02.xml", "xmlconf/ibm/invalid/P56/ibm56i03.xml",
114         "xmlconf/ibm/invalid/P56/ibm56i05.xml", "xmlconf/ibm/invalid/P56/ibm56i06.xml",
115         "xmlconf/ibm/invalid/P56/ibm56i07.xml", "xmlconf/ibm/invalid/P56/ibm56i08.xml",
116         "xmlconf/ibm/invalid/P56/ibm56i09.xml", "xmlconf/ibm/invalid/P56/ibm56i10.xml",
117         "xmlconf/ibm/invalid/P56/ibm56i11.xml", "xmlconf/ibm/invalid/P56/ibm56i12.xml",
118         "xmlconf/ibm/invalid/P56/ibm56i13.xml", "xmlconf/ibm/invalid/P56/ibm56i14.xml",
119         "xmlconf/ibm/invalid/P56/ibm56i15.xml", "xmlconf/ibm/invalid/P56/ibm56i16.xml",
120         "xmlconf/ibm/invalid/P56/ibm56i17.xml", "xmlconf/ibm/invalid/P56/ibm56i18.xml",
121         "xmlconf/ibm/invalid/P58/ibm58i01.xml", "xmlconf/ibm/invalid/P58/ibm58i02.xml",
122         "xmlconf/ibm/invalid/P59/ibm59i01.xml", "xmlconf/ibm/invalid/P60/ibm60i01.xml",
123         "xmlconf/ibm/invalid/P60/ibm60i02.xml", "xmlconf/ibm/invalid/P60/ibm60i03.xml",
124         "xmlconf/ibm/invalid/P60/ibm60i04.xml", "xmlconf/ibm/invalid/P68/ibm68i01.xml",
125         "xmlconf/ibm/invalid/P68/ibm68i02.xml", "xmlconf/ibm/invalid/P68/ibm68i03.xml",
126         "xmlconf/ibm/invalid/P68/ibm68i04.xml", "xmlconf/ibm/invalid/P69/ibm69i01.xml",
127         "xmlconf/ibm/invalid/P69/ibm69i02.xml", "xmlconf/ibm/invalid/P69/ibm69i03.xml",
128         "xmlconf/ibm/invalid/P69/ibm69i04.xml", "xmlconf/ibm/invalid/P76/ibm76i01.xml",
129         "xmlconf/ibm/not-wf/P23/ibm23n01.xml", "xmlconf/ibm/not-wf/P23/ibm23n02.xml",
130         "xmlconf/ibm/not-wf/P23/ibm23n03.xml", "xmlconf/ibm/not-wf/P24/ibm24n01.xml",
131         "xmlconf/ibm/not-wf/P24/ibm24n03.xml", "xmlconf/ibm/not-wf/P24/ibm24n04.xml",
132         "xmlconf/ibm/not-wf/P24/ibm24n05.xml", "xmlconf/ibm/not-wf/P24/ibm24n06.xml",
133         "xmlconf/ibm/not-wf/P24/ibm24n07.xml", "xmlconf/ibm/not-wf/P24/ibm24n08.xml",
134         "xmlconf/ibm/not-wf/P24/ibm24n09.xml", "xmlconf/ibm/not-wf/P25/ibm25n01.xml",
135         "xmlconf/ibm/not-wf/P25/ibm25n02.xml", "xmlconf/ibm/not-wf/P26/ibm26n01.xml",
136         "xmlconf/ibm/not-wf/P28/ibm28n01.xml", "xmlconf/ibm/not-wf/P28/ibm28n03.xml",
137         "xmlconf/ibm/not-wf/P29/ibm29n01.xml", "xmlconf/ibm/not-wf/P29/ibm29n02.xml",
138         "xmlconf/ibm/not-wf/P29/ibm29n03.xml", "xmlconf/ibm/not-wf/P29/ibm29n05.xml",
139         "xmlconf/ibm/not-wf/P29/ibm29n06.xml", "xmlconf/ibm/not-wf/P29/ibm29n07.xml",
140         "xmlconf/ibm/not-wf/P30/ibm30n01.xml", "xmlconf/ibm/not-wf/P31/ibm31n01.xml",
141         "xmlconf/ibm/not-wf/P32/ibm32n01.xml", "xmlconf/ibm/not-wf/P32/ibm32n02.xml",
142         "xmlconf/ibm/not-wf/P32/ibm32n03.xml", "xmlconf/ibm/not-wf/P32/ibm32n04.xml",
143         "xmlconf/ibm/not-wf/P32/ibm32n05.xml", "xmlconf/ibm/not-wf/P32/ibm32n06.xml",
144         "xmlconf/ibm/not-wf/P32/ibm32n07.xml", "xmlconf/ibm/not-wf/P32/ibm32n08.xml",
145         "xmlconf/ibm/not-wf/P45/ibm45n01.xml", "xmlconf/ibm/not-wf/P45/ibm45n02.xml",
146         "xmlconf/ibm/not-wf/P45/ibm45n03.xml", "xmlconf/ibm/not-wf/P45/ibm45n04.xml",
147         "xmlconf/ibm/not-wf/P45/ibm45n05.xml", "xmlconf/ibm/not-wf/P45/ibm45n06.xml",
148         "xmlconf/ibm/not-wf/P45/ibm45n07.xml", "xmlconf/ibm/not-wf/P45/ibm45n08.xml",
149         "xmlconf/ibm/not-wf/P45/ibm45n09.xml", "xmlconf/ibm/not-wf/P46/ibm46n01.xml",
150         "xmlconf/ibm/not-wf/P46/ibm46n02.xml", "xmlconf/ibm/not-wf/P46/ibm46n03.xml",
151         "xmlconf/ibm/not-wf/P46/ibm46n04.xml", "xmlconf/ibm/not-wf/P46/ibm46n05.xml",
152         "xmlconf/ibm/not-wf/P47/ibm47n01.xml", "xmlconf/ibm/not-wf/P47/ibm47n02.xml",
153         "xmlconf/ibm/not-wf/P47/ibm47n03.xml", "xmlconf/ibm/not-wf/P47/ibm47n04.xml",
154         "xmlconf/ibm/not-wf/P47/ibm47n05.xml", "xmlconf/ibm/not-wf/P47/ibm47n06.xml",
155         "xmlconf/ibm/not-wf/P48/ibm48n01.xml", "xmlconf/ibm/not-wf/P48/ibm48n02.xml",
156         "xmlconf/ibm/not-wf/P48/ibm48n03.xml", "xmlconf/ibm/not-wf/P48/ibm48n04.xml",
157         "xmlconf/ibm/not-wf/P48/ibm48n05.xml", "xmlconf/ibm/not-wf/P48/ibm48n06.xml",
158         "xmlconf/ibm/not-wf/P48/ibm48n07.xml", "xmlconf/ibm/not-wf/P49/ibm49n01.xml",
159         "xmlconf/ibm/not-wf/P49/ibm49n02.xml", "xmlconf/ibm/not-wf/P49/ibm49n03.xml",
160         "xmlconf/ibm/not-wf/P49/ibm49n04.xml", "xmlconf/ibm/not-wf/P49/ibm49n05.xml",
161         "xmlconf/ibm/not-wf/P49/ibm49n06.xml", "xmlconf/ibm/not-wf/P50/ibm50n01.xml",
162         "xmlconf/ibm/not-wf/P50/ibm50n02.xml", "xmlconf/ibm/not-wf/P50/ibm50n03.xml",
163         "xmlconf/ibm/not-wf/P50/ibm50n04.xml", "xmlconf/ibm/not-wf/P50/ibm50n05.xml",
164         "xmlconf/ibm/not-wf/P50/ibm50n06.xml", "xmlconf/ibm/not-wf/P51/ibm51n01.xml",
165         "xmlconf/ibm/not-wf/P51/ibm51n02.xml", "xmlconf/ibm/not-wf/P51/ibm51n03.xml",
166         "xmlconf/ibm/not-wf/P51/ibm51n04.xml", "xmlconf/ibm/not-wf/P51/ibm51n07.xml",
167         "xmlconf/ibm/not-wf/P52/ibm52n01.xml", "xmlconf/ibm/not-wf/P52/ibm52n02.xml",
168         "xmlconf/ibm/not-wf/P52/ibm52n03.xml", "xmlconf/ibm/not-wf/P52/ibm52n04.xml",
169         "xmlconf/ibm/not-wf/P52/ibm52n05.xml", "xmlconf/ibm/not-wf/P52/ibm52n06.xml",
170         "xmlconf/ibm/not-wf/P53/ibm53n01.xml", "xmlconf/ibm/not-wf/P53/ibm53n02.xml",
171         "xmlconf/ibm/not-wf/P53/ibm53n03.xml", "xmlconf/ibm/not-wf/P53/ibm53n04.xml",
172         "xmlconf/ibm/not-wf/P53/ibm53n05.xml", "xmlconf/ibm/not-wf/P53/ibm53n06.xml",
173         "xmlconf/ibm/not-wf/P53/ibm53n07.xml", "xmlconf/ibm/not-wf/P53/ibm53n08.xml",
174         "xmlconf/ibm/not-wf/P54/ibm54n01.xml", "xmlconf/ibm/not-wf/P54/ibm54n02.xml",
175         "xmlconf/ibm/not-wf/P55/ibm55n01.xml", "xmlconf/ibm/not-wf/P55/ibm55n02.xml",
176         "xmlconf/ibm/not-wf/P55/ibm55n03.xml", "xmlconf/ibm/not-wf/P56/ibm56n01.xml",
177         "xmlconf/ibm/not-wf/P56/ibm56n02.xml", "xmlconf/ibm/not-wf/P56/ibm56n03.xml",
178         "xmlconf/ibm/not-wf/P56/ibm56n04.xml", "xmlconf/ibm/not-wf/P56/ibm56n05.xml",
179         "xmlconf/ibm/not-wf/P56/ibm56n06.xml", "xmlconf/ibm/not-wf/P56/ibm56n07.xml",
180         "xmlconf/ibm/not-wf/P57/ibm57n01.xml", "xmlconf/ibm/not-wf/P58/ibm58n01.xml",
181         "xmlconf/ibm/not-wf/P58/ibm58n02.xml", "xmlconf/ibm/not-wf/P58/ibm58n03.xml",
182         "xmlconf/ibm/not-wf/P58/ibm58n04.xml", "xmlconf/ibm/not-wf/P58/ibm58n05.xml",
183         "xmlconf/ibm/not-wf/P58/ibm58n06.xml", "xmlconf/ibm/not-wf/P58/ibm58n07.xml",
184         "xmlconf/ibm/not-wf/P58/ibm58n08.xml", "xmlconf/ibm/not-wf/P59/ibm59n01.xml",
185         "xmlconf/ibm/not-wf/P59/ibm59n02.xml", "xmlconf/ibm/not-wf/P59/ibm59n03.xml",
186         "xmlconf/ibm/not-wf/P59/ibm59n04.xml", "xmlconf/ibm/not-wf/P59/ibm59n05.xml",
187         "xmlconf/ibm/not-wf/P59/ibm59n06.xml", "xmlconf/ibm/not-wf/P60/ibm60n01.xml",
188         "xmlconf/ibm/not-wf/P60/ibm60n02.xml", "xmlconf/ibm/not-wf/P60/ibm60n03.xml",
189         "xmlconf/ibm/not-wf/P60/ibm60n04.xml", "xmlconf/ibm/not-wf/P60/ibm60n05.xml",
190         "xmlconf/ibm/not-wf/P60/ibm60n06.xml", "xmlconf/ibm/not-wf/P60/ibm60n08.xml",
191         "xmlconf/ibm/not-wf/P61/ibm61n01.xml", "xmlconf/ibm/not-wf/P62/ibm62n01.xml",
192         "xmlconf/ibm/not-wf/P62/ibm62n02.xml", "xmlconf/ibm/not-wf/P62/ibm62n03.xml",
193         "xmlconf/ibm/not-wf/P62/ibm62n04.xml", "xmlconf/ibm/not-wf/P62/ibm62n05.xml",
194         "xmlconf/ibm/not-wf/P62/ibm62n06.xml", "xmlconf/ibm/not-wf/P62/ibm62n07.xml",
195         "xmlconf/ibm/not-wf/P62/ibm62n08.xml", "xmlconf/ibm/not-wf/P63/ibm63n01.xml",
196         "xmlconf/ibm/not-wf/P63/ibm63n02.xml", "xmlconf/ibm/not-wf/P63/ibm63n03.xml",
197         "xmlconf/ibm/not-wf/P63/ibm63n04.xml", "xmlconf/ibm/not-wf/P63/ibm63n05.xml",
198         "xmlconf/ibm/not-wf/P63/ibm63n06.xml", "xmlconf/ibm/not-wf/P63/ibm63n07.xml",
199         "xmlconf/ibm/not-wf/P64/ibm64n01.xml", "xmlconf/ibm/not-wf/P64/ibm64n02.xml",
200         "xmlconf/ibm/not-wf/P64/ibm64n03.xml", "xmlconf/ibm/not-wf/P65/ibm65n01.xml",
201         "xmlconf/ibm/not-wf/P65/ibm65n02.xml", "xmlconf/ibm/not-wf/P66/ibm66n01.xml",
202         "xmlconf/ibm/not-wf/P66/ibm66n03.xml", "xmlconf/ibm/not-wf/P66/ibm66n05.xml",
203         "xmlconf/ibm/not-wf/P66/ibm66n07.xml", "xmlconf/ibm/not-wf/P66/ibm66n09.xml",
204         "xmlconf/ibm/not-wf/P66/ibm66n11.xml", "xmlconf/ibm/not-wf/P68/ibm68n07.xml",
205         "xmlconf/ibm/not-wf/P69/ibm69n01.xml", "xmlconf/ibm/not-wf/P69/ibm69n02.xml",
206         "xmlconf/ibm/not-wf/P69/ibm69n03.xml", "xmlconf/ibm/not-wf/P69/ibm69n04.xml",
207         "xmlconf/ibm/not-wf/P69/ibm69n05.xml", "xmlconf/ibm/not-wf/P69/ibm69n06.xml",
208         "xmlconf/ibm/not-wf/P69/ibm69n07.xml", "xmlconf/ibm/not-wf/P71/ibm70n01.xml",
209         "xmlconf/ibm/not-wf/P72/ibm72n01.xml", "xmlconf/ibm/not-wf/P72/ibm72n02.xml",
210         "xmlconf/ibm/not-wf/P72/ibm72n03.xml", "xmlconf/ibm/not-wf/P72/ibm72n04.xml",
211         "xmlconf/ibm/not-wf/P72/ibm72n05.xml", "xmlconf/ibm/not-wf/P72/ibm72n06.xml",
212         "xmlconf/ibm/not-wf/P72/ibm72n07.xml", "xmlconf/ibm/not-wf/P72/ibm72n08.xml",
213         "xmlconf/ibm/not-wf/P72/ibm72n09.xml", "xmlconf/ibm/not-wf/P73/ibm73n01.xml",
214         "xmlconf/ibm/not-wf/P73/ibm73n03.xml", "xmlconf/ibm/not-wf/P74/ibm74n01.xml",
215         "xmlconf/ibm/not-wf/P75/ibm75n01.xml", "xmlconf/ibm/not-wf/P75/ibm75n02.xml",
216         "xmlconf/ibm/not-wf/P75/ibm75n03.xml", "xmlconf/ibm/not-wf/P75/ibm75n04.xml",
217         "xmlconf/ibm/not-wf/P75/ibm75n05.xml", "xmlconf/ibm/not-wf/P75/ibm75n06.xml",
218         "xmlconf/ibm/not-wf/P75/ibm75n07.xml", "xmlconf/ibm/not-wf/P75/ibm75n08.xml",
219         "xmlconf/ibm/not-wf/P75/ibm75n09.xml", "xmlconf/ibm/not-wf/P75/ibm75n10.xml",
220         "xmlconf/ibm/not-wf/P75/ibm75n11.xml", "xmlconf/ibm/not-wf/P75/ibm75n12.xml",
221         "xmlconf/ibm/not-wf/P75/ibm75n13.xml", "xmlconf/ibm/not-wf/P76/ibm76n01.xml",
222         "xmlconf/ibm/not-wf/P76/ibm76n02.xml", "xmlconf/ibm/not-wf/P76/ibm76n03.xml",
223         "xmlconf/ibm/not-wf/P76/ibm76n04.xml", "xmlconf/ibm/not-wf/P76/ibm76n05.xml",
224         "xmlconf/ibm/not-wf/P76/ibm76n06.xml", "xmlconf/ibm/not-wf/P76/ibm76n07.xml",
225         "xmlconf/ibm/not-wf/P77/ibm77n03.xml", "xmlconf/ibm/not-wf/P77/ibm77n04.xml",
226         "xmlconf/ibm/not-wf/P79/ibm79n01.xml", "xmlconf/ibm/not-wf/P79/ibm79n02.xml",
227         "xmlconf/ibm/not-wf/P80/ibm80n01.xml", "xmlconf/ibm/not-wf/P80/ibm80n02.xml",
228         "xmlconf/ibm/not-wf/P80/ibm80n03.xml", "xmlconf/ibm/not-wf/P80/ibm80n04.xml",
229         "xmlconf/ibm/not-wf/P80/ibm80n05.xml", "xmlconf/ibm/not-wf/P80/ibm80n06.xml",
230         "xmlconf/ibm/not-wf/P81/ibm81n01.xml", "xmlconf/ibm/not-wf/P81/ibm81n02.xml",
231         "xmlconf/ibm/not-wf/P81/ibm81n03.xml", "xmlconf/ibm/not-wf/P81/ibm81n04.xml",
232         "xmlconf/ibm/not-wf/P81/ibm81n05.xml", "xmlconf/ibm/not-wf/P81/ibm81n06.xml",
233         "xmlconf/ibm/not-wf/P81/ibm81n07.xml", "xmlconf/ibm/not-wf/P81/ibm81n08.xml",
234         "xmlconf/ibm/not-wf/P81/ibm81n09.xml", "xmlconf/ibm/not-wf/P82/ibm82n01.xml",
235         "xmlconf/ibm/not-wf/P82/ibm82n02.xml", "xmlconf/ibm/not-wf/P82/ibm82n03.xml",
236         "xmlconf/ibm/not-wf/P82/ibm82n04.xml", "xmlconf/ibm/not-wf/P82/ibm82n05.xml",
237         "xmlconf/ibm/not-wf/P82/ibm82n06.xml", "xmlconf/ibm/not-wf/P82/ibm82n07.xml",
238         "xmlconf/ibm/not-wf/P82/ibm82n08.xml", "xmlconf/ibm/not-wf/P83/ibm83n01.xml",
239         "xmlconf/ibm/not-wf/P83/ibm83n03.xml", "xmlconf/ibm/not-wf/P83/ibm83n04.xml",
240         "xmlconf/ibm/not-wf/P83/ibm83n05.xml", "xmlconf/ibm/not-wf/P83/ibm83n06.xml",
241         "xmlconf/ibm/not-wf/P85/ibm85n01.xml", "xmlconf/ibm/not-wf/P85/ibm85n02.xml",
242         "xmlconf/ibm/not-wf/P85/ibm85n03.xml", "xmlconf/ibm/not-wf/P85/ibm85n04.xml",
243         "xmlconf/ibm/not-wf/P85/ibm85n05.xml", "xmlconf/ibm/not-wf/P85/ibm85n06.xml",
244         "xmlconf/ibm/not-wf/P85/ibm85n07.xml", "xmlconf/ibm/not-wf/P85/ibm85n08.xml",
245         "xmlconf/ibm/not-wf/P85/ibm85n09.xml", "xmlconf/ibm/not-wf/P85/ibm85n10.xml",
246         "xmlconf/ibm/not-wf/P85/ibm85n100.xml", "xmlconf/ibm/not-wf/P85/ibm85n101.xml",
247         "xmlconf/ibm/not-wf/P85/ibm85n102.xml", "xmlconf/ibm/not-wf/P85/ibm85n103.xml",
248         "xmlconf/ibm/not-wf/P85/ibm85n104.xml", "xmlconf/ibm/not-wf/P85/ibm85n105.xml",
249         "xmlconf/ibm/not-wf/P85/ibm85n106.xml", "xmlconf/ibm/not-wf/P85/ibm85n107.xml",
250         "xmlconf/ibm/not-wf/P85/ibm85n108.xml", "xmlconf/ibm/not-wf/P85/ibm85n109.xml",
251         "xmlconf/ibm/not-wf/P85/ibm85n11.xml", "xmlconf/ibm/not-wf/P85/ibm85n110.xml",
252         "xmlconf/ibm/not-wf/P85/ibm85n111.xml", "xmlconf/ibm/not-wf/P85/ibm85n112.xml",
253         "xmlconf/ibm/not-wf/P85/ibm85n113.xml", "xmlconf/ibm/not-wf/P85/ibm85n114.xml",
254         "xmlconf/ibm/not-wf/P85/ibm85n115.xml", "xmlconf/ibm/not-wf/P85/ibm85n116.xml",
255         "xmlconf/ibm/not-wf/P85/ibm85n117.xml", "xmlconf/ibm/not-wf/P85/ibm85n118.xml",
256         "xmlconf/ibm/not-wf/P85/ibm85n119.xml", "xmlconf/ibm/not-wf/P85/ibm85n12.xml",
257         "xmlconf/ibm/not-wf/P85/ibm85n120.xml", "xmlconf/ibm/not-wf/P85/ibm85n121.xml",
258         "xmlconf/ibm/not-wf/P85/ibm85n122.xml", "xmlconf/ibm/not-wf/P85/ibm85n123.xml",
259         "xmlconf/ibm/not-wf/P85/ibm85n124.xml", "xmlconf/ibm/not-wf/P85/ibm85n125.xml",
260         "xmlconf/ibm/not-wf/P85/ibm85n126.xml", "xmlconf/ibm/not-wf/P85/ibm85n127.xml",
261         "xmlconf/ibm/not-wf/P85/ibm85n128.xml", "xmlconf/ibm/not-wf/P85/ibm85n129.xml",
262         "xmlconf/ibm/not-wf/P85/ibm85n13.xml", "xmlconf/ibm/not-wf/P85/ibm85n130.xml",
263         "xmlconf/ibm/not-wf/P85/ibm85n131.xml", "xmlconf/ibm/not-wf/P85/ibm85n132.xml",
264         "xmlconf/ibm/not-wf/P85/ibm85n133.xml", "xmlconf/ibm/not-wf/P85/ibm85n134.xml",
265         "xmlconf/ibm/not-wf/P85/ibm85n135.xml", "xmlconf/ibm/not-wf/P85/ibm85n136.xml",
266         "xmlconf/ibm/not-wf/P85/ibm85n137.xml", "xmlconf/ibm/not-wf/P85/ibm85n138.xml",
267         "xmlconf/ibm/not-wf/P85/ibm85n139.xml", "xmlconf/ibm/not-wf/P85/ibm85n14.xml",
268         "xmlconf/ibm/not-wf/P85/ibm85n140.xml", "xmlconf/ibm/not-wf/P85/ibm85n141.xml",
269         "xmlconf/ibm/not-wf/P85/ibm85n142.xml", "xmlconf/ibm/not-wf/P85/ibm85n143.xml",
270         "xmlconf/ibm/not-wf/P85/ibm85n144.xml", "xmlconf/ibm/not-wf/P85/ibm85n145.xml",
271         "xmlconf/ibm/not-wf/P85/ibm85n146.xml", "xmlconf/ibm/not-wf/P85/ibm85n147.xml",
272         "xmlconf/ibm/not-wf/P85/ibm85n148.xml", "xmlconf/ibm/not-wf/P85/ibm85n149.xml",
273         "xmlconf/ibm/not-wf/P85/ibm85n15.xml", "xmlconf/ibm/not-wf/P85/ibm85n150.xml",
274         "xmlconf/ibm/not-wf/P85/ibm85n151.xml", "xmlconf/ibm/not-wf/P85/ibm85n152.xml",
275         "xmlconf/ibm/not-wf/P85/ibm85n153.xml", "xmlconf/ibm/not-wf/P85/ibm85n154.xml",
276         "xmlconf/ibm/not-wf/P85/ibm85n155.xml", "xmlconf/ibm/not-wf/P85/ibm85n156.xml",
277         "xmlconf/ibm/not-wf/P85/ibm85n157.xml", "xmlconf/ibm/not-wf/P85/ibm85n158.xml",
278         "xmlconf/ibm/not-wf/P85/ibm85n159.xml", "xmlconf/ibm/not-wf/P85/ibm85n16.xml",
279         "xmlconf/ibm/not-wf/P85/ibm85n160.xml", "xmlconf/ibm/not-wf/P85/ibm85n161.xml",
280         "xmlconf/ibm/not-wf/P85/ibm85n162.xml", "xmlconf/ibm/not-wf/P85/ibm85n163.xml",
281         "xmlconf/ibm/not-wf/P85/ibm85n164.xml", "xmlconf/ibm/not-wf/P85/ibm85n165.xml",
282         "xmlconf/ibm/not-wf/P85/ibm85n166.xml", "xmlconf/ibm/not-wf/P85/ibm85n167.xml",
283         "xmlconf/ibm/not-wf/P85/ibm85n168.xml", "xmlconf/ibm/not-wf/P85/ibm85n169.xml",
284         "xmlconf/ibm/not-wf/P85/ibm85n17.xml", "xmlconf/ibm/not-wf/P85/ibm85n170.xml",
285         "xmlconf/ibm/not-wf/P85/ibm85n171.xml", "xmlconf/ibm/not-wf/P85/ibm85n172.xml",
286         "xmlconf/ibm/not-wf/P85/ibm85n173.xml", "xmlconf/ibm/not-wf/P85/ibm85n174.xml",
287         "xmlconf/ibm/not-wf/P85/ibm85n175.xml", "xmlconf/ibm/not-wf/P85/ibm85n176.xml",
288         "xmlconf/ibm/not-wf/P85/ibm85n177.xml", "xmlconf/ibm/not-wf/P85/ibm85n178.xml",
289         "xmlconf/ibm/not-wf/P85/ibm85n179.xml", "xmlconf/ibm/not-wf/P85/ibm85n18.xml",
290         "xmlconf/ibm/not-wf/P85/ibm85n180.xml", "xmlconf/ibm/not-wf/P85/ibm85n181.xml",
291         "xmlconf/ibm/not-wf/P85/ibm85n182.xml", "xmlconf/ibm/not-wf/P85/ibm85n183.xml",
292         "xmlconf/ibm/not-wf/P85/ibm85n184.xml", "xmlconf/ibm/not-wf/P85/ibm85n185.xml",
293         "xmlconf/ibm/not-wf/P85/ibm85n186.xml", "xmlconf/ibm/not-wf/P85/ibm85n187.xml",
294         "xmlconf/ibm/not-wf/P85/ibm85n188.xml", "xmlconf/ibm/not-wf/P85/ibm85n189.xml",
295         "xmlconf/ibm/not-wf/P85/ibm85n19.xml", "xmlconf/ibm/not-wf/P85/ibm85n190.xml",
296         "xmlconf/ibm/not-wf/P85/ibm85n191.xml", "xmlconf/ibm/not-wf/P85/ibm85n192.xml",
297         "xmlconf/ibm/not-wf/P85/ibm85n193.xml", "xmlconf/ibm/not-wf/P85/ibm85n194.xml",
298         "xmlconf/ibm/not-wf/P85/ibm85n195.xml", "xmlconf/ibm/not-wf/P85/ibm85n196.xml",
299         "xmlconf/ibm/not-wf/P85/ibm85n197.xml", "xmlconf/ibm/not-wf/P85/ibm85n198.xml",
300         "xmlconf/ibm/not-wf/P85/ibm85n20.xml", "xmlconf/ibm/not-wf/P85/ibm85n21.xml",
301         "xmlconf/ibm/not-wf/P85/ibm85n22.xml", "xmlconf/ibm/not-wf/P85/ibm85n23.xml",
302         "xmlconf/ibm/not-wf/P85/ibm85n24.xml", "xmlconf/ibm/not-wf/P85/ibm85n25.xml",
303         "xmlconf/ibm/not-wf/P85/ibm85n26.xml", "xmlconf/ibm/not-wf/P85/ibm85n27.xml",
304         "xmlconf/ibm/not-wf/P85/ibm85n28.xml", "xmlconf/ibm/not-wf/P85/ibm85n29.xml",
305         "xmlconf/ibm/not-wf/P85/ibm85n30.xml", "xmlconf/ibm/not-wf/P85/ibm85n31.xml",
306         "xmlconf/ibm/not-wf/P85/ibm85n32.xml", "xmlconf/ibm/not-wf/P85/ibm85n33.xml",
307         "xmlconf/ibm/not-wf/P85/ibm85n34.xml", "xmlconf/ibm/not-wf/P85/ibm85n35.xml",
308         "xmlconf/ibm/not-wf/P85/ibm85n36.xml", "xmlconf/ibm/not-wf/P85/ibm85n37.xml",
309         "xmlconf/ibm/not-wf/P85/ibm85n38.xml", "xmlconf/ibm/not-wf/P85/ibm85n39.xml",
310         "xmlconf/ibm/not-wf/P85/ibm85n40.xml", "xmlconf/ibm/not-wf/P85/ibm85n41.xml",
311         "xmlconf/ibm/not-wf/P85/ibm85n42.xml", "xmlconf/ibm/not-wf/P85/ibm85n43.xml",
312         "xmlconf/ibm/not-wf/P85/ibm85n44.xml", "xmlconf/ibm/not-wf/P85/ibm85n45.xml",
313         "xmlconf/ibm/not-wf/P85/ibm85n46.xml", "xmlconf/ibm/not-wf/P85/ibm85n47.xml",
314         "xmlconf/ibm/not-wf/P85/ibm85n48.xml", "xmlconf/ibm/not-wf/P85/ibm85n49.xml",
315         "xmlconf/ibm/not-wf/P85/ibm85n50.xml", "xmlconf/ibm/not-wf/P85/ibm85n51.xml",
316         "xmlconf/ibm/not-wf/P85/ibm85n52.xml", "xmlconf/ibm/not-wf/P85/ibm85n53.xml",
317         "xmlconf/ibm/not-wf/P85/ibm85n54.xml", "xmlconf/ibm/not-wf/P85/ibm85n55.xml",
318         "xmlconf/ibm/not-wf/P85/ibm85n56.xml", "xmlconf/ibm/not-wf/P85/ibm85n57.xml",
319         "xmlconf/ibm/not-wf/P85/ibm85n58.xml", "xmlconf/ibm/not-wf/P85/ibm85n59.xml",
320         "xmlconf/ibm/not-wf/P85/ibm85n60.xml", "xmlconf/ibm/not-wf/P85/ibm85n61.xml",
321         "xmlconf/ibm/not-wf/P85/ibm85n62.xml", "xmlconf/ibm/not-wf/P85/ibm85n63.xml",
322         "xmlconf/ibm/not-wf/P85/ibm85n64.xml", "xmlconf/ibm/not-wf/P85/ibm85n65.xml",
323         "xmlconf/ibm/not-wf/P85/ibm85n66.xml", "xmlconf/ibm/not-wf/P85/ibm85n67.xml",
324         "xmlconf/ibm/not-wf/P85/ibm85n68.xml", "xmlconf/ibm/not-wf/P85/ibm85n69.xml",
325         "xmlconf/ibm/not-wf/P85/ibm85n70.xml", "xmlconf/ibm/not-wf/P85/ibm85n71.xml",
326         "xmlconf/ibm/not-wf/P85/ibm85n72.xml", "xmlconf/ibm/not-wf/P85/ibm85n73.xml",
327         "xmlconf/ibm/not-wf/P85/ibm85n74.xml", "xmlconf/ibm/not-wf/P85/ibm85n75.xml",
328         "xmlconf/ibm/not-wf/P85/ibm85n76.xml", "xmlconf/ibm/not-wf/P85/ibm85n77.xml",
329         "xmlconf/ibm/not-wf/P85/ibm85n78.xml", "xmlconf/ibm/not-wf/P85/ibm85n79.xml",
330         "xmlconf/ibm/not-wf/P85/ibm85n80.xml", "xmlconf/ibm/not-wf/P85/ibm85n81.xml",
331         "xmlconf/ibm/not-wf/P85/ibm85n82.xml", "xmlconf/ibm/not-wf/P85/ibm85n83.xml",
332         "xmlconf/ibm/not-wf/P85/ibm85n84.xml", "xmlconf/ibm/not-wf/P85/ibm85n85.xml",
333         "xmlconf/ibm/not-wf/P85/ibm85n86.xml", "xmlconf/ibm/not-wf/P85/ibm85n87.xml",
334         "xmlconf/ibm/not-wf/P85/ibm85n88.xml", "xmlconf/ibm/not-wf/P85/ibm85n89.xml",
335         "xmlconf/ibm/not-wf/P85/ibm85n90.xml", "xmlconf/ibm/not-wf/P85/ibm85n91.xml",
336         "xmlconf/ibm/not-wf/P85/ibm85n92.xml", "xmlconf/ibm/not-wf/P85/ibm85n93.xml",
337         "xmlconf/ibm/not-wf/P85/ibm85n94.xml", "xmlconf/ibm/not-wf/P85/ibm85n95.xml",
338         "xmlconf/ibm/not-wf/P85/ibm85n96.xml", "xmlconf/ibm/not-wf/P85/ibm85n97.xml",
339         "xmlconf/ibm/not-wf/P85/ibm85n98.xml", "xmlconf/ibm/not-wf/P85/ibm85n99.xml",
340         "xmlconf/ibm/not-wf/P86/ibm86n01.xml", "xmlconf/ibm/not-wf/P86/ibm86n02.xml",
341         "xmlconf/ibm/not-wf/P86/ibm86n03.xml", "xmlconf/ibm/not-wf/P86/ibm86n04.xml",
342         "xmlconf/ibm/not-wf/P87/ibm87n01.xml", "xmlconf/ibm/not-wf/P87/ibm87n02.xml",
343         "xmlconf/ibm/not-wf/P87/ibm87n03.xml", "xmlconf/ibm/not-wf/P87/ibm87n04.xml",
344         "xmlconf/ibm/not-wf/P87/ibm87n05.xml", "xmlconf/ibm/not-wf/P87/ibm87n06.xml",
345         "xmlconf/ibm/not-wf/P87/ibm87n07.xml", "xmlconf/ibm/not-wf/P87/ibm87n08.xml",
346         "xmlconf/ibm/not-wf/P87/ibm87n09.xml", "xmlconf/ibm/not-wf/P87/ibm87n10.xml",
347         "xmlconf/ibm/not-wf/P87/ibm87n11.xml", "xmlconf/ibm/not-wf/P87/ibm87n12.xml",
348         "xmlconf/ibm/not-wf/P87/ibm87n13.xml", "xmlconf/ibm/not-wf/P87/ibm87n14.xml",
349         "xmlconf/ibm/not-wf/P87/ibm87n15.xml", "xmlconf/ibm/not-wf/P87/ibm87n16.xml",
350         "xmlconf/ibm/not-wf/P87/ibm87n17.xml", "xmlconf/ibm/not-wf/P87/ibm87n18.xml",
351         "xmlconf/ibm/not-wf/P87/ibm87n19.xml", "xmlconf/ibm/not-wf/P87/ibm87n20.xml",
352         "xmlconf/ibm/not-wf/P87/ibm87n21.xml", "xmlconf/ibm/not-wf/P87/ibm87n22.xml",
353         "xmlconf/ibm/not-wf/P87/ibm87n23.xml", "xmlconf/ibm/not-wf/P87/ibm87n24.xml",
354         "xmlconf/ibm/not-wf/P87/ibm87n25.xml", "xmlconf/ibm/not-wf/P87/ibm87n26.xml",
355         "xmlconf/ibm/not-wf/P87/ibm87n27.xml", "xmlconf/ibm/not-wf/P87/ibm87n28.xml",
356         "xmlconf/ibm/not-wf/P87/ibm87n29.xml", "xmlconf/ibm/not-wf/P87/ibm87n30.xml",
357         "xmlconf/ibm/not-wf/P87/ibm87n31.xml", "xmlconf/ibm/not-wf/P87/ibm87n32.xml",
358         "xmlconf/ibm/not-wf/P87/ibm87n33.xml", "xmlconf/ibm/not-wf/P87/ibm87n34.xml",
359         "xmlconf/ibm/not-wf/P87/ibm87n35.xml", "xmlconf/ibm/not-wf/P87/ibm87n36.xml",
360         "xmlconf/ibm/not-wf/P87/ibm87n37.xml", "xmlconf/ibm/not-wf/P87/ibm87n38.xml",
361         "xmlconf/ibm/not-wf/P87/ibm87n39.xml", "xmlconf/ibm/not-wf/P87/ibm87n40.xml",
362         "xmlconf/ibm/not-wf/P87/ibm87n41.xml", "xmlconf/ibm/not-wf/P87/ibm87n42.xml",
363         "xmlconf/ibm/not-wf/P87/ibm87n43.xml", "xmlconf/ibm/not-wf/P87/ibm87n44.xml",
364         "xmlconf/ibm/not-wf/P87/ibm87n45.xml", "xmlconf/ibm/not-wf/P87/ibm87n46.xml",
365         "xmlconf/ibm/not-wf/P87/ibm87n47.xml", "xmlconf/ibm/not-wf/P87/ibm87n48.xml",
366         "xmlconf/ibm/not-wf/P87/ibm87n49.xml", "xmlconf/ibm/not-wf/P87/ibm87n50.xml",
367         "xmlconf/ibm/not-wf/P87/ibm87n51.xml", "xmlconf/ibm/not-wf/P87/ibm87n52.xml",
368         "xmlconf/ibm/not-wf/P87/ibm87n53.xml", "xmlconf/ibm/not-wf/P87/ibm87n54.xml",
369         "xmlconf/ibm/not-wf/P87/ibm87n55.xml", "xmlconf/ibm/not-wf/P87/ibm87n56.xml",
370         "xmlconf/ibm/not-wf/P87/ibm87n57.xml", "xmlconf/ibm/not-wf/P87/ibm87n58.xml",
371         "xmlconf/ibm/not-wf/P87/ibm87n59.xml", "xmlconf/ibm/not-wf/P87/ibm87n60.xml",
372         "xmlconf/ibm/not-wf/P87/ibm87n61.xml", "xmlconf/ibm/not-wf/P87/ibm87n62.xml",
373         "xmlconf/ibm/not-wf/P87/ibm87n63.xml", "xmlconf/ibm/not-wf/P87/ibm87n64.xml",
374         "xmlconf/ibm/not-wf/P87/ibm87n66.xml", "xmlconf/ibm/not-wf/P87/ibm87n67.xml",
375         "xmlconf/ibm/not-wf/P87/ibm87n68.xml", "xmlconf/ibm/not-wf/P87/ibm87n69.xml",
376         "xmlconf/ibm/not-wf/P87/ibm87n70.xml", "xmlconf/ibm/not-wf/P87/ibm87n71.xml",
377         "xmlconf/ibm/not-wf/P87/ibm87n72.xml", "xmlconf/ibm/not-wf/P87/ibm87n73.xml",
378         "xmlconf/ibm/not-wf/P87/ibm87n74.xml", "xmlconf/ibm/not-wf/P87/ibm87n75.xml",
379         "xmlconf/ibm/not-wf/P87/ibm87n76.xml", "xmlconf/ibm/not-wf/P87/ibm87n77.xml",
380         "xmlconf/ibm/not-wf/P87/ibm87n78.xml", "xmlconf/ibm/not-wf/P87/ibm87n79.xml",
381         "xmlconf/ibm/not-wf/P87/ibm87n80.xml", "xmlconf/ibm/not-wf/P87/ibm87n81.xml",
382         "xmlconf/ibm/not-wf/P87/ibm87n82.xml", "xmlconf/ibm/not-wf/P87/ibm87n83.xml",
383         "xmlconf/ibm/not-wf/P87/ibm87n84.xml", "xmlconf/ibm/not-wf/P87/ibm87n85.xml",
384         "xmlconf/ibm/not-wf/P88/ibm88n01.xml", "xmlconf/ibm/not-wf/P88/ibm88n02.xml",
385         "xmlconf/ibm/not-wf/P88/ibm88n03.xml", "xmlconf/ibm/not-wf/P88/ibm88n04.xml",
386         "xmlconf/ibm/not-wf/P88/ibm88n05.xml", "xmlconf/ibm/not-wf/P88/ibm88n06.xml",
387         "xmlconf/ibm/not-wf/P88/ibm88n08.xml", "xmlconf/ibm/not-wf/P88/ibm88n09.xml",
388         "xmlconf/ibm/not-wf/P88/ibm88n10.xml", "xmlconf/ibm/not-wf/P88/ibm88n11.xml",
389         "xmlconf/ibm/not-wf/P88/ibm88n12.xml", "xmlconf/ibm/not-wf/P88/ibm88n13.xml",
390         "xmlconf/ibm/not-wf/P88/ibm88n14.xml", "xmlconf/ibm/not-wf/P88/ibm88n15.xml",
391         "xmlconf/ibm/not-wf/P88/ibm88n16.xml", "xmlconf/ibm/not-wf/P89/ibm89n01.xml",
392         "xmlconf/ibm/not-wf/P89/ibm89n02.xml", "xmlconf/ibm/not-wf/P89/ibm89n03.xml",
393         "xmlconf/ibm/not-wf/P89/ibm89n04.xml", "xmlconf/ibm/not-wf/P89/ibm89n05.xml",
394         "xmlconf/ibm/valid/P09/ibm09v01.xml", "xmlconf/ibm/valid/P09/ibm09v02.xml",
395         "xmlconf/ibm/valid/P09/ibm09v03.xml", "xmlconf/ibm/valid/P09/ibm09v04.xml",
396         "xmlconf/ibm/valid/P09/ibm09v05.xml", "xmlconf/ibm/valid/P10/ibm10v01.xml",
397         "xmlconf/ibm/valid/P10/ibm10v02.xml", "xmlconf/ibm/valid/P10/ibm10v03.xml",
398         "xmlconf/ibm/valid/P10/ibm10v04.xml", "xmlconf/ibm/valid/P10/ibm10v05.xml",
399         "xmlconf/ibm/valid/P10/ibm10v06.xml", "xmlconf/ibm/valid/P10/ibm10v07.xml",
400         "xmlconf/ibm/valid/P10/ibm10v08.xml", "xmlconf/ibm/valid/P28/ibm28v02.xml",
401         "xmlconf/ibm/valid/P29/ibm29v01.xml", "xmlconf/ibm/valid/P29/ibm29v02.xml",
402         "xmlconf/ibm/valid/P32/ibm32v02.xml", "xmlconf/ibm/valid/P43/ibm43v01.xml",
403         "xmlconf/ibm/valid/P67/ibm67v01.xml", "xmlconf/ibm/valid/P78/ibm78v01.xml",
404     ];
405 
406     validateTests("xmlconf/ibm/ibm_oasis_invalid.xml", ignoreList);
407     validateTests("xmlconf/ibm/ibm_oasis_not-wf.xml", ignoreList);
408     validateTests("xmlconf/ibm/ibm_oasis_valid.xml", ignoreList);
409 }
410 
411 void validateTests(string mainFile, string[] ignoreList)
412 {
413     import std.algorithm : canFind, filter;
414     import std.exception : enforce;
415     import std.file : readText;
416     import std.format : format;
417     import std.path : buildPath, dirName;
418     import std.typecons : Nullable, nullable;
419 
420     foreach(entity; parseXML!simpleXML(readText(mainFile)).
421                     filter!(a => a.type == EntityType.elementStart && a.name == "TEST")())
422     {
423         Nullable!bool tt;
424         string uri;
425         foreach(attr; entity.attributes)
426         {
427             if(attr.name == "TYPE")
428             {
429                 switch(attr.value)
430                 {
431                     case "valid": tt = nullable(true); break;
432                     case "invalid":
433                     case "not-wf":
434                     case "error": tt = nullable(false); break;
435                     default: throw new Exception(format("Unexpected test type: %s", attr.value));
436                 }
437             }
438             else if(attr.name == "URI")
439                 uri = attr.value;
440         }
441         enforce(!tt.isNull, format("In %s, %s: TEST tag missing TYPE attribute", mainFile, entity.pos));
442         enforce(!uri.empty, format("In %s, %s: TEST tag missing URI attribute", mainFile, entity.pos));
443 
444         auto file = buildPath(mainFile.dirName, uri);
445         if(ignoreList.canFind(file))
446             continue;
447         if(tt.get)
448             parseExpectSuccess(file);
449         else
450             parseExpectFailure(file);
451     }
452 }
453 
454 void parseExpectSuccess(string file)
455 {
456     import std.encoding : BOM, getBOM;
457     import std.exception : assertNotThrown, enforce;
458     import std.format : format;
459     import std.file : exists, read, readText;
460     import std.utf : UTFException;
461 
462     enforce(file.exists, format("%s does not exist", file));
463     immutable bom = getBOM(cast(ubyte[])read(file)).schema;
464     // FIXME This only works properly with little-endian machines right now, and 
465     // we need a way to process big endian encodings.
466     switch(bom)
467     {
468         case BOM.none:
469         case BOM.utf8:
470         {
471             auto text = stripBOM(file.readText());
472             assertNotThrown!XMLParsingException(parseEverything(text), format("%s failed", file));
473             break;
474         }
475         case BOM.utf16le:
476         {
477             auto text = stripBOM(file.readText!wstring());
478             assertNotThrown!XMLParsingException(parseEverything(text), format("%s failed", file));
479             break;
480         }
481         default: throw new Exception(format("Unsupported encoding: %s, file: %s", bom, file));
482     }
483 }
484 
485 void parseExpectFailure(string file)
486 {
487     import std.encoding : BOM, getBOM;
488     import std.exception : assertThrown, enforce;
489     import std.format : format;
490     import std.file : exists, read;
491     enforce(file.exists, format("%s does not exist", file));
492 
493     immutable bom = getBOM(cast(ubyte[])read(file)).schema;
494     // FIXME This only works properly with little-endian machines right now, and 
495     // we need a way to process big endian encodings.
496     switch(bom)
497     {
498         case BOM.none:
499         case BOM.utf8:
500         {
501             auto text = stripBOM(cast(string)file.read());
502             assertThrown!XMLParsingException(parseEverything(text), format("%s failed", file));
503             break;
504         }
505         case BOM.utf16le:
506         {
507             auto text = stripBOM(cast(wstring)file.read());
508             assertThrown!XMLParsingException(parseEverything(text), format("%s failed", file));
509             break;
510         }
511         default: throw new Exception(format("Unsupported encoding: %s, file: %s", bom, file));
512     }
513 }
514 
515 void parseEverything(S)(S xml)
516 {
517     with(EntityType) foreach(entity; parseXML(xml))
518     {
519         final switch(entity.type)
520         {
521             case cdata: break;
522             case comment: break;
523             case elementStart: auto name = entity.name; break;
524             case elementEnd: goto case elementStart;
525             case elementEmpty: goto case elementStart;
526             case pi: goto case elementStart;
527             case text: break;
528         }
529 
530         final switch(entity.type)
531         {
532             case cdata: auto text = entity.text; break;
533             case comment: goto case cdata;
534             case elementStart:
535             {
536                 foreach(attr; entity.attributes)
537                 {
538                     auto name = attr.name;
539                     auto value = attr.value;
540                 }
541                 break;
542             }
543             case elementEnd: break;
544             case elementEmpty: goto case elementStart;
545             case pi: goto case cdata;
546             case text: goto case cdata;
547         }
548     }
549 }
550 
551 
552 // To be replaced by std.utf.stripBOM once it's available.
553 R stripBOM(R)(R range)
554 if (isForwardRange!R && isSomeChar!(ElementType!R))
555 {
556     import std.utf : decodeFront, UseReplacementDchar;
557     if (range.empty)
558         return range;
559     auto orig = range.save;
560     immutable c = range.decodeFront!(UseReplacementDchar.yes)();
561     return c == '\uFEFF' ? range : orig;
562 }