summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2023-03-30 17:43:39 +0000
committerSam Thursfield <sam@afuera.me.uk>2023-03-30 17:43:39 +0000
commit921a2009ffb32c7feb3d94908f7d8e13f984c7be (patch)
tree8019e49b52018878a6be1bcc93b2f04299f018b7
parentc3f3620be72aee6168bf774f5e18ded4bd733caa (diff)
parentb860a759806c46b0bfa0cd4e650a9f70da61d1d6 (diff)
downloadtracker-921a2009ffb32c7feb3d94908f7d8e13f984c7be.tar.gz
Merge branch 'wip/carlosg/docs-improvements-pt2' into 'master'
Doc improvements See merge request https://gitlab.gnome.org/GNOME/tracker/-/merge_requests/588
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--docs/manpages/meson.build18
-rw-r--r--docs/reference/libtracker-sparql/commandline.md.in9
-rw-r--r--docs/reference/libtracker-sparql/embed-files.py9
-rwxr-xr-xdocs/reference/libtracker-sparql/generate-cli-reference.py140
-rw-r--r--docs/reference/libtracker-sparql/images/connections-diagram.dot45
-rw-r--r--docs/reference/libtracker-sparql/images/connections-diagram.svg97
-rw-r--r--docs/reference/libtracker-sparql/images/containment.dot11
-rw-r--r--docs/reference/libtracker-sparql/images/containment.svg37
-rw-r--r--docs/reference/libtracker-sparql/images/example-interpretation-containment.dot45
-rw-r--r--docs/reference/libtracker-sparql/images/example-interpretation-containment.svg111
-rw-r--r--docs/reference/libtracker-sparql/images/icon-deprecated.svg72
-rw-r--r--docs/reference/libtracker-sparql/images/icon-fulltextindexed.svg2
-rw-r--r--docs/reference/libtracker-sparql/images/icon-multivalue.svg71
-rw-r--r--docs/reference/libtracker-sparql/images/icon-notify.svg2
-rw-r--r--docs/reference/libtracker-sparql/images/icon-superproperty.svg4
-rw-r--r--docs/reference/libtracker-sparql/images/interpretation.dot11
-rw-r--r--docs/reference/libtracker-sparql/images/interpretation.svg37
-rw-r--r--docs/reference/libtracker-sparql/meson.build21
-rw-r--r--docs/reference/libtracker-sparql/nie-introduction.md65
-rw-r--r--docs/reference/libtracker-sparql/tracker-sparql.toml.in8
-rw-r--r--docs/tools/tracker-docgen-md.c44
22 files changed, 666 insertions, 195 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 096d96c38..951aef118 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -443,8 +443,10 @@ test-website:
export tracker_miners_commit=$(git -C ./extra/tracker-miners rev-parse HEAD)
./docs/website/build.py --output=website --api-docs="$install_prefix/share/doc/Tracker-3.0" --tracker-commit=${tracker_commit} --man-pages ./docs/manpages/*.txt ./extra/tracker-miners/docs/manpages/*.txt
artifacts:
+ expose_as: 'Website'
paths:
- website
+ - website/index.html
needs:
- build-fedora-container@x86_64
diff --git a/docs/manpages/meson.build b/docs/manpages/meson.build
index 74afe3a71..babc3a699 100644
--- a/docs/manpages/meson.build
+++ b/docs/manpages/meson.build
@@ -1,17 +1,23 @@
manpages = [
- ['tracker3-endpoint', 1],
- ['tracker3-export', 1],
- ['tracker3-import', 1],
- ['tracker3-sparql', 1],
- ['tracker3-sql', 1],
- ['tracker-xdg-portal-3', 1],
+ ['tracker3-endpoint', 1, true],
+ ['tracker3-export', 1, true],
+ ['tracker3-import', 1, true],
+ ['tracker3-sparql', 1, true],
+ ['tracker3-sql', 1, true],
+ ['tracker-xdg-portal-3', 1, false],
]
+manpage_files = []
+
foreach m : manpages
name = m[0]
section = m[1]
+ documentation = m[2]
manpage = '@0@.@1@'.format(name, section)
+ if documentation
+ manpage_files += join_paths(meson.current_source_dir(), manpage + '.txt')
+ endif
custom_target(manpage,
command: [a2x,
diff --git a/docs/reference/libtracker-sparql/commandline.md.in b/docs/reference/libtracker-sparql/commandline.md.in
new file mode 100644
index 000000000..66bfac80e
--- /dev/null
+++ b/docs/reference/libtracker-sparql/commandline.md.in
@@ -0,0 +1,9 @@
+Title: Commandline reference
+Slug: commandline
+...
+
+Tracker offers a number of commandline utilities to
+manipulate, create, and access SPARQL endpoints and
+Tracker databases.
+
+{includes}
diff --git a/docs/reference/libtracker-sparql/embed-files.py b/docs/reference/libtracker-sparql/embed-files.py
index 05354d91d..ce48558a0 100644
--- a/docs/reference/libtracker-sparql/embed-files.py
+++ b/docs/reference/libtracker-sparql/embed-files.py
@@ -8,7 +8,7 @@ f.close()
dirname = os.path.dirname(sys.argv[1])
-regex = re.compile('{{(.*)}}')
+regex = re.compile('{{([^\}\}]*)}}')
matches = regex.findall(content)
replacements = {}
@@ -17,7 +17,12 @@ for m in matches:
f = open(os.path.join(dirname, m.strip()))
embedded = f.read()
except:
- embedded = ''
+ if (len(sys.argv) > 2):
+ try:
+ f = open (os.path.join(sys.argv[3], m.strip()))
+ embedded = f.read()
+ except:
+ embedded = ''
escaped = embedded.replace('\\', '\\\\')
replace = re.compile('{{' + m + '}}')
diff --git a/docs/reference/libtracker-sparql/generate-cli-reference.py b/docs/reference/libtracker-sparql/generate-cli-reference.py
new file mode 100755
index 000000000..fc87a9726
--- /dev/null
+++ b/docs/reference/libtracker-sparql/generate-cli-reference.py
@@ -0,0 +1,140 @@
+#!/usr/bin/env python3
+# Tracker commandline reference markdown generator.
+#
+# Copyright 2020, Sam Thursfield <sam@afuera.me.uk>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+import argparse
+import contextlib
+import logging
+import pathlib
+import shutil
+import subprocess
+import sys
+import tempfile
+
+log = logging.getLogger('generate-cli-reference.py')
+
+asciidoc = shutil.which('asciidoc')
+mkdocs = shutil.which('mkdocs')
+xmlto = shutil.which('xmlto')
+
+
+def argument_parser():
+ parser = argparse.ArgumentParser(
+ description="Tracker website build script")
+ parser.add_argument('--template', required=True, metavar='TEMPLATE',
+ help="Template")
+ parser.add_argument('--output', required=True, metavar='OUTPUT',
+ help="Output file")
+ parser.add_argument('--debug', dest='debug', action='store_true',
+ help="Enable detailed logging to stderr")
+ parser.add_argument('--man-pages', nargs='+', required=True,
+ help="List of Asciidoc manual page source")
+ return parser
+
+
+class Manpages():
+ def run(self, command):
+ command = [str(c) for c in command]
+ log.debug("Running: %s", ' '.join(command))
+ subprocess.run(command, check=True)
+
+ def generate_manpage_xml(self, in_path, out_path):
+ """Generate a docbook XML file for an Asciidoc manpage source file."""
+ self.run([asciidoc, '--backend', 'docbook', '--doctype', 'manpage',
+ '--out-file', out_path, in_path])
+
+ def generate_manpage_html(self, in_path, out_path):
+ """Generate a HTML page from a docbook XML file"""
+ self.run([xmlto, 'xhtml-nochunks', '-o', out_path, in_path])
+
+ def generate_toplevel_markdown(self, in_path, out_path, html_files):
+ """Generate the commandline reference page."""
+
+ includes = []
+ for html_file in sorted(html_files):
+ path = pathlib.Path(html_file)
+ filename = path.name;
+ title = filename.split('.')[0]
+ if title.startswith('tracker3-'):
+ title = 'tracker3 ' + title[9:]
+ includes.append("## %s\n\n%s\n\n" % (title, path.read_text()))
+
+ text = in_path.read_text()
+ text = text.format(
+ includes='\n'.join(includes)
+ )
+ out_path.write_text(text)
+
+
+@contextlib.contextmanager
+def tmpdir():
+ path = pathlib.Path(tempfile.mkdtemp())
+ log.debug("Created temporary directory %s", path)
+ try:
+ yield path
+ finally:
+ log.debug("Removed temporary directory %s", path)
+ shutil.rmtree(path)
+
+
+def main():
+ args = argument_parser().parse_args()
+ template_file = pathlib.Path(args.template)
+ output_file = pathlib.Path(args.output)
+
+ if args.debug:
+ logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
+ else:
+ logging.basicConfig(stream=sys.stderr, level=logging.INFO)
+
+ if output_file.exists():
+ output_file.unlink()
+
+ if asciidoc is None:
+ raise RuntimeError("The 'asciidoc' tool is required.")
+ if xmlto is None:
+ raise RuntimeError("The 'xmlto' tool is required.")
+
+ log.info("Generating online man pages")
+ with tmpdir() as workdir:
+ manpages = Manpages()
+
+ htmldir = workdir
+ htmlfiles = []
+
+ for man_page in args.man_pages:
+ asciidocpath = pathlib.Path(man_page)
+ xmlpath = workdir.joinpath(asciidocpath.stem + '.xml')
+
+ manpages.generate_manpage_xml(asciidocpath, xmlpath)
+ manpages.generate_manpage_html(xmlpath, htmldir)
+
+ htmlpath = htmldir.joinpath(xmlpath.with_suffix('.html').name)
+ htmlfiles.append(htmlpath)
+
+ manpages.generate_toplevel_markdown(template_file, output_file, htmlfiles)
+
+ log.info("Commandline reference available at %s .", args.output)
+
+
+try:
+ main()
+except (RuntimeError, subprocess.CalledProcessError) as e:
+ sys.stderr.write(f"ERROR: {e}\n")
+ sys.exit(1)
diff --git a/docs/reference/libtracker-sparql/images/connections-diagram.dot b/docs/reference/libtracker-sparql/images/connections-diagram.dot
new file mode 100644
index 000000000..6943a1276
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/connections-diagram.dot
@@ -0,0 +1,45 @@
+graph {
+ rankdir=LR;
+ bgcolor=transparent;
+ fontname="sans-serif";
+ compound=true;
+ node [shape="box", style="rounded", border=0, fontname="sans-serif"];
+
+ subgraph cluster_1 {
+ style="rounded";
+ color="lightgrey";
+ label = "Application"
+ tooltip = "Application"
+ fontsize=10;
+
+ node [shape="cylinder",label="Rdf data",tooltip="Rdf data"]; ts1;
+ }
+
+ subgraph cluster_2 {
+ style="rounded";
+ color="lightgrey";
+ label = "Http Sparql Endpoint"
+ tooltip = "Http Sparql Endpoint"
+ fontsize=10;
+
+ node [shape="cylinder",label="Rdf data", tooltip="Rdf data"]; ts2;
+ }
+
+ subgraph cluster_3 {
+ style="rounded";
+ color="lightgrey";
+ label = "D-Bus Sparql Endpoint"
+ tooltip = "D-Bus Sparql Endpoint"
+ fontsize=10;
+
+ node [shape="cylinder",label="Rdf data",tooltip="Rdf data"]; ts3;
+ }
+
+ node [shape="box", style="", border=0, fontname="sans-serif",fixedsize=true,height=1]; "Http"; "D-Bus";
+
+ ts1 -- "Http" [ltail=cluster_1];
+ ts1 -- "D-Bus" [ltail=cluster_1];
+
+ "Http" -- "ts2" [lhead=cluster_2]
+ "D-Bus" -- "ts3" [lhead=cluster_3]
+}
diff --git a/docs/reference/libtracker-sparql/images/connections-diagram.svg b/docs/reference/libtracker-sparql/images/connections-diagram.svg
new file mode 100644
index 000000000..d9b3b4c87
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/connections-diagram.svg
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.1.0 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="332pt" height="187pt"
+ viewBox="0.00 0.00 332.00 187.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 183)">
+<g id="clust1" class="cluster">
+<title>cluster_1</title>
+<g id="a_clust1"><a xlink:title="Application">
+<path fill="none" stroke="lightgrey" d="M20,-55C20,-55 83,-55 83,-55 89,-55 95,-61 95,-67 95,-67 95,-114 95,-114 95,-120 89,-126 83,-126 83,-126 20,-126 20,-126 14,-126 8,-120 8,-114 8,-114 8,-67 8,-67 8,-61 14,-55 20,-55"/>
+<text text-anchor="middle" x="51.5" y="-114" font-family="sans-serif" font-size="10.00">Application</text>
+</a>
+</g>
+</g>
+<g id="clust2" class="cluster">
+<title>cluster_2</title>
+<g id="a_clust2"><a xlink:title="Http Sparql Endpoint">
+<path fill="none" stroke="lightgrey" d="M221,-100C221,-100 309,-100 309,-100 315,-100 321,-106 321,-112 321,-112 321,-159 321,-159 321,-165 315,-171 309,-171 309,-171 221,-171 221,-171 215,-171 209,-165 209,-159 209,-159 209,-112 209,-112 209,-106 215,-100 221,-100"/>
+<text text-anchor="middle" x="265" y="-159" font-family="sans-serif" font-size="10.00">Http Sparql Endpoint</text>
+</a>
+</g>
+</g>
+<g id="clust3" class="cluster">
+<title>cluster_3</title>
+<g id="a_clust3"><a xlink:title="D&#45;Bus Sparql Endpoint">
+<path fill="none" stroke="lightgrey" d="M217,-10C217,-10 312,-10 312,-10 318,-10 324,-16 324,-22 324,-22 324,-69 324,-69 324,-75 318,-81 312,-81 312,-81 217,-81 217,-81 211,-81 205,-75 205,-69 205,-69 205,-22 205,-22 205,-16 211,-10 217,-10"/>
+<text text-anchor="middle" x="264.5" y="-69" font-family="sans-serif" font-size="10.00">D&#45;Bus Sparql Endpoint</text>
+</a>
+</g>
+</g>
+<!-- ts1 -->
+<g id="node1" class="node">
+<title>ts1</title>
+<g id="a_node1"><a xlink:title="Rdf data">
+<path fill="none" stroke="black" d="M87,-95.73C87,-97.53 71.09,-99 51.5,-99 31.91,-99 16,-97.53 16,-95.73 16,-95.73 16,-66.27 16,-66.27 16,-64.47 31.91,-63 51.5,-63 71.09,-63 87,-64.47 87,-66.27 87,-66.27 87,-95.73 87,-95.73"/>
+<path fill="none" stroke="black" d="M87,-95.73C87,-93.92 71.09,-92.45 51.5,-92.45 31.91,-92.45 16,-93.92 16,-95.73"/>
+<text text-anchor="middle" x="51.5" y="-77.3" font-family="sans-serif" font-size="14.00">Rdf data</text>
+</a>
+</g>
+</g>
+<!-- Http -->
+<g id="node4" class="node">
+<title>Http</title>
+<polygon fill="none" stroke="black" points="177,-162 123,-162 123,-90 177,-90 177,-162"/>
+<text text-anchor="middle" x="150" y="-122.3" font-family="sans-serif" font-size="14.00">Http</text>
+</g>
+<!-- ts1&#45;&#45;Http -->
+<g id="edge1" class="edge">
+<title>ts1&#45;&#45;Http</title>
+<path fill="none" stroke="black" d="M95,-100.82C104.44,-105.22 114.18,-109.76 122.75,-113.76"/>
+</g>
+<!-- D&#45;Bus -->
+<g id="node5" class="node">
+<title>D&#45;Bus</title>
+<polygon fill="none" stroke="black" points="177,-72 123,-72 123,0 177,0 177,-72"/>
+<text text-anchor="middle" x="150" y="-32.3" font-family="sans-serif" font-size="14.00">D&#45;Bus</text>
+</g>
+<!-- ts1&#45;&#45;D&#45;Bus -->
+<g id="edge2" class="edge">
+<title>ts1&#45;&#45;D&#45;Bus</title>
+<path fill="none" stroke="black" d="M95,-61.18C104.42,-56.79 114.14,-52.25 122.69,-48.27"/>
+</g>
+<!-- ts2 -->
+<g id="node2" class="node">
+<title>ts2</title>
+<g id="a_node2"><a xlink:title="Rdf data">
+<path fill="none" stroke="black" d="M300,-140.73C300,-142.53 284.09,-144 264.5,-144 244.91,-144 229,-142.53 229,-140.73 229,-140.73 229,-111.27 229,-111.27 229,-109.47 244.91,-108 264.5,-108 284.09,-108 300,-109.47 300,-111.27 300,-111.27 300,-140.73 300,-140.73"/>
+<path fill="none" stroke="black" d="M300,-140.73C300,-138.92 284.09,-137.45 264.5,-137.45 244.91,-137.45 229,-138.92 229,-140.73"/>
+<text text-anchor="middle" x="264.5" y="-122.3" font-family="sans-serif" font-size="14.00">Rdf data</text>
+</a>
+</g>
+</g>
+<!-- ts3 -->
+<g id="node3" class="node">
+<title>ts3</title>
+<g id="a_node3"><a xlink:title="Rdf data">
+<path fill="none" stroke="black" d="M300,-50.73C300,-52.53 284.09,-54 264.5,-54 244.91,-54 229,-52.53 229,-50.73 229,-50.73 229,-21.27 229,-21.27 229,-19.47 244.91,-18 264.5,-18 284.09,-18 300,-19.47 300,-21.27 300,-21.27 300,-50.73 300,-50.73"/>
+<path fill="none" stroke="black" d="M300,-50.73C300,-48.92 284.09,-47.45 264.5,-47.45 244.91,-47.45 229,-48.92 229,-50.73"/>
+<text text-anchor="middle" x="264.5" y="-32.3" font-family="sans-serif" font-size="14.00">Rdf data</text>
+</a>
+</g>
+</g>
+<!-- Http&#45;&#45;ts2 -->
+<g id="edge3" class="edge">
+<title>Http&#45;&#45;ts2</title>
+<path fill="none" stroke="black" d="M177.38,-126C186.88,-126 197.99,-126 209,-126"/>
+</g>
+<!-- D&#45;Bus&#45;&#45;ts3 -->
+<g id="edge4" class="edge">
+<title>D&#45;Bus&#45;&#45;ts3</title>
+<path fill="none" stroke="black" d="M177.38,-36C185.73,-36 195.32,-36 205,-36"/>
+</g>
+</g>
+</svg>
diff --git a/docs/reference/libtracker-sparql/images/containment.dot b/docs/reference/libtracker-sparql/images/containment.dot
new file mode 100644
index 000000000..b668c7e11
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/containment.dot
@@ -0,0 +1,11 @@
+digraph {
+ rankdir=LR;
+ bgcolor=transparent;
+ node [shape="box", style="filled,rounded",fontname="sans-serif", fixedsize=true,width=2];
+
+ "DataObject" [fillcolor="#ff000077"];
+ "InformationElement" [fillcolor="#00ff0077"];
+
+ "DataObject":n -> "InformationElement":n [color="#777777ff",fontcolor="#777777ff",label="isPartOf",fontsize=10,fontname="sans-serif"];
+ "InformationElement":s -> "DataObject":s [color="#777777ff",fontcolor="#777777ff",label="hasPart",fontsize=10,fontname="sans-serif"];
+}
diff --git a/docs/reference/libtracker-sparql/images/containment.svg b/docs/reference/libtracker-sparql/images/containment.svg
new file mode 100644
index 000000000..38788aead
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/containment.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.1.0 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="370pt" height="112pt"
+ viewBox="0.00 0.00 370.00 111.55" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 107.55)">
+<!-- DataObject -->
+<g id="node1" class="node">
+<title>DataObject</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M132,-73.55C132,-73.55 12,-73.55 12,-73.55 6,-73.55 0,-67.55 0,-61.55 0,-61.55 0,-49.55 0,-49.55 0,-43.55 6,-37.55 12,-37.55 12,-37.55 132,-37.55 132,-37.55 138,-37.55 144,-43.55 144,-49.55 144,-49.55 144,-61.55 144,-61.55 144,-67.55 138,-73.55 132,-73.55"/>
+<text text-anchor="middle" x="72" y="-51.85" font-family="sans-serif" font-size="14.00">DataObject</text>
+</g>
+<!-- InformationElement -->
+<g id="node2" class="node">
+<title>InformationElement</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M350,-73.55C350,-73.55 230,-73.55 230,-73.55 224,-73.55 218,-67.55 218,-61.55 218,-61.55 218,-49.55 218,-49.55 218,-43.55 224,-37.55 230,-37.55 230,-37.55 350,-37.55 350,-37.55 356,-37.55 362,-43.55 362,-49.55 362,-49.55 362,-61.55 362,-61.55 362,-67.55 356,-73.55 350,-73.55"/>
+<text text-anchor="middle" x="290" y="-51.85" font-family="sans-serif" font-size="14.00">InformationElement</text>
+</g>
+<!-- DataObject&#45;&gt;InformationElement -->
+<g id="edge1" class="edge">
+<title>DataObject:n&#45;&gt;InformationElement:n</title>
+<path fill="none" stroke="#777777" d="M72,-74.55C72,-95.88 241.15,-98.43 281.45,-82.17"/>
+<polygon fill="#777777" stroke="#777777" points="283.74,-84.83 288.87,-75.56 279.08,-79.6 283.74,-84.83"/>
+<text text-anchor="middle" x="181" y="-95.55" font-family="sans-serif" font-size="10.00" fill="#777777">isPartOf</text>
+</g>
+<!-- InformationElement&#45;&gt;DataObject -->
+<g id="edge2" class="edge">
+<title>InformationElement:s&#45;&gt;DataObject:s</title>
+<path fill="none" stroke="#777777" d="M290,-36.55C290,8.11 104.73,11.6 75.78,-26.08"/>
+<polygon fill="#777777" stroke="#777777" points="72.62,-24.53 72.51,-35.12 79.21,-26.91 72.62,-24.53"/>
+<text text-anchor="middle" x="181" y="-3.55" font-family="sans-serif" font-size="10.00" fill="#777777">hasPart</text>
+</g>
+</g>
+</svg>
diff --git a/docs/reference/libtracker-sparql/images/example-interpretation-containment.dot b/docs/reference/libtracker-sparql/images/example-interpretation-containment.dot
new file mode 100644
index 000000000..f49fdd2be
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/example-interpretation-containment.dot
@@ -0,0 +1,45 @@
+digraph {
+ rankdir=LR;
+ bgcolor=transparent;
+ node [shape="box", style="filled,rounded",fontname="sans-serif", fixedsize=true,width=2.5];
+
+ a [fillcolor="#ff000077",label="FileDataObject"];
+ b [fillcolor="#ff000077",label="FileDataObject"];
+ c [fillcolor="#ff000077",label="Attachment"];
+ d [fillcolor="#ff000077",label="EmbeddedFileDataObject"];
+
+ a2 [fillcolor="#00ff0077",label="Folder"];
+ b2 [fillcolor="#00ff0077",label="Document"];
+ c2 [fillcolor="#00ff0077",label="Archive"];
+ d2 [fillcolor="#00ff0077",label="Photo"];
+
+ subgraph cluster_do {
+ color=transparent;
+ label = "DataObject";
+ fontname="sans-serif";
+ fontsize=10;
+ a;
+ b;
+ c;
+ d;
+ }
+
+ subgraph cluster_ie {
+ color=transparent;
+ label = "InformationElement";
+ fontname="sans-serif";
+ fontsize=10;
+ a2;
+ b2;
+ c2;
+ d2;
+ }
+
+ a -> a2 [color="#777777ff",dir=back];
+ a2 -> b:ne [color="#777777ff",dir=back];
+ b -> b2 [color="#777777ff",dir=back];
+ b2 -> c:ne [color="#777777ff",dir=back];
+ c -> c2 [color="#777777ff",dir=back];
+ c2 -> d:ne [color="#777777ff",dir=back];
+ d -> d2 [color="#777777ff",dir=back];
+}
diff --git a/docs/reference/libtracker-sparql/images/example-interpretation-containment.svg b/docs/reference/libtracker-sparql/images/example-interpretation-containment.svg
new file mode 100644
index 000000000..8a7ba7c44
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/example-interpretation-containment.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.1.0 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="436pt" height="257pt"
+ viewBox="0.00 0.00 436.00 257.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 253)">
+<g id="clust1" class="cluster">
+<title>cluster_do</title>
+<polygon fill="none" stroke="none" points="8,-8 8,-241 204,-241 204,-8 8,-8"/>
+<text text-anchor="middle" x="106" y="-229" font-family="sans-serif" font-size="10.00">DataObject</text>
+</g>
+<g id="clust2" class="cluster">
+<title>cluster_ie</title>
+<polygon fill="none" stroke="none" points="224,-8 224,-241 420,-241 420,-8 224,-8"/>
+<text text-anchor="middle" x="322" y="-229" font-family="sans-serif" font-size="10.00">InformationElement</text>
+</g>
+<!-- a -->
+<g id="node1" class="node">
+<title>a</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M184,-214C184,-214 28,-214 28,-214 22,-214 16,-208 16,-202 16,-202 16,-190 16,-190 16,-184 22,-178 28,-178 28,-178 184,-178 184,-178 190,-178 196,-184 196,-190 196,-190 196,-202 196,-202 196,-208 190,-214 184,-214"/>
+<text text-anchor="middle" x="106" y="-192.3" font-family="sans-serif" font-size="14.00">FileDataObject</text>
+</g>
+<!-- a2 -->
+<g id="node5" class="node">
+<title>a2</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M400,-214C400,-214 244,-214 244,-214 238,-214 232,-208 232,-202 232,-202 232,-190 232,-190 232,-184 238,-178 244,-178 244,-178 400,-178 400,-178 406,-178 412,-184 412,-190 412,-190 412,-202 412,-202 412,-208 406,-214 400,-214"/>
+<text text-anchor="middle" x="322" y="-192.3" font-family="sans-serif" font-size="14.00">Folder</text>
+</g>
+<!-- a&#45;&gt;a2 -->
+<g id="edge1" class="edge">
+<title>a&#45;&gt;a2</title>
+<path fill="none" stroke="#777777" d="M207.52,-196C215.56,-196 223.64,-196 231.59,-196"/>
+<polygon fill="#777777" stroke="#777777" points="207.72,-192.5 197.72,-196 207.72,-199.5 207.72,-192.5"/>
+</g>
+<!-- b -->
+<g id="node2" class="node">
+<title>b</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M184,-160C184,-160 28,-160 28,-160 22,-160 16,-154 16,-148 16,-148 16,-136 16,-136 16,-130 22,-124 28,-124 28,-124 184,-124 184,-124 190,-124 196,-130 196,-136 196,-136 196,-148 196,-148 196,-154 190,-160 184,-160"/>
+<text text-anchor="middle" x="106" y="-138.3" font-family="sans-serif" font-size="14.00">FileDataObject</text>
+</g>
+<!-- b2 -->
+<g id="node6" class="node">
+<title>b2</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M400,-160C400,-160 244,-160 244,-160 238,-160 232,-154 232,-148 232,-148 232,-136 232,-136 232,-130 238,-124 244,-124 244,-124 400,-124 400,-124 406,-124 412,-130 412,-136 412,-136 412,-148 412,-148 412,-154 406,-160 400,-160"/>
+<text text-anchor="middle" x="322" y="-138.3" font-family="sans-serif" font-size="14.00">Document</text>
+</g>
+<!-- b&#45;&gt;b2 -->
+<g id="edge3" class="edge">
+<title>b&#45;&gt;b2</title>
+<path fill="none" stroke="#777777" d="M207.52,-142C215.56,-142 223.64,-142 231.59,-142"/>
+<polygon fill="#777777" stroke="#777777" points="207.72,-138.5 197.72,-142 207.72,-145.5 207.72,-138.5"/>
+</g>
+<!-- c -->
+<g id="node3" class="node">
+<title>c</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M184,-106C184,-106 28,-106 28,-106 22,-106 16,-100 16,-94 16,-94 16,-82 16,-82 16,-76 22,-70 28,-70 28,-70 184,-70 184,-70 190,-70 196,-76 196,-82 196,-82 196,-94 196,-94 196,-100 190,-106 184,-106"/>
+<text text-anchor="middle" x="106" y="-84.3" font-family="sans-serif" font-size="14.00">Attachment</text>
+</g>
+<!-- c2 -->
+<g id="node7" class="node">
+<title>c2</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M400,-106C400,-106 244,-106 244,-106 238,-106 232,-100 232,-94 232,-94 232,-82 232,-82 232,-76 238,-70 244,-70 244,-70 400,-70 400,-70 406,-70 412,-76 412,-82 412,-82 412,-94 412,-94 412,-100 406,-106 400,-106"/>
+<text text-anchor="middle" x="322" y="-84.3" font-family="sans-serif" font-size="14.00">Archive</text>
+</g>
+<!-- c&#45;&gt;c2 -->
+<g id="edge5" class="edge">
+<title>c&#45;&gt;c2</title>
+<path fill="none" stroke="#777777" d="M207.52,-88C215.56,-88 223.64,-88 231.59,-88"/>
+<polygon fill="#777777" stroke="#777777" points="207.72,-84.5 197.72,-88 207.72,-91.5 207.72,-84.5"/>
+</g>
+<!-- d -->
+<g id="node4" class="node">
+<title>d</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M184,-52C184,-52 28,-52 28,-52 22,-52 16,-46 16,-40 16,-40 16,-28 16,-28 16,-22 22,-16 28,-16 28,-16 184,-16 184,-16 190,-16 196,-22 196,-28 196,-28 196,-40 196,-40 196,-46 190,-52 184,-52"/>
+<text text-anchor="middle" x="106" y="-30.3" font-family="sans-serif" font-size="14.00">EmbeddedFileDataObject</text>
+</g>
+<!-- d2 -->
+<g id="node8" class="node">
+<title>d2</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M400,-52C400,-52 244,-52 244,-52 238,-52 232,-46 232,-40 232,-40 232,-28 232,-28 232,-22 238,-16 244,-16 244,-16 400,-16 400,-16 406,-16 412,-22 412,-28 412,-28 412,-40 412,-40 412,-46 406,-52 400,-52"/>
+<text text-anchor="middle" x="322" y="-30.3" font-family="sans-serif" font-size="14.00">Photo</text>
+</g>
+<!-- d&#45;&gt;d2 -->
+<g id="edge7" class="edge">
+<title>d&#45;&gt;d2</title>
+<path fill="none" stroke="#777777" d="M207.52,-34C215.56,-34 223.64,-34 231.59,-34"/>
+<polygon fill="#777777" stroke="#777777" points="207.72,-30.5 197.72,-34 207.72,-37.5 207.72,-30.5"/>
+</g>
+<!-- a2&#45;&gt;b -->
+<g id="edge2" class="edge">
+<title>a2&#45;&gt;b:ne</title>
+<path fill="none" stroke="#777777" d="M221.38,-178.35C211.64,-173.59 202.58,-167.58 195,-160"/>
+<polygon fill="#777777" stroke="#777777" points="219.79,-181.48 230.35,-182.27 222.59,-175.06 219.79,-181.48"/>
+</g>
+<!-- b2&#45;&gt;c -->
+<g id="edge4" class="edge">
+<title>b2&#45;&gt;c:ne</title>
+<path fill="none" stroke="#777777" d="M221.38,-124.35C211.64,-119.59 202.58,-113.58 195,-106"/>
+<polygon fill="#777777" stroke="#777777" points="219.79,-127.48 230.35,-128.27 222.59,-121.06 219.79,-127.48"/>
+</g>
+<!-- c2&#45;&gt;d -->
+<g id="edge6" class="edge">
+<title>c2&#45;&gt;d:ne</title>
+<path fill="none" stroke="#777777" d="M221.38,-70.35C211.64,-65.59 202.58,-59.58 195,-52"/>
+<polygon fill="#777777" stroke="#777777" points="219.79,-73.48 230.35,-74.27 222.59,-67.06 219.79,-73.48"/>
+</g>
+</g>
+</svg>
diff --git a/docs/reference/libtracker-sparql/images/icon-deprecated.svg b/docs/reference/libtracker-sparql/images/icon-deprecated.svg
index 23ed33b17..adbe9cb10 100644
--- a/docs/reference/libtracker-sparql/images/icon-deprecated.svg
+++ b/docs/reference/libtracker-sparql/images/icon-deprecated.svg
@@ -1,71 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- viewBox="0 0 16 16"
- version="1.1"
- id="svg7384"
- height="16">
- <metadata
- id="metadata90">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Gnome Symbolic Icon Theme</dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <title
- id="title9167">Gnome Symbolic Icon Theme</title>
- <defs
- id="defs7386">
- <linearGradient
- osb:paint="solid"
- id="linearGradient7212">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop7214" />
- </linearGradient>
- </defs>
- <g
- transform="translate(-39.9997,39.98872)"
- style="display:inline"
- id="layer1" />
- <g
- transform="translate(-280.9999,406.98872)"
- style="display:inline"
- id="layer9" />
- <g
- transform="translate(-280.9999,406.98872)"
- style="display:inline"
- id="g7628" />
- <g
- transform="translate(-39.9997,39.98872)"
- style="display:inline"
- id="g6387" />
- <g
- transform="translate(-39.9997,39.98872)"
- style="display:inline"
- id="layer10" />
- <g
- transform="translate(-39.9997,39.98872)"
- id="layer12">
- <path
- d="m 47.90615,-39.89497 c -0.5255,-0.0286 -1.03823,0.28305 -1.4375,0.96875 l -6.25,11.59375 c -0.53347,0.96339 0.04822,2.34375 1.09375,2.34375 h 13.15625 c 0.98172,0 1.90311,-1.15939 1.21875,-2.34375 l -6.3125,-11.53125 c -0.39872,-0.64617 -0.94325,-1.00262 -1.46875,-1.03125 z m 0.0625,3.9375 c 0.54448,-0.0172 1.04849,0.48677 1.03125,1.03125 v 3.9375 c 0.007,0.52831 -0.47163,1 -1,1 -0.52836,0 -1.00747,-0.47169 -1,-1 v -3.9375 c -0.008,-0.4666 0.3541,-0.91253 0.8125,-1 0.0511,-0.0145 0.10345,-0.02495 0.15625,-0.03125 z m 0.03125,6.96875 c 0.552285,0 1,0.447715 1,1 0,0.552285 -0.447715,1 -1,1 -0.552285,0 -1,-0.447715 -1,-1 0,-0.552285 0.447715,-1 1,-1 z"
- id="path18112"
- style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;enable-background:new" />
- </g>
- <g
- transform="translate(-39.9997,39.98872)"
- style="display:inline"
- id="layer11" />
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" viewBox="0 0 16 16" version="1.1" height="16"><g id="icon-deprecated" class="icon"><rect width="16" height="16" fill="#00000000"/><g transform="translate(-39.9997,39.98872)"><path d="m 47.90615,-39.89497 c -0.5255,-0.0286 -1.03823,0.28305 -1.4375,0.96875 l -6.25,11.59375 c -0.53347,0.96339 0.04822,2.34375 1.09375,2.34375 h 13.15625 c 0.98172,0 1.90311,-1.15939 1.21875,-2.34375 l -6.3125,-11.53125 c -0.39872,-0.64617 -0.94325,-1.00262 -1.46875,-1.03125 z m 0.0625,3.9375 c 0.54448,-0.0172 1.04849,0.48677 1.03125,1.03125 v 3.9375 c 0.007,0.52831 -0.47163,1 -1,1 -0.52836,0 -1.00747,-0.47169 -1,-1 v -3.9375 c -0.008,-0.4666 0.3541,-0.91253 0.8125,-1 0.0511,-0.0145 0.10345,-0.02495 0.15625,-0.03125 z m 0.03125,6.96875 c 0.552285,0 1,0.447715 1,1 0,0.552285 -0.447715,1 -1,1 -0.552285,0 -1,-0.447715 -1,-1 0,-0.552285 0.447715,-1 1,-1 z" /></g></g></svg>
diff --git a/docs/reference/libtracker-sparql/images/icon-fulltextindexed.svg b/docs/reference/libtracker-sparql/images/icon-fulltextindexed.svg
index 912fe3ff0..2554b6ba2 100644
--- a/docs/reference/libtracker-sparql/images/icon-fulltextindexed.svg
+++ b/docs/reference/libtracker-sparql/images/icon-fulltextindexed.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g color="#000" font-weight="400" font-family="sans-serif" fill="#474747"><path d="M6.508 1C3.48 1 1.002 3.473 1.002 6.5c0 3.026 2.478 5.5 5.506 5.5s5.504-2.474 5.504-5.5c0-3.027-2.476-5.5-5.504-5.5zm0 2a3.486 3.486 0 013.504 3.5c0 1.944-1.556 3.5-3.504 3.5a3.488 3.488 0 01-3.506-3.5C3.002 4.555 4.56 3 6.508 3z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" overflow="visible"/><path d="M10 8.99a1 1 0 00-.695 1.717l4.004 4a1 1 0 101.414-1.414l-4.004-4A1 1 0 0010 8.99z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" overflow="visible"/></g></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g id="icon-fulltextindexed" class="icon"><rect width="16" height="16" fill="#00000000"/><path d="M6.508 1C3.48 1 1.002 3.473 1.002 6.5c0 3.026 2.478 5.5 5.506 5.5s5.504-2.474 5.504-5.5c0-3.027-2.476-5.5-5.504-5.5zm0 2a3.486 3.486 0 013.504 3.5c0 1.944-1.556 3.5-3.504 3.5a3.488 3.488 0 01-3.506-3.5C3.002 4.555 4.56 3 6.508 3z" overflow="visible"/><path d="M10 8.99a1 1 0 00-.695 1.717l4.004 4a1 1 0 101.414-1.414l-4.004-4A1 1 0 0010 8.99z" overflow="visible"/></g></svg> \ No newline at end of file
diff --git a/docs/reference/libtracker-sparql/images/icon-multivalue.svg b/docs/reference/libtracker-sparql/images/icon-multivalue.svg
index 5990d7521..62da56a38 100644
--- a/docs/reference/libtracker-sparql/images/icon-multivalue.svg
+++ b/docs/reference/libtracker-sparql/images/icon-multivalue.svg
@@ -1,70 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- viewBox="0 0 16 16.03899"
- version="1.1"
- id="svg7384"
- height="16.03899">
- <metadata
- id="metadata90">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Gnome Symbolic Icon Theme</dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <title
- id="title9167">Gnome Symbolic Icon Theme</title>
- <defs
- id="defs7386">
- <linearGradient
- osb:paint="solid"
- id="linearGradient7212">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop7214" />
- </linearGradient>
- </defs>
- <g
- transform="translate(-320.98275,227.01492)"
- style="display:inline"
- id="layer9">
- <path
- id="rect3806"
- d="m 324.17969,-227.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -224 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -224 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z"
- style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- id="path3848"
- d="m 324.17969,-215.00781 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 v 1.83008 h 2 v -1.83008 c 0,-0.13089 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 v 1.78711 h 2 v -1.78711 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z"
- style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- id="path3856"
- d="m 324.17969,-223.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -220 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -220 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z"
- style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- <path
- id="path3858"
- d="m 324.17969,-219.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -216 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -216 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z"
- style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
- </g>
- <g
- transform="translate(-79.98255,-139.98508)"
- id="layer1" />
- <g
- transform="translate(-79.98255,-139.98508)"
- style="display:inline"
- id="layer10" />
- <g
- transform="translate(-79.98255,-139.98508)"
- id="g6387" />
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" viewBox="0 0 16 16" version="1.1" height="16"> <g id="icon-multivalue" class="icon"><rect width="16" height="16" fill="#00000000"/><g transform="translate(-320.98275,227.01492)"><path d="m 324.17969,-227.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -224 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -224 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z" /><path d="m 324.17969,-215.00781 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 v 1.83008 h 2 v -1.83008 c 0,-0.13089 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 v 1.78711 h 2 v -1.78711 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z" /><path d="m 324.17969,-223.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -220 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -220 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z" /><path d="m 324.17969,-219.01562 c -1.2016,0 -2.19727,1.00124 -2.19727,2.20117 V -216 h 2 v -0.81445 c 0,-0.1309 0.0735,-0.20117 0.19727,-0.20117 h 9.60742 c 0.12378,0 0.19531,0.0703 0.19531,0.20117 V -216 h 2 v -0.81445 c 0,-1.19993 -0.99372,-2.20117 -2.19531,-2.20117 z" /></g></g></svg>
diff --git a/docs/reference/libtracker-sparql/images/icon-notify.svg b/docs/reference/libtracker-sparql/images/icon-notify.svg
index 4f6971843..0cc5af1aa 100644
--- a/docs/reference/libtracker-sparql/images/icon-notify.svg
+++ b/docs/reference/libtracker-sparql/images/icon-notify.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M7.942 1.948c-2.209 0-3.33 1.5-4 4l-1 5c-.108.542-.447 1-1 1v1h12v-1c-.552 0-.891-.458-1-1l-1-5c-.53-2.5-1.79-4-4-4zm.176 12a1.5 1.5 0 001.412 1 1.5 1.5 0 001.412-1z" style="marker:none" fill="#474747"/></svg> \ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g id="icon-notify" class="icon"><rect width="16" height="16" fill="#00000000"/><path d="M7.942 1.948c-2.209 0-3.33 1.5-4 4l-1 5c-.108.542-.447 1-1 1v1h12v-1c-.552 0-.891-.458-1-1l-1-5c-.53-2.5-1.79-4-4-4zm.176 12a1.5 1.5 0 001.412 1 1.5 1.5 0 001.412-1z"/></g></svg> \ No newline at end of file
diff --git a/docs/reference/libtracker-sparql/images/icon-superproperty.svg b/docs/reference/libtracker-sparql/images/icon-superproperty.svg
index e07d2b38a..4689c48e6 100644
--- a/docs/reference/libtracker-sparql/images/icon-superproperty.svg
+++ b/docs/reference/libtracker-sparql/images/icon-superproperty.svg
@@ -1,3 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
- <path d="M12 9h-1c-.258 0-.53-.13-.72-.313L9 7.407V16H7V7.406L5.717 8.687c-.19.183-.462.313-.719.313H4V8c0-.31.09-.552.281-.75L8 3.594l3.718 3.656c.19.198.281.44.281.75z" style="line-height:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;white-space:normal" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="#2e3436"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g id="icon-superproperty" class="icon"><rect width="16" height="16" fill="#00000000"/><path d="M12 9h-1c-.258 0-.53-.13-.72-.313L9 7.407V16H7V7.406L5.717 8.687c-.19.183-.462.313-.719.313H4V8c0-.31.09-.552.281-.75L8 3.594l3.718 3.656c.19.198.281.44.281.75z" overflow="visible"/></g></svg> \ No newline at end of file
diff --git a/docs/reference/libtracker-sparql/images/interpretation.dot b/docs/reference/libtracker-sparql/images/interpretation.dot
new file mode 100644
index 000000000..ba8378742
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/interpretation.dot
@@ -0,0 +1,11 @@
+digraph {
+ rankdir=LR;
+ bgcolor=transparent;
+ node [shape="box", style="filled,rounded",fontname="sans-serif", fixedsize=true,width=2];
+
+ "DataObject" [fillcolor="#ff000077"];
+ "InformationElement" [fillcolor="#00ff0077"];
+
+ "DataObject":n -> "InformationElement":n [color="#777777ff",fontcolor="#777777ff",label="interpretedAs",fontsize=10,fontname="sans-serif"];
+ "InformationElement":s -> "DataObject":s [color="#777777ff",fontcolor="#777777ff",label="isStoredAs",fontsize=10,fontname="sans-serif"];
+}
diff --git a/docs/reference/libtracker-sparql/images/interpretation.svg b/docs/reference/libtracker-sparql/images/interpretation.svg
new file mode 100644
index 000000000..27931e5dd
--- /dev/null
+++ b/docs/reference/libtracker-sparql/images/interpretation.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 7.1.0 (0)
+ -->
+<!-- Pages: 1 -->
+<svg width="398pt" height="118pt"
+ viewBox="0.00 0.00 398.00 118.24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 114.24)">
+<!-- DataObject -->
+<g id="node1" class="node">
+<title>DataObject</title>
+<path fill="#ff0000" fill-opacity="0.466667" stroke="black" d="M132,-78.24C132,-78.24 12,-78.24 12,-78.24 6,-78.24 0,-72.24 0,-66.24 0,-66.24 0,-54.24 0,-54.24 0,-48.24 6,-42.24 12,-42.24 12,-42.24 132,-42.24 132,-42.24 138,-42.24 144,-48.24 144,-54.24 144,-54.24 144,-66.24 144,-66.24 144,-72.24 138,-78.24 132,-78.24"/>
+<text text-anchor="middle" x="72" y="-56.54" font-family="sans-serif" font-size="14.00">DataObject</text>
+</g>
+<!-- InformationElement -->
+<g id="node2" class="node">
+<title>InformationElement</title>
+<path fill="#00ff00" fill-opacity="0.466667" stroke="black" d="M378,-78.24C378,-78.24 258,-78.24 258,-78.24 252,-78.24 246,-72.24 246,-66.24 246,-66.24 246,-54.24 246,-54.24 246,-48.24 252,-42.24 258,-42.24 258,-42.24 378,-42.24 378,-42.24 384,-42.24 390,-48.24 390,-54.24 390,-54.24 390,-66.24 390,-66.24 390,-72.24 384,-78.24 378,-78.24"/>
+<text text-anchor="middle" x="318" y="-56.54" font-family="sans-serif" font-size="14.00">InformationElement</text>
+</g>
+<!-- DataObject&#45;&gt;InformationElement -->
+<g id="edge1" class="edge">
+<title>DataObject:n&#45;&gt;InformationElement:n</title>
+<path fill="none" stroke="#777777" d="M72,-79.24C72,-103.59 267.13,-106.25 309.82,-87.23"/>
+<polygon fill="#777777" stroke="#777777" points="312.2,-89.79 316.92,-80.3 307.32,-84.78 312.2,-89.79"/>
+<text text-anchor="middle" x="195" y="-102.24" font-family="sans-serif" font-size="10.00" fill="#777777">interpretedAs</text>
+</g>
+<!-- InformationElement&#45;&gt;DataObject -->
+<g id="edge2" class="edge">
+<title>InformationElement:s&#45;&gt;DataObject:s</title>
+<path fill="none" stroke="#777777" d="M318,-41.24C318,9.58 105.38,13.15 75.48,-30.52"/>
+<polygon fill="#777777" stroke="#777777" points="72.22,-29.21 72.47,-39.8 78.88,-31.37 72.22,-29.21"/>
+<text text-anchor="middle" x="195" y="-5.24" font-family="sans-serif" font-size="10.00" fill="#777777">isStoredAs</text>
+</g>
+</g>
+</svg>
diff --git a/docs/reference/libtracker-sparql/meson.build b/docs/reference/libtracker-sparql/meson.build
index 507555b2c..3c17c5352 100644
--- a/docs/reference/libtracker-sparql/meson.build
+++ b/docs/reference/libtracker-sparql/meson.build
@@ -10,6 +10,7 @@ endif
gidocgen_dep = dependency('gi-docgen', fallback: ['gi-docgen', 'dummy_dep'])
gidocgen = find_program('gi-docgen')
graphviz_dot = find_program('dot')
+xmlto = find_program('xmlto', required: false)
ontology_introductions = [
'nie-introduction.md',
@@ -82,6 +83,7 @@ foreach doc : generated_ontology_files
'embed-files.py',
meson.current_build_dir() / doc,
meson.current_build_dir() / output_file,
+ meson.current_source_dir(),
],
depends: [base_ontology_docs, nepomuk_ontology_docs, generate_images])
endforeach
@@ -122,9 +124,26 @@ content = [
# The TOML gi-docgen configuration wants a list of quoted file names.
content_quoted = []
foreach c : generated_content + content + generated_ontology_content
- content_quoted += '"@0@"'.format(c)
+ content_quoted += '"@0@"'.format(fs.name(c))
endforeach
+if xmlto.found()
+ cli_reference = custom_target(
+ 'commandline.md',
+ input: 'commandline.md.in',
+ output: 'commandline.md',
+ command: [
+ 'generate-cli-reference.py',
+ '--template', '@INPUT@',
+ '--output', '@OUTPUT@',
+ '--man-pages', manpage_files,
+ ]
+ )
+
+ generated_targets += cli_reference
+ content_quoted += '"@0@"'.format(fs.name(cli_reference.full_path()))
+endif
+
gidocgen_conf = configuration_data()
gidocgen_conf.set('version', meson.project_version())
gidocgen_conf.set('content', ','.join(content_quoted))
diff --git a/docs/reference/libtracker-sparql/nie-introduction.md b/docs/reference/libtracker-sparql/nie-introduction.md
index f79535281..8d7478e7e 100644
--- a/docs/reference/libtracker-sparql/nie-introduction.md
+++ b/docs/reference/libtracker-sparql/nie-introduction.md
@@ -9,22 +9,33 @@ and content of a piece of data. Their specialized subclasses (defined
in the other ontologies) can be used to classify
a wide array of desktop resources and express them in RDF.
-[nie:DataObject](nie-ontology.html#nie:DataObject) class represents a bunch of
+[nie:DataObject](nie-ontology.html#nie:DataObject) class represents a collection of
bytes somewhere (local or remote), the physical entity that contain
-data. The *meaning* (interpretation) of that entity, the
-information for the user contained in those bytes (e.g. a music file,
+data. The *meaning* (interpretation) of that entity (e.g. a music file,
a picture) is represented on the
[nie:InformationElement](nie-ontology.html#nie:InformationElement) side of the
ontology.
-Both sides are linked using the
-property [nie:interpretedAs](nie-ontology.html#nie:interpretedAs) (and its reverse
-[nie:isStoredAs](nie-ontology.html#nie:isStoredAs)), indicating the correspondence
-between the physical element and its interpretation. There is also a
-property to
-link [nie:InformationElement](nie-ontology.html#nie:InformationElement)s,
-representing the logical containment between them (like a picture and
-its album).
+All resources on the desktop are basically related to each other with two most fundamental types
+of relations: interpretation, Expressed through [nie:interpretedAs](nie-ontology.html#nie:interpretedAs) and its reverse
+[nie:isStoredAs](nie-ontology.html#nie:isStoredAs).
+
+![](interpretation.svg)
+
+And containment, expressed through [nie:hasPart](nie-ontology.html#nie:hasPart) and its reverse
+[nie:isPartOf](nie-ontology.html#nie:isPartOf).
+
+![](containment.svg)
+
+These properties (or their subproperties with a more specific semantic meaning) provide
+the scaffolding to give an uniform view of the data with an arbitrary level of detail.
+For a more thorough example, the figure below represents an image in an archive in the
+attachment of a PDF document in the filesystem:
+
+![](example-interpretation-containment.svg)
+
+The horizontal edges express interpretation, the diagonal edges express containment.
+This approach gives a uniform overview of data regardless of how it's represented.
## Common properties
@@ -57,26 +68,30 @@ One of the most common resources in a desktop is a file. Given the split between
1. Every file (local or remote) should generate one DataObject instance and an InformationElement instance.
2. Even when Data Objects and Information Elements are different entities.
3. The URI of the DataObject is the real location of the item (e.g. ''file://path/to/file.mp3'')
- 3. The URI of the InformationElement(s) will be autogenerated IDs.
+ 3. The URI of the InformationElement(s) will be generated IDs.
4. Every DataObject must have the property [nie:url](nie-ontology.html#nie:url), that points to the location of the resource, and should be used by any program that wants to access it.
- 5. The InformationElement and DataObject are related via the nie:isStoredAs / nie:interpretedAs properties.
+ 5. The InformationElement and DataObject are related via the [nie:isStoredAs](nie-ontology.html#nie:isStoredAs) / [nie:interpretedAs](nie-ontology.html#nie:interpretedAs) properties.
-Here comes an example, for the image file /home/user/a.jpeg:
+Here comes an example, for the image file `/home/user/a.jpeg`:
-```
+```turtle
# Properties as nmm:Photo
<urn:uuid:10293801928301293> a nmm:Photo ;
- nie:isStoredAs <file:///home/user/a.jpeg> ;
- nfo:width 49 ;
- nfo:height 36 ;
- nmm:flash &lt;nmm:flash-off&gt;;
- nmm:whiteBalance <nmm:white-balance-automatic> ;
- nfo:equipment [ a nfo:Equipment ; nfo:make 'Nokia'; nfo:model 'N900'; nfo:equipmentSoftware 'Tracknon' ] .
+ nie:isStoredAs <file:///home/user/a.jpeg> ;
+ nfo:width 49 ;
+ nfo:height 36 ;
+ nmm:flash nmm:flash-off;
+ nmm:whiteBalance nmm:white-balance-automatic ;
+ nfo:equipment [
+ a nfo:Equipment ;
+ nfo:make 'Nokia';
+ nfo:model 'N900';
+ nfo:equipmentSoftware 'Tracknon'
+ ] .
# Properties from nfo:FileDataObject
<file:///home/user/a.jpeg> a nfo:FileDataObject ;
- nie:interpretedAs <urn:uuid:10293801928301293> ;
- nfo:fileSize 12341234 ;
- # Mandatory for any nfo:DataObject
- nie:url <file:///home/user/a.jpeg> .
+ nie:interpretedAs <urn:uuid:10293801928301293> ;
+ nfo:fileSize 12341234 ;
+ nie:url 'file:///home/user/a.jpeg' .
```
diff --git a/docs/reference/libtracker-sparql/tracker-sparql.toml.in b/docs/reference/libtracker-sparql/tracker-sparql.toml.in
index fef19fe55..6739e6714 100644
--- a/docs/reference/libtracker-sparql/tracker-sparql.toml.in
+++ b/docs/reference/libtracker-sparql/tracker-sparql.toml.in
@@ -36,11 +36,9 @@ content_files = [
]
content_images = [
"logo.svg",
- "images/icon-deprecated.svg",
- "images/icon-fulltextindexed.svg",
- "images/icon-multivalue.svg",
- "images/icon-notify.svg",
- "images/icon-superproperty.svg",
+ "images/interpretation.svg",
+ "images/containment.svg",
+ "images/example-interpretation-containment.svg",
]
urlmap_file = "urlmap.js"
diff --git a/docs/tools/tracker-docgen-md.c b/docs/tools/tracker-docgen-md.c
index 98dc92c0c..1a1347984 100644
--- a/docs/tools/tracker-docgen-md.c
+++ b/docs/tools/tracker-docgen-md.c
@@ -91,6 +91,10 @@ print_class_hierarchy (FILE *f,
id = klass->shortname;
g_fprintf (f, "#### <a name=\"%s.hierarchy\"></a>Class hierarchy\n\n", id);
g_fprintf (f, "<div class=\"docblock\">\n");
+ g_fprintf (f,
+ "<style>"
+ "svg .node text { fill: var(--text-color); } "
+ "</style>\n");
g_fprintf (f, "{{ %s-hierarchy.svg }}\n", id);
g_fprintf (f, "</div>\n");
}
@@ -153,8 +157,9 @@ print_flag (FILE *f,
const gchar *icon_name,
const gchar *flag_description)
{
- g_fprintf (f, "[![%s](%s \"%s\")](%s)",
- flag_description, icon_name, flag_description, flag_property_link);
+ g_fprintf (f, "<svg width='16' height='16' style='display: inline-block;'>"
+ "<a xlink:href='%s' xlink:title='%s'><use xlink:href='#%s'/></a></svg>",
+ flag_property_link, flag_description, icon_name);
}
static void
@@ -200,7 +205,7 @@ print_property_table (FILE *f,
g_fprintf (f, "| ");
if (prop->deprecated) {
- print_flag (f, "nrl-ontology.html#nrl:deprecated", "icon-deprecated.svg",
+ print_flag (f, "nrl-ontology.html#nrl:deprecated", "icon-deprecated",
"This property is deprecated.");
}
@@ -216,7 +221,7 @@ print_property_table (FILE *f,
message = g_strdup_printf ("This property extends %s", shortname);
- print_flag (f, link, "icon-superproperty.svg", message);
+ print_flag (f, link, "icon-superproperty", message);
}
}
@@ -230,12 +235,12 @@ print_property_table (FILE *f,
} else {
message = g_strdup_printf ("This property can have multiple values.");
}
- print_flag (f, "nrl-ontology.html#nrl:maxCardinality", "icon-multivalue.svg", message);
+ print_flag (f, "nrl-ontology.html#nrl:maxCardinality", "icon-multivalue", message);
}
if (prop->fulltextIndexed) {
- print_flag (f, "nrl-ontology.html#nrl:fulltextIndexed", "icon-fulltextindexed.svg",
- "This property is full-text-indexed, and can be looked up through `fts:match`");
+ print_flag (f, "nrl-ontology.html#nrl:fulltextIndexed", "icon-fulltextindexed",
+ "This property is full-text-indexed, and can be looked up through fts:match");
}
/* Description column */
@@ -271,13 +276,14 @@ print_ontology_class (TrackerOntologyModel *model,
if (klass->deprecated) {
g_fprintf (f, "**Note:** ");
- print_flag (f, "nrl-ontology.html#nrl:deprecated", "icon-deprecated.svg", "Deprecated icon");
+ print_flag (f, "nrl-ontology.html#nrl:deprecated", "icon-deprecated", "");
+ g_fprintf (f, "This class is deprecated.");
g_fprintf (f, "\n\n");
}
if (klass->notify) {
g_fprintf (f, "**Note:** ");
- print_flag (f, "nrl-ontology.html#nrl:notify", "icon-notify.svg", "Notify icon");
+ print_flag (f, "nrl-ontology.html#nrl:notify", "icon-notify", "");
g_fprintf (f, "This class emits notifications about changes, and can "
"be monitored using [class@Tracker.Notifier].");
g_fprintf (f, "\n\n");
@@ -374,7 +380,7 @@ print_md_header (FILE *f, TrackerOntologyDescription *desc)
g_fprintf (f, "%s\n\n", desc->description);
g_fprintf (f,
"<style>"
- "img { display: inline-block } "
+ "svg .icon { fill: var(--primary) }"
"table { border-collapse: collapse; } "
"tr { border: none !important; } "
"tr:hover { background: var(--box-bg); } "
@@ -502,6 +508,23 @@ print_toc_classes (FILE *f,
g_fprintf (f, "\n\n");
}
+static void
+print_stock_icons (FILE *f)
+{
+ /* In order to keep SVGs themeable, but avoid having
+ * repeated icons all over the place, inline them once hidden, so
+ * they can be put in place through <use xlink:href=.../>
+ */
+ g_fprintf (f,
+ "<div style='display:none'>\n"
+ "{{ images/icon-deprecated.svg }}\n"
+ "{{ images/icon-superproperty.svg }}\n"
+ "{{ images/icon-multivalue.svg }}\n"
+ "{{ images/icon-fulltextindexed.svg }}\n"
+ "{{ images/icon-notify.svg }}\n"
+ "</div>\n");
+}
+
void
generate_devhelp_keywords (TrackerOntologyModel *model,
TrackerOntologyDescription *description,
@@ -648,6 +671,7 @@ ttl_md_print (TrackerOntologyDescription *description,
print_synopsis (f, description);
print_toc_classes (f, model, description->localPrefix, classes);
+ print_stock_icons (f);
basename = g_strdup_printf ("%s-introduction.md", description->localPrefix);
introduction = g_build_filename (description_dir, basename, NULL);