Table of Contents

Introduction

Graph-Based Analysis uses graph theory algorithms to verify the structural integrity of digital engineering models. It checks if the model’s connections form a valid structure, like ensuring there are no circular dependencies in the analysis workflow.

Overview

Graph-Based Analysis is one of three verification approaches within the Semantic System Verification Layer (SSVL), used to ensure models are well-formed and consistent. It specifically verifies requirements related to the structural organization of the System of Analysis (SoA) by treating the SoA as a directed graph.

The graph representation of the SoA enables leveraging of graph-based algorithms from computer science to verify structural requirements. This approach complements the other two SSVL approaches: - Open World Analysis (using Description Logic reasoning) - Closed World Analysis (using SHACL constraints)

Graph-Based Analysis is particularly valuable for verifying requirements that involve the structure of connections between model elements, such as ensuring the SoA forms a Directed Acyclic Graph (DAG).

Graph-Based Analysis is essential for verifying requirements that cannot be adequately checked using Open World or Closed World approaches alone, especially those involving graph structure and connectivity patterns.

Position in Knowledge Hierarchy

Broader concepts: - SSVL (is-a)

Narrower concepts: - DAG (is-a)

Details

Graph-Based Analysis works by transforming ontology-aligned data into a graph representation and then applying graph algorithms to verify model requirements. The process involves:

  1. Extracting the relevant subgraph from the ontology-aligned data using SPARQL queries

  2. Converting the extracted data into a format suitable for graph analysis tools

  3. Applying graph algorithms to verify specific structural requirements

  4. Interpreting the results to determine if the model meets the specified requirements

The most common requirement verified through Graph-Based Analysis is: - Requirement 10: "SoA shall form a Directed Acyclic Graph (DAG) when ordered by sequence"

This requirement ensures that the analysis workflow has a clear sequence without circular dependencies, which is critical for proper execution of the analysis.

The SoA graph is derived from the Assessment Flow Diagram (AFD), which represents the sequence of analysis steps and how data flows between them.

Graph Representation of SoA

The SoA can be represented as a directed graph (digraph) where: - Nodes represent model elements (e.g., analysis models, value properties) - Directed edges represent connections between these elements (e.g., data flow from one analysis to another)

This graph representation enables the use of standard graph algorithms to verify structural requirements.

When implementing Graph-Based Analysis, it’s important to ensure the graph representation accurately reflects the intended analysis workflow. Inaccurate graph construction can lead to false positives or negatives in verification.

Tooling for Graph-Based Analysis

The primary tool used for Graph-Based Analysis in the context of Digital Engineering is NetworkX, a Python library for network analysis. NetworkX provides a rich set of algorithms for analyzing graph structures.

The workflow for Graph-Based Analysis typically involves: 1. Using SPARQL to extract relevant subgraphs from the ontology-aligned data 2. Converting the SPARQL results into a format compatible with NetworkX 3. Applying NetworkX algorithms to verify requirements 4. Reporting the verification results

NetworkX is particularly well-suited for this task because it provides efficient implementations of graph algorithms and integrates well with Python’s data analysis ecosystem.

Practical applications and examples

Let’s walk through a practical example of implementing Graph-Based Analysis for the "SoA shall form a Directed Acyclic Graph" requirement using NetworkX.

Example: Verifying DAG Structure

The following Python code demonstrates how to check if a graph is a DAG using NetworkX:

import networkx as nx
from rdflib import Graph, Namespace
from rdflib.namespace import RDF

= Load the ontology-aligned data (triplestore)
g = Graph()
g.parse("soa_data.ttl", format="turtle")

= Define the namespace for the SoA
SOA = Namespace("http://example.org/soa#")

= Extract nodes and edges from the ontology
nodes = []
edges = []

= SPARQL query to extract the SoA graph structure
query = """
SELECT ?source ?target
WHERE {
  ?source a ?type .
  ?target a ?type .
  ?source <http://example.org/soa#hasConnection> ?target .
}
"""

= Execute the query and populate the graph
for row in g.query(query):
    source = str(row[0])
    target = str(row[1])
    nodes.append(source)
    nodes.append(target)
    edges.append((source, target))

= Create a NetworkX graph
G = nx.DiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

= Check if the graph is a DAG
is_dag = nx.is_directed_acyclic_graph(G)

if is_dag:
    print("Verification successful: SoA forms a Directed Acyclic Graph")
else:
    # Find cycles in the graph
    try:
        cycle = next(nx.simple_cycles(G))
        print("Verification failed: Cycle detected in SoA graph")
        print(f"Cycle: {cycle}")
    except StopIteration:
        print("Verification failed: Graph contains cycles but no cycle found")
When implementing Graph-Based Analysis, ensure that the SPARQL query accurately captures the relevant connections for the analysis. Inaccurate queries can lead to incomplete or incorrect graph representations.

Catapult Example

The context provides a specific example using the Catapult model where a cycle was intentionally inserted into the graph to demonstrate the verification process. In this example, the cycle was detected using NetworkX, as shown in Table 6 of the context:

Scenario Name

Graph Failure

C26

Cycle Detected

The cycle was located between "Impact Velocity" and "Pin Height" as shown in Figure 156 of the context.

References

Knowledge Graph

Visualize the relationships between Graph-Based Analysis and related concepts

graph TD A[Graph-Based Analysis] --> B[Semantic System Verification Layer] A --> C[Directed Acyclic Graph] A --> D[NetworkX] A --> E[SoA System of Analysis] A --> F[Verification Requirement 10] B --> G[Open World Analysis] B --> H[Closed World Analysis] C --> I[Directed Graph] C --> J[Acylic Graph] D --> K[Python Library] D --> L[Graph Algorithms] E --> M[Assessment Flow Diagram] F --> N[No Circular Dependencies]