|
1 | 1 | import Head from '../components/Head'; |
| 2 | +import { useEffect } from 'react'; |
2 | 3 |
|
3 | 4 | export default function Home() { |
| 5 | + useEffect(() => { |
| 6 | + // Rotate SPARQL queries |
| 7 | + const queries = document.querySelectorAll('.sparql-query'); |
| 8 | + let currentQuery = 0; |
| 9 | + |
| 10 | + const rotateQueries = () => { |
| 11 | + queries[currentQuery].classList.remove('active'); |
| 12 | + currentQuery = (currentQuery + 1) % queries.length; |
| 13 | + queries[currentQuery].classList.add('active'); |
| 14 | + }; |
| 15 | + |
| 16 | + const intervalId = setInterval(rotateQueries, 4000); |
| 17 | + |
| 18 | + return () => clearInterval(intervalId); |
| 19 | + }, []); |
| 20 | + |
4 | 21 | return ( |
5 | 22 | <div className="container"> |
6 | 23 | <Head |
7 | 24 | title={'A knowledge graph querying framework'} |
8 | | - description={'Flexible SPARQL and GraphQL over decentralized RDF on the Web.'} |
| 25 | + description={'Query-driven integration of heterogeneous Knowledge Graphs. Execute SPARQL queries over decentralized data sources.'} |
9 | 26 | /> |
10 | 27 |
|
11 | 28 | <main id="software"> |
12 | | - <div className={"intro"}> |
13 | | - <img src="/img/comunica_red_no_fill.svg" alt="Comunica" className="comunica-logo" /> |
14 | | - <h1 className="title">A knowledge graph querying framework</h1> |
| 29 | + <div className="hero"> |
| 30 | + <img src="/img/comunica_red_no_fill.svg" alt="Comunica" className="hero-logo" /> |
| 31 | + <h1 className="hero-title">A knowledge graph querying framework</h1> |
| 32 | + <p className="hero-subtitle"> |
| 33 | + Query-driven integration of heterogeneous Knowledge Graphs |
| 34 | + </p> |
| 35 | + <div className="hero-buttons"> |
| 36 | + <a href="docs/query/" className="button-primary">Get Started</a> |
| 37 | + <a href="https://query.comunica.dev/" className="button-secondary">Try Live</a> |
| 38 | + </div> |
15 | 39 | </div> |
16 | 40 |
|
17 | | - <p className="description"> |
18 | | - Flexible SPARQL and GraphQL over decentralized RDF on the Web. |
19 | | - </p> |
20 | | - |
21 | | - <div className="grid-wide"> |
22 | | - <div className="card-info"> |
23 | | - <img src="/img/web.svg" alt="Web" className="feature-icon" /> |
24 | | - <h3>For the Web</h3> |
25 | | - <p> |
26 | | - Powered by Web technologies, execute queries via JavaScript on server or client. |
| 41 | + <div className="features-section"> |
| 42 | + <div className="feature-item"> |
| 43 | + <div className="feature-icon-large">🔗</div> |
| 44 | + <h2>Query Decentralized Knowledge Graphs</h2> |
| 45 | + <p className="feature-description"> |
| 46 | + Query decentralized Knowledge Graphs as if they were centralized.<br/> |
| 47 | + Stop worrying about how and where your data is published. |
27 | 48 | </p> |
| 49 | + <div className="source-types-scroll"> |
| 50 | + <div className="source-types-track"> |
| 51 | + <span>SPARQL endpoints</span> |
| 52 | + <span>Linked Data documents</span> |
| 53 | + <span>HDT files</span> |
| 54 | + <span>Triple Pattern Fragments</span> |
| 55 | + <span>Quad Pattern Fragments</span> |
| 56 | + <span>JSON-LD</span> |
| 57 | + <span>RDF/XML</span> |
| 58 | + <span>Turtle</span> |
| 59 | + <span>SPARQL endpoints</span> |
| 60 | + <span>Linked Data documents</span> |
| 61 | + <span>HDT files</span> |
| 62 | + </div> |
| 63 | + </div> |
28 | 64 | </div> |
29 | | - <div className="card-info"> |
30 | | - <img src="/img/ldf.svg" alt="Web" className="feature-icon" /> |
31 | | - <h3>Heterogeneous</h3> |
32 | | - <p> |
33 | | - Execute queries over multiple federated data sources of different types. |
| 65 | + |
| 66 | + <div className="feature-item"> |
| 67 | + <div className="feature-icon-large">🌐</div> |
| 68 | + <h2>Built for the Web</h2> |
| 69 | + <p className="feature-description"> |
| 70 | + Execute queries client-side or server-side, via TypeScript/JavaScript |
34 | 71 | </p> |
| 72 | + <div className="platform-icons"> |
| 73 | + <div className="platform-icon" title="Chrome"> |
| 74 | + <svg viewBox="0 0 24 24" width="48" height="48"> |
| 75 | + <circle cx="12" cy="12" r="10" fill="#4285F4"/> |
| 76 | + <circle cx="12" cy="12" r="6" fill="white"/> |
| 77 | + <circle cx="12" cy="12" r="4" fill="#4285F4"/> |
| 78 | + </svg> |
| 79 | + <span>Chrome</span> |
| 80 | + </div> |
| 81 | + <div className="platform-icon" title="Firefox"> |
| 82 | + <svg viewBox="0 0 24 24" width="48" height="48"> |
| 83 | + <circle cx="12" cy="12" r="10" fill="#FF7139"/> |
| 84 | + <circle cx="12" cy="12" r="6" fill="#FFCB00"/> |
| 85 | + </svg> |
| 86 | + <span>Firefox</span> |
| 87 | + </div> |
| 88 | + <div className="platform-icon" title="Node.js"> |
| 89 | + <svg viewBox="0 0 24 24" width="48" height="48"> |
| 90 | + <path d="M12 2L2 7v10l10 5 10-5V7z" fill="#339933"/> |
| 91 | + </svg> |
| 92 | + <span>Node.js</span> |
| 93 | + </div> |
| 94 | + <div className="platform-icon" title="Deno"> |
| 95 | + <svg viewBox="0 0 24 24" width="48" height="48"> |
| 96 | + <circle cx="12" cy="12" r="10" fill="#000"/> |
| 97 | + <circle cx="12" cy="12" r="6" fill="white"/> |
| 98 | + </svg> |
| 99 | + <span>Deno</span> |
| 100 | + </div> |
| 101 | + <div className="platform-icon" title="Bun"> |
| 102 | + <svg viewBox="0 0 24 24" width="48" height="48"> |
| 103 | + <circle cx="12" cy="12" r="10" fill="#FBF0DF"/> |
| 104 | + <circle cx="12" cy="12" r="6" fill="#F9DBBB"/> |
| 105 | + </svg> |
| 106 | + <span>Bun</span> |
| 107 | + </div> |
| 108 | + </div> |
35 | 109 | </div> |
36 | | - <div className="card-info"> |
37 | | - <img src="/img/modular.svg" alt="Web" className="feature-icon" /> |
38 | | - <h3>Modular</h3> |
39 | | - <p> |
40 | | - A collection of modules that can be combined to achieve a certain task. |
| 110 | + |
| 111 | + <div className="feature-item"> |
| 112 | + <div className="feature-icon-large">⚙️</div> |
| 113 | + <h2>Modular and Flexible</h2> |
| 114 | + <p className="feature-description"> |
| 115 | + Build custom query engines for specific querying needs, or use a pre-built engine |
41 | 116 | </p> |
| 117 | + <div className="config-example"> |
| 118 | + <pre><code>{`{ |
| 119 | + "@context": [...], |
| 120 | + "@id": "urn:comunica:my", |
| 121 | + "actors": [ |
| 122 | + { |
| 123 | + "@id": "ex:rdfParse", |
| 124 | + "@type": "ActorRdfParseJsonLd" |
| 125 | + }, |
| 126 | + { |
| 127 | + "@id": "ex:rdfResolve", |
| 128 | + "@type": "ActorRdfResolveQuadPattern" |
| 129 | + }, |
| 130 | + { |
| 131 | + "@id": "ex:optimize", |
| 132 | + "@type": "ActorOptimizeQueryOperation" |
| 133 | + } |
| 134 | + ] |
| 135 | +}`}</code></pre> |
| 136 | + </div> |
42 | 137 | </div> |
43 | | - </div> |
44 | 138 |
|
45 | | - <div className="grid"> |
46 | | - <a href="docs/query/" className="card"> |
47 | | - <h3>Query with Comunica →</h3> |
48 | | - <p>Learn how to execute queries</p> |
49 | | - </a> |
| 139 | + <div className="feature-item"> |
| 140 | + <div className="feature-icon-large">✨</div> |
| 141 | + <h2>Fully SPARQL 1.2 Compliant</h2> |
| 142 | + <p className="feature-description"> |
| 143 | + Make use of the most modern SPARQL features |
| 144 | + </p> |
| 145 | + <div className="sparql-carousel"> |
| 146 | + <div className="sparql-query active"> |
| 147 | + <pre><code>{`SELECT ?person ?name WHERE { |
| 148 | + ?person foaf:name ?name . |
| 149 | + FILTER(lang(?name) = "en") |
| 150 | +}`}</code></pre> |
| 151 | + </div> |
| 152 | + <div className="sparql-query"> |
| 153 | + <pre><code>{`CONSTRUCT { |
| 154 | + ?s ?p ?o |
| 155 | +} WHERE { |
| 156 | + SERVICE <https://dbpedia.org/sparql> { |
| 157 | + ?s ?p ?o |
| 158 | + } |
| 159 | +}`}</code></pre> |
| 160 | + </div> |
| 161 | + <div className="sparql-query"> |
| 162 | + <pre><code>{`SELECT * WHERE { |
| 163 | + ?s ?p ?o . |
| 164 | + OPTIONAL { ?s rdfs:label ?label } |
| 165 | +} LIMIT 100`}</code></pre> |
| 166 | + </div> |
| 167 | + </div> |
| 168 | + </div> |
50 | 169 |
|
51 | | - <a href="docs/modify/" className="card"> |
52 | | - <h3>Modify Comunica →</h3> |
53 | | - <p>Learn how to configure or extend</p> |
54 | | - </a> |
| 170 | + <div className="feature-item"> |
| 171 | + <div className="feature-icon-large">📖</div> |
| 172 | + <h2>Free and Open Source</h2> |
| 173 | + <p className="feature-description"> |
| 174 | + Use in any project, open or commercial |
| 175 | + </p> |
| 176 | + <div className="github-badge"> |
| 177 | + <svg viewBox="0 0 16 16" width="32" height="32" fill="currentColor"> |
| 178 | + <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path> |
| 179 | + </svg> |
| 180 | + <div> |
| 181 | + <strong>MIT Licensed</strong> |
| 182 | + <p>Available on <a href="https://github.com/comunica/comunica">GitHub</a></p> |
| 183 | + </div> |
| 184 | + </div> |
| 185 | + </div> |
55 | 186 |
|
56 | | - <a href="https://opencollective.com/comunica-association" className="card"> |
57 | | - <h3>Donate →</h3> |
58 | | - <p>Sponsor via Open Collective</p> |
59 | | - </a> |
| 187 | + <div className="feature-item ai-ready"> |
| 188 | + <div className="feature-icon-large">🤖</div> |
| 189 | + <h2>AI and MCP-Ready</h2> |
| 190 | + <p className="feature-description"> |
| 191 | + Integrate with AI systems and Model Context Protocol for intelligent knowledge graph querying |
| 192 | + </p> |
| 193 | + </div> |
| 194 | + </div> |
60 | 195 |
|
61 | | - <a href="contribute/" className="card"> |
62 | | - <h3>Contribute →</h3> |
63 | | - <p>Contribute to the development</p> |
64 | | - </a> |
| 196 | + <div className="getting-started"> |
| 197 | + <h2>Getting Started</h2> |
| 198 | + <div className="getting-started-grid"> |
| 199 | + <a href="docs/query/" className="card-getting-started"> |
| 200 | + <h3>Query with Comunica</h3> |
| 201 | + <p>Learn how to execute SPARQL queries over knowledge graphs</p> |
| 202 | + <span className="card-arrow">→</span> |
| 203 | + </a> |
| 204 | + <a href="docs/modify/" className="card-getting-started"> |
| 205 | + <h3>Modify Comunica</h3> |
| 206 | + <p>Configure and extend Comunica for your needs</p> |
| 207 | + <span className="card-arrow">→</span> |
| 208 | + </a> |
| 209 | + <a href="contribute/" className="card-getting-started"> |
| 210 | + <h3>Contribute</h3> |
| 211 | + <p>Join the community and contribute to development</p> |
| 212 | + <span className="card-arrow">→</span> |
| 213 | + </a> |
| 214 | + <a href="https://opencollective.com/comunica-association" className="card-getting-started"> |
| 215 | + <h3>Donate</h3> |
| 216 | + <p>Support the project via Open Collective</p> |
| 217 | + <span className="card-arrow">→</span> |
| 218 | + </a> |
| 219 | + </div> |
65 | 220 | </div> |
66 | 221 |
|
67 | 222 | <div className="container-page sponsors"> |
|
0 commit comments