@prefix chem: <https://ontology.siletto.it/chem-pipeline#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix qudt: <http://qudt.org/schema/qudt/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rxno: <http://purl.obolibrary.org/obo/RXNO_> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix unit: <http://qudt.org/vocab/unit/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<https://ontology.siletto.it/chem-pipeline> a owl:Ontology ;
    rdfs:label "Chemical / Mining / Technological Production Pipeline Ontology"@en,
        "Ontologia delle pipeline di produzione chimica/mineraria/tecnologica"@it ;
    rdfs:comment "Modella sostanze, reazioni, unit operations, condizioni operative ed energia per filiere produttive industriali. Estende ChEBI (sostanze) e RXNO (reazioni)."@it ;
    owl:versionIRI <https://ontology.siletto.it/chem-pipeline/0.9.0> ;
    owl:versionInfo "0.9.0" ;
    owl:priorVersion <https://ontology.siletto.it/chem-pipeline/0.8.0> .

chem:AbsorptionColumnProcess a owl:Class ;
    rdfs:label "AbsorptionColumn"@en,
        "ColonnaAssorbimento"@it ;
    rdfs:comment "Colonna di assorbimento gas-liquido controcorrente (NOx in acqua, CO2 in amina, ecc.)."@it ;
    rdfs:subClassOf chem:GasSeparation .

chem:AqueousElectrolysis a owl:Class ;
    rdfs:label "AqueousElectrolysis"@en,
        "ElettrolisiAcquosa"@it ;
    rdfs:subClassOf chem:Electrolysis .

chem:BasicOxygenFurnaceProcess a owl:Class ;
    rdfs:label "BasicOxygenFurnace"@en,
        "ConvertitoreBOF"@it ;
    rdfs:comment "Convertitore a ossigeno per decarburazione della ghisa ad acciaio."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:BlastFurnaceProcess a owl:Class ;
    rdfs:label "BlastFurnace"@en,
        "Altoforno"@it ;
    rdfs:comment "Reattore pirometallurgico a controcorrente per la riduzione di ossidi di ferro con CO."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:Calcination a owl:Class ;
    rdfs:label "Calcination"@en,
        "Calcinazione"@it ;
    rdfs:comment "Decomposizione termica, tipicamente di idrossidi o carbonati. Doppia natura: reazione e UnitOperation."@it ;
    rdfs:subClassOf chem:Reaction,
        chem:UnitOperation .

chem:CarbothermicReduction a owl:Class ;
    rdfs:label "CarbothermicReduction"@en,
        "RiduzioneCarbotermica"@it ;
    rdfs:comment "Riduzione di un ossido tramite carbonio ad alta temperatura."@it ;
    rdfs:subClassOf chem:RedoxReaction .

chem:Cementation a owl:Class ;
    rdfs:label "Cementation"@en,
        "Cementazione"@it ;
    rdfs:comment "Spostamento di un metallo dalla soluzione tramite un metallo più riducente."@it ;
    rdfs:subClassOf chem:HydrometallurgicalProcess .

chem:CrackingFurnaceProcess a owl:Class ;
    rdfs:label "CrackingFurnace"@en,
        "FornoCracking"@it ;
    rdfs:comment "Forno tubolare per pirolisi termica (steam cracking) di idrocarburi a 800-870 °C."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:CryogenicDistillation a owl:Class ;
    rdfs:label "CryogenicDistillation"@en,
        "DistillazioneCriogenica"@it ;
    rdfs:comment "Distillazione a basse temperature (-100°C+) per separare olefini leggeri o gas atmosferici."@it ;
    rdfs:subClassOf chem:GasSeparation .

chem:ElectricArcFurnaceProcess a owl:Class ;
    rdfs:label "ElectricArcFurnace"@en,
        "FornoElettricoArco"@it ;
    rdfs:comment "Forno fusorio a elettrodi di grafite per acciaio da DRI o rottame."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess ;
    skos:altLabel "EAF"@en .

chem:ElectrolyticProcess a owl:Class ;
    rdfs:label "ElectrolyticProcess"@en,
        "ProcessoElettrolitico"@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:FinalProduct a owl:Class ;
    rdfs:label "FinalProduct"@en,
        "ProdottoFinale"@it ;
    rdfs:subClassOf chem:Substance .

