---
title: "FAIRmaterials"
output:
  rmarkdown::html_vignette:
    md_extensions: [ 
      "-autolink_bare_uris" 
    ]
vignette: >
  %\VignetteIndexEntry{FAIRmaterials}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

| Authors: 
|     Jonathan E. Gordon$^{1}$, Alexander Harding Bradley$^{1}$, Priyan Rajamohan$^{1}$, Nathaniel Hahn$^{1}$, Kiefer Lin$^{1}$, 
|     Arafath Nihar$^{1}$, Hayden Cadwell$^{1}$, Jiana Kambo$^{1}$, Jayvic Jimenez$^{1}$, Kristen J. Hernandez$^{1}$, Hein Htet Aung$^{1}$, 
|     Brian Giera$^{2}$, Weiqi Yu$^{1}$, Mohommad Redad Mehdi$^{1}$, Finley Holt$^{1}$, Quynh Tran$^{1}$, Gabriel Ponon$^{1}$, 
|     Dan Savage$^{3}$, Don Brown$^{3}$, Jarod Kaltenbaugh$^{4}$, Kush Havinal$^{4}$, Nicholas Gray$^{4}$, Max Ligget$^{1}$,
|     Benjamin G. Pierce$^{1}$, Raymond Wieser$^{1}$, Yangxin Fan$^{1}$, Tommy Ciardi$^{1}$, Olatunde J. Akanbi$^{1}$, Hadiza Iawal$^{1}$,
|     Will Oltjen$^{1}$, Maliesha Kalutotage$^{1}$, Antony Lino$^{1}$, Van Tran$^{1}$, Mingjian Lu$^{1}$, Xuanji Yu$^{1}$,
|     Abhishek Daundkar$^{1}$, Hope Omodolor$^{1}$, Mirra Rasmussen$^{1}$, Sameera Nalin-Venkat$^{1}$, Tian Wang$^{1}$,
|     Rounak Chawla$^{1}$, Liangyi Huang$^{1}$, Zelin Li$^{1}$, Leean Jo$^{1}$, Jeffrey M. Yarus$^{1}$, Mengjie Li$^{4}$,
|     Kristopher O. Davis$^{4}$,  Yinghui Wu$^{1}$, Pawan K. Tripathi$^{1}$, Laura S. Bruckman$^{1}$, Erika I. Barcelos$^{1}$, 
|     Roger H. French$^{1}$
|
| $^{1}$ Materials Data Science for Stockpile Stewardship Center of Excellence, Cleveland, OH 44106, USA
| $^{2}$ Lawrence Livermore National Laboratory, Livermore, CA 94551, USA
| $^{3}$ Los Alamos National Laboratory, Los Alamos, NM 87545, USA
| $^{4}$ University of Central Florida, Materials Science & Engineering, Orlando, FL 32816, USA
  
<br>
  
# What is FAIRmaterials and what does it do?

'FAIRmaterials' is a bilingual package in R and Python that translates several CSV files from the template (described below) with ontological terms and corresponding data into RDF triples. These RDF triples are then stored in OWL and JSON-LD files, facilitating data accessibility, interoperability, and knowledge unification. The triples are also visualized in a graph saved as an SVG or as a PNG with the Python package. The Python package has a fourth output too. It generates documentation for the output ontology as an HTML. 

Put the sheets, created from the template (described below), for one or more ontologies in a folder and the 'FAIRmaterials' 'process_ontology_files' or 'FAIRSheetParser' function will output a JSON-LD, turtle/OWL, SVG/PNG visualization, and HTML documentation into the input folder for all the input ontologies merged. Note that a folder containing only files for one ontology will give results for just that ontology and specifying a base uri is required for merging ontologies. The package can handle subdirectories by producing separate unmerged outputs for each subdirectory and a merged output from all files in the input path. This tool, developed for use by the SDLE Research Center at Case Western Reserve University, facilitates the creation and visualization of material science ontologies.

<br><br><br>

# How to use FAIR CSV template:

To Prepare your CSV files, ensure your CSV files contains the appropriate ontological terms and corresponding data using this template: [FAIR CSV Template](https://docs.google.com/spreadsheets/d/1k7gFRc1Yslc-m65aWfFCxqk5UtrKZl9c3GyEFQvLSFU/edit?usp=drive_link)

The XLSX versions of the templates can be found in the package using this code:
```{r, eval = FALSE}
# Load the necessary library
library(utils)

# Specifying the path to the Zip file
zip_file <- system.file("extdata", "FAIRSheetTemplatesZIP.zip", package = "FAIRmaterials")

# Extract files from the Zip
unzip(zip_file, exdir = "path/to/destination/for/templates")
```

## Example of XRay ontology FAIR CSV sheet 
Example Name Space Sheet:
```{r, out.width="675px", dpi=1000, echo=FALSE}
knitr::include_graphics("namespacesheet.png")
```
<br>
<br>
Example Ontology Information Sheet:
```{r, out.width="675px", dpi=1000, echo=FALSE}
knitr::include_graphics("ontoinfosheet.png")
```
<br>
<br>
Example Variable Definitions Sheet:
```{r, out.width="675px", dpi=1000, echo=FALSE}
knitr::include_graphics("vardefsheet.png")
```
<br>
<br>
Example Relationship Definitions Sheet:
```{r, out.width="675px", dpi=1000, echo=FALSE}
knitr::include_graphics("reldefsheet.png")
```
<br>
<br>
Example Value Type Definitions Sheet:
```{r, out.width="675px", dpi=1000, echo=FALSE}
knitr::include_graphics("valtypesheet.png")
```

<br>

The descriptions under the column names provide instructions for how to fill out each column. Once the Name Space, Value Type Definitions, Relationship Definitions, Variable Definitions, and Ontology Info sheets are filled out, 'FAIRmaterials' is ready to use. The visualizations generated by this package are helpful to visualize an ontology to ensure satisfaction with the information in the sheets.

<br><br><br>

# Install and load the package

Install in R:
```{r, eval = FALSE}
install.packages("FAIRmaterials")

library(FAIRmaterials)
```

Install in Python:
```{python, eval = FALSE, python.reticulate = FALSE}
pip install FAIRmaterials
```

<br><br><br>

# Running the default 'process_ontology_files' function:

## PV ontology sheets:

Running the package in R:
```{r, eval=F}
# Process the CSV files in the PV folder
example_folder1 <- system.file("extdata", "PV", package = "FAIRmaterials")
FAIRmaterials::process_ontology_files(example_folder1, add_external_onto_info = FALSE)
```

This visualization from the R package will be saved in the output folder as an SVG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="PV Visualization with Value Types"}
knitr::include_graphics("PV_svg_w_valuetype.png")
```

### turtle/owl output from PV Module in R:

<details>

<summary>[Click to expand PV Module owl file]{style="background-color: yellow; color: black;"}</summary>

```{}
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix PMDCo: <https://w3id.org/pmd/co#> .
@prefix QUDT: <https://qudt.org/vocab/unit/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix PVModuleOntology: <https://cwrusdle.bitbucket.io/PVModuleOntology/> .

PVModuleOntology:BacksheetColor
    rdf:label "BacksheetColor" ;
    a rdfs:Class ;
    rdfs:comment "Color of the backsheet" ;
    rdfs:subClassOf PVModuleOntology:Color ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:BacksheetMaterial
    rdf:label "BacksheetMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the backsheet is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:CellCount
    rdf:label "CellCount" ;
    a rdfs:Class ;
    rdfs:comment "The number of cells in a module" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:Color
    rdf:label "Color" ;
    a rdfs:Class ;
    rdfs:comment "the visual perception based on the electromagnetic spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:EncapsulantMaterial
    rdf:label "EncapsulantMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the encapsulant is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:FluorescencePattern
    rdf:label "FluorescencePattern" ;
    a rdfs:Class ;
    rdfs:comment "Pattern of modules under UV Fluorescence (square or ring)" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:FrameColor
    rdf:label "FrameColor" ;
    a rdfs:Class ;
    rdfs:comment "The color of the module frame" ;
    rdfs:subClassOf PVModuleOntology:Color ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ModuleEfficiency
    rdf:label "ModuleEfficiency" ;
    a rdfs:Class ;
    rdfs:comment "The efficiency of the solar module at standard test condition (STC)" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:Ontology
    dcterms:creator """Alexander C. Harding Bradley,Balashanmuga Priyan Rajamohan,Raymond Wieser,Benjamin
Pierce,Jarod Kaltenbaugh,Hayden Caldwell,Arafath Nihar,Kiefer Lin,Jiana Kanbo,Mengjie Li,Kris Davis,Yinghui Wu,Laura S. Bruckman,Erika
I. Barcelos,Roger H. French""" ;
    dcterms:description "An ontology describing the characteristics of a PV Module." ;
    dcterms:title "PVModuleOntology" ;
    rdf:label <https://cwrusdle.bitbucket.io/PVModuleOntology/> ;
    a owl:Ontology ;
    owl:versionInfo "0.2" .

PVModuleOntology:PowerSTC
    rdf:label "PowerSTC" ;
    a rdfs:Class ;
    rdfs:comment "DC power at Standard Test Condition (STC). STC is defined as 1000 W/m2 irradiance, 25C and ASTM G173-03 standard solar spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:KiloW .

PVModuleOntology:ProdBacksheet
    rdf:label "ProdBacksheet" ;
    a rdfs:Class ;
    rdfs:comment "A backsheet of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdEncapsulant
    rdf:label "ProdEncapsulant" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdJunctionBox
    rdf:label "ProdJunctionBox" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdModule
    rdf:label "ProdModule" ;
    a rdfs:Class ;
    rdfs:comment "A solar module product" ;
    rdfs:subClassOf PMDCo:ProcessingNode ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdModuleID
    rdf:label "ProdModuleID" ;
    a rdfs:Class ;
    rdfs:comment "Alphanumeric identifier for the metadata document" ;
    rdfs:subClassOf PMDCo:NodeSerialNumber ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:TemperatureNOCT
    rdf:label "TemperatureNOCT" ;
    a rdfs:Class ;
    rdfs:comment "The nominal operating cell temperature (NOCT) of a solar module" ;
    rdfs:subClassOf PMDCo:Temperature ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:DEG_C .

PMDCo:Component
    rdf:label "Component" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Length
    rdf:label "Length" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:Manufacturer
    rdf:label "Manufacturer" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    rdfs:subClassOf PMDCo:ProcessingNode ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:NodeSerialNumber
    rdf:label "NodeSerialNumber" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:ProcessingNode
    rdf:label "ProcessingNode" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Temperature
    rdf:label "Temperature" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:ValueObject
    rdf:label "ValueObject" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Weight
    rdf:label "Weight" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:KiloGM .

PMDCo:Width
    rdf:label "Width" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:characteristic
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:NodeSerialNumber, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width .

PMDCo:component
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdJunctionBox .

PMDCo:value
    a owl:DatatypeProperty ;
    rdfs:domain PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:ProdModuleID, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width ;
    rdfs:range sd:float, sd:integer, sd:string .
