glam/ENCOMPASSING_BODY_RDF_UML_GENERATION.md
kempersc 3ff0e33bf9 Add UML diagrams and scripts for custodian schema
- Created PlantUML diagrams for custodian types, full schema, legal status, and organizational structure.
- Implemented a script to generate GraphViz DOT diagrams from OWL/RDF ontology files.
- Developed a script to generate UML diagrams from modular LinkML schema, supporting both Mermaid and PlantUML formats.
- Enhanced class definitions and relationships in UML diagrams to reflect the latest schema updates.
2025-11-23 23:05:33 +01:00

9.1 KiB

EncompassingBody RDF and UML Generation Complete

Date: 2025-11-23
Timestamp: 20251123_225622 (RDF), 20251123_225712 (UML)
Status: COMPLETE


Generated Files

RDF Formats (6 formats)

All generated with timestamp 20251123_225622:

  1. OWL/Turtle - EncompassingBody_20251123_225622.owl.ttl (11K)

    • Primary OWL ontology in Turtle syntax
    • Contains class definitions, properties, restrictions
    • Includes ontology mappings (org:, schema:, skos:)
  2. N-Triples - EncompassingBody_20251123_225622.nt (36K)

    • Simple triple format for easy parsing
    • One triple per line
  3. RDF/XML - EncompassingBody_20251123_225622.rdf (29K)

    • XML serialization of RDF
    • Compatible with legacy RDF tools
  4. N3 - EncompassingBody_20251123_225622.n3 (11K)

    • Notation3 format (superset of Turtle)
  5. TriG - EncompassingBody_20251123_225622.trig (16K)

    • Named graphs extension of Turtle
  6. TriX - EncompassingBody_20251123_225622.trix (60K)

    • XML-based RDF format with named graphs

Location: /schemas/20251121/rdf/


UML/Mermaid Diagrams (4 class diagrams)

All generated with timestamp 20251123_225712:

  1. EncompassingBody - EncompassingBody_20251123_225712.mmd (1.2K)

    • Abstract parent class diagram
    • Shows inheritance hierarchy (3 subclasses)
    • Displays all slots/properties
    • Links to EncompassingBodyTypeEnum
  2. UmbrellaOrganisation - UmbrellaOrganisation_20251123_225712.mmd (1.1K)

    • Legal parent organization class diagram
    • Inherits from EncompassingBody
    • Mapped to org:FormalOrganization
  3. NetworkOrganisation - NetworkOrganisation_20251123_225712.mmd (1.1K)

    • Service provider network class diagram
    • Inherits from EncompassingBody
    • Mapped to schema:Organization
  4. Consortium - Consortium_20251123_225712.mmd (955B)

    • Mutual assistance body class diagram
    • Inherits from EncompassingBody
    • Mapped to schema:Consortium

Location: /schemas/20251121/uml/mermaid/


RDF Ontology Content

Classes Defined

  1. EncompassingBody (abstract)

    • class_uri: org:Organization
    • Parent class for all encompassing body types
  2. UmbrellaOrganisation

    • class_uri: org:FormalOrganization
    • skos:exactMatch schema:GovernmentOrganization
    • Legal parent organizations
  3. NetworkOrganisation

    • class_uri: schema:Organization
    • Service provider networks
  4. Consortium

    • class_uri: schema:Consortium
    • Peer-to-peer mutual assistance bodies

Properties Defined

Property Slot URI Range Cardinality
id (identifier) uriorcurie 1..1 (required)
organization_name skos:prefLabel string 1..1 (required)
organization_type - EncompassingBodyTypeEnum 1..1 (required)
description - string 0..1
legal_form org:classification string 0..1 (required for Umbrella)
founding_date schema:foundingDate date 0..1
dissolution_date schema:dissolutionDate date 0..1
member_custodians org:hasSubOrganization string 0..*
governance_authority - string 0..1 (required for Umbrella)
service_offerings - string 0..* (required for Network/Consortium)
membership_criteria - string 0..1
identifiers dcterms:identifier string 0..*
website schema:url uri 0..1

Enumeration

EncompassingBodyTypeEnum:

  • UMBRELLAorg:FormalOrganization
  • NETWORKschema:Organization
  • CONSORTIUMschema:Consortium

OWL Restrictions

Each subclass has OWL restrictions enforcing required fields:

UmbrellaOrganisation

  • governance_authority: minCardinality 1 (required)
  • legal_form: minCardinality 1 (required)

NetworkOrganisation

  • service_offerings: minCardinality 1 (required, multivalued)

Consortium

  • No additional restrictions (inherits from EncompassingBody)

Mermaid Diagram Features

Each diagram includes:

Inheritance hierarchy - Shows <|-- relationship to parent class
Properties list - All slots displayed on class
Relationship to enums - Links to EncompassingBodyTypeEnum
Clickable links - Navigate between related classes (in web view)

Example: EncompassingBody Hierarchy

