linneo

Standard taxonomy

The taxonomy returned by Taxonomy.standard() (and the base of Taxonomy.load() and TaxonomyBuilder.withStandard()). It is assembled by io.github.devbpm.linneo.internal.StandardTaxonomy, which is in a non-exported package and not part of the public API, from tab-separated resources bundled in the JAR under io/github/devbpm/linneo/internal/.

Contents

  fideslang 3.1.4 Linneo Total
Data categories 85 40 125
Data uses 56 7 63
Data subjects 15 6 21

The fideslang version is StandardTaxonomy.FIDESLANG_VERSION ("3.1.4"). The fideslang terms are bundled unchanged (license CC BY 4.0, © Ethyca, Inc.; see NOTICE) and have origin fideslang; Linneo’s terms have origin linneo and never redefine a fideslang key. fideslang defines no protection levels: all of them come from Linneo’s policy file.

For every key, use the constants in Categories, DataUses and DataSubjects or iterate Taxonomy.categories(), dataUses() and dataSubjects().

Data category roots

Every root declares all four facets in linneo-category-policy.tsv:

Root Origin Nature Confidentiality Integrity Secret Covers
user fideslang ORDINARY LOW MEDIUM no Data about a natural person
system fideslang NONE LOW LOW no Data of the system: authentication, operations, security, configuration
org Linneo NONE PUBLIC LOW no The organization and third parties that are not natural persons
reference Linneo NONE PUBLIC MEDIUM no Master data from public or standard sources

Protection policy

Below the roots, the policy raises facets where the data requires it; any key not listed inherits from its parent (see Protection levels). The main rules:

Categories Policy
user.health_and_medical, user.biometric, user.demographic.philosophical_belief, .political_opinion, .race_ethnicity, .religious_belief, .sex_life, .sexual_orientation, .trade_union_membership SPECIAL_CATEGORY, confidentiality HIGH, integrity HIGH
user.criminal_history CRIMINAL_OFFENCE, HIGH, HIGH
user.administrative_sanction, user.victim_status ORDINARY, confidentiality HIGH, integrity HIGH
user.authorization (scope of permissions) confidentiality HIGH, integrity HIGH; user.authorization.credentials, .password and .biometric are secret, and user.authorization.biometric is also SPECIAL_CATEGORY
user.device.session_id confidentiality HIGH, secret
system.authentication confidentiality HIGH, integrity HIGH; system.authentication.secret is secret
user.financial, user.payment, user.education confidentiality MEDIUM, integrity HIGH; user.financial.credit_card confidentiality HIGH
user.behavior, user.government_id, user.location.precise, user.content.private, user.content.self_image, several user.demographic.* (date of birth, gender, marital status, profile, family, nationality) confidentiality MEDIUM
user.childrens, user.government_id.immigration confidentiality HIGH (data of vulnerable data subjects: children and migrants or asylum seekers)
user.behavior.activity_log, system.security, system.integrity integrity HIGH
system.configuration integrity MEDIUM
org.structure, org.location, org.process confidentiality LOW, integrity MEDIUM
org.legal_entity integrity MEDIUM
org.business_records confidentiality MEDIUM, integrity MEDIUM

Children of a special-category category are special category too (for example user.health_and_medical.disability), and every descendant of a secret category is secret. The builder requires every SPECIAL_CATEGORY and CRIMINAL_OFFENCE category to resolve to HIGH confidentiality and HIGH integrity (see Protection levels).

The policy follows Regulation (EU) 2016/679 (GDPR) as corrected (OJ L 127, 23.5.2018; EUR-Lex has no later consolidated text) and, for Spain, Ley Orgánica 3/2018 (LOPDGDD), consolidated text of 27 December 2025 (BOE-A-2018-16673):

Linneo’s additions

Data categories (40, all since 0.1.0):

Parent Added children
user user.education with program, enrollment, course_history, grade, test_score, previous_education, status, accomplishment; administrative_sanction, victim_status
user.unique_id record_reference
user.government_id social_security_number
user.device user_agent, session_id
user.workplace team, unit, role, assignment_period
user.demographic nationality, family, philosophical_belief, trade_union_membership, sex_life
user.financial scholarship, fee
user.health_and_medical disability
user.behavior activity_log
system system.security, system.integrity, system.configuration
system.authentication secret
(root) org with structure, legal_entity, location, process, business_records
(root) reference with public

Data uses (7): the root education (“Provides educational services”) with education.admission, education.enrollment, education.teaching, education.assessment, education.academic_records and education.financial_aid.

Data subjects (6, all roots): student, applicant, alumnus, faculty_member, staff_member, legal_representative.

fideslang roots

fideslang 3.1.4 has one deprecated term: the data use personalize.profiling (deprecated in 2.1.1, replaced by personalize.content.profiling). No standard data category is deprecated.

Resource files and formats

File Origin Columns
fideslang-data-categories.tsv, fideslang-data-uses.tsv, fideslang-data-subjects.tsv fideslang term format (7)
linneo-data-categories.tsv, linneo-data-uses.tsv, linneo-data-subjects.tsv linneo term format (7)
linneo-category-policy.tsv — policy format (5)

Common rules (UTF-8): blank lines and lines starting with # are ignored; the first remaining line is the column header and is skipped; cells are separated by a tab and stripped of surrounding white space; missing trailing cells are empty; a line with more cells than columns is rejected (TaxonomyException: <file>: too many columns in line '...'). A missing resource throws TaxonomyException (Missing taxonomy resource <file>).

Term format: key, parent_key, name, description, version_added, version_deprecated, replaced_by.

Policy format: key, nature, confidentiality, integrity, secret.

Loading order: fideslang categories, uses and subjects (origin fideslang), then Linneo’s categories, uses and subjects (origin linneo), then the policy. TaxonomyBuilder.build() then checks the hierarchy and resolves the inherited facets.

Regenerating from fideslang

The fideslang-*.tsv files and the constant classes are generated; do not edit them by hand. From the repository root:

python -I tools/fideslang/update.py 3.1.4

The script (Python standard library only) downloads the release’s source distribution from PyPI, reads src/fideslang/default_taxonomy/data_{categories,uses,subjects}.py and writes:

After adding a Linneo term to a linneo-*.tsv file, rerun the script to regenerate the constants. When moving to another fideslang version, also update StandardTaxonomy.FIDESLANG_VERSION, NOTICE and the term counts asserted in StandardTaxonomyTest, and make sure every new root category has a full row in linneo-category-policy.tsv (otherwise the taxonomy fails to build).

See also: Taxonomy · Protection levels · Key constants · Extending the taxonomy · course: The taxonomy