chem:FloatBathProcess a owl:Class ;
    rdfs:label "FloatBath"@en,
        "BagnoStagno"@it ;
    rdfs:comment "Bagno di stagno fuso per formatura di vetro float (processo Pilkington)."@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:Intermediate a owl:Class ;
    rdfs:label "Intermediate"@en,
        "Intermedio"@it ;
    rdfs:comment "Sostanza prodotta da una UnitOperation e consumata da un'altra all'interno della stessa filiera."@it ;
    rdfs:subClassOf chem:Substance .

chem:Leaching a owl:Class ;
    rdfs:label "Leaching"@en,
        "Lisciviazione"@it ;
    rdfs:comment "Dissoluzione selettiva di un metallo in soluzione acida o basica."@it ;
    rdfs:subClassOf chem:HydrometallurgicalProcess .

chem:MoltenSaltElectrolysis a owl:Class ;
    rdfs:label "MoltenSaltElectrolysis"@en,
        "ElettrolisiFusa"@it ;
    rdfs:comment "Elettrolisi in sale fuso (Hall-Héroult)."@it ;
    rdfs:subClassOf chem:Electrolysis .

chem:Pelletizing a owl:Class ;
    rdfs:label "Pelletizing"@en,
        "Pellettizzazione"@it ;
    rdfs:comment "Agglomerazione di fini minerali in pellet sferici cotti."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:PhysicalSeparation a owl:Class ;
    rdfs:label "PhysicalSeparation"@en,
        "SeparazioneFisica"@it ;
    rdfs:comment "Operazione senza trasformazione chimica (flottazione, decantazione, filtrazione)."@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:Polycondensation a owl:Class ;
    rdfs:label "Polycondensation"@en,
        "Policondensazione"@it ;
    rdfs:subClassOf chem:PolymerizationReactorProcess .

chem:RawMaterial a owl:Class ;
    rdfs:label "RawMaterial"@en,
        "MateriaPrima"@it ;
    rdfs:comment "Sostanza in ingresso alla filiera, estratta o acquistata, non prodotta dalla pipeline stessa."@it ;
    rdfs:subClassOf chem:Substance .

chem:Roasting a owl:Class ;
    rdfs:label "Roasting"@en,
        "Arrostimento"@it ;
    rdfs:comment "Trattamento ossidativo di solfuri in atmosfera d'aria. Doppia natura: reazione e UnitOperation."@it ;
    rdfs:subClassOf chem:RedoxReaction,
        chem:UnitOperation .

chem:RotaryKilnProcess a owl:Class ;
    rdfs:label "RotaryKiln"@en,
        "FornoRotante"@it ;
    rdfs:comment "Forno cilindrico inclinato e rotante per processi termici a flusso continuo (clinkerizzazione, calcinazione di solidi)."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:ShaftFurnaceProcess a owl:Class ;
    rdfs:label "ShaftFurnace"@en,
        "FornoShaft"@it ;
    rdfs:comment "Forno a pozzo verticale per riduzione solid-state (DRI con H2 o CO)."@it ;
    rdfs:subClassOf chem:PyrometallurgicalProcess .

chem:SteamReforming a owl:Class ;
    rdfs:label "SteamReforming"@en,
        "SteamReforming"@it ;
    rdfs:comment "Reforming di idrocarburi con vapore su catalizzatore Ni per produrre syngas."@it ;
    rdfs:subClassOf chem:CatalyticReactorProcess .

chem:Utility a owl:Class ;
    rdfs:label "Utility"@en,
        "Utility"@it ;
    rdfs:comment "Sostanza di servizio: acqua di processo, gas inerti, vapore, ecc."@it ;
    rdfs:subClassOf chem:Substance .

chem:atmosphere a owl:DatatypeProperty ;
    rdfs:label "atmosphere"@en,
        "atmosfera"@it ;
    rdfs:comment "Valori: inerte, ossidante, riducente, vuoto."@it ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:string .

chem:balancedEquation a owl:DatatypeProperty ;
    rdfs:label "balancedEquation"@en,
        "equazioneBilanciata"@it ;
    rdfs:domain chem:Reaction ;
    rdfs:range xsd:string .

chem:casNumber a owl:DatatypeProperty ;
    rdfs:label "casNumber"@en,
        "numeroCAS"@it ;
    rdfs:domain chem:Substance ;
    rdfs:range xsd:string .

