Dokumentasjon for taksonomisystemet

Innholdsfortegnelse

  1. Oversikt
  2. Kjerneprinsiper
  3. Kategorihierarki
  4. Egenskaper og typer
  5. Egenskapsarv
  6. URI-struktur og navnerom
  7. RDF-S-integrasjon
  8. Turtle-eksport
  9. API-endepunkter
  10. Eksempler

Oversikt

Taksonomisystemet gir et hierarkisk kategoriseringsrammeverk som kombinerer globale RDF-S (Resource Description Framework Schema) kategorier med organisasjonsspesifikke tilpasninger. Dette muliggjør standardisert produkt- og tjenesteklassifisering samtidig som det gir organisatorisk fleksibilitet.

Hovedfunksjoner

  • Hierarkisk struktur med forelder-barn-relasjoner
  • Egenskapsarv med mulighet for overstyring
  • RDF-S-kompatibilitet for semantisk web-kompatibilitet
  • Multi-tenant-støtte med organisasjonsspesifikke kategorier
  • Turtle RDF-eksport for interoperabilitet

Kjerneprinsiper

1. Dobbeltlags-arkitektur

Systemet består av to lag:

  • Globalt lag (RDF-S): Standardiserte kategorier tilgjengelig for alle organisasjoner
  • Organisasjonslag: Organisasjonsspesifikke kategorier som utvider det globale laget

2. Kategorityper

TypeOmfangURI-mønsterForanderlighet
Global (RDF-S)Alle organisasjonerhttp://taxonomy.sirktek.no/{categoryName}Skrivebeskyttet
OrganisasjonsspesifikkEnkeltorganisasjonhttp://taxonomy.sirktek.no/{orgId}#{categoryName}Full CRUD

Kategorihierarki

Strukturregler

  1. Enkel forelder-regel: Hver kategori har nøyaktig én forelder (unntatt rotkategorier)
  2. Ubegrenset dybde: Ingen begrensninger på hierarkidybde
  3. Krysslag-kobling: Organisasjonskategorier kan ha RDF-S-foreldre
  4. Ingen sirkulære referanser: Forelder-barn-relasjoner må være asykliske

Hierarkieksempel

Møbler (global)
├── Stol (global)
│   ├── Kontorstol (org: acme-corp)
│   │   ├── Ergonomisk stol (org: acme-corp)
│   │   └── Lederkontorstol (org: acme-corp)
│   └── Spisestol (org: acme-corp)
└── Bord (global)
    ├── Spisebord (org: acme-corp)
    └── Konferansebord (org: acme-corp)

Egenskaper og typer

Egenskapsstruktur

Hver kategori kan ha flere egenskaper med følgende attributter:

interface CategoryProperty {
    name: string;           // Egenskapsidentifikator
    value: string;          // Egenskapsverdi
    type: PropertyType;     // Datatype
    inherited: boolean;     // Om arvet fra forelder
}

Egenskapstyper

TypeBeskrivelseEksempelverdiValidering
STRINGTekstverdi"Premium skinn"Maks 2000 tegn
INTEGERHeltall"42"Positive heltall
DECIMALDesimaltall"19.99"Positive desimaler
DECIMAL_KGVekt i kg"25.5"Positive desimaler
DECIMAL_CMLengde i cm"180.0"Positive desimaler
DECIMAL_M2Areal i m²"2.5"Positive desimaler
DECIMAL_M3Volum i m³"0.8"Positive desimaler
BOOLEANSant/Usant"true"true eller false
URLNettadresse"https://example.com"Gyldig URL
EMAIL_FORME-postadresse"[email protected]"Gyldig e-post
INTEGER_SCALE_1TO5Vurderingsskala"4"1-5 område
EMISSIONCO2-utslipp"CO2;125.5;kg;EPD;A1-A3"Spesielt format

Format for utslippsegenskap

CO2;<mengde>;<enhet>;<sertifisering>;<fase>

Eksempel: "CO2;125.5;kg;EPD;A1-A3"

  • Mengde: 125.5
  • Enhet: kg
  • Sertifisering: EPD (Environmental Product Declaration)
  • Fase: A1-A3 (Produksjonsfase)

Egenskapsarv

Arveregler

  1. Automatisk propagering: Egenskaper flyter fra foreldre- til barnekategorier
  2. Akkumulering: Barnekategorier arver alle forfedres egenskaper
  3. Overstyringsfunksjon: Barn kan overstyre arvede egenskapsverdier
  4. Navnebasert matching: Egenskaper med samme navn betraktes som samme
  5. Typekonsistens: Overstyrte egenskaper bør beholde samme type

