Revision 4078
Added by Aaron Marcuse-Kubitza over 12 years ago
inputs/XAL/test/import.specimens.xml.ref | ||
---|---|---|
5 | 5 |
<_merge> |
6 | 6 |
<1>$InstitutionCode</1> |
7 | 7 |
<2>$CollectionCode</2> |
8 |
<3><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></3>
|
|
8 |
<3>$CatalogNumber</3>
|
|
9 | 9 |
</_merge> |
10 | 10 |
</authorlocationcode> |
11 | 11 |
<elevation> |
... | ... | |
250 | 250 |
<definedvalue>$Sex</definedvalue> |
251 | 251 |
</definedvalue> |
252 | 252 |
<specimenreplicate> |
253 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></catalognumber_dwc>
|
|
253 |
<catalognumber_dwc>$CatalogNumber</catalognumber_dwc>
|
|
254 | 254 |
<collectioncode_dwc>$CollectionCode</collectioncode_dwc> |
255 | 255 |
<institution_id><party><organizationname>$InstitutionCode</organizationname></party></institution_id> |
256 | 256 |
</specimenreplicate> |
inputs/NY/test/import.specimens.xml.ref | ||
---|---|---|
8 | 8 |
<_merge> |
9 | 9 |
<1>$InstitutionCode</1> |
10 | 10 |
<2>$CollectionCode</2> |
11 |
<3><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></3>
|
|
11 |
<3>$CatalogNumber</3>
|
|
12 | 12 |
</_merge> |
13 | 13 |
</4> |
14 | 14 |
</_alt> |
... | ... | |
285 | 285 |
<definedvalue>$Sex</definedvalue> |
286 | 286 |
</definedvalue> |
287 | 287 |
<specimenreplicate> |
288 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></catalognumber_dwc>
|
|
288 |
<catalognumber_dwc>$CatalogNumber</catalognumber_dwc>
|
|
289 | 289 |
<collectioncode_dwc>$CollectionCode</collectioncode_dwc> |
290 | 290 |
<institution_id><party><organizationname>$InstitutionCode</organizationname></party></institution_id> |
291 | 291 |
<sourceaccessioncode>$UniqueNYInternalRecordNumber</sourceaccessioncode> |
inputs/ACAD/test/import.specimens.xml.ref | ||
---|---|---|
13 | 13 |
<2>$collectionID</2> |
14 | 14 |
</_merge> |
15 | 15 |
</2> |
16 |
<3><_if name="if indirect voucher"><else>$catalogNumber</else></_if></3>
|
|
16 |
<3>$catalogNumber</3>
|
|
17 | 17 |
</_merge> |
18 | 18 |
</4> |
19 | 19 |
</_alt> |
... | ... | |
78 | 78 |
<plantobservation> |
79 | 79 |
<collectionnumber>$recordNumber</collectionnumber> |
80 | 80 |
<specimenreplicate> |
81 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$catalogNumber</else></_if></catalognumber_dwc>
|
|
81 |
<catalognumber_dwc>$catalogNumber</catalognumber_dwc>
|
|
82 | 82 |
<collectioncode_dwc> |
83 | 83 |
<_merge> |
84 | 84 |
<1>$collectionCode</1> |
inputs/U/test/import.specimens.xml.ref | ||
---|---|---|
4 | 4 |
<authorlocationcode> |
5 | 5 |
<_alt> |
6 | 6 |
<3>$ID</3> |
7 |
<4><_if name="if indirect voucher"><else>$Barcode</else></_if></4>
|
|
7 |
<4>$Barcode</4>
|
|
8 | 8 |
</_alt> |
9 | 9 |
</authorlocationcode> |
10 | 10 |
<locationdetermination> |
... | ... | |
147 | 147 |
<plantobservation> |
148 | 148 |
<collectionnumber>$Number</collectionnumber> |
149 | 149 |
<specimenreplicate> |
150 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$Barcode</else></_if></catalognumber_dwc>
|
|
150 |
<catalognumber_dwc>$Barcode</catalognumber_dwc>
|
|
151 | 151 |
<sourceaccessioncode>$ID</sourceaccessioncode> |
152 | 152 |
</specimenreplicate> |
153 | 153 |
</plantobservation> |
inputs/ARIZ/test/import.specimens.xml.ref | ||
---|---|---|
8 | 8 |
<_merge> |
9 | 9 |
<1>$InstitutionCode</1> |
10 | 10 |
<2>$CollectionCode</2> |
11 |
<3><_if name="if indirect voucher"><else>$CatalogNumberNumeric</else></_if></3>
|
|
11 |
<3>$CatalogNumberNumeric</3>
|
|
12 | 12 |
</_merge> |
13 | 13 |
</4> |
14 | 14 |
</_alt> |
... | ... | |
307 | 307 |
<definedvalue>$Sex</definedvalue> |
308 | 308 |
</definedvalue> |
309 | 309 |
<specimenreplicate> |
310 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$CatalogNumberNumeric</else></_if></catalognumber_dwc>
|
|
310 |
<catalognumber_dwc>$CatalogNumberNumeric</catalognumber_dwc>
|
|
311 | 311 |
<collectioncode_dwc>$CollectionCode</collectioncode_dwc> |
312 | 312 |
<institution_id><party><organizationname>$InstitutionCode</organizationname></party></institution_id> |
313 | 313 |
<sourceaccessioncode>$GlobalUniqueIdentifier</sourceaccessioncode> |
inputs/GBIF/test/import.specimens.xml.ref | ||
---|---|---|
5 | 5 |
<_merge> |
6 | 6 |
<1>$InstitutionCD</1> |
7 | 7 |
<2>$CollectionCD</2> |
8 |
<3><_if name="if indirect voucher"><else>$CatalogNO</else></_if></3>
|
|
8 |
<3>$CatalogNO</3>
|
|
9 | 9 |
</_merge> |
10 | 10 |
</authorlocationcode> |
11 | 11 |
<elevation> |
... | ... | |
160 | 160 |
<collectiondate><_date><date>$LatestDateCollected</date></_date></collectiondate> |
161 | 161 |
<plantobservation> |
162 | 162 |
<specimenreplicate> |
163 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$CatalogNO</else></_if></catalognumber_dwc>
|
|
163 |
<catalognumber_dwc>$CatalogNO</catalognumber_dwc>
|
|
164 | 164 |
<collectioncode_dwc>$CollectionCD</collectioncode_dwc> |
165 | 165 |
<institution_id><party><organizationname>$InstitutionCD</organizationname></party></institution_id> |
166 | 166 |
</specimenreplicate> |
inputs/NCU-NCSC/test/import.specimens.xml.ref | ||
---|---|---|
7 | 7 |
<4> |
8 | 8 |
<_merge> |
9 | 9 |
<2>$SeriesName</2> |
10 |
<3><_if name="if indirect voucher"><else>$Barcode</else></_if></3>
|
|
10 |
<3>$Barcode</3>
|
|
11 | 11 |
</_merge> |
12 | 12 |
</4> |
13 | 13 |
</_alt> |
... | ... | |
77 | 77 |
<collectiondate><_date><date>$Collect Date</date></_date></collectiondate> |
78 | 78 |
<plantobservation> |
79 | 79 |
<specimenreplicate> |
80 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$Barcode</else></_if></catalognumber_dwc>
|
|
80 |
<catalognumber_dwc>$Barcode</catalognumber_dwc>
|
|
81 | 81 |
<collectioncode_dwc>$SeriesName</collectioncode_dwc> |
82 | 82 |
<sourceaccessioncode>$Accession Number</sourceaccessioncode> |
83 | 83 |
</specimenreplicate> |
inputs/SpeciesLink/test/import.specimens.xml.ref | ||
---|---|---|
26 | 26 |
</_merge> |
27 | 27 |
</2> |
28 | 28 |
<3> |
29 |
<_if name="if indirect voucher"> |
|
30 |
<else> |
|
31 |
<_alt> |
|
32 |
<0>$dwc_dwcore_CatalogNumber</0> |
|
33 |
<1>$conceptual_darwin_2003_1_0_CatalogNumber</1> |
|
34 |
<2>$dwc_terms_catalogNumber</2> |
|
35 |
</_alt> |
|
36 |
</else> |
|
37 |
</_if> |
|
29 |
<_alt> |
|
30 |
<0>$dwc_dwcore_CatalogNumber</0> |
|
31 |
<1>$conceptual_darwin_2003_1_0_CatalogNumber</1> |
|
32 |
<2>$dwc_terms_catalogNumber</2> |
|
33 |
</_alt> |
|
38 | 34 |
</3> |
39 | 35 |
</_merge> |
40 | 36 |
</4> |
... | ... | |
419 | 415 |
</definedvalue> |
420 | 416 |
<specimenreplicate> |
421 | 417 |
<catalognumber_dwc> |
422 |
<_if name="if indirect voucher"> |
|
423 |
<else> |
|
424 |
<_alt> |
|
425 |
<0>$dwc_dwcore_CatalogNumber</0> |
|
426 |
<1>$conceptual_darwin_2003_1_0_CatalogNumber</1> |
|
427 |
<2>$dwc_terms_catalogNumber</2> |
|
428 |
</_alt> |
|
429 |
</else> |
|
430 |
</_if> |
|
418 |
<_alt> |
|
419 |
<0>$dwc_dwcore_CatalogNumber</0> |
|
420 |
<1>$conceptual_darwin_2003_1_0_CatalogNumber</1> |
|
421 |
<2>$dwc_terms_catalogNumber</2> |
|
422 |
</_alt> |
|
431 | 423 |
</catalognumber_dwc> |
432 | 424 |
<collectioncode_dwc> |
433 | 425 |
<_merge> |
inputs/MO/test/import.specimens.xml.ref | ||
---|---|---|
5 | 5 |
<_merge> |
6 | 6 |
<1>$InstitutionCode</1> |
7 | 7 |
<2>$CollectionCode</2> |
8 |
<3><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></3>
|
|
8 |
<3>$CatalogNumber</3>
|
|
9 | 9 |
</_merge> |
10 | 10 |
</authorlocationcode> |
11 | 11 |
<elevation> |
... | ... | |
239 | 239 |
<plantobservation> |
240 | 240 |
<collectionnumber>$CollectorNumber</collectionnumber> |
241 | 241 |
<specimenreplicate> |
242 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$CatalogNumber</else></_if></catalognumber_dwc>
|
|
242 |
<catalognumber_dwc>$CatalogNumber</catalognumber_dwc>
|
|
243 | 243 |
<collectioncode_dwc>$CollectionCode</collectioncode_dwc> |
244 | 244 |
<institution_id><party><organizationname>$InstitutionCode</organizationname></party></institution_id> |
245 | 245 |
</specimenreplicate> |
inputs/QMOR/test/import.specimens.xml.ref | ||
---|---|---|
13 | 13 |
<2>$collectionID</2> |
14 | 14 |
</_merge> |
15 | 15 |
</2> |
16 |
<3><_if name="if indirect voucher"><else>$catalogNumber</else></_if></3>
|
|
16 |
<3>$catalogNumber</3>
|
|
17 | 17 |
</_merge> |
18 | 18 |
</4> |
19 | 19 |
</_alt> |
... | ... | |
198 | 198 |
<definedvalue>$sex</definedvalue> |
199 | 199 |
</definedvalue> |
200 | 200 |
<specimenreplicate> |
201 |
<catalognumber_dwc><_if name="if indirect voucher"><else>$catalogNumber</else></_if></catalognumber_dwc>
|
|
201 |
<catalognumber_dwc>$catalogNumber</catalognumber_dwc>
|
|
202 | 202 |
<collectioncode_dwc> |
203 | 203 |
<_merge> |
204 | 204 |
<1>$collectionCode</1> |
lib/xml_func.py | ||
---|---|---|
77 | 77 |
def simplify(node): |
78 | 78 |
'''Simplifies the XML functions in an XML tree. |
79 | 79 |
* Merges nodes tagged as mergable |
80 |
* Applies a pass-through optimization for aggregating functions with one arg
|
|
80 |
* Applies pass-through optimizations for XML functions
|
|
81 | 81 |
''' |
82 | 82 |
for child in xml_dom.NodeElemIter(node): simplify(child) |
83 | 83 |
merge_tagged(node) |
84 | 84 |
|
85 |
name = node.tagName |
|
86 |
if not is_func_name(name): return # not a function |
|
85 |
func_name = node.tagName
|
|
86 |
if not is_func_name(func_name): return # not a function
|
|
87 | 87 |
|
88 |
items = list(xml_dom.NodeElemIter(node))
|
|
88 |
params = list(xml_dom.NodeElemIter(node))
|
|
89 | 89 |
|
90 |
if len(items) == 1 and items[0].tagName.isdigit(): # single numeric param |
|
91 |
# pass-through optimization for aggregating functions with one arg |
|
92 |
xml_dom.replace(node, items[0].firstChild) # use first arg's value |
|
90 |
# Pass-through optimizations |
|
91 |
if len(params) == 1: # single arg |
|
92 |
param = params[0] |
|
93 |
name = param.tagName |
|
94 |
value = param.firstChild |
|
95 |
|
|
96 |
is_agg_func = name.isdigit() |
|
97 |
is_if_no_cond = func_name = '_if' # no if condition means False |
|
98 |
if is_agg_func or (is_if_no_cond and name == 'else'): |
|
99 |
xml_dom.replace(node, value) |
|
100 |
elif is_if_no_cond and name == 'then': xml_dom.remove(node) |
|
93 | 101 |
|
94 | 102 |
def process(node, on_error=exc.reraise, is_rel_func=None, db=None): |
95 | 103 |
'''Evaluates the XML functions in an XML tree. |
Also available in: Unified diff
xml_func.py: simplify(): Apply pass-through optimizations for _if statements with no condition (which means false). This faciliates automated testing after an _if statement has been added, because the put template provided as part of the automated test will only change for those datasources that actually have a condition entry for the _if statement, which greatly reduces the number of tests that need to be accepted. (Note that the path before the _if will still be included as an empty path if there are no other mappings to that table, because the _if statement does not surround it.)