Skip to content

RDF (Resource Description Framework) Module

This module provides a comprehensive framework for parsing, analyzing, and rendering RDF (Resource Description Framework) schemas and instances, with a focus on the Common Information Model (CIM) and related standards. It enables the transformation of RDF-based ontologies into strongly-typed C#, Java(experimental) and Python(experimental) classes and enumerations, supporting advanced code generation and schema management scenarios.

It is easily extendable to support new RDF vocabularies, code generation templates, or schema analysis strategies.

User Interface

This module doesn't provides UI.

Features

  • RDF Schema Parsing

    • Extracts namespaces, headers, classes, attributes, data types, enumerations, and concrete classes from RDF/XML files.
    • Supports detailed introspection of RDF graphs using the dotNetRDF library.
  • Schema Analysis

    • Analyzes RDF classes, attributes, and data types to determine their render requirements and C#, Java(experimental) and Python(experimental) type mappings.
    • Distinguishes between primitive types, references, enumerations, and concrete classes.
  • RDF Instance Parsing (CIM/XML)

    • Parses RDF instances (CIM/XML content) and attaches them to the top-level RdfSchema via RdfFullModel or RdfModel.
    • Supports literal, resource, and compound properties: RdfLiteralProperty, RdfResourceProperty, RdfCompoundProperty, RdfCompoundElement.
    • Provides document-level wrappers: CIMXMLDocument and RdfStatements.
    • Enables building RdfDifferenceModel to compare two instance models.
  • Code Generation

    • Renders C#, Java(experimental) and Python(experimental) classes and enumerations from RDF schema definitions using Scriban templates.
    • Supports extensible and customizable code generation pipelines.
  • Schema Management

  • Provides a domain service for loading, updating, and managing RDF schema representations.
  • Enables updating of schema elements (classes, attributes, data types, enumerations) in a consistent and type-safe manner.
  • Supports resolving CIM versions via ICimSchemaResolver and CimSchemaResolverOptions.

Options

RdfSchemaAnalyzerOptions

RdfSchemaAnalyzerOptions can be configured in the application layer, within the ConfigureServices method of your module. Example:

Configure<RdfSchemaAnalyzerOptions>(options =>
{
    // Set options here...
});

Options for configuring the RDF Schema Analyzer.

Option Type Default Description
ThrowOnUnknownTypes bool false If true, analyzer will treat unknown/unsupported types as errors.
InferPropertyTypes bool false If true, analyzer will infer missing property types from context.
NormalizeNames bool false If true, analyzer will normalize property and class names (e.g., PascalCase, SnakeCase).
ReservedKeywordSuffix string "_" Suffix to append to reserved keywords to avoid conflicts.

RdfSchemaParserOptions

RdfSchemaParserOptions can be configured in the application layer, within the ConfigureServices method of your module. Example:

Configure<RdfSchemaParserOptions>(options =>
{
    // Set options here...
});

Options for configuring the RDF Schema Parser.

Option Type Default Description
IgnoreUnknownTypes bool false If true, parser will ignore unknown or unsupported RDF types instead of throwing.
InferLabels bool false If true, parser will attempt to infer missing labels from URIs.
NormalizeLiterals bool true If true, parser will normalize literal values (e.g., trim whitespace, convert to lowercase).

RdfInstanceParserOptions

RdfInstanceParserOptions configures CIM/XML instance parsing and model building.

Configure<RdfInstanceParserOptions>(options =>
{
    // Set options here...
});
Options for configuring the RDF Instance Parser.

Option Type Default Description
IgnoreUnknownTypes bool false If true, parser will ignore unknown or unsupported RDF types instead of throwing.
NormalizeLiterals bool true If true, parser will normalize literal values (e.g., trim whitespace, convert to lowercase).

TemplateRendererOptions

TemplateRendererOptions can be configured in the application layer, within the ConfigureServices method of your module. Example:

Configure<TemplateRendererOptions>(options =>
{
    // Set options here...
});

Options for configuring the Template Renderer.

Option Type Default Description
IncludeAutoGeneratedComment bool true If true, will include an auto-generated comment in generated files.

Model Generator Tool

The ModelGenerator is a command-line tool for generating code from RDF schema files (such as CGMES or CIM). It supports multiple target languages (CSharp, Java, Python) and is highly configurable via command-line options. The tool can be run directly or as a Docker container.

Usage

  1. Running Locally

    You can run the tool directly from the command line after building the project:

    dotnet run --project host/GridLab.GMSS.ModelGenerator -- [OPTIONS]
    

    Or, if you have a published executable:

    GridLab.GMSS.ModelGenerator.exe [OPTIONS]
    
    example

    Common Options:

    Option Description
    -i, --input Directory containing RDF files
    -p, --rdfFilePattern File pattern to search for RDF files (default: *.rdf)
    -f, --inputFile Single RDF file to process
    -o, --output Output directory (defaults to executable location)
    -m, --mergeSchemas Merge all schemas and their attributes
    --profileName Name of the profile for generated classes (if schemas are merged)
    --version Version for generated classes (if schemas are merged)
    --namespace Namespace for generated classes (if schemas are merged)
    --overwriteFiles Overwrite existing files in the output directory
    --classTemplatePath Path to custom Scriban template for classes
    --enumerationTemplatePath Path to custom Scriban template for enumerations
    -l, --language Target language: CSharp, Java, Python
    -w, --logWarnings Log warnings for missing/malformed schema elements
    -d, --includeDeprecated Include deprecated classes/properties
    --namespaces Allowed namespace prefixes (comma-separated)
    --allowedClassNames Allowed class names (comma-separated)
    --allowedAttributeNames Allowed attribute names (comma-separated)
    --allowedEnumerationNames Allowed enumeration names (comma-separated)
    --ignoreUnknownTypes Ignore unknown/unsupported RDF types instead of throwing
    --inferLabels Infer missing labels from URIs
    --normalizeLiterals Normalize literal values
    --throwOnUnknownTypes Treat unknown/unsupported types as errors
    --inferPropertyTypes Infer missing property types from context
    --normalizeNames Normalize property/class names (e.g., PascalCase, SnakeCase)
    --reservedKeywordSuffix Suffix to append to reserved keywords
    --includeAutoGeneratedComment Include an auto-generated comment in generated files

    To see all options and their descriptions, run:

    GridLab.GMSS.ModelGenerator.exe --help
    
  2. Running as a Docker Image

    A Docker image is provided for easy execution in containerized environments.

    Build the Docker Image:

    Use build\build-images-locally.ps1 powershell script.

    Example:

    Mount your RDF schema directory and specify output as needed:

    docker run --rm \
      -v /path/to/your/rdf:/app/CGMES_Schema \
      -v /path/to/output:/app/models \
      gridlab.gmss.modelgenerator/application \
      --input /app/CGMES_Schema/CGMES_3.0.0 \
      --output /app/models \
      --language CSharp \
      --mergeSchemas true \
      --profileName IEC61970 \
      --namespace Profiles.IEC61970 \
      --version 3.0.0
    
  3. Replace /path/to/your/rdf with the path to your RDF files on your host.

  4. Replace /path/to/output with the desired output directory on your host.