Files
tp1-rdf/README.md
trochas dfe28b80e4 readMe
2025-02-14 15:52:10 +01:00

4.3 KiB

TP1 PDS - Traducteur RDF/Turtle vers RDF/Ntriples

Réalisé par Thibaut ROCHAS et Tuan Minh VU

Implémentation du ASD

turtle ::= Turtle(phrase*)
phrase 	::= Phrase(entity, aff*)
aff ::= Aff(ntity, complement*)
complement ::= Complement(entity) 
		| Complement_Text(text)
text ::= Text(entity)
		|TextSTR(String)
entity ::= Entity(String)

Conversion vers Ntriples par ASD attribuée


turtle ::= Turtle(phrase*)
phrase 	::= Phrase(entity, aff*)
			aff*.s = entity.val
aff ::= Aff(entity, complement*)
			complement*.s = aff.s
			complement*.v = entity.val
complement ::= Complement(entity) 
			complement.c = entity.val
		| Complement_Text(text)
			complement.c = text.val
text ::= Text(entity)
			text.val = entity.val
		|TextSTR(String)
			text.val = String.self
entity ::= Entity(String)
			entity.val=String.self


TAD Nom d'attribut Type Polarité
phrase String H
aff s String H
complement s String H
complement v String H
complement c String H/S
Entity val String S

Analyse lexicale et syntaxique

Lexer

  • Dans Lexer, on crée des jetons basés sur tous les caractères spéciaux. Dans ID, on a tous les caractères de a à z en minuscule et mascule, '_', '-' et nombre.
  • On veut séparer l'ID et le STRING qui s'utilise avec "" qui a accès à tous les caractères spéciaux comme ç, à, ê,.. . Donc après recherché sur l'internet, on a utilisé ISO/CEI 8859 pour détecter ces caractères.
  • Dans ID on n'autorise pas l'espace mais STRING, notre parser a cet accès.

Parser

  • Au début, on créer un objet TutrleAST, il génère la structure Ntriple. On transmet le TurtleAST aux phrases enfants.
  • Les phrases ont accès au sujet et l'enregistrent dans le TurtleAST fourni par le parent (il sauvegarde dans une variable currentSujet), les phrases contiennent de faire "descendre" le TurtleAST aux listes enfants (list vc étant simplement une liste de couple verbe complément*)
  • listvc fait descendre TurtleAST à ses enfants vc (couple verbe complément*)
  • vc sauvegarde dans le TurtleAST le verbe (dans curentVerbe), et fait descendre TurtleAST à ses enfants listc (list de complément)
  • listc génère une phrase, le sujet et le verbe correspondant étant sauvegardés dans TurtleAST, le complément a plusieurs formes : il peut soit être soit "STRING", soit "ID"
  • et récursivement les phrases sont toutes générées, puis elles sont fusionnées à la fin après le EOF pour faire un Ntriple

Difficulté :

  • Au début, on a eu du mal à écrire l'ASD de Turtle.
  • Nous avons eu du mal à comprendre comment implémenter TurtleParser.g
  • La différence entre ID et STRING était ambiguë, ANTLR détectait un ID où il était censé détecter un STRING, et faisait donc une erreur (exemple : "M1", peut-être un STRING ou un ID), on a donc dû rajouter un nouvel élément text dans le Parser.

Etat :

  • Projet est écrit par OOP, on n'a pas temps pour implanter PC Observer ( Design Pattern )
  • Projet fonctionne bien avec les 2 tests et AST manuel.

Compatibilité

  • Java JDK 21
  • ANTLR3 3.5.2
  • Gradle 8.5

Construction, exécution

Pour construire le projet, depuis la racine du projet :

./gradlew build

Pour exécuter le programme Java TP1.Main, depuis la racine du projet :

java -jar /build/libs/TP1.jar [args]

Structure du projet

Fichiers de code source et de tests

  • src/main/java/ : fichiers sources Java à compléter
  • src/main/antlr/ : fichier sources ANTLR à compléter
  • tests/ : fichiers textes à utiliser pour les tests

Moteur de production Gradle

  • settings.gradle, build.gradle : configuration Gradle
  • gradle/wrapper : exécutable de Wrapper Gradle
  • gradlew, gradlew.bat : scripts (unix/windows) à exécuter depuis le terminal pour lancer le moteur de production

Environnement VSCode

  • .vscode : configuration de VSCode
  • eclipse-formatter.xml : formatage de code source Java, optionnel

Git

  • .gitignore : configuration pour ignorer certains fichiers et répertoires