CII1+1T1T0!Gc!0XmXG93v^_%9x=XRZ-2rU2VLh
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
literal 0
HcmV?d00001
diff --git a/_tutorials-FR/101_quickstart/101_quickstart.json b/_tutorials-FR/101_quickstart/101_quickstart.json
new file mode 100644
index 000000000..bfd8cd6bb
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/101_quickstart.json
@@ -0,0 +1,95 @@
+{
+ "steps": [
+ {
+ "label":"Welcome to MEI",
+ "descFile": "101_quickstart_step-00-desc.html"
+ },
+ {
+ "label":"First Note",
+ "editorLines":1,
+ "descFile": "101_quickstart_step-01-desc.html",
+ "xmlFile": "101_quickstart_step-01.xml",
+ "prefillFile": "101_quickstart_step-01-prefill.xml",
+ "xpaths": [
+ {"rule":"count(//mei:note) = 1", "renderanyway": false, "hint": "You need one note element."},
+ {"rule":"count(//mei:note/@*) = 3 and //mei:note/@pname and //mei:note/@oct and //mei:note/@dur", "renderanyway": false, "hint": "You need three attributes: @pname, @oct, and @dur."},
+ {"rule":"//mei:note/@pname", "renderanyway": false, "hint": "The @pname attribute allows values from 'a' to 'g'."},
+ {"rule":"//mei:note/@oct", "renderanyway": false, "hint": "The @oct attribute requires integers."},
+ {"rule":"//mei:note/@dur", "renderanyway": false, "hint": "The @dur attribute allows values such as '1', '2', '4', '8'…"},
+ {"rule":"//mei:note/@pname = 'e'", "renderanyway": true, "hint": "You need a @pname attribute, with a value of e."},
+ {"rule":"//mei:note/@oct = '4'", "renderanyway": true, "hint": "You need an @oct attribute, with a value of 4."},
+ {"rule":"//mei:note/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute, with a value of 4."}
+ ]
+ },
+ {
+ "label":"Multiple notes",
+ "editorLines":8,
+ "descFile": "101_quickstart_step-02-desc.html",
+ "xmlFile": "101_quickstart_step-02.xml",
+ "prefillFile": "101_quickstart_step-02-prefill.xml",
+ "xpaths": [
+ {"rule":"count(//mei:note) = 7", "renderanyway": true},
+ {"rule":"//mei:note[1]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[1]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[1]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@pname = 'd'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@pname = 'c'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@pname = 'd'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@dur = '4'", "renderanyway": true}
+ ]
+ },
+ {
+ "label":"A Simple Melody",
+ "editorLines":8,
+ "descFile": "101_quickstart_step-03-desc.html",
+ "xmlFile": "101_quickstart_step-03.xml",
+ "prefillFile": "101_quickstart_step-03-prefill.xml",
+ "xpaths": [
+ {"rule":"count(//mei:note) = 7", "renderanyway": true},
+ {"rule":"//mei:note[1]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[1]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[1]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[1]/@dots = '1'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@pname = 'd'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[2]/@dur = '8'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@pname = 'c'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[3]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@pname = 'd'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[4]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[5]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[6]/@dur = '4'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@pname = 'e'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@oct = '4'", "renderanyway": true},
+ {"rule":"//mei:note[7]/@dur = '2'", "renderanyway": true}
+ ]
+ }
+ ],
+ "end":"101_quickstart_end.html",
+ "resp":[
+ {
+ "name":"Johannes Kepper",
+ "affiliation":"Beethovens Werkstatt | Universität Paderborn"
+ }
+ ]
+}
diff --git a/_tutorials-FR/101_quickstart/101_quickstart_end.html b/_tutorials-FR/101_quickstart/101_quickstart_end.html
new file mode 100644
index 000000000..43de66f69
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/101_quickstart_end.html
@@ -0,0 +1,20 @@
+
+
Félicitations
+
Vous venez de terminer votre premier tutoriel sur MEI, et vous devriez déjà être capable d'encoder
+ une mélodie très simple avec MEI. Bien sûr, beaucoup plus est nécessaire pour un fichier MEI complet -
+ nous avons omis toutes les informations structurales concernant les mesures et les portées, et vous
+ devez également apprendre à configurer la mesure, la tonalité et les clefs. Comme prochaines étapes
+ avec MEI, nous aimerions vous recommander nos tutoriels sur les
+ accords ou
+ les silences.
+ Bien sûr, vous pouvez toujours revenir à ceux-ci (ou même à celui-ci) lorsque vous souhaitez vous
+ rappeler comment faire certaines choses en MEI.
+
+
+ Dès que vous vous serez bien familiarisé avec MEI, nous vous invitons à partager votre expérience avec la Communauté MEI
+ et, pourquoi pas, à rédiger vous-même un tutoriel sur un aspect de MEI qui vous intéresse particulièrement. Vous n'avez pas besoin d'être un expert pour cela - il est bon d'avoir des tutoriels à différents niveaux. Très souvent un tutoriel rédigé par d'autres débutants qui viennent de maîtriser une tâche
+ est plus facile à suivre qu'un guide écrit par une personne plus experimenté qui, ayant complètement assimilé certains éléments, ne se souvient pas qu'ils aient pu être difficile à comprendre des éléments.
+ Nous avons un tutoriel sur la rédaction de tutoriels,
+ et nous proposons des modèles à suivre. C'est facile de devenir un membre actif de la Communauté MEI :-)
+
+
\ No newline at end of file
diff --git a/_tutorials-FR/101_quickstart/101_quickstart_step-00-desc.html b/_tutorials-FR/101_quickstart/101_quickstart_step-00-desc.html
new file mode 100644
index 000000000..32c1cbe61
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/101_quickstart_step-00-desc.html
@@ -0,0 +1,15 @@
+
+
+ In this tutorial, you will learn how to encode a very simple melody in MEI. You will learn how to describe
+ the most basic aspects of music notation as structured data, so that computers can parse your code.
+
+
+ The code you write will be immediately rendered, and the rendering will respond to your changes. That way,
+ you will get a feeling on how the different parameters interact.
+
+
+ After you have finished this tutorial, you may want to do other tutorials, which will introduce you other
+ important aspects of MEI. These tutorials also serve as simple reference to MEI – you can always go back to them.
+
+
In order to get started, please hit the "continue" button on the lower right of this paragraph.
+
\ No newline at end of file
diff --git a/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-desc.html b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-desc.html
new file mode 100644
index 000000000..72173ade5
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-desc.html
@@ -0,0 +1,23 @@
+
+
+ Pour encoder une note, toutes les informations pertinentes doivent être enregistrées sous une forme lisible par
+ la machine. En fonction des besoins d'un projet, la sélection de ce qui est pertinent ou non peut varier, mais
+ dansl e cadre de cette introduction, nous allons traiter des informations les plus basiques d'une note : sa hauteur et sa durée.
+ Pour exprimer la hauteur, MEI utilise la
+ notation de hauteurs américaine, où le "do de serrure" est noté "C4". Cependant, MEI sépare "C4" en deux éléments
+ distincts : le nom de la hauteur (appelé @pname
dans MEI) et l'octave (@oct
). Cette séparation
+ a diverses raisons, qui n'ont pas d'importance ici. Il est également important de noter que les noms de hauteur sont
+ donnés en lettres minuscules dans MEI.
+
+
+ L'autre information importante est la durée (@dur
). Ici, des valeurs entières simples sont utilisées
+ pour indiquer la durée d'une note. Une note entière reçoit une valeur de 1
, une demi-note nécessite 2
,
+ une noire 4
, et ainsi de suite.
+
+ Nous vous invitons à entrer le code suivant dans la boîte de l'éditeur : <note pname="e" oct="4" dur="4"/>
. Vous devriez alors voir apparaître la note rendue. Vous pouvez faire varier les valeurs des attributs pour voir leur influence sur le rendu.
+ Vous verrez également des indications sur la manière d'écrire correctement le code. Quand vous êtes prêt, assurez-vous d'avoir le code correct dans l'éditeur, puis cliquez sur le bouton sur "continuer" en bas à droite.
+
+
+ PS : Si vous n'êtes pas très familier avec XML : Chaque fois que nous faisons référence à des attributs, nous préfixons leur nom avec le signe @. C'est une pratique courante qui provient du langage XPath. Lorsque vous les écrivez en XML, vous ne devez pas inclure le signe @, mais écrire uniquement le nom de l'attribut. N'hésitez pas à consulter notre tutoriel sur les bases de XML.
+
+
diff --git a/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-prefill.xml b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-prefill.xml
new file mode 100644
index 000000000..3ac128b27
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01-prefill.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01.xml b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01.xml
new file mode 100644
index 000000000..ea550c35a
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-01/101_quickstart_step-01.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-desc.html b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-desc.html
new file mode 100644
index 000000000..18756875a
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-desc.html
@@ -0,0 +1,10 @@
+
+
+ Félicitations, vous venez d'encoder votre première note en MEI. Maintenant, poursuivons et ajoutons quelques notes supplémentaire pour créer votre première séquence de notes :
+
+
+
+ Essayez de reproduire la séquence ci-dessus avec MEI (Vous pouvez copier-coller les éléments de la première note que vous avez encodé au besoin).
+ Chaque note a besoin des attributs @pname
, @oct
et @dur
Gardez à l'esprit que MEI inscrit le nom des notes en minuscule( de a
à g
).
+
+
diff --git a/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-prefill.xml b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-prefill.xml
new file mode 100644
index 000000000..b4c58d1ef
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02-prefill.xml
@@ -0,0 +1 @@
+
diff --git a/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02.xml b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02.xml
new file mode 100644
index 000000000..24de607d7
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-02/101_quickstart_step-02.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-desc.html b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-desc.html
new file mode 100644
index 000000000..7b15f234c
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-desc.html
@@ -0,0 +1,16 @@
+
+
Félicitations, vous venez d'encoder votre première séquence de notes en MEI. Maintenant, nous allons ajuster la valeur de
+ leur durée pour encoder votre première mélodie: "Mary had a little lamb"
+ 
+
+ Essayez de reproduire la mélodie ci-dessus en MEI. Chaque note a besoin des attributs @pname
, @oct
et
+ @dur
.
+
+
+ Gardez à l'esprit que l'attribut peut prendre comme valeur "1"
, "2"
, "4"
,
+ "8"
or "16"
pour indiquer les differentes valeurs rhythmique.
+ POur la première note, vous avez besoin d'un attribut supplémentaire :
+ @dots
qui permet d'indiquer le nombre de points attaché à la note. Ici il faut indiquer simplement
+ dots="1"
.
+
+
diff --git a/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-prefill.xml b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-prefill.xml
new file mode 100644
index 000000000..441e8481d
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03-prefill.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03.xml b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03.xml
new file mode 100644
index 000000000..50503dfd0
--- /dev/null
+++ b/_tutorials-FR/101_quickstart/step-03/101_quickstart_step-03.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/102_incipit.json b/_tutorials-FR/102_incipit/102_incipit.json
new file mode 100644
index 000000000..b50739594
--- /dev/null
+++ b/_tutorials-FR/102_incipit/102_incipit.json
@@ -0,0 +1,524 @@
+{
+ "steps": [
+ {
+ "label": "Score & staff definition",
+ "editorLines": 7,
+ "descFile": "102_incipit_step-01-desc.html",
+ "prefillFile": "102_incipit_step-01-prefill.xml",
+ "xmlFile": "102_incipit_step-01.xml",
+ "xpaths": [
+ {"rule": "count(//mei:scoreDef) = 1", "renderanyway": false, "hint": "You need one scoreDef element."},
+ {"rule": "count(//mei:scoreDef/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the scoreDef element."},
+ {"rule": "count(//mei:staffGrp) = 1", "renderanyway": false, "hint": "You need one staffGrp element."},
+ {"rule": "count(//mei:staffGrp/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the staffGrp element."},
+ {"rule": "//mei:scoreDef/mei:staffGrp", "renderanyway": false, "hint": "staffGrp element has to be a child of scoreDef element."},
+ {"rule": "count(//mei:staffDef) = 1", "renderanyway": false, "hint": "You need one staffDef element."},
+ {"rule": "count(//mei:staffDef/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the staffDef element."},
+ {"rule": "//mei:staffGrp/mei:staffDef", "renderanyway": false, "hint": "staffDef element has to be a child of staffGrp element."}
+ ]
+ },
+ {
+ "label": "Score & staff attributes",
+ "editorLines": 7,
+ "descFile": "102_incipit_step-02-desc.html",
+ "prefillFile": "102_incipit_step-02-prefill.xml",
+ "xmlFile": "102_incipit_step-02.xml",
+ "xpaths": [
+ {"rule": "count(//mei:scoreDef) = 1", "renderanyway": false, "hint": "You need one scoreDef element."},
+ {"rule": "count(//mei:staffGrp) = 1", "renderanyway": false, "hint": "You need one staffGroup element."},
+ {"rule": "count(//mei:staffGrp/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the staffGrp element."},
+ {"rule": "//mei:scoreDef/mei:staffGrp", "renderanyway": false, "hint": "staffGrp element has to be a child of scoreDef element."},
+ {"rule": "count(//mei:staffDef) = 1", "renderanyway": false, "hint": "You need one staffDef element."},
+ {"rule": "//mei:staffGrp/mei:staffDef", "renderanyway": false, "hint": "staffDef element has to be a child of staffGrp element."},
+ {"rule": "count(//mei:scoreDef/@*) = 2", "renderanyway": false, "hint": "You need two attributes on scoreDef (@key.sig & @meter.sym)."},
+ {"rule": "//mei:scoreDef/@key.sig = '3f'", "renderanyway": false, "hint": "You need a @key.sig attribute with a value of 3f."},
+ {"rule": "//mei:scoreDef/@meter.sym = 'cut'", "renderanyway": false, "hint": "You need an @meter.sym attribute with a value of cut."},
+ {"rule": "count(//mei:staffDef/@*) = 4", "renderanyway": false, "hint": "You need four attributes on staffDef (@n, @lines, @clef.shape & @clef.line)."},
+ {"rule": "//mei:staffDef/@n = '1'", "renderanyway": false, "hint": "You need a @n attribute with a value of 1."},
+ {"rule": "//mei:staffDef/@lines = '5'", "renderanyway": false, "hint": "You need a @lines attribute with a value of 5."},
+ {"rule": "//mei:staffDef/@clef.shape = 'G'", "renderanyway": false, "hint": "You need a @clef.shape attribute with a value of G."},
+ {"rule": "//mei:staffDef/@clef.line = '2'", "renderanyway": false, "hint": "You need a @clef.line attribute with a value of 2."}
+ ]
+ },
+ {
+ "label": "Measure, staff & layer",
+ "editorLines": 14,
+ "descFile": "102_incipit_step-03-desc.html",
+ "prefillFile": "102_incipit_step-03-prefill.xml",
+ "xmlFile": "102_incipit_step-03.xml",
+ "xpaths": [
+ {"rule": "count(//mei:section) = 1", "renderanyway": false, "hint": "You need one section element."},
+ {"rule": "count(//mei:section/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the section element."},
+ {"rule": "//mei:score/mei:section", "renderanyway": false, "hint": "section element has to be a child of score element."},
+ {"rule": "count(//mei:measure) = 1", "renderanyway": false, "hint": "You need one measure element."},
+ {"rule": "//mei:section/mei:measure", "renderanyway": false, "hint": "measure element has to be a child of section element."},
+ {"rule": "count(//mei:measure/@*) = 1", "renderanyway": false, "hint": "You need one attribute on measure (@n)."},
+ {"rule": "//mei:measure/@n = '0'", "renderanyway": false, "hint": "You need a @n attribute with a value of 0."},
+ {"rule": "count(//mei:staff) = 1", "renderanyway": false, "hint": "You need one staff element."},
+ {"rule": "//mei:measure/mei:staff", "renderanyway": false, "hint": "staff element has to be a child of measure element."},
+ {"rule":"count(//mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:staff/@n = '1'", "renderanyway": false, "hint": "You need a @n attribute with a value of 1."},
+ {"rule": "count(//mei:layer) = 1", "renderanyway": false, "hint": "You need one layer element."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "//mei:staff/mei:layer", "renderanyway": false, "hint": "layer element has to be a child of staff element."}
+ ]
+ },
+ {
+ "label": "First note",
+ "editorLines": 15,
+ "descFile": "102_incipit_step-04-desc.html",
+ "prefillFile": "102_incipit_step-04-prefill.xml",
+ "xmlFile": "102_incipit_step-04.xml",
+ "xpaths": [
+ {"rule": "count(//mei:note) = 1", "renderanyway": false, "hint": "You need one note element."},
+ {"rule": "count(//mei:note/@*) = 3", "renderanyway": false, "hint": "You need three attributes on note (@pname, @oct a& @dur)."},
+ {"rule": "//mei:note/@pname = 'b'", "renderanyway": false, "hint": "You need a @pname attribute with a value of b."},
+ {"rule": "//mei:note/@oct = '3'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 3."},
+ {"rule": "//mei:note/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4."}
+ ]
+ },
+ {
+ "label": "Second note",
+ "editorLines": 18,
+ "descFile": "102_incipit_step-05-desc.html",
+ "prefillFile": "102_incipit_step-05-prefill.xml",
+ "xmlFile": "102_incipit_step-05.xml",
+ "xpaths": [
+ {"rule": "count(//mei:section) = 1", "renderanyway": false, "hint": "You need one section element."},
+ {"rule": "count(//mei:section/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the section element."},
+ {"rule": "count(//mei:measure) = 2", "renderanyway": false, "hint": "You need a total of two measure elements."},
+ {"rule": "//mei:section/mei:measure", "renderanyway": false, "hint": "measure element has to be a child of section element."},
+ {"rule": "count(//mei:section/mei:measure) = 2", "renderanyway": false, "hint": "You need two measure children in section element."},
+ {"rule": "count(//mei:measure[1]/@*) = 1 and //mei:measure[1]/@n = 0", "renderanyway": false, "hint": "You need one @n attribute with a value of 0 on the first measure element (@n=0)."},
+ {"rule": "count(//mei:measure[2]/@*) = 1 and //mei:measure[2]/@n = 1", "renderanyway": false, "hint": "You need one @n attribute with a value of 1 on the second measure element (@n=1)."},
+ {"rule": "//mei:measure[1]/mei:staff", "renderanyway": false, "hint": "You need a staff in the first measure element."},
+ {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "You need a staff in the second measure element."},
+ {"rule": "count(//mei:measure/mei:staff) = 2", "renderanyway": false, "hint": "You need a staff child in every measure element."},
+ {"rule": "count(//mei:measure[1]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the staff of the first measure element (@n)."},
+ {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the staff of the second measure element (@n)."},
+ {"rule": "//mei:measure[1]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on the first staff element."},
+ {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on the second staff element."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element in the first staff element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element in the second staff element."},
+ {"rule": "count(//mei:staff/mei:layer) = 2", "renderanyway": false, "hint": "You need a layer child in every staff element."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer elements."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "You need a note in the first layer element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "You need a note in the second layer element."},
+ {"rule": "count(//mei:layer/mei:note) = 2", "renderanyway": false, "hint": "You need a note child in every layer element."},
+ {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first note (@pname, @oct & @dur)."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the second note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@pname = 'b'", "renderanyway": false, "hint": "You need a @pname attribute with a value of b on first note."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@oct = '3'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 3 on first note."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on first note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on second note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on second note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on second note."}
+ ]
+ },
+ {
+ "label": "Beams",
+ "editorLines": 12,
+ "descFile": "102_incipit_step-06-desc.html",
+ "prefillFile": "102_incipit_step-06-prefill.xml",
+ "xmlFile": "102_incipit_step-06.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure) = 2", "renderanyway": false, "hint": "You need a measure element."},
+ {"rule": "count(//mei:measure[2]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on measure (@n)."},
+ {"rule": "//mei:measure[2]/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on measure."},
+ {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "You need a staff in the measure element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element in the staff element."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "First note element has to be a child of the layer element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on first note element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on first note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on first note."},
+ {"rule": "count(//mei:beam) = '1'", "renderanyway": false, "hint": "You need one beam element."},
+ {"rule": "//mei:layer/mei:beam", "renderanyway": false, "hint": "beam element has to be a child of the layer element."},
+ {"rule": "//mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "beam element has to follow the first (e flat) note element."},
+ {"rule": "count(//mei:layer/mei:note/following-sibling::*) = 1", "renderanyway": false, "hint": "You need only one element to follow the first (e flat) note element."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam element."},
+ {"rule": "count(//mei:beam/mei:note) = 2", "renderanyway": false, "hint": "You need two note elements inside the beam element."},
+ {"rule": "count(//mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on the first beamed note."},
+ {"rule": "//mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the first beamed note."},
+ {"rule": "//mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "You need a @pname attribute with a value of g on the second beamed note."},
+ {"rule": "//mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the second beamed note."},
+ {"rule": "//mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the second beamed note."}
+ ]
+ },
+ {
+ "label": "Dotted rhythm",
+ "editorLines": 14,
+ "descFile": "102_incipit_step-07-desc.html",
+ "prefillFile": "102_incipit_step-07-prefill.xml",
+ "xmlFile": "102_incipit_step-07.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure) = 2", "renderanyway": false, "hint": "You need a measure element."},
+ {"rule": "count(//mei:measure[2]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the measure (@n)."},
+ {"rule": "//mei:measure[2]/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on measure."},
+ {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "You need a staff in the measure element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element in the staff element."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "First note element has to be a child of layer element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on first note element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on first note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on first note."},
+ {"rule": "count(//mei:beam) = '1'", "renderanyway": false, "hint": "You need one beam element."},
+ {"rule": "//mei:layer/mei:beam", "renderanyway": false, "hint": "beam element has to be a child of the layer element."},
+ {"rule": "//mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "beam element has to follow the first (e flat) note element."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam element."},
+ {"rule": "count(//mei:beam/mei:note) = 2", "renderanyway": false, "hint": "You need two note elements inside the beam element."},
+ {"rule": "count(//mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on the first beamed note."},
+ {"rule": "//mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the first beamed note."},
+ {"rule": "//mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "You need a @pname attribute with a value of g on second beamed note."},
+ {"rule": "//mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on second beamed note."},
+ {"rule": "//mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on second beamed note."},
+ {"rule": "//mei:layer/mei:beam/following-sibling::mei:note", "renderanyway": false, "hint": "One note element has to follow the beam element."},
+ {"rule": "//mei:layer/mei:beam/following-sibling::mei:note/following-sibling::mei:note", "renderanyway": false, "hint": "Another note element has to follow the note after the beam element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note) = 3", "renderanyway": false, "hint": "You need a total of three note elements as direct childs of this measure's layer."},
+ {"rule": "count(//mei:layer/mei:note/following-sibling::*) = 3", "renderanyway": false, "hint": "You need three elements to follow the first note element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@*) = 4", "renderanyway": false, "hint": "You need four attributes on the dotted quarter note (@pname, @oct, @dur & @dots)."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@pname = 'f'", "renderanyway": false, "hint": "You need a @pname attribute with a value of f on the dotted quarter note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the dotted quarter note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on the dotted quarter note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@dots = '1'", "renderanyway": false, "hint": "You need a @dots attribute with a value of 1 on the dotted quarter note."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the eighth note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[3]/@pname = 'd'", "renderanyway": false, "hint": "You need a @pname attribute with a value of d on the eighth note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the eighth note."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the eighth note."}
+ ]
+ },
+ {
+ "label": "A full measure",
+ "editorLines": 14,
+ "descFile": "102_incipit_step-08-desc.html",
+ "prefillFile": "102_incipit_step-08-prefill.xml",
+ "xmlFile": "102_incipit_step-08.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure) = 3", "renderanyway": false, "hint": "You need one measure element."},
+ {"rule": "count(//mei:measure[3]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on measure (@n)."},
+ {"rule": "//mei:measure[3]/@n = 2", "renderanyway": false, "hint": "You need a @n attribute with a value of 2 on measure."},
+ {"rule": "//mei:measure[3]/mei:staff", "renderanyway": false, "hint": "You need a staff element in the measure element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[3]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element in the staff element."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "First note element has to be child of the layer element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on the first note element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the first note element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on the first note element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam) = '1'", "renderanyway": false, "hint": "You need one beam element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam", "renderanyway": false, "hint": "beam element has to be a child of the layer element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "beam element has to follow the first note element."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note) = 2", "renderanyway": false, "hint": "You need two note elements inside the beam element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "You need a @pname attribute with a value of e on the first beamed note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the first beamed note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "You need a @pname attribute with a value of g on the second beamed note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the second beamed note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the second beamed note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/following-sibling::mei:note", "renderanyway": false, "hint": "One note element has to follow the beam element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/following-sibling::mei:note/following-sibling::mei:note", "renderanyway": false, "hint": "Another note element has to follow the note after the beam element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note) = 3", "renderanyway": false, "hint": "You need a total of three note elements as childs of this measure's layer."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note/following-sibling::*) = 3", "renderanyway": false, "hint": "You need three elements to follow the first note element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@*) = 4", "renderanyway": false, "hint": "You need four attributes on the dotted quarter note (@pname, @oct, @dur & @dots)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "You need a @pname attribute with a value of b on the dotted quarter note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the dotted quarter note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on the dotted quarter note."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@dots = '1'", "renderanyway": false, "hint": "You need a @dots attribute with a value of 1 on the dotted quarter note."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the eighth note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@pname = 'g'", "renderanyway": false, "hint": "You need a @pname attribute with a value of g on the eighth note ."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 4 on the eighth note ."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 8 on the eighth note ."}
+ ]
+ },
+ {
+ "label": "Final two measures",
+ "editorLines": 14,
+ "descFile": "102_incipit_step-09-desc.html",
+ "prefillFile": "102_incipit_step-09-prefill.xml",
+ "xmlFile": "102_incipit_step-09.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure) = 5", "renderanyway": false, "hint": "You need two measure elements."},
+ {"rule": "//mei:measure[4]/following-sibling::mei:measure", "renderanyway": false, "hint": "Measures have to follow each other."},
+ {"rule": "count(//mei:measure[4]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the first measure element (@n)."},
+ {"rule": "//mei:measure[4]/@n = 3", "renderanyway": false, "hint": "You need a @n attribute with a value of 3 on the first measure element."},
+ {"rule": "count(//mei:measure[5]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the second measure element (@n)."},
+ {"rule": "//mei:measure[5]/@n = 4", "renderanyway": false, "hint": "You need a @n attribute with a value of 4 on the second measure element."},
+ {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "Measure n=3: You need a staff element inside the measure element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "Measure n=3: You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "Measure n=3: You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[5]/mei:staff", "renderanyway": false, "hint": "Measure n=4: You need a staff element inside the measure element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/@*) = 1", "renderanyway": false, "hint": "Measure n=4: You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[5]/mei:staff/@n = 1", "renderanyway": false, "hint": "Measure n=4: You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "Measure n=3: You need a layer element inside staff."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer elements."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer", "renderanyway": false, "hint": "Measure n=4: You need a layer element inside staff."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "Measure n=3: You need two beam elements as direct children of layer."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "Measure n=3: You need one note element as direct child of layer."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/following-sibling::mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "Measure n=3: Note element has to be placed between the two beam elements."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/*) = '3'", "renderanyway": false, "hint": "Measure n=3: You need a total of 3 elements as children of layer."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam elements."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of e on note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 4 on note element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "Measure n=3: You need four note elements inside the first beam element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'a'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of a on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the third beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@pname = 'c'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of c on the third beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the third beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the third beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the fourth beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the fourth beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the fourth beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the fourth beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note) = 2", "renderanyway": false, "hint": "Measure n=3: You need two note elements inside the second beam element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the first beamed note (@pname, @oct & @dur) of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the first beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the first beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note of the second beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the second beamed note (@pname, @oct & @dur) of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note of the second beam."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note) = '2'", "renderanyway": false, "hint": "Measure n=4: You need two note elements as children of layer."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:rest) = '1'", "renderanyway": false, "hint": "Measure n=4: You need one rest element as child of layer."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/following-sibling::mei:note/following-sibling::mei:rest", "renderanyway": false, "hint": "Measure n=4: Rest element has to follow the two note elements."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/*) = '3'", "renderanyway": false, "hint": "Measure n=4: You need a total of 3 elements as children of layer."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=4: You need three attributes on the first note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@pname = 'c'", "renderanyway": false, "hint": "Measure n=4: You need a @pname attribute with a value of c on the first note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "Measure n=4: You need an @oct attribute with a value of 5 on the first note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the first note element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=4: You need three attributes on the second note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=4: You need a @pname attribute with a value of b on the second note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=4: You need an @oct attribute with a value of 4 on the second note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the second note element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:rest/@*) = 1", "renderanyway": false, "hint": "Measure n=4: You need one attribute on the rest element (@dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:rest/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the rest element."}
+ ]
+ },
+ {
+ "label": "Articulations",
+ "editorLines": 50,
+ "descFile": "102_incipit_step-10-desc.html",
+ "prefillFile": "102_incipit_step-10-prefill.xml",
+ "xmlFile": "102_incipit_step-10.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure) = 5", "renderanyway": false, "hint": "You need three measure elements."},
+ {"rule": "//mei:measure[4]/following-sibling::mei:measure", "renderanyway": false, "hint": "Measures have to follow each other."},
+ {"rule": "count(//mei:measure[4]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the first measure element (@n)."},
+ {"rule": "//mei:measure[4]/@n = 3", "renderanyway": false, "hint": "You need a @n attribute with a value of 3 on the first measure element."},
+ {"rule": "count(//mei:measure[5]/@*) = 1", "renderanyway": false, "hint": "You need one attribute on the second measure element (@n)."},
+ {"rule": "//mei:measure[5]/@n = 4", "renderanyway": false, "hint": "You need a @n attribute with a value of 4 on the second measure element."},
+ {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "You need a staff element inside the first measure element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[5]/mei:staff", "renderanyway": false, "hint": "You need a staff element inside the second measure element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[5]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "Measure n=3: You need a layer element inside staff."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer", "renderanyway": false, "hint": "Measure n=4: You need a layer element inside staff."},
+ {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer elements."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "Measure n=3: You need two beam elements as children of layer."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "Measure n=3: You need one note element as child of layer."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/following-sibling::mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "Measure n=3: Note element has to be placed between the two beam elements."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam elements."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of e on the note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 4 on the note element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "Measure n=3: You need four note elements inside the first beam element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'a'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of a on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the third beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@pname = 'c'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of c on the third beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the third beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the third beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the fourth beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the fourth beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the fourth beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the fourth beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note) = 2", "renderanyway": false, "hint": "Measure n=3: You need two note elements inside the second beam element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the first beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the first beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the second beamed note (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note) = '2'", "renderanyway": false, "hint": "Measure n=4: You need two note elements as children of layer."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:rest) = '1'", "renderanyway": false, "hint": "Measure n=4: You need one rest element as child of layer."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/following-sibling::mei:note/following-sibling::mei:rest", "renderanyway": false, "hint": "Measure n=4: Rest element has to follow the two note elements."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=4: You need three attributes on the first note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@pname = 'c'", "renderanyway": false, "hint": "Measure n=4: You need a @pname attribute with a value of c on the first note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "Measure n=4: You need an @oct attribute with a value of 5 on the first note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the first note element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=4: You need three attributes on the second note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=4: You need a @pname attribute with a value of b on the second note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=4: You need an @oct attribute with a value of 4 on the second note element."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the second note element."},
+ {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:rest/@*) = 1", "renderanyway": false, "hint": "Measure n=4: You need one attribute on the rest element (@dur)."},
+ {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:rest/@dur = '4'", "renderanyway": false, "hint": "Measure n=4: You need a @dur attribute with a value of 4 on the rest element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/mei:artic) = '1'", "renderanyway": false, "hint": "Measure n=1: You need an artic element as children of the second note element."},
+ {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/mei:artic/@*) = 2", "renderanyway": false, "hint": "Measure n=1: You need two attributes on the artic element (@artic, @place)."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/mei:artic/@artic = 'acc'", "renderanyway": false, "hint": "Measure n=1: You need a @artic attribute with a value of acc on artic element."},
+ {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/mei:artic/@place = 'above'", "renderanyway": false, "hint": "Measure n=1: You need an @place attribute with a value of above on the artic element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/mei:artic) = '1'", "renderanyway": false, "hint": "Measure n=2: You need a artic element as children of the second note element."},
+ {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/mei:artic/@*) = 2", "renderanyway": false, "hint": "Measure n=2: You need two attributes on the artic element (@artic, @place)."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/mei:artic/@artic = 'acc'", "renderanyway": false, "hint": "Measure n=2: You need a @artic attribute with a value of acc on artic element."},
+ {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/mei:artic/@place = 'above'", "renderanyway": false, "hint": "Measure n=2: You need an @place attribute with a value of above on the artic element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic) = '1'", "renderanyway": false, "hint": "Measure n=3: You need a artic element as children of the note element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@*) = 2", "renderanyway": false, "hint": "Measure n=3: You need two attributes on the artic element (@artic, @place)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@artic = 'acc'", "renderanyway": false, "hint": "Measure n=3: You need a @artic attribute with a value of acc on artic element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@place = 'above'", "renderanyway": false, "hint": "Measure n=3: You need an @place attribute with a value of above on the artic element."}
+ ]
+ },
+ {
+ "label": "Dynamics (referencing tstamps)",
+ "editorLines": 10,
+ "descFile": "102_incipit_step-11-desc.html",
+ "prefillFile": "102_incipit_step-11-prefill.xml",
+ "xmlFile": "102_incipit_step-11.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure[@n=0]) = 1", "renderanyway": false, "hint": "You need one measure with n = 0."},
+ {"rule": "//mei:measure[1]/mei:staff", "renderanyway": false, "hint": "You need a staff element inside the measure element."},
+ {"rule": "count(//mei:measure[1]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[1]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element inside staff."},
+ {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note) = 1", "renderanyway": false, "hint": "You need one note element."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "The note element has to be a child of the layer element."},
+ {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@pname = 'b'", "renderanyway": false, "hint": "You need a @pname attribute with a value of b on note."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@oct = '3'", "renderanyway": false, "hint": "You need an @oct attribute with a value of 3 on note."},
+ {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "You need a @dur attribute with a value of 4 on note."},
+ {"rule": "count(//mei:measure[1]/mei:dynam) = '1'", "renderanyway": false, "hint": "You need a dynam element as children of measure."},
+ {"rule": "//mei:measure[1]/mei:staff/following-sibling::mei:dynam", "renderanyway": false, "hint": "dynam element as has to follow the staff element."},
+ {"rule": "count(//mei:measure[1]/mei:dynam/@*) = 3", "renderanyway": false, "hint": "You need three attributes on the dynam element (@staff, @tstamp & @place)."},
+ {"rule": "//mei:measure[1]/mei:dynam/@staff = '1'", "renderanyway": false, "hint": "You need a @staff attribute with a value of 1 on the dynam element."},
+ {"rule": "//mei:measure[1]/mei:dynam/@tstamp = '1'", "renderanyway": false, "hint": "You need a @tstamp attribute with a value of 1 on the dynam element."},
+ {"rule": "//mei:measure[1]/mei:dynam/@place = 'below'", "renderanyway": false, "hint": "You need an @place attribute with a value of below on the dynam element."},
+ {"rule": "//mei:measure[1]/mei:dynam/text() = 'ff'", "renderanyway": false, "hint": "You need a text value of ff as content of the dynam element."}
+ ]
+ },
+ {
+ "label": "Slurs (referencing xml:id)",
+ "editorLines": 25,
+ "descFile": "102_incipit_step-12-desc.html",
+ "prefillFile": "102_incipit_step-12-prefill.xml",
+ "xmlFile": "102_incipit_step-12.xml",
+ "xpaths": [
+ {"rule": "count(//mei:measure[@n=3]) = 1", "renderanyway": false, "hint": "You need one measure with n = 3."},
+ {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "You need a staff element inside the measure element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "You need one attribute on staff (@n)."},
+ {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "You need a @n attribute with a value of 1 on staff."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "You need a layer element inside staff."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the layer element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "Measure n=3: You need two beam elements as children of layer."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "Measure n=3: You need one note element as child of layer."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/following-sibling::mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "Measure n=3: Note element has to be placed between the two beam elements."},
+ {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "You do not need an attribute on the beam elements."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the note element (@pname, @oct & @dur)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of e on the note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the note element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 4 on the note element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "Measure n=3: You need four note elements inside the first beam element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'a'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of a on the first beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the first beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note of the first beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the third beamed note (@pname, @oct & @dur) of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@pname = 'c'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of c on the third beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the third beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the third beamed note of the first beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the fourth beamed note (@pname, @oct & @dur) of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the fourth beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the fourth beamed note of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the fourth beamed note of the first beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note) = 2", "renderanyway": false, "hint": "Measure n=3: You need two note elements inside the second beam element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the first beamed note (@pname, @oct & @dur) of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@pname = 'd'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of d on the first beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 5 on the first beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the first beamed note of the second beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "Measure n=3: You need three attributes on the second beamed note (@pname, @oct & @dur) of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "Measure n=3: You need a @pname attribute with a value of b on the second beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "Measure n=3: You need an @oct attribute with a value of 4 on the second beamed note of the second beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "Measure n=3: You need a @dur attribute with a value of 8 on the second beamed note of the second beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic) = '1'", "renderanyway": false, "hint": "Measure n=3: You need a artic element as children of the note element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@*) = 2", "renderanyway": false, "hint": "Measure n=3: You need two attributes on the artic element (@artic, @place)."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@artic = 'acc'", "renderanyway": false, "hint": "Measure n=3: You need a @artic attribute with a value of acc on artic element."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/mei:artic/@place = 'above'", "renderanyway": false, "hint": "Measure n=3: You need an @place attribute with a value of above on the artic element."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 4", "renderanyway": false, "hint": "You need four attributes on the first beamed note (@pname, @oct, @dur & @xml:id) of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*[name()='xml:id'] = 'd1e4614'", "renderanyway": false, "hint": "You need a @xml:id attribute with a value of `d1e4614` on the first beamed note of the first beam."},
+ {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 4", "renderanyway": false, "hint": "You need four attributes on the second beamed note (@pname, @oct, @dur & @xml:id) of the first beam."},
+ {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*[name()='xml:id'] = 'd1e4615'", "renderanyway": false, "hint": "You need a @xml:id attribute with a value of `d1e4615` on the second beamed note of the first beam."},
+ {"rule": "count(//mei:measure[4]/mei:slur) = '1'", "renderanyway": false, "hint": "You need a slur element as child of measure."},
+ {"rule": "//mei:measure[4]/mei:staff/following-sibling::mei:slur", "renderanyway": false, "hint": "slur element has to follow the staff element."},
+ {"rule": "count(//mei:measure[4]/mei:slur/@*) = 4", "renderanyway": false, "hint": "You need four attributes on the slur element (@staff, @curvedir, @startid & @endid)."},
+ {"rule": "//mei:measure[4]/mei:slur/@staff = '1'", "renderanyway": false, "hint": "You need a @staff attribute with a value of 1 on slur."},
+ {"rule": "//mei:measure[4]/mei:slur/@curvedir = 'above'", "renderanyway": false, "hint": "You need a @curvedir attribute with a value of above on slur."},
+ {"rule": "//mei:measure[4]/mei:slur/@startid = '#d1e4614'", "renderanyway": false, "hint": "You need a @startid attribute with a value of #d1e4614 on slur."},
+ {"rule": "//mei:measure[4]/mei:slur/@endid = '#d1e4615'", "renderanyway": false, "hint": "You need an @endid attribute with a value of #d1e4615 on slur."}
+ ]
+ }
+ ],
+ "end": "102_incipit_end.html",
+ "resp": [
+ {
+ "name": "Margrethe S. Bue",
+ "affiliation": "National Library of Norway"
+ },
+ {
+ "name": "Sonja Wronkowska",
+ "affiliation": "RISM Poland | National Library of Poland"
+ },
+ {
+ "name": "Debra Nakos",
+ "affiliation": "University of Maryland, College Park"
+ },
+ {
+ "name": "Johannes Kepper",
+ "affiliation": "Beethovens Werkstatt | Universität Paderborn"
+ },
+ {
+ "name": "Andrew Hankinson",
+ "affiliation": "Bodleian Libraries | University of Oxford"
+ },
+ {
+ "name": "Stefan Münnich",
+ "affiliation": "Anton Webern Gesamtausgabe | University of Basel"
+ }
+ ]
+}
diff --git a/_tutorials-FR/102_incipit/102_incipit.md b/_tutorials-FR/102_incipit/102_incipit.md
new file mode 100644
index 000000000..638b91b76
--- /dev/null
+++ b/_tutorials-FR/102_incipit/102_incipit.md
@@ -0,0 +1,12 @@
+---
+layout: tutorials
+type: tutorial
+name: "ADVANCED: Incipit encoding"
+fullname: "An advanced tutorial on how to encode incipits in MEI"
+data: "102_incipit.json"
+---
+Welcome! In this tutorial you will learn how to encode an incipit (initial sequence of notes of a musical piece) in MEI, using the following example:
+
+
+
+By the way: this is the beginning of _Hallingdal Bataljons Marsch_, the Opus 1 of the Norwegian composer [Johan Halvorsen](https://en.wikipedia.org/wiki/Johan_Halvorsen) (1864–1935).
diff --git a/_tutorials-FR/102_incipit/102_incipit.png b/_tutorials-FR/102_incipit/102_incipit.png
new file mode 100644
index 0000000000000000000000000000000000000000..acd2087a857a564023e0dbd3e82da580b0c20266
GIT binary patch
literal 13751
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
literal 0
HcmV?d00001
diff --git a/_tutorials-FR/102_incipit/102_incipit_end.html b/_tutorials-FR/102_incipit/102_incipit_end.html
new file mode 100644
index 000000000..c7541679d
--- /dev/null
+++ b/_tutorials-FR/102_incipit/102_incipit_end.html
@@ -0,0 +1,16 @@
+
+
Félicitation !
+
+ Vous avez maintenant terminé avec succès ce tutoriel avancé, et vous devriez être en mesure d'encoder une mélodie à une voix
+ avec plusieurs mesures, différentes valeurs de notes et de silences, des croches, des liaisons et des indications de dynamique.
+
+
+ Comme prochaines étapes avec MEI, nous aimerions vous recommander d'autres tutoriels. Bien sûr, vous pouvez toujours revenir à
+ ceux-ci (ou même à celui-ci) lorsque vous souhaitez vous rappeler comment faire certaines choses en MEI.
+
+ Dès que vous vous serez bien familiarisé avec MEI, nous vous invitons à partager votre expérience avec la Communauté MEI
+ et, pourquoi pas, à rédiger vous-même un tutoriel sur un aspect de MEI qui vous intéresse particulièrement. Vous n'avez pas besoin d'être un expert pour cela - il est bon d'avoir des tutoriels à différents niveaux. Très souvent un tutoriel rédigé par d'autres débutants qui viennent de maîtriser une tâche
+ est plus facile à suivre qu'un guide écrit par une personne plus expérimenté qui, ayant complètement assimilé certains éléments, ne se souvient pas qu'ils aient pu être difficile à comprendre des éléments.
+ Nous avons un tutoriel sur la rédaction de tutoriels,
+ et nous proposons des modèles à suivre. C'est facile de devenir un membre actif de la Communauté MEI :-)
+
diff --git a/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-desc.html b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-desc.html
new file mode 100644
index 000000000..ca56d2c19
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-desc.html
@@ -0,0 +1,17 @@
+
+
Première étape : encoder le squelette structurel de l'exemple.
+
+
Pour encoder la ligne mélodique de cet exemple, vous devrez inclure des informations sur l'organisation de la partition et des portées.
+ En MEI, ce type d'information est donné avec les éléments <scoreDef>
(définition de partition), <staffGrp>
+ (groupe de portées) et <staffDef>
(définition de portée). Ainsi, <scoreDef>
est utilisé pour spécifier
+ les paramètres communs d'une partition, <staffGrp>
fournit des informations sur le regroupement des portées, et
+ <staffDef>
contient toutes les informations liées à une portée individuelle. Ensemble, ces éléments fournissent
+ le contexte structurel du contenu musical, par exemple des informations sur le nombre de portées, leur regroupement ou leur ordre, Ainsi
+ que sur la clef, l'armure ou l'indication de mesure.
+
+
+
+
Pour l'instant, commençons avec le squelette de la structure.
+
+
Dans l'éditeur ci-dessous, Entrez un élément <scoreDef>
(définition de partition) qui contient un élément enfant <staffGrp>
(groupe de portées) et son élément enfant <staffDef>
(définition de portée). Pour obtenir une sortie visuelle (un rendu) de l'encodage, d'autres informations devront être fournies dans les prochaines étapes.
+
diff --git a/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml
new file mode 100644
index 000000000..44fbfea59
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml
@@ -0,0 +1 @@
+
diff --git a/_tutorials-FR/102_incipit/step-01/102_incipit_step-01.xml b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01.xml
new file mode 100644
index 000000000..e516e1e38
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-desc.html b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-desc.html
new file mode 100644
index 000000000..9f7140351
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-desc.html
@@ -0,0 +1,31 @@
+
+
Deuxième étape : ajoutez des attributs au squelette structurel que vous avez créé à l'étape précédente. Ces attributs fourniront
+ des informations de base sur la portée, la clef et la tonalité de l'exemple.
+
+
Vous avez appris dans l'étape précédente que l'élément <scoreDef>
est utilisé pour spécifier les paramètres communs d'une partition, et
+ <staffDef>
contient toutes les métadonnées relatives à une portée individuelle. Évidemment, il n'y a qu'une seule portée dans cet exemple
+ d'incipit, il serait donc possible de déclarer l'armure (3 bémols) et l'indication de mesure (mesure à 2/2) dans <staffDef>
. Mais déplaçons
+ ces informations dans <scoreDef>
, en supposant que la tonalité et la mesure sont les mêmes pour tous les autres instruments ou parties de la
+ partition complète de l'Opus 1 de Halvorsen. Pour spécifier une certaine tonalité ou mesure, vous devez utiliser les attributs suivants de <scoreDef>
+ et les ajouter à l'élément <scoreDef>
:
+
+ @key.sig
(l'armure) – le nombre de dièses/bémols à l'armure écrite, utilisez "3f"
pour 3 bémols.
+ @meter.sym
(indication de mesure) – utilisez "cut"
pour une mesure à 2/2 (C/).
+
+
+
+
+
La clef, quant à elle, est décrite dans l'élément <staffDef>
, car elle est liée à la portée individuelle (d'autres instruments peuvent avoir d'autres clefs).
+ Vous devez utiliser les attributs suivants de <staffDef>
:
+
+ @n
(un nombre ordinal) – représente la position de la portée dans le <staffGrp>
, utilisez "1"
pour la première (et unique) portée
+ @lines
– représente le nombre de ligne de la portée. Utilisez "5"
pour une portée à cinq lignes
+ @clef.shape
– représente le symbole de la clef. Utilisez "G"
pour un symbole de clef de sol.
+ @clef.line
– représente la position de la clef dans la portée (en comptant à partir du bas). Utilisez "2"
.
+
+
+
Ajoutez les attributs décrits ci-dessus et leurs valeurs respectives à <scoreDef>
et <staffDef>
dans l'éditeur ci-dessous.
+ (Pour une représentation, il est encore nécessaire de fournir quelques informations supplémentaires. Nous touchons au but !)
+
+
PS : Si vous n'êtes pas très familier avec XML : Chaque fois que nous faisons référence à des attributs, nous préfixons leur nom avec le signe @. C'est une pratique courante qui provient du langage XPath. Lorsque vous les écrivez en XML, vous ne devez pas inclure le signe @, mais écrire uniquement le nom de l'attribut. N'hésitez pas à consulter notre tutoriel sur les bases de XML.
+
diff --git a/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-prefill.xml b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-prefill.xml
new file mode 100644
index 000000000..fa186612b
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02-prefill.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/_tutorials-FR/102_incipit/step-02/102_incipit_step-02.xml b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02.xml
new file mode 100644
index 000000000..1b67c1a43
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-02/102_incipit_step-02.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 8a64b43d2a846792304da16e328cb4f7c9ad8a50 Mon Sep 17 00:00:00 2001
From: daftcloud <50362363+daftcloud@users.noreply.github.com>
Date: Wed, 8 Nov 2023 11:21:24 +0100
Subject: [PATCH 16/41] =?UTF-8?q?Ajout=20derni=C3=A8res=20=C3=A9tapes=2010?=
=?UTF-8?q?0=20redirection=20vers=20le=20wikipedia=20fran=C3=A7ais=20pour?=
=?UTF-8?q?=20XPath=20dans=20le=20meta=20Tuto?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
_tutorials-FR/100_structure/100_Structure.md | 2 +-
.../step-03/100_structure_step-03-desc.html | 8 ++--
.../step-04/100_structure_step-04-desc.html | 38 ++++++++++---------
.../199_tutorials/writingTutorials-03.html | 2 +-
4 files changed, 26 insertions(+), 24 deletions(-)
diff --git a/_tutorials-FR/100_structure/100_Structure.md b/_tutorials-FR/100_structure/100_Structure.md
index 84e8bad02..1955cebb1 100644
--- a/_tutorials-FR/100_structure/100_Structure.md
+++ b/_tutorials-FR/100_structure/100_Structure.md
@@ -2,6 +2,6 @@
layout: tutorials-FR
type: tutorial-FR
name: "Débutant: Les bases de XML et la structure minimal de MEI"
-fullname: "Un court tutorizl sur les bases de XML et MEI"
+fullname: "Un court tutoriel sur les bases de XML et MEI"
data: "100_structure.json"
---
diff --git a/_tutorials-FR/100_structure/step-03/100_structure_step-03-desc.html b/_tutorials-FR/100_structure/step-03/100_structure_step-03-desc.html
index d67ecf2df..ec1165eb7 100644
--- a/_tutorials-FR/100_structure/step-03/100_structure_step-03-desc.html
+++ b/_tutorials-FR/100_structure/step-03/100_structure_step-03-desc.html
@@ -1,14 +1,14 @@
- Troisème étape : Découvrir les élements enfant de l'élément racine <mei>
: <meiHead>
+ Troisième étape : Découvrir les élements enfant de l'élément racine <mei>
: <meiHead>
and <music>
.
Bon travail! Maintenant que nous avons déclaré un espace de noms dans notre élément racine, tous les autres éléments
imbriqués dedans peuvent être résolus conformément à l'espace de noms MEI par un traitement automatique.
- Comme nous l'avions vu, vous pouvez imaginer un document XML comme un arbre qui se ramifie à partir d'un élément racine (l'exterieur)
- vers des éléments enfants (à l'intérieur) imbriqués. Un fichier encodé en MEI contient au moins deux structures à l'intérieur de
+ Comme nous l'avions vu, vous pouvez imaginer un document XML comme un arbre qui se ramifie à partir d'un élément racine
+ vers des éléments enfants imbriqués. Un fichier encodé en MEI contient au moins deux structures à l'intérieur de
de l'élément racine
<mei>
:
Dans l'éditeur ci-dessous, ajoutez un élément <meiHead>
et un élément <music>
à l'intérieur
- l'élment racine <mei>
.
+ l'élément racine <mei>
.
diff --git a/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html b/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
index 403395297..10a2f0d06 100644
--- a/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
+++ b/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
@@ -1,26 +1,28 @@
-
-
- Step four: provide the minimum necessary information for the MEI header.
-
-
- Perfect! You are now pretty close to a valid basic MEI file structure. What is missing yet, are two mandatory
- elements of the MEI header:
+
+ Étape quatre : fournir les informations minimales nécessaires pour l'en-tête MEI.
+
+
+ Parfait ! Vous êtes maintenant très proche de disposer d'une structure de fichier MEI de base valide. Ce qui manque encore,
+ ce sont deux éléments incontournable de l'en-tête MEI :
-
-
<titleStmt>
- a container element for title and responsibility meta-data. The title of a
- bibliographic entity is given via its mandatory sub-element <title>
;
+ <titleStmt>
- un élément conteneur pour le titre et les métadonnées de responsabilité.
+ Le titre d'une entité bibliographique est donné via son sous-élément obligatoire <title>
;
-
-
<pubStmt>
- a container element for information regarding the publication or distribution of a
- bibliographic item, including the publisher's name and address, the date of publication, and other relevant
- details.
+ <pubStmt>
- un élément conteneur pour les informations concernant la publication ou
+ la distribution d'un élément bibliographique, y compris le nom et l'adresse de l'éditeur, la date de
+ publication et d'autres détails pertinents.
- Both these elements are part of the file description (<fileDesc>
), which is a direct child element
- of <meiHead>
and provides for a full bibliographic description of a MEI file.
-
-
In the editor below, add a <fileDesc>
element inside the given <meiHead>
.
- Then add the mandatory <titleStmt>
and <pubStmt>
elements to
- <fileDesc>
and a <title>
element to <titleStmt>
.
+ Ces deux éléments font partie de la description du fichier (
<fileDesc>
), qui est un élément
+ enfant direct de
<meiHead>
et permet une description bibliographique complète d'un fichier MEI.
+
+
Dans l'éditeur ci-dessous, ajoutez un élément <fileDesc>
à l'intérieur de
+ <meiHead>
donné. Ensuite, ajoutez les éléments obligatoires <titleStmt>
+ et <pubStmt>
à <fileDesc>
et un élément <title>
à
+ <titleStmt>
.
+
+
diff --git a/_tutorials-FR/199_tutorials/writingTutorials-03.html b/_tutorials-FR/199_tutorials/writingTutorials-03.html
index 7ce0fbfff..aae25b9bd 100644
--- a/_tutorials-FR/199_tutorials/writingTutorials-03.html
+++ b/_tutorials-FR/199_tutorials/writingTutorials-03.html
@@ -92,7 +92,7 @@ Étapes
instructions et entrer le code MEI dans l'éditeur. Pour décider si
l'utilisateur a réussi ou non, vous devez fournir un certain nombre de
règles
- XPath.
+ XPath.
L'expression XPath elle-même est stockée dans une propriété
"rule"
. Elle doit renvoyer une valeur booléenne, c'est-à-dire
true ou false. Si vous souhaitez guider l'utilisateur, vous
From 9fac958703f17d98fdee5f4ec014f13dc2fc04a0 Mon Sep 17 00:00:00 2001
From: daftcloud <50362363+daftcloud@users.noreply.github.com>
Date: Wed, 8 Nov 2023 12:02:12 +0100
Subject: [PATCH 17/41] =?UTF-8?q?Ajotu=20=C3=A9tape=203,4=20et=205=20du=20?=
=?UTF-8?q?tuto=20102?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../step-04/100_structure_step-04-desc.html | 2 +-
.../step-03/102_incipit_step-03-desc.html | 25 +++++++++++
.../step-03/102_incipit_step-03-prefill.xml | 6 +++
.../step-03/102_incipit_step-03.xml | 32 +++++++++++++++
.../step-04/102_incipit_step-04-desc.html | 41 +++++++++++++++++++
.../step-04/102_incipit_step-04-prefill.xml | 14 +++++++
.../step-04/102_incipit_step-04.xml | 34 +++++++++++++++
.../step-05/102_incipit_step-05-desc.html | 17 ++++++++
.../step-05/102_incipit_step-05-prefill.xml | 10 +++++
.../step-05/102_incipit_step-05.xml | 41 +++++++++++++++++++
10 files changed, 221 insertions(+), 1 deletion(-)
create mode 100644 _tutorials-FR/102_incipit/step-03/102_incipit_step-03-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-03/102_incipit_step-03.xml
create mode 100644 _tutorials-FR/102_incipit/step-04/102_incipit_step-04-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-04/102_incipit_step-04.xml
create mode 100644 _tutorials-FR/102_incipit/step-05/102_incipit_step-05-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-05/102_incipit_step-05.xml
diff --git a/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html b/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
index 10a2f0d06..346bc03a0 100644
--- a/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
+++ b/_tutorials-FR/100_structure/step-04/100_structure_step-04-desc.html
@@ -1,5 +1,5 @@
- Étape quatre : fournir les informations minimales nécessaires pour l'en-tête MEI.
+ Quatirème étape : fournir les informations minimales nécessaires pour l'en-tête MEI.
Parfait ! Vous êtes maintenant très proche de disposer d'une structure de fichier MEI de base valide. Ce qui manque encore,
diff --git a/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-desc.html b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-desc.html
new file mode 100644
index 000000000..dae5f0dd9
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-desc.html
@@ -0,0 +1,25 @@
+
+
Troisième étape: La configuration d'une balise <mesure>
avec une balise et une balise vides.
+ Bien joué ! Vous avez déclaré les métadonnées nécessaires concernant la structure de la partition et de la mise en page des portées.
+ Avant de pouvoir encoder la première note de l'exemple, vous devrez préparer sa structure, c'est-à-dire sa mesure,
+ sa portée et sa voix.
+
+
+ En MEI, l'élément <section>
est le conteneur des éléments <measure>
et il est positionné
+ directement après la définition de la partition (élément <scoreDef>
). Les éléments <measure>
+ peuvent contenir plusieurs portées (éléments <staff>
) qui peuvent avoir plusieurs couches (éléments
+ <layer>
). L'élément <layer>
sera l'élément parent des éléments <note>
+ à l'étape suivante.
+
+
+ Pour indiquer la position numérotée des mesures, des portées ou des couches, l'attribut @n
peut être utilisé.
+
+ Configurer la première mesure : Dans l'éditeur, insérez un élément <section>
. À l'intérieur de
+ <section>
, ajoutez un élément <measure>
vide et définissez le numéro de la mesure de
+ départ à "0". Ajoutez un élément enfant <staff>
à l'élément <measure>
et définissez son
+ numéro à "1" (première portée dans la mesure 0). Ensuite, ajoutez un élément enfant non numéroté <layer>
+ à l'élément <staff>
.
+
+ PS : Avec les informations nécessaires fournies dans les éléments et , le rendu est désormais capable
+ de visualiser l'encodage. Vous pouvez jouer un peu avec les valeurs des attributs de et pour voir comment
+ ils influencent le rendu.
diff --git a/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
new file mode 100644
index 000000000..4d45ca5c6
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-03/102_incipit_step-03.xml b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03.xml
new file mode 100644
index 000000000..4d2d6c2a2
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-desc.html b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-desc.html
new file mode 100644
index 000000000..e08a431af
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-desc.html
@@ -0,0 +1,41 @@
+
+
+ Quatrième étape: Encoder la première note de cet exemple.
+
+
+
+ Après avoir préparé la structure de la mesure de départ dans l'étape précédante,
+ vous êtes maintenant prêt à encoder la première note de l'exemple. En MEI, les notes décrivent des événements de hauteur unique qui
+ sont encodés dans, *roulement de tambour*, des éléments <note>
, lesquels peuvent être des enfants de
+ l'élément <layer>
. Vous pouvez définir les principales caractéristiques de la note, telles que la hauteur et la durée,
+ en utilisant les attributs suivants sur l'élément <note>
:
+
+
+
+ -
+
@pname
(nom de la hauteur) – lettres minuscules de “a”
à “g”
, utilisez “b”
ici.
+
+ -
+
@oct
(octave) – valeur de l'octave de la hauteur en entiers de “0”
à ”9”
, C4 étant la hauteur
+ spécifiée par la clé de do, utilisez “3”
+
+ -
+
@dur
(durée) – par exemple, “1”
pour la ronde, “2”
pour la blanche, “4”
pour la
+ noire, “8”
pour la croche, “16”
pour la double croche, … “2048”
pour la deux mille
+ quarante-huitième, utilisez “4”
+
+
+
+
+ Voici un exemple de la manière d'encoder une ronde C4 : <note pname="c" oct="4" dur="1"></note>
.
+
+
+
+ Dans l'éditeur ci-dessous, saisissez l'encodage de la première note de l'exemple à l'intérieur de l'élément <layer>
.
+
+
+
+ PS : Si vous êtes intéressé par un tutoriel uniquement sur les éléments <note>
, consultez notre
+ tutoriel de démarrage rapide.
+
+
diff --git a/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
new file mode 100644
index 000000000..1da358e9d
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-04/102_incipit_step-04.xml b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04.xml
new file mode 100644
index 000000000..5942f237f
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-desc.html b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-desc.html
new file mode 100644
index 000000000..0ab00c2be
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-desc.html
@@ -0,0 +1,17 @@
+
+
+ Cinquième étape: combinez ce que vous avez appris dans les deux étapes précédantes, encodez à la fois la structure de la prochaine
+ mesure et la seconde note de l'exemple.
+
+
+
+ Dans l'éditeur ci-dessous, ajoutez un nouvel élément <measure>
avec l'attribut @n="1"
et une portée
+ (<staff>
) également avec l'attribut @n="1"
, le tout à côté de la mesure d'entrée existante.
+ Ajoutez la deuxième note de l'exemple (une noire mi bémol 4) à cette nouvelle mesure. Ne vous inquiétez pas si le contenu de la
+ mesure est trop court dans la métrique donnée - vous le compléterez dans les prochaines étapes.
+
+
+
+ PS : L'encodage sera rendu dès que vous aurez saisi la nouvelle note.
+
+
diff --git a/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
new file mode 100644
index 000000000..d09d62360
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
@@ -0,0 +1,10 @@
+
diff --git a/_tutorials-FR/102_incipit/step-05/102_incipit_step-05.xml b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05.xml
new file mode 100644
index 000000000..af06f205b
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05.xml
@@ -0,0 +1,41 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From eb8e07b3faa65c985702b33924b6ebc607e5a89b Mon Sep 17 00:00:00 2001
From: daftcloud <50362363+daftcloud@users.noreply.github.com>
Date: Fri, 10 Nov 2023 11:13:40 +0100
Subject: [PATCH 18/41] Ajout du tutoriel 102
---
.../step-03/100_structure_step-03-prefill.xml | 2 +-
.../step-04/100_structure_step-04-prefill.xml | 2 +-
.../102_incipit/102_incipit_end.html | 2 +-
.../step-01/102_incipit_step-01-prefill.xml | 2 +-
.../step-03/102_incipit_step-03-prefill.xml | 2 +-
.../step-04/102_incipit_step-04-prefill.xml | 2 +-
.../step-05/102_incipit_step-05-prefill.xml | 2 +-
.../step-06/102_incipit_step-06-desc.html | 19 ++++
.../step-06/102_incipit_step-06-prefill.xml | 8 ++
.../step-06/102_incipit_step-06.xml | 45 +++++++++
.../step-07/102_incipit_step-07-desc.html | 16 ++++
.../step-07/102_incipit_step-07-prefill.xml | 12 +++
.../step-07/102_incipit_step-07.xml | 47 ++++++++++
.../step-08/102_incipit_step-08-desc.html | 17 ++++
.../step-08/102_incipit_step-08-prefill.xml | 1 +
.../step-08/102_incipit_step-08.xml | 60 ++++++++++++
.../step-09/102_incipit_step-09-desc.html | 20 ++++
.../step-09/102_incipit_step-09-prefill.xml | 1 +
.../step-09/102_incipit_step-09.xml | 86 +++++++++++++++++
.../step-10/102_incipit_step-10-desc.html | 21 +++++
.../step-10/102_incipit_step-10-prefill.xml | 49 ++++++++++
.../step-10/102_incipit_step-10.xml | 92 ++++++++++++++++++
.../step-11/102_incipit_step-11-desc.html | 40 ++++++++
.../step-11/102_incipit_step-11-prefill.xml | 8 ++
.../step-11/102_incipit_step-11.xml | 93 ++++++++++++++++++
.../step-12/102_incipit_step-12-desc.html | 56 +++++++++++
.../step-12/102_incipit_step-12-prefill.xml | 21 +++++
.../step-12/102_incipit_step-12.xml | 94 +++++++++++++++++++
28 files changed, 813 insertions(+), 7 deletions(-)
create mode 100644 _tutorials-FR/102_incipit/step-06/102_incipit_step-06-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-06/102_incipit_step-06-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-06/102_incipit_step-06.xml
create mode 100644 _tutorials-FR/102_incipit/step-07/102_incipit_step-07-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-07/102_incipit_step-07-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-07/102_incipit_step-07.xml
create mode 100644 _tutorials-FR/102_incipit/step-08/102_incipit_step-08-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-08/102_incipit_step-08-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-08/102_incipit_step-08.xml
create mode 100644 _tutorials-FR/102_incipit/step-09/102_incipit_step-09-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-09/102_incipit_step-09-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-09/102_incipit_step-09.xml
create mode 100644 _tutorials-FR/102_incipit/step-10/102_incipit_step-10-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-10/102_incipit_step-10-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-10/102_incipit_step-10.xml
create mode 100644 _tutorials-FR/102_incipit/step-11/102_incipit_step-11-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-11/102_incipit_step-11-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-11/102_incipit_step-11.xml
create mode 100644 _tutorials-FR/102_incipit/step-12/102_incipit_step-12-desc.html
create mode 100644 _tutorials-FR/102_incipit/step-12/102_incipit_step-12-prefill.xml
create mode 100644 _tutorials-FR/102_incipit/step-12/102_incipit_step-12.xml
diff --git a/_tutorials-FR/100_structure/step-03/100_structure_step-03-prefill.xml b/_tutorials-FR/100_structure/step-03/100_structure_step-03-prefill.xml
index f908e5ba1..95e810a93 100644
--- a/_tutorials-FR/100_structure/step-03/100_structure_step-03-prefill.xml
+++ b/_tutorials-FR/100_structure/step-03/100_structure_step-03-prefill.xml
@@ -1,3 +1,3 @@
-
+
diff --git a/_tutorials-FR/100_structure/step-04/100_structure_step-04-prefill.xml b/_tutorials-FR/100_structure/step-04/100_structure_step-04-prefill.xml
index fe8543ac2..9f580e689 100644
--- a/_tutorials-FR/100_structure/step-04/100_structure_step-04-prefill.xml
+++ b/_tutorials-FR/100_structure/step-04/100_structure_step-04-prefill.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/_tutorials-FR/102_incipit/102_incipit_end.html b/_tutorials-FR/102_incipit/102_incipit_end.html
index c7541679d..143638d33 100644
--- a/_tutorials-FR/102_incipit/102_incipit_end.html
+++ b/_tutorials-FR/102_incipit/102_incipit_end.html
@@ -1,5 +1,5 @@
-
Félicitation !
+
Félicitations !
Vous avez maintenant terminé avec succès ce tutoriel avancé, et vous devriez être en mesure d'encoder une mélodie à une voix
avec plusieurs mesures, différentes valeurs de notes et de silences, des croches, des liaisons et des indications de dynamique.
diff --git a/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml
index 44fbfea59..bc15bf350 100644
--- a/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml
+++ b/_tutorials-FR/102_incipit/step-01/102_incipit_step-01-prefill.xml
@@ -1 +1 @@
-
+
diff --git a/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
index 4d45ca5c6..999893ac6 100644
--- a/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
+++ b/_tutorials-FR/102_incipit/step-03/102_incipit_step-03-prefill.xml
@@ -3,4 +3,4 @@
-
+
diff --git a/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
index 1da358e9d..c9541ea76 100644
--- a/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
+++ b/_tutorials-FR/102_incipit/step-04/102_incipit_step-04-prefill.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
index d09d62360..2b24ce372 100644
--- a/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
+++ b/_tutorials-FR/102_incipit/step-05/102_incipit_step-05-prefill.xml
@@ -6,5 +6,5 @@
-
+
diff --git a/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-desc.html b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-desc.html
new file mode 100644
index 000000000..4289b1b3b
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-desc.html
@@ -0,0 +1,19 @@
+
+
+ Sixième étape: encodez un groupe de notes liées par des croches.
+
+
+
+ Bien ! Pour exprimer, en MEI, un groupe de note liées par des croches, il faut uttiliser l'élément <beam>
.
+ <beam>
est un conteneur pour une série d'événements explicitement liés (comme des notes, des silences ou
+ des accords) qui commencent et se terminent dans la même mesure.
+
+
+
In the editor below, please add a <beam>
element at the specified position before adding the two child <note>
s separately (e flat and g). Do remember to include the corresponding attribute values on the <note>
elements.
+
+
+
+ Dans l'éditeur ci-dessous, ajoutez un élément <beam>
à l'emplacement spécifié avant d'ajouter les deux éléments enfants
+ <note>
séparément (mi bémol et sol). N'oubliez pas d'inclure les valeurs d'attributs correspondantes sur les éléments <note>
.
+
+
diff --git a/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-prefill.xml b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-prefill.xml
new file mode 100644
index 000000000..c5650759f
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06-prefill.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-06/102_incipit_step-06.xml b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06.xml
new file mode 100644
index 000000000..99f4ad15b
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-06/102_incipit_step-06.xml
@@ -0,0 +1,45 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-desc.html b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-desc.html
new file mode 100644
index 000000000..cc1d9d84a
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-desc.html
@@ -0,0 +1,16 @@
+
+
+ Septième étape : encodez les durées pointées.
+
+
+ Les deux notes suivantes dans notre exemple introduisent une nouvelle figure rythmique, une noire pointée et une croche. Pour encoder
+ un rythme pointé, vous avez besoin de l'attribut @dots
de l'élément <note>
. Le nombre de points et
+ défini par la valeur de cet attribut, par exemple “1”
pour un point ou “2”
pour deux points.
+
+
+
+ Encodez le reste de la mesure (@n=1
) dans l'éditeur ci-dessous en jaoutant deux éléments <note>
+ avec différentes valeur rythmique (noire pointée, croche) près de l'élément <beam>
que vous aviez ajouté à
+ l'étape précédante.
+
+
diff --git a/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-prefill.xml b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-prefill.xml
new file mode 100644
index 000000000..05a84346a
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07-prefill.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-07/102_incipit_step-07.xml b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07.xml
new file mode 100644
index 000000000..af6e20595
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-07/102_incipit_step-07.xml
@@ -0,0 +1,47 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-desc.html b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-desc.html
new file mode 100644
index 000000000..ed274ced5
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-desc.html
@@ -0,0 +1,17 @@
+
+
+ Huituème étape : encodez la mesure suivante en répétant tout ce que nous avons appris dans les étapes précédantes.
+
+
+
+ Encodez la prochaine mesure (@n=2
) dans l'éditeur ci-dessous. Ajoutez un élément <measure>
et
+ un <staff>
ainsi qu'un <layer>
pour contenir quatre éléments enfants :
+ une noire <note>
(mi bémol 4), un élément <beam>
avec deux croches <note>
s
+ (mi bémol 4, sol 4) et une noire pointée <note>
(si bémol 4) avec une croche <note>
(sol 4).
+
+
+ Pour apporter un peu de challenge, l'éditeur ne vous proposera pas de contenu prérempli cette fois-ci. Vous n'avez donc pas d'orientation à partir
+ de l'encodage des mesures précédentes. En cas d'oubli, vous pouvez consulter les indices sous la zone de l'éditeur pour vous guider.
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-prefill.xml b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-prefill.xml
new file mode 100644
index 000000000..bc15bf350
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08-prefill.xml
@@ -0,0 +1 @@
+
diff --git a/_tutorials-FR/102_incipit/step-08/102_incipit_step-08.xml b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08.xml
new file mode 100644
index 000000000..a8c8ae337
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-08/102_incipit_step-08.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-desc.html b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-desc.html
new file mode 100644
index 000000000..b6dad969a
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-desc.html
@@ -0,0 +1,20 @@
+
+
Neuvième étape : Encodez les valeurs des notes des deux dernières mesures de l'exemple.
+
+
Merveilleux, vous avez encodé la deuxième mesure ! Maintenant, nous allons augmenter un peu le niveau de difficulté : les deux
+ dernières mesures vous attendent. Mais ne vous inquiétez pas : c'est l'étape la plus ambitieuse de ce tutoriel. Promis !
+
+
Pour encoder les deux dernières mesures, vous devrez connaître un autre élément : une pause est encodée avec un élément
+ <rest>
ayant un attribut @dur
similaire à l'élément <note>
. Mais, bien sûr,
+ un <rest>
n'a ni les attributs @pname
ni @oct
. Vous pouvez ignorer les éléments
+ supplémentaires, tels que les dynamiques, les liaisons ou les accents à ce stade, car ils seront traités séparément dans les
+ prochaines étapes finales.
+
+
Encodez les deux dernières mesures (@n=3
et @n=4
) de l'exemple dans l'éditeur ci-dessous.
+ Ajoutez les éléments <measure>
, <staff>
et <layer>
ainsi que les éléments
+ correspondants <note>
, <beam>
ou <rest>
. Gardez à l'esprit comment
+ l'élément <beam>
est utilisé pour regrouper les éléments <note>
correspondants.
+
+
Encore une fois, il n'y a pas de contenu prérempli dans la zone de l'éditeur pour cette étape. Si vous vous sentez perdu ou
+ incertain à un moment donné, suivez les indices qui s'affichent sous la zone de l'éditeur. Cela devrait vous aider.
+
diff --git a/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-prefill.xml b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-prefill.xml
new file mode 100644
index 000000000..bc15bf350
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09-prefill.xml
@@ -0,0 +1 @@
+
diff --git a/_tutorials-FR/102_incipit/step-09/102_incipit_step-09.xml b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09.xml
new file mode 100644
index 000000000..bc8a5e4e7
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-09/102_incipit_step-09.xml
@@ -0,0 +1,86 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-desc.html b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-desc.html
new file mode 100644
index 000000000..6198ba3ea
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-desc.html
@@ -0,0 +1,21 @@
+
+
Dixième étape : ajoutez les signes d'articulation à votre encodage de l'exemple.
+
+
Formidable ! Vous avez encodé l'intégralité de la ligne mélodique de notre exemple. Maintenant, occupons nous
+ des éléments additionnel manquants, comme les dynamiques, les liaisons et les accents.
+
+
Les articulations, par exemple les indications sur la manière de jouer une note ou un accord, peuvent être encodé
+ avec l'élement <artic>
qui s'applique comme élément enfant de l'élement <note>
.
+ Les attributs suivant de <artic>
seront utilisé dans cette étape :
+
+ @artic
(type d'articulation) – Le type d'articulation, par exemple l'accent “acc”
,
+ le staccato “stacc”
, le tenuto “ten”
. Ici, utilisez “acc”
+ @place
– La position du signe d'articulation“above”
(au-dessus) ou “below”
(dessous) la portée.
+ Ici, utilisez “above”
+
+
+
Trouvez les éléments <note>
dans l'exemple auxquels des articulations sont attribuées (il y a des accents musicaux
+ sur les noires pointées dans les mesures 1 et 2 ainsi que sur la noire dans la mesure 3). Ajoutez un élément enfant
+ <artic>
à ces éléments <note>
et appliquez les attributs (@artic
,
+ @place
) correspondants.
+
diff --git a/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-prefill.xml b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-prefill.xml
new file mode 100644
index 000000000..500d88a93
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10-prefill.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-10/102_incipit_step-10.xml b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10.xml
new file mode 100644
index 000000000..6046bdb68
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-10/102_incipit_step-10.xml
@@ -0,0 +1,92 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-desc.html b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-desc.html
new file mode 100644
index 000000000..377377a24
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-desc.html
@@ -0,0 +1,40 @@
+
+
Onzième étape : ajoutez les indications de nuances dans l'encodage de l'exemple.
+
+
Les nuances sont définis avec l'élement <dynam>
. L'élément <dynam>
peut être utilisé
+ pour les différentes indications de nuances comme “p”
,
+ “mf”
, ou “cresc. poco a poco”
.
+ Ils sont placés en texte brut entre les balises ouvrante et fermante de l'élément <dynam>
, exemple :
+ <dynam>pp</dynam>
.
+
+
Au contraire des signes d'articulation, l'élément <dynam>
est un évènement de contrôle
qui
+ regroupes différents éléments (commes les nuances, les liaisons, les phrasés, les indications de pédales, etc.), qui dépendent
+ d'autres événements, tels que les notes ou les silences, pour être valide.
+ En général, les évènements de contrôle
ne sont pas encodés commes des éléments enfants des évènements qu'ils ont sous
+ leur contrôle.
+ En practique, ils sont, dans la plupart des cas, placés à l'extérieur de l'élément staff
.
+
+
Il y a différentes options pour indiquer qu'un évènements de contrôle
comme <dynam>
se réfère à un
+ élément <note>
ou <rest>
:
+
+
+ - En premier lieu,
<staff>
auquel l'événement de contrôle
doit être appliqué peut être référencé par
+ un attribut @staff
.
+ - De plus, le point de départ d'une indication de nuance doit être indiqué soit par un attribut
startid
, soit par un
+ tstamp
, un tstamp.ges
, ou encore un tstamp.real
. Parrallèlement, le point final peut être
+ indiqué soit par un attribut dur
, par dur.ges
, un endid
, ou un tstamp2
.
+ Ne pas spécifier d'attribut pour le point de départ est une erreur sémantique.
+
+
+
Dans cet exemple, l'attribut @tstamp
sert à indiquer la position de départ de l'indication de nuance.
+ @tstamp
peut servir à encoder le début du temps, par exemple d'un battement, tels qu'exprimés dans la signature rythmique.
+
+
Les attributs suivants font parti de ceux qui peuvent être utilisé avec <dynam>
:
+
+ @staff
– L'identification du numéro de portée à laquelle un élément est appliqué, dans notre cas, par exemple, il s'agit de “1”
+ @tstamp
("time stamp") – Le début d'un évènement sous des termes musicaux, par exemple c'est à dire les temps, par exemple “1”
, “2.5”
+ @place
– la position de l'indication de nuance, “above”
(au-dessus) ou “below”
(en-dessous) la portée.
+
+
+
Trouvez les éléments <note>
dans l'exemple auxquels des indications de nuances sont attribuées. Ajoutez un élément "frère" (c'est à dire qui partage le même élément parent) <dynam>
à l'élément <staff>
correspondant et appliquez les attributs en question (@staff
, @tstamp
, @place
). N'oubliez pas d'inclure le signe ff
entre la balise d'ouverture et de fermeture de <dynam>
.
+
diff --git a/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-prefill.xml b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-prefill.xml
new file mode 100644
index 000000000..22aed8cb4
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11-prefill.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-11/102_incipit_step-11.xml b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11.xml
new file mode 100644
index 000000000..68b79953d
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-11/102_incipit_step-11.xml
@@ -0,0 +1,93 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-desc.html b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-desc.html
new file mode 100644
index 000000000..7d618ec98
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-desc.html
@@ -0,0 +1,56 @@
+
+
Step twelve: adding the last missing detail of the example, the slur in the third measure.
+
+
There are two different ways to encode a slur in MEI:
+
+ @slur
attribute on <note>
or <chord>
with a value of i=initial
, m=medial
or
+ t=terminal
.
+ - A separate
<slur>
element.
+
+
+
In this last step, you will use the second approach: Like dynamics, <slur>
elements are control events. They are not encoded as child elements of the corresponding events that they are meant to control but are placed in most cases outside the staff
elements.
+
+
To indicate the starting point and end point of the slur, it is possible to apply a reference to the corresponding @xml:id
of a <note>
or
+ <chord>
element. @xml:id
s are identifiers with an arbitrary but unique character sequence that regularize the naming of an element throughout a document
+ and thus facilitate building links between elements and other resources. For <slur>
s, a reference to the @xml:id
of an element can be given via the
+ attributes @startid
and @endid
.
+
+
Along with @startid
and @endid
, the following attributes should be used in this step:
+
+ @staff
– the identification number of the staff to which an element is applied, e.g. “1”
in this case,
+ @curvedir
(curve direction) – describes a curve with a generic term indicating the direction of curvature: “above”
, “below”
or “mixed”
,
+ @startid
– reference to the xml:id
of the start note of the slur, in the form: #xml:id
(note the hash #
),
+ @endid
– reference to the xml:id
of the ending note of the slur, in the form: #xml:id
(note the hash #
).
+
+
+
Please identify the first and the last note to which the slur is attached (inside the first <beam>
element of measure 3) and add @xml:id
s to both <note>
elements. Set a unique value for each @xml:id
, for this example you can use the values: “d1e4614”
, “d1e4615”
. Add a <slur>
control element after the closing tag of <staff>
element and apply the corresponding attributes.
+
+
+ Douzième étape : ajouttez le dernier détail manquant de l'exemple, la liaison dans la troisième mesure.
+
+
Il existe deux façons différentes d'encoder une liaison en MEI :
+
+ - L'attribut
@slur
sur <note>
ou sur <chord>
avec une valeur de i=initial
, m=medial
ou
+ t=terminal
.
+ - Un élément séparé
<slur>
.
+
+
+
Dans cette dernière étape, vous utiliserez la deuxième approche : comme les nuances, les éléments <slur>
sont des événements de contrôle. Ils ne sont pas
+ encodés en tant qu'éléments enfants des événements correspondants qu'ils sont censés contrôler, mais sont placés dans la plupart des cas à l'extérieur des éléments staff
.
+
+
Pour indiquer le point de départ et le point d'arrivée de la liaison, il est possible d'appliquer une référence au @xml:id
correspondant d'un élément <note>
ou
+ <chord>
. Les @xml:id
sont des identifiants avec une séquence de caractères arbitraire mais unique qui normalisent la dénomination d'un élément tout au long d'un document
+ et facilitent ainsi la création de liens entre les éléments et d'autres ressources. Pour les <slur>
, une référence au @xml:id
d'un élément peut être donnée via les
+ attributs @startid
et @endid
.
+
+
En plus de @startid
et @endid
, les attributs suivants devraient être utilisés dans cette étape :
+
+ @staff
– le numéro d'identification de la portée à laquelle un élément est appliqué, par exemple “1”
dans ce cas,
+ @curvedir
(direction de la courbe) – décrit une courbe avec un terme générique indiquant la direction de la courbure : “above”
, “below”
ou “mixed”
,
+ @startid
– référence au xml:id
de la note de départ de la liaison, sous la forme : #xml:id
(notez bien le dièse #
dans le code),
+ @endid
– référence au xml:id
de la note de fin de la liaison, sous la forme : #xml:id
(notez bien le dièse #
dans le code).
+
+
+
Identifiez la première et la dernière note à laquelle la liaison est attachée (à l'intérieur du premier élément <beam>
de la mesure 3) et ajoutez des @xml:id
aux deux éléments <note>
. Définissez une valeur unique pour chaque @xml:id
, pour cet exemple, vous pouvez utiliser les valeurs : “d1e4614”
, “d1e4615”
. Ajoutez un élément de contrôle <slur>
après la balise de fermeture de l'élément <staff>
et appliquez les attributs correspondants.
+
+
diff --git a/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-prefill.xml b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-prefill.xml
new file mode 100644
index 000000000..881bb896b
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12-prefill.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/102_incipit/step-12/102_incipit_step-12.xml b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12.xml
new file mode 100644
index 000000000..2f379bfbf
--- /dev/null
+++ b/_tutorials-FR/102_incipit/step-12/102_incipit_step-12.xml
@@ -0,0 +1,94 @@
+
+
+
+
+ March
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 5125a2553b8f63159ab1191f738c01bf3b77b0cd Mon Sep 17 00:00:00 2001
From: daftcloud <50362363+daftcloud@users.noreply.github.com>
Date: Fri, 10 Nov 2023 11:42:35 +0100
Subject: [PATCH 19/41] ajout tutoriel 103
---
_tutorials-FR/102_incipit/102_incipit.md | 9 +-
_tutorials-FR/103_chords/103_Chords.md | 7 +
.../103_chords/103_chord-little-lamb.png | Bin 0 -> 7949 bytes
.../103_chords/103_chord-sequence.png | Bin 0 -> 11287 bytes
_tutorials-FR/103_chords/103_chords.json | 203 ++++++++++++++++++
_tutorials-FR/103_chords/103_chords_end.html | 26 +++
.../step-00/103_chords_step-00-desc.html | 21 ++
.../step-01/103_chords_step-01-desc.html | 76 +++++++
.../step-01/103_chords_step-01-prefill.xml | 1 +
.../103_chords/step-01/103_chords_step-01.xml | 36 ++++
.../step-02/103_chords_step-02-desc.html | 22 ++
.../step-02/103_chords_step-02-prefill.xml | 5 +
.../103_chords/step-02/103_chords_step-02.xml | 38 ++++
.../step-03/103_chords_step-03-desc.html | 15 ++
.../step-03/103_chords_step-03-prefill.xml | 5 +
.../103_chords/step-03/103_chords_step-03.xml | 53 +++++
.../step-04/103_chords_step-04-desc.html | 24 +++
.../step-04/103_chords_step-04-prefill.xml | 5 +
.../103_chords/step-04/103_chords_step-04.xml | 68 ++++++
19 files changed, 610 insertions(+), 4 deletions(-)
create mode 100644 _tutorials-FR/103_chords/103_Chords.md
create mode 100644 _tutorials-FR/103_chords/103_chord-little-lamb.png
create mode 100644 _tutorials-FR/103_chords/103_chord-sequence.png
create mode 100644 _tutorials-FR/103_chords/103_chords.json
create mode 100644 _tutorials-FR/103_chords/103_chords_end.html
create mode 100644 _tutorials-FR/103_chords/step-00/103_chords_step-00-desc.html
create mode 100644 _tutorials-FR/103_chords/step-01/103_chords_step-01-desc.html
create mode 100644 _tutorials-FR/103_chords/step-01/103_chords_step-01-prefill.xml
create mode 100644 _tutorials-FR/103_chords/step-01/103_chords_step-01.xml
create mode 100644 _tutorials-FR/103_chords/step-02/103_chords_step-02-desc.html
create mode 100644 _tutorials-FR/103_chords/step-02/103_chords_step-02-prefill.xml
create mode 100644 _tutorials-FR/103_chords/step-02/103_chords_step-02.xml
create mode 100644 _tutorials-FR/103_chords/step-03/103_chords_step-03-desc.html
create mode 100644 _tutorials-FR/103_chords/step-03/103_chords_step-03-prefill.xml
create mode 100644 _tutorials-FR/103_chords/step-03/103_chords_step-03.xml
create mode 100644 _tutorials-FR/103_chords/step-04/103_chords_step-04-desc.html
create mode 100644 _tutorials-FR/103_chords/step-04/103_chords_step-04-prefill.xml
create mode 100644 _tutorials-FR/103_chords/step-04/103_chords_step-04.xml
diff --git a/_tutorials-FR/102_incipit/102_incipit.md b/_tutorials-FR/102_incipit/102_incipit.md
index 638b91b76..9bce54b48 100644
--- a/_tutorials-FR/102_incipit/102_incipit.md
+++ b/_tutorials-FR/102_incipit/102_incipit.md
@@ -1,12 +1,13 @@
---
layout: tutorials
type: tutorial
-name: "ADVANCED: Incipit encoding"
-fullname: "An advanced tutorial on how to encode incipits in MEI"
+name: "AVANCÉ: Encodez les incipits"
+fullname: "Un tutoriel avancé sur l'encodage des incipits en MEI"
data: "102_incipit.json"
---
-Welcome! In this tutorial you will learn how to encode an incipit (initial sequence of notes of a musical piece) in MEI, using the following example:
+Bienvenue! Dans ce tutoriel vous apprendez à encoder un incipit (La séquence de notes initial d'une œuvre musicales) en MEI, en partant de l'exemple suivant :

-By the way: this is the beginning of _Hallingdal Bataljons Marsch_, the Opus 1 of the Norwegian composer [Johan Halvorsen](https://en.wikipedia.org/wiki/Johan_Halvorsen) (1864–1935).
+Au fait : il s'agit du début de _Hallingdal Bataljons Marsch_, l'Opus 1 du compositeur norvégien [Johan Halvorsen](https://fr.wikipedia.org/wiki/Johan_Halvorsen) (1864–1935).
+
diff --git a/_tutorials-FR/103_chords/103_Chords.md b/_tutorials-FR/103_chords/103_Chords.md
new file mode 100644
index 000000000..1b43a9d95
--- /dev/null
+++ b/_tutorials-FR/103_chords/103_Chords.md
@@ -0,0 +1,7 @@
+---
+layout: tutorials
+type: tutorial
+name: "DÉBUTANT: Accords"
+fullname: "Un rapide tutoriel sur les accords en MEI"
+data: "103_chords.json"
+---
diff --git a/_tutorials-FR/103_chords/103_chord-little-lamb.png b/_tutorials-FR/103_chords/103_chord-little-lamb.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ed53a352520dfc728ae346d433ea7497b5e9e52
GIT binary patch
literal 7949
zcmd6M_g_=Z6D}wUNC&Br5|ARjBPM{-6)7*$Aynxd66v7yA|M?^ItWVd5PFvy0#c>-
zCJ70>-uS)ukGMaao!#>}yE{8)cK4ZiqO>$r$R060!o$NOd#$RdjfaQ7h^uE4J;aq>
z;o}TAf$yoUB9B)w_GA~=Ah3O<{t6GTI-ca(;sLHr?51kyiHAoG{rBK6*|2)!;j!eu
zR(z%7ZTdG0QpTdhIB
7Ds~dp
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
literal 0
HcmV?d00001
diff --git a/_tutorials-FR/103_chords/103_chords.json b/_tutorials-FR/103_chords/103_chords.json
new file mode 100644
index 000000000..f29d46ff5
--- /dev/null
+++ b/_tutorials-FR/103_chords/103_chords.json
@@ -0,0 +1,203 @@
+{
+ "steps": [
+ {
+ "label":"Welcome to MEI",
+ "descFile": "103_chords_step-00-desc.html"
+ },
+ {
+ "label":"Preparation",
+ "editorLines":3,
+ "descFile": "103_chords_step-01-desc.html",
+ "prefillFile": "103_chords_step-01-prefill.xml",
+ "xmlFile": "103_chords_step-01.xml",
+ "xpaths": [
+ {"rule":"count(//mei:note) = 3", "renderanyway": false, "hint": "You need three note elements."},
+ {"rule":"count(//mei:note[1]/@*) = 3 and //mei:note[1]/@pname and //mei:note[1]/@oct and //mei:note[1]/@dur", "renderanyway": false, "hint": "You need three attributes on the first note (@pname, @oct, and @dur)."},
+ {"rule":"count(//mei:note[2]/@*) = 3 and //mei:note[2]/@pname and //mei:note[2]/@oct and //mei:note[2]/@dur", "renderanyway": false, "hint": "You need three attributes on the second note (@pname, @oct, and @dur)."},
+ {"rule":"count(//mei:note[3]/@*) = 3 and //mei:note[3]/@pname and //mei:note[3]/@oct and //mei:note[3]/@dur", "renderanyway": false, "hint": "You need three attributes on the third note (@pname, @oct, and @dur)."},
+ {"rule":"//mei:note/@pname", "renderanyway": false, "hint": "The @pname attribute allows values from 'a' to 'g'."},
+ {"rule":"//mei:note/@oct", "renderanyway": false, "hint": "The @oct attribute requires integers."},
+ {"rule":"//mei:note/@dur", "renderanyway": false, "hint": "The @dur attribute allows values such as '1', '2', '4', '8'…"},
+ {"rule":"//mei:note[1]/@pname = 'e'", "renderanyway": true, "hint": "You need a @pname attribute with a value of e on the first note element."},
+ {"rule":"//mei:note[1]/@oct = '4'", "renderanyway": true, "hint": "You need an @oct attribute with a value of 4 on the first note element."},
+ {"rule":"//mei:note[1]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the first note element."},
+ {"rule":"//mei:note[2]/@pname = 'g'", "renderanyway": true, "hint": "You need a @pname attribute with a value of g on the second note element."},
+ {"rule":"//mei:note[2]/@oct = '4'", "renderanyway": true, "hint": "You need an @oct attribute with a value of 4 on the second note element."},
+ {"rule":"//mei:note[2]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the second note element."},
+ {"rule":"//mei:note[3]/@pname = 'c'", "renderanyway": true, "hint": "You need a @pname attribute with a value of c on the third note element."},
+ {"rule":"//mei:note[3]/@oct = '5'", "renderanyway": true, "hint": "You need an @oct attribute with a value of 5 on the third note element."},
+ {"rule":"//mei:note[3]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the third note element."}
+ ]
+ },
+ {
+ "label":"First Chord",
+ "editorLines":5,
+ "descFile": "103_chords_step-02-desc.html",
+ "prefillFile": "103_chords_step-02-prefill.xml",
+ "xmlFile": "103_chords_step-02.xml",
+ "xpaths": [
+ {"rule":"count(//mei:note) = 3", "renderanyway": false, "hint": "You need three note elements."},
+ {"rule":"//mei:note[1]/@pname and //mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct)."},
+ {"rule":"//mei:note[2]/@pname and //mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct)."},
+ {"rule":"//mei:note[3]/@pname and //mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct)."},
+ {"rule":"//mei:note/@pname", "renderanyway": false, "hint": "The @pname attribute allows values from 'a' to 'g'."},
+ {"rule":"//mei:note/@oct", "renderanyway": false, "hint": "The @oct attribute requires integers."},
+ {"rule":"//mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "You need a note with a @pname attribute with a value of e and an @oct attribute with a value of 4."},
+ {"rule":"//mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "You need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"//mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "You need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+ {"rule":"count(//mei:chord) = 1", "renderanyway": false, "hint": "You need one chord element."},
+ {"rule":"//mei:chord/mei:note", "renderanyway": false, "hint": "chord element has to enclose all the note elements."},
+ {"rule":"count(//mei:note[1]/@*) = 2", "renderanyway": true, "hint": "You need only two attributes on the first note (@pname, @oct)."},
+ {"rule":"count(//mei:note[2]/@*) = 2", "renderanyway": true, "hint": "You need only two attributes on the second note (@pname, @oct)."},
+ {"rule":"count(//mei:note[3]/@*) = 2", "renderanyway": true, "hint": "You need only two attributes on the third note (@pname, @oct)."},
+ {"rule":"count(//mei:chord/@*) = 1 and //mei:chord/@dur", "renderanyway": true, "hint": "You need one attribute on the chord (@dur)."},
+ {"rule":"//mei:chord/@dur", "renderanyway": true, "hint": "The @dur attribute allows values such as '1', '2', '4', '8'…"},
+ {"rule":"//mei:chord/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the chord element."}
+ ]
+ },
+ {
+ "label":"Simple Chord Progression",
+ "editorLines":20,
+ "descFile": "103_chords_step-03-desc.html",
+ "prefillFile": "103_chords_step-03-prefill.xml",
+ "xmlFile": "103_chords_step-03.xml",
+ "xpaths": [
+ {"rule":"count(//mei:chord) = 4", "renderanyway": true, "hint": "You need four chord elements."},
+ {"rule":"count(//mei:chord[1]/@*) = 1 and //mei:chord[1]/@dur", "renderanyway": true, "hint": "You need one attribute on the first chord (@dur)."},
+ {"rule":"//mei:chord[1]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the first chord element."},
+ {"rule":"count(//mei:chord[2]/@*) = 1 and //mei:chord[2]/@dur", "renderanyway": true, "hint": "You need one attribute on the second chord (@dur)."},
+ {"rule":"//mei:chord[2]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the second chord element."},
+ {"rule":"count(//mei:chord[3]/@*) = 1 and //mei:chord[3]/@dur", "renderanyway": true, "hint": "You need one attribute on the third chord (@dur)."},
+ {"rule":"//mei:chord[3]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the third chord element."},
+ {"rule":"count(//mei:chord[4]/@*) = 1 and //mei:chord[4]/@dur", "renderanyway": true, "hint": "You need one attribute on the last chord (@dur)."},
+ {"rule":"//mei:chord[4]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the last chord element."},
+
+ {"rule":"count(//mei:chord[1]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the first chord."},
+ {"rule":"count(//mei:chord[1]/mei:note[1]/@*) = 2 and //mei:chord[1]/mei:note[1]/@pname and //mei:chord[1]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of e and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[1]/mei:note[2]/@*) = 2 and //mei:chord[1]/mei:note[2]/@pname and //mei:chord[1]/mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[1]/mei:note[3]/@*) = 2 and //mei:chord[1]/mei:note[3]/@pname and //mei:chord[1]/mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+
+
+ {"rule":"count(//mei:chord[2]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the second chord."},
+ {"rule":"count(//mei:chord[2]/mei:note[1]/@*) = 2 and //mei:chord[2]/mei:note[1]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'f' and @oct = '4']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of f and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[2]/mei:note[2]/@*) = 2 and //mei:chord[2]/mei:note[2]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'a' and @oct = '4']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of a and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[2]/mei:note[3]/@*) = 2 and //mei:chord[2]/mei:note[3]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+
+
+ {"rule":"count(//mei:chord[3]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the third chord."},
+ {"rule":"count(//mei:chord[3]/mei:note[1]/@*) = 2 and //mei:chord[3]/mei:note[1]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'd' and @oct = '4']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of d and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[3]/mei:note[2]/@*) = 2 and //mei:chord[3]/mei:note[2]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[3]/mei:note[3]/@*) = 2 and //mei:chord[3]/mei:note[3]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'b' and @oct = '4']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of b and an @oct attribute with a value of 4."},
+
+ {"rule":"count(//mei:chord[4]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the fourth chord."},
+ {"rule":"count(//mei:chord[4]/mei:note[1]/@*) = 2 and //mei:chord[4]/mei:note[1]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of e and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[4]/mei:note[2]/@*) = 2 and //mei:chord[4]/mei:note[2]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[4]/mei:note[3]/@*) = 2 and //mei:chord[4]/mei:note[3]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of c and an @oct attribute with a value of 5."}
+ ]
+ },
+ {
+ "label":"Extended Chord Progression",
+ "editorLines":35,
+ "descFile": "103_chords_step-04-desc.html",
+ "prefillFile": "103_chords_step-04-prefill.xml",
+ "xmlFile": "103_chords_step-04.xml",
+ "xpaths": [
+ {"rule":"count(//mei:chord) = 7", "renderanyway": true, "hint": "You need seven chord elements."},
+ {"rule":"count(//mei:chord[1]/@*) = 2 and //mei:chord[1]/@dur and //mei:chord[1]/@dots", "renderanyway": true, "hint": "You need two attributes on the first chord (@dur, @dots)."},
+ {"rule":"//mei:chord[1]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the first chord element."},
+ {"rule":"//mei:chord[1]/@dots = '1'", "renderanyway": true, "hint": "You need a @dots attribute with a value of 1 on the first chord element."},
+ {"rule":"count(//mei:chord[2]/@*) = 1 and //mei:chord[2]/@dur", "renderanyway": true, "hint": "You need one attribute on the second chord (@dur)."},
+ {"rule":"//mei:chord[2]/@dur = '8'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 8 on the second chord element."},
+ {"rule":"count(//mei:chord[3]/@*) = 1 and //mei:chord[3]/@dur", "renderanyway": true, "hint": "You need one attribute on the third chord (@dur)."},
+ {"rule":"//mei:chord[3]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the third chord element."},
+ {"rule":"count(//mei:chord[4]/@*) = 1 and //mei:chord[4]/@dur", "renderanyway": true, "hint": "You need one attribute on the fourth chord (@dur)."},
+ {"rule":"//mei:chord[4]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the fourth chord element."},
+ {"rule":"count(//mei:chord[5]/@*) = 1 and //mei:chord[5]/@dur", "renderanyway": true, "hint": "You need one attribute on the fifth chord (@dur)."},
+ {"rule":"//mei:chord[5]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the fifth chord element."},
+ {"rule":"count(//mei:chord[6]/@*) = 1 and //mei:chord[6]/@dur", "renderanyway": true, "hint": "You need one attribute on the sixth chord (@dur)."},
+ {"rule":"//mei:chord[6]/@dur = '4'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 4 on the sixth chord element."},
+ {"rule":"count(//mei:chord[7]/@*) = 1 and //mei:chord[7]/@dur", "renderanyway": true, "hint": "You need one attribute on the last chord (@dur)."},
+ {"rule":"//mei:chord[7]/@dur = '2'", "renderanyway": true, "hint": "You need a @dur attribute with a value of 2 on the last chord element."},
+
+ {"rule":"count(//mei:chord[1]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the first chord."},
+ {"rule":"count(//mei:chord[1]/mei:note[1]/@*) = 2 and //mei:chord[1]/mei:note[1]/@pname and //mei:chord[1]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[1]/mei:note[2]/@*) = 2 and //mei:chord[1]/mei:note[2]/@pname and //mei:chord[1]/mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+ {"rule":"count(//mei:chord[1]/mei:note[3]/@*) = 2 and //mei:chord[1]/mei:note[3]/@pname and //mei:chord[1]/mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the first chord."},
+ {"rule":"//mei:chord[1]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "In the first chord, you need a note with a @pname attribute with a value of e and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[2]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the second chord."},
+ {"rule":"count(//mei:chord[2]/mei:note[1]/@*) = 2 and //mei:chord[2]/mei:note[1]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'f' and @oct = '4']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of f and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[2]/mei:note[2]/@*) = 2 and //mei:chord[2]/mei:note[2]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'b' and @oct = '4']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of b and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[2]/mei:note[3]/@*) = 2 and //mei:chord[2]/mei:note[3]/@pname and //mei:chord[2]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the second chord."},
+ {"rule":"//mei:chord[2]/mei:note[@pname = 'd' and @oct = '5']", "renderanyway": true, "hint": "In the second chord, you need a @pname attribute with a value of d and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[3]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the third chord."},
+ {"rule":"count(//mei:chord[3]/mei:note[1]/@*) = 2 and //mei:chord[3]/mei:note[1]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of e and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[3]/mei:note[2]/@*) = 2 and //mei:chord[3]/mei:note[2]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[3]/mei:note[3]/@*) = 2 and //mei:chord[3]/mei:note[3]/@pname and //mei:chord[3]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the third chord."},
+ {"rule":"//mei:chord[3]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the third chord, you need a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[4]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the fourth chord."},
+ {"rule":"count(//mei:chord[4]/mei:note[1]/@*) = 2 and //mei:chord[4]/mei:note[1]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'f' and @oct = '4']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of f and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[4]/mei:note[2]/@*) = 2 and //mei:chord[4]/mei:note[2]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'b' and @oct = '4']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of b and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[4]/mei:note[3]/@*) = 2 and //mei:chord[4]/mei:note[3]/@pname and //mei:chord[4]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the fourth chord."},
+ {"rule":"//mei:chord[4]/mei:note[@pname = 'd' and @oct = '5']", "renderanyway": true, "hint": "In the fourth chord, you need a @pname attribute with a value of d and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[5]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the fifth chord."},
+ {"rule":"count(//mei:chord[5]/mei:note[1]/@*) = 2 and //mei:chord[5]/mei:note[1]/@pname and //mei:chord[5]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the fifth chord."},
+ {"rule":"//mei:chord[5]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the fifth chord, you need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[5]/mei:note[2]/@*) = 2 and //mei:chord[5]/mei:note[2]/@pname and //mei:chord[5]/mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the fifth chord."},
+ {"rule":"//mei:chord[5]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the fifth chord, you need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+ {"rule":"count(//mei:chord[5]/mei:note[3]/@*) = 2 and //mei:chord[5]/mei:note[3]/@pname and //mei:chord[5]/mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the fifth chord."},
+ {"rule":"//mei:chord[5]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "In the fifth chord, you need a note with a @pname attribute with a value of e and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[6]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the sixth chord."},
+ {"rule":"count(//mei:chord[6]/mei:note[1]/@*) = 2 and //mei:chord[6]/mei:note[1]/@pname and //mei:chord[6]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the sixth chord."},
+ {"rule":"//mei:chord[6]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the sixth chord, you need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[6]/mei:note[2]/@*) = 2 and //mei:chord[6]/mei:note[2]/@pname and //mei:chord[6]/mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the sixth chord."},
+ {"rule":"//mei:chord[6]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the sixth chord, you need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+ {"rule":"count(//mei:chord[6]/mei:note[3]/@*) = 2 and //mei:chord[6]/mei:note[3]/@pname and //mei:chord[6]/mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the sixth chord."},
+ {"rule":"//mei:chord[6]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "In the sixth chord, you need a note with a @pname attribute with a value of e and an @oct attribute with a value of 5."},
+
+ {"rule":"count(//mei:chord[7]/mei:note) = 3", "renderanyway": true, "hint": "You need three note elements for the last chord."},
+ {"rule":"count(//mei:chord[7]/mei:note[1]/@*) = 2 and //mei:chord[7]/mei:note[1]/@pname and //mei:chord[7]/mei:note[1]/@oct", "renderanyway": true, "hint": "You need two attributes on the first note (@pname, @oct) of the last chord."},
+ {"rule":"//mei:chord[7]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "In the last chord, you need a note with a @pname attribute with a value of g and an @oct attribute with a value of 4."},
+ {"rule":"count(//mei:chord[7]/mei:note[2]/@*) = 2 and //mei:chord[7]/mei:note[2]/@pname and //mei:chord[7]/mei:note[2]/@oct", "renderanyway": true, "hint": "You need two attributes on the second note (@pname, @oct) of the last chord."},
+ {"rule":"//mei:chord[7]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "In the last chord, you need a note with a @pname attribute with a value of c and an @oct attribute with a value of 5."},
+ {"rule":"count(//mei:chord[7]/mei:note[3]/@*) = 2 and //mei:chord[7]/mei:note[3]/@pname and //mei:chord[7]/mei:note[3]/@oct", "renderanyway": true, "hint": "You need two attributes on the third note (@pname, @oct) of the last chord."},
+ {"rule":"//mei:chord[7]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "In the last chord, you need a note with a @pname attribute with a value of e and an @oct attribute with a value of 5."}
+ ]
+ }
+ ],
+ "end":"103_chords_end.html",
+ "resp":[
+ {
+ "name":"Stefan Münnich",
+ "affiliation":"Anton Webern Gesamtausgabe | University of Basel"
+ },
+ {
+ "name":"Johannes Kepper",
+ "affiliation":"Beethovens Werkstatt | Universität Paderborn"
+ }
+ ]
+}
diff --git a/_tutorials-FR/103_chords/103_chords_end.html b/_tutorials-FR/103_chords/103_chords_end.html
new file mode 100644
index 000000000..27be03b6b
--- /dev/null
+++ b/_tutorials-FR/103_chords/103_chords_end.html
@@ -0,0 +1,26 @@
+
+
Félicitations!
+
Vous venez de complétez ce tutoriel sur les accords en MEI et vous devriez être maintenant capable d'encoder des
+ progressions d'accord avec MEI.
+
+
+ Bien sûr, beaucoup plus d'informations sont nécessaire pour un fichier MEI complet - nous avons omis toutes les informations structurelles
+ sur les mesures et les portées, et vous devez également apprendre à configurer la mesure, la tonalité et les clefs. Comme prochaines
+ étapes dans votre apprentissage de MEI, nous aimerions vous recommander notre tutoriel sur les
+ silences.
+ Bien sûr, vous pouvez toujours revenir à
+ ceux-ci (ou même à celui-ci) lorsque vous souhaitez vous rappeler comment faire certaines choses en MEI.
+
+
+ Dès que vous vous serez bien familiarisé avec MEI, nous vous invitons à partager votre expérience avec la
+ Communauté MEI
+ et, pourquoi pas, à rédiger vous-même un tutoriel sur un aspect de MEI qui vous intéresse particulièrement.
+ Vous n'avez pas besoin d'être un expert pour cela - il est bon d'avoir des tutoriels à différents niveaux.
+ Très souvent un tutoriel rédigé par d'autres débutants qui viennent de maîtriser une tâche
+ est plus facile à suivre qu'un guide écrit par une personne plus expérimenté qui, ayant complètement assimilé
+ certains éléments, ne se souvient pas qu'ils aient pu être difficile à comprendre des éléments.
+ Nous avons un tutoriel sur la rédaction de tutoriels,
+ et nous proposons des modèles à suivre. C'est facile de devenir un membre actif de la Communauté MEI :-)
+
+
+
diff --git a/_tutorials-FR/103_chords/step-00/103_chords_step-00-desc.html b/_tutorials-FR/103_chords/step-00/103_chords_step-00-desc.html
new file mode 100644
index 000000000..55c1e0751
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-00/103_chords_step-00-desc.html
@@ -0,0 +1,21 @@
+
+
+ Dans ce tutoriel, vous apprendrez comment encoder des accords en MEI.
+
+
+ Étant donné que le concept d'accord repose fortement sur les notes, nous vous recommandons de vous familiariser
+ avec l'encodage des notes avant ce tutoriel, par exemple dans notre
+ tutoriel de démarrage rapide.
+
+
+ Le code que vous écrirez sera immédiatement rendu, et le rendu réagira à vos modifications. De cette façon, vous
+ aurez une idée de la manière dont les différents paramètres interagissent.
+
+
+ Une fois que vous aurez terminé ce tutoriel, vous pourrez effectuer d'autres tutoriels qui vous présenteront d'autres
+ aspects importants de MEI. Ces tutoriels servent également de référence simple pour MEI – vous pouvez toujours y revenir.
+
+
+ Pour commencer, appuyez sur le bouton "Continuer" en bas à droite de ce paragraphe.
+
+
diff --git a/_tutorials-FR/103_chords/step-01/103_chords_step-01-desc.html b/_tutorials-FR/103_chords/step-01/103_chords_step-01-desc.html
new file mode 100644
index 000000000..8add84c85
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-01/103_chords_step-01-desc.html
@@ -0,0 +1,76 @@
+
+
+ Step one: provide some notes for a chord.
+
+
+ In MEI, the notion of a chord means the "simultaneous sounding of two or more notes in the same layer with the
+ same duration" (see Element specification).
+ Thus, a chord is made up of two or more note elements that belong to the same voice (layer) and have an identical
+ rhythmical structure (duration). (There are cases where you don't want to have the same duration on every note
+ of a chord, but these are not part of this basic tutorial.)
+
+
+ To encode such a "simultaneous sounding", the <chord>
element is used in MEI. Its use is pretty
+ straightforward: Multiple <note>
elements within the same layer are enclosed by a <chord>
+ element and the duration attribute (@dur) is moved from the <note>
s to the <chord>
+ element (since the duration is the same for all notes). However, whether you write an outer <chord>
+ element first to add some inner <note>
elements, or whether you start with the <note>
s
+ and then enclose them in a <chord>
element, does not actually matter in practice.
+
+
+ For this tutorial, let's stick to the second approach: This means, we need some notes first.
+
+
+ In the editor below, please enter the following three <note>
elements:
+
+
+ <note pname="e" oct="4" dur="4"/>
+ <note pname="g" oct="4" dur="4"/>
+ <note pname="c" oct="5" dur="4"/>
+
+
+
+ You should then see the three notes rendered sequentially. Not much of a chord, actually. But don't worry: We will
+ care about that right away in the next step. Until then, you may play a little bit with the attribute values to
+ see how they influence the rendering. You will also see hints on how to write the correct code. Whenever you're
+ ready, make sure to have the correct code in the editor, and then hit the "continue" button on the lower right.
+
+
+
+ Première étape : fournir quelques notes pour un accord.
+
+
+ En MEI, la notion d'un accord signifie la "production simultanée de deux notes ou plus dans la même couche avec la
+ même durée" (voir la spécification de l'élément).
+ Ainsi, un accord est composé de deux notes ou plus appartenant à la même voix (couche) et ayant une structure rythmique
+ identique (durée). (Il existe des cas où vous ne souhaitez pas avoir la même durée pour chaque note d'un accord, mais
+ cela ne fait pas partie de ce tutoriel de base.)
+
+
+ Pour encoder une telle "production simultanée", l'élément <chord>
est utilisé en MEI. Son utilisation est assez
+ simple : plusieurs éléments <note>
dans la même couche sont inclus dans un élément <chord>
+ et l'attribut de durée (@dur) est déplacé des <note>
vers l'élément <chord>
(puisque la durée est
+ la même pour toutes les notes). Cependant, que vous écriviez d'abord un élément <chord>
externe pour ajouter des
+ éléments <note>
internes, ou que vous commenciez par les <note>
s et les enfermiez ensuite dans
+ un élément <chord>
, n'a, en pratique, aucune importance.
+
+
+ Pour ce tutoriel, restons à la deuxième approche : cela signifie que nous avons d'abord besoin de quelques notes.
+
+
+ Dans l'éditeur ci-dessous, entrez les trois éléments <note>
suivants :
+
+
+ <note pname="e" oct="4" dur="4"/>
+ <note pname="g" oct="4" dur="4"/>
+ <note pname="c" oct="5" dur="4"/>
+
+
+
+ Vous devriez ensuite voir les trois notes rendues séquentiellement. Pas vraiment un accord, en fait. Mais ne vous inquiétez pas :
+ nous nous en occuperons dans l'étape suivante. D'ici là, vous pouvez jouer avec les valeurs des attributs pour voir comment elles
+ influencent le rendu. Vous verrez également des indices sur la manière d'écrire le code correct. Quand vous serez prêt, assurez-vous
+ d'avoir le code correct dans l'éditeur, puis appuyez sur le bouton "Continuer" en bas à droite.
+
+
+
diff --git a/_tutorials-FR/103_chords/step-01/103_chords_step-01-prefill.xml b/_tutorials-FR/103_chords/step-01/103_chords_step-01-prefill.xml
new file mode 100644
index 000000000..3ac128b27
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-01/103_chords_step-01-prefill.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/_tutorials-FR/103_chords/step-01/103_chords_step-01.xml b/_tutorials-FR/103_chords/step-01/103_chords_step-01.xml
new file mode 100644
index 000000000..e49836f7c
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-01/103_chords_step-01.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-02/103_chords_step-02-desc.html b/_tutorials-FR/103_chords/step-02/103_chords_step-02-desc.html
new file mode 100644
index 000000000..df29a728d
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-02/103_chords_step-02-desc.html
@@ -0,0 +1,22 @@
+
+
+ Deuxième étape : encodez un accord (une triade).
+
+
+ Bien joué ! Il est maintenant temps de créer un <chord>
avec ces trois <note>
s. Comme mentionné
+ dans l'étape précédente, vous devriez enfermer les éléments de note dans un élément de chord et déplacer les attributs de durée
+ des notes vers le chord.
+
+
+ Dans l'éditeur ci-dessous, enfermez les trois éléments <note>
dans un élément <chord>
+ (c'est-à-dire insérez la balise d'ouverture de <chord>
avant la première note et la balise de fermeture
+ après la dernière). Les trois notes simples devraient maintenant être rendues non pas séquentiellement, mais alignées
+ verticalement, mais elles n'ont pas encore la bonne durée. Supprimez donc les attributs de durée de toutes les notes et
+ ajoutez-en un au <chord>
à la place. Gardez la durée d'un quart de temps (@dur="4"
).
+
+
+ Vous devriez alors voir l'accord rendu. Encore une fois, vous pouvez jouer avec les valeurs des attributs pour voir comment elles
+ influencent le rendu. Vous verrez également des indications sur la manière d'écrire le code correct. Quand vous serez prêt,
+ assurez-vous d'avoir le code correct dans l'éditeur, puis appuyez sur le bouton "Continuer" en bas à droite.
+
+
diff --git a/_tutorials-FR/103_chords/step-02/103_chords_step-02-prefill.xml b/_tutorials-FR/103_chords/step-02/103_chords_step-02-prefill.xml
new file mode 100644
index 000000000..3a6fcac86
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-02/103_chords_step-02-prefill.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-02/103_chords_step-02.xml b/_tutorials-FR/103_chords/step-02/103_chords_step-02.xml
new file mode 100644
index 000000000..9a0b47ddd
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-02/103_chords_step-02.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-03/103_chords_step-03-desc.html b/_tutorials-FR/103_chords/step-03/103_chords_step-03-desc.html
new file mode 100644
index 000000000..d4c3142b0
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-03/103_chords_step-03-desc.html
@@ -0,0 +1,15 @@
+
+
+ Troisième étape : encodez une suite d'accords.
+
+
+ Parfait, vous venez d'encoder un accord en MEI. Maintenant continuons et ajoutons quelques accords supplémentaire pour
+ encoder une suite d'accords :
+
+
+
+ Dans l'éditeur ci-dessous, essayez de reproduire la suite d'accord ci-dessus en MEI. Les notes
+ In the editor below, please try to reproduce the chord sequence above with MEI. Les notes sont enfermées par des éléments de chord.
+ Chaque chord a besoin d'un attribut @dur
, et chaque note a besoin des attributs @pname
et @oct
.
+
+
diff --git a/_tutorials-FR/103_chords/step-03/103_chords_step-03-prefill.xml b/_tutorials-FR/103_chords/step-03/103_chords_step-03-prefill.xml
new file mode 100644
index 000000000..217271f97
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-03/103_chords_step-03-prefill.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-03/103_chords_step-03.xml b/_tutorials-FR/103_chords/step-03/103_chords_step-03.xml
new file mode 100644
index 000000000..3d6d62dcf
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-03/103_chords_step-03.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-04/103_chords_step-04-desc.html b/_tutorials-FR/103_chords/step-04/103_chords_step-04-desc.html
new file mode 100644
index 000000000..9a2b4ec98
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-04/103_chords_step-04-desc.html
@@ -0,0 +1,24 @@
+
+
+ Step four: encode an extended sequence of chords.
+
+
+ Perfect, you have just encoded a simple chord sequence in MEI. Now let's continue and add some rhythmical variance for a more extended sequence of chords. In fact, we will arrive at an harmonisation of the "Mary had a little lamb" example from the Quickstart tutorial:
+
+
+
+
+ In the editor below, please try to reproduce the chord sequence above with MEI. Notes are enclosed by chord
+ elements. Each chord needs a @dur
attribute, and each note needs @pname
and
+ @oct
attributes.
+
+
+ Keep in mind that the @dur
attribute can have values like "1"
, "2"
, "4"
,
+ "8"
or "16"
to indicate different rhythmical values.
+ For the first chord, you need an additional @dots
attribute, where you need to specify
+ the number of dots as an integer – in this case, it's simply a dots="1"
.
+
+
+ Tip: Once you have laid out the chordal structure, you should be able to copy & paste the block with the three <note>
elements.
+
+
diff --git a/_tutorials-FR/103_chords/step-04/103_chords_step-04-prefill.xml b/_tutorials-FR/103_chords/step-04/103_chords_step-04-prefill.xml
new file mode 100644
index 000000000..8c14d778f
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-04/103_chords_step-04-prefill.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_tutorials-FR/103_chords/step-04/103_chords_step-04.xml b/_tutorials-FR/103_chords/step-04/103_chords_step-04.xml
new file mode 100644
index 000000000..129092268
--- /dev/null
+++ b/_tutorials-FR/103_chords/step-04/103_chords_step-04.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From a3897ff5f41e654164c2d6e4a4bcf4dc0d8fc7fc Mon Sep 17 00:00:00 2001
From: daftcloud <50362363+daftcloud@users.noreply.github.com>
Date: Fri, 10 Nov 2023 12:16:35 +0100
Subject: [PATCH 20/41] ajout tutoriel 104
---
.../104_rests/104_rests-multirest.png | Bin 0 -> 3620 bytes
_tutorials-FR/104_rests/104_rests-spaces.png | Bin 0 -> 4048 bytes
_tutorials-FR/104_rests/104_rests.json | 71 ++++++++++++++++++
_tutorials-FR/104_rests/104_rests.md | 7 ++
_tutorials-FR/104_rests/104_rests.png | Bin 0 -> 9681 bytes
_tutorials-FR/104_rests/104_rests_end.html | 27 +++++++
.../step-00/104_rests_step-00-desc.html | 30 ++++++++
.../104_rests/step-00/104_rests_step-00.xml | 32 ++++++++
.../step-01/104_rests_step-01-desc.html | 15 ++++
.../104_rests/step-01/104_rests_step-01.xml | 32 ++++++++
.../step-02/104_rests_step-02-desc.html | 16 ++++
.../step-02/104_rests_step-02-prefill.xml | 1 +
.../104_rests/step-02/104_rests_step-02.xml | 32 ++++++++
.../step-03/104_rests_step-03-desc.html | 13 ++++
.../step-04/104_rests_step-04-desc.html | 38 ++++++++++
.../step-04/104_rests_step-04-prefill.xml | 4 +
.../104_rests/step-04/104_rests_step-04.xml | 43 +++++++++++
17 files changed, 361 insertions(+)
create mode 100644 _tutorials-FR/104_rests/104_rests-multirest.png
create mode 100644 _tutorials-FR/104_rests/104_rests-spaces.png
create mode 100644 _tutorials-FR/104_rests/104_rests.json
create mode 100644 _tutorials-FR/104_rests/104_rests.md
create mode 100644 _tutorials-FR/104_rests/104_rests.png
create mode 100644 _tutorials-FR/104_rests/104_rests_end.html
create mode 100644 _tutorials-FR/104_rests/step-00/104_rests_step-00-desc.html
create mode 100644 _tutorials-FR/104_rests/step-00/104_rests_step-00.xml
create mode 100644 _tutorials-FR/104_rests/step-01/104_rests_step-01-desc.html
create mode 100644 _tutorials-FR/104_rests/step-01/104_rests_step-01.xml
create mode 100644 _tutorials-FR/104_rests/step-02/104_rests_step-02-desc.html
create mode 100644 _tutorials-FR/104_rests/step-02/104_rests_step-02-prefill.xml
create mode 100644 _tutorials-FR/104_rests/step-02/104_rests_step-02.xml
create mode 100644 _tutorials-FR/104_rests/step-03/104_rests_step-03-desc.html
create mode 100644 _tutorials-FR/104_rests/step-04/104_rests_step-04-desc.html
create mode 100644 _tutorials-FR/104_rests/step-04/104_rests_step-04-prefill.xml
create mode 100644 _tutorials-FR/104_rests/step-04/104_rests_step-04.xml
diff --git a/_tutorials-FR/104_rests/104_rests-multirest.png b/_tutorials-FR/104_rests/104_rests-multirest.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3be57e28708117d96a879407bc1607b0cf2567d
GIT binary patch
literal 3620
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
literal 0
HcmV?d00001
diff --git a/_tutorials-FR/104_rests/104_rests-spaces.png b/_tutorials-FR/104_rests/104_rests-spaces.png
new file mode 100644
index 0000000000000000000000000000000000000000..94dd19a4c5f3a7ce0387d41f75dc3f59faf129ff
GIT binary patch
literal 4048
zcmcInXIPWjvkyoVgDyn^ORv%bxJy+~2!S93fh0m8i1cU{M5G9UB8Wtq^dL=I0xObG
z3|$Z`2qs90bOfSwq)7m!Ebx!I_kOzf(|zuTch1b5Gc&*Ucb;dSGjT|p^T$ErAOHYx
z+|t4f4FGUKIC>)QVUApVtItBi6
zI7symG@SSMBkE;vStmysC5=&wUU+qtClhw*c`Oj9kHxywQpzZGy;0A7M7fqnKfs@?
z8t0H3S6d8a!o<5CYp)*=?w9C)w=QPBUmZ^lT$M`Tm1_eK!E$Xp{|_QQlpUkYOlWPf
zXj#g!uUQ=%`&J#;lNveoyzlefzeBoe*B6j_YTMcvY;Fw6u9&U!Ms|ZWP@_
z`jszjp!`yOR9e6xSoLo>I1fYZ?L%t5afCE6T_#!j9Ad&<^jEYPwyV4Q@XYiP1~!H!
z&yCCQfMI&_&+)}C%y#Aa#~3ED8UyF1Z!StL6TyNi6yXyz_HLP`Yl|cw<9zhy*UxXJ
z!MVSn^>>1#W-CesPGFtC!YlXg*{%(6k0g)
z^lUuHU2KpVTln)bui0#NIm6(Th`C-GYJH$L``cV-oN)>&^(xD(+@Q_)MrUDd)AG=
zUphkXIfsDui{lAYmlt7R+bb3F7zYP3#G&GtrK<47ix-&;2IA}498X-}$sM<;`}5<8
zA!MJ$A=1#0YjUg0sAGKcscY(O`U_8zjiti;GN;;i67R)qB_`@e&D6YoKl=Vb(TKTqP_?Tqda(#elV7frWP;Za3UR^|e-s7jC!&e8C
zPbrM^7ppjqHY)iD&wu$g;I<;buo7cJA)YG&Q@;FyrR*k%(%UXTmsi6GdZuY3k=
znUum~5SL)2QKF91wU~&_d1QkxK;Z~1u#9ugd=1q`K}~0miYwjK+N+13g*k+$#<1boEyZv8h-7jqj;bQU#6
z-X6Fx(hvM+xmNG0i85|R)8VmbR-1a4QGZ#Ld?~oMKRvhV+MuoxYCJcSW-$9n=16wn
zf~=ZvSBXH1z>ex(flTG+)e0;cHs=N0CW>vES~K8-*!rmc6h?5`1A}B$$`ThS8jRX5
zw7k?WRhZgM|FSaPbO;Rs=ENG&G%_=Yz*KvtbzIDG)72Hzt--eOWoo{UD{&Xy0*K9T*hEYus*s+BEujrEu)n$Q3fs#
zJJOUPXmS>hZ;6H;w3UxvGUYGQ@j0#kN2}@h4*E~b!b57j`2nLpOFfYnakp!9->KPI
zqov15Oz55s=BY-|WlTzHMEICnd6}4j0;So>e&lZ{Z~OhQr5t)^!=r}1gpbeKoS$n#
zHr8=7N<~L4a*DvT*KO^+!F@t2dSCB4H#^?-xps!Xt}57c9kX_Vl^@&QYAk(u>lI<@
zR&TP5OKdx4x3%@VY|^R3^Cwt&pT4c_&4*X&2ZakXJSbv6Tu)wGTie=hia5B-o*uH&
z(1qx*oJ}l=mlHsg$VX!EwhtXmO-=NspnJ|mNMkT}EikB^+yi2@9;|<#ifEd6l|LX^
zb9#w&*noNLJ%a)>fJvWrsreSB@>SY8khfaefR|CAH2G-xITcWm%u?((;ICS)alv30
zKyY%{yMR+oUKdoVz9l^v5QC9m)}YF(ax*FvPbB0ffe^%xHZIQu7f&Y?F{vA!&zWuB$Jx*#b9-|;l_{GS
z?#k?E%^?R363T-sdpJKgVWhXCil^X)&C-$?bIkcbZpoN%eM3To$)*|k-?YJm=B7SC
zOL{TS)$55E@SBNx2O#>-aXIBg;&w1&;$RZ>)9Axi=Omsh0H|Aok$^}`eQk#Q@!8_X#4g0SNPr+V+FTa(hH~N^C>6L<
z16$`g!vMcc`(9~