Arvemekanisme

Når en barnekategori definerer en egenskap med samme navn som en arvet egenskap:

  1. Barnets verdi får forrang
  2. Den arvede verdien maskeres (slettes ikke)
  3. Videre etterkommere arver den overstyrte verdien
  4. Egenskapstypen bør forbli konsistent

Overstyringseksempel

Møbler:
  egenskaper:
    materiale: "tre"          # Original
    garanti: "2 år"           # Original

Kontorstol (barn av Møbler):
  arvet:
    garanti: "2 år"           # Beholdt fra forelder
  overstyrt:
    materiale: "plast"        # Endret fra "tre"
  egne:
    hjul: "true"             # Ny egenskap

URI-struktur og navnerom

URI-mønstre

Globale kategorier (RDF-S)

http://taxonomy.sirktek.no/{categoryName}

Eksempel: http://taxonomy.sirktek.no/furniture

Organisasjonsspesifikke kategorier

http://taxonomy.sirktek.no/{organizationId}#{categoryName}

Eksempel: http://taxonomy.sirktek.no/acme-corp#OfficeChair

PrefiksNavneromBruk
taxonomy:http://taxonomy.sirktek.no/Basis taksonominavnerom
org:http://taxonomy.sirktek.no/{orgId}#Organisasjonsspesifikt navnerom
rdfs:http://www.w3.org/2000/01/rdf-schema#RDF Schema-vokabular
rdf:http://www.w3.org/1999/02/22-rdf-syntax-ns#RDF-syntaks

RDF-S-integrasjon

RDF Schema-kompatibilitet

Taksonomisystemet følger RDF-S-standarder for semantisk web-kompatibilitet:

  1. Kategorier som klasser: Hver kategori er en rdfs:Class
  2. Hierarkiske relasjoner: Forelder-barn via rdfs:subClassOf
  3. Etiketter og beskrivelser: Bruker rdfs:label og rdfs:comment
  4. Egenskapsdefinisjoner: Tilpassede egenskaper i taksonominavnerom

RDF-S-kategoristruktur

<http://taxonomy.sirktek.no/furniture> a rdfs:Class ;
    rdfs:label "Møbler" ;
    rdfs:comment "Basiskategori for alle møbelelementer" .

<http://taxonomy.sirktek.no/chair> a rdfs:Class ;
    rdfs:label "Stol" ;
    rdfs:comment "Sittemøbler med ryggstøtte" ;
    rdfs:subClassOf <http://taxonomy.sirktek.no/furniture> .

Turtle-eksport

Eksportformat

Systemet eksporterer komplett taksonomi i W3C Turtle (Terse RDF Triple Language) format:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix taxonomy: <http://taxonomy.sirktek.no/> .
@prefix org: <http://taxonomy.sirktek.no/acme-corp#> .

# Global RDF-S-kategori
<http://taxonomy.sirktek.no/furniture> a rdfs:Class ;
    rdfs:label "Møbler" ;
    rdfs:comment "Alle møbelprodukter" .

# Organisasjonsspesifikk kategori
<http://taxonomy.sirktek.no/acme-corp#OfficeChair> a rdfs:Class ;
    rdfs:label "Kontorstol" ;
    rdfs:comment "Stoler designet for kontorbruk" ;
    rdfs:subClassOf <http://taxonomy.sirktek.no/chair> ;
    taxonomy:material "plast" ;
    taxonomy:adjustable "true"^^taxonomy:BOOLEAN ;
    taxonomy:warranty "3"^^taxonomy:INTEGER ;
    taxonomy:weight "12.5"^^taxonomy:DECIMAL_KG .

API-endepunkter

Kategorihierarki

GET /{org}/category

Returnerer komplett taksonomihierarki i JSON-format

Turtle-eksport

GET /{org}/category/turtle

Returnerer komplett taksonomi i Turtle RDF-format

Response Content-Type: text/turtle

Kategoristyring

GET /{org}/category/{parentCategory}          # List underkategorier
POST /{org}/category/{parentCategory}         # Opprett underkategori
GET /{org}/category/{parentCategory}/{id}     # Hent kategoridetaljr
PUT /{org}/category/{parentCategory}/{id}     # Oppdater kategori
DELETE /{org}/category/{parentCategory}/{id}  # Slett kategori