chem:co2Equivalent a owl:DatatypeProperty ;
    rdfs:label "co2Equivalent"@en,
        "co2Equivalente"@it ;
    qudt:unit unit:KiloGM-PER-KiloGM ;
    rdfs:comment "kg CO2 emessi per kg di prodotto principale."@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range xsd:decimal .

chem:coefficient a owl:DatatypeProperty ;
    rdfs:label "coefficient"@en,
        "coefficiente"@it ;
    rdfs:comment "Coefficiente stechiometrico (intero o frazionario)."@it ;
    rdfs:domain chem:StoichEntry ;
    rdfs:range xsd:decimal .

chem:contains a owl:ObjectProperty ;
    rdfs:label "contains"@en,
        "contiene"@it ;
    owl:inverseOf chem:belongsTo .

chem:energyForm a owl:DatatypeProperty ;
    rdfs:label "energyForm"@en,
        "formaEnergia"@it ;
    rdfs:comment "Valori: elettrica, termica, meccanica, chimica."@it ;
    rdfs:domain chem:EnergyInput ;
    rdfs:range xsd:string .

chem:enthalpyChange a owl:DatatypeProperty ;
    rdfs:label "enthalpyChange"@en,
        "deltaH"@it ;
    qudt:unit unit:KiloJ-PER-MOL ;
    rdfs:domain chem:Reaction ;
    rdfs:range xsd:decimal .

chem:formula a owl:DatatypeProperty ;
    rdfs:label "formula"@en,
        "formula"@it ;
    rdfs:domain chem:Substance ;
    rdfs:range xsd:string .

chem:gibbsChange a owl:DatatypeProperty ;
    rdfs:label "gibbsChange"@en,
        "deltaG"@it ;
    qudt:unit unit:KiloJ-PER-MOL ;
    rdfs:domain chem:Reaction ;
    rdfs:range xsd:decimal .

chem:hasProductEntry a owl:ObjectProperty ;
    rdfs:label "hasProductEntry"@en,
        "haProdotto"@it ;
    rdfs:domain chem:Reaction ;
    rdfs:range chem:StoichEntry .

chem:hasReactantEntry a owl:ObjectProperty ;
    rdfs:label "hasReactantEntry"@en,
        "haReagente"@it ;
    rdfs:domain chem:Reaction ;
    rdfs:range chem:StoichEntry .

chem:isConsumedBy a owl:ObjectProperty ;
    rdfs:label "isConsumedBy"@en,
        "èConsumatoDa"@it ;
    owl:inverseOf chem:consumes .

chem:isFedBy a owl:ObjectProperty ;
    rdfs:label "isFedBy"@en,
        "èAlimentataDa"@it ;
    owl:inverseOf chem:feedsInto .

chem:isPartOf a owl:ObjectProperty ;
    rdfs:label "isPartOf"@en,
        "èParteDi"@it ;
    owl:inverseOf chem:decomposesInto .

chem:isProducedBy a owl:ObjectProperty ;
    rdfs:label "isProducedBy"@en,
        "èProdottoDa"@it ;
    owl:inverseOf chem:produces .

chem:molarMass a owl:DatatypeProperty ;
    rdfs:label "molarMass"@en,
        "massaMolare"@it ;
    qudt:unit unit:GM-PER-MOL ;
    rdfs:domain chem:Substance ;
    rdfs:range xsd:decimal .

chem:operatesAt a owl:ObjectProperty ;
    rdfs:label "operatesAt"@en,
        "operaA"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:OperatingCondition .

chem:pHMax a owl:DatatypeProperty ;
    rdfs:label "pHMax"@en,
        "pHMax"@it ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:pHMin a owl:DatatypeProperty ;
    rdfs:label "pHMin"@en,
        "pHMin"@it ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:physicalState a owl:DatatypeProperty ;
    rdfs:label "physicalState"@en,
        "statoFisico"@it ;
    rdfs:comment "Valori ammessi: solid, liquid, gas, aqueous, molten."@it ;
    rdfs:domain chem:Substance ;
    rdfs:range xsd:string .

