Bonjour, je viens vers vous par ce que je commence à utiliser parcours, et j’avais envie d’avoir comme dans CANOPROF les références des compétences par matière dans la partie pédagogique.
Après une petite analyse du Modèle Canoprof j’ai récupéré le fichier notion.xml que j’ai converti avec un petit script python, je ne sais pas utiliser xslt .
Et j’ai fait des fichiers .ref avec plusieurs matières.
Oui c’est cela, sauf que la matière ou c’est le fichier REF et le contenu le référentiel ( les compétences comme sur la vidéo) , en fait, cela a été fait dans le modèle CANOPROF.
voici le fichier utilisé par canoprof notions.xml (740,9 Ko)
j’ai fait un script en python qui l’a transformé en plusieurs fichiers .ref par matière exemple pour la technologie / renommer ref pour l’inclure dans parcours ( voir le fichier scar au-dessus ) . sciences et technologie (discipline).xml (71,0 Ko)
Mais la base vient des fichiers SCOLOM.fr et ce sont des références croisées dans plusieurs fichiers.
Tu remarqueras aussi qu’à la génération du fichier xml dans id j’ai ajouté -XXX pour qu’il soit unique dans scenari, parce que la compétence peut-être la même dans plusieurs matières /niveau.
import xml.etree.ElementTree as ET
import random
# Charger le fichier XML d'entrée
tree = ET.parse('notions.xml')
root = tree.getroot()
# Fonction récursive pour traiter les sous-listes
def convertir_element(element, parent):
K = ''
for sous_element in element:
nouveau_elt = ET.SubElement(parent, "sp:elt")
nouveau_element = ET.SubElement(nouveau_elt, "fw:element")
K = sous_element.attrib.get('k','')
randuppercase = chr(random.randint(ord("A"), ord("Z")))+chr(random.randint(ord("A"), ord("Z")))+chr(random.randint(ord("A"), ord("Z")))
if not K:
K = randuppercase
else :
K = K +"-"+randuppercase
print(K)
nouveau_element.set("xml:id", K)
elementM = ET.SubElement(nouveau_element, "fw:elementM")
element_title = ET.SubElement(elementM, "sp:title")
element_title.text = sous_element.attrib.get('v', '')
if sous_element.tag.endswith('List'):
convertir_element(sous_element, nouveau_element)
for child in root:
# Créer un nouvel élément racine pour le nouveau format
nouvelle_racine = ET.Element("{http://www.utc.fr/ics/scenari/v3/core}item")
nouvelle_racine.set("xmlns:sc", "http://www.utc.fr/ics/scenari/v3/core")
nouvelle_racine.set("xmlns:sp", "http://www.utc.fr/ics/scenari/v3/primitive")
nouvelle_racine.set("xmlns:fw", "sc.soft:framework")
print(child.tag,"->",child.attrib)
titre = child.attrib.get('v')
print(child.attrib.get('v'))
# Créer les éléments pour le framework
framework = ET.SubElement(nouvelle_racine, "fw:framework")
frameworkM = ET.SubElement(framework, "fw:frameworkM")
framework_title = ET.SubElement(frameworkM, "sp:title")
framework_title.text = child.attrib.get('v')
# Convertir les éléments du premier format en éléments du deuxième format
convertir_element(child, framework)
# Créer un nouvel arbre XML avec la nouvelle racine
nouvel_arbre = ET.ElementTree(nouvelle_racine)
# Enregistrer le fichier converti
FichierSorti = child.attrib.get('v') + ".ref"
nouvel_arbre.write(FichierSorti, encoding='utf-8', xml_declaration=True)
J’espère que je suis un peu plus clair dans mes explications avec mon peu de maitrise xml et python.