diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb index 3b0131026b..81d267bfe9 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/RDF.Net-Legacy/RDF.Net.ipynb @@ -55,7 +55,7 @@ "\n", "En outre, RDF est le fondement du web sémantique, une vision du web où les informations sont non seulement disponibles pour les humains à lire, mais aussi pour les machines à comprendre et à traiter.\n", "\n", - "---\n", + "***\n", "\n", "### 2. RDF.Net\n", "\n", @@ -67,31 +67,31 @@ "- `IGraph` : l'interface pour les graphes. Un document RDF forme un graphe au sens mathématique. Nous représentons donc des ensembles de Triples comme des graphes.\n", "- `ITripleStore` : Un Triple Store est une collection de un ou plusieurs graphes.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Graphes\n", "\n", "Un document RDF peut être considéré comme formant un graphe mathématique. Nous représentons donc des ensembles de triples RDF comme des graphes. Tous les graphes de la bibliothèque sont des implémentations de l'interface `IGraph` et dérivent généralement de la classe abstraite `BaseGraph`. Une implémentation `IGraph` est une représentation en mémoire d'un document RDF.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Noeuds\n", "\n", "Un `INode` représente un nœud dans un graphe RDF, ce qui est parfois appelé un terme RDF. Il existe plusieurs types de nœuds, chacun représenté par une interface spécialisée, comme `IBlankNode` pour un nœud anonyme, `ILiteralNode` pour un nœud avec une valeur textuelle, ou encore `IUriNode` pour un nœud URI.\n", "\n", - "---\n", + "***\n", "\n", "#### c) Triples\n", "\n", "Un Triple est l'unité de base des données RDF, les nœuds à eux seuls n'ont pas de signification, mais utilisés dans un Triple, ils forment une déclaration qui exprime une connaissance. Un Triple est formé d'un Sujet, d'un Prédicat et d'un Objet. Il est interprété comme déclarant qu'un certain Sujet est lié à un certain Objet par une relation spécifiée par le Prédicat.\n", "\n", - "---\n", + "***\n", "\n", "#### d) Triple Store\n", "\n", "Un Triple Store représente une collection de Graphes et est utilisé pour travailler avec de grandes quantités de RDF. Les Triple Stores sont conçus pour être moins tangibles que les Graphes en termes d'interface et d'implémentations.\n", "\n", - "---\n", + "***\n", "\n", "### 3. DBpedia\n", "\n", @@ -105,7 +105,7 @@ "\n", "Jena Fuseki est un serveur de triplestore open-source qui permet de stocker et de requêter des données RDF. Il prend en charge le langage de requête SPARQL et offre une interface utilisateur Web pour gérer les données RDF.\n", "\n", - "---\n", + "***\n", "\n", "## B. Introduction à RDF et Sparql avec RDF.Net\n", "\n", @@ -865,7 +865,7 @@ "\n", "Plusieurs de ces sérialisations ont plusieurs variantes avec des règles de syntaxe différentes. Pour un résumé complet des formats pris en charge pour l'écriture avec dotNetRDF, consultez les formats pris en charge par dotNetRDF.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Parsers de graphe\n", "\n", @@ -968,7 +968,7 @@ "source": [ "Dans l'exemple ci-dessus, les parsers sont réutilisables. Une fois instanciés, vous pouvez les utiliser autant de fois que nécessaire. Une autre fonctionnalité utile est que les parsers sont conçus pour être thread-safe, de sorte que plusieurs threads peuvent utiliser la même instance d'un parser pour analyser simultanément différentes entrées sans interférer les uns avec les autres. Les parsers sont généralement capables de générer des exceptions de type `RdfParseException` et `RdfException`, il est donc recommandé d'utiliser des blocs `try/catch` autour de l'utilisation des parsers.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Lecture de RDF à partir de sources courantes\n", "\n", @@ -1458,7 +1458,7 @@ "source": [ "Cela est approximativement équivalent à la façon dont fonctionne `StringParser` en interne, mais cette méthode nécessite de connaître le format du RDF à l'avance.\n", "\n", - "---\n", + "***\n", "\n", "#### c) Variantes de sérialisation\n", "\n", @@ -1473,7 +1473,7 @@ "\n", "Consultez la documentation spécifique d'un parser pour savoir si des variantes de sérialisation sont prises en charge.\n", "\n", - "---\n", + "***\n", "\n", "#### d) Configuration des parsers\n", "\n", @@ -1484,7 +1484,7 @@ "- `TokenQueueMode.SynchronousBufferDuringParsing` : le fichier est tokenisé au fur et à mesure que l'analyse progresse, un nombre limité de tokens est généré et mis en mémoire tampon à chaque fois que le parser demande un token.\n", "- `TokenQueueMode.AsynchronousBufferDuringParsing` : le fichier est tokenisé en arrière-plan pendant que l'analyse progresse. Si le parser demande un token et que le tokeniseur n'a pas encore produit suffisamment de tokens, le parser doit attendre qu'un token soit disponible.\n", "\n", - "---\n", + "***\n", "\n", "#### e) Parsers de stockage\n", "\n", @@ -1502,13 +1502,13 @@ "\n", "Comme pour les parsers de graphe, diverses exceptions peuvent être générées.\n", "\n", - "---\n", + "***\n", "\n", "#### f) Lecture de jeux de données RDF à partir de sources courantes\n", "\n", "De la même manière que pour les parsers de graphe, les parsers de stockage peuvent tous être invoqués indirectement avec différentes méthodes des classes `EmbeddedResourceLoader`, `FileLoader`, `StringParser` et `Loader`. Consultez la documentation de l'API de ces classes pour les surcharges pertinentes.\n", "\n", - "---\n", + "***\n", "\n", "#### g) Analyse avancée\n", "\n", @@ -1625,7 +1625,7 @@ "\n", "Il existe plusieurs implémentations incluses qui effectuent différentes opérations, telles que la redirection des triples directement vers un fichier, un triple store natif, etc. Vous pouvez également implémenter votre propre gestionnaire, soit entièrement à partir de zéro, soit en dérivant de `BaseRdfHandler`, comme le font nos propres implémentations, pour obtenir la plupart de l'implémentation gratuitement. Consultez l'API Handlers pour plus de discussions sur ce sujet.\n", "\n", - "---\n", + "***\n", "\n", "#### h) Comportement des parsers\n", "\n", @@ -1640,7 +1640,7 @@ "- Gestion des fichiers/flux comme les parsers de graphe.\n", "- Si le parser produit un graphe qui existe déjà dans le store de destination, une erreur peut se produire en fonction du comportement de ce store lorsque le graphe existe déjà.\n", "\n", - "---\n", + "***\n", "\n", "#### i) Classes de parsers\n", "\n", @@ -1656,7 +1656,7 @@ "- `TriXParser` : TriX\n", "- `TurtleParser` : Turtle, NTriples\n", "\n", - "---\n" + "***\n" ] }, { @@ -1741,7 +1741,7 @@ "\n", "Plusieurs de ces sérialisations ont plusieurs variantes avec des règles de syntaxe différentes.\n", "\n", - "---\n", + "***\n", "\n", "#### a) Utilisation de base\n", "\n", @@ -1860,7 +1860,7 @@ "source": [ "Comme pour les Parsers, un Writer est une classe réutilisable qui peut être utilisée autant de fois que vous le souhaitez pour générer des graphes dans des fichiers/flux.\n", "\n", - "---\n", + "***\n", "\n", "#### b) Écriture dans des chaînes de caractères\n", "\n", @@ -2204,13 +2204,13 @@ }, "source": [ "\n", - "---\n", + "***\n", "\n", "#### d) Formateurs\n", "\n", "Les formateurs sont une alternative à l'utilisation d'un `IRdfWriter` pour générer du RDF. Leur avantage est qu'ils peuvent être utilisés pour formater des nœuds et des triples individuellement pour afficher uniquement ce que vous voulez et comment vous le voulez. Cependant, leur inconvénient est qu'ils ne peuvent pas utiliser le même ensemble de techniques de compression qu'un `IRdfWriter` complet lors de l'écriture d'un graphe entier, car ils sont délibérément dépourvus d'état.\n", "\n", - "---\n", + "***\n", "\n", "#### e) Comportement du Writer\n", "\n", @@ -2221,7 +2221,7 @@ "- Si un problème survient avec le graphe en cours d'enregistrement, mais ne l'empêche pas d'être enregistré, le writer déclenchera un événement d'avertissement (`Warning event`).\n", "- Si le graphe en cours d'écriture contient des triples/nœuds qui ne peuvent pas être écrits par le writer, une `RdfOutputException` sera levée.\n", "\n", - "---\n", + "***\n", "\n", "#### f) Classes Writer\n", "\n", @@ -2239,7 +2239,7 @@ "\n", "De plus, il existe une classe d'aide, `SingleGraphWriter`, qui implémente l'interface `IRdfWriter` et permet d'écrire un graphe à l'aide d'un writer qui implémente l'interface `IStoreWriter`. Cela permet d'écrire un graphe en utilisant les formats de sérialisation décrits dans la section \"Travailler avec les Triple Stores\".\n", "\n", - "---" + "***" ] }, { @@ -8857,7 +8857,7 @@ "\n", "Les fonctionnalités de Trinity RDF et les capacités d'inférence d'OWL dans RDF.Net permettent de manipuler des données RDF de manière plus intuitive et efficace. Grâce à ces outils, les développeurs peuvent interroger, inférer et travailler avec des graphes RDF et des ontologies de manière simplifiée et puissante.\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](../README.md)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb index a8983205a6..52ca857ae1 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-10-CSharp-RDFStar.ipynb @@ -1099,7 +1099,7 @@ "\n", "**Leçon clé** : la **réification classique** est le mécanisme portable pour annoter des triplets (provenance, confiance, temporalité) — au prix d'une verbosité de 4 triplets auxiliaires par fait. RDF-star (RDF 1.2) vise à éliminer ce coût avec une syntaxe dédiée `<< s p o >>`, mais reste un standard jeune. Les **graphes nommés** offrent un compromis intermédiaire : grouper des triplets par contexte et annoter le groupe. dotNetRDF gère les trois (Graph, SparqlQueryParser, TripleStore) avec la même API `VDS.RDF` que ce notebook utilise.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [`<< SW-9 JSONLD`](SW-9-CSharp-JSONLD.ipynb) | [Index SemanticWeb](README.md) | Jumeau Python : [`SW-10-Python-RDFStar`](SW-10-Python-RDFStar.ipynb)\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb index fcea9bfbc9..9ac4b55629 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2-CSharp-RDFBasics.ipynb @@ -61,7 +61,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation de dotNetRDF\n", "\n", @@ -175,7 +175,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Les triplets RDF\n", "\n", @@ -388,7 +388,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Types de noeuds\n", "\n", @@ -1077,7 +1077,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Espaces de noms et prefixes\n", "\n", @@ -1431,7 +1431,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Formats de serialisation\n", "\n", @@ -2080,7 +2080,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Exemple guide 1 : Modeliser un reseau social\n", "\n", @@ -2273,7 +2273,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Exemple guide 2 : Comparer les tailles de serialisation\n", "\n", @@ -2451,7 +2451,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Exercice : a vous de jouer\n", "\n", @@ -2673,7 +2673,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -2709,7 +2709,7 @@ "- **DCMI Metadata Terms** — Dublin Core Metadata Initiative. Vocabulaire `dc:`.\n", "- **SKOS Simple Knowledge Organization System** — Miles & Bechhofer, W3C Recommendation (2009). Vocabulaire `skos:`.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 1-Setup](SW-1-CSharp-Setup.ipynb) | [Index](README.md) | [3-GraphOperations >>](SW-3-CSharp-GraphOperations.ipynb)" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb index e72d31df25..168addc933 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-2b-Python-RDFBasics.ipynb @@ -39,7 +39,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Installation et Imports\n", "\n", @@ -146,7 +146,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Créer un Graphe et Ajouter des Triples\n", "\n", @@ -239,7 +239,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Types de Noeuds\n", "\n", @@ -334,7 +334,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Serialisation - Formats de Sortie\n", "\n", @@ -450,7 +450,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Charger un Fichier Existant\n", "\n", @@ -522,7 +522,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Tableau de Correspondance dotNetRDF / rdflib\n", "\n", @@ -571,7 +571,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices\n", "\n", @@ -734,7 +734,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -755,7 +755,7 @@ "- **SW-4b-Python-SPARQL** : Le langage de requête SPARQL en Python\n", "- **SW-5b-Python-LinkedData** : Interroger DBpedia et Wikidata avec SPARQLWrapper\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](README.md)" ] @@ -1064,7 +1064,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemple guide 3 : Construire un graphe RDF complet\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb index 3ae67b8df0..223818477c 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-7b-Python-OWL.ipynb @@ -40,7 +40,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Installation et Imports\n", "\n", @@ -117,7 +117,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Créer une Ontologie Simple\n", "\n", @@ -224,7 +224,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Créer des Individus et Assertions\n", "\n", @@ -305,7 +305,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Restrictions OWL\n", "\n", @@ -398,7 +398,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Raisonnement avec HermiT\n", "\n", @@ -529,7 +529,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Charger une Ontologie Existante\n", "\n", @@ -596,7 +596,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Exporter une Ontologie\n", "\n", @@ -653,7 +653,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Tableau de Correspondance dotNetRDF / OWLReady2\n", "\n", @@ -701,7 +701,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides (issus de contributions etudiantes)\n", "\n", @@ -944,7 +944,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -966,7 +966,7 @@ "- **SW-9-Python-JSONLD** : Données structurees pour le web\n", "- **SW-11-Python-KnowledgeGraphs** : Graphes de connaissances avec kglab\n", "\n", - "---\n", + "***\n", "\n", "**Retour au sommaire** : [Index SemanticWeb](README.md)" ] @@ -992,7 +992,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemple guide de synthese : Ontologie avec raisonnement\n", "\n", @@ -1495,7 +1495,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices\n", "\n", diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb index fce2451b70..49c6da2903 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-CSharp-SHACL.ipynb @@ -63,7 +63,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Chargement de dotNetRDF\n", "\n", @@ -189,7 +189,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Introduction a SHACL\n", "\n", @@ -234,7 +234,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Concepts fondamentaux de SHACL\n", "\n", @@ -290,7 +290,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Explorer une shape SHACL existante\n", "\n", @@ -681,7 +681,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. Validation SHACL avec dotNetRDF\n", "\n", @@ -1184,7 +1184,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Ecrire des shapes custom\n", "\n", @@ -1423,7 +1423,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 1 : MovieShape -- valider un dataset de films\n", "\n", @@ -1516,7 +1516,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Severites SHACL\n", "\n", @@ -1701,7 +1701,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 2 : Une forme avec severites mixtes\n", "\n", @@ -1786,7 +1786,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Contraintes avancees : opérateurs logiques\n", "\n", @@ -1946,7 +1946,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "### Exercice 3 : Contrainte `sh:not` et enumeration `sh:in`\n", "\n", @@ -2033,7 +2033,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Exemple guide : construire une BookShape par l'API C#\n", "\n", @@ -2277,7 +2277,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 9. Comparaison : dotNetRDF SHACL vs pySHACL\n", "\n", @@ -2314,7 +2314,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -2363,7 +2363,7 @@ "- [pySHACL Documentation](https://github.com/RDFLib/pySHACL) -- Le jumeau Python (notebook SW-8-Python)\n", "- [SHACL Playground](https://shacl-playground.zazuko.com/) -- Testez vos formes en ligne\n", "\n", - "---\n", + "***\n", "\n", "## Conclusion\n", "\n", @@ -2376,7 +2376,7 @@ "\n", "**Pour aller plus loin** : combinez SHACL avec RDFS/OWL (SW-6, SW-7) pour valider des données inferees, et explorez SHACL Advanced Features (règles de transformation `sh:rule`) pour la materialisation.\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 7-OWL](SW-7-CSharp-OWL.ipynb) | [Index](README.md) | [SW-8-Python >>](SW-8-Python-SHACL.ipynb)\n" ] diff --git a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb index 7415f9039d..47c1d39f90 100644 --- a/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb +++ b/MyIA.AI.Notebooks/SymbolicAI/SemanticWeb/SW-8-Python-SHACL.ipynb @@ -46,7 +46,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 0. Installation des dependances\n", "\n", @@ -151,7 +151,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 1. Introduction a SHACL\n", "\n", @@ -196,7 +196,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 2. Concepts fondamentaux de SHACL\n", "\n", @@ -251,7 +251,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 3. Explorer une shape SHACL existante\n", "\n", @@ -482,7 +482,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 4. pySHACL : Validation en Python\n", "\n", @@ -839,7 +839,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 5. Ecrire des shapes custom en Python\n", "\n", @@ -1171,7 +1171,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 6. Severites SHACL\n", "\n", @@ -1328,7 +1328,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 7. Contraintes avancees : opérateurs logiques\n", "\n", @@ -1566,7 +1566,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## 8. Exemples et Exercices" ] @@ -2061,7 +2061,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exemples guides (solutions proposees par @Sosolalt)\n", "\n", @@ -2803,7 +2803,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Exercices a completer\n", "\n", @@ -3094,7 +3094,7 @@ "tags": [] }, "source": [ - "---\n", + "***\n", "\n", "## Resume\n", "\n", @@ -3156,7 +3156,7 @@ "- [pySHACL Documentation](https://github.com/RDFLib/pySHACL) -- Bibliotheque Python\n", "- [SHACL Playground](https://shacl-playground.zazuko.com/) -- Testez vos formes en ligne\n", "\n", - "---\n", + "***\n", "\n", "**Navigation** : [<< 7b-OWL](SW-7b-Python-OWL.ipynb) | [Index](README.md) | [9-JSONLD >>](SW-9-Python-JSONLD.ipynb)" ] diff --git a/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..4bc6f414cc --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-10-rdf-star/0006-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,15 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 25172bd32e8ec39fb2aa10e0cc24e3adf5be5613 +csharp_sha: 52ca857ae1471c1dd7315d39d4faba7da58e785d +content_python_sha: 08b6e5188fb667cd2b3ead0619b4693dea8704a74096a58b207282cd9109c7e5 +content_csharp_sha: 0694e33cc38c083a32f4e8bb52cf801aa1d4a69073124667df1a8a6425cb3100 +reason: >- + Cote C# SEUL converti (1 sep). SW-10-CSharp-RDFStar (21 cellules md) : md 21/21, derniere (1). Le + jumeau Python (SW-10-Python-RDFStar) ne porte AUCUN separateur standalone convertible, verifie par + --check sur l'arbre de la PR. Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia- + po-2027:CoursIA), markdown-only, passage devant la regle famille #14209 trace au claim et au body + PR. Converti par scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, + bloc cloture, setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, + execution_count et metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici + est celui du HEAD de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0009-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0009-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..5b066bd4e7 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-2-rdf-basics/0009-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 168addc93347eae35ffdeea76825f3115abb912d +csharp_sha: 9ac4b55629fa8780a8cd8c8361ac69d2752547c7 +content_python_sha: c438079f25face3c4e0237f1c4bc1f6e31efcd3e6a78b7dfc93b690afc3f3d58 +content_csharp_sha: 2be0125aa7adeac770677a41331fe56910b457c98e0c561f4bae6bc3f99bbbc4 +reason: >- + LES DEUX COTES convertees (10 sep chacun). Python (SW-2b-Python-RDFBasics, 28 cellules md) : + separateurs en md 2, 5, 7, 9, 12, 14, 16 (1 chacun), md 20 (2), md 27 (1). C# (SW-2-CSharp- + RDFBasics, 37 cellules md) : md 2, 4, 6, 15, 19, 29, 31, 33 (1 chacun), md 37/37, derniere (2). + Re-attestation de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown- + only, passage devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0010-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0010-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..b18f9be76b --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-7-owl/0010-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 223818477c862cdd1868d26968d075368405dd7f +csharp_sha: f772b4048c0c6227986c830cf89946d10d7aaccd +content_python_sha: 7739d3e21f4340d5967dfac599ef8986ebf699c564bba4514b5432bc5cafbba4 +content_csharp_sha: e0fa1a57976b5801ece24c4b48560865c905d8755c9821ddea113ccd7fc6da18 +reason: >- + Cote Python SEUL converti (13 sep). SW-7b-Python-OWL (30 cellules md) : md 2, 4, 6, 8, 10, 12, 13, + 14, 16 (1 chacun), md 19 (2), md 21 et 28 (1 chacun). Le jumeau C# (SW-7-CSharp-OWL) ne porte + AUCUN separateur standalone convertible, verifie par --check sur l'arbre de la PR. Re-attestation + de parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, passage + devant la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR. diff --git a/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml new file mode 100644 index 0000000000..186fcbd1f6 --- /dev/null +++ b/scripts/notebook_tools/twin_pairs.d/sw-8-shacl/0003-2026-09-14-myia-po-2027-CoursIA.yaml @@ -0,0 +1,16 @@ +date: '2026-09-14' +by: myia-po-2027:CoursIA +python_sha: 47c1d39f90a290ae586eb8ee1dcdd1d0045e908b +csharp_sha: 49c6da29031213de9be4a4bcf1319d3cc6e8d5a4 +content_python_sha: cdc00a8d41757b7d3a33e23c1a9b74cd5f5b3f08b2e257ad2ad0a7f64d00f54e +content_csharp_sha: 0788d5a327d66944852621c746c5f08465c3a3443eb9e051133f6dd1d19124ad +reason: >- + LES DEUX COTES convertees. Python (SW-8-Python-SHACL, 40 cellules md, 13 sep) : md 2, 4, 5, 6, 9, + 14, 18, 20, 23, 27, 33, 38, 39 (1 chacun). C# (SW-8-CSharp-SHACL, 24 cellules md, 16 sep) : md 2, + 4, 5, 6, 9, 12, 14, 15, 17, 18, 20, 21, 23 (1 chacun), md 24/24, derniere (3). Re-attestation de + parite -- hr_separator vague 2 (#15611, lane myia-po-2027:CoursIA), markdown-only, passage devant + la regle famille #14209 trace au claim et au body PR. Converti par + scripts/notebook_tools/fix_hr_separator.py dans son allowlist (hors frontmatter, bloc cloture, + setext). Diff = 1 ligne de source JSON par separateur ; cellules code, outputs, execution_count et + metadata byte-identiques. Aucun strip outille posterieur : le blob atteste ici est celui du HEAD + de la PR.