```

</details>

### json-ld output from PV Module in R:

<details>

<summary>[Click to expand PV Module json-ld output]{style="background-color: yellow;"}</summary>

```{}
{
  "@graph": [
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetColor",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "BacksheetColor",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Color of the backsheet",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/Color"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetMaterial",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "BacksheetMaterial",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Material the backsheet is made out of",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#MaterialDesignation"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/CellCount",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "CellCount",
      "http://www.w3.org/2000/01/rdf-schema#comment": "The number of cells in a module",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ValueObject"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/Color",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Color",
      "http://www.w3.org/2000/01/rdf-schema#comment": "the visual perception based on the electromagnetic spectrum",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ValueObject"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/EncapsulantMaterial",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "EncapsulantMaterial",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Material the encapsulant is made out of",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#MaterialDesignation"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FluorescencePattern",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "FluorescencePattern",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Pattern of modules under UV Fluorescence (square or ring)",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ValueObject"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FrameColor",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "FrameColor",
      "http://www.w3.org/2000/01/rdf-schema#comment": "The color of the module frame",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/Color"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ModuleEfficiency",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ModuleEfficiency",
      "http://www.w3.org/2000/01/rdf-schema#comment": "The efficiency of the solar module at standard test condition (STC)",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ValueObject"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/Ontology",
      "@type": "http://www.w3.org/2002/07/owl#Ontology",
      "http://purl.org/dc/terms/creator": "Alexander C. Harding Bradley,Balashanmuga Priyan Rajamohan,Raymond Wieser,Benjamin\nPierce,Jarod Kaltenbaugh,Hayden Caldwell,Arafath Nihar,Kiefer Lin,Jiana Kanbo,Mengjie Li,Kris Davis,Yinghui Wu,Laura S. Bruckman,Erika\nI. Barcelos,Roger H. French",
      "http://purl.org/dc/terms/description": "An ontology describing the characteristics of a PV Module.",
      "http://purl.org/dc/terms/title": "PVModuleOntology",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": {
        "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/"
      },
      "http://www.w3.org/2002/07/owl#versionInfo": "0.2"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/PowerSTC",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "PowerSTC",
      "http://www.w3.org/2000/01/rdf-schema#comment": "DC power at Standard Test Condition (STC). STC is defined as 1000 W/m2 irradiance, 25C and ASTM G173-03 standard solar spectrum",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ValueObject"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/KiloW"
      }
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdBacksheet",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProdBacksheet",
      "http://www.w3.org/2000/01/rdf-schema#comment": "A backsheet of a photovoltaic module",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#Component"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdEncapsulant",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProdEncapsulant",
      "http://www.w3.org/2000/01/rdf-schema#comment": "An encapsulant of a photovoltaic module",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#Component"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdJunctionBox",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProdJunctionBox",
      "http://www.w3.org/2000/01/rdf-schema#comment": "An encapsulant of a photovoltaic module",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#Component"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdModule",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProdModule",
      "http://www.w3.org/2000/01/rdf-schema#comment": "A solar module product",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ProcessingNode"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdModuleID",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProdModuleID",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Alphanumeric identifier for the metadata document",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#NodeSerialNumber"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/TemperatureNOCT",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "TemperatureNOCT",
      "http://www.w3.org/2000/01/rdf-schema#comment": "The nominal operating cell temperature (NOCT) of a solar module",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#Temperature"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/DEG_C"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co#Component",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Component",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#Length",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Length",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/CentiM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co#Manufacturer",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Manufacturer",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#MaterialDesignation",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "MaterialDesignation",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co#ProcessingNode"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#NodeSerialNumber",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "NodeSerialNumber",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#ProcessingNode",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProcessingNode",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#Temperature",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Temperature",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#Thickness",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Thickness",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/CentiM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co#ValueObject",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ValueObject",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co#Weight",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Weight",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/KiloGM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co#Width",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Width",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "https://qudt.org/vocab/unit/CentiM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co#characteristic",
      "@type": "http://www.w3.org/2002/07/owl#ObjectProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": [
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdEncapsulant"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdBacksheet"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdModule"
        }
      ],
      "http://www.w3.org/2000/01/rdf-schema#range": [
        {
          "@id": "https://w3id.org/pmd/co#Weight"
        },
        {
          "@id": "https://w3id.org/pmd/co#Thickness"
        },
        {
          "@id": "https://w3id.org/pmd/co#Width"
        },
        {
          "@id": "https://w3id.org/pmd/co#Length"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/EncapsulantMaterial"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetMaterial"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetColor"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/TemperatureNOCT"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/PowerSTC"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FluorescencePattern"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ModuleEfficiency"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FrameColor"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/CellCount"
        },
        {
          "@id": "https://w3id.org/pmd/co#Manufacturer"
        },
        {
          "@id": "https://w3id.org/pmd/co#NodeSerialNumber"
        }
      ]
    },
    {
      "@id": "https://w3id.org/pmd/co#component",
      "@type": "http://www.w3.org/2002/07/owl#ObjectProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": {
        "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdModule"
      },
      "http://www.w3.org/2000/01/rdf-schema#range": [
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdJunctionBox"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdEncapsulant"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdBacksheet"
        }
      ]
    },
    {
      "@id": "https://w3id.org/pmd/co#value",
      "@type": "http://www.w3.org/2002/07/owl#DatatypeProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": [
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/TemperatureNOCT"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/PowerSTC"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FluorescencePattern"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ModuleEfficiency"
        },
        {
          "@id": "https://w3id.org/pmd/co#Weight"
        },
        {
          "@id": "https://w3id.org/pmd/co#Thickness"
        },
        {
          "@id": "https://w3id.org/pmd/co#Width"
        },
        {
          "@id": "https://w3id.org/pmd/co#Length"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/EncapsulantMaterial"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetMaterial"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/BacksheetColor"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/FrameColor"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/CellCount"
        },
        {
          "@id": "https://w3id.org/pmd/co#Manufacturer"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/PVModuleOntology/ProdModuleID"
        }
      ],
      "http://www.w3.org/2000/01/rdf-schema#range": [
        {
          "@id": "http://www.w3.org/2001/XMLSchema#float"
        },
        {
          "@id": "http://www.w3.org/2001/XMLSchema#string"
        },
        {
          "@id": "http://www.w3.org/2001/XMLSchema#integer"
        }
      ]
    }
  ]
}

```

</details>

Running the package in Python:
```{python, eval = FALSE, python.reticulate = FALSE}
python -m FAIRmaterials --folder_path /path/to/csv/files --include_graph_valuetype --include_pylode_docs
```

This visualization from the Python package will be saved in the output folder as an PNG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="PV Visualization with Value Types"}
knitr::include_graphics("mds-pvModuleGraph.png")
```

