<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christophe Debruyne &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/author/debruyne/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Tue, 21 Apr 2026 07:41:45 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>Christophe Debruyne &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</title>
		<link>https://www.smalsresearch.be/smalls-kg-checklist/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Thu, 12 Aug 2021 12:17:20 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[standards]]></category>
		<guid isPermaLink="false">/?p=16366</guid>

					<description><![CDATA[Cette contribution se situe dans une série d’articles sur les graphes de connaissances (les « knowledge graphs » en anglais). Nous vous présentons le Smals KG Checklist, un outil qui vous aide à déterminer si un graphe de connaissances serait utile, voire indispensable, pour résoudre un problème dans votre organisation. Le Smals KG Checklist a été présenté [&#8230;]]]></description>
										<content:encoded><![CDATA[<blockquote>
<p>Cette contribution se situe dans une série d’articles sur <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">les graphes de connaissances</a> (les « knowledge graphs » en anglais). Nous vous présentons le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a>, un outil qui vous aide à déterminer si un graphe de connaissances serait utile, voire indispensable, pour résoudre un problème dans votre organisation. Le Smals KG Checklist a été présenté au sein du <a href="https://2021-eu.semantics.cc/">SEMANTiCS 2021</a>, un congrès scientifique et industriel autour des graphes de connaissances.</p>
</blockquote>
<h1>La différence entre les graphes et les graphes de connaissances</h1>
<p>Nous avons déjà traité <a href="/les-graphes-de-connaissance-quelques-applications/">les graphes de connaissances</a> et <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">les (bases de données) graphes</a>. Mais quelle est la différence entre les deux? Dans les grandes lignes, les bases de données graphes nous permettent de stocker des données représentées en graphe et les graphes de connaissances sont un type de graphe spécifique qu’on stocke dans des bases de données graphes. Autrement dit, tous les graphes de connaissances sont des graphes mais l’inverse n’est pas vrai.</p>
<p>Quelles sont donc les caractéristiques qui séparent les graphes de connaissances des autres graphes? C’est une question qu’on se pose souvent dans l’industrie et la recherche. En 2020, Hogan et al. ont publié un rapport plutôt académique qui traite le sujet des graphes de connaissances. Ils présentent plusieurs définitions de ce concept, ce qui ajoute à la confusion.  Par contre, toutes ces définitions nous permettent de synthétiser les caractéristiques d’un graphe de connaissances. C’est un graphe qui représente des entités (sous forme de nœuds) et leurs relations (sous forme de d’arêtes), et qui adhère à trois conditions&nbsp;:</p>
<ol>
<li><strong><span style="color: #339966;">Le graphe intègre des informations de différentes sources hétérogènes</span></strong>&nbsp;: bases de données, documents, connaissances reprises dans les têtes des experts, …</li>
<li><strong><span style="color: #ff00ff;">Un schéma qui décrit les types et relations utilisés dans le graphe de connaissances.</span></strong> Ce schéma, également nommé <em>ontologie</em>, fait partie du graphe de connaissances.</li>
<li><span style="color: #ff6600;"><strong>Le graphe est utilisé pour déduire des informations implicites à travers les informations explicites.</strong></span> C’est-à-dire, d’utiliser le graphe de connaissances pour découvrir des nouvelles relations, types, etc. en utilisant des algorithmes ou des applications.</li>
</ol>
<p>La première condition est évidente. La traduction d’une base de données relationnelle vers une base de données graphe peut être utile pour optimaliser les requêtes, mais le résultat n’est pas un graphe de connaissances ; le résultat non seulement ne combine pas d’autres informations, mais il manque aussi au résultat une description détaillée des concepts et relations et enfin, le résultat n’est utilisé que pour optimaliser un processus existant. Ce sont les deux autres conditions qui sont plus complexes et nuancées.</p>
<h2>Le Schéma (ou ontologie) d’un graphe de connaissances</h2>
<p>La <a href="https://www.sciencedirect.com/science/article/pii/S0169023X97000566">définition</a> d’un schéma (ontologie) d’un graphe de connaissances est : <em>« une spécification formelle et explicite d&#8217;une conceptualisation partagée »</em>. Cette définition semble compliquée, mais il suffit de comprendre chaque partie de cette définition.</p>
<p>Nous prenons par exemple l’ONSS et la Banque-Carrefour des Entreprises (BCE). L’ONSS et la BCE ont des informations sur des entreprises, mais de points de vue différents. Si l’ONSS et la BCE décident de partager des informations sur des entreprises, ils auront besoin d’une ontologie pour éviter des malentendus. La <strong><em>conceptualisation partagée</em></strong> inclut donc le concept « entreprise » et ses relations, définitions, règles, etc. Les représentants des deux parties se mettent d’accord sur cette conceptualisation partagée en discutant et en réutilisant des informations existantes (législations, glossaires, etc.). Cette conceptualisation partagée reste « dans la tête » des représentants, donc il faut mettre ces accords quelque part : on parle alors de la <strong><em>spécification</em></strong>. La spécification contient les descriptions et définitions de la conceptualisation. Mais la spécification doit être <strong><em>explicite</em></strong>, c’est-à-dire enregistrée quelque part (p. ex., un fichier) et cette spécification doit être <strong><em>formelle</em></strong> (logique ou mathématique) pour que des logiciels puissent l’utiliser.</p>
<p>Il existe des normes pour créer ces schémas ; <a href="https://www.w3.org/TR/rdf-schema/">RDFS</a> et <a href="https://www.w3.org/OWL/">OWL</a> sont deux exemples. RDFS nous permet de créer des hiérarchies de concepts et de relations. OWL est beaucoup plus expressif et nous permet de créer des règles pour valider un graphe de connaissances. Les use cases d’une organisation nous informent quelle langue est préférable. Ces langues nous permettent de décrire que&nbsp;:</p>
<ul>
<li>Chaque entreprise est un agent ;</li>
<li>Chaque personne est un agent ;</li>
<li>Une entité ne peut pas être à la fois une personne et une entreprise (possible avec OWL) ;</li>
<li>Si une entité a un numéro BCE, cette entité est une entreprise ;</li>
<li>…</li>
</ul>
<p>En ajoutant des descriptions en langage naturel, ce schéma rend les données sémantiques pour les logiciels et les utilisateurs. En donnant la requête « donne-moi une liste des agents », un logiciel est capable d’interpréter le schéma et d’inclure les personnes et les entreprises.</p>
<p>Les bases de données graphes comme Neo4j ont souvent une notion de types de nœuds, mais ne soutiennent pas les relations entre ces types, par exemple. La réalisation d’un <em>knowledge grap</em>h non seulement nécessite la construction du schéma, mais aussi l’<em>utilisation </em>de ce schéma en utilisant&nbsp;:</p>
<ul>
<li>une extension d’une base de données graphe ou d’une application sur cette base de données graphe <em><strong>capable d’interpréter un schéma</strong></em>. Un exemple est le <a href="https://neo4j.com/labs/neosemantics/">RDF &amp; Semantics Plugin</a> de Neo4j ; ou</li>
<li>des bases de données graphes <em><strong>conçues pour les graphes de connaissances</strong></em> comme <a href="https://www.stardog.com/">Stardog</a> et <a href="https://jena.apache.org/">Apache Jena</a>.</li>
</ul>
<p>Le schéma est donc un graphe qu’on ajoute au graphe de données et qui est interprété d’une manière spécifique.</p>
<h2>Déduire des informations implicites</h2>
<p>La troisième condition est que le graphe de connaissances soit utilisé pour déduire des informations implicites ou « cachées » dans le graphe, en utilisant :</p>
<ul>
<li>L’intelligence artificielle symbolique (exploitant le schéma) ;</li>
<li>L’intelligence artificielle statistique (machine ou deep learning) ;</li>
<li>Des applications qui « comprennent » les graphes grâce au schéma.</li>
</ul>
<p>Nous avons déjà évoqué l’IA symbolique dans la section précédente. En effet, le langage de schéma permet aux logiciels de déduire des informations. Si l’entité représentant <em>Christophe</em> est du type <em>Personne</em>, cet entité est aussi du type <em>Agent</em>. Ce genre d’IA utilise des logiques formelles pour arriver à ces déductions. L’usage de l’IA symbolique nécessite un schéma.</p>
<p>L’IA statistique, <a href="https://medium.com/dair-ai/an-illustrated-guide-to-graph-neural-networks-d5564a551783">appliquée au graphes</a>, nous permet de prédire des liens entre des entités ou même de prédire les catégories d’une nouvelle entité. L’usage d’un schéma nous permet de fournir des graphes plus riches, en déduisant un maximum d’informations, à ces algorithmes.</p>
<p>Et puis nous avons les applications « intelligentes » qui « comprennent » les graphes de connaissances. Ces applications exploitent le schéma et/ou le langage de schéma pour faciliter les tâches. Pour la <a href="https://en.wikipedia.org/wiki/Faceted_search">recherche facettée</a>, que nous connaissons tous des ventes en ligne, les types et les valeurs des relations sont interprétées pour créer des critères de recherche. Des outils comme <a href="https://metaphacts.com/ontodia">Ontodia</a>, traités dans un <a href="/publications/document/?docid=236">product review</a>, nous permettent d’explorer et d’analyser les contenus d’un graphe de connaissances d’une manière visuelle. Ontodia non seulement interprète le schéma pour guider les fouilles, mais l’outil interprète aussi les contenus du graphe pour choisir les visualisations. Ces outils permettent donc aux usagers de découvrir eux-mêmes des nouvelles informations dans le graphe de connaissances.</p>
<h1>Le Smals KG Checklist</h1>
<p>Reconnaitre la différence entre les graphes et les graphes de connaissances n’est pas évident, non seulement pour des informaticiens non-spécialistes mais aussi, et surtout, pour les organisations. Au sein de Smals et ses membres, par exemple, l’usage et les possibilités des bases de données graphes sont reconnus ; pour faciliter, entre autres, <a href="/le-marche-du-travail-salarie-en-belgique-une-analyse-reseau-partie-1/">les analyses de réseau</a>. Mais quand est-ce qu’un projet nécessite un graphe de connaissances ? Pour répondre à cette question, Smals Research a développé le Smals KG Checklist. <em>A partir d’une problématique concrète</em>, le but du Smals KG Checklist est de déterminer si une solution à cette problématique requiert les trois conditions remplies et le développement d’un graphe de connaissances est une piste valable.</p>
<p>La <strong><a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener">checklist</a>,</strong> disponible en PDF sous licence<em> Creative Commons,</em> se compose de deux parties.  Dans la première partie, nous allons d’abord&nbsp;: 1) décrire la problématique, 2) identifier les parties prenantes, et 3) identifier les concepts clefs (partagés par les parties prenantes). Les réponses à ces trois questions nous donnent un cadre pour les discussions suivantes.</p>
<p>La quatrième question se compose de trois blocs, une pour chaque condition, et chaque bloc à sa propre couleur. Ces trois blocs requièrent l’usage de la deuxième partie de la checklist et nous y retrouvons les mêmes couleurs.</p>
<figure id="attachment_16374" aria-describedby="caption-attachment-16374" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png"><img fetchpriority="high" decoding="async" class="size-full wp-image-16374" src="/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png" alt="Part I of the Smals KG Checklist. " width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-1024x770.png 1024w" sizes="(max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16374" class="wp-caption-text">Part I of the Smals KG Checklist.</figcaption></figure>
<p>Le violet correspond au <strong><em>schéma du graphe de connaissances</em></strong>. Nous retrouvons, dans la Section I, la connaissance des experts, la réutilisation des ontologies, la formalisation des législations, … et même la réutilisation des schémas existants. Les schémas des bases de données (relationnelles) contiennent souvent une représentation de nos concepts et relations que nous pouvons « réutiliser ». Si une des cases de la Section I est remplie (ou, voir plus tard, une des cases de la Section V), cette condition est remplie.</p>
<p>Le vert correspond à <strong>l’<em>intégration des informations et données</em></strong>. Dès que plusieurs cases dans ces sections sont cochées, cette condition est remplie. Mais d’où viennent ces informations et ces données ?</p>
<ul>
<li>Section II se focalise sur l’intégration des données structurées (bases de données, fichiers Excel, …)</li>
<li>Section IV se focalise sur l’intégration des données non-structurées (documents, Tweets, …)</li>
<li>Section III, au milieu des sections II et IV, se focalise sur les métadonnées (d’où viennent les informations, leurs dates de créations, …)</li>
</ul>
<p>Remarquez que la Section I a deux couleurs. La connaissance des experts peut contribuer au schéma et au graphe, par exemple. Dès que nous intégrons des bases de données existantes, nous allons (souvent) utiliser les schémas de ces bases de données pour le schéma du graphe de connaissances (surtout quand nous devons créer le schéma nous-même).</p>
<p>L’orange correspond à la <em>découverte des informations implicites</em>. Les Section V, VI, et VII correspondent respectivement avec l’IA symbolique, l’IA statistique, et les applications. Remarquez que la Section V nécessite un schéma et que la section VII est à moitié remplie en orange. Nous pouvons argumenter que la consultation des entités sous forme de page Web (comme, par exemple <a href="https://dbpedia.org/resource/Brussels">la page de Bruxelles</a> de la graphe de connaissances DBpedia) est utile pour les utilisateurs, mais pas vraiment une application intelligente. Nous essayons de capter les applications intelligentes : c’est à dire celles qui interprètent le graphe de connaissances. Si une des cases dans les Section V et VI est remplie et/ou des applications intelligentes sont identifiées, la condition est remplie.</p>
<figure id="attachment_16377" aria-describedby="caption-attachment-16377" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png"><img decoding="async" class="size-full wp-image-16377" src="/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png" alt="Part II of the Smals KG Checklist." width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-1024x770.png 1024w" sizes="(max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16377" class="wp-caption-text">Part II of the Smals KG Checklist.</figcaption></figure>
<p>Une fois que les trois blocs de la première partie sont complétés, nous sommes capables de répondre à la cinquième question : est-ce que les trois conditions sont remplies ? Si oui, il est probable qu’un graphe de connaissances soit une solution (élégante) à cette problématique. La sixième question, en gris, nous permet d’enregistrer des pistes pour élargir le graphe de connaissances.</p>
<h1>Une démonstration</h1>
<div>
<p dir="ltr">Nous illustrons le Smals KG Checklist avec la problématique de <a href="https://fr.wikipedia.org/wiki/Raidi%C3%B3_Teilif%C3%ADs_%C3%89ireann" target="_blank" rel="noopener" data-saferedirecturl="https://www.google.com/url?q=https://fr.wikipedia.org/wiki/Raidi%25C3%25B3_Teilif%25C3%25ADs_%25C3%2589ireann&amp;source=gmail&amp;ust=1628840797070000&amp;usg=AFQjCNE_GD5reXyvMeljtwhNVmqD3d6d0g">RTÉ</a>, la chaine nationale de l’Irlande.</p>
<div dir="ltr">
<p>Le RTÉ gère quatre systèmes d’archives&nbsp;: un pour des photos, un pour des films, un pour des documents, et un pour des sons. Chaque système était autonome ; il était conçu avec d’autres procédures pour gérer les métadonnées et pour permettre de retrouver les éléments. Au fil du temps, chaque équipe a même développé ses propres coutumes.</p>
<p>Si un journaliste ou un chercheur devaient faire des recherches sur un sujet, par exemple un politicien irlandais, ces personnes devaient non seulement consulter les 4 systèmes, mais aussi être au courant de comment les informations étaient encodées dans chaque système. Les informations disponibles n’étaient pas riches non plus ; une photo pouvait avoir comme sujet « Dublin », mais le système ne contenait pas l’information « Dublin est la capitale de l’Irlande ».</p>
<p>Le RTÉ, en partenariat avec une université irlandaise, avait lancé <a href="https://dri.ie/dri-insight-rte-project">un projet de graphe de connaissances</a>. L’auteur de cet article était impliqué dans ce projet. Le but du projet était de développer un graphe de connaissances (proof-of-concept) pour faciliter la découverte et l’analyse des données contenues dans ces archives et de promouvoir les métadonnées à des entités. Par exemple, le sujet d’une photo qui n’était auparavant qu’une simple valeur littérale comme « Bruxelles » est transformée en entité d’une ville qui porte le nom de « Bruxelles » en français. En conséquence, il peut être ajouté à cette entité d’autres relations comme le nom en néerlandais et « est la capitale de » avec une entité qui représente la Belgique. Le résultat est une conceptualisation plus détaillée, ce qui nous permet de formuler des requêtes comme&nbsp;: « donne-moi une liste de tous les documents de la capitale de la Belgique» sans connaître le nom de cette ville.</p>
</div>
</div>
<figure id="attachment_16405" aria-describedby="caption-attachment-16405" style="width: 1312px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-visual.png"><img decoding="async" class="size-full wp-image-16405" src="/wp-content/uploads/2021/08/rte-visual.png" alt="Le projet de graphe de connaissances de RTÉ" width="1312" height="689" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual.png 1312w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-300x158.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-768x403.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-1024x538.png 1024w" sizes="(max-width: 1312px) 100vw, 1312px" /></a><figcaption id="caption-attachment-16405" class="wp-caption-text">Le projet de graphe de connaissances de RTÉ</figcaption></figure>
<div>
<div dir="ltr"> </div>
<p dir="ltr">Ce projet, lancé en 2013, rempli les trois conditions d’un knowledge graph. Mais pour illustrer le Smals KG Checklist, nous avons fait, ci-dessous, l’exercice pour déterminer si un graphe de connaissances était nécessaire. Il s’avère qu’une solution pour RTÉ nécessitait&nbsp;: un schéma pour réaliser l’analyse et la découverte des données; RTÉ était capable de réutiliser des normes existantes; l’intégration de quatre bases de données <em><strong>et</strong> </em>des informations externes (enrichissement) ; et le développement des outils qui exploitaient le graphe et le schéma pour soutenir les activités des journalistes et des chercheurs.</p>
</div>
<figure id="attachment_16409" aria-describedby="caption-attachment-16409" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-1.png"><img loading="lazy" decoding="async" class="size-full wp-image-16409" src="/wp-content/uploads/2021/08/rte-1.png" alt="Première partie du checklist, remplie pour le projet de RTÉ" width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16409" class="wp-caption-text">Première partie de la checklist, remplie pour le projet de RTÉ</figcaption></figure>
<figure id="attachment_16410" aria-describedby="caption-attachment-16410" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-2.png"><img loading="lazy" decoding="async" class="size-full wp-image-16410" src="/wp-content/uploads/2021/08/rte-2.png" alt="Deuxième partie du checklist, remplie pour le projet de RTÉ" width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16410" class="wp-caption-text">Deuxième partie de la checklist, remplie pour le projet de RTÉ</figcaption></figure>
<h1>En conclusion</h1>
<div>
<p dir="ltr">Le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a> est conçu pour être utilisé dans un contexte collaboratif, par exemple un workshop. Il est nécessaire qu’il y ait au moins une personne (p. ex., le modérateur) qui maitrise le sujet des graphes de connaissances et que cette personne remplisse le Smals KG Checklist pendant les discussions.</p>
<p dir="ltr"><span style="font-size: revert; color: initial;">Une fois complété (voir affiné au fil du temps) et les trois conditions remplies, le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a> contient une description d’un projet de graphe de connaissances à haut niveau (avec le scope, les attentes, les applications, …). Cette checklist devient donc un document précieux pour les décisions GO/NO-GO, par exemple dans les phases de début des méthodologies Prince2.</span></p>
</div>
<hr />
<p><em>Cet article de blog est une contribution individuelle de Christophe Debruyne, spécialisé en knowledge graph chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reusable SHACL Constraint Components for Validating Geospatial Linked Data</title>
		<link>https://www.smalsresearch.be/reusable-shacl-constraint-components-for-validating-geospatial-linked-data/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Mon, 07 Jun 2021 11:30:51 +0000</pubDate>
				<category><![CDATA[Presentations]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/reusable-shacl-constraint-components-for-validating-geospatial-linked-data/</guid>

					<description><![CDATA[SHACL provides us a powerful way for declaring validation rules for datasets. The built-in functions are quite limited, but we can use SPARQL to create custom constraint components. The problem is one could end up reinventing the wheel for constraints that hold in many contexts, such as topological relationships. We present GeoSHACL, a set of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>SHACL provides us a powerful way for declaring validation rules for datasets. The built-in functions are quite limited, but we can use SPARQL to create custom constraint components. The problem is one could end up reinventing the wheel for constraints that hold in many contexts, such as topological relationships. We present GeoSHACL, a set of GeoSPARQL-based SHACL constraint components published as Linked Data. We thus provide constraint components that can be shared and reused. By starting with the topological relations of simple features, our goal is to provide a reusable set of such constraints. This article elaborates on some of the technical design decisions and provides a brief demonstration.</p>







                <h1 class="wp-block-heading">Presentation</h1>
            
            


            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2021/06/2021-06-07-geoshacl.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of 2021-06-07-geoshacl."></object>
                <a id="wp-block-file--media-5fc41189-0d80-41ba-adc9-f3bda016b5c6" href="https://www.smalsresearch.be/wp-content/uploads/2021/06/2021-06-07-geoshacl.pdf">2021-06-07-geoshacl</a><a href="https://www.smalsresearch.be/wp-content/uploads/2021/06/2021-06-07-geoshacl.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-5fc41189-0d80-41ba-adc9-f3bda016b5c6">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Virtual Knowledge Graphs</title>
		<link>https://www.smalsresearch.be/virtual-knowledge-graphs/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Tue, 11 May 2021 11:33:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[virtual knowledge graphs]]></category>
		<guid isPermaLink="false">/?p=15953</guid>

					<description><![CDATA[Deze blogpost past in het kader van onze studies omtrent knowledge graphs. In dit artikel zullen we het concept van virtual knowledge graphs toelichten, een techniek dat ons toelaat (relationele) databanken als een graaf te benaderen. Hoewel dit artikel hier en daar soms wat technisch en moeilijk wordt, geven we na voorbeelden duidelijke conclusies. Een [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Deze blogpost past in het kader van onze studies omtrent <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">knowledge graphs</a>. In dit artikel zullen we het concept van virtual knowledge graphs toelichten, een techniek dat ons toelaat (relationele) databanken als een graaf te benaderen. <span style="font-size: inherit;">Hoewel dit artikel hier en daar soms wat technisch en moeilijk wordt, geven we na voorbeelden duidelijke conclusies. Een lezer hoeft de voorbeelden (m.a.w. de “code”) dus niet door te nemen.</span></p>
<p>Een knowledge graph wordt gebouwd met data afkomstig uit verschillende bronnen, welke worden omgezet naar een graaf, waarna het geheel doorgaans in een graafdatabank wordt opgeslagen. Welke bronnen worden dan in een knowledge graph geïntegreerd? Voorbeelden van bronnen zijn bestaande (relationele) databanken die systemen ondersteunen, documenten (gescand en born-digital), en de kennis van personen. In dit artikel leggen we de nadruk op (relationele) databanken die bestaande systemen ondersteunen.</p>
<p>Heel wat bestaande systemen draaien bovenop (relationele) databanken. De informatie die in dergelijke systemen zit vervat is doorgaans moeilijk integreerbaar met andere bronnen die vereist zijn voor het bouwen van een knowledge graph. Of een organisatie kan bijvoorbeeld van mening zijn dat de bestaande systemen niet mogen vervangen worden door een graph databank, of wensen er niets aan te veranderen.</p>
<p>Het omzetten van data afkomstig uit een relationele databank (voor een specifiek doeleinde) naar een knowledge graph en deze in een graafdatabank opslaan leidt tot twee problemen: redundantie t.o.v. de originele data (en het beheer daarvan), en het bevragen van informatie dat mogelijks niet meer up-to-date is.</p>
<p>Een mogelijke oplossing hiervoor zijn <em>virtual knowledge graphs</em>. Virtual knowledge graphs laten toe om op een haast transparante manier de gegevens in een (relationele) databank als een graaf te benaderen. Achter de schermen zal zo’n systeem de bevragingen in een graph query-taal vertalen naar, bijvoorbeeld, SQL.</p>
<h2>Mappings: relaties tussen een databank en een knowledge graph</h2>
<p>Tijdens de omzetting van data naar een knowledge graph verplaatst het accent in de data van attributen naar dingen; een veldje stad met als inhoud “Brussel” wordt het concept van de stad Brussel met als naam “Brussel”, bijvoorbeeld. Dit aspect, dat gekend staat als “<a href="https://blog.google/products/search/introducing-knowledge-graph-things-not/">things, not strings</a>”, maakt de graaf completer, expressiever, en meer betekenisvol dan de originele bronnen.</p>
<p>Om dit te realiseren, moeten we echter beschrijven hoe databanken zich tot de <a href="https://nl.wikipedia.org/wiki/Ontologie_(informatica)">ontologie</a> (vergelijkbaar met een schema) van een knowledge graph verhouden. Zulke beschrijvingen heten <em>mappings</em> en worden aan de hand van een speciaal taaltje beschreven. Een gestandardiseerd mapping taaltje is <a href="https://www.w3.org/TR/r2rml/">R2RML</a>, wat staat voor <em>RDB to RDF Mapping Language</em>. R2RML werd in 2012 gepubliceerd en dient om gegevens in relationele databanken als RDF grafen te vertalen of te benaderen. RDF is een gestandaardiseerd graaf-datamodel en is een onderwerp dat we in een eerdere <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">blog post</a>&nbsp;hebben behandeld. RDF beschrijft dingen aan de hand van zogenaamde triples. Triples zijn van de vorm (<em>subject, predicate, object</em>) en verbinden een onderwerp (<em>subject</em>) met een voorwerp (<em>object</em>) aan de hand van een relatie (<em>predicate</em>). Een voorbeeld hiervan is: <code>ex:Christophe ex:woontIn ex:Brussel</code>.</p>
<p>Het voordeel van een standaard zoals R2RML is dat meerdere vrije en commerciële oplossingen deze ondersteunen, wat interoperabiliteit ten goede komt. Naast R2RML bestaan er andere taaltjes, maar in dit artikel leggen we het principe van virtual knowledge graphs aan de hand van R2RML uit. De oplossingen die we zullen aanhalen ondersteunen, naast R2RML, ook hun eigen taal.</p>
<p>Hoe gaat dit in zijn werk? Laten we vertrekken van een tabel <code>Addresses</code> met twee kolommen <code>ID</code> en <code>city</code>. Aan de hand van een mapping zullen we die tabel gebruiken om RDF triples te genereren. Een mapping bestaat uit:</p>
<ul>
<li>Exact 1 logische tabel (een query, tabel of view) die naar RDF zal worden vertaald. In dit geval alles uit de tabel <code>Addresses</code>.</li>
<li>Exact 1 subject-map die de subject van onze triples zal genereren. In ons voorbeeld wordt de kolom <code>ID</code> gebruikt om unieke IRI’s voor steden te creëren. Een subject-map kan ook 1 of meerdere referenties naar typen bevatten. In het voorbeeld is hier een verwijzing naar <code>dbpedia:Place</code> dat voor elk subject <code><em>x</em></code> de triple <code>x rdf:type dbpedia:Place</code> gaat genereren.</li>
<li>0 of meedere predicate-object-maps die de overige predicaten en objecten zullen genereren. In ons voorbeeld nemen we de inhoud van de kolom <code>city</code> om een triple met predicaat <code>foaf:name</code> te generen.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15994" src="/wp-content/uploads/2021/05/vkg-figuur-1.png" alt="De R2RML mapping voor de tabel Addresses" width="1839" height="831" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-1.png 1839w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-1-300x136.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-1-768x347.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-1-1024x463.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-1-1536x694.png 1536w" sizes="auto, (max-width: 1839px) 100vw, 1839px" /></p>
<p>Aan de hand van deze mapping en het tabel in ons voorbeeld worden de volgende triples genereerd:</p>



<pre class="wp-block-code line-numbers"><code class="language-turtle">@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; . 
@prefix dbpedia: &lt;http://dbpedia.org/ontology/&gt; . 
&lt;http://foo.example/Addresses/1&gt; 
  a dbpedia:Place ; 
  foaf:name "Brussels" ; 
. 
</code></pre>



<p class="wp-block-verse">R2RML laat ons ook toe om relaties tussen twee logische tabellen te declareren. Dit passen we toe in het volgende voorbeeld. We hebben een tabel <code>People</code> met drie kolommen (<code>ID</code>, <code>fname</code>, en <code>addr</code>). Er is een vreemde sleutel van <code>People(addr)</code> naar <code>Addresses(ID)</code>. De logical table van deze mapping bevat de naam van de tabel en hierdoor worden alle kolommen geselecteerd. De subject-map maakt van elke subject een entiteit van het type <code>foaf:Person</code>. De predicate-object-map legt verbanden tussen de subjects van deze triplesmap met subjects van de voorgaande triplesmap aan de hand van een expliciete verwijzing (i.e., <code>rr:parentTriplesMap</code>) en de JOIN condities. Een R2RML processor zal de twee logische tabellen aan de hand van die condities JOINen. In ons voorbeeld resulteert dit in triples met de predicate <code>foaf:based_near</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15999" src="/wp-content/uploads/2021/05/vkg-figuur-2.png" alt="De R2RML mapping voor de tabel People" width="1801" height="856" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-2.png 1801w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-2-300x143.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-2-768x365.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-2-1024x487.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-2-1536x730.png 1536w" sizes="auto, (max-width: 1801px) 100vw, 1801px" /></p>
<p>Nemen we de twee triplesmaps en de twee tabellen, dan kunnen we de volgende RDF graaf genereren:</p>



<pre class="wp-block-code line-numbers"><code class="language-turtle">@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; . 
@prefix dbpedia: &lt;http://dbpedia.org/ontology/&gt; . 
&lt;http://foo.example/Addresses/1&gt; 
  a dbpedia:Place ; 
  foaf:name "Brussels" ; 
. 
&lt;http://foo.example/Person/1&gt; 
  a foaf:Person ; 
  foaf:name "Christophe" ; 
  foaf:based_near &lt;http://foo.example/Addresses/1&gt; ; 
. 
&lt;http://foo.example/Person/2&gt; 
  a foaf:Person ; 
  foaf:name "Kevin" ; 
. </code></pre>



<p>Merk op dat waar de vreemde sleutel tussen de twee tabellen initieel weinig betekenis had, de relatie tussen personen en plaatsen in de graaf expliciet wordt.</p>
<h2>Relationele Databanken als RDF-grafen benaderen</h2>
<p>R2RML mappings worden niet alleen gebruikt om RDF grafen uit relationele databanken te destilleren. In dit artikel worden de mappings gebruikt om de data in relationele databanken als RDF grafen te benaderen. Software zoals <a href="https://ontop-vkg.org/">Ontop</a> en <a href="https://www.stardog.com/">Stardog</a> vertalen bevragingen in SPARQL (de querytaal voor RDF) naar SQL.</p>
<p>We nemen als voorbeeld de volgende SPARQL-query:</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">PREFIX foaf: &lt;http://xmlns.com/foaf/0.1/&gt;
SELECT DISTINCT&nbsp;?name WHERE {
 &nbsp;?x foaf:name&nbsp;?name .
}
</code></pre>



<p>Deze SPARQL-query vraagt naar alle unieke namen (via de predicaat <code>foaf:name</code>). Een virtuele knowledge graph analyseert de SPARQL-query en de mappings. De predicaat <code>foaf:name</code> wordt op twee plaatsen gebruikt (eens voor personen, en eens voor adressen). Aan de hand van die informatie herschrijft de virtual knowledge graph de SPARQL-query naar een SQL-query. Het antwoord op de SQL-query wordt dan gebruikt om een antwoord op de SPARQL-query te formuleren. Ontop, bijvoorbeeld, genereert de volgende SQL-query:</p>



<pre class="wp-block-code line-numbers"><code class="language-sql">SELECT DISTINCT v5.Name2m2 AS Name2m2
FROM (
  SELECT DISTINCT v1.fname AS Name2m2 
    FROM People v1 WHERE v1.fname IS NOT NULL
  UNION ALL
  SELECT DISTINCT v3.city AS Name2m2 
    FROM Addresses v3 WHERE v3.city IS NOT NULL
) v5
</code></pre>



<p>De SQL-query bevraagt de twee tabellen, verzamelt de resultaten van de twee bevragingen in een unie, en gebruikt de unie voor de uiteindelijke bevraging. Tools zoals Ontop zijn dus “intelligent” genoeg om zo min mogelijk informatie voor de query te gebruiken.</p>
<p>Het gaat zelfs een stapje verder: virtual knowledge graphs kunnen ook over de ontologieën die in de mappings werden gebruikt redeneren. Dit moet worden ingesteld en de ontologieën moeten beschikbaar worden gesteld (e.g., als input).</p>
<p>De virtual knowledge graphs gebruiken de axioma’s (type-hiërarchieën, rollen-hiërarchieën, etc.) in ontologiën om impliciete informatie uit expliciete informatie te halen. De mogelijkheden zijn doorgaans beperkt tot de<a href="https://www.w3.org/TR/rdf11-mt/"> reeds vermelde soorten axioma</a>’s of <a href="https://www.w3.org/TR/owl2-profiles/#OWL_2_QL">axioma’s die tot de expressiviteit van relationele databanken behoren</a>. Natuurlijk redeneren ze niet over de informatie op niveau van de graaf. De axioma&#8217;s worden gebruikt om de SQL-query&#8217;s als dusdanig te herschrijven.</p>
<p><img loading="lazy" decoding="async" class="alignright size-medium wp-image-16012" src="/wp-content/uploads/2021/05/vkg-figuur-3-300x128.png" alt="Een eenvoudige klassenhiërarchie" width="300" height="128" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-3-300x128.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-3-768x327.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/05/vkg-figuur-3.png 850w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>We illustreren dit met een voorbeeld. Laten we aannemen dat we in onze ontologie de volgende twee axioma’s hebben: alle entiteiten van het type <code>foaf:Person</code> zijn ook entiteiten van het type <code>smals:Thing</code>, en alle entiteiten van het type <code>dbpedia:Place</code> zijn ook entiteiten van het type <code>smals:Thing</code>. Die twee axioma’s laten ons toe om een eenvoudige klassenhiërarchie op te bouwen. We wijzigen onze mappings <em>niet</em> en vragen aan onze virtual knowledge graph: “Geef ons een lijst van alle dingen.”</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">PREFIX smals: &lt;https://kg.smals.be/ontologies/smals#&gt; 
SELECT DISTINCT&nbsp;?x WHERE {
 &nbsp;?x a smals:Thing .
} 
</code></pre>



<p>Wanneer de ontologie niet als input werd meegegeven, dan beschikken onze mappings niet over voldoende informatie om hier een antwoord op te geven. Ontop kan dus geen SQL-query genereren en geeft een leeg resultaat terug.</p>
<p>Wanneer we de ontologie expliciet als input meegeven, echter, dan wordt de volgende SQL-query gegenereerd om op bovenstaande SPARQL-query een antwoord te formuleren.</p>



<pre class="wp-block-code line-numbers"><code class="language-sql">SELECT v9.ID1m1 AS ID1m1, v9.ID3m2 AS ID3m2, v9.v0 AS v0
FROM (
   SELECT v3.ID1m1 AS ID1m1, NULL AS ID3m2, 0 AS v0
   FROM (SELECT DISTINCT v1.ID AS ID1m1 FROM Addresses v1) v3
  UNION ALL 
   SELECT NULL AS ID1m1, v7.ID3m2 AS ID3m2, 1 AS v0
   FROM (SELECT DISTINCT v5.ID AS ID3m2 FROM People v5) v7
) v9
</code></pre>



<p>Ontop was in staat te achterhalen wat er allemaal met een <code>smals:Thing</code> overeenkwam en ging op zoek naar de corresponderende mappings. In dit voorbeeld had Ontop enkel nood aan de kolommen die voor de subjects van elke mapping werden gebruikt (zijnde <code>ID</code> van <code>People</code> en <code>ID</code> van <code>Addresses</code>). In de SQL-query zijn er dus twee kolommen die met deze twee ID’s overeenkomen, en een derde kolom voor de “boekhouding”; de waarde 0 voor <code>Addresses</code> en de waarde 1 voor <code>People</code>.</p>
<p>Virtual knowledge graphs vertalen SPARQL-query&#8217;s naar SQL-query&#8217;s die op hun beurt moeten verwerkt worden. Dit brengt ons naar enkele <em>observaties</em>:</p>
<ul>
<li>1) Virtual knowledge graphs zijn, vergeleken met triplestores (graafdatabanken voor RDF), trager. De voordelen van virtual knowledge graphs zijn het bevragen van data in originele bronnen en het voorkomen van dataredundantie.</li>
<li>2) Het gebruik van ontologieën binnen de virtual knowledge graph laat ons toe meer informatie te bevragen, maar dit gaat natuurlijk ten koste van performantie. Men moet zich echter de vraag stellen of de voordelen zwaarder doorwegen dan de nadelen. Wensen we entiteiten via superklassen te benaderen, dan konden we deze ook expliciet in de mapping plaatsen.</li>
</ul>
<p>Dat het ondersteunen van redeneren een negatieve impact op performantie heeft geldt ook voor triplestores. Voor virtual knowledge graphs moeten we echter rekening houden met het feit dat de resulterende SQL-query&#8217;s zeer complex kunnen zijn. Natuurlijk kunnen we ons voor een aantal problemen vrijwaren door de onderliggende databanken naargelang de vereisten te configureren (e.g., query timeout en max aantal JOINs).</p>
<p>Wanneer we van virtuele knowledge graphs gebruik maken, moeten we rekening houden met het feit dat niet alle SPARQL functionaliteit ondersteund kan worden. Sommige beperkingen hebben te maken met de onderliggende databank (de beschikbaarheid van REGEX-functionaliteit, bijvoorbeeld). Andere beperkingen hebben te maken met de manier hoe SPARQL-query&#8217;s naar SQL-query&#8217;s worden herschreven. Dit hangt af van de implementatie van de virtual knowledge graph.</p>
<p>Sommige beperkingen hebben mogelijks een belangrijke impact op het gebruik van de knowledge graph. De volgende SPARQL-query, bijvoorbeeld, vraagt naar alle leidinggevenden (+1, +2, …) van alle werknemers aan de hand van een zogenaamd <em>arbitrair pad</em>. Een arbitrair pad gaat op zoek naar 0-of-meerdere (<code>*</code>) of 1-of-meerdere (<code>+</code>) relaties tussen concepten van een bepaald patroon. In dit geval hebben we dus 1-of-meerdere <code>smals:supervisor</code> relaties tussen <code>?x</code> en <code>?y</code>.</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">PREFIX smals: &lt;https://kg.smals.be/ontologies/smals#&gt; 
SELECT DISTINCT * WHERE {
 &nbsp;?x smals:supervisor+&nbsp;?y.
}
</code></pre>



<p>Voor triplestores is dit een makkelijke query. Virtual knowledge graphs ondersteunen dit echter (nog) niet. Om dit te kunnen oplossen moeten we zelf onze SPARQL-query herschrijven. Als we weten dat er maximaal 4 lagen in de hiërarchie zijn, dan kunnen we deze exhaustief neerschrijven:</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">PREFIX smals: &lt;https://kg.smals.be/ontologies/smals#&gt; 
SELECT DISTINCT * WHERE {
  {&nbsp;?x smals:supervisor&nbsp;?y } UNION                             # +1
  {&nbsp;?x smals:supervisor/smals:supervisor&nbsp;?y } UNION            # +2
  {&nbsp;?x smals:supervisor/smals:supervisor/smals:supervisor&nbsp;?y } # +3
}
</code></pre>



<p>Dit vergt natuurlijk achtergrondkennis omtrent de graaf&nbsp; en een organisatie. Men zou kunnen denken dat dit op te lossen is aan de hand van de ontologie; namelijk door aan te geven dat <code>smals:supervisor</code> een transitieve relatie is. Op die manier zou men via <code>?x smals:supervisor&nbsp;?y</code> aan alle leidinggevenden van een persoon kunnen opvragen. Het probleem is dat transitiviteit niet tot de expressiviteit van courante virtual knowledge graph technologieën behoren. (*)</p>
<p>Dit brengt ons naar enkele nieuwe observaties:</p>
<ul>
<li>3) Virtual knowledge graphs ondersteunen niet alle aspecten van SPARQL. Dergelijke beperkingen hebben als oorzaak de onderliggende relationele databank of de implementatie van de virtual knowledge graph.</li>
<li>4) Hoewel R2RML, de taal om relationele databanken naar RDF te vertalen, gestandaardiseerd is, is het gedrag van een virtual knowledge graph niet gestandaardiseerd. De beperkingen hangen af van de oplossing die men kiest (zie <a href="https://ontop-vkg.org/guide/compliance.html#sparql-1-1">hier</a> voor Ontop, en <a href="https://docs.stardog.com/virtual-graphs/#how-it-works">hier</a> voor Stardog). De mappings zijn interoperabel, maar de oplossingen zijn dat niet.</li>
<li>5) De keuze van een oplossing hangt dus ook af van onze knowledge graph requirements.</li>
</ul>
<p>Een laatste belangrijk punt is dat virtual knowledge graphs doorgaans aannemen dat de onderliggende relationele databases zich naar standaard SQL gedragen. Elke afwijking kan het proces verstoren. Dit hebben we zelf ondervonden toen we virtual knowledge graphs op een MS SQL Server database hebben toegepast. Een frappante beperking van MS SQL Server is dat deze geen <code>LIMIT</code> zonder <code>ORDER BY</code> toelaat, terwijl dit (hoewel te vermijden) eigenlijk mag. De SQL-query&#8217;s die virtual knowledge graphs genereren kunnen dan niet worden uitgevoerd, wat tot fouten leidt. Dit is spijtig, want een <code>LIMIT</code> zonder <code>ORDER BY</code> wordt door tal van graaf-exploratie tools, zoals <a href="https://github.com/metaphacts/ontodia">Ontodia</a>, gebruikt.</p>
<h1>Een kleine studie</h1>
<p>Binnen Smals Research hebben we virtual knowledge graphs toegepast op een MS SQL Server databank met informatie omtrent werknemers, softwareprojecten, hardware,… en hun relaties. Voor onze studie hebben we niet alleen een kleine ontologie, maar ook de nodige mappings in R2RML gemaakt. De mappings werden gebruikt om:</p>
<ul>
<li>RDF te genereren die in een triplestore werd opgeslagen aan de hand van <a href="https://jena.apache.org/">Apache Jena</a> (<em>fuseki</em>);</li>
<li>Een Ontop installatie via Docker (<em>ontop</em>);</li>
<li>Een Stardog installatie via Docker (<em>stardog</em>).</li>
</ul>
<p>Voor de triplestore en Ontop hebben we ook omgevingen gecreëerd waar redeneren met de ontologie werd ingesteld (<em>fuseki-r</em> en <em>ontop-r</em>). Voor de triplestore hebben we RDFS redeneren ingesteld, en voor Ontop OWL QL. OWL reasoning in Apache Jena leidde tot problemen op een lokale machine (niet genoeg geheugen, want redeneren vergt resources). De triplestore draaide in een Docker omgeving op een standaard laptop. De MS SQL Server draaide op de infrastructuur van Smals. Dit is belangrijk om enige vertraging vanwege het netwerkverkeer in achting te nemen.</p>
<p>We hebben een aantal query&#8217;s geformuleerd die we op elk systeem 10-maal draaiden. Om cold-start problemen, zoals de eenmalige analyse van de mapping te vermijden, werd voor elk experiment een eenvoudige query eenmaal uitgevoerd. Hoewel niet extensief, diende dit experiment om een beter beeld te vormen van:</p>
<ul>
<li>welke de mogelijkheden van virtual knowledge graphs zijn, en</li>
<li>welke de voor- en nadelen van bepaalde oplossingen zijn.</li>
</ul>
<h2>Query: een lijst van alle typen in de knowledge graph</h2>
<p>Deze eenvoudige SPARQL-query laat ons toe om alle typen op te halen die in een <em>is-een</em> relatie werden gebruikt:</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">SELECT DISTINCT&nbsp;?type WHERE {
  [] a&nbsp;?type .
} ORDER BY&nbsp;?type
</code></pre>



<p>Uit de resultaten zien we dat een native triplestore sneller is, en dat is geen verrassing. Het inschakelen van redeneren heeft doorgaans een impact op de performantie. Voor deze query doet Stardog het beter dan Ontop.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16023" src="/wp-content/uploads/2021/05/1.png" alt="Resultaten van query-1" width="878" height="319" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/1.png 878w, https://www.smalsresearch.be/wp-content/uploads/2021/05/1-300x109.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/1-768x279.png 768w" sizes="auto, (max-width: 878px) 100vw, 878px" /></p>
<h2>Query: een lijst van alle relaties in de knowledge graph</h2>
<p>Deze eenvoudige SPARQL-query laat ons toe om alle relaties in de knowledge graph op te halen:</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">SELECT DISTINCT&nbsp;?p WHERE {
  []&nbsp;?p [] .
} ORDER BY&nbsp;?p
</code></pre>



<p>Wat blijkt? Stardog was niet in staat deze query op te lossen. In sommige gevallen is Stardog niet in staat variabelen op de plaats van relaties te gebruiken als de subject en object niet elders gebruikt wordt of geen constanten bevat.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16026" src="/wp-content/uploads/2021/05/2.png" alt="Resultaten query-2" width="1428" height="514" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/2.png 1428w, https://www.smalsresearch.be/wp-content/uploads/2021/05/2-300x108.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/2-768x276.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/05/2-1024x369.png 1024w" sizes="auto, (max-width: 1428px) 100vw, 1428px" /></p>
<h2>Query: een lijst van alle personen met namen, en hun optionele +2</h2>
<p>De volgende SPARQL-query is een meer &#8220;realistische&#8221; query. We wensen een lijst van alle personen, hun namen (via <code>rdfs:label</code>), en hun +2 waar relevant (want niet iedereen heeft een +2). De <code>OPTIONAL</code> is vergelijkbaar met een <code>LEFT OUTER JOIN</code> in SQL.</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">SELECT DISTINCT&nbsp;?p&nbsp;?l&nbsp;?s WHERE {
 &nbsp;?p a smals:Person ; rdfs:label&nbsp;?l .
  OPTIONAL {
   &nbsp;?p smals:supervisor [ smals:supervisor&nbsp;?s ]
  }
}
</code></pre>



<p>Ontop en Fuseki zonder reasoning hebben best gelijkaardige resultaten. Ook hier heeft redeneren een impact. Stardog is wat trager dan Ontop, maar toch ietsjes sneller dan Ontop met redeneren.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16030" src="/wp-content/uploads/2021/05/5.png" alt="Resultaten query-5" width="888" height="319" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/5.png 888w, https://www.smalsresearch.be/wp-content/uploads/2021/05/5-300x108.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/5-768x276.png 768w" sizes="auto, (max-width: 888px) 100vw, 888px" /></p>
<h2>Query: een lijst van alle personen, hun eventuele naam, en zonder +1</h2>
<p>Deze SPARQL-query lijkt op het vorige voorbeeld, maar heeft een belangrijk verschil; namelijk een <code>OPTIONAL</code> + <code>! BOUND</code>. We zijn op zoek naar personen zonder +1 en bereiken dit door een <code>OPTIONAL</code> en enkel de resultaten te weerhouden waarvoor de variabele in de <code>OPTIONAL</code> geen waarde heeft (m.a.w.: &#8220;not bound&#8221;). Dit is een vrij courant patroon in SPARQL-query&#8217;s.</p>



<pre class="wp-block-code line-numbers"><code class="language-sparql">SELECT DISTINCT&nbsp;?p&nbsp;?l WHERE {
 &nbsp;?p a smals:Person .
  OPTIONAL {&nbsp;?p rdfs:label&nbsp;?l }
  OPTIONAL {&nbsp;?p smals:supervisor&nbsp;?s. }
  FILTER(!BOUND(?s))
}
</code></pre>



<p>Ook hier blijkt Ontop het beter te doen dan Stardog. En ook hier hebben Fuseki en Ontop gelijkaardige resultaten.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-16032" src="/wp-content/uploads/2021/05/6.png" alt="Resultaten query-6" width="888" height="319" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/05/6.png 888w, https://www.smalsresearch.be/wp-content/uploads/2021/05/6-300x108.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/05/6-768x276.png 768w" sizes="auto, (max-width: 888px) 100vw, 888px" /></p>
<h1>Vergelijking (**)</h1>
<p>In onze studie blijkt Ontop het doorgaans (iets) beter te doen dan Stardog. Dat wil niet zeggen dat Stardog een slecht product is. Ontop is minder toegankelijk; alles werkt aan de hand van bestanden die geconfigureerd moeten worden. Stardog, daarentegen, biedt naast bestanden ook een <a href="https://www.stardog.com/studio/">studio-omgeving</a> aan. Deze studio maakt het makkelijk om de (virtuele) knowledge graphs via een interface te beheren.</p>
<p>Ontop is een oplossing voor virtual knowledge graphs. Stardog, daarentegen, is ook een triplestore met (beperkte) BI functionaliteit. In Stardog kan men op een makkelijk wijze virtual knowledge graphs van verschillende databases met triplestores combineren. Omdat Ontop zich enkel tot virtual knowledge graph richt, is eenzelfde resultaat bekomen wat complexer. Het zal namelijk een combinatie van oplossingen vergen.</p>
<p>Waar Stardog makkelijk verschillende databanken (en databanktechnologieën) kan benaderen, moet men met Ontop hiervoor beroep doen op “middleware&#8221; zoals <a href="https://dremio.com/">Dremio</a>. Dremio is een platform dat ons toelaat bronnen als een virtuele dataset te benaderen. Met andere woorden; virtualisatie bovenop virtualisatie.&nbsp;</p>
<p>Zowel Ontop en Stardog hebben hun eigen taaltje naast de ondersteuning voor R2RML. De <a href="https://docs.stardog.com/virtual-graphs/mapping-data-sources">taal</a> die Stardog aanbiedt is, tezamen met de studio omgeving, best wel gebruiksvriendelijker. Het gebruikt van dat taaltje gaat echter ten koste van interoperabiliteit. Verder is hun taaltje niet gebaseerd op een graaf-datamodel, waardoor we die niet als een graaf kunnen bevragen.</p>
<h1>Opportuniteiten</h1>
<p>Naast het bevragen van relationele databanken als een graaf, biedt het gebruik van virtual knowledge graphs en R2RML ook nog andere voordelen:</p>
<ol>
<li>De R2RML mappings zijn grafen, kunnen worden geannoteerd, en zelf als graaf bevraagd worden. In een complexe omgeving kunnen we dus nagaan waar informatie van entiteiten vandaan komt. Een SPARQL-query zoals “geef me alle mappings waar entiteiten van het type persoon worden gemaakt” zijn dus mogelijk.</li>
<li>De gegevens in verschillende databanken zijn conceptueel geïntegreerd. Dit laat ons toe om geïntegreerde data op het niveau van knowledge graphs te valideren, bijvoorbeeld aan de hand van <a href="/shacl-logische-en-vormcontroles-met-kg-technologieen/">SHACL</a> (het onderwerp van een vorig artikel).&nbsp;</li>
</ol>
<h1>Samenvatting</h1>
<p>In dit artikel hebben we het onderwerp van virtuele knowledge graphs besproken. Virtual knowledge graphs laten ons toe om relationele databanken als een graaf te benaderen. Dit is handig als we wensen met de meest recente data te werken en data redundantie te reduceren. Daar tegenover staat dat virtual knowledge graphs wat trager zijn en niet alle mogelijkheden van de graaf-querytalen benut kunnen worden. De beperkingen van de virtual knowledge graphs liggen enerzijds aan de implementaties van oplossingen (m.a.w. vendor-specifieke beperkingen) en aan de onderliggende relationele databanken.</p>
<p>De meeste oplossingen ondersteunen een gestandaardiseerd taaltje om relationele databanken naar grafen af te beelden. Dit bevordert natuurlijk de interoperabiliteit. Het gedrag van een virtual knowledge graph is echter niet gestandaardiseerd en bestaande oplossingen moeten dus met de knowledge graph vereisten van een organisatie afgetoetst worden.</p>
<p>Voor dit artikel namen we enkel Ontop (vrije software) en Stardog (commercieel) onder de loep, maar er zijn natuurlijk ook nog andere oplossingen. De experimenten en vergelijkingen zijn beperkt en hadden de intentie om ons een aantal eerste inzichten te geven.</p>
<p>Indien up-to-date data belangrijk is en men met de best wel serieuze beperkingen (zoals het verlies in performantie, beperkingen in de soorten graafbevragingen die we kunnen stellen,&#8230;) kan leven, dan zijn virtual knowledge graphs een haalbare oplossing voor een organisatie.&nbsp;</p>
<p>Door de beperkingen heeft men ook geen garantie dat tools voor knowledge graphs zonder enige aanpassing naar behoren zullen werken. Ontodia, bijvoorbeeld, maakt &#8220;out-of-the-box&#8221; gebruik van arbitraire paden. Arbitraire paden worden voor virtual knowledge graphs doorgaans niet ondersteund. Men moet dus de instellingen van Ontodia aanpassen.</p>
<p>En indien men wenst om aan graph analytics te doen, waarbij men grote hoeveelheden data <em>en hun relaties</em> wil analyseren, dan zijn virtual knowledge graphs absoluut niet aan te raden, en moet men opteren voor een kopie in een performante graafdatabank. Dus: hoe intensiever de toepassingen bovenop de knowledge graph, hoe minder haalbaar virtual knowledge graphs.</p>
<p>&nbsp;</p>
<p>(*) <a href="https://direct.mit.edu/dint/article/1/3/201/9978/Virtual-Knowledge-Graphs-An-Overview-of-Systems">Ultrawrap van Capsenta bleek dit te ondersteunen</a>. Capsenta werd echter door data.world <a href="https://data.world/blog/weve-acquired-capsenta-to-bring-the-power-of-knowledge-graphs-to-companies-with-on-prem-data/">overgenomen</a>. Deze technologie hebben we voor deze studie niet getest.</p>
<p>(**) Stardog herschrijft mappings in R2RML naar hun eigen taaltje. Tijdens het schrijven van dit artikel werd het echter duidelijk dat een recentere versie deze niet correct vertaalde, waardoor de virtual knowledge graph niet de juiste antwoorden teruggaf. We hebben Stardog hieromtrent gecontacteerd.</p>
<p>_________________________</p>
<p><em>Dit is een ingezonden bijdrage van Christophe Debruyne, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>



<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/prism.min.js" integrity="sha512-YBk7HhgDZvBxmtOfUdvX0z8IH2d10Hp3aEygaMNhtF8fSOvBZ16D/1bXZTJV6ndk/L/DlXxYStP8jrF77v2MIg==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-zc7WDnCM3aom2EziyDIRAtQg1mVXLdILE09Bo+aE1xk0AM2c2cVLfSW9NrxE5tKTX44WBY0Z2HClZ05ur9vB6A==" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/plugins/line-numbers/prism-line-numbers.min.css" integrity="sha512-cbQXwDFK7lj2Fqfkuxbo5iD1dSbLlJGXGpfTDqbggqjHJeyzx88I3rfwjS38WJag/ihH7lzuGlGHpDBymLirZQ==" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/themes/prism.min.css" integrity="sha512-tN7Ec6zAFaVSG3TpNAKtk4DOHNpSwKHxxrsiw4GHKESGPs5njn/0sMCUMl2svV4wo4BK/rCP7juYz+zx+l6oeQ==" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/plugins/line-numbers/prism-line-numbers.min.js" integrity="sha512-br8H6OngKoLht57WKRU5jz3Vr0vF+Tw4G6yhNN2F3dSDheq4JiaasROPJB1wy7PxPk7kV/+5AIbmoZLxxx7Zow==" crossorigin="anonymous"></script>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ontodia: outil de visualisation de graphes de connaissances</title>
		<link>https://www.smalsresearch.be/ontodia-outil-de-visualisation-de-graphes-de-connaissances/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Mon, 26 Apr 2021 12:26:27 +0000</pubDate>
				<category><![CDATA[Quick reviews]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/ontodia-outil-de-visualisation-de-graphes-de-connaissances/</guid>

					<description><![CDATA[Ontodia est une bibliothèque JavaScript open source permettant d’explorer et de visualiser les contenus d’un graphe de connaissances sous la forme de diagrammes interactifs. Ontodia ne requiert pas la connaissance des langages de requête de graphe, ce qui rend les graphes accessibles à tout type d’utilisateurs. Les diagrammes, qui sont esthétiquement agréables, peuvent être téléchargés [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><p style="font-weight: 400">Ontodia est une bibliothèque JavaScript open source permettant d’explorer et de visualiser les contenus d’un graphe de connaissances sous la forme de diagrammes interactifs. Ontodia ne requiert pas la connaissance des langages de requête de graphe, ce qui rend les graphes accessibles à tout type d’utilisateurs. Les diagrammes, qui sont esthétiquement agréables, peuvent être téléchargés en format SVG ou PNG. Smals Research a utilisé Ontodia non seulement pour montrer et expliquer le concept d’un graphe de connaissances au sein de Smals et auprès de ses clients, mais aussi dans des POCs.</p>
<p style="font-weight: 400">Ontodia is een open source JavaScript-bibliotheek voor het verkennen en visualiseren van een knowledge graph aan de hand van interactieve diagrammen. Ontodia vereist geen kennis van graaf-querytalen, waardoor de knowledge graph voor alle soorten gebruikers toegankelijk wordt. De diagrammen, die esthetisch aantrekkelijk zijn, kunnen worden gedownload als SVG of PNG bestanden. Smals Research gebruikte Ontodia niet alleen om het concept van een knowledge graph binnen Smals en haar klanten toe te lichten, maar ook als onderdeel binnen een aantal POC&#8217;s.</p></p>







            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2021/04/2021-04-26-qr-ontodia.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of 2021-04-26-qr-ontodia."></object>
                <a id="wp-block-file--media-b6776936-2cc5-422a-85bc-33870d6c9c52" href="https://www.smalsresearch.be/wp-content/uploads/2021/04/2021-04-26-qr-ontodia.pdf">2021-04-26-qr-ontodia</a><a href="https://www.smalsresearch.be/wp-content/uploads/2021/04/2021-04-26-qr-ontodia.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-b6776936-2cc5-422a-85bc-33870d6c9c52">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Knowledge graphs &#8211; Concept, mogelijkheden en aandachtspunten</title>
		<link>https://www.smalsresearch.be/knowledge-graphs-concept-mogelijkheden-en-aandachtspunten/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Tue, 30 Mar 2021 12:30:37 +0000</pubDate>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Data Integration]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Knowledge Management]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/knowledge-graphs-concept-mogelijkheden-en-aandachtspunten/</guid>

					<description><![CDATA[Slides van de webinar voor Smals Academy op 20/03/2021 (texte français&#160;: voir ci-dessous) Kennis en informatie in een bedrijfsorganisatorische context is doorgaans verspreid over databases, rekenbladen, documenten, etc. Daarnaast bezitten kenniswerkers ook domeinexpertise die niet in een systeem wordt opgeslagen. Maar wat als men die kennis en informatie wenst te integreren om, bijvoorbeeld, processen te [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>Slides van de webinar voor Smals Academy op 20/03/2021
</strong>(texte français&nbsp;: voir ci-dessous)<strong>
</strong></p>



<p>Kennis en informatie in een bedrijfsorganisatorische context is doorgaans verspreid over databases, rekenbladen, documenten, etc. Daarnaast bezitten kenniswerkers ook domeinexpertise die niet in een systeem wordt opgeslagen. Maar wat als men die kennis en informatie wenst te integreren om, bijvoorbeeld, processen te automatiseren of nieuwe inzichten te verwerven? <strong>Knowledge graphs</strong> bieden hiervoor een oplossing.</p>



<p>In deze webinar werpt <strong>Christophe Debruyne</strong> zijn licht op het concept van de knowledge graphs en hun mogelijkheden. Hij behandelt daarvoor de volgende topics:</p>



<p>&#8211; Wat is een knowledge graph
&#8211; Knowledge graphs versus andere initiatieven
&#8211; Knowledge graphs versus andere AI technieken
&#8211; Toepassingsgebied van knowledge graphs
&#8211; Bouwen en onderhouden van een knowledge graph
</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><p></p><p>
Dans le contexte organisationnel d&#8217;une entreprise, les connaissances et les informations sont généralement réparties dans des bases de données, des tableurs, des documents, etc. Parallèlement, les travailleurs de la connaissance possèdent une expertise de domaine qui n&#8217;est pas stockée dans un système. Mais que faire dès lors si l&#8217;on souhaite intégrer ces connaissances et informations pour, par exemple automatiser des processus ou acquérir de nouvelles connaissances&nbsp;? Les <strong>knowledge graphs</strong> offrent une solution à cet égard.</p></p>



<p>Dans ce webinaire, <strong>Christophe Debruyne</strong> fait la lumière sur le concept des graphes de connaissances et leurs possibilités. Il aborde les topics suivants&nbsp;:</p>



<p>&#8211; Qu&#8217;est-ce qu&#8217;un knowledge graph
&#8211; Positionnement des knowledge graphs face à d&#8217;autres initiatives
&#8211; Positionnement des knowledge graphs face à d&#8217;autres techniques d&#8217;IA
&#8211; Domaine d&#8217;application des knowledge graphs
&#8211; Construction et maintenance d&#8217;un knowledge graph</p>



<h1 class="wp-block-heading">Recording</h1>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Knowledge Graphs" width="500" height="281" src="https://www.youtube.com/embed/fAVZcK7vTp8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h1 class="wp-block-heading">Presentation</h1>



<div data-wp-interactive="core/file" class="wp-block-file"><object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="/wp-content/uploads/2021/03/2021-03-30-webinar-kg.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of 2021-03-30-webinar-kg."></object><a id="wp-block-file--media-155c3bd7-198f-47eb-a58a-ed519725ac23" href="https://www.smalsresearch.be/wp-content/uploads/2021/03/2021-03-30-webinar-kg.pdf">2021-03-30-webinar-kg</a><a href="/wp-content/uploads/2021/03/2021-03-30-webinar-kg.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-155c3bd7-198f-47eb-a58a-ed519725ac23">Download</a></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SHACL: Logische- en vormcontroles met kennisgraaftechnologieën</title>
		<link>https://www.smalsresearch.be/shacl-logische-en-vormcontroles-met-kg-technologieen/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Thu, 18 Mar 2021 15:40:48 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[shacl]]></category>
		<category><![CDATA[standards]]></category>
		<guid isPermaLink="false">/?p=15551</guid>

					<description><![CDATA[In 2017 publiceerde het World Wide Web Consortium (W3C) een standaard voor het valideren van graaf-data genaamd SHACL. SHACL staat voor “Shapes Constraint Language” en de naam geeft al een goede indicatie van wat het ondersteunt. SHACL is een taal (language) dat ons toelaat vormen (shapes) te voorschrijven waaraan een graaf aan moet voldoen. De [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In 2017 publiceerde het World Wide Web Consortium (W3C) een standaard voor het valideren van graaf-data genaamd <a href="https://www.w3.org/TR/shacl/">SHACL</a>. SHACL staat voor “Shapes Constraint Language” en de naam geeft al een goede indicatie van wat het ondersteunt. SHACL is een <em>taal</em> (language) dat ons toelaat <em>vormen</em> (shapes) te voorschrijven waaraan een graaf aan moet voldoen. De vormen worden aan de hand van <i>voorwaarden </i>(constraints) beschreven. “Past” een (deel van een) graaf niet in de vorm, dan is deze niet geldig. SHACL biedt ons niet alleen een manier aan om dergelijke voorwaarden te beschrijven, een SHACL <em>processor</em> is nadien in staat om deze te verwerken en de controles uit te voeren.</p>
<p>SHACL valideert data, welke opgeslagen zijn als graaf-data in <a href="https://www.w3.org/RDF/">Resource Description Framework</a> (RDF). RDF is net als SHACL een W3C standaard en een vaak onzichtbare gevestigde waarde om data te integreren. Details over RDF zijn voor dit artikel niet belangrijk, het volstaat te weten dat RDF een eenvoudig graaf-datamodel is en dat RDF ons toelaat &#8220;dingen&#8221; met <a href="https://tools.ietf.org/html/rfc3987">International Resource Identifiers</a> (IRI’s) te identificeren.<sup>[1]</sup> Een bekend voorbeeld van een IRI is een Uniform Resource Locator (URL) om een document op het Web te identificeren en op te vragen. Een IRI kan een verwijzing naar externe gegevens bevatten en hierdoor laat RDF ons toe om een <em>gedistribueerde</em> graaf te bouwen. We zullen zien dat SHACL de IRI’s gebruikt om naar fouten in de graaf-data te wijzen.</p>
<p>Omdat SHACL van RDF gebruik maakt, wordt het vaak in de context van <a href="https://www.w3.org/standards/semanticweb/data">Linked Data</a> voorgesteld. Desalniettemin is het beeld van SHACL wat genuanceerder; SHACL werd ontwikkeld om RDF graaf-data te valideren, <em>ongeacht het Linked Data is</em>. Door deze nuance in het achterhoofd te houden, wordt het makkelijker om opportuniteiten en cases te vinden. Dit artikel poogt deze nuance, aan de hand van voorbeelden, te belichten.</p>
<h2>Een scenario als motivatie</h2>
<p>Als gegevens uit verschillende systemen dienen gecombineerd te worden, dan moet men rekening houden met voorwaarden die <em>over die systemen heen</em> gelden. Omdat elk systeem normaliter enkel verantwoordelijk is voor de data die tot hun scope behoren, worden die voorwaarden niet door de afzonderlijke systemen afgetoetst. Het valideren van die voorwaarden is echter belangrijk om de <em>kwaliteit van de gegevens in zijn geheel te vrijwaren</em>.</p>
<p>We illustreren de problematiek met een eenvoudig voorbeeld. We hebben een aangiftesysteem (Systeem A) en een systeem voor het distribueren van voordelen (Systeem B). Elk systeem heeft een conceptueel schema waaruit delen van de applicatielaag en een database schema voortvloeien (zie onderstaand figuur).</p>
<p><figure id="attachment_15559" aria-describedby="caption-attachment-15559" style="width: 1503px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15559" src="/wp-content/uploads/2021/03/shacl-figuur-1.png" alt="Twee systemen met gedeelde concepten" width="1503" height="325" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-1.png 1503w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-1-300x65.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-1-768x166.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-1-1024x221.png 1024w" sizes="auto, (max-width: 1503px) 100vw, 1503px" /><figcaption id="caption-attachment-15559" class="wp-caption-text">Twee autonome systemen met gemeenschappelijke concepten. Elke systeem is verantwoordelijk voor de correcte opslag van hun data, doch gelden er voorwaarden over systemen heen. De systemen die nu bestaan kunnen deze echter niet aftoetsen.</figcaption></figure></p>
<p>Beide systemen delen concepten, in dit geval de concepten “dossier” en “dossiernummer”. Systeem B houdt de data van transacties bij, waaronder een verwijzing naar het dossier van een transactie. Systeem B hoeft de datum van aangifte niet bij te houden omdat dit niet tot de scope van het systeem behoort. Doch is het logisch dat, alvorens het tweede systeem een transactie kan uitvoeren (in dit geval het toewijzen van een voordeel), dat de datum van aangifte vóór eender welke transactie moet liggen. Men gaat er van uit dat alles binnen een organisatie vlot verloopt en er dus geen problemen zijn. Maar hoe controleren we dit?</p>
<p>Men kan controlescripts schrijven die de verschillende bronnen raadplegen, maar dan zitten de voorwaarden “verborgen” in de code van die scripts. Is er een manier om die voorwaarden “buiten” de systemen op een gestructureerde en transparante manier te beschrijven? Ja, SHACL biedt een oplossing op die vraag. Vooraleer we dit demonstreren, zullen we SHACL eerst toelichten.</p>
<h2>SHACL</h2>
<p>SHACL biedt ons een nieuwe manier om data op een open, gestructureerde, en transparante wijze te valideren. SHACL laat ons toe om voorwaarden aan de hand van open en gestandaardiseerde modellen buiten de eigenlijke programmatie te definiëren en te valideren. Omdat SHACL expressiever is dan de meeste databasetechnologieën, maakt SHACL complexe <em>logische- en vormcontroles</em> mogelijk.</p>
<p>We hebben reeds aangehaald dat SHACL RDF grafen valideert. De graaf die wordt gevalideerd wordt de <em>data graph</em> genoemd. De <em>shapes graph </em>bevat de voorwaarden beschreven met SHACL en wordt ook als een RDF graaf opgeslagen. De data graph en shapes graph worden door een validatieproces verwerkt en als resultaat hebben we een <em>validation report</em>. Het rapport is een RDF graaf met het resultaat: de data graph is conform of niet. Indien niet conform, dan bevat het rapport een lijst van problemen met gedetailleerde informatie en verwijzingen naar problemen.</p>
<p><figure id="attachment_15566" aria-describedby="caption-attachment-15566" style="width: 1365px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15566" src="/wp-content/uploads/2021/03/shacl-figuur-2.png" alt="SHACL validatieproces" width="1365" height="308" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-2.png 1365w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-2-300x68.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-2-768x173.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-2-1024x231.png 1024w" sizes="auto, (max-width: 1365px) 100vw, 1365px" /><figcaption id="caption-attachment-15566" class="wp-caption-text">Een SHACL validatieproces maakt gebruik van een shapes graph om de data graph te valideren. Dit resulteert in een validatierapport dat ook als een graaf wordt opgeslagen. Het rapport verwijst naar de problemen dankzij IRI&#8217;s en RDF.</figcaption></figure></p>
<p>De shapes graph bevat een verzameling <em>shapes</em> waaraan de data graph moet voldoen. Het proces verloopt in drie stappen. Voor elke shape <em>S</em> in de shapes graph gaat het proces:</p>
<ol>
<li>Op zoek naar de zogenaamde <em>focus nodes</em> in de data graph. Elke shape definieert de focus nodes aan de hand van “targets”. Een shape voor transacties heeft als target &#8220;alle entiteiten van het type Transactie&#8221;, bijvoorbeeld. Deze stap geeft een verzameling terug.</li>
<li>Voor elk element in de verzameling focus nodes worden alle voorwaarden in de shape <em>S</em> afgetoetst. Elk probleem wordt aan een lijst toegevoegd. Voorbeelden van zulke voorwaarden zijn:
<ol>
<li>Elke transactie behoort tot exact één dossier;</li>
<li>De datum van een transactie moet groter zijn dan de datum van aangifte van het dossier dat tot die transactie behoort;</li>
<li>…</li>
</ol>
</li>
<li>De lijst van problemen wordt gebruikt om een validatierapport op te maken.</li>
</ol>
<p>Hoewel men spreekt van een data- en shapes graph, hoeven deze graphs niet afzonderlijk bewaard te worden. Men kan de twee grafen in één grote <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">(kennis)graaf</a> opslaan. SHACL en het validatieproces zijn intelligent genoeg om de shapes uit de graaf te extraheren. </p>
<p><figure id="attachment_15569" aria-describedby="caption-attachment-15569" style="width: 1693px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15569" src="/wp-content/uploads/2021/03/shacl-figuur-3.png" alt="Stappen in het validatieproces" width="1693" height="508" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-3.png 1693w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-3-300x90.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-3-768x230.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-3-1024x307.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/03/shacl-figuur-3-1536x461.png 1536w" sizes="auto, (max-width: 1693px) 100vw, 1693px" /><figcaption id="caption-attachment-15569" class="wp-caption-text">Stappen in het validatieproces</figcaption></figure></p>
<h2>Demonstratie</h2>
<p>We zullen SHACL nu aan de hand van eenvoudig voorbeeld illustreren. We vertrekken van ons inleidend scenario en gaan er van uit dat onze gegevens reeds in een RDF graaf werden geïntegreerd. We zullen eerst nagaan of dossiers exact één datum van aangifte hebben. Onze data graph ziet er als volgt uit:</p>
<pre>1.    @prefix <span style="color: #0000ff;">ex:</span> <span style="color: #808000;">&lt;http://www.example.com/ns#&gt;</span> .<br />2.    @prefix <span style="color: #0000ff;">xsd:</span> <span style="color: #808000;">&lt;http://www.w3.org/2001/XMLSchema#&gt;</span> .<br />3.<br />4.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D1</span> <br />5.      a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />6.    .<br />7.<br />8.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D2</span><br />9.      a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />10.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">ingediendOp</span> <span style="color: #800000;">"2021-02-20"</span> ;<br />11.   .<br />12.<br />13.   <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D3</span><br />14.     a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />15.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">ingediendOp</span> <span style="color: #800000;">"2021-02-21"</span>^^<span style="color: #0000ff;">xsd:</span><span style="color: #008080;">date</span> ;<br />16.   .</pre>
<p>Hier hebben we informatie over drie dossiers (ex:D1, ex:D2, en ex:D3). D1 heeft geen datum, D2 heeft een datum van het type string (default datatype), en D3 heeft een datum van het type datum. De graaf bevat verder (nog) niets. In onze shapes graph beschrijven we de voorwaarden voor een geldig dossier:</p>
<pre>1.    @prefix <span style="color: #0000ff;">ex:</span> <span style="color: #808000;">&lt;http://www.example.com/ns#&gt;</span> .<br />2.    @prefix <span style="color: #0000ff;">sh:</span> <span style="color: #808000;">&lt;http://www.w3.org/ns/shacl#&gt;</span> .<br />3.    @prefix <span style="color: #0000ff;">xsd:</span> <span style="color: #808000;">&lt;http://www.w3.org/2001/XMLSchema#&gt;</span> .<br />4. <br />5.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">DossierShape</span><br />6.      a <span style="color: #0000ff;">sh:</span><span style="color: #008080;">NodeShape</span> ;<br />7.      <span style="color: #0000ff;">sh:</span><span style="color: #008080;">targetClass</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />8.      <span style="color: #0000ff;">sh:</span><span style="color: #008080;">property</span> [<br />9.        <span style="color: #0000ff;">sh:</span><span style="color: #008080;">path</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">ingediendOp</span> ;<br />10.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">datatype</span> <span style="color: #0000ff;">xsd:</span><span style="color: #008080;">date</span> ;<br />11.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">minCount</span> <span style="color: #993300;">1</span> ;<br />12.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">maxCount</span> <span style="color: #993300;">1</span> ;<br />13.     ] ;<br />14.   .</pre>
<p>Op lijn 5 declareren we een nieuwe shape voor Dossiers. Deze shape gaat enkel entiteiten van het type Dossier valideren (lijn 7). In deze shape worden er voorwaarden op de relatie (property) ex:ingediendOp gedeclareerd. De voorwaarden voor deze relatie zijn:</p>
<ul>
<li>van het type xsd:date (lijn 10),</li>
<li>minimaal één (lijn 11), en</li>
<li>maximaal één (lijn 12).<sup>[2</sup><sup>]</sup></li>
</ul>
<p>Eens we de data graph en de shapes graph als input aan een SHACL processor geven, dan krijgen we het volgende validatierapport:</p>
<pre><span style="color: #008000;">$ pyshacl -s shacl.ttl -m -f human data.ttl</span><br />Validation Report<br />Conforms: False<br />Results (2):<br />Constraint Violation in DatatypeConstraintComponent (http://www.w3.org/ns/shacl#DatatypeConstraintComponent):<br />        Severity: sh:Violation<br />        <span style="background-color: #ffff99;">Focus Node: ex:D2</span><br />        Value Node: Literal("2021-02-20")<br />        Result Path: ex:ingediendOp<br />        <span style="background-color: #ffff99;">Message: Value is not Literal with datatype xsd:date</span><br />Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent):<br />        Severity: sh:Violation<br />        <span style="background-color: #ffff99;">Focus Node: ex:D1</span><br />        Result Path: ex:ingediendOp<br />        <span style="background-color: #ffff99;">Message: Less than 1 values on ex:D1-&gt;ex:ingediendOp</span><br /><br /></pre>
<p>Dit rapport werd gegenereerd met <a href="https://pypi.org/project/pyshacl/0.9.5/">pySHACL</a> (later verwijzen we naar andere implementaties). Deze implementatie biedt ons, voor de demonstratie, een vrij leesbaar rapport in een console omgeving. Men kan zien dat twee dossiers niet aan de voorwaarde voldoen. Het rapport bevat verder expliciete verwijzingen naar de problemen.</p>
<p>We breiden het voorbeeld uit met transacties. We nemen aan dat transacties een datum hebben. De datum van een transactie moet, in principe, groter zijn dan de aangiftedatum van het dossier van die transactie. Voor de tweede demonstratie gebruiken we de volgende data graph:</p>
<pre>1.    @prefix <span style="color: #0000ff;">ex:</span> <span style="color: #808000;">&lt;http://www.example.com/ns#&gt;</span> .<br />2.    @prefix <span style="color: #0000ff;">xsd:</span> <span style="color: #808000;">&lt;http://www.w3.org/2001/XMLSchema#&gt;</span> .<br />3. <br />4.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D3</span><br />5.      a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />6.      <span style="color: #0000ff;">ex:</span><span style="color: #008080;">ingediendOp</span> <span style="color: #800000;">"2021-02-21"</span>^^<span style="color: #0000ff;">xsd:</span><span style="color: #008080;">date</span> ;<br />7.    .<br />8. <br />9.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">T1</span> <br />10.     a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Transactie</span> ;<br />11.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">behoortTot</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D3</span> ;<br />12.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">geregistreerdOp</span> <span style="color: #993300;">"2021-02-22"</span>^^<span style="color: #0000ff;">ex:</span><span style="color: #008080;">date</span> ;<br />13.   .<br />14. <br />15.   <span style="color: #0000ff;">ex:</span><span style="color: #008080;">T2</span><br />16.     a <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Transactie</span> ;<br />17.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">behoortTot</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">D3</span> ;<br />18.     <span style="color: #0000ff;">ex:</span><span style="color: #008080;">geregistreerdOp</span> <span style="color: #993300;">"2021-02-21"</span>^^<span style="color: #0000ff;">ex:</span><span style="color: #008080;">date</span> ;<br />19.   .</pre>
<p>We behouden dossier ex:D3 en voegen twee transacties ex:T1 en ex:T2 toe. Beide transacties behoren tot Dossier ex:D3. Merk op dat de registratiedatum van ex:T2 en de aangiftedatum van ex:D3 op dezelfde dag vallen. Dit zou niet mogen. Gelukkig kunnen we nu de voorwaarde op de geïntegreerde data aftoetsen. We maken een shape voor transacties die dit zal controleren:</p>
<pre>1.    @prefix <span style="color: #0000ff;">ex:</span> <span style="color: #808000;">&lt;http://www.example.com/ns#&gt;</span> .<br />2.    @prefix <span style="color: #0000ff;">sh:</span> <span style="color: #808000;">&lt;http://www.w3.org/ns/shacl#&gt;</span> .<br />3.    @prefix <span style="color: #0000ff;">xsd:</span> <span style="color: #808000;">&lt;http://www.w3.org/2001/XMLSchema#&gt;</span> .<br />4. <br />5.    <span style="color: #008000;"># ex:DossierShape hier</span> <br />6. <br />7.    <span style="color: #0000ff;">ex:</span><span style="color: #008080;">TransactieShape</span><br />8.      a <span style="color: #0000ff;">sh:</span><span style="color: #008080;">NodeShape</span> ;<br />9.      <span style="color: #0000ff;">sh:</span><span style="color: #008080;">targetClass</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Transactie</span> ;<br />10.     <span style="color: #0000ff;">sh:</span><span style="color: #008080;">property</span> [<br />11.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">path</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">behoortTot</span> ;<br />12.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">class</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">Dossier</span> ;<br />13.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">minCount</span> <span style="color: #993300;">1</span> ;<br />14.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">maxCount</span> <span style="color: #993300;">1</span> ;<br />15.     ] ;<br />16.     <span style="color: #0000ff;">sh:</span><span style="color: #008080;">property</span> [<br />17.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">path</span> ( <span style="color: #0000ff;">ex:</span><span style="color: #008080;">behoortTot</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">ingediendOp</span> ) ;<br />18.       <span style="color: #0000ff;">sh:</span><span style="color: #008080;">lessThan</span> <span style="color: #0000ff;">ex:</span><span style="color: #008080;">geregistreerdOp</span> ;<br />19.     ] ;<br />20.   .</pre>
<p>We laten de kardinaliteit en data type van de registratiedatum even buiten beschouwing (deze voorwaarden lijken op het vorige voorbeeld). Op lijnen 10 tot en met 15 controleren of elke transactie tot exact één entiteit van het type Dossier behoort. Op lijnen 16 tot en met 19 vergelijken we twee waarden: de aangiftedatum van het dossier via een complex pad (“ingediend op” via “behoort tot”) en de registratiedatum. Het validatieproces geeft ons het volgend rapport:</p>
<pre><span style="color: #008000;">$ pyshacl -s shacl.ttl -m -f human data.ttl</span><br />Validation Report<br />Conforms: False<br />Results (1):<br />Constraint Violation in LessThanConstraintComponent (http://www.w3.org/ns/shacl#LessThanConstraintComponent):<br />        Severity: sh:Violation<br />        <span style="background-color: #ffff99;">Focus Node: ex:T2</span><br />        Value Node: Literal("2021-02-21", datatype=xsd:date)<br />        Result Path: ( ex:behoortTot ex:ingediendOp )<br />        <span style="background-color: #ffff99;">Message: Value of ex:T2-&gt;ex:geregistreerdOp &lt;= Literal("2021-02-21", datatype=xsd:date)</span></pre>
<p>De transactie ex:T1 is correct en komt dus niet in het rapport voor. De node ex:T2 heeft echter een fout. Het rapport geeft aan dat de waarde van het pad <em>niet</em> kleiner is dan de waarde voor ex:geregistreerdOp. De boodschap van de fout leest dat de waarde van ex:geregistreerdOp kleiner of gelijk is aan de waarde van het pad.</p>
<p>Bovenstaand voorbeeld met samengestelde paden licht maar het tipje van de sluier met betrekking tot SHACL’s mogelijkheden. SHACL ondersteunt de combinatie van voorwaarden aan de hand van logische operatoren (and, or, not, …) en bevat een belangrijk aantal ingebouwde functies voor onder andere tekenreeksen, numerieke gegevens, en data. SHACL biedt verder ook ondersteuning voor het aanmaken van (domein-specifieke) voorwaarden. Dergelijke voorwaarden worden beschreven in <a href="https://www.w3.org/TR/sparql11-query/">SPARQL</a> (de querytaal voor RDF grafen) die in <em>constraint components</em> worden ingekapseld. Omdat die op maat gemaakte voorwaarden in RDF beschreven worden, kunnen deze dan ook op verscheidene plaatsen worden bevraagd en hergebruikt. Met andere woorden: onze op maat gemaakte voorwaarden zijn zelf interoperabel.</p>
<p>Standaard is de ernst van alle problemen een “overtreding” (violation)&#8211;een kritisch probleem. Men kan echter de ernst van bepaalde voorwaarden aanpassen naar een “waarschuwing” (warning)  en “informatie” (info) voor niet-kritische problemen. Dit verandert niets aan het validatieproces en het is dus aan een volgend proces om deze te interpreteren. We kunnen problemen prioriteren, bijvoorbeeld.</p>
<h2>Mogelijkheden en implementaties</h2>
<p><strong>SHACL is een open standaard</strong> en hierdoor hebben we toegang tot verschillende implementaties, zowel vrij als commercieel. Voorbeelden van open en vrije implementaties zijn <a href="https://jena.apache.org/documentation/shacl/">Apache Jena</a>, <a href="https://github.com/TopQuadrant/shacl">TopBraid SHACL API</a>, en <a href="https://pypi.org/project/pyshacl/0.9.5/">pySHACL</a>. Apache Jena ondersteunt de basis van SHACL. TopBraid SHACL API (gebouwd bovenop Apache Jena) en pySHACL ondersteunen een deel van de &#8220;advanced features&#8221; (<a href="https://www.w3.org/TR/shacl-af/">SHACL-AF</a>) zoals geavanceerde afleidingsregels en functies. SHACL-AF werd nog niet gestandardiseerd en behoort dus niet tot de basisspecificatie. Interessant om weten is dat <a href="https://www.topquadrant.com/">TopQuadrant</a> (het bedrijf achter TopBraid SHACL API) bij de standaardisatie betrokken is. Men ziet tegenwoordig ook dat commerciële oplossingen SHACL ondersteunen. <a href="https://neo4j.com/">Neo4j</a>’s graph database, bijvoorbeeld, <a href="https://neo4j.com/docs/labs/nsmntx/current/validation/">voegt de ondersteuning van SHACL incrementeel aan hun suite toe</a>.</p>
<p>SHACL wordt niet alleen opslagen in RDF grafen, maar wordt ook toegepast op RDF grafen. Dit brengt een aantal voordelen en mogelijkheden met zich mee:</p>
<ul>
<li><strong>SHACL bevordert transparantie</strong>. De shapes graph en validatierapporten zijn onderdeel van de kennis die men binnen een organisatie deelt. We kunnen beiden dus als onderdeel van een kennisgraaf beschouwen en de SHACL voorwaarden bevragen aan de hand van graph query-talen. Hierdoor heeft men een holistisch beeld van welke gegevens er bestaan in de kennisgraaf, hoe deze er dienen uit te zien, en hoe deze dienen te worden gebruikt.</li>
<li>Men kan <b>SHACL shapes annoteren met metadata</b>. Dit is mogelijk dankzij de RDF graaftechnologie waarmee SHACL is onderbouwd. We kunnen, voor elk onderdeel van de shapes graph, aanduiden vanwaar de voorwaarde komt, de rationale, waar documentatie gevonden kan worden, etc. Eens dergelijke informatie voorhanden is, dan kan een organisatie op een homogene manier de informatie bevragen. Bevragingen (i.e., queries) zoals “welke voorwaarden gelden omtrent het concept Dossier en vanwaar komen deze?” zijn dan eenvoudig te realiseren.</li>
<li><strong>SHACL kan op verschillende plaatsen en op verschillende manieren toegepast worden</strong>: ter validatie van een kennisgraaf in zijn geheel, ter validatie van inputgegevens alvorens deze te integreren, en ter validatie van gegevens die dienen gedeeld te worden.</li>
<li>Als laatste hebben we de <strong>actieve community en werkgroep</strong> achter SHACL. SHACL zelf bestaat reeds een aantal jaren. De community, gedreven door een belangrijk aantal industriepartners, is actief en werkt aan <a href="https://www.w3.org/TR/shacl-ucr/">uitbreidingen</a> voor taken naast validatie, zoals het genereren van interfaces en het begeleiden van zoekopdrachten. De kans bestaat dat men dra dergelijke tools kan gebruiken of uitproberen.</li>
</ul>
<h2>Nadelen</h2>
<p>Hoewel SHACL ons toelaat voorwaarden buiten een systeem te externaliseren op een open en gestandaardiseerde wijze, moet men ook een aantal mogelijke nadelen overwegen.</p>
<ul>
<li>Ten eerste maakt SHACL gebruik van <strong>RDF als graaf-datamodel</strong>. Hoewel SHACL best expressief is, dienen sommige voorwaarden in SPARQL geformuleerd te worden. De nodige expertise in RDF, SPARQL,… dient in een organisatie aanwezig te zijn of opgebouwd te worden, wat niet per se evident is.</li>
<li>Ten tweede kan <strong>SHACL complex overkomen</strong>. Complexe voorwaarden blijven complex, ongeacht de taal of omgeving. Maar wanneer deze complexiteit wordt gecombineerd met een gebrek aan RDF expertise, dan kan de leercurve steil zijn. Verder werd de standaard intentioneel compact gehouden. SHACL biedt de vergelijkingsoperatoren “kleiner dan” en “kleiner dan of gelijk aan” aan, maar niet de inverse operatoren. Indien men nood heeft aan de inverse relaties, dan moet men de shapes herschrijven (e.g., aan de hand van de beschikbare logische operatoren) of zelf de voorwaarden maken.</li>
<li>Als derde puntje hebben we de beperkingen van bepaalde implementaties.  De meeste bibliotheken werken op <strong>gematerialiseerde grafen</strong>. Dit wil zeggen dat de grafen in een RDF bestand of een RDF graafdatabase werden openslagen. Komt de data van andere bronnen zoals een relationele databank, dan brengt dit uitdagingen wat betreft dataduplicatie en latency met zich mee. Dataduplicatie spreekt voor zich; we hebben “dezelfde” data op twee verschillende locaties. Het is bijgevolg mogelijk dat onze validatierapporten ten opzichte van de originele databronnen gedateerd zijn (i.e., latency). Er zijn initiatieven om databronnen als virtuele (kennis)grafen te benaderen, en dit is het onderwerp van een volgend artikel.</li>
</ul>
<h2>Andere motiverende scenario’s</h2>
<p>In deze tekst legden we de nadruk op gegevens over systemen heen die, eens geïntegreerd, dienden gecontroleerd te worden. De toepassing van SHACL in deze context had dus betrekking op gegevensbeheer en gegevenskwaliteit. Hier zullen we het even hebben over andere motiverende scenario’s voor SHACL.</p>
<p>Ten eerste hebben we <strong>voorwaarden “verborgen” in code</strong>. Het gebeurt vaak dat bepaalde voorwaarden , die wel in het conceptueel model beschreven worden (bijvoorbeeld met UML-notatie), niet door de onderliggende databasetechnologieën worden ondersteund. Hierdoor zijn deze voorwaarden dan verborgen in de applicatielaag (i.e., de code). Belanghebbenden die de database onder de loep nemen zijn dan niet noodzakelijk op de hoogte van de voorwaarden die op een hoger niveau werden beschreven. Daar applicaties vaak evolueren, kan het de moeite lonen om die voorwaarden buiten het systeem op een open, herbruikbare, en transparante manier te declareren om de kwaliteit van de data te vrijwaren.</p>
<p>SHACL laat ook ons toe om <strong>inputgegevens</strong>, e.g., van formulieren, te valideren alvorens deze te integreren. Men kan twee complementaire benaderingen observeren. De logische- en vormcontroles van <em>opzichzelfstaande</em> inputgegevens alvorens deze te integreren, en de controles van de inputgegevens <em>samen</em> met de rest van data alvorens deze te integreren. In de tweede benadering is de data graph de unie van de inputgegevens en de data.</p>
<p>Als laatste hebben we <strong>gegevensuitwisseling</strong>, ofte<em> semantische interoperabiliteit</em>. Gegevensuitwisseling is een derde scenario en een vervolg van het tweede. In dit geval representeert SHACL de verwachtingen van, en afspraken tussen, de betrokken partijen. <span style="font-size: inherit;">Omdat SHACL de voorwaarden als RDF opslaat, kan men deze voorwaarden centraliseren, ter beschikking stellen, en bevragen. Dit is makkelijk te realiseren door de shapes een IRI te geven die men kan consulteren (e.g., een URL binnen een bedrijfsnetwerk).</span></p>
<h2>Conclusies</h2>
<p>SHACL laat ons toe om graafdata op een flexibele en expressieve wijze te valideren. Hoewel SHACL initieel complex is en kennis van RDF technologieën vereist, is SHACL een mogelijks waardevolle aanvulling om de kwaliteit van data te bewaken. Een mogelijke use case is om de data van verschillende bronnen in een graaf te integreren om dan daarop voorwaarden over systemen heen te valideren. Verder is SHACL een open standaard met bestaande tooling. Er bestaan vrije bibliotheken om met SHACL aan de slag te gaan. Verder wordt SHACL ook in bredere semantische oplossingen (zoals de producten van <a href="https://www.topquadrant.com/">TopQuadrant</a> en <a href="https://www.poolparty.biz/">Poolparty</a>) geïntegreerd. Bestaande bibliotheken vertrekken doorgaans van gematerialiseerde grafen (i.e., dataduplicatie). Als dit een probleem zou vormen, dan kan men virtuele knowledge graphs onder de loep nemen. Virtual knowledge graphs staan ook in 2021 op de radar van Smals Research.</p>
<h1>Voetnoten</h1>
<p><sup>[1]</sup> RDF is een onderwerp dat we  in een eerdere <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">blog post</a> hebben behandeld. RDF beschrijft dingen aan de hand van zogenaamde triples. Triples zijn van de vorm (subject, predicate, object) en verbinden een onderwerp (subject) met een voorwerp (object) aan de hand van een relatie (predicate). Een voorbeeld hiervan is: ex:Christophe ex:werkt_voor ex:SmalsResearch.</p>
<p><sup>[2]</sup> De combinatie van “minimaal één” en “maximaal één” leidt tot “exact één&#8221;. SHACL heeft, om de standaard niet te ingewikkeld te maken, bewust voor een beperkt aantal voorwaarden gekozen. SHACL biedt wel de mogelijkheid om eigen voorwaarden aan te maken.</p>
<p>_________________________</p>
<p><em>Dit is een ingezonden bijdrage van Christophe Debruyne, IT consultant bij Smals Research.  Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rocketbook &#8211; Een herbruikbare smart notebook</title>
		<link>https://www.smalsresearch.be/rocketbook-een-herbruikbare-smart-notebook/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Tue, 12 Jan 2021 08:44:43 +0000</pubDate>
				<category><![CDATA[Quick reviews]]></category>
		<category><![CDATA[smart notebook]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/rocketbook-een-herbruikbare-smart-notebook/</guid>

					<description><![CDATA[Een Rocketbook is een herbruikbare notitieblok waarvan men de pagina’s aan de hand van een app kan inscannen en verzenden. De app scant de pagina en gaat op zoek naar bestemmingen die door de gebruiker aangekruist. De gebruiker configureert de bestemmingen in de app. Bestemmingen die ondersteund worden zijn, onder andere, email, Dropbox, Google Drive, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Een Rocketbook is een herbruikbare notitieblok waarvan men de pagina’s aan de hand van een app kan inscannen en verzenden. De app scant de pagina en gaat op zoek naar bestemmingen die door de gebruiker aangekruist. De gebruiker configureert de bestemmingen in de app. Bestemmingen die ondersteund worden zijn, onder andere, email, Dropbox, Google Drive, OneNote, en OneDrive. Ook Slack en Trello worden ondersteund, waarmee men de gescande pagina’s makkelijk aan processen kan koppelen.</p>




<p>Un Rocketbook est un bloc-notes réutilisable dont les pages peuvent être numérisées et envoyées à l&#8217;aide d&#8217;une application mobile. L&#8217;application scanne la page et recherche les destinations cochées par l&#8217;utilisateur. L’utilisateur configure les destinations dans cette application. Les destinations soutenues par l’application incluent, entre autres, e-mail, Dropbox, Google Drive, OneNote et OneDrive. Slack et Trello sont également soutenus, avec lesquels on peut facilement lier les pages numérisées aux processus.</p>







            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2021/01/QR-Rocketbook.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of QR-Rocketbook."></object>
                <a id="wp-block-file--media-3f9df21d-4336-4c30-8e13-4d04b73306c6" href="https://www.smalsresearch.be/wp-content/uploads/2021/01/QR-Rocketbook.pdf">QR-Rocketbook</a><a href="https://www.smalsresearch.be/wp-content/uploads/2021/01/QR-Rocketbook.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-3f9df21d-4336-4c30-8e13-4d04b73306c6">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Differential Privacy</title>
		<link>https://www.smalsresearch.be/differential-privacy/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Tue, 12 Jan 2021 08:30:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=15174</guid>

					<description><![CDATA[Met GDPR, van toepassing sinds mei 2018, voorschrijft de EU de regels voor de verwerking van persoonsgegevens door bedrijven en overheden van EU burgers. Om persoonlijke gegevens in een dataset te beschermen gaat men al te vaak de persoonlijke gegevens verwijderen of gebruikmaken van anonimiseringstechnieken. Het probleem is dat dergelijke technieken gevoelig zijn aan zogenaamde [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Met GDPR, van toepassing sinds mei 2018, voorschrijft de EU de regels voor de verwerking van persoonsgegevens door bedrijven en overheden van EU burgers. Om persoonlijke gegevens in een dataset te beschermen gaat men al te vaak de persoonlijke gegevens verwijderen of gebruikmaken van anonimiseringstechnieken. Het probleem is dat dergelijke technieken gevoelig zijn aan zogenaamde “data linkage” aanvallen waarbij de gegevens via ogenschijnlijk onschuldige attributen toch met persoonsgegevens van andere datasets verbonden kunnen worden. Een <a href="https://www.cs.utexas.edu/~shmat/shmat_oak08netflix.pdf">berucht voorbeeld</a> is de anonieme dataset die Netflix voor een wedstrijd publiceerde en onderzoekers in staat waren deze, aan de hand van een tweede dataset, te de-anonimiseren. En zelfs als een bepaald datapunt zoals een rij in een tabel of een spreadsheet met meerdere personen overeenkomt, dan nog kan een analist (vaak een tegenstander genoemd) informatie afleiden. Dit scenario wordt in Tabel 1 geïllustreerd.</p>
<p><figure id="attachment_15185" aria-describedby="caption-attachment-15185" style="width: 830px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15185" src="/wp-content/uploads/2020/12/dp-tabel-1.png" alt="Voorbeeld van een data linkage aanval" width="830" height="115" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-tabel-1.png 830w, https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-tabel-1-300x42.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-tabel-1-768x106.png 768w" sizes="auto, (max-width: 830px) 100vw, 830px" /><figcaption id="caption-attachment-15185" class="wp-caption-text">&nbsp;Tabel 1 Zelfs in een scenario waar een tegenstander op zoek is naar een specifieke persoon in een pseudo-geanonimiseerde<a href="#_ftn1" name="_ftnref1"><sup>[1]</sup></a> dataset waar er meerdere overeenkomsten mogelijk zijn, kan de tegenstander nuttige informatie afleiden. In dit scenario werd de persoon met de naam “Chris X.” via een reeks attributen (geboortejaar, postcode, etc.) met drie records in de geanonimiseerde dataset gelinkt. Als de tegenstander weet dat die persoon in de geanonimiseerde dataset voorkomt, dan weet hij dat Chris minstens een maandloon tussen de 1500,00 en 2500,00 EUR heeft, met een kans van 66% 1750,00 EUR of meer verdient, enz.</figcaption></figure></p>
<p><a href="#_ftnref1" name="_ftn1"></a>Ook kunnen updates doorheen de tijd informatie lekken. Dit illustreren we in Figuur 1 met een zeer eenvoudig voorbeeld, waar we de aantallen per categorie (e.g., personeelscategorie) bijhouden. Als een tegenstander weet dat een bedrijf drie nieuwe werknemers heeft aangeworven, dan kan de tegenstander afleiden over welke categorieën het gaat. Ook hier kan een tegenstander heel wat afleiden met achtergrondkennis of informatie omtrent personeelscategorieën die te vinden zouden zijn.</p>
<p><figure id="attachment_15192" aria-describedby="caption-attachment-15192" style="width: 688px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-large wp-image-15192" src="/wp-content/uploads/2020/12/2020-12-16_11h33_06-1024x405.png" alt="Veranderingen in histogrammen doorheen de tijd" width="688" height="272" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_11h33_06-1024x405.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_11h33_06-300x119.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_11h33_06-768x304.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_11h33_06.png 1232w" sizes="auto, (max-width: 688px) 100vw, 688px" /><figcaption id="caption-attachment-15192" class="wp-caption-text">Figuur 1 Updates aan datasets doorheen de tijd zijn ook in staat gegevens te lekken.</figcaption></figure></p>
<p>Verder werd er aangetoond dat men via een reeks bevragingen (of <em>queries</em>) makkelijk informatie omtrent individuele datapunten en zelfs de hele dataset kan te weten komen. Men kreeg het inzicht dat privacy enkel gevrijwaard kan worden als er op een adequate wijze <strong><em>ruis</em></strong> in de data of de antwoorden op bevragingen wordt geïntroduceerd.</p>
<p>Een bepaald techniek om dit te realiseren heet <strong><em>Differential Privacy</em></strong> (DP). Het concept en onderliggende formalisme van DP werden voor het eerst gepubliceerd in 2006 (Dwork et al. 2006) en had een enorme impact. Privacy werd geformuleerd in termen van het algoritme dat ruis introduceert in plaats van in eigenschappen van een dataset.</p>
<p>Over de jaren heen werd het concept van nader bestudeerd en won velerlei prijzen. Recentelijk wordt DP alsmaar meer in de publieke en privésector toegepast, waardoor deze zelfs op de radar van Gartner kwam. De uitdagingen van DP zijn de beschikbare tooling (bibliotheken, raamwerken, etc.) en de kennis die nodig is om DP op een adequate manier toe te passen. Zoals we echter kunnen zien, duiken er alsmaar initiatieven op om DP toegankelijker te maken.</p>
<p>In een eerste instantie zullen we het principe visueel voorstellen. Om een idee te vormen waar en hoe DP wordt toegepast, zullen we een aantal voorbeelden uit de praktijk aanhalen. Nadien nemen we de wiskundige grondslag met net voldoende diepgang door om het principe beter te vatten. Er zijn ook een aantal varianten op DP, en zelfs varianten in diens toepassing. Varianten zullen in dit artikel niet behandeld worden.</p>
<h1>Wat is differential privacy?</h1>
<p>In Figuur 2 lichten we het principe eenvoudig toe. Waarom zou een persoon zijn informatie willen delen, of zelfs deze op een eerlijke manier willen delen? Een persoon wil namelijk niet dat het delen van diens informatie voor zichzelf onmiddellijke, mogelijk nefaste gevolgen heeft. Een klassiek voorbeeld is het mogelijk mislopen van bepaalde kansen zoals een hypothecaire lening.</p>
<p><figure id="attachment_15197" aria-describedby="caption-attachment-15197" style="width: 688px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-large wp-image-15197" src="/wp-content/uploads/2020/12/visuele-representatie-dp-1024x368.png" alt="Visuele representatie Differential Privacy" width="688" height="247" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/visuele-representatie-dp-1024x368.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2020/12/visuele-representatie-dp-300x108.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/visuele-representatie-dp-768x276.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/12/visuele-representatie-dp.png 1429w" sizes="auto, (max-width: 688px) 100vw, 688px" /><figcaption id="caption-attachment-15197" class="wp-caption-text">Figuur 2 Visuele representatie achter het principe van differential privacy.</figcaption></figure></p>
<p>Laten we aannemen dat we twee datasets hebben; één waar de gegevens van de persoon zijn opgeslagen, en één waar diens gegevens niet in voorkomen—ze verschillen dus in één record van elkaar. In DP wordt een methode voorgesteld waar een bevraging door een onderzoeker (of tegenstander) <strong>vergelijkbare antwoorden moet teruggeven, ongeacht welke dataset wordt gebruikt</strong>. Een onderzoeker wenst een vraag te laten beantwoorden en stuurt deze naar een systeem (al dan niet deels menselijk), die we een “<a href="https://download.microsoft.com/download/D/1/F/D1F0DFF5-8BA9-4BDF-8924-7816932F6825/Differential_Privacy_for_Everyone.pdf"><em>DP Guard</em></a>” noemen. Die guard consulteert de originele data om een antwoord te formuleren en maakt gebruik van een <em>mechanisme</em> om een <em>welbepaalde</em> willekeur in dat antwoord te introduceren. Die willekeur, onder andere bepaald door een privacy-parameter &nbsp;die de <em>privacy loss </em>bepaalt, moet aan DP voorwaarden voldoen. Het zijn namelijk die voorwaarden die er voor zorgen dat de antwoorden vergelijkbaar en de privacy gevrijwaard blijven. Belangrijk is dat de antwoorden dusdanig vergelijkbaar zijn dat een onderzoeker niet kan achterhalen welke dataset werd gebruikt.</p>
<p>Het principe achter DP is dat iemands deelname aan een dataset niet te achterhalen valt, en dat het eigenlijk ook niet uitmaakt. De antwoorden blijven grosso modo dezelfde, en dus ook de conclusies en inzichten die daaruit gehaald kunnen worden. Indien een persoon toch een lening niet zou krijgen, dan lag dit aan de hele dataset en niet aan die ene record.</p>
<p>De concepten van <em>privacy</em> en <em>privacy loss</em> (en andere termen die we zullen tegenkomen) zijn allemaal wiskundig onderbouwd en bewezen­­—we weten welke soorten willekeur voor welke soorten vragen aan de DP vereisten voldoen. De parameters maximaliseren niet alleen de bruikbaarheid en correctheid van de antwoorden, maar worden ook gebruikt om de <em>privacy loss te berekenen</em>. We gaan later zien hoe we daar een soort van “boekhouding” mee kunnen doen.</p>
<p>Dankzij de formele beschrijvingen van privacy, garandeert DP een aantal zaken. Ten eerste krijgt <strong>een onderzoeker de originele data nooit te zien. </strong>Ten tweede, is het, zonder kennis van de originele database<strong>, niet mogelijk om met post-processing de privacy loss op te krikken.</strong></p>
<h1>Toepassingen</h1>
<p>We weten nu dat een mechanisme op een welbepaalde manier ruis in data en/of antwoorden kan introduceren. Details omtrent die ruis, en hoe deze kan ingesteld worden, zullen we pas in de volgende sectie behandelen.</p>
<p>In dit stukje van het artikel zullen we een aantal toepassingen van DP aanhalen. Een uitdaging van DP is dat het vaak voor specifieke doeleinden wordt toegepast (bijvoorbeeld om privacy in leeralgoritmes te vrijwaren). Hierdoor kan het moeilijk zijn om DP of diens toepassingen daarvan te veralgemenen of naar andere toepassingsgebieden te transponeren. Met de volgende drie toepassingen pogen we een brede waaier aan mogelijkheden toe te lichten.</p>
<ul>
<li><a href="https://www.microsoft.com/en-us/research/blog/project-privtree-blurring-location-privacy/">Microsoft Research ontwikkelde PrivTree</a>. Hun doel was om de geolocaties van personen in databases te beschermen. Met andere woorden, hun doel was er voor te zorgen dat het gebruik van die geolocaties geen personen kan identificeren. Er zijn twee fasen in hun proces. In een eerste instantie delen ze de kaarten zodanig op zodat enige willekeur (ruis) die later toegevoegd zou worden de statistische eigenschappen van de databank zo goed als mogelijk bewaart. Men wilt bijvoorbeeld niet dat een verzameling punten dicht bij elkaar plots ver van elkaar worden verspreid (denk aan stadscentra versus woonwijken). In een tweede instantie wordt de ruis binnen elke partitie toegevoegd.</li>
<li><a href="https://medium.com/uber-security-privacy/uber-open-source-differential-privacy-57f31e85c57a">Uber werkte samen met academici aan een oplossing voor DP</a>. Ze wensten DP in hun data analyses te introduceren. Hun analisten maken voornamelijk gebruik van SQL om gegevens op te vragen. De oplossing die werd ontwikkeld had als oog om de bestaande infrastructuur te bewaren. Ze wensten geen beroep te doen op een softwarebibliotheek die DP in de resultaten injecteerden. In plaats daarvan, ontwikkelden ze een platform waar hun bestaande SQL queries automatisch werden herschreven (Johnson et al. 2020). Ze “injecteerden” als het ware DP in de queries. Op die manier hoefden analisten zich niet te veel zorgen maken over de technische aspecten van DP. Opmerkelijk was dat ze in staat waren om meer dan 90% van de duizenden queries die analisten hadden geformuleerd, te herschrijven.</li>
<li><a href="https://machinelearning.apple.com/research/learning-with-privacy-at-scale">Apple gebruikt DP als onderdeel van hun service om populaire emoji’s te voorspellen</a>. DP voorspelt de emoji’s natuurlijk niet, maar dit proces werd in de pijplijn geïntroduceerd om de privacy van gebruikers te vrijwaren. Interessant in dit voorbeeld is dat DP lokaal op iemands toestel werd toegepast. In tegenstelling tot de twee voorgaande voorbeelden waar data gecentraliseerd is en DP tijdens bevragingen werden toegepast, maken ze hier gebruik van DP in iemands data alvorens deze op te slaan. In zulk een setting gaat men er van uit dat men de gebruikers van het gecentraliseerde systeem niet kan vertrouwen; alle bevragingen en analyses maken sowieso gebruik van data met ruis.</li>
</ul>
<p>Men kan nog aantal andere voorbeelden van DP aanhalen, maar deze drie voorbeelden geven al een vrij duidelijk plaatje waarvoor en hoe DP kan gebruikt worden; data analyses en AI (e.g., machine learning), met bibliotheken of een laag bovenop bestaande infrastructuur, op een lokale of gecentraliseerde wijze, enz. Men kan zich nu de vraag stellen hoe dit eigenlijk werkt.</p>
<h1>Wiskundige grondslag</h1>
<p>Hier lichten we het principe wat meer formeel toe. Een functie <em>F</em> voldoet aan DP voorwaarden en noemen we dus een <em>mechanisme</em> als voor alle mogelijke naburige datasets <em>x</em> en <em>y</em> (dat zijn datasets die zich in één rij verschillen), en voor alle mogelijke verzamelingen oplossingen van de functie <em>F</em>, die we <em>OPL(F)</em> zullen noemen, de volgende voorwaarde geldt:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-15313" src="/wp-content/uploads/2020/12/vergelijking-300x64.png" alt="Formule van de Differential Privacy voorwaarde" width="300" height="64" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/vergelijking-300x64.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/vergelijking-768x165.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/12/vergelijking-1024x219.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2020/12/vergelijking.png 1321w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p>Waar <em>e</em> de wiskundige constante 2.7182 (afgerond) is. In deze voorwaarde is <em>ε</em> de <em>privacy-parameter<sup><a href="#_ftn2" name="_ftnref1"><strong>[2]</strong></a></sup></em> en laat ons toe om het aandeel privacy te manipuleren.</p>
<ul>
<li>Hoe kleiner <em>ε</em>, hoe gelijkaardiger de outputs moeten zijn, dus hoe meer privacy;</li>
<li>Hoe groter <em>ε</em>, hoe meer verschillend de outputs mogen zijn, met als resultaat minder privacy.</li>
</ul>
<p>Deze formule zier er ingewikkelder uit dan het eigenlijk is. Deze formule legt een beperking op; namelijk dat de kansen (<em>Pr</em> in de figuur) dat alle koppels een bepaalde oplossing hebben op elkaar moeten lijken. En die gelijkwaardigheid wordt bepaald door <em>ε</em>. Verder is de voorwaarde symmetrisch omdat dit voor alle mogelijke paren van naburige datasets moet gelden. Dit principe wordt voor twee datasets in Figuur 3 op een zeer vereenvoudigde manier geïllustreerd.</p>
<p><figure id="attachment_15237" aria-describedby="caption-attachment-15237" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-15237 size-medium" src="/wp-content/uploads/2020/12/kansverdelingen-van-mechanismen-300x230.png" alt="Kans dat de oplossingen van twee datasets op elkaar lijken" width="300" height="230" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/kansverdelingen-van-mechanismen-300x230.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/kansverdelingen-van-mechanismen.png 719w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-15237" class="wp-caption-text">Figuur 3 De kans dat twee naburige datasets dezelfde oplossingen hebben moeten op elkaar lijken. Let op: de verhouding van alle kansen moet kleiner zijn dan e<sup>ϵ</sup>. Met dit figuur wil ik enkel aantonen dat men het toegestane verschil “over de hele lijn” met ϵ kan configureren.</figcaption></figure></p>
<p>Wat is functie <em>F</em> dan? <em>F</em> is de functie met een welbepaalde willekeur (randomness) en het is die willekeur die aan DP voorwaarden moet voldoen. De verschillende soorten willekeur die al dan niet aan de voorwaarden voldoen werden bestudeerd. Een Gaussiaanse kansverdeling voldoet niet aan de voorwaarden, bijvoorbeeld, en een Laplace kansverdeling (voor telfuncties) wel. Waarom de ene kansverdeling wel voldoet aan de voorwaarden en de andere niet is voor dit artikel niet belangrijk. Belangrijk is om te weten dat de wetenschappelijke gemeenschap de DP eigenschappen voor verschillende soorten functies en kansverdelingen hebben bewezen.</p>
<p>Laten we het voorbeeld van een eenvoudige telfunctie nemen. Dit kan men vergelijken met een <code>SELECT COUNT(*)</code> query in SQL. De telfunctie <em>F</em>, <em>met DP</em>, ziet er dan als volgt uit:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15243 " src="/wp-content/uploads/2020/12/2020-12-16_13h18_50-300x73.png" alt="Definitie van de functie F" width="193" height="47" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_13h18_50-300x73.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/2020-12-16_13h18_50.png 304w" sizes="auto, (max-width: 193px) 100vw, 193px" /></p>
<p>In de formule is <em>f</em> de telfunctie die de &#8220;echte&#8221; waarde teruggeeft, dus de telfunctie <em>zonder DP</em>. In ons voorbeeld is <em>f</em> de eigenlijke SQL query die door een database management systeem wordt beantwoord. De gevoeligheid van een functie wordt voorgesteld door <em>s</em>. De gevoeligheid geeft ons een indicatie hoe gevoelig functies zijn wanneer datasets zich in één record verschillen. De gevoeligheid van een telfunctie is telkens één, want het aanpassen van één record levert ten hoogste een verschil van één op—je telt er ten hoogste één meer of ten hoogste één minder op. Tot slot geeft <em>Lap</em> een steekproef terug gebruikmakende van een Laplaceverdeling met verschuiving 0 en schaal <em>s/</em><em>ε.</em></p>
<p>In Figuur 4 ziet men duidelijk het effect van e. Hoe groter <em>ε</em>, hoe groter de kans dat de waarde van <em>F(x)</em> meer naar de waarde van <em>f(x)</em> zal neigen. Bij kleinere waarden voor <em>ε</em> zal de kans dat resultaten verder van elkaar liggen groter worden, wat de privacy verhoogt.</p>
<p><figure id="attachment_15252" aria-describedby="caption-attachment-15252" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-15252 size-medium" src="/wp-content/uploads/2020/12/laplace-300x237.png" alt="Laplace kanserverdelingen met verschuivingen 0 en verschillende schalen" width="300" height="237" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/laplace-300x237.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/laplace.png 602w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-15252" class="wp-caption-text">Figuur 4 Kansdichtheden van Laplace kansverdelingen met verschuiving 0 en schalen s/0.01, 1/0.1, en s/1, waar s=1. Hoe scherper de piek, hoe groter de kans dat waarden dichter bij de reële waarde zullen liggen. Waarden (ver) boven de 1 zijn doorgaans niet interessant en lekken veel informatie.</figcaption></figure></p>
<p>Hier volgt een concreet voorbeeld. Laten we aannemen dat de functie <em>f<sub>b</sub></em> het aantal personen met een Belgische nationaliteit teruggeeft en de reële waarde van <em>f<sub>b</sub></em><em>(x)</em> gelijk is aan 5. We berekenen <em>F<sub>b</sub></em><em>(x) </em>met <em>ε</em><em> = 0.1, </em>dan als volgt: <em>5 + Lap(1/0.1)</em>. In dit voorbeeld gebruik ik de rlaplace functie uit R’s <a href="https://cran.r-project.org/web/packages/rmutil/rmutil.pdf">rmutil bibliotheek</a> om een steekproef te genereren.</p>
<pre><span style="color: #3366ff;">&gt; library("rmutil")</span><br /><span style="color: #3366ff;">&gt; rlaplace(1, 0, 1 / 0.1)</span><br />[1] -0.5499616</pre>
<p>Het eerste argument is het aantal waarden dat ik wil genereren; we hebben er maar één nodig. Het tweede argument is de verschuiving; hier altijd nul. En het laatste argument is de schaal. Als we dit aan 5 optellen, dan hebben we als resultaat <em>F<sub>b</sub></em><em>(x) = 4.4500384. </em>We hebben nu ruis in de waarde geïntroduceerd. Was de reële waarde 4 en werd een waarde toegevoegd? Of was de reële waarde 5 en werd een waarde afgetrokken? Een tegenstander kan dit niet achterhalen. Een decimale waarde voor een telfunctie houdt natuurlijk geen steek. Later zien we dat enige verfijning, zoals het afronden van waarden, geen effect heeft—de <em>ε</em>-DP voorwaarde blijft behouden.</p>
<p>We hebben een mechanisme voor een telfunctie toegelicht. Er bestaan ook mechanismen voor, onder andere, histogrammen, het kruisen van informatie, en statistische benaderingen (steekproeven, aggregaties, gemiddelden, etc.). Deze zullen we hier niet toelichten.</p>
<p>DP vormt het basisprincipe, en er bestaan reeds een aantal varianten en uitbreidingen op dit principe. DP is “streng” en varianten zullen doorgaans aspecten van DP verzwakken, zoals Approximate DP, in ruil voor meer flexibiliteit en efficiëntie.</p>
<h1>Privacy loss en privacy budgetten beheren—de “boekhouding”</h1>
<p>Wat als een onderzoeker meerdere vragen stelt? Het is waar dat de garantie dat privacy gevrijwaard wordt daalt naarmate meer vragen worden gesteld. DP laat echter toe hier een stokje voor te steken. De formeel bewezen eigenschappen van <em>compositie</em> (i.e., het combineren van vragen) helpen ons om de totale kost van (een reeks van) bevragingen te berekenen.</p>
<p>De sequentiële compositie toont aan dat als <em>F<sub>1</sub></em> voldoet aan <em>ε</em><em><sub>1</sub></em>-DP, en <em>F<sub>2</sub></em> voldoet aan <em>ε</em><em><sub>2</sub></em>-DP, dan voldoet het mechanisme <em>F<sub>3</sub>(x)=(F<sub>1</sub>(x), F<sub>2</sub>(x))</em> aan <em>ε</em><em><sub>1+</sub>ε<sub>2</sub></em>-DP. Zo bestaan er andere composities (parallel, geavanceerd, etc.) die hier buiten beschouwing worden gelaten. <strong>Belangrijk is dat we met composities van de privacy parameters aan privacy “boekhouding” kunnen doen.</strong></p>
<p>Eke vraag heeft dus een (privacy) kost, en men kan de totale kost gebruiken om op een bepaald moment geen antwoord meer te bieden aan een reeks vragen, of zelfs onderzoekers een totaal budget aan te bieden waarmee ze dan (zorgvuldig) aan de slag gaan. Hoe dit effectief in zijn werk gaat en hoe de budgetten naderhand bijgevuld worden hangen af van de use case.</p>
<h1>Post-processing</h1>
<p>We hebben reeds aangehaald dat het, zonder kennis van de originele database, niet mogelijk is om met post-processing de privacy loss op te krikken. Met andere woorden, elke aanpassing of wijziging aan een dataset die aan DP met een waarde voor <em>ε</em> voldoen, garandeert dus ook DP met dezelfde <em>ε</em>. Dit is een belangrijke en bewezen eigenschap van DP dat DP zo aantrekkelijk maakt.</p>
<p>Onder post-processing verstaan we niet alleen de manipulaties door een onderzoeker (of tegenstander), maar ook de post-processing net voor het aanleveren van de data. De ruis, geïntroduceerd door een mechanisme, kan waarden opleveren die niet stroken met de realiteit. Voorbeelden zijn decimale en negatieve waarden bij telfuncties. <strong>Het is dus perfect OK om een dataset nadien te verfijnen om dergelijke “datakwaliteitsproblemen” aan te pakken.</strong> Het verfijnen van een dataset (zoals het afronden en elimineren van negatieve waarden waar nodig) hoort ook tot post-processing.</p>
<h1>Aan de slag met DP</h1>
<p>DP heeft een stevige wiskundige onderbouwing, doch is het interessant om weten dat maar recentelijk de industrie en de gemeenschap dit in grotere mate aan het oppikken is. Tot voor kort was één van de uitdagingen het bestaan van tooling (raamwerken en bibliotheken). Men moest dus beroep doen op personen met de juiste expertise (e.g., een statisticus) die data volgens DP voorwaarden leverden. Met de recente ontwikkelingen kwamen gelukkig ook een aantal open source alternatieve van grote en belangrijke spelers: onder andere <a href="https://github.com/google/differential-privacy">Google</a>, <a href="https://github.com/pytorch/opacus">Facebook</a>, <a href="https://github.com/uvm-plaid/chorus">Uber</a>, en <a href="https://smartnoise.org/">Harvard</a>. Microsoft <a href="https://docs.microsoft.com/en-us/azure/machine-learning/concept-differential-privacy">documenteerde</a> hoe je Harvard’s oplossing kan gebruiken in MS Azure.</p>
<p>Voor dit artikel maak ik gebruik van Chorus. Chorus startte als samenwerking tussen Uber en de University of California, Berkeley. Omdat academici nu eenmaal regelmatig van instelling veranderen, wordt de code (beschikbaar met een zeer toegankelijke MIT licentie) nu onder “hoedanigheid” van de University of Vermont gehost.</p>
<p>Gebruikmakende van een tabel met 1001 fictieve personen (er waren geen personen met als land België aanwezig, dus heb ik er maar eentje toegevoegd), wens ik te weten hoeveel personen in België wonen, en hoeveel in (Volksrepubliek) China.</p>
<ul>
<li><code>SELECT COUNT(*) FROM person WHERE country = 'China'</code></li>
<li><code>SELECT COUNT(*) FROM person WHERE country = 'Belgium'</code></li>
</ul>
<p>De waarden van deze queries, alsook die met DP gebruikmakende van Chorus staan in Tabel 2. Zonder DP hebben we als reële waarden 181 en 1. Met een<em> ε </em>van 0.1 hebben we meer privacy, want de kans is groter dat de waarden verder van de reële waarden verwijderd zijn. Met een <em>ε </em>van 1 vergroten we de kans dat de waarden meer op de reële waarden lijken.</p>
<p><figure id="attachment_15350" aria-describedby="caption-attachment-15350" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-15350 size-medium" src="/wp-content/uploads/2020/12/dp-vergelijking-300x93.png" alt="Het toepassen van DP met Chorus" width="300" height="93" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-vergelijking-300x93.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-vergelijking-768x238.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/12/dp-vergelijking.png 805w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-15350" class="wp-caption-text">Tabel 2 Resultaten van tel-queries met Chorus. Merk dat grotere waarden voor ε de kansen dat de waarden meer naar de eigenlijke waarden “neigen” verhogen. Vanwege de willekeur, is de kans bijzonder klein dat men tweemaal hetzelfde antwoord terugkrijgt.</figcaption></figure></p>
<p>Men kan nu denken dat men met een <em>ε = 1 </em>met zekerheid de juiste waarden kan achterhalen door deze gewoon af te ronden, maar dat is niet correct. Zelfs als de onderzoeker (of tegenstander) weet dat <em>ε = 1 </em>en de kans groter is dat de waarde op de reële waarde lijkt, is de exacte waarde moeilijk te achterhalen. De ruis kan zowel positief als negatief zijn. Verder kan deze afwijking nog vrij belangrijk zijn. Ik illustreer dit met een voorbeeld in Figuur 5.</p>
<p><figure id="attachment_15354" aria-describedby="caption-attachment-15354" style="width: 974px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15354" src="/wp-content/uploads/2020/12/voorbeeld-r.png" alt="Genereren van 50 steekproeven met de Laplace kansverdeling" width="974" height="190" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-r.png 974w, https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-r-300x59.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-r-768x150.png 768w" sizes="auto, (max-width: 974px) 100vw, 974px" /><figcaption id="caption-attachment-15354" class="wp-caption-text">Figuur 5 De uiteenlopende waarden voor ruis (niet exhaustief (!)) voor de Laplacekansverdeling met schaalverdeling 1/1=1.</figcaption></figure></p>
<p>De kans op eenzelfde antwoord (bij het bevragen van dezelfde query) is dus ook klein. Dit illustreer ik nogmaals in Figuur 6 (onderaan), waar we voor <em>ε = 1 </em>nu de waarden 181.182 en 3.369 voor onze tel-queries hebben.</p>
<p><figure id="attachment_15356" aria-describedby="caption-attachment-15356" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-15356" src="/wp-content/uploads/2020/12/voorbeeld-met-chorus.png" alt="DP queries uitvoeren met Chorus" width="810" height="435" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-met-chorus.png 810w, https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-met-chorus-300x161.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/12/voorbeeld-met-chorus-768x412.png 768w" sizes="auto, (max-width: 810px) 100vw, 810px" /><figcaption id="caption-attachment-15356" class="wp-caption-text">Figuur 6 Gebruik van Chorus voor het bevragen van een MySQL databank. Merk op dat de waarden onderaan, vanwege de willekeur, verschillen met de waarden in Tabel 2.</figcaption></figure></p>
<p>Het opzetten en gebruiken van Chorus was best eenvoudig. Het systeem ondersteunt standaard simpele queries—queries die maar één waarde teruggeven. Dit omdat queries die meerdere waarden teruggeven (bijvoorbeeld een histogram of een <code>GROUP BY</code>) meer aandacht vergen. Voeren we een <code>GROUP BY</code> op namen uit, dan lekken we de namen in de database! <strong>Dit vergt dus manueel nazicht</strong>.</p>
<p>DP toepassen op onderstaande histogram query vormt geen probleem, want we tonen enkel landsnamen en hun aantallen. Gaat dan, voor elk land, de privacy cost omhoog? Neen. Dergelijke histogrammen voldoen aan parallelle compositie, waardoor de kost dezelfde blijft. De reden waarom dit geldt is, zéér kort samengevat, dat elk individu in de dataset maar één keer geteld wordt.</p>
<ul>
<li>
<pre><code>SELECT country, COUNT(*) FROM person GROUP BY country</code></pre>
</li>
</ul>
<p>Chorus biedt een oplossing aan om SQL queries, in de achtergrond, te herschrijven naar queries met ruis. Ook biedt het een zogenaamde accountant aan die de kost van een reeks queries berekent. Hoe je die kost gebruikt, wordt niet door Chorus voorgeschreven. Ook dit hangt van af van de use case.</p>
<h1>Uitdagingen en opportuniteiten</h1>
<p>Veruit de grootste uitdaging van DP is de <strong>kennis en expertise</strong> die men nodig heeft om DP op een correcte manier toe te passen. Niet alleen kennis van DP (de wiskundige grondslag), maar ook domeinkennis is nodig. Domeinkennis is nodig om, voor bepaalde mechanismen, doordachte beslissingen over de data te nemen zoals het bepalen van boven- en ondergrenzen voor bepaalde attributen. De aanwezigheid van uitschieters geeft informatie over de dataset, maar kan ook de ruis vertekenen. Computerwetenschappers (of statistici) moeten hieromtrent met business analisten samenwerken, dus.</p>
<p>DP werd ook toegespitst voor zeer specifieke doeleinden (gaande van specifieke toepassingen zoals het voorspellen van emoji’s tot specifieke taken zoals DP in leeralgoritmen). Dit maakt het voor buitenstaanders soms moeilijk om DP naar andere use cases te transponeren.</p>
<p>Daartegen staat dat, dankzij de solide wiskundige onderbouwing, het ook duidelijk is welke bevragingen “makkelijk” zijn, en welke op een doordachte manier moeten gebeuren. Eenvoudige queries die 1 waarde teruggeven, zoals onze tel-queries bijvoorbeeld, kunnen zonder problemen automatisch uitgevoerd worden. Het genereren van histogrammen vergt menselijke input (de query, code en parameters moeten uitgeschreven worden), én <em>nazicht</em>. In eenvoudige gevallen kan men dit “omzeilen” door onderstaande histogram</p>
<ul>
<li>
<p><code>SELECT country, COUNT(*) FROM person GROUP BY country</code></p>
</li>
</ul>
<p>te herschrijven naar:</p>
<ul>
<li><code>SELECT COUNT(*) FROM person WHERE country = 'Belgium'</code></li>
<li><code>SELECT COUNT(*) FROM person WHERE country = 'France'</code></li>
<li><code>SELECT COUNT(*) FROM person WHERE country = 'Germany'</code></li>
<li><code>…</code></li>
</ul>
<p>Doch verhogen we in het tweede scenario onnodig de privacy cost, want voor histogrammen blijft de kost, vanwege de parallelle compositie, gelijk. De boodschap hier is dat de drempel voor DP laag kan zijn.</p>
<p>De tweede uitdaging is de beschikbare <strong>tooling</strong>. Tot voor kort werd DP door experten toegepast. Er bestaan commerciële toepassingen voor machine learning en data analytics waarin DP werd  geïntegreerd, maar niet iedereen is op zoek naar dergelijke oplossingen of klaar om naar een nieuwe toepassing over te schakelen. Organisaties wensen vaak ook hun bestaande systemen te behouden. Men kan DP toepassen in Python, R,… door de datamanipulatie en formules zelf neer te pennen, maar gelukkig verschijnt er alsmaar meer robuuste vrije software (aangeleverd door de voorgenoemde grote spelers). Men kan twee soorten initiatieven onderscheiden: “wrappers” die men bovenop bestaande databases kan plaatsen, zoals Chorus; en bibliotheken met abstracties en primitieven om DP in big data en data analytics omgevingen toe te passen, zoals Google’s Privacy on Beam.</p>
<h1>Conclusies</h1>
<p>Differential Privacy (DP) is een techniek om de privacy van personen te vrijwaren door een welbepaalde ruis in datasets en antwoorden van bevragingen te introduceren. De antwoorden op die bevragingen alsook de statistische eigenschappen van de dataset blijven grosso modo onveranderd en men krijgt nooit de originele data te zien. De aanwezigheid van de gegevens van een persoon heeft dus geen (grote) impact op de conclusies die men kan trekken.</p>
<p>DP introduceert ook concepten zoals privacy cost en privacy budget. Men kan met een bepaald budget een of meerdere bevragingen uitvoeren. Elke bevraging heeft een kost en men mag het budget niet overschrijden. Wenst men dat de resultaten dichter bij de reële waarden komen, dan moet men meer uit het budget gebruiken. Dit gaat dan ten koste van het aantal (grote) queries die men in een sessie kan stellen. Hoelang sessies duren, hoe snel men een budget terug kan opbouwen, enz. hangt af van de use case. Dit brengt ons naar het volgende punt.</p>
<p>Vanwege de complexe materie is enige kennis in DP én domeinkennis voor complexe vragen vereist. Voor eenvoudige vragen kan men DP zo goed als volledig automatisch toepassen. Computerwetenschappers, statistici, en bedrijfsanalisten moeten in het proces betrokken worden.</p>
<p>Hoewel het concept in 2006 werd geïntroduceerd, is het maar sinds kort dat tal van initiatieven opduiken. Dankzij de wetenschappelijke gemeenschap, de open source community, en belangrijke IT spelers die hun tooling vrij voorhanden maken, wordt de drempel om DP toe te passen lager.</p>
<h1>Referenties</h1>
<p>Dwork, Cynthia, Frank McSherry, Kobbi Nissim, and Adam Smith. 2006. “Calibrating Noise to Sensitivity in Private Data Analysis.” In <em>Theory of Cryptography</em>, eds. Shai Halevi and Tal Rabin. Berlin, Heidelberg: Springer Berlin Heidelberg, 265–84.</p>
<p>Johnson, Noah M, Joseph P Near, Joseph M Hellerstein, and Dawn Song. 2020. “Chorus: A Programming Framework for Building Scalable Differential Privacy Mechanisms.” In <em>IEEE European Symposium on Security and Privacy, EuroS&amp;P 2020, Genoa, Italy, September 7-11, 2020</em>, IEEE, 535–51. https://doi.org/10.1109/EuroSP48549.2020.00041.</p>
<h1>Voetnoten</h1>
<p><a href="#_ftnref1" name="_ftn1">[1]</a> In de context van GDPR hebben “geanonimiseerd” en “pseudo-geanonimiseerd” (ofte “pseudonimisatie”) <a href="https://gdpr.report/news/2017/11/07/data-masking-anonymisation-pseudonymisation/#:~:text=The%20legal%20distinction%20between%20anonymised,techniques%20differ%20from%20anonymisation%20techniques.">verschillende betekenissen</a>. Het eerste gaat over data waar het herleiden van gegevens tot een natuurlijk persoon onmogelijk is. Het tweede betreft data waar men met behulp van extra gegevens (op een indirecte manier) informatie naar een natuurlijk persoon kan herleiden.</p>
<p><a href="#_ftnref2" name="_ftn1">[2]</a> Soms ook privacy-budget genoemd, dit hangt af van het gebruik (zie later).</p>
<h1>Foto’s</h1>
<p>Foto’s verwerkt in de illustraties zijn CC0 (via <a href="https://www.pexels.com/">https://www.pexels.com/</a>).</p>
<p>_________________________</p>
<p><em>Dit is een ingezonden bijdrage van Christophe Debruyne, IT consultant bij Smals Research.  Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