Eksempler

Komplett taksonomieksemel

Produkt (Global)
├── Møbler (Global)
│   ├── Stol (Global)
│   │   ├── Kontorstol (ACME Corp)
│   │   │   ├── Ergonomisk stol (ACME Corp)
│   │   │   └── Lederkontorstol (ACME Corp)
│   │   └── Spisestol (ACME Corp)
│   └── Bord (Global)
│       ├── Spisebord (ACME Corp)
│       └── Konferansebord (ACME Corp)
└── Elektronikk (Global)
    ├── Datamaskin (Global)
    └── Telefon (Global)

Egenskapsarveksempel

Stol (Global):
  egenskaper:
    materiale: "tre"
    resirkulerbar: "true"
    garanti_år: "2"

Kontorstol (ACME Corp):
  arvet_fra_Stol:
    resirkulerbar: "true"      # Beholdt som-er
  overstyrt:
    materiale: "plast"         # Endret fra "tre"
    garanti_år: "5"            # Utvidet fra "2"
  egne_egenskaper:
    hjul: "true"
    justerbar_høyde: "true"
    armlener: "true"

Ergonomisk stol (ACME Corp):
  arvet_fra_Kontorstol:
    resirkulerbar: "true"      # Fra Stol
    materiale: "plast"         # Fra Kontorstol
    garanti_år: "5"            # Fra Kontorstol
    hjul: "true"               # Fra Kontorstol
    justerbar_høyde: "true"    # Fra Kontorstol
    armlener: "true"           # Fra Kontorstol
  overstyrt:
    materiale: "mesh"          # Endret fra "plast"
  egne_egenskaper:
    lendestøtte: "justerbar"
    hodestøtte: "true"

Beste praksis

Kategoridesign

  1. Bruk meningsfulle navn: Klare, beskrivende kategorinavn
  2. Oppretthold konsistens: Lignende kategorier bør ha lignende egenskaper
  3. Planlegg hierarki: Design forelder-barn-relasjoner før implementering
  4. Dokument egenskaper: Gi klare beskrivelser for tilpassede egenskaper

Egenskapsstyring

  1. Typekonsistens: Hold egenskapstyper konsistente gjennom hierarkiet
  2. Minimer overstyringer: Overstyr kun når nødvendig
  3. Bruk standardtyper: Foretrekk standard egenskapstyper over tilpassede strenger
  4. Valider utslipp: Sørg for at utslippsdata følger påkrevd format

Integrasjon

  1. Cache URI-er: URI-generering kan være dyr, bruk caching
  2. Batch-operasjoner: Last relaterte kategorier sammen
  3. Eksporter regelmessig: Generer Turtle-eksporter for backup/integrasjon
  4. Versjonskontroll: Spor taksonimiendringer over tid

Sikkerhetshensyn

Tilgangskontroll

  • VIEW-tillatelse: Les taksonomistruktur
  • ADMIN-tillatelse: Opprett, oppdater, slett kategorier
  • Organisasjonsisolasjon: Brukere ser kun sin organisasjons kategorier pluss globale

Datavalidering

  • Kategorinavn: Alfanumerisk med mellomrom, punktum, understrek, bindestreker
  • Egenskapsnavn: Kun alfanumerisk med understrek
  • Maksimale lengder håndheves (navn: 200, beskrivelser: 1000, verdier: 2000)
  • SQL-injeksjonsforskning gjennom parametriserte spørringer
  • XSS-forebygging gjennom riktig escaping

Ytelsesoptimalisering

Cachingstrategi

  1. URI-genereringscache: Forhåndsberegnede URI-er for kategorier
  2. Taksonomitrecache: Cachet hierarkistruktur
  3. Egenskapsarvcache: Forhåndsberegnede arvede egenskaper

Spørringsoptimalisering

  1. Fetch Joins: Bruk JPA fetch joins for å unngå N+1-spørringer
  2. Batch-lasting: Last alle kategorier i enkeltspørring
  3. Indekserte kolonner: Databaseindekser på ofte spurt felt

Konklusjon

Taksonomisystemet gir et robust, standardkompatibelt rammeverk for hierarkisk kategorisering med kraftige arve- og tilpasningsfunksjoner. Ved å kombinere globale RDF-S-kategorier med organisasjonsspesifikke utvidelser muliggjør det både standardisering og fleksibilitet i produkt- og tjenesteklassifisering.