<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: André Santos</title>
    <description>The latest articles on DEV Community by André Santos (@andrefs).</description>
    <link>https://dev.to/andrefs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F16803%2Ff7e2a0c1-0733-45f3-90c8-f67d1013fad5.jpeg</url>
      <title>DEV Community: André Santos</title>
      <link>https://dev.to/andrefs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrefs"/>
    <language>en</language>
    <item>
      <title>RDF graph namespaces are more than just syntactic sugar</title>
      <dc:creator>André Santos</dc:creator>
      <pubDate>Thu, 10 Sep 2026 10:00:00 +0000</pubDate>
      <link>https://dev.to/andrefs/rdf-graph-namespaces-are-more-than-just-syntactic-sugar-1e0d</link>
      <guid>https://dev.to/andrefs/rdf-graph-namespaces-are-more-than-just-syntactic-sugar-1e0d</guid>
      <description>&lt;p&gt;In the RDF specification, prefix aliases are merely a syntactic convenience for abbreviating IRIs, used in some RDF serialization formats, and carry no formal semantics. That is, they’re just shorthand: useful for saving space, but meaningless in terms of what the data actually says.&lt;/p&gt;

&lt;p&gt;However, someone choose to group resources under a common prefix (e.g. &lt;code&gt;http://dbpedia.org/resource/&lt;/code&gt;). And other people, when using some of those resources elsewhere, decided they were common/important enough to create an alias for that namespace (e.g. &lt;code&gt;dbr:&lt;/code&gt;). They’re telling you something. These aren’t arbitrary choices; they’re signals about origin, intent, and community alignment.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chilon_rs&lt;/code&gt;, my Rust tool for summarizing RDF knowledge graphs, treats namespaces as if they &lt;em&gt;do&lt;/em&gt; carry meaning. It takes a massive RDF graph (we’re talking tens of GBs, billions of triples) and produces a summary graph by asking: &lt;em&gt;what if we treated every IRI’s namespace as its identity?&lt;/em&gt; Suddenly you can see what vocabularies a graph uses, what other graphs it links to, and how those pieces fit together. All without loading the full graph into memory all at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with “just syntax”
&lt;/h2&gt;

&lt;p&gt;Pick up a large RDF file, with at least a few gigabytes even when compressed. It won’t be easy to open in a text editor. Even counting the lines with &lt;code&gt;wc -l&lt;/code&gt; might require more than a few seconds. But you still need to answer basic questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this using a custom ontologies or vocabularies, or well-known ones like Schema.org or DOAP?&lt;/li&gt;
&lt;li&gt;Does it link to external graphs, like DBpedia or Wikidata, or is it self-contained?&lt;/li&gt;
&lt;li&gt;What’s the rough shape: a few big namespaces or thousands of tiny ones?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could load it into a triplestore and run SPARQL queries, but that takes hours to set up and you’re still querying billions of triples. What you really want is a lossy summary, something small enough to hold in your head that preserves the big-picture structure. And that’s where namespaces come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  How chilon_rs turns syntax into signal
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;chilon_rs&lt;/code&gt; works in two passes over your RDF files (Turtle, N-Triples, or RDF/XML):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First pass: collect the namespaces&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It scans for IRI prefixes from four sources, ranked by usefulness:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your own aliases (if you provided them, highest signal)&lt;/li&gt;
&lt;li&gt;Community prefix aliases (from the &lt;code&gt;prefixmaps&lt;/code&gt; Python package, which aggregates &lt;a href="https://prefix.cc" rel="noopener noreferrer"&gt;prefix.cc&lt;/a&gt; and other sources)&lt;/li&gt;
&lt;li&gt;Explicit &lt;code&gt;@prefix&lt;/code&gt; declarations in the file(s)&lt;/li&gt;
&lt;li&gt;Auto-discovered prefixes (by finding common IRI stems in the data)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For N-Triples files (which lack &lt;code&gt;@prefix&lt;/code&gt; declarations), that fourth step is critical. It builds a prefix tree of all IRIs seen, then identifies natural break points where enough IRIs share a stem (like everything starting with &lt;code&gt;http://dbpedia.org/resource/&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second pass: classify and count&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Now that it knows the namespaces, &lt;code&gt;chilon_rs&lt;/code&gt; goes through the data again, replacing every IRI with its namespace alias:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dbr:Einstein&lt;/code&gt; → &lt;code&gt;dbr&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;owl:Class&lt;/code&gt; → &lt;code&gt;owl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;foaf:Person&lt;/code&gt; → &lt;code&gt;foaf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Blank nodes become &lt;code&gt;BLANK&lt;/code&gt; (they’re anonymous by definition)&lt;/li&gt;
&lt;li&gt;Literals get classified by their datatype (&lt;code&gt;xsd:string&lt;/code&gt;, &lt;code&gt;xsd:date&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every triple becomes a tuple of namespace aliases. &lt;code&gt;chilon_rs&lt;/code&gt; counts how many times each &lt;em&gt;(subject-ns, predicate-ns, object-ns)&lt;/em&gt; pattern appears. The result is a tiny summary graph where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodes = namespaces&lt;/li&gt;
&lt;li&gt;Edges = namespace-to-namespace triple patterns&lt;/li&gt;
&lt;li&gt;Edge weights = frequency of that pattern in the original graph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s a concrete example. Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight turtle"&gt;&lt;code&gt;&lt;span class="nn"&gt;dbr:&lt;/span&gt;&lt;span class="n"&gt;Einstein&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dbp:&lt;/span&gt;&lt;span class="n"&gt;birthDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"1879-03-14"&lt;/span&gt;&lt;span class="p"&gt;^^&lt;/span&gt;&lt;span class="nn"&gt;xsd:&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
             &lt;/span&gt;&lt;span class="nn"&gt;ex:&lt;/span&gt;&lt;span class="n"&gt;livedIn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;yago:&lt;/span&gt;&lt;span class="n"&gt;Berlin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nn"&gt;dbr:&lt;/span&gt;&lt;span class="n"&gt;Hawking&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;ex:&lt;/span&gt;&lt;span class="n"&gt;bornIn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;yago:&lt;/span&gt;&lt;span class="n"&gt;Oxford&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output summary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight turtle"&gt;&lt;code&gt;&lt;span class="nl"&gt;&amp;lt;#t0001&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#DatatypeLink&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;Statement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#dbr&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#dbp&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#xsd&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#occurrences&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;^^&lt;/span&gt;&lt;span class="nn"&gt;xsd:&lt;/span&gt;&lt;span class="n"&gt;integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#t0002&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#NamespaceLink&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;Statement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#dbr&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;predicate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#ex&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;rdf:&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#yago&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;&amp;lt;#occurrences&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;^^&lt;/span&gt;&lt;span class="nn"&gt;xsd:&lt;/span&gt;&lt;span class="n"&gt;integer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example produces three namespace nodes (&lt;code&gt;dbr&lt;/code&gt;, &lt;code&gt;xsd&lt;/code&gt;, &lt;code&gt;yago&lt;/code&gt;) with edges (&lt;code&gt;dbp&lt;/code&gt; and &lt;code&gt;ex&lt;/code&gt;). The summary tells you: “DBpedia resources connect to datatypes once, and DBpedia resources connect to Yago via an external property twice.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7mxnym2rmx295hl221t.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7mxnym2rmx295hl221t.webp" alt="Example visualization" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identifiers often carry meaning
&lt;/h2&gt;

&lt;p&gt;The RDF spec is technically correct: the namespace &lt;code&gt;http://dbpedia.org/resource/&lt;/code&gt; doesn’t &lt;em&gt;logically&lt;/em&gt; mean “this is a DBpedia resource” in the model-theoretic sense. But pragmatically? It absolutely does. When you see &lt;code&gt;dbr:&lt;/code&gt; in the wild, you’re looking at data that came from, or was intended to interoperate with, DBpedia.&lt;/p&gt;

&lt;p&gt;This isn’t unique to RDF. Think about file extensions: the spec for a &lt;code&gt;.txt&lt;/code&gt; file doesn’t say it &lt;em&gt;must&lt;/em&gt; contain plain text, but if you see &lt;code&gt;notes.txt&lt;/code&gt;, you reasonably assume it’s not a JPEG. Or &lt;code&gt;HTTP User-Agent&lt;/code&gt; strings: they’re not semantically meaningful in the protocol, but they tell you useful things about the client.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chilon_rs&lt;/code&gt; leans into that pragmatic reality. It doesn’t claim namespaces have formal RDF semantics. It treats them as useful heuristic signals about the graph’s provenance and intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the summaries reveal
&lt;/h2&gt;

&lt;p&gt;I ran &lt;code&gt;chilon_rs&lt;/code&gt; on 11 real-world knowledge graphs, from tiny (&amp;lt;1M triples) to massive (90+ GB, billions of triples):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Graph&lt;/th&gt;
&lt;th&gt;Scale&lt;/th&gt;
&lt;th&gt;What the namespace summary showed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ClaimsKG&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;Dominated by fact-checking namespaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CrunchBase&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;Heavy use of CrunchBase’s own namespace and FOAF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DbKwik&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;Mostly its own namespace, some external science vocabularies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KBpedia&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Own namespace plus standard web vocabularies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinkedMDB&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Movie namespace, some FOAF for people&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCyc&lt;/td&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td&gt;Cyc ontology namespace dominant, minimal external links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DBLP&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Publications namespace with some FOAF for authors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DBpedia&lt;/td&gt;
&lt;td&gt;Massive&lt;/td&gt;
&lt;td&gt;Core namespace &lt;code&gt;db&lt;/code&gt;, connected to &lt;code&gt;wiki&lt;/code&gt;, &lt;code&gt;rdf&lt;/code&gt;, &lt;code&gt;prov&lt;/code&gt;, &lt;code&gt;foaf&lt;/code&gt;, &lt;code&gt;commo4&lt;/code&gt;, &lt;code&gt;xsd&lt;/code&gt;, &lt;code&gt;dc&lt;/code&gt; — the LOD hub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikidata&lt;/td&gt;
&lt;td&gt;Massive&lt;/td&gt;
&lt;td&gt;Large number of internal Wikidata namespaces plus some external vocabularies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WordNet&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;td&gt;Primarily its own namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yago&lt;/td&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td&gt;Mostly self-contained, its own namespace and &lt;code&gt;yago-schema&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The patterns jump out in the visualization. Node size = namespace frequency. Edge thickness = how often those namespaces co-occur in triples. In the DBpedia summary, you see a dense core with strong links to &lt;code&gt;wiki&lt;/code&gt;, &lt;code&gt;rdf&lt;/code&gt;, &lt;code&gt;prov&lt;/code&gt;, &lt;code&gt;foaf&lt;/code&gt;, and other standard vocabularies — it’s the LOD hub connecting everything else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpzmnwvgun1ffyv2mv6wl.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpzmnwvgun1ffyv2mv6wl.webp" alt="Visualization for DBpedia" width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical uses for a “lossy” summary
&lt;/h2&gt;

&lt;p&gt;You wouldn’t use this summary to answer “What is Albert Einstein’s birthplace?” But it’s great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source selection&lt;/strong&gt; : Federating a SPARQL query? Check which namespaces your query uses, then only hit endpoints that cover those namespaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estimation&lt;/strong&gt; : Roughly predict query result sizes by looking at edge weights in the summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph comparison&lt;/strong&gt; : Two graphs with similar namespace profiles are likely covering similar domains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; : See what vocabularies a graph actually uses. No need to parse the whole dump to find that it uses &lt;code&gt;schema:&lt;/code&gt; for creative works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation&lt;/strong&gt; : The interactive visualization lets you explore the graph’s “shape” at a glance. Is it centralized? Fragmented? Does it have clear boundaries?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;p&gt;This approach throws away information by design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You lose individual identity: all DBpedia resources look the same in the summary.&lt;/li&gt;
&lt;li&gt;You lose internal structure: within &lt;code&gt;foaf:&lt;/code&gt;, you don’t see the difference between &lt;code&gt;foaf:Person&lt;/code&gt; and &lt;code&gt;foaf:Organization&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Bad namespace hygiene hurts: if a graph uses inconsistent or opaque URL patterns, the inference step might misfire.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/andrefs/chilon_rs
&lt;span class="nb"&gt;cd &lt;/span&gt;chilon_rs
cargo build &lt;span class="nt"&gt;--release&lt;/span&gt;
target/release/chilon_rs your-file.ttl &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output includes both the summary graph (as RDF) and a standalone HTML visualization: no server needed, just open it in your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/andrefs/chilon_rs" rel="noopener noreferrer"&gt;github.com/andrefs/chilon_rs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Crate: &lt;a href="https://crates.io/crates/chilon_rs" rel="noopener noreferrer"&gt;crates.io/crates/chilon_rs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Paper: &lt;a href="https://doi.org/10.1007/978-3-031-40960-8_8" rel="noopener noreferrer"&gt;Summarization of Massive RDF Graphs Using Identifier Classification&lt;/a&gt; (ICCS 2023, Springer LNCS)&lt;/li&gt;
&lt;li&gt;Results: &lt;a href="https://andrefs.github.io/chilon_rs" rel="noopener noreferrer"&gt;andrefs.github.io/chilon_rs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>work</category>
      <category>rust</category>
      <category>rdf</category>
      <category>knowledgegraphs</category>
    </item>
  </channel>
</rss>