chem:pressureMax a owl:DatatypeProperty ;
    rdfs:label "pressureMax"@en,
        "pressioneMax"@it ;
    qudt:unit unit:PA ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:pressureMin a owl:DatatypeProperty ;
    rdfs:label "pressureMin"@en,
        "pressioneMin"@it ;
    qudt:unit unit:PA ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:producesByproduct a owl:ObjectProperty ;
    rdfs:label "producesByproduct"@en,
        "produceCoProdotto"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Byproduct ;
    rdfs:subPropertyOf chem:produces .

chem:producesWaste a owl:ObjectProperty ;
    rdfs:label "producesWaste"@en,
        "produceScarto"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Waste ;
    rdfs:subPropertyOf chem:produces .

chem:purity a owl:DatatypeProperty ;
    rdfs:label "purity"@en,
        "purezza"@it ;
    rdfs:comment "Frazione decimale 0–1."@it ;
    rdfs:domain chem:Substance ;
    rdfs:range xsd:decimal .

chem:recycles a owl:ObjectProperty ;
    rdfs:label "recycles"@en,
        "ricicla"@it ;
    rdfs:comment "Sostanza prodotta dalla stessa UnitOperation e reintrodotta come input (loop chiuso)."@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Substance .

chem:requiresEnergy a owl:ObjectProperty ;
    rdfs:label "requiresEnergy"@en,
        "richiedeEnergia"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:EnergyInput .

chem:requiresEquipment a owl:ObjectProperty ;
    rdfs:label "requiresEquipment"@en,
        "richiedeApparecchio"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Equipment .

chem:specificEnergy a owl:DatatypeProperty ;
    rdfs:label "specificEnergy"@en,
        "energiaSpecifica"@it ;
    qudt:unit unit:KiloW-HR-PER-KiloGM ;
    rdfs:domain chem:EnergyInput ;
    rdfs:range xsd:decimal .

chem:substance a owl:ObjectProperty ;
    rdfs:label "substance"@en,
        "sostanza"@it ;
    rdfs:domain chem:StoichEntry ;
    rdfs:range chem:Substance .

chem:temperatureMax a owl:DatatypeProperty ;
    rdfs:label "temperatureMax"@en,
        "temperaturaMax"@it ;
    qudt:unit unit:K ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:temperatureMin a owl:DatatypeProperty ;
    rdfs:label "temperatureMin"@en,
        "temperaturaMin"@it ;
    qudt:unit unit:K ;
    rdfs:domain chem:OperatingCondition ;
    rdfs:range xsd:decimal .

chem:typicalCost a owl:DatatypeProperty ;
    rdfs:label "typicalCost"@en,
        "costoTipico"@it ;
    qudt:unit unit:EUR-PER-KiloGM ;
    rdfs:range xsd:decimal .

chem:typicalYield a owl:DatatypeProperty ;
    rdfs:label "typicalYield"@en,
        "resaTipica"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range xsd:decimal .

chem:usesCatalyst a owl:ObjectProperty ;
    rdfs:label "usesCatalyst"@en,
        "usaCatalizzatore"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Catalyst .

chem:Byproduct a owl:Class ;
    rdfs:label "Byproduct"@en,
        "Sottoprodotto"@it ;
    rdfs:comment "Coprodotto economicamente o tecnicamente valorizzabile."@it ;
    rdfs:subClassOf chem:Substance .

chem:Catalyst a owl:Class ;
    rdfs:label "Catalyst"@en,
        "Catalizzatore"@it ;
    rdfs:comment "Sostanza che accelera la reazione senza essere consumata stechiometricamente."@it ;
    rdfs:subClassOf chem:Substance .

chem:CatalyticReactorProcess a owl:Class ;
    rdfs:label "CatalyticReactor"@en,
        "ReattoreCatalitico"@it ;
    rdfs:comment "Reattore con letto catalitico per sintesi/conversioni gas-fase."@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:Equipment a owl:Class ;
    rdfs:label "Equipment"@en,
        "Apparecchiatura"@it ;
    rdfs:comment "Macchina o reattore industriale (autoclave, cella elettrolitica, forno ad arco, ecc.)."@it .

chem:Pipeline a owl:Class ;
    rdfs:label "Pipeline"@en,
        "Filiera"@it ;
    rdfs:comment "Sequenza orientata di UnitOperation che lega materie prime a prodotti finali."@it .

