Project

General

Profile

« Previous | Next » 

Revision 130

map: Allow db config vars to be optional. SALVIAS_db test: Changed to use salvias_plots and XPath mapping syntax.

View differences:

scripts/test/input/SALVIAS_db.organisms.sh
1 1
#!/bin/sh
2
export in_host=localhost in_user=vegbank in_password=vegbank in_database=vegbank
2
export in_host=localhost in_user=aaronmk in_database=salvias_plots
scripts/lib/opts.py
5 5
def env_flag(name): return name in os.environ and os.environ[name] != ''
6 6

  
7 7
def get_env_vars(names, prefix=None, env_names_ref=None):
8
    # Requires that all env vars are set; otherwise returns None
9
    has_all = True
10 8
    vars_ = {}
11 9
    for name in names:
12 10
        env_name = name
13 11
        if prefix != None: env_name = prefix+'_'+env_name
14 12
        if env_names_ref != None: env_names_ref.append(env_name)
15
        if env_name in os.environ: vars_[name] = os.environ[env_name]
16
        else: has_all = False
17
    if has_all: return vars_
18
    else: return None
13
        try: vars_[name] = os.environ[env_name]
14
        except KeyError: pass
15
    return vars_
19 16

  
20 17
def env_usage(env_names, optional=False):
21 18
    str_ = 'env'
scripts/map
25 25
        return opts.get_env_vars(db_config_names, prefix, env_names)
26 26
    in_db_config = get_db_config('in')
27 27
    out_db_config = get_db_config('out')
28
    in_is_db = in_db_config != None
29
    out_is_db = out_db_config != None
28
    in_is_db = in_db_config != {}
29
    out_is_db = out_db_config != {}
30 30
    
31 31
    # Parse args
32 32
    map_path = None
......
38 38
    commit = opts.env_flag('commit')
39 39
    
40 40
    # Load map header
41
    in_is_xml = True
41
    in_is_xpaths = True
42 42
    if map_path != None:
43 43
        import copy
44 44
        import csv
......
53 53
        def split_col_name(name):
54 54
            name, sep, root = name.partition(':')
55 55
            return name, sep != '', root
56
        src, in_is_xml, src_root = split_col_name(src)
57
        dest, out_is_xml, dest_root = split_col_name(dest)
58
        assert out_is_xml
56
        src, in_is_xpaths, src_root = split_col_name(src)
57
        dest, out_is_xpaths, dest_root = split_col_name(dest)
58
        assert out_is_xpaths
59 59
        has_types = dest_root.startswith('/*s/') # outer elements are types
60 60
        for row in reader:
61 61
            in_, out = row[:2]
......
63 63
                try: mappings.append((in_, xpath.parse(dest_root+out)))
64 64
                except SyntaxException, ex: raise SystemExit(str(ex))
65 65
        stream.close()
66
    in_is_xml = in_is_xpaths and not in_is_db
66 67
    
67 68
    # Input datasource to XML tree, mapping if needed
68 69
    if in_is_xml: doc0 = xml.dom.minidom.parse(sys.stdin)
......
70 71
        doc1 = xml.dom.minidom.getDOMImplementation().createDocument(None,
71 72
            dest, None)
72 73
        if in_is_db:
73
            assert in_is_xml
74
            assert in_is_xpaths
74 75
            
75 76
            import psycopg2
76 77
            import db_xml
......
106 107
    else: doc1 = doc0
107 108
    
108 109
    # Output XML tree
109
    if out_db_config != None: # output is database
110
    if out_is_db:
110 111
        import psycopg2
111 112
        from psycopg2.extensions import ISOLATION_LEVEL_SERIALIZABLE
112 113
        import db_xml
