References depuis ScoLOMFR

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.

REF_ScoLOMFR_V9-1_2025-01-17_19-20-28.scar|attachement (191,0 Ko)

C’est basé sur Scolmfr Accueil | ScoLOMFR
là encore, je ne suis pas capable de faire les fichiers ref avec les sources XML fournies.

Est que un quelqu’un serait capable de faire cela facilement ? J’aimerais pouvoir traduire la V10.1 puisqu’il y a les nouvelles compétences à jour.

1 « J'aime »

Bonjour,

[Je précise d’abord que je ne connais absolument pas ScoLOMFR et que j’essaie de confirmer si j’ai compris ce que vous voulez faire. :slight_smile: ]

Est-ce que le but est celui de prendre, par exemple, le fichier scolomfr_bcn.xml et transformer chaque comme ci-dessous ?

De :

   <CONCEPT>
      <ID>http://data.education.fr/voc/scolomfr/concept/nomenclature-voc-001-num-001</ID>
      <DF lang="fr">BCN_MATIERE - G</DF>
      <TERME>
         <INTITULE lang="fr">BCN_MATIERE:090100</INTITULE>
         <ID>nomenclature-voc-001-num-001</ID>
      </TERME>
      <TERME_TE>
         <INTITULE lang="fr">ARTS PLASTIQUES</INTITULE>
         <ID>nomenclature-voc-001-num-038</ID>
         <TYPE_TERME>http://www.lexinfo.net/ontology/2.0/lexinfo#fullForm</TYPE_TERME>
      </TERME_TE>
      <TERME_TE>
         <INTITULE lang="fr">A-PLA</INTITULE>
         <ID>nomenclature-voc-001-num-039</ID>
         <TYPE_TERME>http://www.lexinfo.net/ontology/2.0/lexinfo#shortForm</TYPE_TERME>
      </TERME_TE>
   </CONCEPT>
   <CONCEPT>

À :

    <fw:framework>
        <fw:frameworkM>
            <sp:title>Le ref</sp:title>
        </fw:frameworkM>
        <sp:elt>
            <fw:element xml:id="nomenclature-voc-001-num-038">
                <fw:elementM>
                    <sp:title>ARTS PLASTIQUES</sp:title>
                </fw:elementM>
            </fw:element>
        </sp:elt>
    </fw:framework>

Et on aurait un fichier par chaque <DF lang="fr">BCN_MATIERE - P</DF> regroupant les éléments de cette matière ?

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.