### HTML output
The HTML output generated by the Python package for PV Module can be found [here](https://cwrusdle.bitbucket.io/PylodeHTML/mds-pvModule-pylode.html):

### turtle/owl output from PV Module:

<details>

<summary>[Click to expand PV Module owl file]{style="background-color: yellow; color: black;"}</summary>

```{}
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-pvModule: <https://cwrusdle.bitbucket.io/pvModule#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

mds-pvModule:EncapsulantMaterial a owl:Class ;
    rdfs:label "EncapsulantMaterial" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Material of the polymer encapsulant" .

mds-pvModule:ModuleEncapsulant a owl:Class ;
    rdfs:label "ModuleEncapsulant" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Polymer encapsulant of a module" .

mds-pvModule:ModuleJunctionBox a owl:Class ;
    rdfs:label "ModuleJunctionBox" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Electrical junction box for connection to the module" .

mds-pvModule:Ontology a owl:Ontology ;
    rdfs:label "mds-pvModule" ;
    dcterms:creator "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Erika I. Barcelos",
        "Finley Holt",
        "Frank Ernst",
        "Matthew Willard",
        "Mohommad Redad Mehdi",
        "Pawan K. Tripathi",
        "Roger H. French",
        "Weiqi Yue" ;
    dcterms:description "An ontology describing a PV Module" ;
    dcterms:title "mds-pvModule" ;
    owl:versionInfo "0.2.0.5" .

pmd:characteristicOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicModuleProperty,
        mds-pvModule:PhotovoltaicSite .

pmd:composedOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicBacksheet,
        mds-pvModule:PhotovoltaicCell,
        mds-pvModule:PhotovoltaicInverter .

pmd:hasIdentifier a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicModuleID .

pmd:hasSource a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:ModuleRatingAtReference ;
    rdfs:range mds-pvModule:OrangeButtonTerm .

pmd:value a owl:DatatypeProperty ;
    rdfs:domain mds-pvModule:CellCount,
        mds-pvModule:CurrentAtMaximumPower,
        mds-pvModule:CurrentShortCircuit,
        mds-pvModule:FluorescencePattern,
        mds-pvModule:Length,
        mds-pvModule:ModuleEfficiency,
        mds-pvModule:ModuleRatingAtReference,
        mds-pvModule:ModuleRatingCondition,
        mds-pvModule:PhotovoltaicModuleID,
        mds-pvModule:PowerDC,
        mds-pvModule:PowerSTC,
        mds-pvModule:Thickness,
        mds-pvModule:VoltageAtMaximumPower,
        mds-pvModule:VoltageOpenCircuit,
        mds-pvModule:Weight,
        mds-pvModule:Width ;
    rdfs:range xsd:float,
        xsd:integer,
        xsd:string .

mds-pvModule:CellCount a owl:Class ;
    rdfs:label "CellCount" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Number of cells in a module" .

mds-pvModule:CurrentAtMaximumPower a owl:Class ;
    rdfs:label "CurrentAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC current at the maximum power point under STC" ;
    pmd:unit qudt:A .

mds-pvModule:CurrentShortCircuit a owl:Class ;
    rdfs:label "CurrentShortCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module short circuit current" ;
    pmd:unit qudt:A .

mds-pvModule:FluorescencePattern a owl:Class ;
    rdfs:label "FluorescencePattern" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "A UVF fluorescence pattern of a module" .

mds-pvModule:Length a owl:Class ;
    rdfs:label "Length" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Length of the module along longest side" ;
    pmd:unit qudt:CentiM .

mds-pvModule:ModuleEfficiency a owl:Class ;
    rdfs:label "ModuleEfficiency" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Theoretical efficency of a module" .

mds-pvModule:ModuleRatingCondition a owl:Class ;
    rdfs:label "ModuleRatingCondition" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Condition of the module" .

mds-pvModule:OrangeButtonTerm a owl:Class ;
    rdfs:label "OrangeButtonTerm" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "Term from the OrangeButton Taxonomy" .

mds-pvModule:PhotovoltaicBacksheet a owl:Class ;
    rdfs:label "PhotovoltaicBacksheet" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "Polymer backsheet of a PV cell or module" .

mds-pvModule:PhotovoltaicCell a owl:Class ;
    rdfs:label "PhotovoltaicCell" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "PV cell that composes a module" .

mds-pvModule:PhotovoltaicInverter a owl:Class ;
    rdfs:label "PhotovoltaicInverter" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "An inverter for a PV system" .

mds-pvModule:PhotovoltaicSite a owl:Class ;
    rdfs:label "PhotovoltaicSite" ;
    rdfs:subClassOf pmd:Location ;
    skos:altLabel "" ;
    skos:definition "Physical location of a PV site" .

mds-pvModule:PowerDC a owl:Class ;
    rdfs:label "PowerDC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC power at STC, 1 sun of irradiance" ;
    pmd:unit qudt:KiloW .

mds-pvModule:PowerSTC a owl:Class ;
    rdfs:label "PowerSTC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Power at refrence conditions" ;
    pmd:unit qudt:KiloW .

mds-pvModule:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Thickness of the module, not counting the framing" ;
    pmd:unit qudt:CentiM .

mds-pvModule:VoltageAtMaximumPower a owl:Class ;
    rdfs:label "VoltageAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC voltage at the maximum power point under STC" ;
    pmd:unit qudt:V .

mds-pvModule:VoltageOpenCircuit a owl:Class ;
    rdfs:label "VoltageOpenCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module open circuit voltage, maximum voltage the module can provide" ;
    pmd:unit qudt:V .

mds-pvModule:Weight a owl:Class ;
    rdfs:label "Weight" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Module weight" ;
    pmd:unit qudt:LB .

mds-pvModule:Width a owl:Class ;
    rdfs:label "Width" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Width of module along shortest side" ;
    pmd:unit qudt:CentiM .

pmd:Location a owl:Class ;
    rdfs:label "Location" ;
    skos:altLabel "" .

pmd:ProvidedIdentifier a owl:Class ;
    rdfs:label "ProvidedIdentifier" ;
    skos:altLabel "" .

mds-pvModule:PhotovoltaicModuleID a owl:Class ;
    rdfs:label "PhotovoltaicModuleID" ;
    rdfs:subClassOf pmd:ProvidedIdentifier ;
    skos:altLabel "" ;
    skos:definition "Module identifier" .

pmd:ValueObject a owl:Class ;
    rdfs:label "ValueObject" ;
    skos:altLabel "" .

mds-pvModule:PhotovoltaicModule a owl:Class ;
    rdfs:label "PhotovoltaicModule" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "A PV module, comprised of cells, for field deployment" .

pmd:ProcessingNode a owl:Class ;
    rdfs:label "ProcessingNode" ;
    skos:altLabel "" .

mds-pvModule:ModuleRatingAtReference a owl:Class ;
    rdfs:label "ModuleRatingAtReference" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Measurements of a module taken at STC and 1000 W/m^2 irradiance" .

mds-pvModule:PhotovoltaicModuleProperty a owl:Class ;
    rdfs:label "PhotovoltaicModuleProperty" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "A property of a PV module" .
```

</details>

### json-ld output from PV Module:

<details>

<summary>[Click to expand PV json-ld output]{style="background-color: yellow;"}</summary>

```{}
{
  "@context": {
    "brick": "https://brickschema.org/schema/Brick#",
    "csvw": "http://www.w3.org/ns/csvw#",
    "dc": "http://purl.org/dc/elements/1.1/",
    "dcam": "http://purl.org/dc/dcam/",
    "dcat": "http://www.w3.org/ns/dcat#",
    "dcmitype": "http://purl.org/dc/dcmitype/",
    "dcterms": "http://purl.org/dc/terms/",
    "doap": "http://usefulinc.com/ns/doap#",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "geo": "http://www.opengis.net/ont/geosparql#",
    "mds-pvModule": "https://cwrusdle.bitbucket.io/pvModule#",
    "odrl": "http://www.w3.org/ns/odrl/2/",
    "org": "http://www.w3.org/ns/org#",
    "owl": "http://www.w3.org/2002/07/owl#",
    "pmd": "https://w3id.org/pmd/co/",
    "prof": "http://www.w3.org/ns/dx/prof/",
    "prov": "http://www.w3.org/ns/prov#",
    "qb": "http://purl.org/linked-data/cube#",
    "qudt": "http://qudt.org/2.1/vocab/unit#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "schema": "https://schema.org/",
    "sh": "http://www.w3.org/ns/shacl#",
    "skos": "http://www.w3.org/2004/02/skos/core#",
    "sosa": "http://www.w3.org/ns/sosa/",
    "ssn": "http://www.w3.org/ns/ssn/",
    "time": "http://www.w3.org/2006/time#",
    "vann": "http://purl.org/vocab/vann/",
    "void": "http://rdfs.org/ns/void#",
    "wgs": "https://www.w3.org/2003/01/geo/wgs84_pos#",
    "xml": "http://www.w3.org/XML/1998/namespace",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@graph": [
    {
      "@id": "mds-pvModule:VoltageOpenCircuit",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:V"
      },
      "rdfs:label": "VoltageOpenCircuit",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "Module open circuit voltage, maximum voltage the module can provide"
    },
    {
      "@id": "mds-pvModule:Length",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:CentiM"
      },
      "rdfs:label": "Length",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Length of the module along longest side"
    },
    {
      "@id": "mds-pvModule:EncapsulantMaterial",
      "@type": "owl:Class",
      "rdfs:label": "EncapsulantMaterial",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Material of the polymer encapsulant"
    },
    {
      "@id": "pmd:ProcessingNode",
      "@type": "owl:Class",
      "rdfs:label": "ProcessingNode",
      "skos:altLabel": ""
    },
    {
      "@id": "mds-pvModule:ModuleJunctionBox",
      "@type": "owl:Class",
      "rdfs:label": "ModuleJunctionBox",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Electrical junction box for connection to the module"
    },
    {
      "@id": "mds-pvModule:Width",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:CentiM"
      },
      "rdfs:label": "Width",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Width of module along shortest side"
    },
    {
      "@id": "mds-pvModule:ModuleEfficiency",
      "@type": "owl:Class",
      "rdfs:label": "ModuleEfficiency",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "Theoretical efficency of a module"
    },
    {
      "@id": "mds-pvModule:VoltageAtMaximumPower",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:V"
      },
      "rdfs:label": "VoltageAtMaximumPower",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "DC voltage at the maximum power point under STC"
    },
    {
      "@id": "mds-pvModule:PowerDC",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:KiloW"
      },
      "rdfs:label": "PowerDC",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "DC power at STC, 1 sun of irradiance"
    },
    {
      "@id": "mds-pvModule:Weight",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:LB"
      },
      "rdfs:label": "Weight",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Module weight"
    },
    {
      "@id": "pmd:ValueObject",
      "@type": "owl:Class",
      "rdfs:label": "ValueObject",
      "skos:altLabel": ""
    },
    {
      "@id": "mds-pvModule:PhotovoltaicModule",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicModule",
      "rdfs:subClassOf": {
        "@id": "pmd:ProcessingNode"
      },
      "skos:altLabel": "",
      "skos:definition": "A PV module, comprised of cells, for field deployment"
    },
    {
      "@id": "pmd:characteristicOf",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-pvModule:PhotovoltaicModule"
      },
      "rdfs:range": [
        {
          "@id": "mds-pvModule:PhotovoltaicModuleProperty"
        },
        {
          "@id": "mds-pvModule:PhotovoltaicSite"
        }
      ]
    },
    {
      "@id": "mds-pvModule:ModuleRatingAtReference",
      "@type": "owl:Class",
      "rdfs:label": "ModuleRatingAtReference",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Measurements of a module taken at STC and 1000 W/m^2 irradiance"
    },
    {
      "@id": "pmd:value",
      "@type": "owl:DatatypeProperty",
      "rdfs:domain": [
        {
          "@id": "mds-pvModule:PhotovoltaicModuleID"
        },
        {
          "@id": "mds-pvModule:CellCount"
        },
        {
          "@id": "mds-pvModule:ModuleRatingAtReference"
        },
        {
          "@id": "mds-pvModule:Length"
        },
        {
          "@id": "mds-pvModule:Width"
        },
        {
          "@id": "mds-pvModule:Thickness"
        },
        {
          "@id": "mds-pvModule:Weight"
        },
        {
          "@id": "mds-pvModule:ModuleEfficiency"
        },
        {
          "@id": "mds-pvModule:PowerSTC"
        },
        {
          "@id": "mds-pvModule:CurrentAtMaximumPower"
        },
        {
          "@id": "mds-pvModule:CurrentShortCircuit"
        },
        {
          "@id": "mds-pvModule:PowerDC"
        },
        {
          "@id": "mds-pvModule:VoltageAtMaximumPower"
        },
        {
          "@id": "mds-pvModule:VoltageOpenCircuit"
        },
        {
          "@id": "mds-pvModule:ModuleRatingCondition"
        },
        {
          "@id": "mds-pvModule:FluorescencePattern"
        }
      ],
      "rdfs:range": [
        {
          "@id": "xsd:string"
        },
        {
          "@id": "xsd:integer"
        },
        {
          "@id": "xsd:float"
        }
      ]
    },
    {
      "@id": "mds-pvModule:Thickness",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:CentiM"
      },
      "rdfs:label": "Thickness",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Thickness of the module, not counting the framing"
    },
    {
      "@id": "pmd:hasIdentifier",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-pvModule:PhotovoltaicModule"
      },
      "rdfs:range": {
        "@id": "mds-pvModule:PhotovoltaicModuleID"
      }
    },
    {
      "@id": "mds-pvModule:FluorescencePattern",
      "@type": "owl:Class",
      "rdfs:label": "FluorescencePattern",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "A UVF fluorescence pattern of a module"
    },
    {
      "@id": "mds-pvModule:PhotovoltaicModuleProperty",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicModuleProperty",
      "rdfs:subClassOf": {
        "@id": "pmd:ValueObject"
      },
      "skos:altLabel": "",
      "skos:definition": "A property of a PV module"
    },
    {
      "@id": "mds-pvModule:Ontology",
      "@type": "owl:Ontology",
      "dcterms:creator": [
        "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Mohommad Redad Mehdi",
        "Weiqi Yue",
        "Finley Holt",
        "Pawan K. Tripathi",
        "Erika I. Barcelos",
        "Matthew Willard",
        "Frank Ernst",
        "Roger H. French"
      ],
      "dcterms:description": "An ontology describing a PV Module",
      "dcterms:title": "mds-pvModule",
      "owl:versionInfo": "0.2.0.5",
      "rdfs:label": "mds-pvModule"
    },
    {
      "@id": "mds-pvModule:PhotovoltaicInverter",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicInverter",
      "rdfs:subClassOf": {
        "@id": "pmd:ProcessingNode"
      },
      "skos:altLabel": "",
      "skos:definition": "An inverter for a PV system"
    },
    {
      "@id": "mds-pvModule:CurrentAtMaximumPower",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:A"
      },
      "rdfs:label": "CurrentAtMaximumPower",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "DC current at the maximum power point under STC"
    },
    {
      "@id": "mds-pvModule:ModuleEncapsulant",
      "@type": "owl:Class",
      "rdfs:label": "ModuleEncapsulant",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Polymer encapsulant of a module"
    },
    {
      "@id": "mds-pvModule:PowerSTC",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:KiloW"
      },
      "rdfs:label": "PowerSTC",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "Power at refrence conditions"
    },
    {
      "@id": "mds-pvModule:PhotovoltaicSite",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicSite",
      "rdfs:subClassOf": {
        "@id": "pmd:Location"
      },
      "skos:altLabel": "",
      "skos:definition": "Physical location of a PV site"
    },
    {
      "@id": "mds-pvModule:PhotovoltaicModuleID",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicModuleID",
      "rdfs:subClassOf": {
        "@id": "pmd:ProvidedIdentifier"
      },
      "skos:altLabel": "",
      "skos:definition": "Module identifier"
    },
    {
      "@id": "pmd:Location",
      "@type": "owl:Class",
      "rdfs:label": "Location",
      "skos:altLabel": ""
    },
    {
      "@id": "pmd:hasSource",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "rdfs:range": {
        "@id": "mds-pvModule:OrangeButtonTerm"
      }
    },
    {
      "@id": "mds-pvModule:OrangeButtonTerm",
      "@type": "owl:Class",
      "rdfs:label": "OrangeButtonTerm",
      "rdfs:subClassOf": {
        "@id": "pmd:ValueObject"
      },
      "skos:altLabel": "",
      "skos:definition": "Term from the OrangeButton Taxonomy"
    },
    {
      "@id": "pmd:composedOf",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-pvModule:PhotovoltaicModule"
      },
      "rdfs:range": [
        {
          "@id": "mds-pvModule:PhotovoltaicCell"
        },
        {
          "@id": "mds-pvModule:PhotovoltaicBacksheet"
        },
        {
          "@id": "mds-pvModule:PhotovoltaicInverter"
        }
      ]
    },
    {
      "@id": "mds-pvModule:ModuleRatingCondition",
      "@type": "owl:Class",
      "rdfs:label": "ModuleRatingCondition",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "Condition of the module"
    },
    {
      "@id": "mds-pvModule:PhotovoltaicBacksheet",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicBacksheet",
      "rdfs:subClassOf": {
        "@id": "pmd:ProcessingNode"
      },
      "skos:altLabel": "",
      "skos:definition": "Polymer backsheet of a PV cell or module"
    },
    {
      "@id": "mds-pvModule:CurrentShortCircuit",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:A"
      },
      "rdfs:label": "CurrentShortCircuit",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:ModuleRatingAtReference"
      },
      "skos:altLabel": "",
      "skos:definition": "Module short circuit current"
    },
    {
      "@id": "mds-pvModule:CellCount",
      "@type": "owl:Class",
      "rdfs:label": "CellCount",
      "rdfs:subClassOf": {
        "@id": "mds-pvModule:PhotovoltaicModuleProperty"
      },
      "skos:altLabel": "",
      "skos:definition": "Number of cells in a module"
    },
    {
      "@id": "pmd:ProvidedIdentifier",
      "@type": "owl:Class",
      "rdfs:label": "ProvidedIdentifier",
      "skos:altLabel": ""
    },
    {
      "@id": "mds-pvModule:PhotovoltaicCell",
      "@type": "owl:Class",
      "rdfs:label": "PhotovoltaicCell",
      "rdfs:subClassOf": {
        "@id": "pmd:ProcessingNode"
      },
      "skos:altLabel": "",
      "skos:definition": "PV cell that composes a module"
    }
  ]
}

```

</details>

## XRay Sample ontology sheets:

Running the package in R:
```{r, eval=F}
# Process the CSV files in the Xray folder
example_folder2 <- system.file("extdata", "XRay", package = "FAIRmaterials")
FAIRmaterials::process_ontology_files(example_folder2, add_external_onto_info = FALSE)
```

This visualization from the R package will be saved in the output folder as an SVG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="XRay Visualization with Value Types"}
knitr::include_graphics("XRay_svg_w_valuetype.png")
```

### turtle/owl output from XRay Sample in R:

<details>

<summary>[Click to expand XRay Sample owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix sd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix PMDCo: <https://w3id.org/pmd/co#> .
@prefix QUDT: <https://qudt.org/vocab/unit/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .

mds-XraySample:MaterialName
    rdf:label "MaterialName" ;
    a rdfs:Class ;
    rdfs:comment "Name of the material." ;
    rdfs:subClassOf pmd:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:Ontology
    dcterms:creator """Alexander C. Harding Bradley, Balashanmuga Priyan Rajamohan, 
Mohommad Redad Mehdi, Weiqi Yue, Finley Holt, Pawan K. Tripathi, 
 Erika I. Barcelos, Matthew Willard, Frank Ernst, Roger H. French""" ;
    dcterms:description "XRD Sample Ontology for the FAST Beamline at CHESS." ;
    dcterms:title "mds-XraySample" ;
    rdf:label <https://cwrusdle.bitbucket.io/xraySample#> ;
    a owl:Ontology ;
    owl:versionInfo "0.2" .

mds-XraySample:ProcessingMethod
    rdf:label "ProcessingMethod" ;
    a rdfs:Class ;
    rdfs:comment "The manufacturing method by ehich the sample was created." ;
    rdfs:subClassOf pmd:ManufacturingProcess ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:SampleID
    rdf:label "SampleID" ;
    a rdfs:Class ;
    rdfs:comment "A human-labeled sample identifier." ;
    rdfs:subClassOf pmd:SpecimenName ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:XraySample
    rdf:label "XraySample" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    rdfs:subClassOf pmd:Sample ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:XrayTool
    rdf:label "XrayTool" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:inputOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool .

pmd:Length
    rdf:label "Length" ;
    a rdfs:Class ;
    rdfs:comment "Length of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:ManufacturingProcess
    rdf:label "ManufacturingProcess" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:Sample
    rdf:label "Sample" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:SpecimenName
    rdf:label "SpecimenName" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class ;
    rdfs:comment "Thickness of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:Width
    rdf:label "Width" ;
    a rdfs:Class ;
    rdfs:comment "Width of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:characteristicOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, pmd:Length, pmd:Thickness, pmd:Width .

pmd:hasIdentifier
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:SampleID .

pmd:value
    a owl:DatatypeProperty ;
    rdfs:domain mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, mds-XraySample:SampleID, pmd:Length, pmd:Thickness, pmd:Width ;
    rdfs:range sd:float, sd:string .


```

</details>

### json-ld output from XRay Sample in R:

<details>

<summary>[Click to expand XRay Sample json-ld output]{style="background-color: yellow;"}</summary>