chem:PolymerizationReactorProcess a owl:Class ;
    rdfs:label "PolymerizationReactor"@en,
        "ReattorePolimerizzazione"@it ;
    rdfs:comment "Reattore per polimerizzazione (radicalica, catalitica coordinata, condensazione)."@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:Waste a owl:Class ;
    rdfs:label "Waste"@en,
        "Scarto"@it ;
    rdfs:comment "Sottoprodotto da smaltire o stoccare (es. fanghi rossi del Bayer)."@it ;
    rdfs:subClassOf chem:Substance .

chem:belongsTo a owl:ObjectProperty ;
    rdfs:label "belongsTo"@en,
        "appartieneA"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Pipeline .

chem:consumes a owl:ObjectProperty ;
    rdfs:label "consumes"@en,
        "consuma"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Substance .

chem:decomposesInto a owl:ObjectProperty ;
    rdfs:label "decomposesInto"@en,
        "siDecomponeIn"@it ;
    rdfs:comment "Legame container/dettaglio: una UnitOperation si decompone in una o più Reazioni elementari."@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Reaction .

chem:feedsInto a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "feedsInto"@en,
        "alimentaA"@it ;
    rdfs:comment "Topologia della pipeline: l'output di una UnitOperation è input della successiva."@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:UnitOperation .

chem:Electrolysis a owl:Class ;
    rdfs:label "Electrolysis"@en,
        "Elettrolisi"@it ;
    rdfs:comment "Doppia natura: reazione chimica (RedoxReaction) e processo industriale (UnitOperation)."@it ;
    rdfs:subClassOf chem:RedoxReaction,
        chem:UnitOperation ;
    owl:equivalentClass rxno:0000186 .

chem:GasSeparation a owl:Class ;
    rdfs:label "GasSeparation"@en,
        "SeparazioneGas"@it ;
    rdfs:comment "Separazione selettiva di componenti gassosi (CO2 scrubbing, air separation, ecc.)."@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:HydrometallurgicalProcess a owl:Class ;
    rdfs:label "HydrometallurgicalProcess"@en,
        "ProcessoIdrometallurgico"@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:EnergyInput a owl:Class ;
    rdfs:label "EnergyInput"@en,
        "InputEnergetico"@it .

chem:RedoxReaction a owl:Class ;
    rdfs:label "RedoxReaction"@en,
        "ReazioneRedox"@it ;
    rdfs:subClassOf chem:Reaction ;
    owl:equivalentClass rxno:0000010 .

chem:produces a owl:ObjectProperty ;
    rdfs:label "produces"@en,
        "produce"@it ;
    rdfs:domain chem:UnitOperation ;
    rdfs:range chem:Substance .

chem:StoichEntry a owl:Class ;
    rdfs:label "StoichEntry"@en,
        "VoceStechiometrica"@it ;
    rdfs:comment "Reificazione dell'arco Reazione→Sostanza per portare il coefficiente stechiometrico."@it .

chem:PyrometallurgicalProcess a owl:Class ;
    rdfs:label "PyrometallurgicalProcess"@en,
        "ProcessoPirometallurgico"@it ;
    rdfs:subClassOf chem:UnitOperation .

chem:OperatingCondition a owl:Class ;
    rdfs:label "OperatingCondition"@en,
        "CondizioneOperativa"@it ;
    rdfs:comment "Reificazione di temperatura, pressione, atmosfera, pH e altre condizioni di processo."@it .

chem:Reaction a owl:Class ;
    rdfs:label "Reaction"@en,
        "Reazione"@it ;
    rdfs:comment "Reazione chimica elementare e bilanciata. Livello di dettaglio interno alle UnitOperation."@it .

chem:Substance a owl:Class ;
    rdfs:label "Substance"@en,
        "Sostanza"@it ;
    rdfs:comment "Elemento, composto o miscela coinvolto in una pipeline produttiva."@it .

chem:UnitOperation a owl:Class ;
    rdfs:label "UnitOperation"@en,
        "OperazioneUnitaria"@it ;
    rdfs:comment "Fase industriale (es. processo Bayer). Aggrega una o più reazioni elementari."@it .


# =============================================================
# Sprint 5: classi Equipment parallele alle *Process equipment-like.
# Usate per istanziare l'apparecchio fisico (non l'operazione che ci avviene).
# Es: chem:imperialSmeltingBlastFurnaceApparatus a chem:BlastFurnaceEquipment .
# =============================================================

