Understanding Attribute Errors

The various bulkloader-checking tools throw somewhat cryptic error messages when an Attribute does not satisfy database-level requirements. This document serves as a troubleshooting guide.

The problem appears as (part of) LOADED after attempting to load or validate specimen data.

screen shot 2017-01-06 at 10 02 39 am

Attributes are data-driven; the structural and data value requirements depend upon the attribute. Missing data, extraneous data, and incorrectly typed data all lead to failure. Do not exclude the possibility of e.g., something in a UNITS column causing failure in a text-type attribute. Check ALL attribute fields.

screen shot 2017-01-06 at 10 07 14 am

First, confirm that the attribute itself is correct. Arctos uses bitwise indexes to check, so character case, leading or trailing spaces, or invisible (eg, control) characters are all important. Copying from the data and pasting into your browser’s search at CTATTRIBUTE_TYPE is sufficient to find most errors. Ensure that the attribute is available for use under the collection type in which you’re working as well.

Second, check datatype. Attributes may be of three types, all with different data requirements:

1) Free-text (descriptive) attributes may not have units, and will accept any character string as value. Descriptive attributes will NOT appear in CTATTRIBUTE_CODE_TABLES. An example is attribute “age.”

screen shot 2017-01-06 at 10 22 12 am

2) Categorical attributes have a value in the “value code table” column of CTATTRIBUTE_CODE_TABLES, and clicking that code table name will redirect your browser to appropriate values. Categorical attributes may not have units. An example is attribute “age class,” in which all values are contained in CTAGE_CLASS.

screen shot 2017-01-06 at 10 22 41 am

3) Numerical attributes have a value in the “units code table” column of CTATTRIBUTE_CODE_TABLES, and that link will direct your browser to acceptable values for units. In all cases, these data require a number (not necessarily integer) in the value column. An example is attribute “numeric age,” in which all values are numbers and all units are defined by CTNUMERIC_AGE_UNITS.

screen shot 2017-01-06 at 10 23 08 am

Attribute Remarks and Attribute Det Meth are optional fields, only constrained from containing nonprinting characters.

Attribute Date must be an ISO8601 date object.

Attribute Determiner must be an existing Agent.

The example failure above is caused by non-numeric data (“28900 +/- 1700”) in a numeric attribute.

screen shot 2017-01-06 at 10 29 03 am

Datatype controls discoverability. Given an “age” attribute, value is not searchable - users should expect things like “old”, “lod” (misspellings), “YoY” (perhaps-cryptic abbreviations), etc. (There is still value in the existence of the attribute; users can know that SOMETHING about age has been asserted.) Given “age class” one can search for categories, but accuracy is limited by the categorical data and whatever precision exists within the categories and their documentation. Given numeric data, units may be converted and the data may be searched using boolean operators - most any query is possible.

Any record may have any number of attributes, and there are several possibilities for proceeding with the example data:

  1. Enter the data as a numeric range:
    • attribute type=’radiometric date’ value=’27200’ units=’years’….
    • attribute type=’radiometric date’ value=’30600’ units=’years’ ….
  2. Create explicit minima and maxima:
    • attribute type=’minimum radiometric date’ value=’27200’ units=’years’ ….
    • attribute type=’maximum radiometric date’ value=’30600’ units=’years’ ….
  3. Convert the data and datatype to text:
    • attribute type=’radiometric date’ value=’27200 years’ units=NULL ….

(1) and (2) provide comparable searchability, although (2) facilitates slightly more-targeted searching. (3) does not provide for searching by radiometric date, and functions more like a remarks field than a bounding value.