```{}
{
  "@graph": [
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#MaterialName",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "MaterialName",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Name of the material.",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co/MaterialDesignation"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#Ontology",
      "@type": "http://www.w3.org/2002/07/owl#Ontology",
      "http://purl.org/dc/terms/creator": "Alexander C. Harding Bradley, Balashanmuga Priyan Rajamohan, \nMohommad Redad Mehdi, Weiqi Yue, Finley Holt, Pawan K. Tripathi, \n Erika I. Barcelos, Matthew Willard, Frank Ernst, Roger H. French",
      "http://purl.org/dc/terms/description": "XRD Sample Ontology for the FAST Beamline at CHESS.",
      "http://purl.org/dc/terms/title": "mds-XraySample",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#"
      },
      "http://www.w3.org/2002/07/owl#versionInfo": "0.2"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#ProcessingMethod",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ProcessingMethod",
      "http://www.w3.org/2000/01/rdf-schema#comment": "The manufacturing method by ehich the sample was created.",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co/ManufacturingProcess"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#SampleID",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "SampleID",
      "http://www.w3.org/2000/01/rdf-schema#comment": "A human-labeled sample identifier.",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co/SpecimenName"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#XraySample",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "XraySample",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2000/01/rdf-schema#subClassOf": {
        "@id": "https://w3id.org/pmd/co/Sample"
      },
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#XrayTool",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "XrayTool",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://cwrusdle.bitbucket.io/xraySample#inputOf",
      "@type": "http://www.w3.org/2002/07/owl#ObjectProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#XraySample"
      },
      "http://www.w3.org/2000/01/rdf-schema#range": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#XrayTool"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co/Length",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Length",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Length of the sample.",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "http://qudt.org/2.1/vocab/unit#MilliM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co/ManufacturingProcess",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "ManufacturingProcess",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co/MaterialDesignation",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "MaterialDesignation",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co/Sample",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Sample",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co/SpecimenName",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "SpecimenName",
      "http://www.w3.org/2000/01/rdf-schema#comment": "_",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": "_"
    },
    {
      "@id": "https://w3id.org/pmd/co/Thickness",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Thickness",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Thickness of the sample.",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "http://qudt.org/2.1/vocab/unit#MilliM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co/Width",
      "@type": "http://www.w3.org/2000/01/rdf-schema#Class",
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#label": "Width",
      "http://www.w3.org/2000/01/rdf-schema#comment": "Width of the sample.",
      "http://www.w3.org/2004/02/skos/core#altLabel": "_",
      "https://w3id.org/pmd/co#unit": {
        "@id": "http://qudt.org/2.1/vocab/unit#MilliM"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co/characteristicOf",
      "@type": "http://www.w3.org/2002/07/owl#ObjectProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#XraySample"
      },
      "http://www.w3.org/2000/01/rdf-schema#range": [
        {
          "@id": "https://w3id.org/pmd/co/Thickness"
        },
        {
          "@id": "https://w3id.org/pmd/co/Width"
        },
        {
          "@id": "https://w3id.org/pmd/co/Length"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/xraySample#MaterialName"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/xraySample#ProcessingMethod"
        }
      ]
    },
    {
      "@id": "https://w3id.org/pmd/co/hasIdentifier",
      "@type": "http://www.w3.org/2002/07/owl#ObjectProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#XraySample"
      },
      "http://www.w3.org/2000/01/rdf-schema#range": {
        "@id": "https://cwrusdle.bitbucket.io/xraySample#SampleID"
      }
    },
    {
      "@id": "https://w3id.org/pmd/co/value",
      "@type": "http://www.w3.org/2002/07/owl#DatatypeProperty",
      "http://www.w3.org/2000/01/rdf-schema#domain": [
        {
          "@id": "https://w3id.org/pmd/co/Thickness"
        },
        {
          "@id": "https://w3id.org/pmd/co/Width"
        },
        {
          "@id": "https://w3id.org/pmd/co/Length"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/xraySample#MaterialName"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/xraySample#ProcessingMethod"
        },
        {
          "@id": "https://cwrusdle.bitbucket.io/xraySample#SampleID"
        }
      ],
      "http://www.w3.org/2000/01/rdf-schema#range": [
        {
          "@id": "http://www.w3.org/2001/XMLSchema#float"
        },
        {
          "@id": "http://www.w3.org/2001/XMLSchema#string"
        }
      ]
    }
  ]
}

```

</details>  

Running the package in Python:
```{python, eval=F, python.reticulate = FALSE}
# Process the CSV files in the Xray folder
python -m FAIRmaterials --folder_path /path/to/csv/files --include_graph_valuetype --include_pylode_docs
```

This visualization from the Python package will be saved in the output folder as an PNG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="PV Visualization with Value Types"}
knitr::include_graphics("mds-XraySampleGraph.png")
```

### HTML output
The HTML output generated by the Python package for XRay Sample can be found [here](https://cwrusdle.bitbucket.io/PylodeHTML/mds-XraySample-pylode.html):

### turtle/owl output from XRay Sample in R:

<details>

<summary>[Click to expand XRay Sample owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

mds-XraySample:Ontology a owl:Ontology ;
    rdfs:label "mds-XraySample" ;
    dcterms:creator "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Erika I. Barcelos",
        "Finley Holt",
        "Frank Ernst",
        "Matthew Willard",
        "Mohommad Redad Mehdi",
        "Pawan K. Tripathi",
        "Roger H. French",
        "Weiqi Yue" ;
    dcterms:description "XRD Sample Ontology for the FAST Beamline at CHESS." ;
    dcterms:title "mds-XraySample" ;
    owl:versionInfo "0.2" .

pmd:characteristicOf a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        pmd:Length,
        pmd:Thickness,
        pmd:Width .

pmd:hasIdentifier a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:SampleID .

pmd:inputOf a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool .

pmd:value a owl:DatatypeProperty ;
    rdfs:domain mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        mds-XraySample:SampleID,
        pmd:Length,
        pmd:Thickness,
        pmd:Width ;
    rdfs:range xsd:float,
        xsd:string .

mds-XraySample:XrayTool a owl:Class ;
    rdfs:label "XrayTool" ;
    skos:altLabel "" .

pmd:ManufacturingProcess a owl:Class ;
    rdfs:label "ManufacturingProcess" ;
    skos:altLabel "" .

pmd:MaterialDesignation a owl:Class ;
    rdfs:label "MaterialDesignation" ;
    skos:altLabel "" .

pmd:Sample a owl:Class ;
    rdfs:label "Sample" ;
    skos:altLabel "" .

pmd:SpecimenName a owl:Class ;
    rdfs:label "SpecimenName" ;
    skos:altLabel "" .

mds-XraySample:MaterialName a owl:Class ;
    rdfs:label "MaterialName" ;
    rdfs:subClassOf pmd:MaterialDesignation ;
    skos:altLabel "" ;
    skos:definition "Name of the material." .

mds-XraySample:ProcessingMethod a owl:Class ;
    rdfs:label "ProcessingMethod" ;
    rdfs:subClassOf pmd:ManufacturingProcess ;
    skos:altLabel "" ;
    skos:definition "The manufacturing method by ehich the sample was created." .

mds-XraySample:SampleID a owl:Class ;
    rdfs:label "SampleID" ;
    rdfs:subClassOf pmd:SpecimenName ;
    skos:altLabel "" ;
    skos:definition "A human-labeled sample identifier." .

pmd:Length a owl:Class ;
    rdfs:label "Length" ;
    skos:altLabel "" ;
    skos:definition "Length of the sample." ;
    pmd:unit qudt:MilliM .

pmd:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    skos:altLabel "" ;
    skos:definition "Thickness of the sample." ;
    pmd:unit qudt:MilliM .

pmd:Width a owl:Class ;
    rdfs:label "Width" ;
    skos:altLabel "" ;
    skos:definition "Width of the sample." ;
    pmd:unit qudt:MilliM .

mds-XraySample:XraySample a owl:Class ;
    rdfs:label "XraySample" ;
    rdfs:subClassOf pmd:Sample ;
    skos:altLabel "" .
```

</details>

### json-ld output from XRay Sample in R:

<details>

<summary>[Click to expand XRay Sample json-ld output]{style="background-color: yellow;"}</summary>

```{}
{
  "@context": {
    "brick": "https://brickschema.org/schema/Brick#",
    "csvw": "http://www.w3.org/ns/csvw#",
    "dc": "http://purl.org/dc/elements/1.1/",
    "dcam": "http://purl.org/dc/dcam/",
    "dcat": "http://www.w3.org/ns/dcat#",
    "dcmitype": "http://purl.org/dc/dcmitype/",
    "dcterms": "http://purl.org/dc/terms/",
    "doap": "http://usefulinc.com/ns/doap#",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "geo": "http://www.opengis.net/ont/geosparql#",
    "mds-XraySample": "https://cwrusdle.bitbucket.io/xraySample#",
    "odrl": "http://www.w3.org/ns/odrl/2/",
    "org": "http://www.w3.org/ns/org#",
    "owl": "http://www.w3.org/2002/07/owl#",
    "pmd": "https://w3id.org/pmd/co/",
    "prof": "http://www.w3.org/ns/dx/prof/",
    "prov": "http://www.w3.org/ns/prov#",
    "qb": "http://purl.org/linked-data/cube#",
    "qudt": "http://qudt.org/2.1/vocab/unit#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "schema": "https://schema.org/",
    "sh": "http://www.w3.org/ns/shacl#",
    "skos": "http://www.w3.org/2004/02/skos/core#",
    "sosa": "http://www.w3.org/ns/sosa/",
    "ssn": "http://www.w3.org/ns/ssn/",
    "time": "http://www.w3.org/2006/time#",
    "vann": "http://purl.org/vocab/vann/",
    "void": "http://rdfs.org/ns/void#",
    "wgs": "https://www.w3.org/2003/01/geo/wgs84_pos#",
    "xml": "http://www.w3.org/XML/1998/namespace",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@graph": [
    {
      "@id": "pmd:value",
      "@type": "owl:DatatypeProperty",
      "rdfs:domain": [
        {
          "@id": "mds-XraySample:SampleID"
        },
        {
          "@id": "mds-XraySample:ProcessingMethod"
        },
        {
          "@id": "mds-XraySample:MaterialName"
        },
        {
          "@id": "pmd:Length"
        },
        {
          "@id": "pmd:Width"
        },
        {
          "@id": "pmd:Thickness"
        }
      ],
      "rdfs:range": [
        {
          "@id": "xsd:string"
        },
        {
          "@id": "xsd:float"
        }
      ]
    },
    {
      "@id": "pmd:Sample",
      "@type": "owl:Class",
      "rdfs:label": "Sample",
      "skos:altLabel": ""
    },
    {
      "@id": "mds-XraySample:ProcessingMethod",
      "@type": "owl:Class",
      "rdfs:label": "ProcessingMethod",
      "rdfs:subClassOf": {
        "@id": "pmd:ManufacturingProcess"
      },
      "skos:altLabel": "",
      "skos:definition": "The manufacturing method by ehich the sample was created."
    },
    {
      "@id": "mds-XraySample:Ontology",
      "@type": "owl:Ontology",
      "dcterms:creator": [
        "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Mohommad Redad Mehdi",
        "Weiqi Yue",
        "Finley Holt",
        "Pawan K. Tripathi",
        "Erika I. Barcelos",
        "Matthew Willard",
        "Frank Ernst",
        "Roger H. French"
      ],
      "dcterms:description": "XRD Sample Ontology for the FAST Beamline at CHESS.",
      "dcterms:title": "mds-XraySample",
      "owl:versionInfo": "0.2",
      "rdfs:label": "mds-XraySample"
    },
    {
      "@id": "mds-XraySample:XraySample",
      "@type": "owl:Class",
      "rdfs:label": "XraySample",
      "rdfs:subClassOf": {
        "@id": "pmd:Sample"
      },
      "skos:altLabel": ""
    },
    {
      "@id": "pmd:Length",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:MilliM"
      },
      "rdfs:label": "Length",
      "skos:altLabel": "",
      "skos:definition": "Length of the sample."
    },
    {
      "@id": "pmd:Thickness",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:MilliM"
      },
      "rdfs:label": "Thickness",
      "skos:altLabel": "",
      "skos:definition": "Thickness of the sample."
    },
    {
      "@id": "pmd:inputOf",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-XraySample:XraySample"
      },
      "rdfs:range": {
        "@id": "mds-XraySample:XrayTool"
      }
    },
    {
      "@id": "pmd:SpecimenName",
      "@type": "owl:Class",
      "rdfs:label": "SpecimenName",
      "skos:altLabel": ""
    },
    {
      "@id": "mds-XraySample:XrayTool",
      "@type": "owl:Class",
      "rdfs:label": "XrayTool",
      "skos:altLabel": ""
    },
    {
      "@id": "pmd:ManufacturingProcess",
      "@type": "owl:Class",
      "rdfs:label": "ManufacturingProcess",
      "skos:altLabel": ""
    },
    {
      "@id": "pmd:MaterialDesignation",
      "@type": "owl:Class",
      "rdfs:label": "MaterialDesignation",
      "skos:altLabel": ""
    },
    {
      "@id": "pmd:characteristicOf",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-XraySample:XraySample"
      },
      "rdfs:range": [
        {
          "@id": "mds-XraySample:ProcessingMethod"
        },
        {
          "@id": "mds-XraySample:MaterialName"
        },
        {
          "@id": "pmd:Length"
        },
        {
          "@id": "pmd:Width"
        },
        {
          "@id": "pmd:Thickness"
        }
      ]
    },
    {
      "@id": "mds-XraySample:MaterialName",
      "@type": "owl:Class",
      "rdfs:label": "MaterialName",
      "rdfs:subClassOf": {
        "@id": "pmd:MaterialDesignation"
      },
      "skos:altLabel": "",
      "skos:definition": "Name of the material."
    },
    {
      "@id": "pmd:Width",
      "@type": "owl:Class",
      "pmd:unit": {
        "@id": "qudt:MilliM"
      },
      "rdfs:label": "Width",
      "skos:altLabel": "",
      "skos:definition": "Width of the sample."
    },
    {
      "@id": "mds-XraySample:SampleID",
      "@type": "owl:Class",
      "rdfs:label": "SampleID",
      "rdfs:subClassOf": {
        "@id": "pmd:SpecimenName"
      },
      "skos:altLabel": "",
      "skos:definition": "A human-labeled sample identifier."
    },
    {
      "@id": "pmd:hasIdentifier",
      "@type": "owl:ObjectProperty",
      "rdfs:domain": {
        "@id": "mds-XraySample:XraySample"
      },
      "rdfs:range": {
        "@id": "mds-XraySample:SampleID"
      }
    }
  ]
}

```