mappings/SALVIAS_db-VegX.organisms.csv
1
"SALVIAS","VegX:/*s/individualOrganismObservation","Comments"
2
"OBSERVATION_ID","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/voucher","Brad: Neither is correct; this is just an internal ID for table plotObservations. However, it has the important property of uniquely identifying an ""observation"", which is an individual tree, in the case of an individual observation, or a records of a species with an associated count of individuals or measurement of percent cover, in the case of aggregate observations. Not sure where to store this. Main point is that it is not part of the original data, but an auto_increment added later."
3
"PLOT_ID",,"Brad: Not sure why this is repeated? This field and plotCode, as the same as above."
4
"plot_code","/*ID->/*s/plotObservation/*UniqueIdentifierID->/*s/plot/relatedSpatialItem/relatedItem[relationshipType=parentPlot]/relatedItemID->/*s/plot/plotUniqueIdentifier","Brad: Same as plotCode, above"
5
"census_no","/simpleUserdefined[name=censusNo]/value","Brad: Assigned by SALVIAS. 1 for first plot, then 2, 3, etc. I can't recall if we even have repeat censuses in SALVIAS. Probably not."
6
"census_date","/*ID->/*s/plotObservation/obsStartDate/_date/year",
7
"subplot","/*ID->/*s/plotObservation/*UniqueIdentifierID->/*s/plot/plotUniqueIdentifier",
8
"individual_code","/simpleUserdefined[name=individualCode]/value","Brad: Code, if any, used by the data provider to indicate an individual tree. Scope is unknown, although typically this value is unique only within plot, or sometimes only within subplot."
9
"ind_id",,"Brad: OMIT"
10
"tag1","/*ID->/*s/individualOrganism/identificationLabel","Brad: Another type of code, typically a number, used by the original data provider to indicate an individual tree. These are numbers on physical tags attached to the tree. Tag2 Is the same thing, only used if the first tag was lost. Obviously not a good system as it's possible a tree tag could be lost and changed more than once."
11
"tag2","/*ID->/*s/individualOrganism/identificationLabel","Brad: See commend for tag1. Your mapping for tag2 looks correct. Probably both values would go here, only nested, with one superceding the other."
12
"x_position","/simpleUserdefined[name=xPosition]/value","Brad: Correct for VegBank. I'm not so sure for VegX. Let's ask Nick about this. These are important, fundamental values of many tree plots, and should be accommodated within VegX."
13
"y_position","/simpleUserdefined[name=yPosition]/value","Brad: See comment above for x_position"
14
"voucher_string",,"Brad: OMIT. This is the verbatim text, which includes both collectors name and collection number. I would use coll_number, below."
15
"coll_number","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/authorCode","Brad: Incorrect. Map instead as for voucher_string"
16
"collector_code",,"Brad: OMIT"
17
"coll_lastname","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/partyWithRole/*ID->/parties/party/individualName/surName","Brad: Correct for VegBank. This is the collector of a separate specimen which vouchers this tree or species. I worry that vouchers are not properly accommodated in VegX. Again, we need to check with Nick."
18
"coll_firstname","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/partyWithRole/*ID->/parties/party/individualName/givenName","Brad: See comment above"
19
"det_type","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/groupType","Brad: A SALVIAS value referring to the relationship between the voucher specimen and the observation. Affect how the identification of the specimen(latin name) is transferred to the observation. 'direct'=voucher specimen was collected from this same tree; they are one and the same individual. 'indirect'=voucher specimen was collected for a different individual, but the original data provider confirmed that this is the same species. 'default'=basically same as 'indirect'. 'uncollected'=no voucher specimen, data provider  asserted that this was the name but was unable to collect. The main different is that with 'direct', 'indirect', and 'default', the scientific name can be updated automatically based on the name attached to the specimen voucher (assuming you have a link to that data, presumably from a herbarium database. Whereas, if det_type='uncollected', the name can never change because there is no specimen."
20
"fam_status",,"Brad: OMIT. This will be determined later by using TNRS."
21
"gen_status",,"Brad: OMIT. This will be determined later by using TNRS."
22
"species_status",,"Brad: OMIT. Except, note that if species_status=3, this indicate that name is a morphospecies and not a standard latin name. Not exactly sure how to use this in BIEN, but could be useful during the name-scrubbing process with TNRS."
23
"family","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=fam])/Name",
24
"genus","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=gen])/Name",
25
"specific_epithet","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/Name",
26
"specific_authority","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/AccordingTo/Simple","Brad: Incorrect. This is the author of the scientificName. The should be a place for this in the taxonomic name elements of VegB and VegX. Let's discuss."
27
"infra_rank_1","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=TaxonomicRankBelowSubspeciesEnum])/Rank",
28
"infra_ep_1","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=TaxonomicRankBelowSubspeciesEnum])/Name",
29
"cf_aff","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/note","Brad: Not sure where this goes. Indicator of identification uncertainty. 'cf.'=similar to the species listed, 'aff.'=related to the species list, but not the same. You'll need to check with Bob and with Nick where these go in VegX and VegBank."
30
"comments",,"Brad: OMIT"
31
"habit","/simpleUserdefined[name=habit]/value","Brad: Incorrect for VegBank, correct for VegX. This is growth form (tree, shrub, herb, etc.). It is an observation of a trait."
32
"no_of_individuals","/simpleUserdefined[name=count]/value","Brad: Incorrect for VegX. This is a count of number of indiiduals for an *aggregate* observation. For VegBank, I'm not sure. Not exactly the same as stemCount. An individual tree could have 3 stems but would still only count as 1. We need to check with Bob on this."
33
"cover_percent","/simpleUserdefined[name=coverPercent]/value",
34
"intercept_cm","/simpleUserdefined[name=interceptCm]/value","Brad: Incorrect for VegBank This is an aggregate observation. Used in line-intercept methodology only, describes the point along centerline at which an individual intercepts the center line of the plot. Used to determin relative abundance."
35
"height_m","/height","Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob"
36
"ht_first_branch_m","/simpleUserdefined[name=htFirstBranchM]/value","Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob"
37
"stem_tag1","/*ID->/*s/individualOrganism/identificationLabel","Brad: Same as tag1 & tag2, but applied to individual stems. I'm still not clear how to distinguish between methods which tag only individuals trees, and those which tag individual stems."
38
"stem_tag2","/*ID->/*s/individualOrganism/identificationLabel","Brad: see above"
39
"stem_dbh","/diameterBaseDistance[baseDistance=1.37]/diameter",
40
"basal_diam","/diameterBaseDistance[baseDistance=0]/diameter",
41
"stem_height_m","/simpleUserdefined[name=stemHeightM]/value","Brad: Same as for height, but applies to individuals stems, not trees. Rare."
42
"stem_height_first_branch_m","/simpleUserdefined[name=stemHeightFirstBranchM]/value","Brad: Should also be userDefined for VegBank. Same as for ht_first_branch_m, but applies to individuals stems, not trees. Rare."
43
"stem_canopy_form","/simpleUserdefined[name=stemCanopyForm]/value","Brad: Should also be userDefined for VegBank. "
44
"stem_canopy_position","/simpleUserdefined[name=stemCanopyPosition]/value","Brad: Should also be userDefined for VegBank. "
45
"stem_liana_infestation","/simpleUserdefined[name=stemLianaInfestation]/value","Brad: Should also be userDefined for VegBank. "
46
"notes","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/note/text",
47
"orig_family","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=identifier]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=fam])/Name","Brad: OMIT"
48
"orig_species","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=identifier]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/Name","Brad: OMIT"
1
"SALVIAS:/plotObservations","VegX:/*s/individualOrganismObservation","Comments"
2
"/OBSERVATION_ID","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/voucher","Brad: Neither is correct; this is just an internal ID for table plotObservations. However, it has the important property of uniquely identifying an ""observation"", which is an individual tree, in the case of an individual observation, or a records of a species with an associated count of individuals or measurement of percent cover, in the case of aggregate observations. Not sure where to store this. Main point is that it is not part of the original data, but an auto_increment added later."
3
"/PLOT_ID",,"Brad: Not sure why this is repeated? This field and plotCode, as the same as above."
4
"/plot_code","/*ID->/*s/plotObservation/*UniqueIdentifierID->/*s/plot/relatedSpatialItem/relatedItem[relationshipType=parentPlot]/relatedItemID->/*s/plot/plotUniqueIdentifier","Brad: Same as plotCode, above"
5
"/census_no","/simpleUserdefined[name=censusNo]/value","Brad: Assigned by SALVIAS. 1 for first plot, then 2, 3, etc. I can't recall if we even have repeat censuses in SALVIAS. Probably not."
6
"/census_date","/*ID->/*s/plotObservation/obsStartDate/_date/year",
7
"/subplot","/*ID->/*s/plotObservation/*UniqueIdentifierID->/*s/plot/plotUniqueIdentifier",
8
"/individual_code","/simpleUserdefined[name=individualCode]/value","Brad: Code, if any, used by the data provider to indicate an individual tree. Scope is unknown, although typically this value is unique only within plot, or sometimes only within subplot."
9
"/ind_id",,"Brad: OMIT"
10
"/tag1","/*ID->/*s/individualOrganism/identificationLabel","Brad: Another type of code, typically a number, used by the original data provider to indicate an individual tree. These are numbers on physical tags attached to the tree. Tag2 Is the same thing, only used if the first tag was lost. Obviously not a good system as it's possible a tree tag could be lost and changed more than once."
11
"/tag2","/*ID->/*s/individualOrganism/identificationLabel","Brad: See commend for tag1. Your mapping for tag2 looks correct. Probably both values would go here, only nested, with one superceding the other."
12
"/x_position","/simpleUserdefined[name=xPosition]/value","Brad: Correct for VegBank. I'm not so sure for VegX. Let's ask Nick about this. These are important, fundamental values of many tree plots, and should be accommodated within VegX."
13
"/y_position","/simpleUserdefined[name=yPosition]/value","Brad: See comment above for x_position"
14
"/voucher_string",,"Brad: OMIT. This is the verbatim text, which includes both collectors name and collection number. I would use coll_number, below."
15
"/coll_number","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/authorCode","Brad: Incorrect. Map instead as for voucher_string"
16
"/collector_code",,"Brad: OMIT"
17
"/coll_lastname","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/partyWithRole/*ID->/parties/party/individualName/surName","Brad: Correct for VegBank. This is the collector of a separate specimen which vouchers this tree or species. I worry that vouchers are not properly accommodated in VegX. Again, we need to check with Nick."
18
"/coll_firstname","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/partyWithRole/*ID->/parties/party/individualName/givenName","Brad: See comment above"
19
"/det_type","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=collector]/groupType","Brad: A SALVIAS value referring to the relationship between the voucher specimen and the observation. Affect how the identification of the specimen(latin name) is transferred to the observation. 'direct'=voucher specimen was collected from this same tree; they are one and the same individual. 'indirect'=voucher specimen was collected for a different individual, but the original data provider confirmed that this is the same species. 'default'=basically same as 'indirect'. 'uncollected'=no voucher specimen, data provider  asserted that this was the name but was unable to collect. The main different is that with 'direct', 'indirect', and 'default', the scientific name can be updated automatically based on the name attached to the specimen voucher (assuming you have a link to that data, presumably from a herbarium database. Whereas, if det_type='uncollected', the name can never change because there is no specimen."
20
"/fam_status",,"Brad: OMIT. This will be determined later by using TNRS."
21
"/gen_status",,"Brad: OMIT. This will be determined later by using TNRS."
22
"/species_status",,"Brad: OMIT. Except, note that if species_status=3, this indicate that name is a morphospecies and not a standard latin name. Not exactly sure how to use this in BIEN, but could be useful during the name-scrubbing process with TNRS."
23
"/family","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=fam])/Name",
24
"/genus","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=gen])/Name",
25
"/specific_epithet","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/Name",
26
"/specific_authority","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/AccordingTo/Simple","Brad: Incorrect. This is the author of the scientificName. The should be a place for this in the taxonomic name elements of VegB and VegX. Let's discuss."
27
"/infra_rank_1","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=TaxonomicRankBelowSubspeciesEnum])/Rank",
28
"/infra_ep_1","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=TaxonomicRankBelowSubspeciesEnum])/Name",
29
"/cf_aff","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=computer]/note","Brad: Not sure where this goes. Indicator of identification uncertainty. 'cf.'=similar to the species listed, 'aff.'=related to the species list, but not the same. You'll need to check with Bob and with Nick where these go in VegX and VegBank."
30
"/comments",,"Brad: OMIT"
31
"/habit","/simpleUserdefined[name=habit]/value","Brad: Incorrect for VegBank, correct for VegX. This is growth form (tree, shrub, herb, etc.). It is an observation of a trait."
32
"/no_of_individuals","/simpleUserdefined[name=count]/value","Brad: Incorrect for VegX. This is a count of number of indiiduals for an *aggregate* observation. For VegBank, I'm not sure. Not exactly the same as stemCount. An individual tree could have 3 stems but would still only count as 1. We need to check with Bob on this."
33
"/cover_percent","/simpleUserdefined[name=coverPercent]/value",
34
"/intercept_cm","/simpleUserdefined[name=interceptCm]/value","Brad: Incorrect for VegBank This is an aggregate observation. Used in line-intercept methodology only, describes the point along centerline at which an individual intercepts the center line of the plot. Used to determin relative abundance."
35
"/height_m","/height","Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob"
36
"/ht_first_branch_m","/simpleUserdefined[name=htFirstBranchM]/value","Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob"
37
"/stem_tag1","/*ID->/*s/individualOrganism/identificationLabel","Brad: Same as tag1 & tag2, but applied to individual stems. I'm still not clear how to distinguish between methods which tag only individuals trees, and those which tag individual stems."
38
"/stem_tag2","/*ID->/*s/individualOrganism/identificationLabel","Brad: see above"
39
"/stem_dbh","/diameterBaseDistance[baseDistance=1.37]/diameter",
40
"/basal_diam","/diameterBaseDistance[baseDistance=0]/diameter",
41
"/stem_height_m","/simpleUserdefined[name=stemHeightM]/value","Brad: Same as for height, but applies to individuals stems, not trees. Rare."
42
"/stem_height_first_branch_m","/simpleUserdefined[name=stemHeightFirstBranchM]/value","Brad: Should also be userDefined for VegBank. Same as for ht_first_branch_m, but applies to individuals stems, not trees. Rare."
43
"/stem_canopy_form","/simpleUserdefined[name=stemCanopyForm]/value","Brad: Should also be userDefined for VegBank. "
44
"/stem_canopy_position","/simpleUserdefined[name=stemCanopyPosition]/value","Brad: Should also be userDefined for VegBank. "
45
"/stem_liana_infestation","/simpleUserdefined[name=stemLianaInfestation]/value","Brad: Should also be userDefined for VegBank. "
46
"/notes","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept/note/text",
47
"/orig_family","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=identifier]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=fam])/Name","Brad: OMIT"
48
"/orig_species","/*ID->/*s/individualOrganism/*sID->/*s/taxonNameUsageConcept->/*s/taxonDetermination[*ID,partyWithRole/role=identifier]/*s/taxonRelationshipAssertion(/assertion/*ID->/*s/taxonConcept[Rank/@code=sp])/Name","Brad: OMIT"
mappings/SALVIAS_db-VegBank.organisms.csv
1
SALVIAS,VegBank:/taxonObservation,Comments
2
OBSERVATION_ID,"/{taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=false,interpretationDate=epoch,*_ID/plantConcept:[*_ID/reference],*_ID/party]/museumAccessionNumber,*_ID/observation/*_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/3}","Brad: Neither is correct; this is just an internal ID for table plotObservations. However, it has the important property of uniquely identifying an ""observation"", which is an individual tree, in the case of an individual observation, or a records of a species with an associated count of individuals or measurement of percent cover, in the case of aggregate observations. Not sure where to store this. Main point is that it is not part of the original data, but an auto_increment added later."
3
plot_code,/*_ID/observation/*_ID/plot/PARENT_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/1,"Brad: Same as plotCode, above"
4
census_no,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=censusNo]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Assigned by SALVIAS. 1 for first plot, then 2, 3, etc. I can't recall if we even have repeat censuses in SALVIAS. Probably not."
5
census_date,/*_ID/observation/obsStartDate/_date/year,
6
subplot,"/*_ID/observation/{*_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/2,authorObsCode}",
7
individual_code,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=individualCode]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Code, if any, used by the data provider to indicate an individual tree. Scope is unknown, although typically this value is unique only within plot, or sometimes only within subplot."
8
tag1,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: Another type of code, typically a number, used by the original data provider to indicate an individual tree. These are numbers on physical tags attached to the tree. Tag2 Is the same thing, only used if the first tag was lost. Obviously not a good system as it's possible a tree tag could be lost and changed more than once."
9
tag2,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: See commend for tag1. Your mapping for tag2 looks correct. Probably both values would go here, only nested, with one superceding the other."
10
x_position,/taxonImportance/stemCount/stemLocation/stemXPosition,"Brad: Correct for VegBank. I'm not so sure for VegX. Let's ask Nick about this. These are important, fundamental values of many tree plots, and should be accommodated within VegX."
11
y_position,/taxonImportance/stemCount/stemLocation/stemYPosition,Brad: See comment above for x_position
12
coll_number,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collectionNumber,Brad: Incorrect. Map instead as for voucher_string
13
coll_lastname,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collector_ID/party/surName,"Brad: Correct for VegBank. This is the collector of a separate specimen which vouchers this tree or species. I worry that vouchers are not properly accommodated in VegX. Again, we need to check with Nick."
14
coll_firstname,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collector_ID/party/givenName,Brad: See comment above
15
det_type,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=determinationType]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: A SALVIAS value referring to the relationship between the voucher specimen and the observation. Affect how the identification of the specimen(latin name) is transferred to the observation. 'direct'=voucher specimen was collected from this same tree; they are one and the same individual. 'indirect'=voucher specimen was collected for a different individual, but the original data provider confirmed that this is the same species. 'default'=basically same as 'indirect'. 'uncollected'=no voucher specimen, data provider  asserted that this was the name but was unable to collect. The main different is that with 'direct', 'indirect', and 'default', the scientific name can be updated automatically based on the name attached to the specimen voucher (assuming you have a link to that data, presumably from a herbarium database. Whereas, if det_type='uncollected', the name can never change because there is no specimen."
16
family,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Family]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
17
genus,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Genus]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
18
specific_epithet,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Species]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
19
specific_authority,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Species]/*_ID/plantConcept/*_ID/plantName/reference_ID/reference/shortName",Brad: Incorrect. This is the author of the scientificName. The should be a place for this in the taxonomic name elements of VegB and VegX. Let's discuss.
20
infra_rank_1,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Subspecies]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName/_name/first",
21
infra_ep_1,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Subspecies]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName/_name/last",
22
cf_aff,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=cfAff]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Not sure where this goes. Indicator of identification uncertainty. 'cf.'=similar to the species listed, 'aff.'=related to the species list, but not the same. You'll need to check with Bob and with Nick where these go in VegX and VegBank."
23
habit,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=habit]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Incorrect for VegBank, correct for VegX. This is growth form (tree, shrub, herb, etc.). It is an observation of a trait."
24
no_of_individuals,/taxonImportance/*/stemCount,"Brad: Incorrect for VegX. This is a count of number of indiiduals for an *aggregate* observation. For VegBank, I'm not sure. Not exactly the same as stemCount. An individual tree could have 3 stems but would still only count as 1. We need to check with Bob on this."
25
cover_percent,/taxonImportance/cover,
26
intercept_cm,"/taxonImportance/definedValue[*_ID/userDefined[tableName=taxonImportance,userDefinedName=interceptCm]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Incorrect for VegBank This is an aggregate observation. Used in line-intercept methodology only, describes the point along centerline at which an individual intercepts the center line of the plot. Used to determin relative abundance."
27
height_m,/taxonImportance/stemCount/stemHeight,Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob
28
ht_first_branch_m,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=heightFirstBranchM]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob
29
stem_tag1,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: Same as tag1 & tag2, but applied to individual stems. I'm still not clear how to distinguish between methods which tag only individuals trees, and those which tag individual stems."
30
stem_tag2,/taxonImportance/stemCount/stemLocation/stemCode,Brad: see above
31
stem_dbh,/taxonImportance/stemCount/stemDiameter,
32
basal_diam,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemBasalDiameter]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",
33
stem_height_m,/taxonImportance/stemCount/stemHeight,"Brad: Same as for height, but applies to individuals stems, not trees. Rare."
34
stem_height_first_branch_m,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemHeightFirstBranchM]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Should also be userDefined for VegBank. Same as for ht_first_branch_m, but applies to individuals stems, not trees. Rare."
35
stem_canopy_form,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemCanopyForm]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
36
stem_canopy_position,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemCanopyPosition]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
37
stem_liana_infestation,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemLianaInfestation]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
38
notes,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/notes,
39
orig_family,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=identifier,*_ID/plantConcept/plantStatus/plantLevel=Family]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",Brad: OMIT
40
orig_species,"/taxonImportance/stemCount/stemLocation/{taxonInterpretation[ROLE_ID/aux_Role/roleCode=identifier,*_ID/plantConcept/plantStatus/plantLevel=Species]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName,taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/*_ID/plantConcept/*_ID/*/plantName/_alt/2}",Brad: OMIT
1
SALVIAS:/plotObservations,VegBank:/taxonObservation,Comments
2
/OBSERVATION_ID,"/{taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=false,interpretationDate=epoch,*_ID/plantConcept:[*_ID/reference],*_ID/party]/museumAccessionNumber,*_ID/observation/*_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/3}","Brad: Neither is correct; this is just an internal ID for table plotObservations. However, it has the important property of uniquely identifying an ""observation"", which is an individual tree, in the case of an individual observation, or a records of a species with an associated count of individuals or measurement of percent cover, in the case of aggregate observations. Not sure where to store this. Main point is that it is not part of the original data, but an auto_increment added later."
3
/plot_code,/*_ID/observation/*_ID/plot/PARENT_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/1,"Brad: Same as plotCode, above"
4
/census_no,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=censusNo]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Assigned by SALVIAS. 1 for first plot, then 2, 3, etc. I can't recall if we even have repeat censuses in SALVIAS. Probably not."
5
/census_date,/*_ID/observation/obsStartDate/_date/year,
6
/subplot,"/*_ID/observation/{*_ID/plot:[confidentialityStatus=0]/authorPlotCode/_alt/2,authorObsCode}",
7
/individual_code,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=individualCode]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Code, if any, used by the data provider to indicate an individual tree. Scope is unknown, although typically this value is unique only within plot, or sometimes only within subplot."
8
/tag1,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: Another type of code, typically a number, used by the original data provider to indicate an individual tree. These are numbers on physical tags attached to the tree. Tag2 Is the same thing, only used if the first tag was lost. Obviously not a good system as it's possible a tree tag could be lost and changed more than once."
9
/tag2,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: See commend for tag1. Your mapping for tag2 looks correct. Probably both values would go here, only nested, with one superceding the other."
10
/x_position,/taxonImportance/stemCount/stemLocation/stemXPosition,"Brad: Correct for VegBank. I'm not so sure for VegX. Let's ask Nick about this. These are important, fundamental values of many tree plots, and should be accommodated within VegX."
11
/y_position,/taxonImportance/stemCount/stemLocation/stemYPosition,Brad: See comment above for x_position
12
/coll_number,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collectionNumber,Brad: Incorrect. Map instead as for voucher_string
13
/coll_lastname,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collector_ID/party/surName,"Brad: Correct for VegBank. This is the collector of a separate specimen which vouchers this tree or species. I worry that vouchers are not properly accommodated in VegX. Again, we need to check with Nick."
14
/coll_firstname,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/collector_ID/party/givenName,Brad: See comment above
15
/det_type,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=determinationType]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: A SALVIAS value referring to the relationship between the voucher specimen and the observation. Affect how the identification of the specimen(latin name) is transferred to the observation. 'direct'=voucher specimen was collected from this same tree; they are one and the same individual. 'indirect'=voucher specimen was collected for a different individual, but the original data provider confirmed that this is the same species. 'default'=basically same as 'indirect'. 'uncollected'=no voucher specimen, data provider  asserted that this was the name but was unable to collect. The main different is that with 'direct', 'indirect', and 'default', the scientific name can be updated automatically based on the name attached to the specimen voucher (assuming you have a link to that data, presumably from a herbarium database. Whereas, if det_type='uncollected', the name can never change because there is no specimen."
16
/family,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Family]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
17
/genus,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Genus]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
18
/specific_epithet,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Species]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",
19
/specific_authority,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Species]/*_ID/plantConcept/*_ID/plantName/reference_ID/reference/shortName",Brad: Incorrect. This is the author of the scientificName. The should be a place for this in the taxonomic name elements of VegB and VegX. Let's discuss.
20
/infra_rank_1,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Subspecies]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName/_name/first",
21
/infra_ep_1,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=computer,*_ID/plantConcept/plantStatus/plantLevel=Subspecies]:[interpretationType=""Computer (automated)"",originalInterpretation=false,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName/_name/last",
22
/cf_aff,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=cfAff]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Not sure where this goes. Indicator of identification uncertainty. 'cf.'=similar to the species listed, 'aff.'=related to the species list, but not the same. You'll need to check with Bob and with Nick where these go in VegX and VegBank."
23
/habit,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/definedValue[*_ID/userDefined[tableName=taxonInterpretation,userDefinedName=habit]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Incorrect for VegBank, correct for VegX. This is growth form (tree, shrub, herb, etc.). It is an observation of a trait."
24
/no_of_individuals,/taxonImportance/*/stemCount,"Brad: Incorrect for VegX. This is a count of number of indiiduals for an *aggregate* observation. For VegBank, I'm not sure. Not exactly the same as stemCount. An individual tree could have 3 stems but would still only count as 1. We need to check with Bob on this."
25
/cover_percent,/taxonImportance/cover,
26
/intercept_cm,"/taxonImportance/definedValue[*_ID/userDefined[tableName=taxonImportance,userDefinedName=interceptCm]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Incorrect for VegBank This is an aggregate observation. Used in line-intercept methodology only, describes the point along centerline at which an individual intercepts the center line of the plot. Used to determin relative abundance."
27
/height_m,/taxonImportance/stemCount/stemHeight,Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob
28
/ht_first_branch_m,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=heightFirstBranchM]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Incorrect for VegBank. This is a measurement applied to a single tree. Check with Bob
29
/stem_tag1,/taxonImportance/stemCount/stemLocation/stemCode,"Brad: Same as tag1 & tag2, but applied to individual stems. I'm still not clear how to distinguish between methods which tag only individuals trees, and those which tag individual stems."
30
/stem_tag2,/taxonImportance/stemCount/stemLocation/stemCode,Brad: see above
31
/stem_dbh,/taxonImportance/stemCount/stemDiameter,
32
/basal_diam,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemBasalDiameter]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",
33
/stem_height_m,/taxonImportance/stemCount/stemHeight,"Brad: Same as for height, but applies to individuals stems, not trees. Rare."
34
/stem_height_first_branch_m,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemHeightFirstBranchM]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue","Brad: Should also be userDefined for VegBank. Same as for ht_first_branch_m, but applies to individuals stems, not trees. Rare."
35
/stem_canopy_form,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemCanopyForm]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
36
/stem_canopy_position,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemCanopyPosition]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
37
/stem_liana_infestation,"/taxonImportance/stemCount/stemLocation/definedValue[*_ID/userDefined[tableName=stemLocation,userDefinedName=stemLianaInfestation]:[userDefinedType=varchar]]:[@fkey=tableRecord_ID]/definedValue",Brad: Should also be userDefined for VegBank. 
38
/notes,/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/notes,
39
/orig_family,"/taxonImportance/stemCount/stemLocation/taxonInterpretation[ROLE_ID/aux_Role/roleCode=identifier,*_ID/plantConcept/plantStatus/plantLevel=Family]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName",Brad: OMIT
40
/orig_species,"/taxonImportance/stemCount/stemLocation/{taxonInterpretation[ROLE_ID/aux_Role/roleCode=identifier,*_ID/plantConcept/plantStatus/plantLevel=Species]:[interpretationType=Author,originalInterpretation=true,currentInterpretation=true,interpretationDate=epoch,*_ID/party]/*_ID/plantConcept:[plantStatus:[plantConceptStatus=accepted,startDate=epoch,*_ID/party],*_ID/reference]/*_ID/*/plantName,taxonInterpretation[ROLE_ID/aux_Role/roleCode=collector]/*_ID/plantConcept/*_ID/*/plantName/_alt/2}",Brad: OMIT

Also available in: Unified diff