chem:AbsorptionColumnEquipment a owl:Class ;
    rdfs:label "AbsorptionColumnEquipment"@en, "ColonnaAssorbimentoApparecchio"@it ;
    rdfs:comment "Colonna fisica di assorbimento. La classe *Process descrive l'operazione."@it ;
    rdfs:subClassOf chem:Equipment .

chem:BlastFurnaceEquipment a owl:Class ;
    rdfs:label "BlastFurnaceEquipment"@en, "AltofornoApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:BasicOxygenFurnaceEquipment a owl:Class ;
    rdfs:label "BasicOxygenFurnaceEquipment"@en, "ConvertitoreBOFApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:CrackingFurnaceEquipment a owl:Class ;
    rdfs:label "CrackingFurnaceEquipment"@en, "FornoCrackingApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:ElectricArcFurnaceEquipment a owl:Class ;
    rdfs:label "ElectricArcFurnaceEquipment"@en, "FornoElettricoArcoApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:ShaftFurnaceEquipment a owl:Class ;
    rdfs:label "ShaftFurnaceEquipment"@en, "FornoShaftApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:RotaryKilnEquipment a owl:Class ;
    rdfs:label "RotaryKilnEquipment"@en, "FornoRotanteApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:CatalyticReactorEquipment a owl:Class ;
    rdfs:label "CatalyticReactorEquipment"@en, "ReattoreCataliticoApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:PolymerizationReactorEquipment a owl:Class ;
    rdfs:label "PolymerizationReactorEquipment"@en, "ReattorePolimerizzazioneApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .

chem:FloatBathEquipment a owl:Class ;
    rdfs:label "FloatBathEquipment"@en, "BagnoStagnoApparecchio"@it ;
    rdfs:subClassOf chem:Equipment .


# =============================================================
# Sprint 1b: ruoli contestuali (Role + RoleAssignment).
# Una stessa Substance può giocare ruoli diversi in pipeline diverse.
# Le classi storiche (RawMaterial, FinalProduct, Byproduct, Intermediate,
# Waste, Utility, Catalyst) sono mantenute come subClassOf Substance per
# retrocompatibilità, ma sono ANCHE etichettate come Role tramite gli
# individui chem:rawMaterial, chem:finalProduct, ecc.
# =============================================================

chem:Role a owl:Class ;
    rdfs:label "Role"@en, "Ruolo"@it ;
    rdfs:comment "Ruolo che una Substance può giocare nel contesto di una Pipeline (raw material, intermediate, byproduct, ecc.)."@it .

chem:RoleAssignment a owl:Class ;
    rdfs:label "RoleAssignment"@en, "AssegnazioneRuolo"@it ;
    rdfs:comment "Reificazione: lega una Substance a un Role nel contesto di una Pipeline."@it .

chem:playsRole a owl:ObjectProperty ;
    rdfs:label "playsRole"@en, "giocaRuolo"@it ;
    rdfs:domain chem:Substance ;
    rdfs:range chem:RoleAssignment .

chem:role a owl:ObjectProperty ;
    rdfs:label "role"@en, "ruolo"@it ;
    rdfs:domain chem:RoleAssignment ;
    rdfs:range chem:Role .

chem:inPipeline a owl:ObjectProperty ;
    rdfs:label "inPipeline"@en, "inFiliera"@it ;
    rdfs:domain chem:RoleAssignment ;
    rdfs:range chem:Pipeline .

chem:rawMaterial    a owl:NamedIndividual, chem:Role ;
    rdfs:label "raw material"@en, "materia prima"@it .
chem:finalProduct   a owl:NamedIndividual, chem:Role ;
    rdfs:label "final product"@en, "prodotto finale"@it .
chem:byproduct      a owl:NamedIndividual, chem:Role ;
    rdfs:label "byproduct"@en, "sottoprodotto"@it .
chem:intermediate   a owl:NamedIndividual, chem:Role ;
    rdfs:label "intermediate"@en, "intermedio"@it .
chem:waste          a owl:NamedIndividual, chem:Role ;
    rdfs:label "waste"@en, "scarto"@it .
chem:utility        a owl:NamedIndividual, chem:Role ;
    rdfs:label "utility"@en, "utility"@it .
chem:catalyst       a owl:NamedIndividual, chem:Role ;
    rdfs:label "catalyst"@en, "catalizzatore"@it .