</details>  

<br><br><br>

# Removing values from visualization in R

By setting include_graph_valuetype argument to FALSE the valuetypes are excluded from graph. We can see how this graph differs from the PV graph above.

Removing values in R:
```{r, eval=F, message=FALSE}
FAIRmaterials::process_ontology_files(example_folder1, include_graph_valuetype = FALSE, add_external_onto_info = FALSE)
```

This visualization from the Python package will be saved in the output folder as a SVG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="PV Visualization without Value Types"}
knitr::include_graphics("PV_svg_wo_valuetype2.png")
```

<br>

# Removing values from visualization in Python

By removing the --include_graph_valuetype flag, the valuetypes are excluded from graph. We can see how this graph differs from the PV graph above.

Removing values in Python:
```{python, eval = FALSE, python.reticulate = FALSE}
python -m FAIRmaterials --folder_path /path/to/csv/files
```

This visualization from the Python package will be saved in the output folder as a PNG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="PV Visualization without Value Types"}
knitr::include_graphics("mds-XraySampleGraph-novaluetype.png")
```
  
<br><br><br>
  
# Attempting to add external ontology information in R:

Now we set the add_external_onto_info argument to TRUE. The package attempts to find additional information for every term in the XRay Sample and PV Module data and update the output.

## For PV Module:
Adding external ontology information in R:
```{r, eval=F, message=FALSE}
FAIRmaterials::process_ontology_files(example_folder1, include_graph_valuetype = TRUE, add_external_onto_info = TRUE)
```

### turtle/owl output from PV Module:

<details>

