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}