classDiagram
    class EncompassingBody
      EncompassingBody <|-- UmbrellaOrganisation
      EncompassingBody <|-- NetworkOrganisation
      EncompassingBody <|-- Consortium
      
      EncompassingBody : id
      EncompassingBody : organization_name
      EncompassingBody : organization_type
      EncompassingBody : description
      EncompassingBody : legal_form
      EncompassingBody : founding_date
      EncompassingBody : dissolution_date
      EncompassingBody : member_custodians
      EncompassingBody : governance_authority
      EncompassingBody : service_offerings
      EncompassingBody : membership_criteria
      EncompassingBody : identifiers
      EncompassingBody : website
      
      EncompassingBody --> "1" EncompassingBodyTypeEnum : organization_type

Generation Process

Step 1: Create Standalone Schema

Created /tmp/EncompassingBody_standalone.yaml with:

  • Self-contained schema (no external dependencies)
  • Inline enum definitions
  • Simplified ranges (string instead of complex types)
  • All necessary prefixes

Step 2: Generate RDF with gen-owl

TIMESTAMP=$(date +%Y%m%d_%H%M%S)
gen-owl -f ttl /tmp/EncompassingBody_standalone.yaml \
  > schemas/20251121/rdf/EncompassingBody_${TIMESTAMP}.owl.ttl

Output: OWL/Turtle (11K, 284 lines)

Step 3: Convert to Other RDF Formats with rdfpipe

rdfpipe EncompassingBody_${TIMESTAMP}.owl.ttl -o nt > ...nt
rdfpipe EncompassingBody_${TIMESTAMP}.owl.ttl -o xml > ...rdf
rdfpipe EncompassingBody_${TIMESTAMP}.owl.ttl -o n3 > ...n3
rdfpipe EncompassingBody_${TIMESTAMP}.owl.ttl -o trig > ...trig
rdfpipe EncompassingBody_${TIMESTAMP}.owl.ttl -o trix > ...trix

Note: JSON-LD plugin not available in current rdflib installation

Step 4: Generate Mermaid Diagrams with gen-mermaid-class-diagram

TIMESTAMP=$(date +%Y%m%d_%H%M%S)
gen-mermaid-class-diagram -d /tmp/mermaid_out_${TIMESTAMP} \
  /tmp/EncompassingBody_standalone.yaml

Output: 4 Mermaid diagrams (one per class)

Step 5: Copy with Timestamps

Copied all generated files to schema directories with full timestamps in filenames.


Ontology Mappings in RDF

EncompassingBody

<hc:EncompassingBody> a owl:Class ;
    rdfs:label "EncompassingBody" ;
    skos:exactMatch org:Organization .

UmbrellaOrganisation

<hc:UmbrellaOrganisation> a owl:Class ;
    rdfs:label "UmbrellaOrganisation" ;
    rdfs:subClassOf <hc:EncompassingBody> ;
    skos:exactMatch org:FormalOrganization .

NetworkOrganisation

<hc:NetworkOrganisation> a owl:Class ;
    rdfs:label "NetworkOrganisation" ;
    rdfs:subClassOf <hc:EncompassingBody> ;
    skos:exactMatch schema:Organization .

Consortium

<hc:Consortium> a owl:Class ;
    rdfs:label "Consortium" ;
    rdfs:subClassOf <hc:EncompassingBody> ;
    skos:exactMatch schema:Consortium .

File Sizes Summary

RDF Files (Total: ~163K)

  • OWL/Turtle: 11K (284 lines)
  • N-Triples: 36K (largest - verbose format)
  • RDF/XML: 29K
  • N3: 11K (compact)
  • TriG: 16K
  • TriX: 60K (verbose XML)

Mermaid Files (Total: ~4.3K)

  • EncompassingBody: 1.2K (52 lines)
  • UmbrellaOrganisation: 1.1K
  • NetworkOrganisation: 1.1K
  • Consortium: 955B

Validation

RDF Validation

Successfully parsed by rdfpipe (no syntax errors)
Multiple serialization formats generated without errors
OWL restrictions properly defined
SKOS mappings included for interoperability

UML Validation

Valid Mermaid syntax
Inheritance hierarchy correctly displayed
All properties listed on parent class
Clickable links for web rendering


Usage Examples

Loading RDF into Triple Store

# Load into Apache Jena Fuseki
curl -X POST \
  --data-binary @EncompassingBody_20251123_225622.owl.ttl \
  -H "Content-Type: text/turtle" \
  http://localhost:3030/dataset/data

Rendering Mermaid Diagram

<!-- In Markdown file -->
![EncompassingBody Class Diagram](schemas/20251121/uml/mermaid/EncompassingBody_20251123_225712.mmd)

Or in GitHub/GitLab:

```mermaid
[contents of .mmd file]

---

## Next Steps

1. **Integrate with Main Schema**: Import EncompassingBody into main custodian schema
2. **Add to Documentation**: Include diagrams in schema documentation
3. **SPARQL Queries**: Create example SPARQL queries using generated ontology
4. **Validation Rules**: Add SHACL shapes for data validation
5. **JSON-LD Context**: Create JSON-LD context file (when plugin available)

---

## Files Modified/Generated

**Generated**:
- 6 RDF files in `/schemas/20251121/rdf/`
- 4 Mermaid diagrams in `/schemas/20251121/uml/mermaid/`
- Standalone LinkML schema in `/tmp/` (temporary)

**Total**: 10 files (~167K)

---

**Generation Status**: ✅ COMPLETE  
**All formats have proper timestamps**: ✅ YES  
**Ready for integration**: ✅ YES