The original database author clarified that org1 (org:organization) and
org2 (tm:secondaryOrganisation) have different semantics: org2 represents a
group/organisation within which someone did work at org1. Removing and
promoting secondary organisations was losing this information.
Remove the two queries (001-remove-duplicate, 002-promote-secondary) and
regenerate graph-07.ttl and graph-08.ttl.
Replace tm:reason and tm:secondaryReason with a single tm:hasReason
property (937 triples). Refactor 6 flat date properties into structured
tm:uncertainBeginning/tm:uncertainEnd intervals using W3C OWL-Time,
introducing tm:FuzzyInterval as a superclass of tm:Migration,
org:Membership, tm:Relationship, tm:PersonName, and
tm:ReligionAffiliation. Output: data/graph-08.ttl (218,251 triples).
- Remove redundant tm:secondaryOrganisation when it equals org:organization (230)
- Promote tm:secondaryOrganisation to org:organization when no primary exists (256)
- Replace tm:PersonProfession intermediate class with direct schema:hasOccupation
links from persons to schema:Occupation instances (742 instances removed)
- Remove tm:PersonProfession class and its properties from the ontology
- Add step-07 binary, Rakefile task, figures, and documentation
Move legend and namespace note into a standalone notations.drawio file
shared across all figures. Regenerate Step 6 figures with stacked
datatype property boxes (UML-like) matching the Step 5 style, instead
of separate connected nodes.
Ontology overview diagram shows all tm: classes, object/datatype
properties, schema:/org:/skos: external classes, subClassOf
relationships, and namespace color coding using Chowlk notation.
Example subgraph diagram shows Irene Abendroth instance data with
representative memberships, migrations, relationships, and places.
Includes Chowlk library for draw.io.
SPARQL CONSTRUCT queries transform graph-05 into graph-06 using the tm:
vocabulary. Persons keep schema:Person properties, works become
org:Membership, professions become schema:Occupation, enumerations
become skos:Concept with tm: subtypes. Split 010-occupations into two
query files (passthrough + retype). Includes step-06 binary, Rakefile
tasks, and example data for Irene Abendroth.
SPARQL UPDATE queries add standard vocabulary properties alongside
existing custom predicates: schema:Person/Place/Organization types,
schema:givenName/familyName/birthDate, owl:sameAs for authority links,
wgs84:lat/long for coordinates, skos:Concept/prefLabel for enumerations,
and rdfs:label for persons.
Use W3C Organization Ontology for work engagements (org:member,
org:organization). Profession instances become schema:Occupation.
Custom properties (workLocation, employmentType, etc.) are kept
with updated domains/ranges.
Add namespace prefixes (rdfs, migrants, person, personp, work, workp,
location, locationp) to query files. Use --prettify in Rake tasks so
example files use abbreviated IRIs. Fix 2hop task to use graph-02.
SPARQL queries to list classes and properties, and src/schema.rb
CLI to run them against any graph file. Includes bundler/setup
for compatibility with Ruby 4.0 without bundle exec.
19 queries in updates/ convert categorical columns (continent, country,
city, gender, profession, etc.) from literals to typed RDF objects with
rdfs:label. map/step-02.rb applies them to produce data/graph-02.ttl.
Also fix step-01.rb to sanitize column names with spaces and avoid
prefix serialization issues with fragment IRIs.