tulna_rs/
lib.rs

1//! # tulna-rs
2//!
3//! A Rust library for parsing and checking equivalence (isomorphism) of semantic queries
4//! including SPARQL, RSP-QL, and JanusQL, as well as direct RDF graph isomorphism checking.
5//!
6//! ## Features
7//!
8//! - **Query Isomorphism**: Check if two queries are semantically equivalent
9//!   - SPARQL 1.1 queries
10//!   - RSP-QL queries with streaming extensions
11//!   - JanusQL queries with live and historical windows
12//! - **Graph Isomorphism**: Direct RDF graph isomorphism checking using hash-based grounding algorithm
13//! - **Query Parsing**: Auto-detect and parse different query languages
14//! - **Stream Parameters**: Validate stream and window parameters for streaming queries
15//!
16//! ## Quick Start
17//!
18//! ### Query Isomorphism
19//!
20//! ```rust
21//! use tulna_rs::isomorphism::api::QueryIsomorphismAPI;
22//!
23//! let query1 = "SELECT ?s ?p ?o WHERE { ?s ?p ?o }";
24//! let query2 = "SELECT ?x ?y ?z WHERE { ?x ?y ?z }";
25//!
26//! let is_isomorphic = QueryIsomorphismAPI::is_isomorphic(query1, query2).unwrap();
27//! assert!(is_isomorphic); // true - same structure, different variables
28//! ```
29//!
30//! ### Direct Graph Isomorphism
31//!
32//! ```rust
33//! use tulna_rs::graph::{GraphIsomorphism, Triple, TripleNode};
34//!
35//! let graph1 = vec![
36//!     Triple {
37//!         subject: TripleNode::Variable("x".to_string()),
38//!         predicate: TripleNode::IRI("http://example.org/knows".to_string()),
39//!         object: TripleNode::Variable("y".to_string()),
40//!     }
41//! ];
42//!
43//! let graph2 = vec![
44//!     Triple {
45//!         subject: TripleNode::Variable("a".to_string()),
46//!         predicate: TripleNode::IRI("http://example.org/knows".to_string()),
47//!         object: TripleNode::Variable("b".to_string()),
48//!     }
49//! ];
50//!
51//! let is_isomorphic = GraphIsomorphism::are_isomorphic(&graph1, &graph2).unwrap();
52//! assert!(is_isomorphic); // true
53//! ```
54
55pub mod isomorphism;
56pub mod parsing;
57
58// Re-export commonly used types for graph isomorphism
59pub mod graph {
60    //! Direct RDF graph isomorphism checking.
61    //!
62    //! This module provides the hash-based grounding algorithm for efficient
63    //! graph isomorphism checking, independent of query parsing.
64
65    pub use crate::isomorphism::core::{Triple, TripleNode};
66    pub use crate::isomorphism::graph_isomorphism::GraphIsomorphism;
67}
68
69// Re-export query isomorphism API
70pub mod query {
71    //! Query isomorphism checking for SPARQL, RSP-QL, and JanusQL.
72
73    pub use crate::isomorphism::api::{QueryComparisonResult, QueryIsomorphismAPI};
74    pub use crate::isomorphism::core::{IsomorphismQuery, QueryLanguage};
75}