<summary>[Click to expand updated PV Module owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix PMDCo: <https://w3id.org/pmd/co#> .
@prefix QUDT: <https://qudt.org/vocab/unit/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix PVModuleOntology: <https://cwrusdle.bitbucket.io/PVModuleOntology/> .

PVModuleOntology:BacksheetColor
    rdf:label "BacksheetColor" ;
    a rdfs:Class ;
    rdfs:comment "Color of the backsheet" ;
    rdfs:subClassOf PVModuleOntology:Color .

PVModuleOntology:BacksheetMaterial
    rdf:label "BacksheetMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the backsheet is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation .

PVModuleOntology:CellCount
    rdf:label "CellCount" ;
    a rdfs:Class ;
    rdfs:comment "The number of cells in a module" ;
    rdfs:subClassOf PMDCo:ValueObject .

PVModuleOntology:Color
    rdf:label "Color" ;
    a rdfs:Class ;
    rdfs:comment "the visual perception based on the electromagnetic spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject .

PVModuleOntology:EncapsulantMaterial
    rdf:label "EncapsulantMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the encapsulant is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation .

PVModuleOntology:FluorescencePattern
    rdf:label "FluorescencePattern" ;
    a rdfs:Class ;
    rdfs:comment "Pattern of modules under UV Fluorescence (square or ring)" ;
    rdfs:subClassOf PMDCo:ValueObject .

PVModuleOntology:FrameColor
    rdf:label "FrameColor" ;
    a rdfs:Class ;
    rdfs:comment "The color of the module frame" ;
    rdfs:subClassOf PVModuleOntology:Color .

PVModuleOntology:ModuleEfficiency
    rdf:label "ModuleEfficiency" ;
    a rdfs:Class ;
    rdfs:comment "The efficiency of the solar module at standard test condition (STC)" ;
    rdfs:subClassOf PMDCo:ValueObject .

PVModuleOntology:Ontology
    dcterms:creator """Alexander C. Harding Bradley,Balashanmuga Priyan Rajamohan,Raymond Wieser,Benjamin
Pierce,Jarod Kaltenbaugh,Hayden Caldwell,Arafath Nihar,Kiefer Lin,Jiana Kanbo,Mengjie Li,Kris Davis,Yinghui Wu,Laura S. Bruckman,Erika
I. Barcelos,Roger H. French""" ;
    dcterms:description "An ontology describing the characteristics of a PV Module." ;
    dcterms:title "PVModuleOntology" ;
    rdf:label <https://cwrusdle.bitbucket.io/PVModuleOntology/> ;
    a owl:Ontology ;
    owl:versionInfo "0.2" .

PVModuleOntology:PowerSTC
    rdf:label "PowerSTC" ;
    a rdfs:Class ;
    rdfs:comment "DC power at Standard Test Condition (STC). STC is defined as 1000 W/m2 irradiance, 25C and ASTM G173-03 standard solar spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    PMDCo:unit QUDT:KiloW .

PVModuleOntology:ProdBacksheet
    rdf:label "ProdBacksheet" ;
    a rdfs:Class ;
    rdfs:comment "A backsheet of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component .

PVModuleOntology:ProdEncapsulant
    rdf:label "ProdEncapsulant" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component .

PVModuleOntology:ProdJunctionBox
    rdf:label "ProdJunctionBox" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component .

PVModuleOntology:ProdModule
    rdf:label "ProdModule" ;
    a rdfs:Class ;
    rdfs:comment "A solar module product" ;
    rdfs:subClassOf PMDCo:ProcessingNode .

PVModuleOntology:ProdModuleID
    rdf:label "ProdModuleID" ;
    a rdfs:Class ;
    rdfs:comment "Alphanumeric identifier for the metadata document" ;
    rdfs:subClassOf PMDCo:NodeSerialNumber .

PVModuleOntology:TemperatureNOCT
    rdf:label "TemperatureNOCT" ;
    a rdfs:Class ;
    rdfs:comment "The nominal operating cell temperature (NOCT) of a solar module" ;
    rdfs:subClassOf PMDCo:Temperature ;
    PMDCo:unit QUDT:DEG_C .

PMDCo:Component
    rdf:label "Component" ;
    a rdfs:Class .

PMDCo:Length
    rdf:label "Length" ;
    a rdfs:Class ;
    PMDCo:unit QUDT:CentiM .

PMDCo:Manufacturer
    rdf:label "Manufacturer" ;
    a rdfs:Class .

PMDCo:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class ;
    rdfs:subClassOf PMDCo:ProcessingNode .

PMDCo:NodeSerialNumber
    rdf:label "NodeSerialNumber" ;
    a rdfs:Class .

PMDCo:ProcessingNode
    rdf:label "ProcessingNode" ;
    a rdfs:Class .

PMDCo:Temperature
    rdf:label "Temperature" ;
    a rdfs:Class .

PMDCo:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class ;
    PMDCo:unit QUDT:CentiM .

PMDCo:ValueObject
    rdf:label "ValueObject" ;
    a rdfs:Class .

PMDCo:Weight
    rdf:label "Weight" ;
    a rdfs:Class ;
    PMDCo:unit QUDT:KiloGM .

PMDCo:Width
    rdf:label "Width" ;
    a rdfs:Class ;
    PMDCo:unit QUDT:CentiM .

PMDCo:characteristic
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:NodeSerialNumber, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width .

PMDCo:component
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdJunctionBox .

PMDCo:value
    a owl:DatatypeProperty ;
    rdfs:domain PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:ProdModuleID, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width ;
    rdfs:range sd:float, sd:integer, sd:string .

pmd:AgingTemperature
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Aging Temperature", "Alterungstemperatur" ;
    rdfs:subClassOf pmd:Temperature ;
    skos:definition "Variable Temperature during an Aging Process depending on the desired deposition formations." .

pmd:Component
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Component", "Komponente" ;
    rdfs:subClassOf pmd:Object ;
    skos:definition "An object that serves a specific technical application. Constituent part of a compound of parts that builds a technical application.", "Ein Objekt, das einer bestimmten technischen Anwendung dient. Bestandteil einer Zusammensetzung von Teilen, die eine technische Anwendung bilden." .

pmd:EnvironmentalTemperature
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Environmental Temperature", "Umgebungstemperatur" ;
    rdfs:subClassOf pmd:Temperature ;
    skos:definition "Diese Eigenschaft beschreibt die beobachtete Temperatur in der Umgebung eines betrachteten materiellen Objekts. Dazu können die Raumtemperatur und die in Prüfkammern gemessenen Temperaturen gehören.", "This property describes the observed temperature surrounding a tangible object considered. This may include room temperature and temperatures measured in test chambers." .

pmd:Length
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Length", "Länge" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "A measured distance or dimension of an object, usually the longer or longest dimension of the object.", "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts." ;
    pmd:definitionSource <https://www.merriam-webster.com/dictionary/length> .

pmd:Manufacturer
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Hersteller", "Manufacturer" ;
    skos:definition "Processing Node's manufacturer name, e.g.: \"Ipsen\", \"UPC\" or \"Bosch\"" .

pmd:MaterialDesignation
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Material Designation", "Materialbezeichnung" ;
    rdfs:subClassOf pmd:MaterialRelated ;
    skos:definition """It is a name or identifier of a material type. It designates a material. 
E.g. \"steel\", \"aluminium\", \"wood\", \"plastic\", \"rubber\".""" ;
    <http://www.w3.org/ns/prov#editorialNote> "former \"Material\" : \"It is a substance or mixture of substances that constitutes an object. represented by the sum of material properties and material structure\"" .

pmd:NodeSerialNumber
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Knoten-Seriennummer", "Node Serial Number" ;
    rdfs:subClassOf pmd:NodeInfo, pmd:ProvidedIdentifier ;
    skos:definition "A unique identifier of a processing node, typically provided by the manufacturer (manufacturer serial number,  s/n)." .

pmd:ProcessingNode
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Processing Node", "Prozessknoten" ;
    rdfs:subClassOf <http://www.w3.org/ns/prov#Agent> ;
    skos:definition "Processing nodes are tools, equipment and accessories as well as software that are relevant for the performance of processes, such as e.g. mechanical and chemical test as well as simulation, prediction, and machine learning. Accordingly, processing nodes may be machines, parts of machines, and software applications.", "Prozessknoten sind Werkzeuge, Geräte und Zubehör sowie Software, die für die Durchführung von Prozessen relevant sind, wie z. B. mechanische und chemische Tests sowie Simulationen, Vorhersagen und maschinelles Lernen. Dementsprechend können Prozessknoten Maschinen, Teile von Maschinen und Softwareanwendungen sein." .

pmd:Temperature
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Temperatur", "Temperature" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "The degree of hotness or coldness measured on a definite scale." ;
    pmd:definitionSource "“Temperature.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/temperature. Accessed 25 Nov. 2022." .

pmd:Thickness
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Dicke", "Thickness" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks.", "This entity describes the measured dimension in one direction of a test piece." .

pmd:ValueObject
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Value Object", "Wertobjekt" ;
    rdfs:subClassOf <http://www.w3.org/ns/prov#Entity> ;
    skos:definition """A :ValueObject is an entity which represents a specific value. This value can be a numerical, textual, or a more complex data structure. If a literal value is to be specified, the :value datatype property has to be used. In cases where the value is represented by a resource (e.g. URI), the :resource object property has to be used.

A value object, respectively its value, is always associated with an entity of type :Process, :ProcessingNode, :Object (e.g. :Specimen), :DigitalEntity, :Project, or other :ValueObject. The value is meant to be a charactaristic of the associated entity. To express this association it is indended to use the :characteristic object property if the value decribes some \\\"quality\\\", or the :participant (:input,:output) if it is participating a process.

A value object might also refer to a unit. The :unit property might be used (e.g. with QUDT ontology).

Instances of a value object might also be a type of :ValueScope, namely a :SetPoint (nominal value), or :Measurement (measured value). With :Setpoint the intend is to express, that the value is meant to be some preset, setting or nominal value. :Measurement expresses, that the value has been measured or determined somehow (see example).

Instances of a value object might also be specified in a specific :DataScope (:Metadata, :PrimaryData, :SecondaryData).""" ;
    skos:example """- the length of a specimen
- the model number of a machine
- a person involved in a process
- a force on an object""", """:Length rdfs:subClass :ValueObject .
ex:vo1 a :Length .
ex:vo1 a :Measurement .
ex:vo1 a :PrimaryData .
ex:vo1 :unit qudt:MilliM . 
ex:vo1 :value \"123.45\"
ex:p1 a :LengthMeasuringProcess .
ex:p1 :characteristic ex:vo1 .""", "The length of a specimen, which has been measured as primary data. Its actual value is 123.45 millimeters." .

pmd:Weight
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Gewicht", "Weight" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "The force with which a body is attracted toward the earth or a celestial body by gravitation and which is equal to the product of the mass and the local gravitational acceleration." ;
    pmd:definitionSource "“Weight.” Merriam-Webster.com Dictionary, Merriam-Webster, https://www.merriam-webster.com/dictionary/weight. Accessed 5 Dec. 2022." .

pmd:Width
    a owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Breite", "Width" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird.", "This entity describes a horizontal measurement of an object taken at right angles to the length of the object." ;
    pmd:definitionSource <https://www.merriam-webster.com/dictionary/width> .


```

</details>

We can see pmd:AgingTemperature and many of the of other pmd terms got more arguments pulled from <https://w3id.org/pmd/co/>.

## For XRay Sample:

Adding external ontology information in R:
```{r, eval=F, message=FALSE}
FAIRmaterials::process_ontology_files(example_folder2, include_graph_valuetype = TRUE, add_external_onto_info = TRUE)
```

### turtle/owl output from XRay Sample:

<details>

<summary>[Click to expand updated XRay Sample owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix sd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix PMDCo: <https://w3id.org/pmd/co#> .
@prefix QUDT: <https://qudt.org/vocab/unit/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .

mds-XraySample:MaterialName
    rdf:label "MaterialName" ;
    a rdfs:Class ;
    rdfs:comment "Name of the material." ;
    rdfs:subClassOf pmd:MaterialDesignation .

mds-XraySample:Ontology
    dcterms:creator """Alexander C. Harding Bradley, Balashanmuga Priyan Rajamohan, 
Mohommad Redad Mehdi, Weiqi Yue, Finley Holt, Pawan K. Tripathi, 
 Erika I. Barcelos, Matthew Willard, Frank Ernst, Roger H. French""" ;
    dcterms:description "XRD Sample Ontology for the FAST Beamline at CHESS." ;
    dcterms:title "mds-XraySample" ;
    rdf:label <https://cwrusdle.bitbucket.io/xraySample#> ;
    a owl:Ontology ;
    owl:versionInfo "0.2" .

mds-XraySample:ProcessingMethod
    rdf:label "ProcessingMethod" ;
    a rdfs:Class ;
    rdfs:comment "The manufacturing method by ehich the sample was created." ;
    rdfs:subClassOf pmd:ManufacturingProcess .

mds-XraySample:SampleID
    rdf:label "SampleID" ;
    a rdfs:Class ;
    rdfs:comment "A human-labeled sample identifier." ;
    rdfs:subClassOf pmd:SpecimenName .

mds-XraySample:XraySample
    rdf:label "XraySample" ;
    a rdfs:Class ;
    rdfs:subClassOf pmd:Sample .

mds-XraySample:XrayTool
    rdf:label "XrayTool" ;
    a rdfs:Class .

mds-XraySample:inputOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool .

pmd:Length
    rdf:label "Length" ;
    a rdfs:Class, owl:Class ;
    rdfs:comment "Length of the sample." ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Length", "Länge" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "A measured distance or dimension of an object, usually the longer or longest dimension of the object.", "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts." ;
    PMDCo:unit qudt:MilliM ;
    pmd:definitionSource <https://www.merriam-webster.com/dictionary/length> .

pmd:ManufacturingProcess
    rdf:label "ManufacturingProcess" ;
    a rdfs:Class, owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Herstellungsprozess", "Manufacture Process" ;
    rdfs:subClassOf pmd:Process ;
    skos:definition "A process that is driven by the primary intent to transform objects." .

pmd:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class, owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Material Designation", "Materialbezeichnung" ;
    rdfs:subClassOf pmd:MaterialRelated ;
    skos:definition """It is a name or identifier of a material type. It designates a material. 
E.g. \"steel\", \"aluminium\", \"wood\", \"plastic\", \"rubber\".""" ;
    <http://www.w3.org/ns/prov#editorialNote> "former \"Material\" : \"It is a substance or mixture of substances that constitutes an object. represented by the sum of material properties and material structure\"" .

pmd:Sample
    rdf:label "Sample" ;
    a rdfs:Class, owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Probe", "Sample" ;
    rdfs:subClassOf pmd:EngineeredMaterial ;
    skos:definition "Portion of material, usually selected from a larger quantity of material, collected and taken away for testing" ;
    pmd:definitionSource "ISO 18589-1:2019-11 (international standardization committee: ISO/TC 85/SC 2/WG 17)" .

pmd:SpecimenName
    rdf:label "SpecimenName" ;
    a rdfs:Class, owl:Class ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Prüfstück Name", "Specimen Name" ;
    rdfs:subClassOf pmd:Identifier ;
    skos:definition "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfstücks, die in der Regel von Menschen als von Menschen lesbarer Identifikator vergeben wird.", "This property describes the designation of a specimen, usually given as human-readable identifier by humans." .

pmd:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class, owl:Class ;
    rdfs:comment "Thickness of the sample." ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Dicke", "Thickness" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks.", "This entity describes the measured dimension in one direction of a test piece." ;
    PMDCo:unit qudt:MilliM .

pmd:Width
    rdf:label "Width" ;
    a rdfs:Class, owl:Class ;
    rdfs:comment "Width of the sample." ;
    rdfs:isDefinedBy <https://w3id.org/pmd/co> ;
    rdfs:label "Breite", "Width" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:definition "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird.", "This entity describes a horizontal measurement of an object taken at right angles to the length of the object." ;
    PMDCo:unit qudt:MilliM ;
    pmd:definitionSource <https://www.merriam-webster.com/dictionary/width> .

pmd:characteristicOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, pmd:Length, pmd:Thickness, pmd:Width .

pmd:hasIdentifier
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:SampleID .

pmd:value
    a owl:DatatypeProperty ;
    rdfs:domain mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, mds-XraySample:SampleID, pmd:Length, pmd:Thickness, pmd:Width ;
    rdfs:range sd:float, sd:string .


```

</details>

We can see pmd:Length and many of the of other pmd terms more arguments pulled from <https://w3id.org/pmd/co/>.

# Attempting to add external ontology information in Python:

Now we include the --add_external_onto_info flag when using the package. The package attempts to find additional information for every term in the XRay Sample and PV Module data and update the output.

## For PV Module:
Adding external ontology information in Python:
```{python, eval=F, python.reticulate = FALSE}
python -m FAIRmaterials --folder_path /path/to/csv/files --include_graph_valuetype --add_external_onto_info
```

### turtle/owl output from PV Module:

<details>

<summary>[Click to expand updated PV Module owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-pvModule: <https://cwrusdle.bitbucket.io/pvModule#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

mds-pvModule:EncapsulantMaterial a owl:Class ;
    rdfs:label "EncapsulantMaterial" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Material of the polymer encapsulant" .

mds-pvModule:ModuleEncapsulant a owl:Class ;
    rdfs:label "ModuleEncapsulant" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Polymer encapsulant of a module" .

mds-pvModule:ModuleJunctionBox a owl:Class ;
    rdfs:label "ModuleJunctionBox" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Electrical junction box for connection to the module" .

mds-pvModule:Ontology a owl:Ontology ;
    rdfs:label "mds-pvModule" ;
    dcterms:creator "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Erika I. Barcelos",
        "Finley Holt",
        "Frank Ernst",
        "Matthew Willard",
        "Mohommad Redad Mehdi",
        "Pawan K. Tripathi",
        "Roger H. French",
        "Weiqi Yue" ;
    dcterms:description "An ontology describing a PV Module" ;
    dcterms:title "mds-pvModule" ;
    owl:versionInfo "0.2.0.5" .

pmd:characteristicOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicModuleProperty,
        mds-pvModule:PhotovoltaicSite ;
    skos:altLabel "is characteristic of" .

pmd:composedOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicBacksheet,
        mds-pvModule:PhotovoltaicCell,
        mds-pvModule:PhotovoltaicInverter ;
    skos:definition """This property is used to describe the fact that and which objects are composed of other objects, i.e. it is used to describe the specific constituents or ingredients that form a particular entity or object. 
As a prepositional phrase, it indicates the elements, parts, or components that make up a whole."""@en,
        "This property is used to describe which voxels and materials an object is composed of."@en .

pmd:hasIdentifier a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicModuleID .

pmd:hasSource a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:ModuleRatingAtReference ;
    rdfs:range mds-pvModule:OrangeButtonTerm .

pmd:value a owl:DatatypeProperty ;
    rdfs:domain mds-pvModule:CellCount,
        mds-pvModule:CurrentAtMaximumPower,
        mds-pvModule:CurrentShortCircuit,
        mds-pvModule:FluorescencePattern,
        mds-pvModule:Length,
        mds-pvModule:ModuleEfficiency,
        mds-pvModule:ModuleRatingAtReference,
        mds-pvModule:ModuleRatingCondition,
        mds-pvModule:PhotovoltaicModuleID,
        mds-pvModule:PowerDC,
        mds-pvModule:PowerSTC,
        mds-pvModule:Thickness,
        mds-pvModule:VoltageAtMaximumPower,
        mds-pvModule:VoltageOpenCircuit,
        mds-pvModule:Weight,
        mds-pvModule:Width ;
    rdfs:range xsd:float,
        xsd:integer,
        xsd:string ;
    skos:definition "Provides the actual value a value object is referring to."@en .

mds-pvModule:CellCount a owl:Class ;
    rdfs:label "CellCount" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Number of cells in a module" .

mds-pvModule:CurrentAtMaximumPower a owl:Class ;
    rdfs:label "CurrentAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC current at the maximum power point under STC" ;
    pmd:unit qudt:A .

mds-pvModule:CurrentShortCircuit a owl:Class ;
    rdfs:label "CurrentShortCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module short circuit current" ;
    pmd:unit qudt:A .

mds-pvModule:FluorescencePattern a owl:Class ;
    rdfs:label "FluorescencePattern" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "A UVF fluorescence pattern of a module" .

mds-pvModule:Length a owl:Class ;
    rdfs:label "Length" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Length of the module along longest side" ;
    pmd:unit qudt:CentiM .

mds-pvModule:ModuleEfficiency a owl:Class ;
    rdfs:label "ModuleEfficiency" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Theoretical efficency of a module" .

mds-pvModule:ModuleRatingCondition a owl:Class ;
    rdfs:label "ModuleRatingCondition" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Condition of the module" .

mds-pvModule:OrangeButtonTerm a owl:Class ;
    rdfs:label "OrangeButtonTerm" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "Term from the OrangeButton Taxonomy" .

mds-pvModule:PhotovoltaicBacksheet a owl:Class ;
    rdfs:label "PhotovoltaicBacksheet" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "Polymer backsheet of a PV cell or module" .

mds-pvModule:PhotovoltaicCell a owl:Class ;
    rdfs:label "PhotovoltaicCell" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "PV cell that composes a module" .

mds-pvModule:PhotovoltaicInverter a owl:Class ;
    rdfs:label "PhotovoltaicInverter" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "An inverter for a PV system" .

mds-pvModule:PhotovoltaicSite a owl:Class ;
    rdfs:label "PhotovoltaicSite" ;
    rdfs:subClassOf pmd:Location ;
    skos:altLabel "" ;
    skos:definition "Physical location of a PV site" .

mds-pvModule:PowerDC a owl:Class ;
    rdfs:label "PowerDC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC power at STC, 1 sun of irradiance" ;
    pmd:unit qudt:KiloW .

mds-pvModule:PowerSTC a owl:Class ;
    rdfs:label "PowerSTC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Power at refrence conditions" ;
    pmd:unit qudt:KiloW .

mds-pvModule:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Thickness of the module, not counting the framing" ;
    pmd:unit qudt:CentiM .

mds-pvModule:VoltageAtMaximumPower a owl:Class ;
    rdfs:label "VoltageAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC voltage at the maximum power point under STC" ;
    pmd:unit qudt:V .

mds-pvModule:VoltageOpenCircuit a owl:Class ;
    rdfs:label "VoltageOpenCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module open circuit voltage, maximum voltage the module can provide" ;
    pmd:unit qudt:V .

mds-pvModule:Weight a owl:Class ;
    rdfs:label "Weight" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Module weight" ;
    pmd:unit qudt:LB .

mds-pvModule:Width a owl:Class ;
    rdfs:label "Width" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Width of module along shortest side" ;
    pmd:unit qudt:CentiM .

pmd:Location a owl:Class ;
    rdfs:label "Location" ;
    skos:altLabel "" ;
    skos:definition "Eine Position oder ein Ort, der besetzt ist oder besetzt werden kann oder durch ein bestimmtes Merkmal gekennzeichnet ist."@de,
        "A position or site occupied or available for occupancy or marked by some distinguishing feature."@en .

pmd:ProvidedIdentifier a owl:Class ;
    rdfs:label "ProvidedIdentifier" ;
    skos:altLabel "" ;
    skos:definition "A colloquial, human-generated descriptor."@en .

mds-pvModule:PhotovoltaicModuleID a owl:Class ;
    rdfs:label "PhotovoltaicModuleID" ;
    rdfs:subClassOf pmd:ProvidedIdentifier ;
    skos:altLabel "" ;
    skos:definition "Module identifier" .

pmd:ValueObject a owl:Class ;
    rdfs:label "ValueObject" ;
    skos:altLabel "" ;
    skos:definition """A :ValueObject is an entity which represents a specific value. This value can be a numerical, textual, or a more complex data structure. If a literal value is to be specified, the :value datatype property has to be used. In cases where the value is represented by a resource (e.g. URI), the :resource object property has to be used.

A value object, respectively its value, is always associated with an entity of type :Process, :ProcessingNode, :Object (e.g. :Specimen), :DigitalEntity, :Project, or other :ValueObject. The value is meant to be a charactaristic of the associated entity. To express this association it is indended to use the :characteristic object property if the value decribes some \\"quality\\", or the :participant (:input,:output) if it is participating a process.

A value object might also refer to a unit. The :unit property might be used (e.g. with QUDT ontology).

Instances of a value object might also be a type of :ValueScope, namely a :SetPoint (nominal value), or :Measurement (measured value). With :Setpoint the intend is to express, that the value is meant to be some preset, setting or nominal value. :Measurement expresses, that the value has been measured or determined somehow (see example).

Instances of a value object might also be specified in a specific :DataScope (:Metadata, :PrimaryData, :SecondaryData)."""@en .

mds-pvModule:PhotovoltaicModule a owl:Class ;
    rdfs:label "PhotovoltaicModule" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "A PV module, comprised of cells, for field deployment" .

pmd:ProcessingNode a owl:Class ;
    rdfs:label "ProcessingNode" ;
    skos:altLabel "" ;
    skos:definition "Prozessknoten sind Werkzeuge, Geräte und Zubehör sowie Software, die für die Durchführung von Prozessen relevant sind, wie z. B. mechanische und chemische Tests sowie Simulationen, Vorhersagen und maschinelles Lernen. Dementsprechend können Prozessknoten Maschinen, Teile von Maschinen und Softwareanwendungen sein."@de,
        "Processing nodes are tools, equipment and accessories as well as software that are relevant for the performance of processes, such as e.g. mechanical and chemical test as well as simulation, prediction, and machine learning. Accordingly, processing nodes may be machines, parts of machines, and software applications."@en .

mds-pvModule:ModuleRatingAtReference a owl:Class ;
    rdfs:label "ModuleRatingAtReference" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Measurements of a module taken at STC and 1000 W/m^2 irradiance" .

mds-pvModule:PhotovoltaicModuleProperty a owl:Class ;
    rdfs:label "PhotovoltaicModuleProperty" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "A property of a PV module" .

```

</details>

We can see pmd:AgingTemperature and many of the of other pmd terms got more arguments pulled from <https://w3id.org/pmd/co/>.

## For XRay Sample:

Adding external ontology information in R:
```{r, eval=F, message=FALSE}
FAIRmaterials::process_ontology_files(example_folder2, include_graph_valuetype = TRUE, add_external_onto_info = TRUE)
```

### turtle/owl output from XRay Sample:

<details>

<summary>[Click to expand updated XRay Sample owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

mds-XraySample:Ontology a owl:Ontology ;
    rdfs:label "mds-XraySample" ;
    dcterms:creator "Alexander C. Harding Bradley",
        "Balashanmuga Priyan Rajamohan",
        "Erika I. Barcelos",
        "Finley Holt",
        "Frank Ernst",
        "Matthew Willard",
        "Mohommad Redad Mehdi",
        "Pawan K. Tripathi",
        "Roger H. French",
        "Weiqi Yue" ;
    dcterms:description "XRD Sample Ontology for the FAST Beamline at CHESS." ;
    dcterms:title "mds-XraySample" ;
    owl:versionInfo "0.2" .

pmd:characteristicOf a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        pmd:Length,
        pmd:Thickness,
        pmd:Width ;
    skos:altLabel "is characteristic of" .

pmd:hasIdentifier a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:SampleID .

pmd:inputOf a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool ;
    skos:altLabel "is input of" .

pmd:value a owl:DatatypeProperty ;
    rdfs:domain mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        mds-XraySample:SampleID,
        pmd:Length,
        pmd:Thickness,
        pmd:Width ;
    rdfs:range xsd:float,
        xsd:string ;
    skos:definition "Provides the actual value a value object is referring to."@en .

mds-XraySample:XrayTool a owl:Class ;
    rdfs:label "XrayTool" ;
    skos:altLabel "" .

pmd:ManufacturingProcess a owl:Class ;
    rdfs:label "ManufacturingProcess" ;
    skos:altLabel "" ;
    skos:definition "A process that is driven by the primary intent to transform objects."@en .

pmd:MaterialDesignation a owl:Class ;
    rdfs:label "MaterialDesignation" ;
    skos:altLabel "" ;
    skos:definition """It is a name or identifier of a material type. It designates a material. 
E.g. "steel", "aluminium", "wood", "plastic", "rubber".""" .

pmd:Sample a owl:Class ;
    rdfs:label "Sample" ;
    skos:altLabel "" ;
    skos:definition "Portion of material, usually selected from a larger quantity of material, collected and taken away for testing"@en .

pmd:SpecimenName a owl:Class ;
    rdfs:label "SpecimenName" ;
    skos:altLabel "" ;
    skos:definition "Diese Eigenschaft beschreibt die Bezeichnung eines Prüfstücks, die in der Regel von Menschen als von Menschen lesbarer Identifikator vergeben wird."@de,
        "This property describes the designation of a specimen, usually given as human-readable identifier by humans."@de .

mds-XraySample:MaterialName a owl:Class ;
    rdfs:label "MaterialName" ;
    rdfs:subClassOf pmd:MaterialDesignation ;
    skos:altLabel "" ;
    skos:definition "Name of the material." .

mds-XraySample:ProcessingMethod a owl:Class ;
    rdfs:label "ProcessingMethod" ;
    rdfs:subClassOf pmd:ManufacturingProcess ;
    skos:altLabel "" ;
    skos:definition "The manufacturing method by ehich the sample was created." .

mds-XraySample:SampleID a owl:Class ;
    rdfs:label "SampleID" ;
    rdfs:subClassOf pmd:SpecimenName ;
    skos:altLabel "" ;
    skos:definition "A human-labeled sample identifier." .

pmd:Length a owl:Class ;
    rdfs:label "Length" ;
    skos:altLabel "" ;
    skos:definition "Length of the sample.",
        "Eine gemessene Entfernung oder Abmessung eines Objekts, normalerweise die längere oder längste Abmessung des Objekts."@de,
        "A measured distance or dimension of an object, usually the longer or longest dimension of the object."@en ;
    pmd:unit qudt:MilliM .

pmd:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    skos:altLabel "" ;
    skos:definition "Thickness of the sample.",
        "Diese Entität beschreibt die gemessene Dimension in einer Richtung eines Prüfstücks."@de,
        "This entity describes the measured dimension in one direction of a test piece."@en ;
    pmd:unit qudt:MilliM .

pmd:Width a owl:Class ;
    rdfs:label "Width" ;
    skos:altLabel "" ;
    skos:definition "Width of the sample.",
        "Diese Entität bezeichnet eine horizontale Messung, die im rechten Winkel zur Länge eines Objekts vorgenommen wird."@de,
        "This entity describes a horizontal measurement of an object taken at right angles to the length of the object."@en ;
    pmd:unit qudt:MilliM .

mds-XraySample:XraySample a owl:Class ;
    rdfs:label "XraySample" ;
    rdfs:subClassOf pmd:Sample ;
    skos:altLabel "" .


```

</details>

We can see pmd:Length and many of the of other pmd terms more arguments pulled from <https://w3id.org/pmd/co/>.


<br><br><br>

# Merging two ontologies and specifying some of the metadata:

Lastly we will merge the PV and XRay ontologies. This is accomplished by providing the function a folder path that contains both the PV and XRay ontology sheets. We can also specify some of the metadata included in the outputs.

Merging ontologies in R:
```{r, eval=F}
example_folder3 <- system.file("extdata", package = "FAIRmaterials")
FAIRmaterials::process_ontology_files(example_folder3, add_external_onto_info = FALSE, merge_title = "MergedPVandXRay", merge_base_uri = "https://cwrusdle.bitbucket.io/OntologyFilesOwl/Ontology/", merge_version = "1.0")
```

This is the visualization for the two ontologies merged.
This visualization from the R package will be saved in the output folder as an SVG:
```{r, out.width="675px", dpi=1000, echo=FALSE, fig.cap="Merged Visualization with Value Types"}
knitr::include_graphics("merged.png")
```

### Example turtle/owl output from merged ontology:

<details>

<summary>[Click to expand merged owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix MergedPVandXRay: <https://cwrusdle.bitbucket.io/OntologyFilesOwl/Ontology/> .
@prefix sd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix PMDCo: <https://w3id.org/pmd/co#> .
@prefix QUDT: <https://qudt.org/vocab/unit/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix PVModuleOntology: <https://cwrusdle.bitbucket.io/PVModuleOntology/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .

MergedPVandXRay:Ontology
    dcterms:creator "Alexander C. Harding Bradley, Balashanmuga Priyan Rajamohan, Raymond Wieser, BenjaminPierce, Jarod Kaltenbaugh, Hayden Caldwell, Arafath Nihar, Kiefer Lin, Jiana Kanbo, Mengjie Li, Kris Davis, Yinghui Wu, Laura S. Bruckman, ErikaI. Barcelos, Roger H. French, Mohommad Redad Mehdi, Weiqi Yue, Finley Holt, Pawan K. Tripathi, Erika I. Barcelos, Matthew Willard, Frank Ernst" ;
    dcterms:description "mds-XraySample: XRD Sample Ontology for the FAST Beamline at CHESS.   PVModuleOntology: An ontology describing the characteristics of a PV Module." ;
    dcterms:title "MergedPVandXRay" ;
    rdf:label <https://cwrusdle.bitbucket.io/OntologyFilesOwl/Ontology/> ;
    a owl:Ontology ;
    owl:versionInfo "1.0" .

PVModuleOntology:BacksheetColor
    rdf:label "BacksheetColor" ;
    a rdfs:Class ;
    rdfs:comment "Color of the backsheet" ;
    rdfs:subClassOf PVModuleOntology:Color ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:BacksheetMaterial
    rdf:label "BacksheetMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the backsheet is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:CellCount
    rdf:label "CellCount" ;
    a rdfs:Class ;
    rdfs:comment "The number of cells in a module" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:Color
    rdf:label "Color" ;
    a rdfs:Class ;
    rdfs:comment "the visual perception based on the electromagnetic spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:EncapsulantMaterial
    rdf:label "EncapsulantMaterial" ;
    a rdfs:Class ;
    rdfs:comment "Material the encapsulant is made out of" ;
    rdfs:subClassOf PMDCo:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:FluorescencePattern
    rdf:label "FluorescencePattern" ;
    a rdfs:Class ;
    rdfs:comment "Pattern of modules under UV Fluorescence (square or ring)" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:FrameColor
    rdf:label "FrameColor" ;
    a rdfs:Class ;
    rdfs:comment "The color of the module frame" ;
    rdfs:subClassOf PVModuleOntology:Color ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ModuleEfficiency
    rdf:label "ModuleEfficiency" ;
    a rdfs:Class ;
    rdfs:comment "The efficiency of the solar module at standard test condition (STC)" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:PowerSTC
    rdf:label "PowerSTC" ;
    a rdfs:Class ;
    rdfs:comment "DC power at Standard Test Condition (STC). STC is defined as 1000 W/m2 irradiance, 25C and ASTM G173-03 standard solar spectrum" ;
    rdfs:subClassOf PMDCo:ValueObject ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:KiloW .

PVModuleOntology:ProdBacksheet
    rdf:label "ProdBacksheet" ;
    a rdfs:Class ;
    rdfs:comment "A backsheet of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdEncapsulant
    rdf:label "ProdEncapsulant" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdJunctionBox
    rdf:label "ProdJunctionBox" ;
    a rdfs:Class ;
    rdfs:comment "An encapsulant of a photovoltaic module" ;
    rdfs:subClassOf PMDCo:Component ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdModule
    rdf:label "ProdModule" ;
    a rdfs:Class ;
    rdfs:comment "A solar module product" ;
    rdfs:subClassOf PMDCo:ProcessingNode ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:ProdModuleID
    rdf:label "ProdModuleID" ;
    a rdfs:Class ;
    rdfs:comment "Alphanumeric identifier for the metadata document" ;
    rdfs:subClassOf PMDCo:NodeSerialNumber ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PVModuleOntology:TemperatureNOCT
    rdf:label "TemperatureNOCT" ;
    a rdfs:Class ;
    rdfs:comment "The nominal operating cell temperature (NOCT) of a solar module" ;
    rdfs:subClassOf PMDCo:Temperature ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:DEG_C .

mds-XraySample:MaterialName
    rdf:label "MaterialName" ;
    a rdfs:Class ;
    rdfs:comment "Name of the material." ;
    rdfs:subClassOf pmd:MaterialDesignation ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:ProcessingMethod
    rdf:label "ProcessingMethod" ;
    a rdfs:Class ;
    rdfs:comment "The manufacturing method by ehich the sample was created." ;
    rdfs:subClassOf pmd:ManufacturingProcess ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:SampleID
    rdf:label "SampleID" ;
    a rdfs:Class ;
    rdfs:comment "A human-labeled sample identifier." ;
    rdfs:subClassOf pmd:SpecimenName ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:XraySample
    rdf:label "XraySample" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    rdfs:subClassOf pmd:Sample ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:XrayTool
    rdf:label "XrayTool" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

mds-XraySample:inputOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool .

PMDCo:Component
    rdf:label "Component" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Length
    rdf:label "Length" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:Manufacturer
    rdf:label "Manufacturer" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    rdfs:subClassOf PMDCo:ProcessingNode ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:NodeSerialNumber
    rdf:label "NodeSerialNumber" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:ProcessingNode
    rdf:label "ProcessingNode" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Temperature
    rdf:label "Temperature" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:ValueObject
    rdf:label "ValueObject" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

PMDCo:Weight
    rdf:label "Weight" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:KiloGM .

PMDCo:Width
    rdf:label "Width" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit QUDT:CentiM .

PMDCo:characteristic
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:NodeSerialNumber, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width .

PMDCo:component
    a owl:ObjectProperty ;
    rdfs:domain PVModuleOntology:ProdModule ;
    rdfs:range PVModuleOntology:ProdBacksheet, PVModuleOntology:ProdEncapsulant, PVModuleOntology:ProdJunctionBox .

PMDCo:value
    a owl:DatatypeProperty ;
    rdfs:domain PVModuleOntology:BacksheetColor, PVModuleOntology:BacksheetMaterial, PVModuleOntology:CellCount, PVModuleOntology:EncapsulantMaterial, PVModuleOntology:FluorescencePattern, PVModuleOntology:FrameColor, PVModuleOntology:ModuleEfficiency, PVModuleOntology:PowerSTC, PVModuleOntology:ProdModuleID, PVModuleOntology:TemperatureNOCT, PMDCo:Length, PMDCo:Manufacturer, PMDCo:Thickness, PMDCo:Weight, PMDCo:Width ;
    rdfs:range sd:float, sd:integer, sd:string .

pmd:Length
    rdf:label "Length" ;
    a rdfs:Class ;
    rdfs:comment "Length of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:ManufacturingProcess
    rdf:label "ManufacturingProcess" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:MaterialDesignation
    rdf:label "MaterialDesignation" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:Sample
    rdf:label "Sample" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:SpecimenName
    rdf:label "SpecimenName" ;
    a rdfs:Class ;
    rdfs:comment "_" ;
    skos:altLabel "_" ;
    PMDCo:unit "_" .

pmd:Thickness
    rdf:label "Thickness" ;
    a rdfs:Class ;
    rdfs:comment "Thickness of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:Width
    rdf:label "Width" ;
    a rdfs:Class ;
    rdfs:comment "Width of the sample." ;
    skos:altLabel "_" ;
    PMDCo:unit qudt:MilliM .

pmd:characteristicOf
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, pmd:Length, pmd:Thickness, pmd:Width .

pmd:hasIdentifier
    a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:SampleID .

pmd:value
    a owl:DatatypeProperty ;
    rdfs:domain mds-XraySample:MaterialName, mds-XraySample:ProcessingMethod, mds-XraySample:SampleID, pmd:Length, pmd:Thickness, pmd:Width ;
    rdfs:range sd:float, sd:string .
```

</details>

We can see the ontology metadata was updated and the ontologies were merged.

Merging ontologies in Python:
```{python, eval=F, python.reticulate = FALSE}
python -m FAIRmaterials --folder_path /path/to/csv/files/ --merge_title MergedPVandXRay --merge_base_uri https://cwrusdle.bitbucket.io/OntologyFilesOwl/Ontology/ --merge_version 1.0
```

### Example turtle/owl output from merged ontology:

<details>

<summary>[Click to expand merged owl file]{style="background-color: yellow;"}</summary>

```{}
@prefix MergedPVandXRay: <https://cwrusdle.bitbucket.io/OntologyFilesOwl/Ontology/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mds-XraySample: <https://cwrusdle.bitbucket.io/xraySample#> .
@prefix mds-pvModule: <https://cwrusdle.bitbucket.io/pvModule#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pmd: <https://w3id.org/pmd/co/> .
@prefix qudt: <http://qudt.org/2.1/vocab/unit#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

MergedPVandXRay:Ontology a owl:Ontology ;
    dcterms:description "This is the merged ontology of all the input sheets" ;
    dcterms:hasVersion "1.0" ;
    dcterms:title "MergedPVandXRay" ;
    owl:versionInfo "1.0" .

mds-pvModule:EncapsulantMaterial a owl:Class ;
    rdfs:label "EncapsulantMaterial" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Material of the polymer encapsulant" .

mds-pvModule:ModuleEncapsulant a owl:Class ;
    rdfs:label "ModuleEncapsulant" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Polymer encapsulant of a module" .

mds-pvModule:ModuleJunctionBox a owl:Class ;
    rdfs:label "ModuleJunctionBox" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Electrical junction box for connection to the module" .

pmd:characteristicOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule,
        mds-XraySample:XraySample ;
    rdfs:range mds-pvModule:PhotovoltaicModuleProperty,
        mds-pvModule:PhotovoltaicSite,
        mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        pmd:Length,
        pmd:Thickness,
        pmd:Width .

pmd:composedOf a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule ;
    rdfs:range mds-pvModule:PhotovoltaicBacksheet,
        mds-pvModule:PhotovoltaicCell,
        mds-pvModule:PhotovoltaicInverter .

pmd:hasIdentifier a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:PhotovoltaicModule,
        mds-XraySample:XraySample ;
    rdfs:range mds-pvModule:PhotovoltaicModuleID,
        mds-XraySample:SampleID .

pmd:hasSource a owl:ObjectProperty ;
    rdfs:domain mds-pvModule:ModuleRatingAtReference ;
    rdfs:range mds-pvModule:OrangeButtonTerm .

pmd:inputOf a owl:ObjectProperty ;
    rdfs:domain mds-XraySample:XraySample ;
    rdfs:range mds-XraySample:XrayTool .

pmd:value a owl:DatatypeProperty ;
    rdfs:domain mds-pvModule:CellCount,
        mds-pvModule:CurrentAtMaximumPower,
        mds-pvModule:CurrentShortCircuit,
        mds-pvModule:FluorescencePattern,
        mds-pvModule:Length,
        mds-pvModule:ModuleEfficiency,
        mds-pvModule:ModuleRatingAtReference,
        mds-pvModule:ModuleRatingCondition,
        mds-pvModule:PhotovoltaicModuleID,
        mds-pvModule:PowerDC,
        mds-pvModule:PowerSTC,
        mds-pvModule:Thickness,
        mds-pvModule:VoltageAtMaximumPower,
        mds-pvModule:VoltageOpenCircuit,
        mds-pvModule:Weight,
        mds-pvModule:Width,
        mds-XraySample:MaterialName,
        mds-XraySample:ProcessingMethod,
        mds-XraySample:SampleID,
        pmd:Length,
        pmd:Thickness,
        pmd:Width ;
    rdfs:range xsd:float,
        xsd:integer,
        xsd:string .

mds-pvModule:CellCount a owl:Class ;
    rdfs:label "CellCount" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Number of cells in a module" .

mds-pvModule:CurrentAtMaximumPower a owl:Class ;
    rdfs:label "CurrentAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC current at the maximum power point under STC" ;
    pmd:unit qudt:A .

mds-pvModule:CurrentShortCircuit a owl:Class ;
    rdfs:label "CurrentShortCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module short circuit current" ;
    pmd:unit qudt:A .

mds-pvModule:FluorescencePattern a owl:Class ;
    rdfs:label "FluorescencePattern" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "A UVF fluorescence pattern of a module" .

mds-pvModule:Length a owl:Class ;
    rdfs:label "Length" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Length of the module along longest side" ;
    pmd:unit qudt:CentiM .

mds-pvModule:ModuleEfficiency a owl:Class ;
    rdfs:label "ModuleEfficiency" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Theoretical efficency of a module" .

mds-pvModule:ModuleRatingCondition a owl:Class ;
    rdfs:label "ModuleRatingCondition" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Condition of the module" .

mds-pvModule:OrangeButtonTerm a owl:Class ;
    rdfs:label "OrangeButtonTerm" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "Term from the OrangeButton Taxonomy" .

mds-pvModule:PhotovoltaicBacksheet a owl:Class ;
    rdfs:label "PhotovoltaicBacksheet" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "Polymer backsheet of a PV cell or module" .

mds-pvModule:PhotovoltaicCell a owl:Class ;
    rdfs:label "PhotovoltaicCell" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "PV cell that composes a module" .

mds-pvModule:PhotovoltaicInverter a owl:Class ;
    rdfs:label "PhotovoltaicInverter" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "An inverter for a PV system" .

mds-pvModule:PhotovoltaicSite a owl:Class ;
    rdfs:label "PhotovoltaicSite" ;
    rdfs:subClassOf pmd:Location ;
    skos:altLabel "" ;
    skos:definition "Physical location of a PV site" .

mds-pvModule:PowerDC a owl:Class ;
    rdfs:label "PowerDC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC power at STC, 1 sun of irradiance" ;
    pmd:unit qudt:KiloW .

mds-pvModule:PowerSTC a owl:Class ;
    rdfs:label "PowerSTC" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Power at refrence conditions" ;
    pmd:unit qudt:KiloW .

mds-pvModule:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Thickness of the module, not counting the framing" ;
    pmd:unit qudt:CentiM .

mds-pvModule:VoltageAtMaximumPower a owl:Class ;
    rdfs:label "VoltageAtMaximumPower" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "DC voltage at the maximum power point under STC" ;
    pmd:unit qudt:V .

mds-pvModule:VoltageOpenCircuit a owl:Class ;
    rdfs:label "VoltageOpenCircuit" ;
    rdfs:subClassOf mds-pvModule:ModuleRatingAtReference ;
    skos:altLabel "" ;
    skos:definition "Module open circuit voltage, maximum voltage the module can provide" ;
    pmd:unit qudt:V .

mds-pvModule:Weight a owl:Class ;
    rdfs:label "Weight" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Module weight" ;
    pmd:unit qudt:LB .

mds-pvModule:Width a owl:Class ;
    rdfs:label "Width" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Width of module along shortest side" ;
    pmd:unit qudt:CentiM .

mds-XraySample:XrayTool a owl:Class ;
    rdfs:label "XrayTool" ;
    skos:altLabel "" .

pmd:Location a owl:Class ;
    rdfs:label "Location" ;
    skos:altLabel "" .

pmd:ManufacturingProcess a owl:Class ;
    rdfs:label "ManufacturingProcess" ;
    skos:altLabel "" .

pmd:MaterialDesignation a owl:Class ;
    rdfs:label "MaterialDesignation" ;
    skos:altLabel "" .

pmd:ProvidedIdentifier a owl:Class ;
    rdfs:label "ProvidedIdentifier" ;
    skos:altLabel "" .

pmd:Sample a owl:Class ;
    rdfs:label "Sample" ;
    skos:altLabel "" .

pmd:SpecimenName a owl:Class ;
    rdfs:label "SpecimenName" ;
    skos:altLabel "" .

mds-pvModule:PhotovoltaicModuleID a owl:Class ;
    rdfs:label "PhotovoltaicModuleID" ;
    rdfs:subClassOf pmd:ProvidedIdentifier ;
    skos:altLabel "" ;
    skos:definition "Module identifier" .

mds-XraySample:MaterialName a owl:Class ;
    rdfs:label "MaterialName" ;
    rdfs:subClassOf pmd:MaterialDesignation ;
    skos:altLabel "" ;
    skos:definition "Name of the material." .

mds-XraySample:ProcessingMethod a owl:Class ;
    rdfs:label "ProcessingMethod" ;
    rdfs:subClassOf pmd:ManufacturingProcess ;
    skos:altLabel "" ;
    skos:definition "The manufacturing method by ehich the sample was created." .

mds-XraySample:SampleID a owl:Class ;
    rdfs:label "SampleID" ;
    rdfs:subClassOf pmd:SpecimenName ;
    skos:altLabel "" ;
    skos:definition "A human-labeled sample identifier." .

pmd:Length a owl:Class ;
    rdfs:label "Length" ;
    skos:altLabel "" ;
    skos:definition "Length of the sample." ;
    pmd:unit qudt:MilliM .

pmd:Thickness a owl:Class ;
    rdfs:label "Thickness" ;
    skos:altLabel "" ;
    skos:definition "Thickness of the sample." ;
    pmd:unit qudt:MilliM .

pmd:ValueObject a owl:Class ;
    rdfs:label "ValueObject" ;
    skos:altLabel "" .

pmd:Width a owl:Class ;
    rdfs:label "Width" ;
    skos:altLabel "" ;
    skos:definition "Width of the sample." ;
    pmd:unit qudt:MilliM .

mds-pvModule:PhotovoltaicModule a owl:Class ;
    rdfs:label "PhotovoltaicModule" ;
    rdfs:subClassOf pmd:ProcessingNode ;
    skos:altLabel "" ;
    skos:definition "A PV module, comprised of cells, for field deployment" .

mds-XraySample:XraySample a owl:Class ;
    rdfs:label "XraySample" ;
    rdfs:subClassOf pmd:Sample ;
    skos:altLabel "" .

pmd:ProcessingNode a owl:Class ;
    rdfs:label "ProcessingNode" ;
    skos:altLabel "" .

mds-pvModule:ModuleRatingAtReference a owl:Class ;
    rdfs:label "ModuleRatingAtReference" ;
    rdfs:subClassOf mds-pvModule:PhotovoltaicModuleProperty ;
    skos:altLabel "" ;
    skos:definition "Measurements of a module taken at STC and 1000 W/m^2 irradiance" .

mds-pvModule:PhotovoltaicModuleProperty a owl:Class ;
    rdfs:label "PhotovoltaicModuleProperty" ;
    rdfs:subClassOf pmd:ValueObject ;
    skos:altLabel "" ;
    skos:definition "A property of a PV module" .
```

</details>

We can see the ontology metadata was updated and the ontologies were merged. We are currently in the process of generating visualizations of merged ontologies.

<br><br><br>

# Acknowledgment:
This work was supported by the U.S. Department of Energy’s Office of Energy Efficiency and Renewable Energy (EERE) under Solar Energy Technologies Office (SETO) Agreement Numbers DE-EE0009353 and DE-EE0009347, Department of Energy (National Nuclear Security Administration) under Award Number DE-NA0004104 and Contract number B647887, and U.S. National Science Foundation Award under Award Number 2133576.
