deriva-annotation-config
Using deriva-annotation-config to configure annotations
The deriva-annotation-config
utility reads a configuration file and uses it to set annotationss for an ermrest catalog (or for a schema or table within that catalog). Usage is:
deriva-annotation-config
[-n
|--dryrun
] [-v
|--verbose
] [-s
|--schema
schema] [-t
|--table
table] [--host host
] [--config-file
config_file] [--credential-file
credential_file] catalog
where the required arguments are:
catalog: an ermrest catalog number (e.g., 1)
--config_file
file: the name of a configuration file
Options are:
-credential_file
file: read credentials from the named file (if not specified, look for credentials maintained by deriva-auth
)
--dryrun
: do nothing, just print out the catalog schema that would be applied
--verbose
: verbose, print acls and acl bindings for each object
--schema
schema: operate only on the named schema, not the whole catalog
--table
table: operate only on the named table, not the whole catalog (requires the --schema
option)
--host
host: configure the server on the specified host (default localhost
)
Config file format
The config file is a JSON file divided into the following stanzas:
known_attributes
: Attributes (i.e., annotation URIs, such as tag:isrd.isi.edu,2016:display
) managed through this config file
schema_annotations
: Catalog-level annotations.
schema_annotations
: Annotations for individual schemas.
table_annotations
: Annotations for individual tables.
column_annotations
: Annotations for individual columns.
foreign_key_annotations
: Annotations for foreign keys.
The known_attributes
stanza
This stanza contains parameters that control the behavior of deriva-annotation-config
itself. This section has three sub-sections: managed
, ignored
, and ignore_all_unmanaged
.
The managed
section is a list of annotation types managed by deriva-annotation-config
.
The ignore_all_unmanaged
section is a boolean: if true
, deriva-annotation-config
will leave any annotations not in the managed
list unchanged. If false
, deriva-annotation-config
will clear any annotations not in the managed
list.
The ignored
section is a list of annotation types that are recognized by deriva-annotation-config
but that aren’t created or updated by it, depending on the value of ignore_all_unmanaged
. If ignore_all_unmanaged
is true
, the program leaves existing annotations of this type alone. If ignore_all_unmanaged
is false
, the program removes existing annotation sof this type.
Example:
"known_attributes": {
"ignore_all_unmanaged": false,
"managed": [
"tag:isrd.isi.edu,2016:column-display",
"tag:isrd.isi.edu,2016:display",
"tag:isrd.isi.edu,2016:foreign-key",
...
],
"ignored" : [
"comment",
"description",
"facetOrder"
]
}
This is a version one might use to remove all comment
, description
, and facetOrder
annotations from a catalog. If ignore_all_attributes
were true
, those annotations would be left unchanged.
The schema_annotations stanza
This is where annotations for schemas are set. The syntax is a list of entries of the form:
{schema_descriptor: value, annotation_descriptor: value}
A schema_descriptor is either:
"schema":
schema_name
or
"schema_pattern:"
regular_expression
When setting permissions on a schema:
if an exact
schema
match is found, the associated ACL is used (and any matchingschema_pattern
entries are ignored).If no exact
schema
match is found and exactly one matchingschema_pattern
entry is found, then that ACL is used.If no exact
schema
match is found and more than one matchingschema_pattern
entry is found, then an error is thrown.
An annotation_descriptor has the form:
"uri":
annotation_uri
"value":
: annotation_value
For example:
{
"schema": "Vocabulary",
"uri": "tag:misd.isi.edu,2015:display",
"value": {
"name_style": {
"title_case": true,
"underline_space": true
}
}
}
The table_annotations stanza
This is where annotationss for tables are set. The syntax is a list of entries of the form: {schema_descriptor, table_descriptor, annotation_desciptor} The schema_descriptor and annotation_descriptor have the same form as above.
A table_descriptor is either:
"table":
table_name
or
"table_pattern:"
regular_expression
Regular expression matching is used:
If an entry with an exact
schema
andtable
match is found, the associated ACL is used (and any other matching entries are ignored).Otherwise, if entry with an exact
schema
match and exactly onetable_pattern
match is found, that ACL is used.Otherwise, if exactly one entry with a
schema_pattern
andtable_pattern
match is found, that ACL is used.If none of the above is true, and multiple matching entries are found, then an error is thrown.
For example:
"table_annotations": [
{
"schema": "Vocabulary",
"table_pattern": ".*_terms",
"uri": "tag:isrd.isi.edu,2016:table-display",
"value": {
"row_name": {
"row_markdown_pattern": "{{name}}"
}
}
}
This sets an annotation for any table in the “Vocabulary” schema whose table name ends in “_terms”.
The column_annotations stanza
This is where ACLs for columns are set. The syntax is a list of entries of the form: {schema_descriptor, table_descriptor, column_descriptor, annotation_descriptor} The schema, table, and annotation descriptors have the same form as above. The column_descriptor is either:
"column":
table_name
or
"column_pattern:"
regular_expression
Regular expression matching is used:
If an entry with exact
schema
,table
, andcolumn
matches is found, the associated ACL is used (and any other matching entries are ignored).Otherwise, if exactly one entry is found with
schema
,table
, andcolumn
matches is found, that ACL is usedIf multiple regular-expression matches are found and no exact match is found, an exception is thrown.
Example:
{
"column": "RCT",
"schema_pattern": ".*",
"table_pattern": ".*",
"uri": "tag:misd.isi.edu,2015:display",
"value": {
"name": "Creation Time"
}
}
This sets the display name for any column named “RCT” in the catalog.
The foreign_key_annotations stanza
This is where annotations for foreign keys are set. The syntax is a list of entries of the form:
{schema_descriptor, table_descriptor, fkey_schema_descriptor, fkey_name_descriptor, annotation_descriptor}
The schema, table, and annotation descriptors have the same form as above. The fkey_schema_descriptor is either:
"foreign_key_schema":
foreign_key_schema_name
or
"foreign_key_schema_pattern":
regular_expression
The fkey_name_descriptor is either:
"foreign_key":
foreign_key_name
or
"foreign_key_pattern":
regular_expression
These specify the foreign key schema and name. As with the column_acls stanza:
If an exact match is found, it’s used
If no exact match is found and exactly one regular expression match is found, it’s used.
If no exact match is found and more than one regular expression match is found, an error is thrown.
Example:
{
"foreign_key": "Antibody_Gene_Association_NCBI_GeneID_fkey",
"foreign_key_schema": "",
"schema": "Antibody",
"table": "Antibody_Gene_Association",
"uri": "tag:isrd.isi.edu,2016:foreign-key",
"value": {
"to_name": "Related Genes"
}
}