Understanding Heurist 2026 Vsn 7
End-user manual for the Heurist academic knowledge management platform. 2026 (version 7).
PLEASE NOTE, THIS IS A WORK IN PROGRESS and is still being actively developed.
Ch 01: Overview
Commenced: 12 Jan 2024 Documentation rédigée le 07/11/2025 par Barbara Bonazzi mise à jour le 03/03/2026 par Barbara Bonazzi relu le 09/03/2025 par Maxine
Original authors: Ian Johnson, Maël Le Noc (2023 - 2025), Michael Falk (2021-2022), Vincent Sheehan (2016-2020)
Assisted by: Pierre-Yves Saunier
1. What is Heurist ?
Heurist website : https://heurist.huma-num.fr/heurist/startup/
Specific reasons for using Heurist:
Developed by and for Humanities research in collaboration with hundreds of research projects
Not tied to any specific project or type of data, handles a broad range of Humanities projects*
Entrusts development and management of databases to the user rather than the IT priesthood
Quick set up of complex interlinked databases typical of the Humanities, without programming
Iterative changes to database structure without corrupting or rebuilding existing data
Wide range of data import, export and analysis/visualisation functions
Stable CMS web sites generated and stored as an integral part of the database
Free and Open Source on GitHub, all data rely on MySQL in a comprehensively documented format
Generates instant archive packages in XML and standard SQL with internal documentation
Designed for low cost centralized maintenance shared by many projects
Humanities-knowledgeable core team and community of users
* No one system can do everything. Heurist is a generic system designed around the needs of a broad cohort of Humanities projects needing rich interlinked data and metadata databases. It cannot be expected to provide all the domain-specific features of tools such as text analysis, on-site archaeological recording or spatial analysis, but it may still provide a means of collecting and managing data which is later fed into specific analysis tools such as R, QGis, Gephi, TAPOR etc. *
2. Learning Resources
This document aims to give a reasonably concise but comprehensive narrative of Heurist functionality in an order that corresponds as far as possible with a typical engagement with Heurist. It cross-references to the project website, training materials and pages in the online Help system, all of which give more detailed information and are organised in menu order.
2.1 Website
There are a range of learning resources, FAQs and links to exemplar projects on the Heurist Network website:
2.2 Online help
Our main online help, delivered from a Heurist database via the Heurist CMS, is available here.
2.3 Tutorial videos
A series of 8 (as at Jan 2024) tutorial videos have been created by Dr Michael Falk. These are available in the Learn section of the Heurist Network website here.
The videos are accompanied by a text and annotated images which describes the steps to follow through using training data. These texts and images have been used as a basis for some sections of the current document.
2.4 Exemplary websites
Annotated examples of Heurist-generated websites are on the Featured Projects page.
Additional projects can be accessed through the Projects Search page (Exemplar Projects)
2.5 FAQ
The FAQ gathers a set of answers to commonly asked questions. It was created pre 2020, and would no longer cover all the frequently asked questions, but the answers are generally still valid.
Ch 02: Getting started with Heurist
Documentation rédigée le 07/11/2025 par Barbara Bonazzi, mise à jour le 03/03/2026 par Barbara Bonazzi, relecture le 26/03/2026 par Bruno Morandière
1. Steps to using Heurist
The following is a typical workflow for a new user managing their own database:
1.1 Register as a user
Register via Heurist website.
New users should click on the Register button and fill in the registration form:
Note 1: Server administrators may require registration to be approved by them, in which case they receive an email requiring them to approve your registration and there may be a delay. Otherwise it is immediate.
Note 2: Registration is specific to a server; you will need separate registrations if you have databases on more than one server. Although your credentials (user name and password) are generally copied to each new database, the databases are independent, so you can edit them and have different credentials for different databases.
1.2 Create database
1.2.1 Tutorial
Please see the video tutorial: https://www.youtube.com/watch?v=-lRjmkpQh4g
1.2.2 After user registration: naming the database
Once you have filled in the registration form above you will be offered the opportunity to create a new database using the login information entered in the registration form.
The prefix (editable) identifies the owner but may be changed. We recommend retaining this prefix and using it for all your databases, so they appear together in the list of databases. Please keep database names concise and informative about the contents. Spaces, apostrophes and other special characters are not permitted in the database name. For spaces use underscores ( _ ). Database names are case sensitive. ‘Lit_study’ and ‘lit_study’ are different databases. When you click on “Create Database”, you will become the owner of this database (user # 2) and the administrator of the Database Owners group (Group # 1), with all rights on the database and content.
1.2.3 From within a Heurist database
If you already have a Heurist database, you can create a new database with Admin > New.
For the naming conventions, see above.
When you click “Create Database”, you will be the owner of the new database (user # 2) and the administrator of the Database Owners group (Group # 1), with all rights on the database and content, even if you were not the owner of the database you are using to do this. Your login will be the same as on that database.
1.2.4 Enter the database
Click on Get Started to open the new database and login with the user name / password you entered .
Some databases may show additional fuctions such as institutional logins and the ability to request a login (which can be set in Admin > Properties).
We suggest bookmarking the database so you can open it again easily (otherwise you need to search for it on the server through https://heuristref.net or https://heurist.huma-num.fr).
2. Heurist database: structure and interface
When you first open your database, you will see the Database Overview (it will not of course include your logo and description of the database - we encourage you to enter these later so that your database is well documented).
It can be closed by selecting any of the menu options and reopened via Explore > Overview.
----------------------
Heurist Version 4 (from ~2016) Explore page showing the functionality of different parts of the page
Although outdated, this is still a useful summary of functions
@todo: redo this diagram with Vsn 6 interface
2.1 Predefined Structures (Record types)
All new databases contain by default predefined structures so that you can enjoy an initial fully-functional and significantly useful database in minutes (rather than days to months). We will show how this works later.
Nearly all the pre-defined structures can be freely modified at any time. You can remove things you don't want, add new elements and change existing ones, directly while editing the data. Heurist is immensely flexible and "iterative" - you don't have to take all the decisions at the start, database structure can grow organically as you start to understand your data or publication needs, or extend your project.
The elements defined include:
45 well-structured entity types which are either used in many databases eg. Person, Organisation, Place, Site, Structure, Document, Interview, Event, Life event, Story element, Media, or have specific functions eg. mapping and timeline functions and the creation of websites.
25 correctly structured bibliographic entity types which can be used to create a bibliography but are more usefully used for synchronisation with the Zotero bibliography manager.
300 'base fields' which can be adapted for a wide variety of uses from names to categorisation, handling media and geographic data, fuzzy dates and connections between records.
75 populated vocabularies with several thousand terms, including standard vocabularies such as BIBO, BIO, DCMI-TERMS, DCMI-TYPES, DOAP, FOAF, MUSIC, RDF AND SKOS including semantic references.
To see the existing structures, click on the Design menu (purple), then Record types and select, eg., the second group People and Organisations (the first group is an empty group as a convenience to hold the types you plan to use most often).
DON'T PANIC! Some people panic because their database is already full of things they (think they) don't want. To simplify the database you may drag the things you don't want into the Trash (they will still be there if you later decide you need them, and they have little or no effect on the performance of the system).
2.2 Tip: Multiple tabs
It's perfectly OK to open more than one tab on the same database, or more than one database in different tabs. This can be particularly useful when one wants to carry out modifications while doing searches in another window or to lookup information in another database. It's also useful for modifying a website design while fixing errors spotted in the database.
Note however that there is no automatic update of database structure between separate tabs, so it may be necessary to reload one or other of the tabs if structural modifications have been made eg. adding new fields or terms.
3. Main Menus overview
The principal features of Heurist are accessed through a standard menu/sub-menu layout on the left, and one or two panels on the right in which the menu functions are performed. Each of the menu entries on the left opens a sub-menu of functions. We will explore these in the order Admin – Design – Populate – Explore – Publish as this represents a logical workflow (even though most users will go to and from between them).
3.1 Design
Use this to manage your database, including access to Standard Administration tools (depending on your access privileges), such as creating databases, managing users and groups, etc. @todo link to documentation for Design.
3.2 Explore
The Explore menu is in many ways the most important and most complex, since it is the one which comprises all the ways by which you can browse, search and use the data you have collected.
Explore: Use these tools to create queries, filters, and faceted searches, to gain the most out of your data.
@todo link to documentation for Explore
3.3 Populate
Use these to import data from various formats and export data to various formats. @todo link to documentation for Populate
3.4 Publish
This allows you to publish your data in a variety of formats, including a fully interactive website, as well as a variety of raw data formats such as CSV, JSon, KML, and GEPHI. @todo link to documentation for Publish
3.5 Admin
The Admin > Database menu offers a first set of advanced functionalities and allows you to:
Open another database
Create a new database, as explained above.
Clone the current database
Rename the current database
Clear the data in the current database
Delete the current database (be careful, the deletion is irrevocable!)
Restore
@todo link to 10. Admin.
The Admin > Manage users menu provides functionalities to organise the collaborative work - see § Collaborative work (Workgroups, Users, roles and permissions below)
4. Collaborative work
4.1 Workgroups and Users
Heurist databases provide support for group work and collaborative projects. There can be several users, organised in different workgroups. Each record is owned by one or several workgroup(s), or by one or several individual user(s), and only these groups and individuals can edit the data within the record.
Individuals are effectively a workgroup of one. They are numbered in sequence with workgroups. Workgroup 2 is the database owner (the person who created the database - the owner can be changed by the owner to another user, see Administration, chapter 10).
Heurist's security model for database access allows you to manage groups and users and their access permissions in a controlled and centralised manner.
A workgroup is any set of users (e.g. department, research unit, project group, discipline group etc.), who need to share resources. Users can be members of several workgroups. In order to share the ability to edit a particular record you and your colleagues must be members of the workgroup which owns the record.
You become a member of a workgroup if you create a new workgroup or if you are added as a member to the workgroup (by an Administrator of the workgroup). Workgroups/users can be added, edited and deleted (except workgroup 1 = Database Managers and User 2 = database owner). Two types of access roles “administrator” or “member” are available in each workgroup. New users can also be added or imported from other existing databases. The person creating a workgroup becomes an Admin of that workgroup and cannot be removed from it.
Database structure can only be modified by administrators in the Database Managers workgroup, although other users can add terms to term fields (dropdowns) during data entry. The following table describes each group and the permissions for each role by group.
Group 1: Database Managers : The Database Managers Group is created by default for all new databases. The database creator is given the unique role of Owner. A database can have only one Owner.
Administrator
Add/edit/delete records and field definitions.
Clone, clear and delete the database.
Run all database administration utilities.
Carry out any tasks that the Administrators of individual groups can do (whether or not they are a member of that group).
For example:
Add, edit and view records specific to any group.
Allocate users to any group (as Administrators or members).
Change record Ownership to any workgroup.
Register the database (only available to the database owner, user #2)
Member
Being a member of the Database Managers Group confers no special rights; they have the same rights as members of any other group.
As well as having administration rights over this group, Administrators in this group are DBAdmins 'SuperUsers' for any database that uses a particular control table and therefore have DBAdmin rights over Group 0 and all other workgroups.
Group >=2: Workgroups : Any number of additional workgroups can be created. The first of these has ID 2 (the owner of the database), another has ID 3 for all “Other users” and subsequent groups have ID 4+.
Administrator
Add or remove members from that workgroup
Define or remove group tags.
Carry out other tasks (if any) specific to the group.
Member
Make, edit and view all records owned by the workgroup.
Change workgroup Ownership of a record to another workgroup of which they are a member.
Find, add and delete workgroup tags to/from records.
Log into a database that has been restricted to a workgroup of which they are a member.
Enter records in the workgroup blog.
Manage Workgroups, such as viewing details for other members of the workgroup, but not adding or removing members.
Group 0: All Users : A notional group consisting of all activated Heurist users in the control table (and by extension everyone who might have access to a Heurist database that references that control table).
Edit records which do not belong to a specific workgroup (the normal default for new records).
View data in workgroup-owned records that are marked as viewable outside the workgroup (the normal default for new records).
Bookmark visible records and create personal data such as tags, comments, reminders and notes, as well as saved searches and publication output.
Create a database.
Create a workgroup.
Run some database administration utilities.
Export database definitions.
Non-logged-in: The Heurist publication mechanism, designed for rendering Heurist data within public websites, bypasses the need to log in to view certain types of data. To be rendered in published output, the data must not be marked as belonging to a particular workgroup and/or must be marked as viewable outside the workgroup which owns the record. Personal data created by a logged-in user is never viewable through this mechanism, and it does not allow any modification whatsoever of the database.
For advanced functionalities, adding new users, assigning workgroup memberships, importing new users, see Chapter 10 Administration.
4.2 Roles and Permissions
Access to a record is determined by:
Ownership. This determines who can edit a record. The shared information may only be edited by members of that workgroup.
View Permissions. This determines who outside the Owner can view a record (i.e. record visibility).
“Access”: the access status of records in the database can be defined:
at the database level for all new records
by Record Type
for each individual Record.
for specific fields within records of specified Record Types
You can set the Ownership and visibility of a record individually. The default is all database users are Owners (can edit) and any logged in user can view. Ownership and view permissions should only be restricted for records which are private to a workgroup.
@todo-link Ownership and visibility
Viewability (Record is viewable by) can be set to:
Hidden: Records are only visible to workgroup members.
Viewable: Any (logged-in) user, regardless of workgroup, can view the record. By default, all new records are set to Viewable by any Heurist user.
Pending: This provides the same viewability as Viewable above, but 'flags' that the record is not available for Public viewing. For instance, if you area making edits to a record and haven't reviewed these yet.
Public: The record (other than fields marked 'Restricted') can be published for Public (external to Heurist) viewing.
Any records you want others to see can be made Viewable. They will not be editable by anyone who is not part of the Owner group - because records are never editable except by their owner(s).
The default access of all new records can be set in the Database properties : Menu Design > Properties, section Behaviour.
5. Useful Functions
If following through the workflow for setting up a database for the first time
you may wish to skip this section and return to it later
Database Properties
User preferences
Visualise the structure of your database
Help and personal profile menus
Bugs, suggestions and feature request
5.1 Overview and database properties
Explore > Overview takes you to a summary of your database. This is also shown when you first open the database. The buttons and the list of the commonest entities on this page are clickable.
Design > Properties (or the EDIT METADATA button above) takes you to the Database Properties form.
Basic description The basic information section describes the database, owner and access right
Additional settings
“Synchronisation and indexing”, “Behaviour”, and “Incoming / Outgoing email” on this form allow the setting of a range of behaviours which apply to all users.
Chapter. 3 Basic structuring concepts Two concepts should be mentioned here:
Access
Default Access
TO BE CONTINUED @TODO
This determines whether anyone outside your workgroup can see records by default when imported. This can be:
Hidden. Not viewable.
Viewable. Viewable.
Pending. Viewable only if Status is 'Pending'.
Public. Viewable only if Status is 'Public'. :::
5.2 User preferences
5.2.1 Design > My preferences
This function allows one to set up a range of settings which apply to your use of Heurist; they do not affect other users.
*@todo: verify the veracity of the following tip:
As user preferences are stored in your session variables on your web browser, it is important to check the “Keep me logged in for a month” (which is extended each time you log in from the same computer within one month) so that they are remembered.
Most of these settings are fairly self-explanatory, but we will thus explain some of the more obscure settings.
@todo: NEED TO rewrite these
Bookmarklet
This function still exists but we do not recommend using it as it does not pick up highlighted text on https:// pages.
You can drag the bookmarklet to your browser toolbar.
It lets you capture the information you highlight in any http:// web page displayed in the browser
(including a bookmarks file and search list, such as Google) and analyse it for bibliographic information.
Mapping
@TODO
Filter
Heurist filter string to execute when loading the search page.
Add any filter expression to execute when you navigate to the Home Page (you can run a search and copy the syntax here if you wish). The default is to show all records edited within the last week. For example, to show all 'favourite' (or 'favorite') tagged records, use the following syntax: Tag:favourite,favorite
Include current filter in URL for page.
Adds the current search string to the end of the database URL in the browser.
Limits
These settings determine how many records are shown when you run a search, test a report and when you view maps (smaller limits will load quicker). These do not affect published report output.
Prompt for tags when saving records.
Select if you wish to be prompted to add one or more tags to a record when you exit the record and no tags have been set. We recommend that this be selected.
Default to recent records search when editing pointer fields.
When selected, you are shown your most recent record search when entering pointers (rather than all records).
Check for similar records on creation.
Scans your current records for any that are similar to the one you are creating and presents these with a dialog. You can choose one of the presented records or continue to create a new one.
Other
User interface style / level of user.
Determines the level of help and functionality that is provided based on your expertise.
Interface language.
Select an alternative language for screen UI elements.
Theme.
Select an alternative theme for the Heurist interface.
Show Help text.
Select to show Help prompts on-screen (these affect UI help text only, not field-help).
Show help text for fields.
Select to show Help prompts on data entry forms.
Show My Bookmarks.
Select to show your private bookmarks in the Saved Filters Pane.
Map Marker Clusters.
Where you have a lot of records appearing on a map/location, this option lets you show them as clusters (with record count) instead. Settings are: Grid pixels - the higher the number the greater the separation between clusters. Min count - the minimum number of record needed at a location to form a cluster. For example:
5.3 Visualise database structure
You can view the structure of your database as an interactive network graph. This view is especially useful if you want to understand how different record types in your database are related to one another.
Click ‘Visualise’ in the Design menu to access the network visualisation. To generate the graph, you need to choose which record types to display.
Generally, it is best just to visualise a few record types at a time—the graph can get very busy if you show too many types. To choose which record types to display, click the dropdown at the top left of the visualisation:
Click the ‘show’ checkbox next to each of the record types you are interested in.
To move the visualisation around, click in the whitespace and drag with your mouse. You can also click and drag the displayed record types. Click the ℹ️ icon to view more information about each record. Click the ✏️ icon to modify the record type. If you hover over a connection between two records, you will see information about how these records are connected to one another. For example, in this database a ‘Person’ can be related to a ‘Place’ in three different ways: the Place might be the Person’s place of birth, the Person’s place of death, or it might be a Place where the Person held a political office. Each of these relationships—place of birth, place of death and political office(s)—is a field in the ‘Person’ type, and can be seen in the data entry form for a ‘Person’.
5.3.1 The Explore Overview Screen**
When you log in to or reopen a Heurist database, you are taken to the Explore menu and presented with the overview screen. To edit the database title, description and other information, click ‘edit metadata’.
The Explore menu offers a range of powerful tools for viewing, querying and filtering your data. In this introductory video, we look at some of the basic exploration tools built-in to the Explore menu, and also learn how to create a custom filter for more sophisticated analysis.
@todo: The metadata editing has been greatly improved as of late July 2026 and will require re-documenting
5.4 Simple Filters
Heurist comes with some simple filters pre-configured, so that you can do some basic data exploration at the click of a button:
5.4.1 See Recent Changes
You can filter out older records, and just show records that have been entered or edited in the last fortnight. To do this, click ‘recent’ at the top of the Explore menu. This can be useful while you are in the data entry phase of your project, when you want to see the records you’re currently working with.
5.4.2 See All Records
To view all the records in your database in one long list, click ‘All records'
5.4.3 Filter by record type/entity
To see all the records of a particular type, hover over ‘Entities’. This will bring up a list of all the record types currently used by your database (e.g. Place, Person). Click on the record type you are interested in to see all the records of that type.
5.4.4 Finding records quickly
There are several options to quickly find useful sets of records (entities).
Entities gives immediate access to a search by each of the record types in the database.
Saved filters has, by default,
Recent changes (within the last week)
All (data order).
Whatever filters you have created and saved.
These are also accessible at all times through the small *Navigate *menu under the top level coloured menus.
Click on Recent changes and edit the string in the filter box (behind the eye symbol) to change week to hours, days, months, years or for more than one and then save as an additional filter.
All (date order) shows the most recently modified records at the top.
5.5 Help menu
Situated at top right of the screen:
HELP (web links, open in new tab)
Documentation takes you to the online help, which is a searchable version of this user manual.
Understanding Heurist takes you to this user manual.
Heurist Network website: the Heurist project website
Roadmap: a guide to our plans for Heurist development over the next 12 months or so. It is generally updated annually.
Feature history: a compact list of all the changes made to Heurist month-by-month since 2016. It is generally updated once every 6 – 12 months
CONTACT (popup or email links)
Bug report / feature request: sends the development team an email with the user’s message and information about the browser in use, the database, the software version and the user’s email address.
Heurist team: compose an email to the Heurist team (management and support)
System administrator: compose an email to the administrator of the server running this database
Acknowledgements: acknowledgements of people, software and graphics used in this project
About: information about the current version and licencing of this software
5.6 Personal profile menu
Situated at top right of the screen:
My preferences displays the User preferences form to manage your Heurist environment.
Manage tags: The Manage Tags option lets you edit and remove all of your tags in one place. Tags are personalised terms created by a Heurist user and can be added when creating or editing a record (one you own or have bookmarked).
The Manage Tags dialog lists all tags you have created, by usage (default).
The Sort button toggles between By Usage and Alphabetically.
The number shown for a tag is a tally of the number of times that tag has been used.
To change the tag names, edit them as required and click Update Tags. For example, if you change 'History' to 'Historical Studies', all the bookmarks tagged 'History' will now be tagged 'Historical Studies'.
To replace a tag, click the replace option for that tag, select an alternative tag and click Replace.
To delete a single tag, click the Delete icon for the tag.
To delete multiple tags: select the checkbox for each tag you wish to delete and click Delete Selected Tags.
Remember to click Save Edits when complete
Manage reminders: The Manage Reminders option lets you view, edit and remove any reminders you have set via the Reminders section in the righthand panel of the data entry form.
To remove a reminder, click the Delete icon next to it.
To edit a reminder, click on the reminder record title.
This opens the Reminder form, where you can change the reminder details.
Remember to click Save Edits when complete
My user info: displays your user profile for editing, described in detail under Manage Users @todo:link
Workgroups: displays the workgroups editing form (for workgroups of which you are an administrator), described in detail under Manage Workgroups @todo:link
Users: displays the form for editing users (if you are a database administrator), described in detail under Manage Users @todo:link
Import user: allows database administrators to browse to another database and add user profiles from that database to the current database.
Log out: logs you out of the database and changes to Log in, allowing someone else to log in on this browser.
5.7 Ticket system
Heurist is the product of working with a very large number of projects over a period of two decades. We greatly value feedback about possible improvements, bug reports or just things which annoy you. Please do not hesitate to send us bug reports and feature requests using the ticket system which is available in the top bar of the Heurist interface and in the Help menu.
Help > Ticket (bug report / feature request) allows users to report bugs or issues encountered when using Heurist, or send comments, feature requests and enhancements to the Heurist development team (general queries can be sent to the team via the page on Heurist Network Association). There is also a link to report bugs or requests a the top of the data entry form.
Please provide a screenshot (you can insert two in this form) as this is very helpful in understanding the source of bugs. The function automatically reports the server and database in use, the web browser version and your email address.
You can insert screenshots from the clipboard while editing the text fields with Ctrl-V or Cmd-V (you do not need to click on the image box). To insert a second screenshot, click on the + sign to get a second image box before inserting
6. Modelling your Data
There are several different kinds of database, but the most widely used is the relational database. You will be familiar with relational databases if you have ever worked with Microsoft Access, FileMaker, MySQL or Postgres.
In a relational database, the data is organised into tables. In a table, each row represents one record, and each column represents an attribute. Every row of the table has exactly the same structure, which any Humanist will immediately recognise as somewhat out-of-sync with the nature of Humanities data! Here is an example of such a table, to represent a CD Collection:
ID
Artist
CD
1
The Beatles
Abbey Road
2
Oumou Sangaré
Mogoya
3
Hariprasad Chaurasia
Jugalbandi
This way of representing data is ideal for data that is tightly structured, highly standardised, voluminous and constantly changing, such as transaction records in a bank. But it is difficult to use in Humanities research. To use a relational database, you need to carefully design each table in advance. If you are trying to represent a complex entity such as a person, artwork, or historical event, it may be necessary to create many tables just to describe individuals. If you want to change the database, you need to edit the 'schema' that defines all the tables. Such technology is not suited to Humanities research, where data is loosely structured, typically low-volume, has many missing values and is characterised by many connections between entities. For this reason, Heurist has elements of both a relational database and a 'graph’ database, and broadly speaking is what is called a NoSQL database (although it is built on top of the world’s most widely used Open Source relational database, MySQL).
You don't need to worry about tables and columns in a Heurist database. Instead, you decide what kinds of entities or record types you need, what properties or fields they need, and what record pointers or relationships should exist between them.
A Heurist database is best understood by a diagram which identifies the different entities in the database, and shows how they are related. You can actually generate such a diagram of your database using the Visualise tool.
Diagram of a Graph Database (Wikimedia Commons)
6.1 Iterative modelling
Heurist makes it easy to model your data in this way. Unlike most database systems which require extensive advance analysis to set up a data model and work out all the connections, lookups, fields etc. (since everything must be defined in advance to avoid expensive and delaying reworking of the structure and programming), we strongly encourage a highly iterative approach in which one only sketches the broad outline and the detail is filled in as you go along. A simple high-level overview model can often be set up in a matter of hours, or even minutes. Let's take the case of a study of travel and trade (by ship) between Mexico and the USA in the 19th century.
6.1.1 Break your problem domain up into distinct entities
Start by identifying all the entities which make up your domain: people, organisations, cultural groups, places, events, documents, images, albums, series, compositions/movements, plays/acts/scenes.
Pay particular attention to defining component parts or variants which may need a specific set of descriptors (attributes) such as instances of education or service (described by institution, degree, unit, rank, dates etc.) or variant attributes for different types of structure, object or event. These will typically be modelled using a child record pointer @todo:link.
Entities First we make a list of the entities we are likely to need
Note that Heurist typically refers to these as Record types for historical reasons - when first designed we thought that this term was more familiar to researchers used to MS Access and other databases than the term Entities.
For example you migth make a list like this:
Ships
Ports / places
end (per voyage)
start,
port-of-call,
Voyages
People
Organisations
Roles of people
passenger
crewman,
engineer,
captain,
purser,
navigator,
pilot,
Roles of organisations
receiver
charterer,
owner,
insurer,
shipper,
Units of cargo
Illnesses (events of illness applying to an individual)
Outbreaks (events of the same illness applying to many individuals on a voyage)
Epidemics (events of an illness at large in a broader community)
This will take a few minutes, but it is time worth spending. We can add more later if needed.
6.1.2 Define the connections that you expect to see between entities
Heurist makes it very easy to define connections between entities through simple connection fields (Record pointers and Relationship markers) in the data entry forms.
Connections
Then we can think about how these connect
Note that there may be 'edge-cases which are not covered, such as change of ship within one voyage, but one should never make a 'perfect' model; some 'reasonable case' assumptions should be applied which are acceptable because there is noise in the data in any case.
A voyage is connected to a specific ship
Voyages are connected from a start port to an end port with a series of intermediate ports
Voyages are connected to people who have a role over a specified time period (or voyage/voyage segment). Connecting people to the voyage/segment is better than connecting them to the ship, because the ship may participate in many voyages but roles can change.
Cargo is loaded at one port and unloaded at another
Illnesses are connected to people with dates of illness
Outbreaks are connected to a voyage (or segment) with dates and to people who became ill
6.1.3 Define the fields (attributes) that you wish to describe for each entity type
Heurist provides all the normal field types plus some less common ones, such as fuzzy dates, geographic objects, file/image fields (local, remote, media streams and IIIF) and the previously mentioned connection fields.
Attributes
Finally we can consider the basic attributes of these entities (the may be others which apply to specific projects and can be added later):
Ships have
tonnage, etc.
name,
type,
Voyages have
possibly a name.
start date
end date,
Ports have
location
name
People have
Some may vary across time/voyage/segement.
gender,
name,
profession etc.
Illnesses have
outcome and other possible information eg. treatments
name,
start and end date,
Outbreaks have
other info such as notes.
name of illness,
start and end dates,
We can now start creating our database with no further work. It is probably a good idea to draw up a simple entity-relation diagram such as the one below, but it is not even necessary. Once the database has been created you can get Heurist to show an entity=relationship diagram with Design > Record types > Visualise.
@todo: Insert the voyaging entity-relationship type
6.2 General pointers for good database design
We recommend re-using generic (base) field types (e.g. Name/Title, Primary/preferred image, Short Summary, Start date, end date etc.) and to reuse the same base field type for similar purposes in different record types. This reduces complexity since you are using one field definition for several record types in place of one for each. It also promotes equivalence between similar fields in different record types.
For example, the title of a book, a chapter, a journal article or a painting, the name of a building, a historical site, a person or an organisation, can all use the same field definition and are generally used as a main component of the record’s constructed title @todo link.
Similarly, primary image, short textual summaries, geographic locations, attached files, URLs and dates typically use the same field definition for which special handling has been developed (e.g. the display of primary images in record views, dates in timelines, geographic locations on maps). Even if you do need to create a new field definition, try as far as possible to reuse this between record types, for the same reasons as above.
6.2.1 Iterative design
If you decide to change your data model later you can update the record/field types, without having to rebuild the database or re-enter data. In this way the database can grow as your research progresses. Changing database definitions does not invalidate existing data. There are, however, a few restrictions on changes to your record structures:
If you remove a field, then the data will no longer be visible in certain views. However the data is never lost (unless you check an additional box asking to have the data removed), and reinstating the base field (which cannot be deleted if there is data associated with it) will reinstate the data.
Only certain changes of field type are possible. For instance, you cannot convert text fields directly to term fields (controlled lists). To do so you will need to export a CSV file, create a new (terms) field and reimport the data into the terms field; the values read will create new terms in the vocabulary attached to the field. Overlapping terms may then be combined in the Vocabularies editor.
6.3 Populating the database
Once your database has been created, data can be entered manually through the standard date entry form. They can also be entered in bulk by importing data sets such as spreadsheets (exported as a CSV file), Json or XML (transformed from another data system) or KML (geographic data typically from a GIS or mapping system), from structured or semi-structured data collections, and by harvesting data (e.g. web links, text and emails). Zotero bibliographies can be synchronised into a Heurist database and external databases can be searched to bring in data.
The process of manual data entry will be discussed at the same time as the setup of data structures, since the two can be done together so that you can test out and evolve the structure with real data rather than having to plan everything on paper in advance.
Bulk import of data from spreadsheets and other sources is discussed in chapter 6 - Populating the database.
Ch 03: Basic structuring concepts
Documentation rédigée le 07/11/2025 par Barbara Bonazzi, mise à jour le 03/03/2026 par Barbara Bonazzi
1. Structuring your Database
The Design menu serves to configure the structure of the database to accept your data.
New databases are pre-populated with a range of useful record (entity) types, fields and vocabularies which shortcuts basic setup.
The existing entity types can be modified to fit your needs, including adding, deleting or modifying fields.
You can add entirely new record types, or import suitable record types from any database that has been registered with the Heurist service.
The menu also includes functions to register your database so others can borrow your structure (not data), change some basic settings and personal preferences and configure a toolbar of shortcuts.
Functions for modifying the structure of the database and various settings.
Modify
Record types - add/edit the record (entity) types making up the database
Vocabularies - add/edit vocabularies and the terms which comprise them
Base fields - add/edit shared fields which can be reused in many record types
Browse templates - borrow structural elements from other Heurist databases
Visualise – visualise record types and relationships between them as a spider diagram
Setup
My Preferences – set personal preferences relating to the way this database operates
Properties – set various parameters relating to how this database operates
Workflow stages– set rules which are applied when a record changes workflow stage.
External lookups– lookup of external resources already defined or imported by the user
External repositories – storage and retrieve of external media from an external repository
Register– register the database with a central index to make it findable
Shortcuts bar– create a shortcut bar and choose to display below the page header bar
Download
Structure (XML) - export the complete structure of the database as XML
Structure (Text) - export structure as an SQL-like dump, primarily for internal use
Refresh memory - cleans up browser memory; may help fix minor interface problems
1.1. Record types
Record (entity) types are the core of designing an effective database. Each new database comes pre-populated with a lot of record types which crop up in most databases, eg. Person, and record types which need to be structured in a particular way for specific functions, eg. map documents, layers and data sources.
Record types are divided into groups to reduce mental overload, and the groups can be reordered by dragging.
Record types you use all the time should be dragged over into a group near the top so that they appear at the top of dropdown lists.
You can create new groups to organise your concepts.
You do not need to get rid of record types you don't require, just drag them over into a group towards the end of the list.
Before creating a brand new record type, look to see if you can find something suitable using Browse Templates or consider if you can re-use an existing one already defined in your database. However, don't change the general intent of an existing record. For instance, don't change a Media item record into a Document, even if most of your media items represent documents or a Person into an Animal, even though they may have a name, date of birth, sex etc.
1.2. Vocabularies
Vocabularies organise a set of terms which can be used in the dropdown list for one or many term list fields. Vocabularies can contain links to terms in other vocabularies to allow the construction of new vocabularies without repeating terms - for example, a vocabulary containing a few countries being studied from the full set of world countries which are pre-configured as a vocabulary in all new databases.
Vocabularies can contain hierarchies of terms allowing broader/narrower definition of categories.
Like record types, vocabularies are organised into groups, which can be reordered, and vocabularies can be moved into a different group by drag and drop.
Terms can also be moved between vocabularies with drag and drop, or can be nested below other terms or merged with other terms (in which case all records using the term will be re-assigned to the term with which it has been combined).
Terms are defined by six fields:
a label (the term itself);
a description (multi-line text);
a standard code (for example Munsell Colour code, international country codes);
a semantic URI (for use in linked data);
a status (of the term within the database, generally this should be left as Open*);
an image (allowing illustration of the terms for use by people less familiar with their meaning).
Status (this field is little used except for lockign some pre-defined terms required by the system)
Open_ indicates that the record type can be modified or deleted.
Approved_ indicates a record type which has been carefully developed for general use.
Reserved-Locked_ indicates a record type which is required by the system and cannot be deleted (this value cannot be selected by users other than the Heurist team).
1.3. Base fields
Base fields are fields which can be reused in many different record types. They are available when adding fields to a record type; the base field type, name, help text, vocabulary and target record types (where applicable) are automatically applied to the field in the record type, but name, help text, requirement and repeatability may be overidden with customised versions for the specific record type.
A new base field is created automatically if one creates a field from scratch rather than using an existing base field.
One will not normally need to edit base fields directly, but this menu item allows direct access when required, for example if one wishes to change the default name or description.
1.4. Browse templates
Heurist has a sophisticated system to allow databases to import structure selectively from any registered database (databases are registered with Design > Setup > Register). This is a powerful way of sharing modeling work and promoting standardisation by encouragement rather than obligation.
The function browses and selects a registered database, opens up a list of any record types not currently in the target database, displays the fields within a record type if required (base fields already in the target are shown in grey), and can then download the record type along with all connected record types, fields, vocabularies and terms required to create a coherent set of data structures for import.
1.5. Visualise
The relationships between record (entity) types in the database can be visualised in the form of a spider diagram. The diagram also shows the number of records for each node (size of circular shaded area around node) and the number of connections (thickness of connecting lines). The connections include record pointer fields and relationship markers, but not free-floating relationships created by creating Relationship records directly (the creation of Relationship records directly is not recommended).
As a diagram of all record types would be far too complex, the record types to be represented are selected from a dropdown list. Gravity can be switched on to create a self-organising diagram, then switched off to allow dragging of nodes to clarify the diagram. Links can also be built between record types by dragging the link icon.
1.6. My Preferences
Personal preferences for this database can be set in the Preferences dialogue. These include startup search, number of records to display per page, the use of clustering on maps and complexity of the map controls. Personal preferences are specific to each database.
The Preferences dialogue also provides a bookmarklet which can be dragged to the browser toolbar and used to grab infromation from a web page and create a web bookmark record in the database. The information which can be grabbed from secure https pages is limited to URL and title, but highlighted text will also be grabbed from non-secure http pages.
1.7. Properties
@todo-link to chapter 10 Admin > Properties
General behavioural parameters of the database can be set through the Properties function. This allows metadata for the database including a description, rights and a representative icon to display in lists, configuration of connections to Zotero libraries, Nakala and mail servers, configuration of lookups to external reference sources, file types to be indexed and specific behaviours relating to place records, user registration and others.
1.8. Workflow stages
When a record changes its workflow stage, the defined rules are applied. This rules apply to changing access restriction, ownership, record visibility or sending an e-mail notification.
1.9. External lookup
Connect with services enabling the lookup of external resources (gazeeter, thesaurus, library catalogue...) from within a data entry form and insert of one or more fields derived from the external resource into the data. They can also be used to provide specialised processing such as predictive setting of keywords based on frequency of usage and matching with external resources.
Some services are already defined (AGHP, BnF Library, ESTC, GeoNames, LRC18C, MPCE, Nakala, Nomisma, and Opentheso). It is also possible to import new services using the template and guidelines provided in the source code. If your developments are likely to be of use to other people, please contribute them to the GitHub repository.
1.10. External repositories
Store and retrieve external resources such as images, documents, video on/from the already defined external repositories.
Planned repositories include DSpace, Flikr, Isidore, MediHAL, Nakala and Zenodo, although only Nakala has been fully developed as of 2026 (contact the Heurist team if you require another repository) . It is also possible to define who can access these resources, e.g. logged-in user, current user or database managers.
1.11. Register
@todo-link
Register the database with the central Heurist index database. This has several functions:
it allows elements of the structure of the database to be imported into a new database promoting re-use and standardisation;
it allows XML files exported from any registered database to be imported into any other database by reference to the structure of the source database.
Last but not least, it attributes a unique ID to the database and thence a unique ID (known as a 'concept code') to every record type, field, vocabulary and term which has been defined within the database. This is particularly useful in defining special behaviours which can operate across databases, in linking data across databases, and in providing a PID redirection system which can reference any element of any database.
1.12. Shortcuts bar
The shortcuts bar appears (optionally) below the page header bar, and can be used to provide quick access to frequently used functions. The dialogue allows addition of functions from a list of common functions, with a user-defined label and icon, and allows the bar to be displayed or hidden (hidden by default for new databases). The bar can also be modified from the gearwheel icon on the left of the bar itself.
1.13. Download > Structure (XML)
The complete structure of the database is downloaded in well documented XML. Record types, fields, vocabularies and terms are identified both by their names and by their concept codes. It is recommended to first register the database (Design > Setup > Register), as this means that the concept codes are unique across all databases and will be carried with the structural elements wherever the data is imported, even if re-exported and imported further down the chain.
1.14. Download > Structure (Text)
This is a specialised legacy format based on SQL insert statements, used for transferring structure between databases. It is unlikely to be useful beyond this application.
2. Defining Record Types
The first task is to organise the entity types (record types) that you wish to use through Design > Record types. The browser serves to organise record types into groups and create new groups and record types. It also allows you to get an overview of the record types available.
2.1 Record type groups
Record types are organised into groups (the third column above). The groups are purely an organising mechanism to help you find your way around a long list of record types. Changing the order or membership will have absolutely no effect on the data in the database. In addition to the standard groups supplied by default, you can create your own groups by clicking on the Add button.
After clicking on the Add button, you can fill in the title and description of the new record type group :
You can also add new record types in a group and move records types between groups simply by dragging them to the group where you want them located. The groups can also be reordered simply by dragging them up and down. They can be renamed and described by clicking the ✏️ icon which appears next to the group name on rollover.
They can be deleted, only if they are empty. You can also drag record types into the Trash group at the bottom if you don’t want to see them. They do not affect performance and can be recovered later by dragging them back out of trash.
IMPORTANT TIP Always organise the record types you use frequently into the first couple of groups of record types. In this way they will appear at the top of any dropdown lists which saves hunting for them further down. A small investment in well-organised groups will make it much easier to pick from lists or find record types when you need to make changes. The same applies to fields and vocabularies.
2.2. Columns in the form
The columns in the image above are generally self-explanatory.
Count is the number of records of that type.
Clicking on the magnifying glass in the Filter column will trigger a new browser tab with a search result for the selected record type.
The plus icon in the Add column will add a new record of the selected type and open the data entry form for it.
The Show checkbox determines whether the record type is shown in lists in the interface. This may be useful for hiding types you never wish to add individually or search on so that the dropdowns are not cluttered.
The icon in the Dup (duplicate) column will create a copy of the record type with the same fields – this can be useful where one needs to create several similar record types.
You can delete record types by dragging them into the Trash group (from which they can later be recovered) or using the dustbin icon in the Del column (permanent deletion). Some record types are protected from permanent deletion (shown by a lock symbol in the Del column) as they have special functions within the system e.g. Place, Person and Organisation and all the Mapping record types. Any record type referenced by another record type is also protected from deletion (shown by a grey dustbin icon), as is any record type for which records exist. Any of these record types may however be dragged into the Trash group (where they continue to exist and from which they can be recovered later).
ID and ConceptID @todo-link: these are an important feature of Heurist’s design - please see separate explanation below.
Description: record type description, completed in the description field of the record type. You can configure the interface, choosing which columns you want to display, from the bottom right gear.
2.3. Define new record types
Before defining a new record type definition, check whether a similar record type already exists in the database structure, which can be reused or tailored. We strongly recommend using an existing record type where one exists which is broadly what you need, for example such standard types as Person, Organisation, Place, Media, Structure, Site, Document etc., as well as the existing Bibliographic types which are required for synchronisation with Zotero.
The use of existing record types will save you an awful lot of time and are some guarantee of a coherent structure.
It is important NOT to radically deform the meaning of existing record types, fields and terms. Adding, removing or renamign fields to adapt them to a specific need is OK. But completely changing the sense of a record type, eg. changing a Person record into an Animal record, or a Place into a Building, is coutnerproductuve - it is better to make a new record type if there is not an obvious existing type.
Also consider whether a record structure can be imported from another database located through the Heurist Master Index using the Browse templates function @todo-link. The reuse of database types can save time and add to the overall consistency of databases.
3. Add record types
You may add new record types as required. Some databases will require very few new types, others will require many new types, but always re-use existing types that more or less fit your needs (with some changes to the list of fields recorded).
Tip: if you need to create several similar record types, we recommend creating one type with all required fields then using the Duplicate function (Dup column) to create copies which can be renamed and adapted.
Don’t change an existing record type into something completely different, e.g. changing a Document into a Museum or a Place into an Event, as this will make your database incompatible with other databases which have retained the original meaning, and some record types, e.g. Place and Event, have special behaviours associated with them (display on maps or timelines for example).
Select the group in which you would like the record type created and click the Add button:
You will be encouraged to find an existing record type:
Click Continue and you will first be asked to choose a new icon for the record type. This is a limited list of default icons (which we plan to improve with some more Humanities-appropriate icons) – you may find nothing particularly suitable for a medieval scroll, Greek pottery, wall paintings, a writer or a brutalist structure. Go ahead and choose a reasonable icon (use a different icon for each record type as this will allow you to distinguish them quickly) and then later replace it with an icon from an icon library or one that you create yourself:
These icons provide a starting point. We STRONGLY encourage you to find more suitable icons, or create new ones, for your key item types, and replace the icon you have added from this list.
After choosing an icon, you can fill in the basic attributes of the new record type:
Record type name may contain: alphanumeric characters, $, <, >, /, _, – (en dash) or — (em dash). {, }, [, ], *, ‘, and - symbols are not allowed as they are used extensively in SQL queries which underly Heurist. You may also use basic html tag such as
,
, , and .
Description should be a concise but informative description of the record type, both for your own use and to assist other users of the database (this displays when the user hovers the cursor over the record). It is important to include a clear description, not just a repetition of the record type name, for long-term documentation of the content of the database, as it is part of the archive package.
Semantic reference URI for the entity concept is optional but highly recommended if you plan to export Linked Open Data. Multiple URIs may be separated by semi-colons.
Show Record URL checkbox is used to display a special URL field at the top of the record editing form. This URL is attached to the record in result list displays allowing Heurist to be used as a bookmarking tool. In general we recommend not checking this box unless each record will have a specific canonical URL associated with it. Other URLs can be recorded in standard single-line text fields, which will be recognised as a hyperlink if they start with http://, https://,
The thumbnail and icon can be chosen from the library, but if uploaded from another source should generally be of the order of 16x16 and 75x75 pixels. They will rescaled to these sizes. The icons are used in result lists, at the top of the data entry form and record view panel, as the default icon on maps, and anywhere else the record type needs to be quickly visually identified.
Additional information is a normally-closed section of the form which shows which group the record type will be assigned to, its status (generally this should be left as Open*), whether the record type should appear in lists and dropdowns (the Show checkbox on the record types browser), whether the description of the record type should be shown on the data entry form when help is switched on and the number of records of that type.
Status
Open_ indicates that the record type can be modified or deleted.
Approved_ indicates a record type which has been carefully developed for general use.
Reserved-Locked_ indicates a record type which is required by the system and cannot be deleted (this value cannot be selected by users other than the Heurist team)
3.1. Defining fields
You will note that there is no ability to define the fields when you first create a new record type (this capability is however available if you click on the edit icon next to the new record type in the screen below and then on the edit field button).
It will open a data editing form for your record type.
You can access to the field editing panel by clicking on the gear next to the field name. It allows you to edit the field information or add a field below the selected field, for more information see @todo-link to chap 5.
Rather than adding fields in vacuo, we strongly recommend immediately adding a new record of this type by editing the fields, setting up both the attributes (fields) and the connections (also set up through fields) directly from the data editing form and saving your record type (save button at the right bottom of the windows) so that you can work iteratively and see how it will actually be presented.
3.2. Importing new record types
Heurist can import a list of new record types from a CSV file, or manually entered data in this form, using
Design > Record types > Import from CSV. This allows for rapid basic setup of new record types.
After uploading a CSV or manually entered data in the form, you need to choose the field separator (comma, tab, semicolon or space), indicate if the first line contains the labels of the field of the record type and click on the analyse button. Finally, you need to select the record type group and field assignment (at least name and description).
The allocation of headings, fields, labelling and behaviours within each record type is, however, too complicated to be set up as an external file (although it is handled automatically in the case of XML import between Heurist databases) and as noted above is best handled through modifying the record structure iteratively while entering real data.
3.3. Browsing templates
Heurist has a powerful mechanism for finding and importing database structure (entity/record types, fields and vocabularies/terms) from another database, which is covered in detail in a separate section Browsing templates @todo-link.
This is very useful where either the Heurist team has set up a template for a particular type of use (which we may have borrowed, with acknowledgement, from a Heurist user) or where colleagues have developed a useful database structure you would like to re-use, or use as a basis for developing your own. This re-use of structure can be an enormous time-saver and also encourages data compatibility and _de facto _standards.
3.4. Change Record Type
First of all, check that the record type you want to change to already exists, and if not, create it. You can change your record type from the Explore tab. Select the item(s) whose record type you wish to change. Click on the Recode>Change record types drop-down menu.
It will open a windows in which you can change the record type by selecting another record type in “Convert to record type”. The record scope define the item(s) on which you want to apply the change.
After validation, the following warning appears. Before validating, make sure that the fields in your record match those in the new one, otherwise you risk losing information and invalidating your data.
If you check “tag affected records (auto-generated tag)”, a tag will be associated with the modified record type. It will be visible in the admin panel of the data editing form on the right.
3.5. New Record : permission settings
The access permissions to all the data entry of a specific record type can be changed by selecting Permission settings at the top of the list (right-hand panel below) which pops up on rollover of New, or by clicking on **Settings **below New. It allows to have additional control over the new record parameters:
By default, records in a new database will be visible only to logged in users. Settings / Permission settings brings up a dialogue allowing you to control the type and permission settings for future additions (cf. tab that explain database management permission explicated @todo-link chapter 2 / chapter 10.)
This can be used not only to determine the future record type and permissions which will be created when you click on New, but also provides a URL which can be bookmarked or added to a web page to create new records with those permissions. The use of a tag or tags can be used to flag new records added, for example, by guests, that can be retrieved for editorial vetting. Other values can also be set with suitable parameters in the URL.
4. Heurist Identifiers (H-IDs)
Heurist attributes a new sequential identifier (known as an H-ID) to every record in the database when it is created, regardless of type, and these identifiers never change and are never re-used Unlike conventional relational databases, the sequential numbering of records is across the whole database and not across individual tables. This may encourage users to create additional sequential identifiers in specific tables using the field increment function, but we strongly discourage this. H-IDs are unique identifiers which can drill down to a specific record anywhere in the Heurist domain of registered databases.
Their invariant nature is ideal for sustainable identification of items. Once something is recorded as H-ID 3456 it will always remain 3456. In fact, if you accidentally record something twice (or more) and later merge the records, the identifier of the merged records will point to the remaining record, so any of the H-IDs used will reference the actual record for the item.
Note that a field Original ID is defined in all new databases. We encourage the use of this field (which may be renamed) to record the identifier or identifier history of any records imported from another system. This field may be marked as non-visible in the Base fields definition on older databases; if you can't find it, go to Design > Base fields, click on the Show all checkbox (top right), scroll down to Original ID and check the Show checkbox.
4.1. Registering a database
The creator and owner of a database, user #2, can register the database with the Heurist Master Index (the system administrator can also do this with an override password defined in the system configuration). To do so, go to Design > Register, enter a description of your database and then click on the register button. The URL will be automatically created with the name of your database after “db=”.
In the Database Registration Screen enter a description of this database (for public consumption). This must be 40 characters or more before you can select Register. If successful, your registration details are shown:
4.2. Heurist Master Index
This is a publicly accessible list of Heurist databases, which makes all Heurist core databases, curated database templates and all registered end-user generated databases available for reference.
Only the database structure is available by default; data is only accessible where individually authorised within the database (there is no central control of this).
Curated templates are well-developed schemas developed by the Heurist team or members of the Heurist community.
Optionally registering your database with the Heurist Index provides a number of advantages:
Gives access to certain advanced features; if you have not registered and select such a feature, you will be notified to register first.
Gives your database a globally unique code, named ConceptID @todo-link . The code is the next available sequence number in the Heurist index, which is unique and permanently identifies that database, even if it no longer exists.
Makes your database available to other Heurist users. Registration of the database publishes the structure (but not the data) of your database to the Heurist Index Page, for use by other Heurist users. This allows other database users to import structural elements of your database (record types, field types and terms) but does NOT confer any form of access to data in this database.
Any data you export will be interpretable by other systems with the help of Heurist's central index, allowing any Json or XML file exported from your database to be immediately imported into any other Heurist database even if the target does not (yet) have the record types, fields and vocabularies required to hold this data (they are imported automatically).
4.3. Collection Metadata
After registering the database you should edit the database's collection metadata in the Heurist Master Index. If you are asked to login, use your email address and the same login password as your current database (or the first database you registered, if different).
Please fill in as much detail as possible to help people find your dataset/collection if it is relevant to them. You can later edit this record as any other record. You can unregister your database by deleting the record (you own it). The database will still have a registration number but it will not appear in the database.
5. IDs and Concept IDs
In Design > Record types, you will find frames of your records types and in these frame, two identifiers associated to the record types (respectively in the columns ID and ConceptID).
The ID column of the record type frame shows the internal ID of the record type in this database.
The ConceptID column shows a very important piece of information – the unique ID assigned to every record type defined within the entire Heurist system when the database had been registered.
The Concept ID is made up of:
A 4 digit number which uniquely identifies the database and is assigned when a database is registered with the Heurist master index, running at HeuristRef.net. The value 0000 indicates that this database has not yet been registered, Values below 100 indicate databases created or curated by the Heurist team.
A second number of up to 4 digits which is the internal code of the record type in the database in which the record type was defined.
When a database is registered, the Concept ID migrates from 0000-xxx to nnnn-xxx where nnnn is the registration ID of the database. When the record type is later imported into another database it retains this concept ID so that it can be automatically aligned with the same record type in other databases.
This also allows Heurist to carry out specific actions based on known concept IDs or to import a copy of a needed record type for a specific function.
NOTE: the same system of Concept IDs applies to every base field, every vocabulary and every term within the Heurist domain, as well as to every record and every value (for registered databases). One can locate the definition or record/value wherever they are through a PID (Permanent Identifier) which is recognised by any correctly installed Heurist server.
Ch 04: Data entry
Documentation rédigée le XX/XX/XXXX par Y mise à jour le 25/06/2026 par Oanez Hélary
When you create or edit a record it opens automatically in data entry mode. It is a form where the fields to fill are specific to each entity type and the values given to the fields change for each record.
The data entry form is also a data structure modification form - click Modify structure at the top (available to database adminstrators only). This allows direct modification of the structure for the record type being edited so that the changes can be tested as you work. See later, and the following chapter.
1. Opening and Navigating Records
1.1. New Record
To create a new record and fill its data entry form, you can click the [New] button. The type of the record you add by doing so is indicated in italics under "New". It will be the same type as the last record you added. To change it, just stay over the button without clicking it : a slide tray appears and allow you to click the correct record type (entity type).
Another way to add new records is with the [Populate] menu. See chapter 6 for further details.
1.2. Existing Record
To edit an existing record, you first need to find it. This can be done with the [Explore] section. You can access it by clicking on the Heurist logo or on the button in the left menu. See chapter 7 for further details
.
Double-click on the record you want to edit, or click on the pencil icon
or new tab icons
which appear when you roll over it in the results list. You can also click the pencil icon on the Record tab in the righthand pane or wherever it is used to view information on a record.
2. Layout of the Data Entry Form
The Data Entry form allows you to edit the record you're consulting and its metadata ([Record Summary]). It also give you easy access for editing the structure of its record type ([Modify Structure]).
The heart of the Data Entry is the form which allows you to indicate the values of your record. At the right of the form, there is an expandable column with metadata about the record. At the top of the form are some buttons, either related to the record type ([Modify Structure] and [Constructed title]) or to the form itself (in green on the screenshot). Finaly, two horizontal bars frame the windows : they govern the window itself and the interactions the latter allows with the database. We will examine each of the components of this form in turn.
2.1. Top and bottom bands
2.1.1. Top band
The top band gives a summary about the record : its record type, unique ID number for the database, and its constructed title (which is the name of the record in the database). On the right side of the top band, there is a [Fullscreen] and a [Standard] button : the first one expands the window, the other centers a smaller view of it. When screen scaling is changed, the form automatically resizes to keep the controls onscreen.
2.1.2. Bottom band
At the left of the bottom band are the navigation controls. If the record has been opened from a set, you will have the option of stepping to and fro through it (the order is determined by the filter applied to reach the data, if non it is antechronological by last modification). If any change has been made, you will be proposed to save the changes.
The [Dupe] button will create an identical duplicate of the current record, with a different ID.
The [New] button will create a new blank record of the same type as the one you are editing. If any change has been made on the source record, they will be saved automatically. On the right are the means to save, close and cancel any changes made to the data.
Some buttons are disabled if no changes have been made to the data, but even when apparently disabled the [Save] button can be clicked to update the record title or the personal data which do not trigger the changed data flag.
2.2. Record type related buttons
In the top left corner are the icon and name of the record type to which the data belongs.
2.2.1. Modify structure of the record type form
Click [Modify Structure] to modify the fields of the record type. A new windows will open with a summary of the fields to be completed for a record of this record type on the left, and the Data Entry form on the right.
This is an extremely powerful function, as it allows you to modify the structure of your database on the fly without affecting existing data (other than intentional deletion of fields and associated data, which comes with adequate warnings). Fields can be added, renamed, reorganised, grouped under headings and to some extent field type changes are permitted (without loss of data).
The numbers next to the tree show how many times a field has been used; this is particularly useful when importing legacy data to identify little-used fields which one may wish to remove or combine with other fields. The tick and crossed-out circle icons allow one to open a new browser window for all the records with / without the given field.
See chapter 5 for further details.
A gear icon appear at the left of the fields. Rollover displays a short menu of frequently used changes. Clicking on it allows you to edit the field in question.
Strucural changes will be applied to the entire record type, thus modifying the structure of all records for that type. Values entered in the form relate to the current record and can be saved exactly the same way as in standard data entry mode.
2.2.2. Modify the constructed title
Click the gearwheel left of [Constructed title] to modify the title mask for the record type.
The title mask gives you a summary of the record content which is displayed in lists of results and where a record is referenced through a record pointer or a relationship marker. The form you get by clicking on [Constructed title] allows you to personalise it by selecting the fields which are concatenated to provide the title. See chapter 5 for further details.
2.3. Form options
At the right of the record type related buttons are several options :
When checked [Show help] shows the Help text, which specifies the expected value of the field under it. This help text corresponds with the Description of the field entered when defining the field (and can be changed)
The [Optional fields] checkbox allows you to show or hide optional fields in the form
[Hide from public] : when clicked, only the registered users can see the record. When unclicked the record is readable by anyone. The visibility of the record is indicated in the [Record Summary] (see 2.4), at the end of the record view (which everybody can see with the HTML link if the record is public, even if the database is not), and in the result view with the color (blue if public) and eye symbol.
[Refresh structure] : refresh the structure. Useful if modifications have been made to the record type or to the constructed title from the data entry form to apply them to the actual record.
[History] : open the History section of the [Record Summary] (see 2.4)
[Template] : download a csv summary of the form for the record type with details about the fields and their accepted values, starting with the values automatically asked for all the records, regardless of their record type (H-ID : the unique identifier automatically attributed to the record ; rec_URL : the record URL ; rec_Tags : the tags attributed to the record).For use in offline or highly repetitive data collection using a spreadsheet. Lists of terms can be used to control data entry (requires setup in the spreadsheet). Data can be imported back to Heurist with Import > Delimited text / CSV.
[Bug report] : open a form to report a bug
2.4. Record Summary
On the right side of the form is a tab titled [Record Summary] giving several pieces of information relating to the data but distinct from the values which compose it. The righthand panel is organized in seven parts: general information about the record and six sections in accordion-style: Private; Tags; Linked records; Scratchpad; Discussion; History.
2.4.1. General information
Opening the right side panel shows the record type of the record. Click on it to change it. The values of the previous fields will be relocated in other fields (for example the value of the field "Family name" will be assigned to the field "Title") if the field of the source record type is not in the record type of destination.
Under the name of the record type are indicated the record access and ownership. By default, the record is viewable by anly logged-in user and the owner is the one who have created it. The later can change ownership and visibility of the record by clicking on the pencil icon.
Ownership can be reattributed to "Any logged-in user", everyone, a specific user, or a specific workgroup (about workgroups, see chapter 10)
Visibility can be changed to be the same as the ownership, "any logged-in user" or public (everyone can access it)
Under access and ownership are :
the name of the person who has added the record
the date of creation
the date of last update
Those cannot be changed (except for the third one which changes automatically when the record is edited).
2.4.2. Private
This section concerns the management of the record by the logged-in user. It contains two parts who can be edited using the pencil icon.
Bookmarks : this part is personal and cannot be consulted by other user. It allows you to define a password reminder, to rate the record and to write personnal notes. Writing something in this section will trigger the bookmark icon, who will appear orange in the database. If you have write a password reminder, a little key will show as well.
The content is not encrypted. Do not enter important passwords verbatim, as the security on on this data is basic. We suggest using a prompt whih is meaningful only to you, rather than an actual password.
To remove the bookmark, go to the result section, select the record, click [Selected], then unbookmark it. It will remove the bookmark itself as well as its content, the tags of the record and the password reminder.
The Data Entry form doesn't allow you to unbookmark a record, only to clear the content of the bookmark if you created one prior.
Note: The bookmark's icon doesn't appear anymore in the later version of Heurist.
Reminders : allow the setting of immediate and periodic reminders to either an individual user, a workgroup or specific email addresses. The minimum frequency is daily, but monthly or yearly might be more appropriate.
2.4.3. Tags
Tags are a controlled list - they can be selected from an established list by typing three or more letters. New tags are added simply by typing them. Tags can be multi-word and are not case sensitive. Tags can be either personal or shared with members of a Workgroup. Once confirmed an existing tag can be found by typing three or more letters.
Tag retrieval functions are rather limited (tag:eat will find anything with"eat" in it; tag=eat will only find the word Eat or eat) and they cannot be used in facet searches, crosstabulation, linked open data, or organised hierarchichally. We therefore recommend setting up any controlled categorisation using Term list fields which have many more retrieval and organisational functions.
Note: Tagging a record creates a bookmark on that record.
2.4.4. Linked records
This section shows any records which have record pointers or relationship markers connecting to the current record. The listing is clickable so that one can navigate either to the linked record or to the relationship record linking the two records.
Note: The indenting is purely due to the length of the relationship terms – it has no hierarchical significance.
2.4.5. Scratchpad
The Scratch space section is merely a text field which can hold data until it is organised. It is saved as part of the record but it is not accessible in any way except as a cut-and-paste space during data entry.
2.4.6. Discussion
This is a deprecated function which is not expected to be resurrected.
2.4.7. History
Click on [History] on the main form for the record to retrieve its history. It show the changes done to the record and allows to revert them by checking the version you want to keep. The user who made the changes is identified by their ID number. You can bulk check by modification date.
2.5. Record form
The form body contains all the values that make up the record. Depending on the record type's structure, the fields may be divided into different tabs (these are purely for organizational convenience; they do not change the data in any way). The different fields of the record type are then displayed one after the other, along with their corresponding values for that record.
you can tab from field to field during data entry
2.5.1. Field categorization
Fields can be required, recommended, or optional.
Required fields are bold and red. The form cannot be saved until they are completed.
Recommended fields are bold and blue. They will always be displayed in the form.
Optional fields are blue and can be hidden by unchecking "optional fields".
If you really must save a record even though you have not completed all the required fields, you can click Modify Structure (at the top of the form). It will ask if you want to save the data - reply Yes. Althogu you are now in Strucute mode, you can simply exit nd the data will have been saved. It will show up as an error in Admin > Test integrity, but it will not cause a problem (other than that it is not there when it is meant to be)
2.5.2. Field behaviours
As you roll over a data field you will see a number of icons at the beginning or the end of the field.
clear (delete) the value
hide (currently everybody can see the value) or
show (currently only the registered users can see the value) the value to public. You can show a record to public (see 2.3) but hide some of the values of it by doing so.
open the vocabulary editor (directly at the vocabulary used by the field). Allowing you to act (add, edit, creating sub-term, merge, rearrange, delete) upon the terms it contains
add new term to the list from where the value is taken
add a value to the field. It is to the left of the field, only if it can take more than one value
drag the value up or down. Allows reordering the values of a multi-valued field
appears under the name of a multi-valued field after a reordering of values. Will undo it.
show calendar to select a date. It remembers the last date entered to minimise navigation. However, if you wish to skip to a different period or enter a historic date you may type the whole date with dashes, or simply type year and month or just year. If you then select he calendar icon it will jump to the appropriate year and month.
brings up a more comprehensive date setting with several tabs (see 3.2.1.)
add a picture by taking it with with the camera on the device you are using
edit image metadata
3. Field Types
Not all icons appear beside each field, as the actions they trigger isn't always expected. The data entry form is designed to gather data in a structured format. While designing the database (see chapter 5) you specify the required data type for each field :
Dropdown (terms, may be hierarchical)
Numeric (integer or decimal)
Text (single line text)
Memo text (multi-line text, html or code)
More complex fields
Date / temporal More complex fields with specific behaviours
Geospatial Used to record locations/areas and build maps
File or media URL Used for images, audio, video, 3D, and other files (can be on a remote server)
Linking fields
Record pointer / Foreign Key } These fields are the key to linking records
Relationship marker }
3.1. Simple type fields
Numeric (integer or decimal) A positive or negative number, with or without decimals. Non-numeric characters other than minus or decimal point are ignored.
Text (single line) A single line of plain text, typically used for names, titles and short descriptions. Use multi-line text for longer descriptions. Max 250 characters. If a text value starts with http:// or https:// it is treated as a URL.
Memo Text (multi-line or html) A plain text field which can accomodate multiple lines of text. Use for longer textual content (drag and drop the bottom-right corner to expand the editor). Offers three editors :
text: write in plain text
wysiwyg: What You See Is What You Get, interface with several button to format your text so you don't have to know html to do so
codeeditor: a code editor, it makes it easier to write directly in a structured language such as xml or html or to correct it.
As this type of field deals with html, you can integrate to your text other elements, such as :
Multimedia elements (pictures, videos, etc.). It will propose you to caption it.
Hyperlink to be open in the current or a new window
Link towards another record.
Dropdown (Terms) A flat or hierarchical list of categories, where the terms are drawn from a predefined vocabulary (the vocabulary can include terms from otehr vocabularies by reference). Generally from a single one eg. countries, languages, source, condition, material, colour. Using dropdown terms ensures referential integrity standardizing entries (e.g., avoiding inconsistencies likes "Yes" vs "yes"). Use dropdown when the list is relatively static and the categories do not exist as separate records in the database (in which case use record pointers).
3.2. Special type fields
3.2.1. Date / temporal
A calendar date with or without time of day. Whole years can be used. BCE dates are expressed as negative. Can also accommodate date range and uncertainty.
The date can be entered manually, with the calendar icon, with the [range] button, or with the range icon. The second line of the field allows to select directly yesterday's, today's and tomorrow's date in one click.
Entering the date manually :
You can write the date in the field using the yyyy-mm-dd format. You don't have to write the whole date until the day's number.
Using the calendar icon :
The calendar automatically open on the last date entered. You can start writing the date manually and then select the day on the calendar to fastering the process.
You can click [clear] to reset the date you started entering, or [Today] to jump to today's date and navigate from there.
Using the [range] button or the range icon : for date estimation.
If the purpose is to obtain a date range, you should use two fields : Start date and End date, which will give you two values. Both of them are date field type. Using only one date field will provide only one value. Thus the range function of date type field is useful for indicating a date whose accuracy is not certain.
Simple Date : for a single date. To use to specify the degree of certainty about the date (exact, approximate, before, after), the time of the event, the type of determination of the date, the calendar, and to add comment about it.
Simple Range : for setting a estimation of date based on two other (earliest possible and latest possible). Allows you to precise the probability curve (flat, central, slow start, slow finish), the way the estimation had been made (attested, conjecture, measurement), to precise the calendar and to comment the date.
Fuzzy Range : same as Simple Range except that the certainty is modulated as the beginning and end date of reference are subdivided in "not before/after" (Terminus Post Quem, Terminus Ante Quem) and "probable begin/end".
Radiometric : useful for radiometrics values. Can only be used to set a BCE (before common era) or a BP (before present) date. You can precise what is the standard deviation (Std dev) of the value, its positive deviation (pos dev)or negative deviation (neg dev). It is also possible to indicate the Lab Code of the sample used and if the date as been calibrated. The date can be commented.
3.2.2. Geospatial (point, line, polygon ...)
A vector spatial object describing a location on the earth's surface. This field type is recognizable by its little earth icon.
Clicking on the field automatically open a map where you can set the location by using the search bar to select a place, by entering coordinates or by clicking on it after having selected a draw option (polyline, polygone, rectangle, circle or marker).
You can click and drag to navigate the map. There is buttons to zoom in and out, but you can also use your mouse's wheel. The map comes with several features.
At the left of the screen, you'll find :
Bookmarks : you can bookmark places/areas on the map. You have to name your bookmarks. You can then find them by selecting their name in the dropdown. To edit or remove a bookmark, click at the left of the exit cross. A polygon or a circle cannot be used as a bookmark.
Drawing options : Simple markers (record type icons or specified markers including cirlces and rectangles) can be used to indicate the place referenced by the geospatial field. Several icons at the left of the screen allow you to do so.
Editing layers : @todo: JE N'AI AUCUNE IDÉE DE CE QUE ÇA FAIT
Create new map document : add a new record of type "Heurist Map Document" . Map documents allow you to set u pa series of map layters, data sources and styles to create a specific map representation. For more detail see chapter ??
Record types are composed of fields, which have a field type. For example, the record type "Place" contains several fields which have field types : Place name (text), Place type (dropdown), Country (dropdown), Location (geospatial), etc. A lot of record types and fields are already in the Heurist database (here, the geospatial field type is linked to record types that are present from the start into the database). We advise against deleting them.
3.2.3. File or media URL
A file such as a photo, video, PDF, scanned document, spreadsheet or XML, uploaded and stored in the database or a URL to a remote file or streamed content. This field type is recognizable by its file icon.
Clicking on the field will open a small windows which allows to choose between using a file already uploaded in the database ([Choose previously referenced file]), upload a new one (to Heurist or to external repository, but the later is depreciated), or use an external URL linking directly to the file. You then might indicate some metadata about the file : its name, copyright, copyright owner and visibility (public or logged users)
3.3. Record linking type fields
These fields types create connections between the new record and other records of specified type or types (potentially including the same type as the record you are editing).
There are two kinds of record linking field type :
record pointers : these simply add a direct link to a particular record (equivalent to a foreign key in conventional relational databases) as a value in the record. The target record type(s) allowed are defined by the record pointer settings;
relationship markers : these add a new Record relationship record linking the current record with another record. The target record type(s) and types of relationship allowed are defined by the relationship marker settings.
In both cases the link will appear in the network view (see chapter 8b) and if the target record is not yet in the database, the field will allow you to create new records (see chapter 5).
Record pointer / Foreign key A simple connection to another record, normally constrained to specific target record type(s).
Use where the field represents a direct connection and is permanent eg. parent, author, component, place, period.
Record pointer fields allow a new record to reference other records of specified type which contain sets of related information, often components of the parent record, eg. a ship's captain, a person's father, etc. The referenced record may be an independent entity (eg. place, publisher, person, work) or group together related information such as the attributes of a person or object, a set of attributes which apply for a specified time period, or the attributes of some part of an object or for a particular type of object.
The type of relationship, however, is implicit in the field name - father, mother, service, education, place or component all imply a fixed relationship to the parent entity - but not otherwise recorded.
Typically, selecting the field opens a list of available values, comparable to a dropdown field, except that the options are existing records instead of terms from a vocabulary.
Relationship marker A more complex connection which allows specification of relationship type and period of validity.
Use where there are numerous possible connection types and/or connections have a time span eg.roles in an event, social relationships, ownership, marriage, address.
Relationship marker fields create a connection between two entities with an explicit relationship type (selected from a dropdown), as well as a date range and other contextual information.
They are particularly useful when there is a large list of potential relationships, such as roles of actors in an event, interpersonal relationships, stratigraphic relationships and so forth.
Relationship marker fields look like a composite field in the data entry form but, rather than creating an attribute attached to the record, they create a separate relationship record which can carry significant extra information about the relationship.
Filling this field will require to specify the relationship type and the target record. To ad additionnal informations, click on [Edit attributes]. You'll then be able to add start and end date of the relationship, a description, commentaries and title.
4. Optimising Forms for Usability
The few extra minutes you will spend ordering the fields in each record type, splitting them up into sections with section headers, and setting the basic parameters of requirement, repeatability and field width, will make all the difference to ease of data entry and the way you—and other users—feel about entering data.
Make informative field names. For example "Location of meeting" rather than simply "Place", or "End date" rather that "End".
Use tabs and dividers to break the data up into logical groups.
Set field lengths appropriately. Set single line text fields to a length which will fit a normal value, as they will automatically expand as you type or if the value exceeds the indicated length.
Think about which fields should be Required, Recommended or Optional (use for fields which are rarely filled in).
Keep all of this in mind while structuring your data, which is the subject of the next chapter.
Ch 05: Modifying record structure & connections
Documentation rédigée le xxx par Guillaume Porte
One of the most powerful features of Heurist is the ability to modify record structures at any time without rebuilding the database or reprogramming the interface, and to do this while you are in the middle of data entry. This is the key to the iterative nature of structure development in Heurist.
To open the structure modifying interface :
Either : Design → Record Types → [click on the pen next to the Record Type name] → [bottom of the pop up window] Modify record structure (fields, tabs etc.) - was Edit fields in older versions.
or
Or : Create a new record or open an existing record of the appropriate type for editing
and click Modify structure (at the top of the form).
We recommend using this method to dynamically change structure as you start to develop your data
Note: Shifting to Modify structure mode will save the record data without checking it for validity. It can be useful to temporarily save a record but you should use Admin > Test integrity to check for any records which have been incompletely described. Incomplete records do not cause Heurist any problem, it is just that data which should be there is missing so counts, record titles or formatted output could be affected.
Modify Structure will open the data entry/strcuture modification window :
You can continue to edit the data while you are in structure modification mode - it is a useful way to test that the structue you are creating coresponds with your real needs.
The example above shows a complex form with 12 tabs and nearly 150 fields, before cleanup, imported from a legacy database. The navigation tree is synched to the fields so that one can navigate in either the form or the tree, and move or delete fields from the tree. The form on the right is updated immediately. The tree also shows details of the field on hover.
The navigation tree is particularly useful for cleanup of legacy data (or for self-criticism!) as it shows how many times each field has been used in records of the current type. This allows one to spot unused or nearly unused fields. The icons following the count (tick and slash) then lead to a search for all the records with the field and without the field respectively, allowing immediate verification and correction.
Navigation panel
Clicking on Modify structure opens a navigation panel on the left, which we describe in detail below.
Options (above the tree)
<< chevrons - clicking on the chevrons will shrink the navigation panel, but you are still in Modify Structure mode. The chevrons will reverse to >> which allows you to reopen the panel
Export fields as CSV : gives a list of fields with their parameters and usage count. Note also that there is a Template download link towards the right of the data entery form which downloads a CSV file which can be opened in a spreadsheet to use as a base for data collection.
"Field name","Field type","Multivalue","Requirement","Usage count"
"Person H-ID","Built-in","Multivalue","Required","N=273"
"Gender","Terms list","Single","Optional","N=246"
"Role","Terms list","Multivalue","Optional","N=263"
"Start date","Date / temporal","Single","Optional","N=198"
etc...
Update Counts : update usage counts shown to the right of each field - blank means the field is never used
Tree view of Fields and Tabs
The tree view is a powerful way of reorganising the order of fields, including moving several fields at once by dragging the tab or heading which contains them.
Each field in the tree shows:
the field name
the number of times that this field is used in this record type (multiple values are counted, it is not just the number of records which use the field)
the tick icon opens a search on all records using that field
the cross-out icon opens a search on all records not using that field
On hover, you see the internal code and concept code and the description of the field
Note that all fields, including hidden fields, appear when in Modify Structure mode, since otherwise there would be no way of resetting their status or deleting them.
You can refresh the counts if they are not showing (they are not calculated automatically if there are a very large number of records, > 100,000 in a single type) by clicking on the word Count.
Deletion of fields
A Delete button also appears on rollover allowing deletion of the field and (optionally) the data attached to it:
Note that deleting a field does not in itself delete the data associated with a field. To delete the data as well, you will need to check the box on the popup warning. If this box is not checked, the existing data will appear at the bottom of your form in a section “Non-standard data for this record type” . This can also be useful for copying data into the fields which remain before deleting the values individually. If the data is really not required check the box to permanenly delete the data for that field.
Deleted fields which still have data can be recovered by clicking on the upwards arrow next to a value (which will reinstate the field for all records of that type) and then renaming the field (which will be identified by its base field name and description; the revised name and description assigned to it for the particular record type are no longer available, so for example "Title of painting" might be reinserted as "Name or title").
If there is no data anywhere in the database which uses the base field on which this field is based, you will be asked whether you want to delete the base field completely. It is a good idea to keep standard base fields which were part of the initial set up of the database, as they may come in handy later and they promote standards across many databases, and to get rid of base fields you have added to the database (generally through adding a field to a record type, which creates a base field at the same time) if you no longer need them.
You can delete an individual value from a field by clicking the X icon which appears at the end of the field when your mouse pointer is over the field. This will not delete the values from any other record.
Edit a field
[TODO]
Field settings icon
The gearwheel icon left of each field displays a small dropdown on rollover:
The bottom section allows rapid adjustment of cardinality (requirement and repeatability) and of field width.
By default new fields are set to Recommended.
Fields can also be marked as Hidden. In that case neither the field nor its value (if any) is shown in any mode except structure modification. Hidden fields are particularly useful, and were originally developed, to allow a template to contain many fields for different uses so that they are available to be unhidden as required, rather than presenting the user with a plethora of fields which is highly confusing/off-putting, that they then need to delete (and in the process lose, requiring more thought than simply exposing an existing field).
The other entries in the menu are discussed in the following pages.
Edit definiton gives access to all the settings associated with an existing field – its name, help, width and height, cardinality, target record types etc.
+ field allows insertion of new fields
+ connection is a shortcut method for inserting the connection field types (record pointers and relationship markers). It exists to encourage users to think about, and use, these very useful functions
+ tab or heading allows insertion of new structural and layout elements such as tabs and dividers within tabs (these are shown as expansible sections in the navigation tree and may be dragged to move blocks of fields associated with them).
+ explanatory text allows insertion of a block of text which will show up on a grey background in the data entry form. It can be used to provide instructions or make notes on record structure changes which are needed (it will appear on every record). It has a title, which appears even if help is off, and a body which appears only if help is on
+ sub-record allows a set of fields to be designated as a sub-record, transferred to a new record type, linked to the current record type by a child record pointer field, and then all the data is transferred and the record pointers updated.
Field types
//TODO
Text field
use only for names etc which can be represented by a single line text
handling URLs
Memo fields
text vs wysiwyg vs code
processing URLs within text
inserting media
linking to other records simply by H-ID
Terms
Vocabularies - see more detailed discussion of vocabularies later??
Adding terms
Importing terms
Hierarchical terms, importing, retrieval
Terms as checkboxes/radio buttons
Image terms
Description and standard code
Term translations
Linked terms
Relationship terms - see under relationship markers
Checkboxes and radio buttons
Dates
Years, years-months and simple dates
Date ranges, different ways of representing
Fuzzy start and end
Different calendar and conversion
Import and auto-correction of dates
Entering historical dates: When entering a date, simply type the year in the box to instantly jump to that year, then select from the calendar dropdown
Numeric
Dealing with integers and whole numbers
Record pointers
Pointer mode
Filter browse list
Child records
Relationship markers
//TODO
Insert field
We strongly recommend adding a record of each type and adding fields using Modify structure from within the data entry mode, because this allows you to test how it works as you go along. This is much more effective than creating a set of fields or a form in the abstract and then finding that it is unusable in practical terms.
Choosing existing base field(s)
The top half of the form allows one to browse for existing base fields and insert them into the current record type definition/form via the Choose base fields button. The text on this part of the form gives some guidelines: explains the process:
_Rather than defining every field from scratch, you can pick some frequently used pre-defined fields from the existing Base fields. The base fields chosen should have a similar sense of meaning, e.g. use Start date for Birth date, Creator for Author, Short __description for Abstract, Extended description for Notes. You can rename the fields to what you actually want once selected - the new name applies to the current record type only (the base field retains its name).
Do not completely redefine a base field f_or a different purpose than it appears to be intended for, for instance redefining Family name as Street, Length as Count, or Format as Condition. Significant change to the meaning of a field may later lead to confusion and reduce the degree of interoperability between databases.
Fields which use the same base field will reference the same vocabulary (for term-list dropdowns and relationship type) or the same target record types (for record pointers and relationships) - you cannot change the vocabulary or target record types for on_e without changing it for all the others.
There are over 200 pre-defined Base fields. Use the Search for field function at top right of the list of fields to find ones that are useful (remembering to search for English words – sorry to speakers of other languages).
Only Base fields not already used by the record type will be shown – a Base field can only occur once in each record type (although it may contain multiple/repeating values).
Creating a new field from scratch
If none of the Base fields seem to correspond with your need, fill in the details for the new field you wish to create in the lower part of the form:
The Field name will show a list of possible matches against existing Base fields as a dropdown once three characters have been typed. If none of them looks useful, continue typing your desired name and select it from the list |(it should be marked as NEW). Add the help/description text and select a data type, at which point it may ask you to select or create a vocabulary for a term list field or relationship marker, target record types for a record pointer or relationship marker field. You can also select cardinality and enter semantic reference URI(s).
The result will be a new field for your record type. However, at the same time, Heurist creates a new Base field with the same name, description, data type, vocabulary and/or target record types. This Base field can then be re-used as a field in any other record type; its name and description will default to the Base field name and description, but these can be edited separately for each record type.
Normally you will click the simple **Create new field **button. However, if you click the Create and customise new field button it will create the field and immediately go into field structure edit mode to adjust details such as cardinality, width and height, default values and incrementing, and field visibility. This may also be useful if you want to use a very generic name to ensure a generic name for the Base field, and then change it to specific version for the current record type.
Insert tab / divider
Tabs and other dividers (formerly known as separators) can be used to make your forms much more usable. You will first be asked what sort of separator is required, and after initial creation you will be able to enter the name and description (which will show as the text below the name if Help is on).
Tabs run across the top of the edit form, unless you choose Tab (new group) in which case it will start a new section below the existing set of tabs.
Forms can also be broken up with static or collapsible blocks (which can be initially open or initially).
Within tabs and blocks you can create Section headings which can also be static or collapsible and initially open or closed. These dividers will appear with a horizontal line at the point of division, as well as a help text which appears beneath it if help is on. The help text will often be left blank.
Edit field structure
The edit field form opens up within the data edit form and gives access to all the settings specific to the current record type (field name, help/description, cardinality, field width and height, default value and incrementing). Checking the box “also change base field name and help”, provides a convenient way of updating the name and description of the base field – this will not change the name and description in any other record type.
Some settings (the field type, the vocabulary used, the target record type(s)) are functions of the Base field used by the local field type for this record type and are thus shared with all record types which use this base field. They may only be edited through the Base field editor).
The Additional section of the field structure edit form allows for an extended description of the field simply for documentation purposes (it does not appear anywhere in the interface, but is included in XML and archive output). It also allows the Heurist team to block certain fields from modification through the Status dropdown.
For multi-line (memo) text fields this form also allows setting the height of the field – the default is 3 lines.
The default value is applied to the field for all new records. Where it is a controlled value, it is chosen from a dropdown (terms) or browse for records (record pointer), or it is simply typed in for text, date and numeric fields (“today”, “yesterday” and “tomorrow” are acceptable values for dates which will be converted to actual dates).
For simple text and numeric fields one can alternatively define an increment. This will provide a default value for new records which increments the largest number found at the end of any of the values for the field. |So if the field contains values such ACR-1, ACR-2, ACR-5, ACR-6, ACR-95, it will automatically generate ACR-96. If the numbers are ACR-0001 …. ACR-0095 it will generate ACR-0096. If the last value was XYZ-0095 it would generate XYZ-0096 (it takes its cue from the highest number that it finds at the end of any value). The default value generated is editable.
Note that Heurist does not have an indexing function suitable to avoid duplication of values, although this is on our development roadmap 2027 ... Surprisingly we have had very little call for such a function in the 20 years that we have been working on Heurist, in part because we have a very flexible duplicate detector (Admin > Duplicates) which is often more useful for Humanities data which includes variants and uncertainties. It uses fuzzy criteria to detect duplicates and merge records (including retaining all connections and redirecting merged record identifiers to the result of the merge).
The most interesting part of the form are the two options allowing control over visibility and modification at the field level:
Individual field/value visibility
The Restrict visibility dropdown allows control of visibility of individual values by members of the public (not logged in) or to the owners of the record alone. By default all values are visible to anyone who has access to view the record.
Visible to anyone who can view the record: if the record is public the value of the field will be visible.
It is however possible to hide individual values by clicking on the eye symbol which appears at the end of the field on rollover:
Clicking the eye hides the value from the public as indicated by the greyed field (it is still editable):
Visible to anyone + hide from public checkbox: the same functionality as the above but displays an explicit checkbox under the field and the eye icon at the end of the field is always visible. Clicking on either the checkbox or the eye will hide the value from the public.
This is intended to make the user think about whether the field should be made immediately available to the public eg. where further editorial work or vetting is likely to be required.
Visible to logged in users only: the value will always be hidden from the public
Visible to owner/owner group only: only the owners of the record will be able to see the value
Individual field locking
The May modify dropdown allows for locking a field so that it cannot be edited. This is useful for fields which are automatically populated or have been previously filled with data which is not to be modified further eg. an incremented field or source data from a legacy database. The default value is Editable.
An intermediate value Edit discouraged is provided which allows the value in the field to be modified but pops up a warning message that this is discouraged. This may be useful where the value does not normally require modification but may occasionally require correction. It also avoids accidental inadvertent modification of the fields without the user being aware of it.
Calculated / computed fields
Heurist provides an ability to compute field values in a variety of ways, enabling users to integrate statistical analysis into the process of data entry, or the generation of websites. A particularly useful way of using this is to automatically split up a complex field, such as a bibliographic reference or a complex item identifier, into its components.
The calculation can be based solely on fields within the record (e.g. combining the length and breadth of a painting to calculate its area) or can combine information from linked records (e.g. counting all the children of a particular Person).
There is no special field type for computed fields; any text, date, or numeric field can be used as a computed field; Heurist will perform a calculation based on data in the database and store the result in the field.
Click on Formula:
select to bring up a form to specify the computation:
Either select a compute formula from the list or click on the ADD NEW CALCULATION button which will lead to the calculation construction form, where one can develop the code using SMARTY syntax in the same way it is used for custom reports. You can simply ask an AI to write Smarty code for you and replace the variable names it uses such as {$pages} with the appropriate Heurist field such as {$r.f1118}.
The final line of the code must print a value which is the value which will be inserted into the field. For example, to extract the 'short title' and page numbers from a reference such as "Nakada1982_01: 152-3, II-197" in in field 1118 you simply need one of these lines in the formula:
{{$r.f1118}|regex_replace:'/\s*:.*$/':''} --> Nakada1982_01
{{$r.f1118}|regex_replace:'/^[^:]*:\s*/':''} --> 152-3, II-197
//TODO-link
To use data from the current record, you can use the pre-existing variable $r.
For date, numeric and textual data, you should ensure that there are no html tags in the output. For a memo text field, you can output html elements as you would for a custom report.
Computed field examples
Examples of simple requests:
Area calculation: {$r.f1014 * $r.f1013}
My full name: {$r.f18} {$r.f1}
In neither of these cases is the output wrapped in html tags such as or Book Title: {$r.f1|capitalize} Book Title: {$r.f1|capitalize|truncate:25} Name: {$r.f1} Voice Recording: {$r.f1000} Voice Recording: {wrap var=$r.f1000_originalvalue dt="file" auto_play="0"} "}
{wrap var=$txt}{*Biographie*} Libraries holding this book: Libraries holding this book: Author's relatives: Bibliographical References:
Or use standard array functions.
Print array: {print\_r($newValue,true)}\
Implode array: {implode('\*', $newValue)}\
Functions
Smarty has many built in functions for formatting, sorting, totalling etc.
You can also use PHP functions (built-in or ones you define in the code) in a Smarty template, for example:
{$r,fldname} will output the value of the field
{$r.fldname|upper} will output the value of the field converted to upper case (Smarty function)
{str_pad($r.fldname},10,"0", STR_PAD_LEFT) } will pad the string to length 10 with leading zeroes (PHP function)
Every Smarty tag either prints a variable or invokes some sort of function. These are processed and displayed by enclosing the function and its attributes within delimiters like so: {funcname attr1="val1" attr2="val2"}.
Smarty allows for:
built-in functions. For example, {if}, {section} and {strip}. There should be no need to change or modify them.
customer functions. These are additional functions implemented by you via plugins. They can be modified to your liking, or you can create new ones.
Built in functions include:
{assign}
This is used for assigning template variables during the execution of a template.
{assign var="name" value="Bob"}
{assign "name" "Bob"} {* short-hand *}
The value of $name is {$name}.
The above example will output:
The value of $name is Bob.
{$var=...}
This is a short-hand version of the {assign} function. For example:
{$name='Bob'}
The value of $name is {$name}.
The above example will output:
The value of $name is Bob.
{for}
The {for}{forelse} tag is used to create simple loops. The following different formats are supported:
{for $var=$start to $end} simple loop with step size of 1.
{for $var=$start to $end step $step} loop with individual step size.
{forelse} is executed when the loop is not iterated.
For example:
{for $foo=1 to 3}
The above example will output:
Another example using MAX attribute.
$smarty->assign('to',10);
{for $foo=3 to $to max=3}
The above example will output:
Example showing use of {forelse}
$smarty->assign('start',10);
$smarty->assign('to',5);
{for $foo=$start to $to}
The above example will output:
no iteration
{if},{elseif},{else}
Every {if} must be paired with a matching {/if}. {else} and {elseif} are also permitted.
The following is a list of recognized qualifiers, which must be separated from surrounding elements by spaces. Note that items listed in [brackets] are optional. PHP equivalents are shown where applicable.
Qualifier
Syntax Example
Meaning
==
$a eq $b
equals
!=
$a neq $b
not equals
>
$a gt $b
greater than
<
$a lt $b
less than
>=
$a ge $b
greater than or equal
<=
$a le $b
less than or equal
===
$a === 0
check for identity
!
not $a
negation (unary)
%
$a mod $b
modulous
is [not] div by
$a is not div by 4
divisible by
is [not] even
$a is not even
[not] an even number (unary)
is [not] even by
$a is not even by $b
grouping level [not] even
is [not] odd
$a is not odd
[not] an odd number (unary)
is [not] odd by
$a is not odd by $b
[not] an odd grouping
Example {if} statements
{if $name eq 'Fred'}
Welcome Sir.
{elseif $name eq 'Wilma'}
Welcome Ma'am.
{else}
Welcome, whatever you are.
{/if}
{* an example with "or" logic *}
{if $name eq 'Fred' or $name eq 'Wilma'}
...
{/if}
{* same as above *}
{if $name == 'Fred' || $name == 'Wilma'}
...
{/if}
{* parenthesis are allowed *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
...
{/if}
{* check for not null. *}
{if isset($foo) }
.....
{/if}
{* test if values are even or odd *}
{if $var is even}
...
{/if}
{if $var is odd}
...
{/if}
{if $var is not odd}
...
{/if}
{* test if var is divisible by 4 *}
{if $var is div by 4}
...
{/if}
{*
test if var is even, grouped by two. i.e.,
0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.*}
{if $var is even by 2}
...
{/if}
{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
{if $var is even by 3}
...
{/if}
{while}
{while} is similar to {if} and takes the same set of modifiers.
Every {while} must be paired with a matching {/while}.
Example {while} loop
{while $foo > 0}
{$foo--}
{/while}
The above example will count down the value of $foo until 1 is reached.
Attributes
Most of the functions take attributes that specify or modify their behavior. Attributes to Smarty functions are much like HTML attributes. Static values don't have to be enclosed in quotes, but it is required for literal strings. Variables with or without modifiers may also be used, and should not be in quotes.
Some attributes require boolean values (TRUE or FALSE). These can be specified as true and false. If an attribute has no value assigned it gets the default boolean value of true.
Example:
{assign var=foo value={counter}}
Loops
Loop (repeat) sets of data with the {foreach} syntax.
Conditionals
Conditional statements have the typical if/else structure:
{if $test == "1"}Yes!{else}No!{/if}.
Alternatively:
elseif: {if $person == "Mike"}You are Mike{elseif $person == "Paul"}You are Paul{else}You are neither Mike nor Paul. Who are you?{/if}.
Variable Modifiers
Variable modifiers can be applied to variables, custom functions or strings. To apply a modifier, specify the value followed by a | (pipe) and the modifier name. A modifier may accept additional parameters that affect its behaviour. These parameters follow the modifier name and are separated by a : (colon). Also, all PHP-functions can be used as modifiers implicitly (more below) and modifiers can be combined.
Examples are:
{* apply modifier to a variable *}
{$title|upper}
{* modifier with parameters *}
{$title|truncate:40:"..."}
{* apply modifier to a function parameter *}
{html_table loop=$myvar|upper}
{* with parameters *}
{html_table loop=$myvar|truncate:40:"..."}
{* apply modifier to literal string *}
{"foobar"|upper}
{* using date_format to format the current date *}
{$smarty.now|date_format:"%Y/%m/%d"}
Modifiers
Modifiers allow you to quickly manipulate data to improve its appearance. Here is a concrete example. Let's say that your Books database has grown very large. Lots of different people have entered data, and you have imported data from many different sources. You aren't sure if all the titles of all the books are capitalised consistently. When you display the title of a Book record in your custom report, you can make sure that it is capitalised consistently by using the 'capitalize' modifier like so:
{$libraries = $heurist->getLinkedRecords($r.recID, 25, 'linkedfrom')}
{foreach $libraries['linkedfrom'] as $library}
Feel free to copy that code into your own Custom Report and make appropriate modifications. Here is a line-by-line breakdown of the code:
or
☚ This tag begins the bullet point list. Every item inside it will be included in the list. Every such item should be enclosed in
☚ After creating a bullet point for each library, close the list.
Related Records
A similar problem is posed by Record Relationships. These are complex interrelationships between records, and are not actually stored in the records themselves. Instead, there is a seperate table in the underlying database, which stories information about every Record Relationship. If you wish to retrieve this relationship data, we provide the $heurist->getRelatedRecords method. Let's say you are building a new custom report, displaying information about authors in your Books database. If you wished to display information about an author's relatives, you could write:
{$relatives = $heurist->getRelatedRecords($r)}
{foreach $relatives as $relative}
This example is very similar to the getLinkedRecords example, so I will just pick out a few details that are different:
{$relatives = $heurist->getRelatedRecords($r)} ☚ This fetches every record that is directly related to this record ($r), and stores the information in a new array called $relatives.
{foreach $relatives as $relative} ☚ Now we loop over the array, to create a bullet point for each relative
{$relative.recRelationType} ☚ All relationships have a RelationType, e.g. 'isMotherOf' or 'wasParticipantIn'. You can retrieve this information with .recRelationType
{$relative.f1} ☚ Assuming that the $relative is a Person, this would insert their surname into the report
{$relative.recRelationType} : {$relative.f1} ☚ Taken together, this would insert the type of relationship, a colon and then the surname of the relative into the report, e.g. isMotherOf : Smith.
**NB: **As you can see, there is no need to use $heurist->getRecord when using the $heurist->getRelatedRecords method. This method returns *all *the information about each related record, not just the record ID of each relative. Contrast this with the above examples of Record Pointers and Linked Records.
Examples
I want to use the title (or the family name) of the Person who was interviewed to insert in the Interview extract (Extract is child of interview is child of person). Interview has a pointer to Person that has a title (Family Name = field #1), so you first need to load the person record, then you can access the family name or other fields in Person.
{$person=$heurist->getRecord($f247.f15)} {* Person *}
{$person.f1} {*Family name *}
How do you retrieve fields from the relationship record (as well as the related record). getRelatedRecords returns an array of related records with additional header fields: recRelationType*, recRelationNotes, recRelationStartDate, recRelationEndDate.
{$rel_record = $heurist->getRecord($Relationship.recRelationID)}
{$src_info = $heurist->getRecord($rel_record.f1160)}
Source de l'Information: {$src_info.recTitle}
{* Get infromation from the relationship record *}
{$rel_record = $heurist->getRecord($Relationship.recRelationID)}
{$src_info = $heurist->getRecord($rel_record.f1160)}
Source de l'Information: {$src_info.recTitle}
Start Date: {$rel_record.f10}
End Date: {$rel_record.f11}
Sorting related records
In smarty reports, when dealing with a {foreach} loop calling child records, you may need to order the resulting set based on a specific variable/field from the child record eg. producing a list of child records ordered alphabetically by author.
{* Bibliographic references *}
{if ($r.f1016s)}
{$bibs=array()}
{foreach $r.f1016s as $bibRef name=bibLoop}
{$reference=$heurist->getRecord($bibRef)}
{$bibs[$reference.recID] = $reference.recTitle}
{/foreach}
{capture}{asort($bibs)}{/capture}
{foreach $bibs as $bib_id=>$bib_title name=bibLoop2}
-
for headings