From cdaa47618885a731109efa3e43721faad9b9d2c6 Mon Sep 17 00:00:00 2001 From: reza seyedi Date: Sun, 9 Feb 2025 14:12:59 +0330 Subject: [PATCH 01/40] Completed Tuttorials Translation to Persian (FA) --- _tutorials-FA/100_structure/100_Structure.md | 7 + .../100_structure/100_structure.json | 81 +++ .../100_structure/100_structure_end.html | 20 + .../step-00/100_structure_step-00-desc.html | 16 + .../step-01/100_structure_step-01-desc.html | 21 + .../step-01/100_structure_step-01-prefill.xml | 1 + .../step-01/100_structure_step-01.xml | 4 + .../step-02/100_structure_step-02-desc.html | 20 + .../step-02/100_structure_step-02-prefill.xml | 1 + .../step-02/100_structure_step-02.xml | 4 + .../step-03/100_structure_step-03-desc.html | 24 + .../step-03/100_structure_step-03-prefill.xml | 3 + .../step-03/100_structure_step-03.xml | 7 + .../step-04/100_structure_step-04-desc.html | 24 + .../step-04/100_structure_step-04-prefill.xml | 6 + .../step-04/100_structure_step-04.xml | 13 + .../101_quickstart/101_note-little-lamb.png | Bin 0 -> 4820 bytes .../101_quickstart/101_note-sequence.png | Bin 0 -> 4762 bytes .../101_quickstart/101_quickstart.json | 95 ++++ .../101_quickstart/101_quickstart.md | 7 + .../101_quickstart/101_quickstart_end.html | 14 + .../101_quickstart_step-00-desc.html | 12 + .../step-01/101_quickstart_step-01-desc.html | 17 + .../101_quickstart_step-01-prefill.xml | 1 + .../step-01/101_quickstart_step-01.xml | 32 ++ .../step-02/101_quickstart_step-02-desc.html | 9 + .../101_quickstart_step-02-prefill.xml | 1 + .../step-02/101_quickstart_step-02.xml | 40 ++ .../step-03/101_quickstart_step-03-desc.html | 12 + .../101_quickstart_step-03-prefill.xml | 7 + .../step-03/101_quickstart_step-03.xml | 40 ++ _tutorials-FA/102_incipit/102_incipit.json | 482 ++++++++++++++++++ _tutorials-FA/102_incipit/102_incipit.md | 12 + _tutorials-FA/102_incipit/102_incipit.png | Bin 0 -> 13751 bytes .../102_incipit/102_incipit_end.html | 10 + .../step-01/102_incipit_step-01-desc.html | 8 + .../step-01/102_incipit_step-01-prefill.xml | 1 + .../step-01/102_incipit_step-01.xml | 25 + .../step-02/102_incipit_step-02-desc.html | 19 + .../step-02/102_incipit_step-02-prefill.xml | 5 + .../step-02/102_incipit_step-02.xml | 25 + .../step-03/102_incipit_step-03-desc.html | 9 + .../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 | 16 + .../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 | 8 + .../step-05/102_incipit_step-05-prefill.xml | 10 + .../step-05/102_incipit_step-05.xml | 41 ++ .../step-06/102_incipit_step-06-desc.html | 8 + .../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 | 8 + .../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 | 10 + .../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 | 15 + .../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 | 17 + .../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 | 45 ++ .../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 | 40 ++ .../step-12/102_incipit_step-12-prefill.xml | 21 + .../step-12/102_incipit_step-12.xml | 94 ++++ _tutorials-FA/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-FA/103_chords/103_chords.json | 155 ++++++ _tutorials-FA/103_chords/103_chords_end.html | 12 + .../step-00/103_chords_step-00-desc.html | 13 + .../step-01/103_chords_step-01-desc.html | 31 ++ .../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 | 16 + .../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 | 14 + .../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 | 26 + .../step-04/103_chords_step-04-prefill.xml | 5 + .../103_chords/step-04/103_chords_step-04.xml | 68 +++ .../104_rests/104_rests-multirest.png | Bin 0 -> 3620 bytes _tutorials-FA/104_rests/104_rests-spaces.png | Bin 0 -> 4048 bytes _tutorials-FA/104_rests/104_rests.json | 74 +++ _tutorials-FA/104_rests/104_rests.md | 7 + _tutorials-FA/104_rests/104_rests.png | Bin 0 -> 9681 bytes _tutorials-FA/104_rests/104_rests_end.html | 27 + .../step-00/104_rests_step-00-desc.html | 10 + .../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 | 15 + .../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 | 14 + .../step-04/104_rests_step-04-desc.html | 32 ++ .../step-04/104_rests_step-04-prefill.xml | 4 + .../104_rests/step-04/104_rests_step-04.xml | 43 ++ .../180_understanding_odd-01.html | 27 + .../180_understanding_odd-02.html | 32 ++ .../180_understanding_odd-03.html | 32 ++ .../180_understanding_odd-04.html | 63 +++ .../180_understanding_odd-05.html | 59 +++ .../180_understanding_odd-06.html | 155 ++++++ .../180_understanding_odd-07.html | 158 ++++++ .../180_understanding_odd-08.html | 176 +++++++ .../180_understanding_odd-09.html | 63 +++ .../180_understanding_odd-end.html | 17 + .../180_understanding_odd.json | 47 ++ .../180_understanding_odd.md | 7 + .../180_understanding_odd/beam-module.png | Bin 0 -> 21869 bytes .../role-children-byclass.png | Bin 0 -> 136985 bytes .../180_understanding_odd/role-children.png | Bin 0 -> 62583 bytes .../181_customizing_mei-01.html | 23 + .../181_customizing_mei-02.html | 23 + .../181_customizing_mei-03.html | 17 + .../181_customizing_mei-04.html | 34 ++ .../181_customizing_mei-05.html | 66 +++ .../181_customizing_mei-06.html | 25 + .../181_customizing_mei-end.html | 18 + .../181_customizing_mei.json | 35 ++ .../181_customizing_mei.md | 7 + .../199_writing_tutorials-01.html | 22 + .../199_writing_tutorials-02.html | 38 ++ .../199_writing_tutorials-03.html | 99 ++++ .../199_writing_tutorials-04.html | 56 ++ .../199_writing_tutorials-05.html | 40 ++ .../199_writing_tutorials-end.html | 25 + .../199_writing_tutorials.json | 31 ++ .../199_writing_tutorials.md | 7 + .../199_writing_tutorials.xml | 34 ++ 139 files changed, 4315 insertions(+) create mode 100644 _tutorials-FA/100_structure/100_Structure.md create mode 100644 _tutorials-FA/100_structure/100_structure.json create mode 100644 _tutorials-FA/100_structure/100_structure_end.html create mode 100644 _tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html create mode 100644 _tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html create mode 100644 _tutorials-FA/100_structure/step-01/100_structure_step-01-prefill.xml create mode 100644 _tutorials-FA/100_structure/step-01/100_structure_step-01.xml create mode 100644 _tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html create mode 100644 _tutorials-FA/100_structure/step-02/100_structure_step-02-prefill.xml create mode 100644 _tutorials-FA/100_structure/step-02/100_structure_step-02.xml create mode 100644 _tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html create mode 100644 _tutorials-FA/100_structure/step-03/100_structure_step-03-prefill.xml create mode 100644 _tutorials-FA/100_structure/step-03/100_structure_step-03.xml create mode 100644 _tutorials-FA/100_structure/step-04/100_structure_step-04-desc.html create mode 100644 _tutorials-FA/100_structure/step-04/100_structure_step-04-prefill.xml create mode 100644 _tutorials-FA/100_structure/step-04/100_structure_step-04.xml create mode 100644 _tutorials-FA/101_quickstart/101_note-little-lamb.png create mode 100644 _tutorials-FA/101_quickstart/101_note-sequence.png create mode 100644 _tutorials-FA/101_quickstart/101_quickstart.json create mode 100644 _tutorials-FA/101_quickstart/101_quickstart.md create mode 100644 _tutorials-FA/101_quickstart/101_quickstart_end.html create mode 100644 _tutorials-FA/101_quickstart/101_quickstart_step-00-desc.html create mode 100644 _tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html create mode 100644 _tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-prefill.xml create mode 100644 _tutorials-FA/101_quickstart/step-01/101_quickstart_step-01.xml create mode 100644 _tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-desc.html create mode 100644 _tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-prefill.xml create mode 100644 _tutorials-FA/101_quickstart/step-02/101_quickstart_step-02.xml create mode 100644 _tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-desc.html create mode 100644 _tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-prefill.xml create mode 100644 _tutorials-FA/101_quickstart/step-03/101_quickstart_step-03.xml create mode 100644 _tutorials-FA/102_incipit/102_incipit.json create mode 100644 _tutorials-FA/102_incipit/102_incipit.md create mode 100644 _tutorials-FA/102_incipit/102_incipit.png create mode 100644 _tutorials-FA/102_incipit/102_incipit_end.html create mode 100644 _tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html create mode 100644 _tutorials-FA/102_incipit/step-01/102_incipit_step-01-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-01/102_incipit_step-01.xml create mode 100644 _tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html create mode 100644 _tutorials-FA/102_incipit/step-02/102_incipit_step-02-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-02/102_incipit_step-02.xml create mode 100644 _tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html create mode 100644 _tutorials-FA/102_incipit/step-03/102_incipit_step-03-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-03/102_incipit_step-03.xml create mode 100644 _tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html create mode 100644 _tutorials-FA/102_incipit/step-04/102_incipit_step-04-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-04/102_incipit_step-04.xml create mode 100644 _tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html create mode 100644 _tutorials-FA/102_incipit/step-05/102_incipit_step-05-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-05/102_incipit_step-05.xml create mode 100644 _tutorials-FA/102_incipit/step-06/102_incipit_step-06-desc.html create mode 100644 _tutorials-FA/102_incipit/step-06/102_incipit_step-06-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-06/102_incipit_step-06.xml create mode 100644 _tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html create mode 100644 _tutorials-FA/102_incipit/step-07/102_incipit_step-07-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-07/102_incipit_step-07.xml create mode 100644 _tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html create mode 100644 _tutorials-FA/102_incipit/step-08/102_incipit_step-08-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-08/102_incipit_step-08.xml create mode 100644 _tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html create mode 100644 _tutorials-FA/102_incipit/step-09/102_incipit_step-09-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-09/102_incipit_step-09.xml create mode 100644 _tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html create mode 100644 _tutorials-FA/102_incipit/step-10/102_incipit_step-10-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-10/102_incipit_step-10.xml create mode 100644 _tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html create mode 100644 _tutorials-FA/102_incipit/step-11/102_incipit_step-11-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-11/102_incipit_step-11.xml create mode 100644 _tutorials-FA/102_incipit/step-12/102_incipit_step-12-desc.html create mode 100644 _tutorials-FA/102_incipit/step-12/102_incipit_step-12-prefill.xml create mode 100644 _tutorials-FA/102_incipit/step-12/102_incipit_step-12.xml create mode 100644 _tutorials-FA/103_chords/103_Chords.md create mode 100644 _tutorials-FA/103_chords/103_chord-little-lamb.png create mode 100644 _tutorials-FA/103_chords/103_chord-sequence.png create mode 100644 _tutorials-FA/103_chords/103_chords.json create mode 100644 _tutorials-FA/103_chords/103_chords_end.html create mode 100644 _tutorials-FA/103_chords/step-00/103_chords_step-00-desc.html create mode 100644 _tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html create mode 100644 _tutorials-FA/103_chords/step-01/103_chords_step-01-prefill.xml create mode 100644 _tutorials-FA/103_chords/step-01/103_chords_step-01.xml create mode 100644 _tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html create mode 100644 _tutorials-FA/103_chords/step-02/103_chords_step-02-prefill.xml create mode 100644 _tutorials-FA/103_chords/step-02/103_chords_step-02.xml create mode 100644 _tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html create mode 100644 _tutorials-FA/103_chords/step-03/103_chords_step-03-prefill.xml create mode 100644 _tutorials-FA/103_chords/step-03/103_chords_step-03.xml create mode 100644 _tutorials-FA/103_chords/step-04/103_chords_step-04-desc.html create mode 100644 _tutorials-FA/103_chords/step-04/103_chords_step-04-prefill.xml create mode 100644 _tutorials-FA/103_chords/step-04/103_chords_step-04.xml create mode 100644 _tutorials-FA/104_rests/104_rests-multirest.png create mode 100644 _tutorials-FA/104_rests/104_rests-spaces.png create mode 100644 _tutorials-FA/104_rests/104_rests.json create mode 100644 _tutorials-FA/104_rests/104_rests.md create mode 100644 _tutorials-FA/104_rests/104_rests.png create mode 100644 _tutorials-FA/104_rests/104_rests_end.html create mode 100644 _tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html create mode 100644 _tutorials-FA/104_rests/step-00/104_rests_step-00.xml create mode 100644 _tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html create mode 100644 _tutorials-FA/104_rests/step-01/104_rests_step-01.xml create mode 100644 _tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html create mode 100644 _tutorials-FA/104_rests/step-02/104_rests_step-02-prefill.xml create mode 100644 _tutorials-FA/104_rests/step-02/104_rests_step-02.xml create mode 100644 _tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html create mode 100644 _tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html create mode 100644 _tutorials-FA/104_rests/step-04/104_rests_step-04-prefill.xml create mode 100644 _tutorials-FA/104_rests/step-04/104_rests_step-04.xml create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-01.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-02.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-03.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-04.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-05.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-06.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-07.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-08.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-09.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd-end.html create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd.json create mode 100644 _tutorials-FA/180_understanding_odd/180_understanding_odd.md create mode 100644 _tutorials-FA/180_understanding_odd/beam-module.png create mode 100644 _tutorials-FA/180_understanding_odd/role-children-byclass.png create mode 100644 _tutorials-FA/180_understanding_odd/role-children.png create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-04.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-05.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-06.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei-end.html create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei.json create mode 100644 _tutorials-FA/181_customizing_MEI/181_customizing_mei.md create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-01.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-02.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-03.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-04.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-05.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials-end.html create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials.json create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials.md create mode 100644 _tutorials-FA/199_writing_tutorials/199_writing_tutorials.xml diff --git a/_tutorials-FA/100_structure/100_Structure.md b/_tutorials-FA/100_structure/100_Structure.md new file mode 100644 index 000000000..af65785c7 --- /dev/null +++ b/_tutorials-FA/100_structure/100_Structure.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "مبتدی:اصول پایه‌ای XML و ساختار مینیمال برای MEI" +fullname: "درسی کوتاه درباره اصول XML و MEI" +data: "100_structure.json" +--- diff --git a/_tutorials-FA/100_structure/100_structure.json b/_tutorials-FA/100_structure/100_structure.json new file mode 100644 index 000000000..e75c391ff --- /dev/null +++ b/_tutorials-FA/100_structure/100_structure.json @@ -0,0 +1,81 @@ +{ + "steps": [ + { + "label":"به MEI خوش آمدید!", + "descFile": "100_structure_step-00-desc.html" + }, + { + "label": "المنت اصلی MEI", + "editorLines": 1, + "descFile": "100_structure_step-01-desc.html", + "prefillFile": "100_structure_step-01-prefill.xml", + "xmlFile": "100_structure_step-01.xml", + "xpaths": [ + {"rule": "count(//mei) = 1", "renderanyway": true, "hint": "یک المنت mei‌ کم دارید."} + ] + }, + { + "label": "نام‌حوزه‌ی MEI", + "editorLines": 1, + "descFile": "100_structure_step-02-desc.html", + "prefillFile": "100_structure_step-02-prefill.xml", + "xmlFile": "100_structure_step-02.xml", + "xpaths": [ + {"rule": "count(*[local-name()='mei']) = 1", "renderanyway": true, "hint": "یک المنت mei‌ کم دارید."}, + {"rule": "*[local-name()='mei' and namespace-uri()='http://www.music-encoding.org/ns/mei']", "renderanyway": true, "hint": "You need a @xmlns declaration with the mei namespace 'http://www.music-encoding.org/ns/mei'."} + ] + }, + { + "label": "دو فرزند اصلی المنت ریشه‌ای", + "editorLines": 4, + "descFile": "100_structure_step-03-desc.html", + "prefillFile": "100_structure_step-03-prefill.xml", + "xmlFile": "100_structure_step-03.xml", + "xpaths": [ + {"rule": "count(//*[local-name()='mei']) = 1", "renderanyway": false, "hint": "You need one mei element."}, + {"rule": "*[local-name()='mei' and namespace-uri()='http://www.music-encoding.org/ns/mei']", "renderanyway": true, "hint": "You need a @xmlns declaration with the mei namespace 'http://www.music-encoding.org/ns/mei' in the mei element."}, + {"rule": "count(//*[local-name()='meiHead']) = 1", "renderanyway": false, "hint": "You need one meiHead element."}, + {"rule": "//*[local-name()='mei']/*[local-name()='meiHead']", "renderanyway": false, "hint": "meiHead has to a be child of the mei element."}, + {"rule": "count(//*[local-name()='music']) = 1", "renderanyway": false, "hint": "You need one music element."}, + {"rule": "//*[local-name()='mei']/*[local-name()='music']", "renderanyway": false, "hint": "music has to a be child of the mei element."}, + {"rule": "//*[local-name()='mei']/*[local-name()='meiHead']/following-sibling::*[local-name()='music']", "renderanyway": false, "hint": "music has to follow the meiHead element."} + ] + }, + { + "label": "حداقل اطلاعات در سربرگ MEI", + "editorLines": 11, + "descFile": "100_structure_step-04-desc.html", + "prefillFile": "100_structure_step-04-prefill.xml", + "xmlFile": "100_structure_step-04.xml", + "xpaths": [ + {"rule": "count(//*[local-name()='mei']) = 1", "renderanyway": false, "hint": "یک المنت mei‌ کم دارید."}, + {"rule": "*[local-name()='mei' and namespace-uri()='http://www.music-encoding.org/ns/mei']", "renderanyway": true, "hint": "باید در المنت mei، یک اعلان @xmlns داشته باشید که نام‌حوزه‌ی mei را معرفی کند."}, + {"rule": "count(//*[local-name()='meiHead']) = 1", "renderanyway": false, "hint": "یک المنت meiHead کم دارید."}, + {"rule": "//*[local-name()='mei']/*[local-name()='meiHead']", "renderanyway": false, "hint": "meiHead باید فرزند المنت mei باشد."}, + {"rule": "count(//*[local-name()='music']) = 1", "renderanyway": false,"hint": "یک المنت music کم دارید."}, + {"rule": "//*[local-name()='mei']/*[local-name()='music']", "renderanyway": false,"hint": "music باید فرزند المنت mei باشد."}, + {"rule": "//*[local-name()='mei']/*[local-name()='meiHead']/following-sibling::*[local-name()='music']", "renderanyway": false, "hint": "music باید بعد از المنت meiHead بیاید."}, + {"rule": "count(//*[local-name()='fileDesc']) = 1", "renderanyway": false,"hint": "یک المنت fileDesc کم دارید."}, + {"rule": "//*[local-name()='meiHead']/*[local-name()='fileDesc']", "renderanyway": false, "hint":"fileDesc باید فرزند meiHead باشد." }, + {"rule": "count(//*[local-name()='titleStmt']) = 1", "renderanyway": false, "hint": "یک المنت titleStmt کم دارید."}, + {"rule": "//*[local-name()='fileDesc']/*[local-name()='titleStmt']", "renderanyway": false, "hint": "titleStmt باید فرزند fileDesc باشد."}, + {"rule": "count(//*[local-name()='pubStmt']) = 1", "renderanyway": false, "hint": "یک المنت pubStmt کم دارید."}, + {"rule": "//*[local-name()='fileDesc']/*[local-name()='pubStmt']", "renderanyway": false, "hint": "pubStmt باید فرزند fileDesc باشد."}, + {"rule": "//*[local-name()='fileDesc']/*[local-name()='titleStmt']/following-sibling::*[local-name()='pubStmt']", "renderanyway": false, "hint": "pubStmt باید بعد از titleStmt بیاید."}, + {"rule": "count(//*[local-name()='title']) = 1", "renderanyway": false, "hint": "یک المنت title کم دارید."}, + {"rule": "//*[local-name()='titleStmt']/*[local-name()='title']", "renderanyway": false, "hint": "title باید فرزند titleStmt باشد."} + ] + } + ], + "end": "100_structure_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-FA/100_structure/100_structure_end.html b/_tutorials-FA/100_structure/100_structure_end.html new file mode 100644 index 000000000..a44534780 --- /dev/null +++ b/_tutorials-FA/100_structure/100_structure_end.html @@ -0,0 +1,20 @@ +
+

تبریک!

+

+ شما توانستید یک فایل MEI معتبر بنویسید و این آموزش را با موفقیت به پایان رسانده‌اید. اکنون باید بتوانید: +

+ +

+ از آنجا که مباحث مطرح شده در این درس به فصل المنت‌ها ساختاری از دستورالعمل‌های MEI اشاره داشتند، توصیه می‌کنیم که این فصل را هروقت به اطلاعات دقیق‌تری نیاز داشتید، مطالعه کنید. +

+

+ البته برای داشتن یک فایل MEI جامع، به اطلاعات بیشتری نیاز است – ما تمامی اطلاعات مربوط به محتوای موسیقایی مانند میزان‌ها، خطوط حامل یا نت‌ها را کنار گذاشتیم و همینطور باید یاد بگیرید که چگونه میزان، کلید و حامل‌ها را تنظیم کنید. چند درس دیگر هم هستند که به عنوان مراحل بعدی آشنایی با MEI توصیه می‌کنیم. البته می‌توانید هر زمان که خواستید به این درس‌ها (یا حتی همین درس) بازگردید و مطالب را مرور کنید. +

+

+ وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با جامعه MEI به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک درس در مورد نحوه نوشتن آموزش‌ها داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) +

+
diff --git a/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html b/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html new file mode 100644 index 000000000..f731747d8 --- /dev/null +++ b/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html @@ -0,0 +1,16 @@ +
+

+ در این آموزش، با مبانی پایه‌ای XML آشنا خواهید شد و درباره بیرونی‌ترین لایه‌های یک سند معتبر MEI یاد می‌گیرید. +در پایان این آموزش، باید بتوانید بخش‌های مختلف یک فایل MEI را شناسایی کنید و بدانید در هر بخشی از فایل MEI چه نوع اطلاعاتی را می‌توانید انتظار داشته باشید. +

+

+ موضوعات مطرح شده در این آموزش به فصل اِلِمنت‌های ساختاری از راهنمای MEI اشاره دارد. پیشنهاد می‌شود برای اطلاعات دقیق‌تر به این فصل مراجعه کنید. +

+

+ لطفاً توجه داشته باشید که کدی که در این آموزش می‌نویسید به دلیل نداشتن اطلاعات درباره محتوای واقعی موسیقایی، بلافاصله قابل رندر نخواهد بود. +

+

+ با این حال، پس از اتمام این آموزش، ممکن است بخواهید سایر آموزش‌ها را انجام دهید که جنبه‌های مهم دیگری از MEI را معرفی می‌کنند. (بسیاری از آن‌ها شامل کدهای قابل رندر برای موسیقی هستند.) این درس‌ها همچنین به عنوان مرجع ساده‌ای برای MEI عمل می‌کنند و شما همیشه می‌توانید به آن‌ها بازگردید. +

+

برای شروع، لطفاً روی دکمه "ادامه" در پایین سمت راست این پاراگراف کلیک کنید.

+
diff --git a/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html b/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html new file mode 100644 index 000000000..8b1569425 --- /dev/null +++ b/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html @@ -0,0 +1,21 @@ +
+

+ گام اول: آشنایی با مبانی پایه‌ای XML و یادگیری درباره عنصر ریشه‌ای MEI. +

+

+ MEI از XML برای نمایش نت‌های موسیقی استفاده می‌کند. XML یک سیستم کدنویسی سلسله‌مراتبی است که اجزای اصلی آن، المنتها هستند. این المنتها با استفاده از چیزی به نام «تگ‌» نمایش داده می‌شوند. معمولاً این تگ‌ها شامل یک تگ آغاز (باز شونده - که نام آن در داخل براکت‌های زاویه‌ای مانند + <element>) و تگ پایان یا بسته‌شونده مربوطه (</element>) هستند. اگر محتوایی بین این دو تگ وجود نداشته باشد (مانند متن یا المنتهای دیگر)، المنت می‌تواند به شکل کوتاه‌شده‌ی <element /> نوشته شود. در هر صورت، هر تگی باز شده باشد، بعداً بسته شود. +

+

+ می‌توانید تصور کنید سند XML مثل درختی است که از یک المنت اصلی (مثل یک لایه‌ی بیرونی که عناصر دیگر را در بر گرفته) به المنتهای فرزند (لایه‌های داخلی‌تر) شاخه می‌شود. +المنت Root یا ریشه‌ای در یک سند MEI، المنتی به نام <mei> است (در گام بعدی توضیح خواهیم داد که نام المنتها، قراردادی است و هر نام دیگری میتوانست باشد.) +

+ +

یک المنت ریشه‌ای <mei> را در کادر زیر وارد کنید. فراموش نکنید که تگ آغاز را با تگ پایان مربوطه ببندید.

+ +

+ پی‌نوشت: ما اصول پایه‌ای XML بیشتری را در مراحل بعدی پوشش خواهیم داد. برای اطلاعات دقیق‌تر، به مطالبی در فضای وب در دسترس است نگاهی بیندازید، مثلاً + Gentle Introduction to XML + از Text Encoding Initiative (TEI). +

+
diff --git a/_tutorials-FA/100_structure/step-01/100_structure_step-01-prefill.xml b/_tutorials-FA/100_structure/step-01/100_structure_step-01-prefill.xml new file mode 100644 index 000000000..44fbfea59 --- /dev/null +++ b/_tutorials-FA/100_structure/step-01/100_structure_step-01-prefill.xml @@ -0,0 +1 @@ + diff --git a/_tutorials-FA/100_structure/step-01/100_structure_step-01.xml b/_tutorials-FA/100_structure/step-01/100_structure_step-01.xml new file mode 100644 index 000000000..42fb3cce6 --- /dev/null +++ b/_tutorials-FA/100_structure/step-01/100_structure_step-01.xml @@ -0,0 +1,4 @@ + + + + diff --git a/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html b/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html new file mode 100644 index 000000000..405804514 --- /dev/null +++ b/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html @@ -0,0 +1,20 @@ +
+

+ گام دوم: آشنایی با کاربرد و استفاده از نام‌حوزه‌ها (namespaces). +

+

+ بسیارخب! همان‌طور که در گام قبلی ذکر شد، نام المنتهای ریشه‌ای یک سند XML اساساً نامی دلخواه است که به خودی خود معنایی برای کامپیوتر ندارد. برای روشن کردن اینکه یک المنت در چه زمینه‌ای تعریف شده و برای جلوگیری از تضاد نام‌ها با المنت‌ها دیگر، XML از چیزی به نام + نام‌حوزه‌ها استفاده می‌کند. + نام‌حوزه‌ها می‌توانند با افزودن اعلام نام‌حوزه‌ی @xmlns به المنت ریشه‌ای معرفی شوند. +

+

+ به عنوان مثال، نام‌حوزه‌ی MEI http://www.music-encoding.org/ns/mei است و می‌تواند به صورت زیر اعلام شود: xmlns="http://www.music-encoding.org/ns/mei" +

+

+ هرگاه در متن نشانه‌ای با علامت @ پیش‌نشسته را دیدید (مانند @xmlns بالا)، این به معنای اشاره به یک خصیصه (Attribute) درXML است. (این نوع اشاره متداولی است که از زبان + XPath نشأت می‌گیرد.) + خصیصه‌ها حاوی اطلاعات مشخص شده (مقادیر خصیصه) هستند که به المنت‌ها مربوط می‌شوند. با این حال، بر خلاف المنت‌ها، خصیصه‌های XML تگ‌های باز یا بسته خود را ندارند و تنها در داخل تگ باز المنت و در کنار نام المنت قرار می‌گیرند. آنها شامل نام خصیصه و علامت مساوی به همراه مقدار خصیصه هستند که همیشه باید درون گیومه (کوتاه یا بلند) قرار گیرد. خصیصه‌های متعدد با فضاهای خالی (space بین کلمات) از یکدیگر جدا می‌شوند. توجه داشته باشید که علامت @ تنها در توصیف‌های متنی قبل از نام خصیصه قرار می‌گیرد و در خود کدنویسی نمی‌آید. +

+ +

در کادر زیر، یک اعلامیه (Declaration) نام‌حوزه‌ی MEI به المنت ریشه‌ای MEI اضافه کنید.

+
diff --git a/_tutorials-FA/100_structure/step-02/100_structure_step-02-prefill.xml b/_tutorials-FA/100_structure/step-02/100_structure_step-02-prefill.xml new file mode 100644 index 000000000..3958eccfa --- /dev/null +++ b/_tutorials-FA/100_structure/step-02/100_structure_step-02-prefill.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_tutorials-FA/100_structure/step-02/100_structure_step-02.xml b/_tutorials-FA/100_structure/step-02/100_structure_step-02.xml new file mode 100644 index 000000000..0936760fd --- /dev/null +++ b/_tutorials-FA/100_structure/step-02/100_structure_step-02.xml @@ -0,0 +1,4 @@ + + + + diff --git a/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html b/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html new file mode 100644 index 000000000..6899a96ed --- /dev/null +++ b/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html @@ -0,0 +1,24 @@ +
+

+ گام سوم: آشنایی با المنت‌های اصلی فرزندِ المنت ریشه‌ای <mei>: <meiHead> + و <music>. +

+

+ آفرین! حالا که نام‌حوزه را در المنت ریشه‌ای خود اعلام کرده‌ایم، تمامی المنت‌ها دیگر که در عنصر ریشه‌ای + جاگذاری شده‌اند، می‌توانند بر اساس نام‌حوزه MEI توسط کامپیوتر شناسایی شوند. +

+

+ همان‌طور که قبلاً ذکر شد، می‌توانید به سند XML مانند درختی فکر کنید که از یک عنصر ریشه‌ای (بیرونی) به عناصر فرزند (درونی) شاخه می‌شود. یک فایل کدگذاری شده MEI حداقل شامل دو ساختار درون عنصر ریشه‌ای + <mei> است: +

+ + +

در ویرایشگر زیر، یک المنت <meiHead> و یک المنت <music> را درون المنت ریشه‌ای <mei> اضافه کنید.

+
diff --git a/_tutorials-FA/100_structure/step-03/100_structure_step-03-prefill.xml b/_tutorials-FA/100_structure/step-03/100_structure_step-03-prefill.xml new file mode 100644 index 000000000..9991eba5d --- /dev/null +++ b/_tutorials-FA/100_structure/step-03/100_structure_step-03-prefill.xml @@ -0,0 +1,3 @@ + + + diff --git a/_tutorials-FA/100_structure/step-03/100_structure_step-03.xml b/_tutorials-FA/100_structure/step-03/100_structure_step-03.xml new file mode 100644 index 000000000..4eed803b5 --- /dev/null +++ b/_tutorials-FA/100_structure/step-03/100_structure_step-03.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/_tutorials-FA/100_structure/step-04/100_structure_step-04-desc.html b/_tutorials-FA/100_structure/step-04/100_structure_step-04-desc.html new file mode 100644 index 000000000..5c80eec21 --- /dev/null +++ b/_tutorials-FA/100_structure/step-04/100_structure_step-04-desc.html @@ -0,0 +1,24 @@ +
+

+ گام چهارم: آشنایی با حداقل اطلاعات برای سربرگ یک فایلMEI . +

+

+ بسیارخب! اکنون به ساختار پایه‌ای یک سند MEI نزدیک شده‌اید. فقط مانده دو المنت ضروری در سربرگ فایل: +

+ +

+ هر دو این المنت‌ها بخشی از توصیف فایل (<fileDesc>) هستند، که المنت فرزند مستقیم <meiHead> است و توصیف کامل کتاب‌شناسی یک فایل MEI را ارائه می‌دهد. +

+

+ در کادر زیر، یک المنت <fileDesc> را درون <meiHead> اضافه کنید. + سپس المنت‌های ضروری <titleStmt> و <pubStmt> را به + <fileDesc> و یک المنت <title> را به <titleStmt> اضافه کنید. +

+
diff --git a/_tutorials-FA/100_structure/step-04/100_structure_step-04-prefill.xml b/_tutorials-FA/100_structure/step-04/100_structure_step-04-prefill.xml new file mode 100644 index 000000000..fe8543ac2 --- /dev/null +++ b/_tutorials-FA/100_structure/step-04/100_structure_step-04-prefill.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/_tutorials-FA/100_structure/step-04/100_structure_step-04.xml b/_tutorials-FA/100_structure/step-04/100_structure_step-04.xml new file mode 100644 index 000000000..8e1127cd1 --- /dev/null +++ b/_tutorials-FA/100_structure/step-04/100_structure_step-04.xml @@ -0,0 +1,13 @@ + + + + + + March + + + + + + + diff --git a/_tutorials-FA/101_quickstart/101_note-little-lamb.png b/_tutorials-FA/101_quickstart/101_note-little-lamb.png new file mode 100644 index 0000000000000000000000000000000000000000..d30a110da4afba4cb97335602932ccd6e9c29022 GIT binary patch literal 4820 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 Mo6lj|!SE~p1Flj0I{*Lx literal 0 HcmV?d00001 diff --git a/_tutorials-FA/101_quickstart/101_note-sequence.png b/_tutorials-FA/101_quickstart/101_note-sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..da31c5a30100422ddd6a86e08a4ddca9ccd5b597 GIT binary patch literal 4762 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 literal 0 HcmV?d00001 diff --git a/_tutorials-FA/101_quickstart/101_quickstart.json b/_tutorials-FA/101_quickstart/101_quickstart.json new file mode 100644 index 000000000..72e368e29 --- /dev/null +++ b/_tutorials-FA/101_quickstart/101_quickstart.json @@ -0,0 +1,95 @@ +{ + "steps": [ + { + "label":"به MEI خوش آمدید!", + "descFile": "101_quickstart_step-00-desc.html" + }, + { + "label":"نت اول", + "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": "یک المنت note لازم دارید."}, + {"rule":"count(//mei:note/@*) = 3 and //mei:note/@pname and //mei:note/@oct and //mei:note/@dur", "renderanyway": false, "hint": "سه تا خصیصه برای المنت note نیاز دارید: @pname, @oct, و @dur."}, + {"rule":"//mei:note/@pname", "renderanyway": false, "hint": "خصیصه‌ی @pname مقادیر مجاز 'a' تا 'g' را می‌پذیرد."}, + {"rule":"//mei:note/@oct", "renderanyway": false, "hint": "خصیصه‌ی @oct به مقدار عددی نیاز دارد."}, + {"rule":"//mei:note/@dur", "renderanyway": false, "hint": "خصیصه‌ی @dur مقادیری مانند '1', '2', '4', '8' و... را می‌پذیرد."}, + {"rule":"//mei:note/@pname = 'e'", "renderanyway": true, "hint": "یک خصیصه‌ی @pnameنیاز دارید، با مقدار e."}, + {"rule":"//mei:note/@oct = '4'", "renderanyway": true, "hint": "یک خصیصه‌ی @octنیاز دارید، با مقدار 4."}, + {"rule":"//mei:note/@dur = '4'", "renderanyway": true, "hint": "یک خصیصه‌ی @durنیاز دارید، با مقدار 4."} + ] + }, + { + "label":"چند نت", + "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":"یک ملودی ساده", + "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-FA/101_quickstart/101_quickstart.md b/_tutorials-FA/101_quickstart/101_quickstart.md new file mode 100644 index 000000000..ca7e504cc --- /dev/null +++ b/_tutorials-FA/101_quickstart/101_quickstart.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "مقدماتی: شروع سریع" +fullname: "آموزش 5دقیقه‌ای مقدماتی MEI" +data: "101_quickstart.json" +--- diff --git a/_tutorials-FA/101_quickstart/101_quickstart_end.html b/_tutorials-FA/101_quickstart/101_quickstart_end.html new file mode 100644 index 000000000..333dab04f --- /dev/null +++ b/_tutorials-FA/101_quickstart/101_quickstart_end.html @@ -0,0 +1,14 @@ +

+

تبریک!

+

شما اولین آموزش خود درباره MEI را به پایان رساندید و حالا باید بتوانید یک ملودی بسیار ساده را با MEI رمزگذاری + کنید. البته، برای نوشتن یک فایل کامل MEI دانستن چیزهای بیشتری نیاز است – ما تمام اطلاعات ساختاری درباره میزان‌ها + و خطوط حامل را کنار گذاشتیم، و شما این را هم باید یاد بگیرید که چطور میزان‌نما، کلید و مایه‌نما (علائم سرکلید) + را تنظیم کنید. به عنوان مراحل بعدی در MEI، ما آموزش‌های خود را درباره + آکوردها یا + سکوت‌ها توصیه می‌کنیم. + البته، هر زمان خواستید می‌توانید به این آموزش‌ها (یا حتی همین آموزش) بازگردید و مطالب را مرور کنید. +

+

+ وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با جامعه MEI به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک درس در مورد نحوه نوشتن آموزش‌ها داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) +

+
\ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/101_quickstart_step-00-desc.html b/_tutorials-FA/101_quickstart/101_quickstart_step-00-desc.html new file mode 100644 index 000000000..7def8da4f --- /dev/null +++ b/_tutorials-FA/101_quickstart/101_quickstart_step-00-desc.html @@ -0,0 +1,12 @@ +
+

+ در این آموزش، خواهید آموخت که چگونه یک ملودی بسیار ساده را در MEI رمزگذاری کنید. شما یاد می‌گیرید که چگونه جنبه‌های ابتدایی نت‌نویسی موسیقی را به‌عنوان اطلاعات ساختاری توصیف کنید تا کامپیوتر بتواند کد شما را پردازش کند. +

+

+ کدی که می‌نویسید بلافاصله رندر می‌شود و رندر به تغییرات شما واکنش نشان می‌دهد. به این ترتیب، شما متوجه تعاملات پارامترهای مختلف خواهید شد. +

+

+ پس از اینکه این آموزش را به پایان رساندید، ممکن است بخواهید آموزش‌های دیگری را انجام دهید که جنبه‌های مهم دیگری از MEI را معرفی می‌کنند. این آموزش‌ها به‌عنوان مرجعی ساده برای MEI عمل می‌کنند – شما همیشه می‌توانید به آن‌ها بازگردید. +

+

برای شروع، لطفاً روی دکمه "ادامه" کلیک کنید.

+
\ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html new file mode 100644 index 000000000..aca756c22 --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html @@ -0,0 +1,17 @@ +
+

+ برای رمزگذاری (encode) یک نت، تمام اطلاعات مربوطه باید طوری ثبت شوند که کامپیوتر بتواند آنها را بخواند. این که کدام جزئیات اهمیت بیشتری دارند، بسته به نیازهای یک پروژه ممکن است متفاوت باشد؛ اما برای پیش بردن این مقدمه، بیایید بر روی اطلاعات اساسی یک نت توافق کنیم: نام نت (written pitch) نوشته شده و مدت زمان آن (duration). برای بیان گام، MEI از + نشان‌گذاری علمی  نام نت استفاده می‌کند، که در آن، نت دو میانی به شکل "C4" بیان می‌شود. با این حال، آن را به دو بخش جداگانه از اطلاعات تقسیم می‌کند: نام نت (در MEI به عنوان @pname شناخته می‌شود) و اکتاو (@oct). این جداسازی دلایل مختلفی دارد که در اینجا به آنها نمی‌پردازیم. همچنین لازم به ذکر است که نام نت‌ها در MEI به صورت رشته‌های متنی با حروف کوچک نوشته می‌شوند. +

+

ویژگی مهم دیگر نت، کشش زمانی (@dur) است. در اینجا، اعداد صحیح برای نشان دادن مدت زمان یک نت استفاده می‌شوند. یک نت گرد مقداری برابر با 1 دارد، یک نت سفید: 2، نت سیاه 4 و به همین ترتیب. +

+

+ از شما می‌خواهیم که کد زیر را در کادر خالی وارد کنید: <note pname="e" oct="4" dur="4"/>. سپس باید ببینید که نت، رندِر می‌شود. می‌توانید کمی با مقادیر خصیصه‌ها بازی کنید تا ببینید چگونه رندر را تحت تأثیر قرار می‌دهند. همچنین راهنمایی‌هایی برای نوشتن کد صحیح خواهید دید. هر زمان که آماده بودید، مطمئن شوید که کد صحیح را در ویرایشگر نوشته‌اید و سپس دکمه "ادامه" را در پایین سمت راست فشار دهید. +

+

+ پی‌نوشت: اگر با XML خیلی آشنا نیستید: هر زمان که به خصیصه‌ها اشاره می‌کنیم، نام آنها را با علامت @ پیشوند می‌دهیم. این یک روش معمول است و از زبان + XPath + نشأت می‌گیرد. هنگام نوشتن آنها در XML، فقط نام خصیصه را (بدون @) بنویسید. برای اطلاعات بیشتر، به + آموزش مقدمات XML ما نگاهی بیندازید. +

+
\ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-prefill.xml b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-prefill.xml new file mode 100644 index 000000000..b28124ba0 --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-prefill.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01.xml b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01.xml new file mode 100644 index 000000000..ea550c35a --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01.xml @@ -0,0 +1,32 @@ + + + + + + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?><note pname="e" oct="4" dur="4"/><?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-desc.html b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-desc.html new file mode 100644 index 000000000..300cac7fd --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-desc.html @@ -0,0 +1,9 @@ +<div> + <p> + تبریک! شما <b>اولین نت</b> خود را در MEI رمزگذاری کردید. حالا با اضافه کردن چند نت دیگر، اولین توالی ساده نت‌ها را رمزگذاری کنید: + <img style="display: block; margin: .5rem auto; width: 240px;" src="./101_note-sequence.png" alt="توالی نت‌ها"> + </p> + <p class="tutorialTask"> + لطفاً سعی کنید توالی بالا را با MEI بنویسید. (می‌توانید المنت نت اول را به تعداد لازم کپی و جای‌گذاری کنید). هر نت به یک خصیصه <code>@pname</code>، <code>@oct</code> و <code>@dur</code> نیاز دارد. به یاد داشته باشید که نام‌های نت‌ها در MEI به صورت رشته‌های متنی با حروف کوچک (از <code>a</code> تا <code>g</code>) نوشته‌ می‌شوند. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-prefill.xml b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-prefill.xml new file mode 100644 index 000000000..b4c58d1ef --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02-prefill.xml @@ -0,0 +1 @@ +<note pname="e" oct="4" dur="4" /> diff --git a/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02.xml b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02.xml new file mode 100644 index 000000000..24de607d7 --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-02/101_quickstart_step-02.xml @@ -0,0 +1,40 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <note pname="e" oct="4" dur="4"/> + <note pname="d" oct="4" dur="4"/> + <note pname="c" oct="4" dur="4"/> + <note pname="d" oct="4" dur="4"/> + <note pname="e" oct="4" dur="4"/> + <note pname="e" oct="4" dur="4"/> + <note pname="e" oct="4" dur="4"/> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-desc.html b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-desc.html new file mode 100644 index 000000000..0fe0e984e --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-desc.html @@ -0,0 +1,12 @@ +<div> + <p>تبریک! شما برای اولین بار، <b>توالی‌ای از نت‌ها</b> را در MEI رمزگذاری کردید. حالا با تنظیم مقادیر کشش زمانی نت‌ها، اولین ملودی ساده خود را رمزگذاری کنید – حتماً آهنگ "Mary had a little lamb" را می‌شناسید: + <img style="display: block; margin: .5rem auto; width: 240px;" src="./101_note-little-lamb.png" alt="Mary had a little lamb"></p> + <p class="tutorialTask"> + لطفاً سعی کنید ملودی بالا را با MEI بازتولید کنید. هر نت به خصیصه‌های <code>@pname</code>، <code>@oct</code> و <code>@dur</code> نیاز دارد. + </p> + <p> + به یاد داشته باشید که خصیصه <code>@dur</code> می‌تواند مقادیری مانند <code>"1"</code>، <code>"2"</code>، <code>"4"</code>، + <code>"8"</code> یا <code>"16"</code> داشته باشد تا ارزشهای زمانی مختلف را نشان دهد. + برای نت اول، شما به خصیصه اضافی <code>@dots</code> نیاز دارید، که باید تعداد نقطه‌ها را به عنوان یک عدد صحیح مشخص کنید – در این مورد، <code>dots="1"</code> است. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-prefill.xml b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-prefill.xml new file mode 100644 index 000000000..441e8481d --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03-prefill.xml @@ -0,0 +1,7 @@ +<note pname="e" oct="4" dur="4"/> +<note pname="d" oct="4" dur="4"/> +<note pname="c" oct="4" dur="4"/> +<note pname="d" oct="4" dur="4"/> +<note pname="e" oct="4" dur="4"/> +<note pname="e" oct="4" dur="4"/> +<note pname="e" oct="4" dur="4"/> diff --git a/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03.xml b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03.xml new file mode 100644 index 000000000..50503dfd0 --- /dev/null +++ b/_tutorials-FA/101_quickstart/step-03/101_quickstart_step-03.xml @@ -0,0 +1,40 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <note pname="e" oct="4" dur="4" dots="1"/> + <note pname="d" oct="4" dur="8"/> + <note pname="c" oct="4" dur="4"/> + <note pname="d" oct="4" dur="4"/> + <note pname="e" oct="4" dur="4"/> + <note pname="e" oct="4" dur="4"/> + <note pname="e" oct="4" dur="2"/> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/102_incipit/102_incipit.json b/_tutorials-FA/102_incipit/102_incipit.json new file mode 100644 index 000000000..5dc3026fd --- /dev/null +++ b/_tutorials-FA/102_incipit/102_incipit.json @@ -0,0 +1,482 @@ +{ + "steps": [ + { + "label": "تعریف پارتیتور و حامل", + "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": "یک المنت scoreDef نیاز دارید."}, + {"rule": "count(//mei:scoreDef/@*) = 0", "renderanyway": false, "hint": "برای المنت scoreDef به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "count(//mei:staffGrp) = 1", "renderanyway": false, "hint": "یک المنت staffGrp نیاز دارید."}, + {"rule": "count(//mei:staffGrp/@*) = 0", "renderanyway": false, "hint": "برای المنت staffGrp به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:scoreDef/mei:staffGrp", "renderanyway": false, "hint": "المنت staffGrp باید فرزند (زیرشاخه) المنت scoreDef باشد."}, + {"rule": "count(//mei:staffDef) = 1", "renderanyway": false, "hint": "یک المنت staffDef نیاز دارید."}, + {"rule": "count(//mei:staffDef/@*) = 0", "renderanyway": false, "hint": "برای المنت staffDef به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:staffGrp/mei:staffDef", "renderanyway": false, "hint": "المنت staffDef باید فرزند (زیرشاخه) المنت staffGrp باشد."} + ] + }, + { + "label": "خصیصه‌های پارتیتور و حامل", + "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": "یک المنت scoreDef نیاز دارید."}, + {"rule": "count(//mei:staffGrp) = 1", "renderanyway": false, "hint": "یک المنت staffGroup نیاز دارید."}, + {"rule": "count(//mei:staffGrp/@*) = 0", "renderanyway": false, "hint": "برای المنت staffGrp به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:scoreDef/mei:staffGrp", "renderanyway": false, "hint": "المنت staffGrp باید فرزند (زیرشاخه) المنت scoreDef باشد."}, + {"rule": "count(//mei:staffDef) = 1", "renderanyway": false, "hint": "یک المنت staffDef نیاز دارید."}, + {"rule": "//mei:staffGrp/mei:staffDef", "renderanyway": false, "hint": "المنت staffDef باید فرزند (زیرشاخه) المنت staffGrp باشد."}, + {"rule": "count(//mei:scoreDef/@*) = 2", "renderanyway": false, "hint": "برای المنت scoreDef به دو خصیصه نیاز دارید (@key.sig & @meter.sym)."}, + {"rule": "//mei:scoreDef/@key.sig = '3f'", "renderanyway": false, "hint": "به یک خصیصه‌ی @key.sig با مقدار f نیاز دارید."}, + {"rule": "//mei:scoreDef/@meter.sym = 'cut'", "renderanyway": false, "hint": "به یک خصیصه‌ی @meter.sym با مقدار t نیاز دارید."}, + {"rule": "count(//mei:staffDef/@*) = 4", "renderanyway": false, "hint": "برای المنت staffDef نیاز به چهار خصیصه دارید (@n, @lines, @clef.shape & @clef.line)."}, + {"rule": "//mei:staffDef/@n = '1'", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 نیاز دارید."}, + {"rule": "//mei:staffDef/@lines = '5'", "renderanyway": false, "hint": "به یک خصیصه‌ی @lines با مقدار 5 نیاز دارید."}, + {"rule": "//mei:staffDef/@clef.shape = 'G'", "renderanyway": false, "hint": "به یک خصیصه‌ی @clef.shape با مقدار G نیاز دارید."}, + {"rule": "//mei:staffDef/@clef.line = '2'", "renderanyway": false, "hint": "به یک خصیصه‌ی @clef.line با مقدار 2 نیاز دارید."} + ] + }, + { + "label": "میزان، حامل و لایه‌ی صدایی", + "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": "یک المنت section نیاز دارید."}, + {"rule": "count(//mei:section/@*) = 0", "renderanyway": false, "hint": "برای المنت section به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:score/mei:section", "renderanyway": false, "hint": "المنت section باید فرزند (زیرشاخه) المنت score باشد."}, + {"rule": "count(//mei:measure) = 1", "renderanyway": false, "hint": "یک المنت measure نیاز دارید."}, + {"rule": "//mei:section/mei:measure", "renderanyway": false, "hint": "المنت measure باید فرزند (زیرشاخه) المنت section باشد."}, + {"rule": "count(//mei:measure/@*) = 1", "renderanyway": false, "hint": "برای measure به یک اتریبیوت نیاز دارید (@n)."}, + {"rule": "//mei:measure/@n = '0'", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 0 نیاز دارید."}, + {"rule": "count(//mei:staff) = 1", "renderanyway": false, "hint": "یک المنت staff نیاز دارید."}, + {"rule": "//mei:measure/mei:staff", "renderanyway": false, "hint": "المنت staff باید فرزند (زیرشاخه) المنت measure باشد."}, + {"rule":"count(//mei:staff/@*) = 1", "renderanyway": false, "hint": "برای المنت staff نیاز به یک خصیصه دارید (@n)."}, + {"rule": "//mei:staff/@n = '1'", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 نیاز دارید."}, + {"rule": "count(//mei:layer) = 1", "renderanyway": false, "hint": "یک المنت layer نیاز دارید."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "برای المنت layer به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:staff/mei:layer", "renderanyway": false, "hint": "المنت layer باید فرزند (زیرشاخه) المنت staff باشد."} + ] + }, + { + "label": "اولین نت", + "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": "یک المنت note نیاز دارید."}, + {"rule": "count(//mei:note/@*) = 3", "renderanyway": false, "hint": "برای المنت note به سه خصیصه نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:note/@pname = 'b'", "renderanyway": false, "hint": "به یک خصیصه‌ی @pname با مقدار b نیاز دارید."}, + {"rule": "//mei:note/@oct = '3'", "renderanyway": false, "hint": "به یک خصیصه‌ی @oct با مقدار 3 نیاز دارید."}, + {"rule": "//mei:note/@dur = '4'", "renderanyway": false, "hint": "به یک خصیصه‌ی @dur با مقدار 4 نیاز دارید."} + ] + }, + { + "label": "دومین نت", + "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": "یک المنت section نیاز دارید."}, + {"rule": "count(//mei:section/@*) = 0", "renderanyway": false, "hint": "برای المنت section به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "count(//mei:measure) = 2", "renderanyway": false, "hint": "به دو المنت measure نیاز دارید."}, + {"rule": "//mei:section/mei:measure", "renderanyway": false, "hint": "المنت measure باید فرزند المنت section باشد."}, + {"rule": "count(//mei:section/mei:measure) = 2", "renderanyway": false, "hint": "باید دو المنت measure درون section داشته باشید."}, + {"rule": "count(//mei:measure[1]/@*) = 1 and //mei:measure[1]/@n = 0", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 0 روی اولین measure نیاز دارید."}, + {"rule": "count(//mei:measure[2]/@*) = 1 and //mei:measure[2]/@n = 1", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 روی دومین measure نیاز دارید."}, + {"rule": "//mei:measure[1]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff در اولین measure داشته باشید."}, + {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff در دومین measure داشته باشید."}, + {"rule": "count(//mei:measure/mei:staff) = 2", "renderanyway": false, "hint": "باید یک المنت staff در هر measure داشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:staff/@*) = 1", "renderanyway": false, "hint": "به یک خصیصه روی staff در اولین measure نیاز دارید (@n)."}, + {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "به یک خصیصه روی staff در دومین measure نیاز دارید (@n)."}, + {"rule": "//mei:measure[1]/mei:staff/@n = 1", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 روی اولین المنت staff نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 روی دومین المنت staff نیاز دارید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer", "renderanyway": false, "hint": "به یک المنت layer در اولین المنت staff نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "به یک المنت layer در دومین المنت staff نیاز دارید."}, + {"rule": "count(//mei:staff/mei:layer) = 2", "renderanyway": false, "hint": "باید یک المنت layer در هر المنت staff داشته باشید."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "برای المنت layer به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "باید یک المنت note در اولین layer داشته باشید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "باید یک المنت note در دومین layer داشته باشید."}, + {"rule": "count(//mei:layer/mei:note) = 2", "renderanyway": false, "hint": "باید یک المنت note در هر المنت layer داشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "به سه خصیصه روی اولین note نیاز دارید (@pname، @oct و @dur)."}, + {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "به سه خصیصه روی دومین note نیاز دارید (@pname، @oct و @dur)."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@pname = 'b'", "renderanyway": false, "hint": "به یک خصیصه‌ی @pname با مقدار b روی اولین note نیاز دارید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@oct = '3'", "renderanyway": false, "hint": "به یک خصیصه‌ی @oct با مقدار 3 روی اولین note نیاز دارید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "به یک خصیصه‌ی @dur با مقدار 4 روی اولین note نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "به یک خصیصه‌ی @pname با مقدار e روی دومین note نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@oct = '4'", "renderanyway": false, "hint": "به یک خصیصه‌ی @oct با مقدار 4 روی دومین note نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "به یک خصیصه‌ی @dur با مقدار 4 روی دومین note نیاز دارید."} + ] + }, + + { + "label": "خطوط شاهین", + "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": "به دو المنت measure نیاز دارید."}, + {"rule": "count(//mei:measure[2]/@*) = 1", "renderanyway": false, "hint": "به یک خصیصه روی measure نیاز دارید (@n)."}, + {"rule": "//mei:measure[2]/@n = 1", "renderanyway": false, "hint": "به یک خصیصه‌ی @n با مقدار 1 روی measure نیاز دارید."}, + {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff در المنت measure وجود داشته باشد."}, + {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی staff وجود داشته باشد (@n)."}, + {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه‌ی @n با مقدار 1 روی staff وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "باید یک المنت layer در المنت staff وجود داشته باشد."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "برای المنت layer به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "اولین المنت note باید فرزند المنت layer باشد."}, + {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی اولین note وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار e روی اولین note وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی اولین note وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 4 روی اولین note وجود داشته باشد."}, + {"rule": "count(//mei:beam) = '1'", "renderanyway": false, "hint": "باید یک المنت beam وجود داشته باشد."}, + {"rule": "//mei:layer/mei:beam", "renderanyway": false, "hint": "المنت beam باید فرزند المنت layer باشد."}, + {"rule": "//mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "المنت beam باید بعد از اولین نت (e flat) قرار بگیرد."}, + {"rule": "count(//mei:layer/mei:note/following-sibling::*) = 1", "renderanyway": false, "hint": "باید فقط یک المنت بعد از اولین نت (e flat) وجود داشته باشد."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "برای المنت beam به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "count(//mei:beam/mei:note) = 2", "renderanyway": false, "hint": "باید دو المنت note درون المنت beam وجود داشته باشد."}, + {"rule": "count(//mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی اولین نت به‌هم‌چسبیده وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار e روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 8 روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "count(//mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی دومین نت به‌هم‌چسبیده وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار g روی دومین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی دومین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 8 روی دومین نت به‌هم‌چسبیده وجود داشته باشد."} + ] + } + , + { + "label": "ریتم نقطه‌دار", + "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": "باید یک المنت measure وجود داشته باشد."}, + {"rule": "count(//mei:measure[2]/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی measure وجود داشته باشد (@n)."}, + {"rule": "//mei:measure[2]/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه‌ی @n با مقدار 1 روی measure وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff در المنت measure وجود داشته باشد."}, + {"rule": "count(//mei:measure[2]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی staff وجود داشته باشد (@n)."}, + {"rule": "//mei:measure[2]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه‌ی @n با مقدار 1 روی staff وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer", "renderanyway": false, "hint": "باید یک المنت layer در المنت staff وجود داشته باشد."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "برای المنت layer به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "اولین المنت note باید فرزند المنت layer باشد."}, + {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی اولین note وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار e روی اولین note وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی اولین note وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 4 روی اولین note وجود داشته باشد."}, + {"rule": "count(//mei:beam) = '1'", "renderanyway": false, "hint": "باید یک المنت beam وجود داشته باشد."}, + {"rule": "//mei:layer/mei:beam", "renderanyway": false, "hint": "المنت beam باید فرزند المنت layer باشد."}, + {"rule": "//mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "المنت beam باید بعد از اولین نت (e flat) بیافتد."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "برای المنت beam به هیچ خصیصه‌ای نیاز ندارید."}, + {"rule": "count(//mei:beam/mei:note) = 2", "renderanyway": false, "hint": "باید دو المنت note درون المنت beam وجود داشته باشد."}, + {"rule": "count(//mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی اولین نت به‌هم‌چسبیده وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار e روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 8 روی اولین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "count(//mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی دومین نت به‌هم‌چسبیده وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار g روی دومین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی دومین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 8 روی دومین نت به‌هم‌چسبیده وجود داشته باشد."}, + {"rule": "//mei:layer/mei:beam/following-sibling::mei:note", "renderanyway": false, "hint": "یک نت باید بعد از المنت beam بیافتد."}, + {"rule": "//mei:layer/mei:beam/following-sibling::mei:note/following-sibling::mei:note", "renderanyway": false, "hint": "یک نت دیگر باید بعد از نت بعد از المنت beam بیافتد."}, + {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note) = 3", "renderanyway": false, "hint": "باید مجموعاً سه نت به‌عنوان فرزند مستقیم این لایه وجود داشته باشد."}, + {"rule": "count(//mei:layer/mei:note/following-sibling::*) = 3", "renderanyway": false, "hint": "باید سه المنت بعد از اولین نت وجود داشته باشد."}, + {"rule": "count(//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@*) = 4", "renderanyway": false, "hint": "باید چهار خصیصه روی نت نقطه‌دار (سیاه نقطه‌دار) وجود داشته باشد (@pname، @oct، @dur و @dots)."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@pname = 'f'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @pname با مقدار f روی نت نقطه‌دار (سیاه نقطه‌دار) وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @oct با مقدار 4 روی نت نقطه‌دار (سیاه نقطه‌دار) وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dur با مقدار 4 روی نت نقطه‌دار (سیاه نقطه‌دار) وجود داشته باشد."}, + {"rule": "//mei:measure[2]/mei:staff/mei:layer/mei:note[2]/@dots = '1'", "renderanyway": false, "hint": "باید یک خصیصه‌ی @dots با مقدار 1 روی نت نقطه‌دار (سیاه نقطه‌دار) وجود داشته"} + ] + }, + { + "label": "یک میزان کامل", + "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": "یک المنت measure نیاز دارید."}, + {"rule": "count(//mei:measure[3]/@*) = 1", "renderanyway": false, "hint": "یک خصیصه روی المنت measure (@n) نیاز دارید."}, + {"rule": "//mei:measure[3]/@n = 2", "renderanyway": false, "hint": "یک خصیصه @n با مقدار 2 روی المنت measure نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff", "renderanyway": false, "hint": "در المنت measure باید یک المنت staff باشد."}, + {"rule": "count(//mei:measure[3]/mei:staff/@*) = 1", "renderanyway": false, "hint": "یک خصیصه روی المنت staff (@n) نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/@n = 1", "renderanyway": false, "hint": "یک خصیصه @n با مقدار 1 روی المنت staff نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer", "renderanyway": false, "hint": "در المنت staff باید یک المنت layer باشد."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "در المنت layer هیچ خصیصه‌ای نیاز نیست."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]", "renderanyway": false, "hint": "المنت اول note باید فرزند المنت layer باشد."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "سه خصیصه روی المنت اول note (@pname, @oct & @dur) نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "یک خصیصه @pname با مقدار e روی المنت اول note نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "یک خصیصه @oct با مقدار 4 روی المنت اول note نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "یک خصیصه @dur با مقدار 4 روی المنت اول note نیاز دارید."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam) = '1'", "renderanyway": false, "hint": "یک المنت beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam", "renderanyway": false, "hint": "المنت beam باید فرزند المنت layer باشد."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "المنت beam باید بعد از المنت اول note بیاید."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "در المنت beam هیچ خصیصه‌ای نیاز نیست."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note) = 2", "renderanyway": false, "hint": "دو المنت note باید درون المنت beam باشد."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "سه خصیصه روی المنت اول note در beam (@pname, @oct & @dur) نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "یک خصیصه @pname با مقدار e روی المنت اول note در beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "یک خصیصه @oct با مقدار 4 روی المنت اول note در beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "یک خصیصه @dur با مقدار 8 روی المنت اول note در beam نیاز دارید."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "سه خصیصه روی المنت دوم note در beam (@pname, @oct & @dur) نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@pname = 'g'", "renderanyway": false, "hint": "یک خصیصه @pname با مقدار g روی المنت دوم note در beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "یک خصیصه @oct با مقدار 4 روی المنت دوم note در beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "یک خصیصه @dur با مقدار 8 روی المنت دوم note در beam نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/following-sibling::mei:note", "renderanyway": false, "hint": "یک المنت note باید بعد از المنت beam بیاید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:beam/following-sibling::mei:note/following-sibling::mei:note", "renderanyway": false, "hint": "یک المنت دیگر note باید بعد از note بعد از المنت beam بیاید."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note) = 3", "renderanyway": false, "hint": "باید سه المنت note به عنوان فرزندان layer این measure وجود داشته باشد."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note/following-sibling::*) = 3", "renderanyway": false, "hint": "باید سه المنت به عنوان فرزندان note اول وجود داشته باشد."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@*) = 4", "renderanyway": false, "hint": "باید چهار خصیصه روی نت سیاه نقطه‌دار (@pname, @oct, @dur & @dots) وجود داشته باشد."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "یک خصیصه @pname با مقدار b روی نت سیاه نقطه‌دار نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "یک خصیصه @oct با مقدار 4 روی نت سیاه نقطه‌دار نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@dur = '4'", "renderanyway": false, "hint": "یک خصیصه @dur با مقدار 4 روی نت سیاه نقطه‌دار نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[2]/@dots = '1'", "renderanyway": false, "hint": "یک خصیصه @dots با مقدار 1 روی نت سیاه نقطه‌دار نیاز دارید."}, + {"rule": "count(//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی نت چنگ (@pname, @oct & @dur) وجود داشته باشد."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@pname = 'g'", "renderanyway": false, "hint": "یک خصیصه @pname با مقدار g روی نت چنگ نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "یک خصیصه @oct با مقدار 4 روی نت چنگ نیاز دارید."}, + {"rule": "//mei:measure[3]/mei:staff/mei:layer/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "یک خصیصه @dur با مقدار 8 روی نت چنگ نیاز دارید."} + ] + }, + + + { + "label": "دو میزان پایانی", + "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": "به دو المنت measure نیاز دارید."}, + {"rule": "//mei:measure[4]/following-sibling::mei:measure", "renderanyway": false, "hint": "میزان‌ها باید پی در پی باشند."}, + {"rule": "count(//mei:measure[4]/@*) = 1", "renderanyway": false, "hint": "به یک خصیصه در المنت measure اول (@n) نیاز دارید."}, + {"rule": "//mei:measure[4]/@n = 3", "renderanyway": false, "hint": "به یک خصیصه @n با مقدار 3 در المنت measure اول نیاز دارید."}, + {"rule": "count(//mei:measure[5]/@*) = 1", "renderanyway": false, "hint": "به یک خصیصه در المنت measure دوم (@n) نیاز دارید."}, + {"rule": "//mei:measure[5]/@n = 4", "renderanyway": false, "hint": "به یک خصیصه @n با مقدار 4 در المنت measure دوم نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "میزان n=3: به یک المنت staff درون المنت measure نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه در staff (@n) نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @n با مقدار 1 در staff نیاز دارید."}, + {"rule": "//mei:measure[5]/mei:staff", "renderanyway": false, "hint": "میزان n=4: به یک المنت staff درون المنت measure نیاز دارید."}, + {"rule": "count(//mei:measure[5]/mei:staff/@*) = 1", "renderanyway": false, "hint": "میزان n=4: به یک خصیصه در staff (@n) نیاز دارید."}, + {"rule": "//mei:measure[5]/mei:staff/@n = 1", "renderanyway": false, "hint": "میزان n=4: به یک خصیصه @n با مقدار 1 در staff نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "میزان n=3: به یک المنت layer درون staff نیاز دارید."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "به هیچ خصیصه‌ای در المنت‌های layer نیاز ندارید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer", "renderanyway": false, "hint": "میزان n=4: به یک المنت layer درون staff نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "میزان n=3: به دو المنت beam به عنوان فرزندان مستقیم layer نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "میزان n=3: به یک المنت note به عنوان فرزند مستقیم layer نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/following-sibling::mei:note/following-sibling::mei:beam", "renderanyway": false, "hint": "میزان n=3: المنت note باید بین دو المنت beam قرار گیرد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/*) = '3'", "renderanyway": false, "hint": "میزان n=3: به مجموع 3 المنت به عنوان فرزندان layer نیاز دارید."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "به هیچ خصیصه‌ای در المنت‌های beam نیاز ندارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "میزان n=3: به سه خصیصه در المنت note نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @pname با مقدار e در المنت note نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @oct با مقدار 5 در المنت note نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @dur با مقدار 4 در المنت note نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "میزان n=3: به چهار المنت note درون المنت beam اول نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "میزان n=3: به سه خصیصه در اولین نت دارای beam نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'a'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @pname با مقدار a در اولین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @oct با مقدار 4 در اولین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @dur با مقدار 8 در اولین نت دارای beam نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "میزان n=3: به سه خصیصه در دومین نت دارای beam نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @pname با مقدار b در دومین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @oct با مقدار 4 در دومین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @dur با مقدار 8 در دومین نت دارای beam نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "میزان n=3: به سه خصیصه در سومین نت دارای beam نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@pname = 'g'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @pname با مقدار g در سومین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @oct با مقدار 4 در سومین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @dur با مقدار 8 در سومین نت دارای beam نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "میزان n=3: به سه خصیصه در چهارمین نت دارای beam نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@pname = 'f'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @pname با مقدار f در چهارمین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '4'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @oct با مقدار 4 در چهارمین نت دارای beam نیاز دارید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "میزان n=3: به یک خصیصه @dur با مقدار 8 در چهارمین نت دارای beam نیاز دارید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/@*) = 0", "renderanyway": false, "hint": "میزان n=3: به هیچ خصیصه‌ای در المنت beam دوم نیاز ندارید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/*) = '3'", "renderanyway": false, "hint": "میزان n=4: به مجموع 3 المنت به عنوان فرزندان layer نیاز دارید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "میزان n=4: به سه خصیصه در المنت note نیاز دارید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note/@pname = 'c'", "renderanyway": false, "hint": "میزان n=4: به یک خصیصه @pname با مقدار c در المنت note نیاز دارید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note/@oct = '4'", "renderanyway": false, "hint": "میزان n=4: به یک خصیصه @oct با مقدار 4 در المنت note نیاز دارید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "میزان n=4: به یک خصیصه @dur با مقدار 4 در المنت note نیاز دارید."} + ] + }, + + { + "label": "آرتیکولاسیون‌ها", + "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": "باید سه المنت measure داشته باشید."}, + {"rule": "//mei:measure[4]/following-sibling::mei:measure", "renderanyway": false, "hint": "المنت‌های measure باید به‌دنبال هم بیایند."}, + {"rule": "count(//mei:measure[4]/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی اولین المنت measure (@n) داشته باشید."}, + {"rule": "//mei:measure[4]/@n = 3", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 3 روی اولین المنت measure داشته باشید."}, + {"rule": "count(//mei:measure[5]/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی دومین المنت measure (@n) داشته باشید."}, + {"rule": "//mei:measure[5]/@n = 4", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 4 روی دومین المنت measure داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff درون اولین المنت measure داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی staff (@n) داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 1 روی staff داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff درون دومین المنت measure داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی staff (@n) داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 1 روی staff داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "در المنت measure n=3: باید یک المنت layer درون staff داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer", "renderanyway": false, "hint": "در المنت measure n=4: باید یک المنت layer درون staff داشته باشید."}, + {"rule": "count(//mei:layer/@*) = 0", "renderanyway": false, "hint": "باید هیچ خصیصه‌ای روی المنت‌های layer نداشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "در المنت measure n=3: باید دو المنت beam به‌عنوان فرزند layer داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک المنت note به‌عنوان فرزند 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 باید بین دو المنت beam قرار گیرد."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "باید هیچ خصیصه‌ای روی المنت‌های beam نداشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=3: باید سه خصیصه روی المنت note داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @pname با مقدار e روی المنت note داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @oct با مقدار 5 روی المنت note داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @dur با مقدار 4 روی المنت note داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "در المنت measure n=3: باید چهار المنت note درون اولین المنت beam داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=3: باید سه خصیصه روی اولین note به‌صورت beamed داشته باشید (@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: باید یک خصیصه @pname با مقدار a روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @oct با مقدار 4 روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @dur با مقدار 8 روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=3: باید سه خصیصه روی دومین note به‌صورت beamed داشته باشید (@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: باید یک خصیصه @pname با مقدار b روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @oct با مقدار 4 روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @dur با مقدار 8 روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=3: باید سه خصیصه روی سومین note به‌صورت beamed داشته باشید (@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: باید یک خصیصه @pname با مقدار c روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @oct با مقدار 4 روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @dur با مقدار 8 روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=3: باید سه خصیصه روی چهارمین note به‌صورت beamed داشته باشید (@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: باید یک خصیصه @pname با مقدار d روی چهارمین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @oct با مقدار 4 روی چهارمین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=3: باید یک خصیصه @dur با مقدار 8 روی چهارمین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "در المنت measure n=4: باید چهار المنت note درون اولین المنت beam داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=4: باید سه خصیصه روی اولین note به‌صورت beamed داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @pname با مقدار e روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @oct با مقدار 4 روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @dur با مقدار 8 روی اولین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=4: باید سه خصیصه روی دومین note به‌صورت beamed داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'f'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @pname با مقدار f روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @oct با مقدار 4 روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @dur با مقدار 8 روی دومین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=4: باید سه خصیصه روی سومین note به‌صورت beamed داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@pname = 'g'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @pname با مقدار g روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @oct با مقدار 4 روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @dur با مقدار 8 روی سومین note به‌صورت beamed داشته باشید."}, + {"rule": "count(//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "در المنت measure n=4: باید سه خصیصه روی چهارمین note به‌صورت beamed داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@pname = 'g'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @pname با مقدار g روی چهارمین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '4'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @oct با مقدار 4 روی چهارمین note به‌صورت beamed داشته باشید."}, + {"rule": "//mei:measure[5]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "در المنت measure n=4: باید یک خصیصه @dur با مقدار 8 روی چهارمین note به‌صورت beamed داشته باشید."} + ] + }, + + { + "label": "نوانس (ارجاع به 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": "باید یک المنت measure با n = 0 داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff درون المنت measure داشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه روی staff (@n) داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 1 روی staff داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer", "renderanyway": false, "hint": "باید یک المنت layer درون staff داشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/@*) = 0", "renderanyway": false, "hint": "باید هیچ خصیصه‌ای روی المنت layer نداشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note) = 1", "renderanyway": false, "hint": "باید یک المنت note داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note", "renderanyway": false, "hint": "المنت note باید فرزند المنت layer باشد."}, + {"rule": "count(//mei:measure[1]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی المنت note داشته باشید (@pname, @oct & @dur)."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@pname = 'b'", "renderanyway": false, "hint": "باید یک خصیصه @pname با مقدار b روی المنت note داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@oct = '3'", "renderanyway": false, "hint": "باید یک خصیصه @oct با مقدار 3 روی المنت note داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "باید یک خصیصه @dur با مقدار 4 روی المنت note داشته باشید."}, + {"rule": "count(//mei:measure[1]/mei:dynam) = '1'", "renderanyway": false, "hint": "باید یک المنت dynam به‌عنوان فرزند measure داشته باشید."}, + {"rule": "//mei:measure[1]/mei:staff/following-sibling::mei:dynam", "renderanyway": false, "hint": "المنت dynam باید پس از المنت staff بیاید."}, + {"rule": "count(//mei:measure[1]/mei:dynam/@*) = 3", "renderanyway": false, "hint": "باید سه خصیصه روی المنت dynam داشته باشید (@staff, @tstamp & @place)."}, + {"rule": "//mei:measure[1]/mei:dynam/@staff = '1'", "renderanyway": false, "hint": "باید یک خصیصه @staff با مقدار 1 روی المنت dynam داشته باشید."}, + {"rule": "//mei:measure[1]/mei:dynam/@tstamp = '1'", "renderanyway": false, "hint": "باید یک خصیصه @tstamp با مقدار 1 روی المنت dynam داشته باشید."}, + {"rule": "//mei:measure[1]/mei:dynam/@place = 'below'", "renderanyway": false, "hint": "باید یک خصیصه @place با مقدار below روی المنت dynam داشته باشید."}, + {"rule": "//mei:measure[1]/mei:dynam/text() = 'ff'", "renderanyway": false, "hint": "باید مقدار متنی ff به‌عنوان محتوای المنت dynam داشته باشید."} + ] + }, + { + "label": "اسلرها (ارجاع به 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": "باید یک المنت measure با n = 3 وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff", "renderanyway": false, "hint": "باید یک المنت staff درون المنت measure وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/@*) = 1", "renderanyway": false, "hint": "باید یک خصیصه بر روی staff (@n) وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/@n = 1", "renderanyway": false, "hint": "باید یک خصیصه @n با مقدار 1 بر روی staff وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer", "renderanyway": false, "hint": "باید یک المنت layer درون staff وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/@*) = 0", "renderanyway": false, "hint": "نیاز به هیچ خصیصه‌ای بر روی المنت layer نیست."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam) = '2'", "renderanyway": false, "hint": "در measure n=3 باید دو المنت beam به عنوان فرزند layer وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note) = '1'", "renderanyway": false, "hint": "در measure n=3 باید یک المنت note به عنوان فرزند 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 باید بین دو المنت beam قرار گیرد."}, + {"rule": "count(//mei:beam/@*) = 0", "renderanyway": false, "hint": "نیاز به هیچ خصیصه‌ای بر روی المنت‌های beam نیست."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:note/@*) = 3", "renderanyway": false, "hint": "در measure n=3 باید سه خصیصه بر روی المنت note وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@pname = 'e'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار e بر روی المنت note وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی المنت note وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:note/@dur = '4'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 4 بر روی المنت note وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note) = 4", "renderanyway": false, "hint": "در measure n=3 باید چهار المنت note در داخل اولین المنت beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@pname = 'a'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار a بر روی اولین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@oct = '4'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 4 بر روی اولین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[1]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی اولین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@pname = 'b'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار b بر روی دومین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 4 بر روی دومین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی دومین note از اولین beam وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@*) = 3", "renderanyway": false, "hint": "در measure n=3 باید سه خصیصه بر روی سومین note از اولین beam وجود داشته باشد (@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 باید یک خصیصه @pname با مقدار c بر روی سومین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی سومین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی سومین note از اولین beam وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@*) = 3", "renderanyway": false, "hint": "در measure n=3 باید سه خصیصه بر روی چهارمین note از اولین beam وجود داشته باشد (@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 باید یک خصیصه @pname با مقدار d بر روی چهارمین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی چهارمین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[1]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی چهارمین note از اولین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@pname = 'e'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار e بر روی اولین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی اولین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[1]/@dur = '4'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 4 بر روی اولین note از دومین beam وجود داشته باشد."}, + {"rule": "count(//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@*) = 3", "renderanyway": false, "hint": "در measure n=3 باید سه خصیصه بر روی دومین note از دومین beam وجود داشته باشد (@pname، @oct و @dur)."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@pname = 'd'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار d بر روی دومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@oct = '4'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 4 بر روی دومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[2]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی دومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[3]/@pname = 'c'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار c بر روی سومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[3]/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی سومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[3]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی سومین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[4]/@pname = 'b'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @pname با مقدار b بر روی چهارمین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[4]/@oct = '5'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @oct با مقدار 5 بر روی چهارمین note از دومین beam وجود داشته باشد."}, + {"rule": "//mei:measure[4]/mei:staff/mei:layer/mei:beam[2]/mei:note[4]/@dur = '8'", "renderanyway": false, "hint": "در measure n=3 باید یک خصیصه @dur با مقدار 8 بر روی چهارمین note از دومین beam وجود داشته باشد."} + ] + } + + ], + "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-FA/102_incipit/102_incipit.md b/_tutorials-FA/102_incipit/102_incipit.md new file mode 100644 index 000000000..f57d47589 --- /dev/null +++ b/_tutorials-FA/102_incipit/102_incipit.md @@ -0,0 +1,12 @@ +--- +layout: tutorials +type: tutorial +name: "سطح پیشرفته: کدگذاری incipit" +fullname: "درس پیشرفته درباره کدگذاری نتهای ابتدایی در MEI" +data: "102_incipit.json" +--- +خوش آمدید! در این درس خواهید آموخت که چطور نتهای اول یک قطعه موسیقی (بعنوان مثال، تصویر زیر) را در MEI کدگذاری کنید. + +![Hallingdal Bataljons Marsch](./102_incipit.png) + +ضمناً این ملودی، ابتدای قطعه _Hallingdal Bataljons Marsch_، opus 1 از آهنگساز نروژی، [Johan Halvorsen](https://en.wikipedia.org/wiki/Johan_Halvorsen) (1864–1935) است. diff --git a/_tutorials-FA/102_incipit/102_incipit.png b/_tutorials-FA/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-FA/102_incipit/102_incipit_end.html b/_tutorials-FA/102_incipit/102_incipit_end.html new file mode 100644 index 000000000..3a78d280f --- /dev/null +++ b/_tutorials-FA/102_incipit/102_incipit_end.html @@ -0,0 +1,10 @@ +<div> + <h3>تبریک!</h3> + <p>حالا شما با موفقیت این درس پیشرفته را به پایان رسانده‌اید و باید بتوانید یک ملودی تک‌صدایی با چند میزان، نت‌ها و سکوتها با ارزشهای زمانی مختلف، خطوط شاهین، اسلر و دینامیک‌ها را کدگذاری کنید.</p> + + <p>اینجا چند آموزش دیگر وجود دارد که ما به عنوان گام‌های بعدی در MEI توصیه می‌کنیم. البته، شما همیشه می‌توانید به این آموزش‌ها (یا حتی همین یکی) بازگردید وقتی که می‌خواهید خودتان را در انجام کارهای خاصی در MEI یادآوری کنید.</p> + + <p> + وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer">جامعه MEI</a> به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک <a href="./199-writing-tutorials.html" target="_blank" rel="noopener, noreferrer"> درس در مورد نحوه نوشتن آموزش‌ها</a> داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html new file mode 100644 index 000000000..b8d1658d0 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html @@ -0,0 +1,8 @@ +<div > + <p class="tutorialGoal">گام اول: کدگذاری اسکلت اصلی ملودی نمونه.</p> + <p>برای کدگذاری خط ملودی این مثال، باید درباره اینکه پارتیتور و خطوط حامل در این قطعه چطور سازماندهی شده‌اند اطلاعاتی را اضافه کنیم. در MEI، این نوع اطلاعات از طریق المنت‌های <code><scoreDef></code> (تعریف پارتیتور)، <code><staffGrp></code> (گروه خطوط حامل) و <code><staffDef></code> (تعریف خط حامل) داده می‌شود. در اینجا، <code><scoreDef></code> برای مشخص کردن پارامترهای عمومی پارتیتور استفاده می‌شود، <code><staffGrp></code> اطلاعاتی در مورد گروه‌بندی خطوط حامل ارائه می‌دهد (اینکه در هر سیستم، چه حامل‌هایی داریم، و اطلاعات کلی‌ای از هرکدام از این حامل‌ها) و <code><staffDef></code> شامل تمام اطلاعات مربوط به یک خط حامل خاص است. به طور کلی، این المنت‌ها زمینه ساختاری برای محتوای موسیقی ارائه می‌دهند، مثلاً اطلاعاتی درباره تعداد، گروه‌بندی یا ترتیب خطوط حامل، کلید، علائم تغییردهنده سرکلید (مایه‌نما) یا میزان‌نما.</p> + <!-- TODO: add link to structure tutorial here --> + <p>فعلاً با اسکلت ساختاری شروع کنیم.</p> + <p class="tutorialTask">در ویرایشگر زیر، لطفاً یک المنت <code><scoreDef></code> ایجاد کنید که شامل یک المنت فرزند <code><staffGrp></code> و المنت فرزند آن <code><staffDef></code> باشد. برای دیدن خروجی بصری (رندر) کدگذاری، نیاز داریم در مراحل بعدی اطلاعات بیشتری را اضافه کنیم.</p> + </div> + \ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-prefill.xml b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-prefill.xml new file mode 100644 index 000000000..44fbfea59 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-prefill.xml @@ -0,0 +1 @@ +<!-- Your encoding should replace this line --> diff --git a/_tutorials-FA/102_incipit/step-01/102_incipit_step-01.xml b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01.xml new file mode 100644 index 000000000..e516e1e38 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01.xml @@ -0,0 +1,25 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title type="main">March + + + + + + + + + + + + + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html new file mode 100644 index 000000000..7ce4fff3c --- /dev/null +++ b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html @@ -0,0 +1,19 @@ + +
+

گام دوم: افزودن چند خصیصه به اسکلت اصلی که در مرحله قبلی ایجاد کردید. این خصیصه‌ها اطلاعات پایه‌ای در مورد خط حامل، کلید و مایه‌نمای ملودی نمونه ارائه می‌دهند.

+

شما در مرحله قبل یاد گرفتید که المنت <scoreDef> برای مشخص کردن پارامترهای عمومی پارتیتور استفاده می‌شود، و <staffDef> شامل تمام اطلاعات مربوط به یک خط حامل خاص است. به وضوح، فقط یک خط حامل در این مثال وجود دارد، بنابراین می‌توانید مایه‌نما (۳ بمل) و میزان‌نما (cut time - دو دو) را در <staffDef> اعلام کنید. اما بیایید این اطلاعات را به <scoreDef> منتقل کنیم، به فرض اینکه کلید، تنالیته و میزان‌نما برای تمامی سازها یا بخش‌های دیگر پارتیتور کامل Opus 1 Halvorsen یکسان باشد. برای مشخص کردن یک کلید یا میزان‌نمای خاص، باید از خصیصه‌های زیر در <scoreDef> استفاده کنید و آنها را به المنت <scoreDef> اضافه کنید:

+
    +
  • @key.sig (امضای کلید) – تعداد دیزها/بمل‌های موجود در امضای کلید نوشته شده، از “3f” برای ۳ بمل استفاده کنید.
  • +
  • @meter.sym (نشان متریک) – از “cut” برای میزان‌نمای دو-دو (C/).
  • +
+

درباره «کلید»، بعدتر هنگام آشنایی با المنت <staffDef> بیشتر خواهیم آموخت، زیرا مربوط به خط حامل خاص است (سازهای دیگر ممکن است کلیدهای دیگری داشته باشند). شما باید از خصیصه‌های زیر در <staffDef> استفاده کنید:

+
    +
  • @n (شماره ترتیبی) – موقعیت خط حامل در گروه <staffGrp>؛ برای اولین (و تنها) خط حامل از ”1” استفاده کنید.
  • +
  • @lines – برای خط حامل پنج خطی از “5” استفاده کنید.
  • +
  • @clef.shape – نماد کلید: از “G” برای نماد کلید G استفاده کنید.
  • +
  • @clef.line – خط حامل که کلید در آن قرار دارد (از پایین شمرده می‌شود)، از “2” استفاده کنید.
  • +
+

خصیصه‌های توضیح داده شده در بالا و مقادیر مربوطه را به <scoreDef> و <staffDef> در ویرایشگر زیر اضافه کنید. (برای رندر کردن، هنوز اطلاعات بیشتری نیاز است. با ما همراه باشید!)

+

پی‌نوشت: اگرچه ما در متن درس‌ها، خصیصه‌ها را با علامت @ نشان می‌دهیم، نباید این علامت را در کدگذاری استفاده کنیم.

+
+ \ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-prefill.xml b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-prefill.xml new file mode 100644 index 000000000..fa186612b --- /dev/null +++ b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-prefill.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-02/102_incipit_step-02.xml b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02.xml new file mode 100644 index 000000000..1b67c1a43 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02.xml @@ -0,0 +1,25 @@ + + + + + March + + + + + + + + + + + + + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html new file mode 100644 index 000000000..06db59bf4 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html @@ -0,0 +1,9 @@ + +
+

گام سوم: تنظیم یک <measure> (میزان) با یک <staff> و <layer> خالی.

+

آفرین! شما اطلاعات فراداده لازم درباره سازماندهی پارتیتور و خط حامل را تعریف کردید. در راه کدگذاری اولین نت ملودی‌مان، باید "محیط" مناسب برای آن نت را آماده کنید؛ یعنی میزان، خط حامل و لایه (بخش صدایی).

+

در MEI، المنت <section> به عنوان ظرفی برای المنت‌های <measure> عمل می‌کند و دقیقاً بعد از تعریف پارتیتور (<scoreDef>) قرار می‌گیرد. المنت‌های <measure> می‌توانند حاوی خطوط حامل متعدد (<staff>) باشند که هر یک می‌توانند لایه‌ها (بخش‌های صدایی) متعدد (<layer>) داشته باشند. المنت <layer> به عنوان المنت والد برای المنت‌های <note> در مرحله بعدی خواهد بود.

+

برای نشان دادن موقعیت شماره‌گذاری شده میزان‌ها، خطوط حامل یا لایه‌ها، می‌توان از خصیصه @n استفاده کرد.

+

میزان آفتاکت را بنویسید: در ویرایشگر، یک المنت <section> وارد کنید. داخل <section>، یک المنت <measure> خالی اضافه کنید و شماره میزان آفتاکت را "0" بگذارید. یک المنت فرزند <staff> به المنت <measure> اضافه کنید و شماره آن را "1" بگذارید (اولین خط حامل در میزان ۰). سپس یک المنت فرزند <layer> بدون شماره به المنت <staff> اضافه کنید.

+

پی‌نوشت: با توجه به اطلاعات لازم در scoreDef و section/measure، رندر اکنون قادر به تجسم کدگذاری است. شما می‌توانید با مقادیر خصیصه‌های <scoreDef> و <staffDef> بازی کنید تا ببینید که چگونه بر رندر تاثیر می‌گذارند.

+
\ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-prefill.xml b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-prefill.xml new file mode 100644 index 000000000..4d45ca5c6 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-prefill.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/_tutorials-FA/102_incipit/step-03/102_incipit_step-03.xml b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03.xml new file mode 100644 index 000000000..4d2d6c2a2 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03.xml @@ -0,0 +1,32 @@ + + + + + March + + + + + + + + + + + + + + +
+ + + + + +
+ +
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html new file mode 100644 index 000000000..b10fb1000 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html @@ -0,0 +1,16 @@ + +
+

گام چهارم: کدگذاری اولین نت ملودی نمونه.

+

پس از آماده‌سازی ساختار میزان آفتاکت در مرحله قبل، اکنون آماده هستید تا اولین نت این ملودی را کدگذاری کنید. در MEI، نت‌ها قرار است رویدادی را با زیروبمی بخصوص توصیف کنند. که در المنت‌های <note> کدگذاری می‌شوند. المنت‌های <note> می‌توانند فرزندان المنت <layer> باشند. شما می‌توانید ویژگی‌های اصلی نت مانند نام نت و کشش زمانی را با استفاده از خصیصه‌های زیر در <note> مشخص کنید:

+
    +
  • @pname (نام نت) – حروف کوچک از “a” تا “g” استفاده کنید.
  • +
  • + @oct + + (اکتاو) – از عددی استفاده کنید که اکتاو نوت را مشخص می‌کند، مثلاً  + 4 + نشان‌دهنده دوی وسط (C4) است.
  • +
  • @dur (کشش زمانی) – مثلاً برای نت چنگ، از “8” استفاده کنید.
  • +
+

در ویرایشگر زیر، اولین نت این مثال را در لایه خالی آفتاکت که در مرحله قبل ایجاد کرده‌اید، اضافه کنید. اولین نت، G4 (مقدار pname: “g”، oct: “4”) با ارزش زمانی چنگ (مقدار dur: “8”) است. اگر نیاز بود، می‌توانید پیش‌نمایش رندر فعلی را بررسی کنید.

+
diff --git a/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-prefill.xml b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-prefill.xml new file mode 100644 index 000000000..1da358e9d --- /dev/null +++ b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-prefill.xml @@ -0,0 +1,14 @@ + + + + + +
+ + + + + + + +
diff --git a/_tutorials-FA/102_incipit/step-04/102_incipit_step-04.xml b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04.xml new file mode 100644 index 000000000..5942f237f --- /dev/null +++ b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04.xml @@ -0,0 +1,34 @@ + + + + + March + + + + + + + + + + + + + + +
+ + + + + + + +
+ +
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html new file mode 100644 index 000000000..89674918d --- /dev/null +++ b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html @@ -0,0 +1,8 @@ +
+

مرحله پنجم: در این مرحله برای تلفیق آنچه در دو مرحله گذشته یاد گرفته‌اید،  هم ساختار میزان بعدی و هم نت دوم ملودی نمونه را رمزگذاری خواهید کرد.

+ +

در ویرایشگر زیر، بعد از میزانی که تابحال نوشته اید، یک المنت <measure> دیگر اضافه کنید + (@n="1") به همراه حامل (برای حامل هم: @n="1") با یک لایه صدایی (<layer>). نت دوم مثال (یک نت می‌بمل سیاه E-flat 4) را به این میزان جدید اضافه کنید. نگران ناقص بودن این میزان (باتوجه به میزان‌نما) نباشید – شما آن را در مراحل بعدی پر خواهید کرد.

+ +

پ.ن: رمزگذاری به محض وارد کردن نت جدید نمایش داده می‌شود.

+
\ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-prefill.xml b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-prefill.xml new file mode 100644 index 000000000..d09d62360 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-prefill.xml @@ -0,0 +1,10 @@ +
+ + + + + + + + +
diff --git a/_tutorials-FA/102_incipit/step-05/102_incipit_step-05.xml b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05.xml new file mode 100644 index 000000000..af06f205b --- /dev/null +++ b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05.xml @@ -0,0 +1,41 @@ + + + + + March + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-desc.html b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-desc.html new file mode 100644 index 000000000..e119e8505 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-desc.html @@ -0,0 +1,8 @@ +
+

مرحله ششم: رمزگذاری گروهی از نت‌های به هم پیوسته.

+ +

عالی! شما نت اول از اولین میزان کامل را رمزگذاری کردید. دو نت بعدی ملودی، با یک خط شاهین (beam) به هم وصل شده‌اند. برای بیان این در MEI، باید از المنت <beam> استفاده کنید. + <beam> یک ظرف برای مجموعه‌ای از رویدادهای صریحا بهم پیوسته (مانند نت‌ها، سکوت‌ها یا آکوردها) است که در بازه‌ی یک میزان میزان شروع می‌شوند و پایان می‌یابند.

+ +

در ویرایشگر زیر، لطفاً یک المنت <beam> در محل مشخص شده اضافه کنید و سپس دو المنت فرزند <note> (می‌بمل و سل) را جداگانه -داخل آن- اضافه کنید. حتماً مقادیر ویژگی‌های مربوطه را بر روی المنت‌های <note> قرار دهید.

+
\ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-prefill.xml b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-prefill.xml new file mode 100644 index 000000000..0d79010f8 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06-prefill.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-06/102_incipit_step-06.xml b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06.xml new file mode 100644 index 000000000..99f4ad15b --- /dev/null +++ b/_tutorials-FA/102_incipit/step-06/102_incipit_step-06.xml @@ -0,0 +1,45 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html new file mode 100644 index 000000000..c5325f048 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html @@ -0,0 +1,8 @@ +
+

مرحله هفتم: رمزگذاری نت‌های نقطه‌دار.

+ +

دو نت بعدی در ملودی، الگوی ریتمیک جدیدی دارند: یک نت سیاه نقطه‌دار و یک چنگ. برای رمزگذاری یک نت نقطه‌دار، باید از خصیصه @dots در المنت + <note> استفاده کنید و تعداد نقاط را به عنوان مقدار خصیصه قرار دهید، به عنوان مثال برای یک نقطه: “1” یا برای دو نقطه: “2”.

+ +

لطفاً بقیه میزان (@n=1) را در ویرایشگر زیر رمزگذاری کنید و دو المنت <note> با ارزشهای زمانی مختلف (سیاه نقطه‌دار، چنگ) را درون المنت <beam> که در مرحله قبل اضافه کرده‌اید، اضافه کنید.

+
\ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-prefill.xml b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-prefill.xml new file mode 100644 index 000000000..b04174a03 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-prefill.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-07/102_incipit_step-07.xml b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07.xml new file mode 100644 index 000000000..af6e20595 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07.xml @@ -0,0 +1,47 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html new file mode 100644 index 000000000..26bbadc04 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html @@ -0,0 +1,10 @@ +
+

مرحله هشتم: رمزگذاری کامل میزان بعدی برای مرور همه نکاتی که در این مراحل آموخته‌اید.

+ +

لطفاً میزان بعدی را (@n=2) در ویرایشگر زیر رمزگذاری کنید. یک المنت + <measure> و المنت <staff> و یک المنت <layer> که شامل چهار المنت فرزند است: یک نت سیاه <note> (E-flat 4)، یک + <beam> با دو نت چنگ <note> (E-flat 4، G4) و یک نت سیاه نقطه‌دار + <note> (B-flat 4) با یک نت چنگ <note> (G4).

+ +

به‌عنوان یک چالش اضافی، این بار کادر ویرایشگر هیچ محتوای پیش‌فرضی ندارد، بنابراین شما هیچ راهنمایی از رمزگذاری میزان‌های قبلی دریافت نمی‌کنید. البته اگر مطئن نبودید، می‌توانید به نکات راهنما که در زیر کادر ویرایشگر نمایش داده می‌شود توجه کنید.

+
diff --git a/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-prefill.xml b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-prefill.xml new file mode 100644 index 000000000..44fbfea59 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-prefill.xml @@ -0,0 +1 @@ + diff --git a/_tutorials-FA/102_incipit/step-08/102_incipit_step-08.xml b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08.xml new file mode 100644 index 000000000..a8c8ae337 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08.xml @@ -0,0 +1,60 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html new file mode 100644 index 000000000..90cc9fff2 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html @@ -0,0 +1,15 @@ + +
+

مرحله نهم: رمزگذاری نت‌های دو میزان آخر ملودی.

+ +

عالی، شما میزان دوم را رمزگذاری کردید! حالا کار را کمی سخت‌تر می‌کنیم: دو میزان آخر منتظر شما هستند! اما نگران نباشید: این درس دیگر از این مرحله سخت‌تر نخواهد شد. قول!

+ +

برای رمزگذاری دو میزان آخر، باید یک المنت دیگر را بشناسید: سکوت، با المنت <rest> و ویژگی @dur مشابه المنت + <note> رمزگذاری می‌شود. اما، بدیهی است که<rest>  خصیصه‌های @pname و @oct را ندارد. شما می‌توانید المنت‌های اضافی، مانند دینامیک، خطوط اتصال یا تاکیدها را در این مرحله نادیده بگیرید زیرا به صورت جداگانه در مراحل نهایی بعدی بررسی خواهند شد.

+ +

لطفاً دو میزان نهایی را (@n=3 & @n=4) در ویرایشگر زیر رمزگذاری کنید. المنت‌های <measure>، <staff> و + <layer> و همچنین المنت‌های متناظر <note>، + <beam> یا <rest> را اضافه کنید. یادتان باشد که المنت <beam> میتواند المنت‌های <note> را گروه‌بندی کند.

+ +

در این مرحله هم هیچ محتوای پیش‌فرضی در جعبه ویرایشگر وجود ندارد. هروقت احساس گیجی داشتید، سعی کنید به نکات راهنما (زیر کادر ویرایشگر) توجه کنید. 

+
diff --git a/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-prefill.xml b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-prefill.xml new file mode 100644 index 000000000..44fbfea59 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-prefill.xml @@ -0,0 +1 @@ + diff --git a/_tutorials-FA/102_incipit/step-09/102_incipit_step-09.xml b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09.xml new file mode 100644 index 000000000..bc8a5e4e7 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09.xml @@ -0,0 +1,86 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html new file mode 100644 index 000000000..d7e6a124e --- /dev/null +++ b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html @@ -0,0 +1,17 @@ +
+

مرحله دهم: افزودن علامت‌های اجرایی (آرتیکولاسیون).

+ +

عالی! شما کل خط ملودی را رمزگذاری کرده‌اید. حالا، بیایید المنت‌های اضافی که جا مانده‌اند، مانند دینامیک‌ها، خطوط اتصال یا تاکیدات را مرحله به مرحله بررسی کنیم.

+ +

علائم اجرایی، یعنی نشانه‌هایی از چگونگی اجرای یک نت یا آکورد، می‌توانند با المنت‌های <artic> که به عنوان فرزندهای المنت‌های <note> اعمال می‌شوند، رمزگذاری شوند. + خصیصه‌های زیر در المنت <artic> باید در این مرحله از درس استفاده شود:

+
    +
  • @artic (نوع علامت اجرایی) – نوع علامت اجرایی، مانند: تاکید + “acc”، استاکاتو “stacc”، تنوتو “ten”، در اینجا از “acc” استفاده کنید،
  • +
  • @place – موقعیت علامت اجرایی، “above” یا “below” + خط موسیقی، در اینجا از “above” استفاده کنید.
  • +
+ +

لطفاً المنت‌های <note> را که در ملودی علامت‌های اجرایی به آنها اختصاص داده شده است پیدا کنید. (آکسان‌ها بر روی نت‌های چنگ نقطه‌دار در میزان 1 و 2 و همچنین بر روی نت چنگ در میزان 3)، و سپس هر علامت اجرایی را با استفاده از المنت <artic> و ویژگی‌های متناظر رمزگذاری کنید.

+ +
diff --git a/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-prefill.xml b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-prefill.xml new file mode 100644 index 000000000..42e4a7672 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-prefill.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-10/102_incipit_step-10.xml b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10.xml new file mode 100644 index 000000000..6046bdb68 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10.xml @@ -0,0 +1,92 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html new file mode 100644 index 000000000..564dda502 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html @@ -0,0 +1,45 @@ +
+

گام یازدهم: اضافه کردن علامت دینامیک به کدگذاری ملودی نمونه.

+ +

علائم مربوط به دینامیک (نوانس) با المنت <dynam> تعریف می‌شوند. المنت + <dynam> می‌تواند برای علائم متنی دینامیک ناگهانی یا پیوسته مانند “p”، + “mf”، یا “cresc. poco a poco” استفاده شود. این مقادیر به صورت متن ساده بین تگ‌های باز + و بسته المنت <dynam> قرار می‌گیرند، مانند <dynam>pp</dynam>.

+ +

برخلاف علائم آرتیکولاسیون، المنت <dynam> یک "رویدادِ کنترل‌گر" است (مانند المنتهایی چون + دینامیک‌ها، کشش‌ها، علائم فراز، علائم پدال و غیره) که وابسته به رویدادهای دیگر (مانند نت‌ها یا سکوت‌ها) هستند. در کل، + رویدادهای کنترل‌گر به عنوان فرزند المنتهایی که برای کنترل آنها طراحی شده‌اند کدگذاری نمی‌شوند. به عبارت + ساده‌تر، در بیشتر موارد این رویدادها خارج از المنت staff قرار می‌گیرند.

+ +

روش‌های مختلفی برای اشاره به المنت‌های <note> یا <rest> (یا هر رویداد دیگر) + از یک "رویدادِ کنترل‌گر" مانند <dynam> وجود دارد:

+ +
    +
  • اول از همه، المنت <staff> که رویداد کنترل‌گر باید بر آن اعمال شود، می‌تواند با خصیصه + @staff مشخص شود.
  • +
  • همچنین، نقطه شروع یک علامت دینامیک باید با یکی از خصیصه‌های startid، tstamp، + tstamp.ges یا tstamp.real مشخص شود. نقطه پایان می‌تواند با یکی از خصیصه‌های + dur، dur.ges، endid یا tstamp2 مشخص شود. مشخص نکردن + خصیصه نقطه شروع یک خطای معنایی (semantic error) است.
  • +
+ +

در این مثال، خصیصه @tstamp برای مشخص کردن موقعیت شروع علامت دینامیک استفاده شده است. + @tstamp می‌تواند برای کدگذاری زمان آغاز در قالب زمان موسیقی، یعنی ضرب‌ها که در میزان‌نما نوشته شده + است، استفاده شود.

+ +

خصیصه‌های زیر باید در المنت <dynam> استفاده شوند:

+
    +
  • @staff – شماره شناسه استاف که یک المنت بر آن اعمال می‌شود، مانند “1” در این مثال +
  • +
  • @tstamp (شناسه زمان) – زمان آغاز در قالب زمان موسیقی، یعنی ضرب‌ها، مانند “1” یا + “2.5”
  • +
  • @place – موقعیت علامت دینامیک، “above” یا “below” استاف.
  • +
+ +

لطفاً المنت‌های <note> را در نمونه‌ای که دینامیک‌ها به آن‌ها اختصاص داده + شده است پیدا کنید. یک المنت هم‌رده <dynam> به المنت <staff> مربوطه اضافه + کنید و خصیصه‌های مورد نظر (@staff، @tstamp، @place) را اعمال کنید. فراموش + نکنید که علامت ff را بین تگ‌های باز و بسته <dynam> درج کنید.

+
diff --git a/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-prefill.xml b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-prefill.xml new file mode 100644 index 000000000..5e928f443 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-prefill.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-11/102_incipit_step-11.xml b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11.xml new file mode 100644 index 000000000..68b79953d --- /dev/null +++ b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11.xml @@ -0,0 +1,93 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + + ff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-desc.html b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-desc.html new file mode 100644 index 000000000..a9a59195f --- /dev/null +++ b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-desc.html @@ -0,0 +1,40 @@ + +
+

گام دوازدهم: اضافه کردن آخرین جزئیات جامانده در ملودی: اسلر در میزان سوم.

+ +

دو روش مختلف برای کدگذاری اسلر در MEI وجود دارد:

+
    +
  1. خصیصه @slur روی المنت <note> یا <chord> با مقدار + i=initial، m=medial یا t=terminal.
  2. +
  3. یک المنت جداگانه <slur>.
  4. +
+ +

در این گام آخر، از روش دوم استفاده خواهید کرد: مانند دینامیک‌ها، المنت‌های <slur> رویدادهای + کنترل‌گر هستند. آنها فرزندان رویدادهای مربوطه‌ای که باید کنترل کنند نیستند؛ بلکه در اکثر موارد خارج از المنت‌های + staff قرار می‌گیرند.

+ +

برای مشخص کردن نقطه شروع و پایان اسلر، می‌توان به @xml:id المنت مربوطه، مانند + <note> یا <chord>، ارجاع داد. خصیصه @xml:id شناسه‌ای است که + شامل یک رشته‌ی متنی دلخواه ولی منحصربه‌فرد است و نام‌گذاری یک المنت را در سراسر سند تنظیم می‌کند و به این ترتیب + امکان ایجاد پیوند بین المنت‌ها و منابع دیگر را فراهم می‌کند. برای المنت‌های <slur>، می‌توان + با استفاده از خصیصه‌های @startid و @endid به @xml:id یک المنت ارجاع داد. +

+ +

علاوه بر @startid و @endid، خصیصه‌های زیر باید در این مرحله استفاده شوند:

+
    +
  • @staff – شماره شناسه حامل که یک المنت بر آن اعمال می‌شود، مانند “1” در این مثال +
  • +
  • @curvedir (جهت خمیدگی) – توصیف‌کننده خمیدگی با یک اصطلاح عمومی که جهت خمیدگی را نشان می‌دهد: + “above”، “below” یا “mixed”
  • +
  • @startid – ارجاع به xml:id نت شروع اسلر، به صورت: #xml:id (به علامت # + توجه کنید)
  • +
  • @endid – ارجاع به xml:id نت پایان اسلر، به صورت: #xml:id (به علامت # + توجه کنید)
  • +
+ +

لطفاً اولین و آخرین نت را که اسلر به آنها متصل است (در داخل اولین المنت + <beam> میزان سوم) شناسایی کنید و @xml:id به هر دو المنت + <note> اضافه کنید. برای این مثال می‌توانید از مقادیر “d1e4614” و + “d1e4615” استفاده کنید. یک المنت <slur> بعد از تگ بسته المنت + <staff> اضافه کرده و خصیصه‌های مربوطه را اعمال کنید.

+
\ No newline at end of file diff --git a/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-prefill.xml b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-prefill.xml new file mode 100644 index 000000000..e2b89b377 --- /dev/null +++ b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12-prefill.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/_tutorials-FA/102_incipit/step-12/102_incipit_step-12.xml b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12.xml new file mode 100644 index 000000000..2f379bfbf --- /dev/null +++ b/_tutorials-FA/102_incipit/step-12/102_incipit_step-12.xml @@ -0,0 +1,94 @@ + + + + + March + + + + + + + + + + + + + +
+ + + + + + + ff + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
diff --git a/_tutorials-FA/103_chords/103_Chords.md b/_tutorials-FA/103_chords/103_Chords.md new file mode 100644 index 000000000..22013a9ba --- /dev/null +++ b/_tutorials-FA/103_chords/103_Chords.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "مقدماتی: آکوردها" +fullname: "درسی مختصر درباره آکوردها در MEI" +data: "103_chords.json" +--- diff --git a/_tutorials-FA/103_chords/103_chord-little-lamb.png b/_tutorials-FA/103_chords/103_chord-little-lamb.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed53a352520dfc728ae346d433ea7497b5e9e52 GIT binary patch literal 7949 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 literal 0 HcmV?d00001 diff --git a/_tutorials-FA/103_chords/103_chords.json b/_tutorials-FA/103_chords/103_chords.json new file mode 100644 index 000000000..60c137bb8 --- /dev/null +++ b/_tutorials-FA/103_chords/103_chords.json @@ -0,0 +1,155 @@ +{ + "steps": [ + { + "label":"به MEI خوش آمدید!", + "descFile": "103_chords_step-00-desc.html" + }, + { + "label": "آماده سازی", + "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": "به سه المنت note نیاز دارید."}, + {"rule": "count(//mei:note[1]/@*) = 3 and //mei:note[1]/@pname and //mei:note[1]/@oct and //mei:note[1]/@dur", "renderanyway": false, "hint": "به سه خصیصه روی اولین note نیاز دارید (@pname, @oct, و @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": "به سه خصیصه روی دومین note نیاز دارید (@pname, @oct، و @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": "به سه خصیصه روی سومین note نیاز دارید (@pname, @oct، و @dur)."}, + {"rule": "//mei:note/@pname", "renderanyway": false, "hint": "خصیصه @pname مقادیر بین 'a' تا 'g' را می‌پذیرد."}, + {"rule": "//mei:note/@oct", "renderanyway": false, "hint": "خصیصه @oct به مقادیر عددی نیاز دارد."}, + {"rule": "//mei:note/@dur", "renderanyway": false, "hint": "خصیصه @dur مقادیری مانند '1', '2', '4', '8'… را می‌پذیرد."}, + {"rule": "//mei:note[1]/@pname = 'e'", "renderanyway": true, "hint": "خصیصه @pname با مقدار 'e' روی اولین المنت note لازم است."}, + {"rule": "//mei:note[1]/@oct = '4'", "renderanyway": true, "hint": "خصیصه @oct با مقدار '4' روی اولین المنت note لازم است."}, + {"rule": "//mei:note[1]/@dur = '4'", "renderanyway": true, "hint": "خصیصه @dur با مقدار '4' روی اولین المنت note لازم است."}, + {"rule": "//mei:note[2]/@pname = 'g'", "renderanyway": true, "hint": "خصیصه @pname با مقدار 'g' روی دومین المنت note لازم است."}, + {"rule": "//mei:note[2]/@oct = '4'", "renderanyway": true, "hint": "خصیصه @oct با مقدار '4' روی دومین المنت note لازم است."}, + {"rule": "//mei:note[2]/@dur = '4'", "renderanyway": true, "hint": "خصیصه @dur با مقدار '4' روی دومین المنت note لازم است."}, + {"rule": "//mei:note[3]/@pname = 'c'", "renderanyway": true, "hint": "خصیصه @pname با مقدار 'c' روی سومین المنت note لازم است."}, + {"rule": "//mei:note[3]/@oct = '5'", "renderanyway": true, "hint": "خصیصه @oct با مقدار '5' روی سومین المنت note لازم است."}, + {"rule": "//mei:note[3]/@dur = '4'", "renderanyway": true, "hint": "خصیصه @dur با مقدار '4' روی سومین المنت note لازم است."} + ] + } + , + { + "label":"اولین آکورد", + "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": "به سه المنت note نیاز دارید."}, + {"rule": "//mei:note[1]/@pname and //mei:note[1]/@oct", "renderanyway": true, "hint": "دو خصیصه روی اولین note لازم است (@pname, @oct)."}, + {"rule": "//mei:note[2]/@pname and //mei:note[2]/@oct", "renderanyway": true, "hint": "دو خصیصه روی دومین note لازم است (@pname, @oct)."}, + {"rule": "//mei:note[3]/@pname and //mei:note[3]/@oct", "renderanyway": true, "hint": "دو خصیصه روی سومین note لازم است (@pname, @oct)."}, + {"rule": "//mei:note/@pname", "renderanyway": false, "hint": "خصیصه @pname مقادیر بین 'a' تا 'g' را می‌پذیرد."}, + {"rule": "//mei:note/@oct", "renderanyway": false, "hint": "خصیصه @oct به مقادیر عددی نیاز دارد."}, + {"rule": "//mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "یک note نیاز دارید که خصیصه @pname مقدار 'e' و خصیصه @oct مقدار '4' داشته باشد."}, + {"rule": "//mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "یک note نیاز دارید که خصیصه @pname مقدار 'g' و خصیصه @oct مقدار '4' داشته باشد."}, + {"rule": "//mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "یک note نیاز دارید که خصیصه @pname مقدار 'c' و خصیصه @oct مقدار '5' داشته باشد."}, + {"rule": "count(//mei:chord) = 1", "renderanyway": false, "hint": "به یک المنت chord نیاز دارید."}, + {"rule": "//mei:chord/mei:note", "renderanyway": false, "hint": "المنت chord باید همه المنت‌های note را دربر بگیرد."}, + {"rule": "count(//mei:note[1]/@*) = 2", "renderanyway": true, "hint": "روی اولین note تنها به دو خصیصه نیاز دارید (@pname, @oct)."}, + {"rule": "count(//mei:note[2]/@*) = 2", "renderanyway": true, "hint": "روی دومین note تنها به دو خصیصه نیاز دارید (@pname, @oct)."}, + {"rule": "count(//mei:note[3]/@*) = 2", "renderanyway": true, "hint": "روی سومین note تنها به دو خصیصه نیاز دارید (@pname, @oct)."}, + {"rule": "count(//mei:chord/@*) = 1 and //mei:chord/@dur", "renderanyway": true, "hint": "یک خصیصه روی chord لازم دارید (@dur)."}, + {"rule": "//mei:chord/@dur", "renderanyway": true, "hint": "خصیصه @dur مقادیری مانند '1', '2', '4', '8'… را می‌پذیرد."}, + {"rule": "//mei:chord/@dur = '4'", "renderanyway": true, "hint": "خصیصه @dur باید مقدار '4' روی المنت chord داشته باشد."} + ] + }, + { + "label": "یک زنجیره آکوریِ ساده", + "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": "به چهار المنت chord نیاز دارید."}, + {"rule": "count(//mei:chord[1]/@*) = 1 and //mei:chord[1]/@dur", "renderanyway": true, "hint": "به یک خصیصه روی اولین آکورد (@dur) نیاز دارید."}, + {"rule": "//mei:chord[1]/@dur = '4'", "renderanyway": true, "hint": "روی اولین آکورد، به یک خصیصه @dur با مقدار 4 نیاز دارید."}, + {"rule": "count(//mei:chord[2]/@*) = 1 and //mei:chord[2]/@dur", "renderanyway": true, "hint": "به یک خصیصه روی دومین آکورد (@dur) نیاز دارید."}, + {"rule": "//mei:chord[2]/@dur = '4'", "renderanyway": true, "hint": "روی دومین آکورد، به یک خصیصه @dur با مقدار 4 نیاز دارید."}, + {"rule": "count(//mei:chord[3]/@*) = 1 and //mei:chord[3]/@dur", "renderanyway": true, "hint": "به یک خصیصه روی سومین آکورد (@dur) نیاز دارید."}, + {"rule": "//mei:chord[3]/@dur = '4'", "renderanyway": true, "hint": "روی سومین آکورد، به یک خصیصه @dur با مقدار 4 نیاز دارید."}, + {"rule": "count(//mei:chord[4]/@*) = 1 and //mei:chord[4]/@dur", "renderanyway": true, "hint": "به یک خصیصه روی آخرین آکورد (@dur) نیاز دارید."}, + {"rule": "//mei:chord[4]/@dur = '4'", "renderanyway": true, "hint": "روی آخرین آکورد، به یک خصیصه @dur با مقدار 4 نیاز دارید."}, + + {"rule": "count(//mei:chord[1]/mei:note) = 3", "renderanyway": true, "hint": "به سه المنت note برای اولین آکورد نیاز دارید."}, + {"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": "به دو خصیصه روی اولین نت (@pname, @oct) از اولین آکورد نیاز دارید."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'e' and @oct = '4']", "renderanyway": true, "hint": "در اولین آکورد، به نتی با خصیصه @pname با مقدار e و خصیصه @oct با مقدار 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": "به دو خصیصه روی دومین نت (@pname, @oct) از اولین آکورد نیاز دارید."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "در اولین آکورد، به نتی با خصیصه @pname با مقدار g و خصیصه @oct با مقدار 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": "به دو خصیصه روی سومین نت (@pname, @oct) از اولین آکورد نیاز دارید."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "در اولین آکورد، به نتی با خصیصه @pname با مقدار c و خصیصه @oct با مقدار 5 نیاز دارید."}, + + {"rule": "count(//mei:chord[2]/mei:note) = 3", "renderanyway": true, "hint": "به سه المنت note برای دومین آکورد نیاز دارید."}, + {"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": "به دو خصیصه روی اولین نت (@pname, @oct) از دومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[2]/mei:note[@pname = 'f' and @oct = '4']", "renderanyway": true, "hint": "در دومین آکورد، به نتی با خصیصه @pname با مقدار f و خصیصه @oct با مقدار 4 نیاز دارید."}, + {"rule": "count(//mei:chord[2]/mei:note[2]/@*) = 2 and //mei:chord[2]/mei:note[2]/@pname and //mei:chord[2]/mei:note[2]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی دومین نت (@pname, @oct) از دومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[2]/mei:note[@pname = 'a' and @oct = '4']", "renderanyway": true, "hint": "در دومین آکورد، به نتی با خصیصه @pname با مقدار a و خصیصه @oct با مقدار 4 نیاز دارید."}, + {"rule": "count(//mei:chord[2]/mei:note[3]/@*) = 2 and //mei:chord[2]/mei:note[3]/@pname and //mei:chord[2]/mei:note[3]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی سومین نت (@pname, @oct) از دومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[2]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "در دومین آکورد، به نتی با خصیصه @pname با مقدار c و خصیصه @oct با مقدار 5 نیاز دارید."}, + + {"rule": "count(//mei:chord[3]/mei:note) = 3", "renderanyway": true, "hint": "به سه المنت note برای سومین آکورد نیاز دارید."}, + {"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": "به دو خصیصه روی اولین نت (@pname, @oct) از سومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[3]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "در سومین آکورد، به نتی با خصیصه @pname با مقدار e و خصیصه @oct با مقدار 5 نیاز دارید."}, + {"rule": "count(//mei:chord[3]/mei:note[2]/@*) = 2 and //mei:chord[3]/mei:note[2]/@pname and //mei:chord[3]/mei:note[2]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی دومین نت (@pname, @oct) از سومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[3]/mei:note[@pname = 'g' and @oct = '5']", "renderanyway": true, "hint": "در سومین آکورد، به نتی با خصیصه @pname با مقدار g و خصیصه @oct با مقدار 5 نیاز دارید."}, + {"rule": "count(//mei:chord[3]/mei:note[3]/@*) = 2 and //mei:chord[3]/mei:note[3]/@pname and //mei:chord[3]/mei:note[3]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی سومین نت (@pname, @oct) از سومین آکورد نیاز دارید."}, + {"rule": "//mei:chord[3]/mei:note[@pname = 'c' and @oct = '6']", "renderanyway": true, "hint": "در سومین آکورد، به نتی با خصیصه @pname با مقدار c و خصیصه @oct با مقدار 6 نیاز دارید."}, + + {"rule": "count(//mei:chord[4]/mei:note) = 3", "renderanyway": true, "hint": "به سه المنت note برای آخرین آکورد نیاز دارید."}, + {"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": "به دو خصیصه روی اولین نت (@pname, @oct) از آخرین آکورد نیاز دارید."}, + {"rule": "//mei:chord[4]/mei:note[@pname = 'f' and @oct = '5']", "renderanyway": true, "hint": "در آخرین آکورد، به نتی با خصیصه @pname با مقدار f و خصیصه @oct با مقدار 5 نیاز دارید."}, + {"rule": "count(//mei:chord[4]/mei:note[2]/@*) = 2 and //mei:chord[4]/mei:note[2]/@pname and //mei:chord[4]/mei:note[2]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی دومین نت (@pname, @oct) از آخرین آکورد نیاز دارید."}, + {"rule": "//mei:chord[4]/mei:note[@pname = 'a' and @oct = '5']", "renderanyway": true, "hint": "در آخرین آکورد، به نتی با خصیصه @pname با مقدار a و خصیصه @oct با مقدار 5 نیاز دارید."}, + {"rule": "count(//mei:chord[4]/mei:note[3]/@*) = 2 and //mei:chord[4]/mei:note[3]/@pname and //mei:chord[4]/mei:note[3]/@oct", "renderanyway": true, "hint": "به دو خصیصه روی سومین نت (@pname, @oct) از آخرین آکورد نیاز دارید."}, + {"rule": "//mei:chord[4]/mei:note[@pname = 'c' and @oct = '6']", "renderanyway": true, "hint": "در آخرین آکورد، به نتی با خصیصه @pname با مقدار c و خصیصه @oct با مقدار 6 نیاز دارید."} + ] + } + , + { + "label": "یک زنجیره آکوریِ بسط یافته", + "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": "المنت‌های chord باید هفت عدد باشند."}, + {"rule": "count(//mei:chord[1]/@*) = 2 and //mei:chord[1]/@dur and //mei:chord[1]/@dots", "renderanyway": true, "hint": "شما به دو خصیصه در المنت اول chord نیاز دارید (@dur، @dots)."}, + {"rule": "//mei:chord[1]/@dur = '4'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 4 در المنت اول chord نیاز دارید."}, + {"rule": "//mei:chord[1]/@dots = '1'", "renderanyway": true, "hint": "شما به یک خصیصه @dots با مقدار 1 در المنت اول chord نیاز دارید."}, + {"rule": "count(//mei:chord[2]/@*) = 1 and //mei:chord[2]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت دوم chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[2]/@dur = '8'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 8 در المنت دوم chord نیاز دارید."}, + {"rule": "count(//mei:chord[3]/@*) = 1 and //mei:chord[3]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت سوم chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[3]/@dur = '4'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 4 در المنت سوم chord نیاز دارید."}, + {"rule": "count(//mei:chord[4]/@*) = 1 and //mei:chord[4]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت چهارم chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[4]/@dur = '4'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 4 در المنت چهارم chord نیاز دارید."}, + {"rule": "count(//mei:chord[5]/@*) = 1 and //mei:chord[5]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت پنجم chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[5]/@dur = '4'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 4 در المنت پنجم chord نیاز دارید."}, + {"rule": "count(//mei:chord[6]/@*) = 1 and //mei:chord[6]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت ششم chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[6]/@dur = '4'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 4 در المنت ششم chord نیاز دارید."}, + {"rule": "count(//mei:chord[7]/@*) = 1 and //mei:chord[7]/@dur", "renderanyway": true, "hint": "شما به یک خصیصه در المنت آخر chord نیاز دارید (@dur)."}, + {"rule": "//mei:chord[7]/@dur = '2'", "renderanyway": true, "hint": "شما به یک خصیصه @dur با مقدار 2 در المنت آخر chord نیاز دارید."}, + {"rule": "count(//mei:chord[1]/mei:note) = 3", "renderanyway": true, "hint": "شما به سه المنت note در المنت اول 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": "شما به دو خصیصه در اولین المنت note از المنت اول chord نیاز دارید (@pname، @oct)."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'g' and @oct = '4']", "renderanyway": true, "hint": "در المنت اول chord، شما به یک note با خصیصه @pname با مقدار g و خصیصه @oct با مقدار 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": "شما به دو خصیصه در دومین المنت note از المنت اول chord نیاز دارید (@pname، @oct)."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'c' and @oct = '5']", "renderanyway": true, "hint": "در المنت اول chord، شما به یک note با خصیصه @pname با مقدار c و خصیصه @oct با مقدار 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": "شما به دو خصیصه در سومین المنت note از المنت اول chord نیاز دارید (@pname، @oct)."}, + {"rule": "//mei:chord[1]/mei:note[@pname = 'e' and @oct = '5']", "renderanyway": true, "hint": "در المنت اول chord، شما به یک note با خصیصه @pname با مقدار e و خصیصه @oct با مقدار 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-FA/103_chords/103_chords_end.html b/_tutorials-FA/103_chords/103_chords_end.html new file mode 100644 index 000000000..ea65678e0 --- /dev/null +++ b/_tutorials-FA/103_chords/103_chords_end.html @@ -0,0 +1,12 @@ +
+

تبریک!

+

شما به‌تازگی این آموزش مقدماتی در مورد آکوردها در MEI را به پایان رسانده‌اید و باید بتوانید توالی‌های ساده‌ای از آکوردها را با MEI کدگذاری کنید. +

+

+ البته، موارد زیادی برای یک فایل جامع MEI مورد نیاز است – ما تمام اطلاعات ساختاری در مورد المنت‌های measure و staff را کنار گذاشته‌ایم، و همچنین باید یاد بگیرید که چگونه میزان‌نما، مایه‌نما و کلیدهای نت‌نویسی را تنظیم کنید. به عنوان مراحل بعدی با MEI، پیشنهاد می‌کنیم آموزش ما در مورد سکوت‌ها را دنبال کنید. + البته، همیشه میتوانید برای یادگیری این درس‌ها، می‌توانید به این آموزش‌ها بازگردید. +

+

+ وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با جامعه MEI به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک درس در مورد نحوه نوشتن آموزش‌ها داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) +

+
\ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-00/103_chords_step-00-desc.html b/_tutorials-FA/103_chords/step-00/103_chords_step-00-desc.html new file mode 100644 index 000000000..720683dd3 --- /dev/null +++ b/_tutorials-FA/103_chords/step-00/103_chords_step-00-desc.html @@ -0,0 +1,13 @@ +
+

در این آموزش، کدگذاری آکوردها را در MEI خواهید آموخت.

+

از آنجایی که مفهوم آکورد (چه در تئوری موسیقی و چه در MEI) بر اساس نت‌ها تعریف می‌شود، توصیه می‌کنیم قبل از این + آموزش با کدگذاری نت‌ها آشنا شوید، مثلاً در درس آموزش سریع. +

+

کدی که می‌نویسید فوراً رندر می‌شود و خروجی، به تغییرات شما واکنش نشان می‌دهد. به این ترتیب، می‌توانید ارتباط + پارامترهای مختلف را بهتر درک کنید.

+

پس از اینکه این آموزش را به پایان رساندید، ممکن است بخواهید دیگر آموزش‌هایی را که جنبه‌های مهم دیگری از MEI را + معرفی می‌کنند ببینید. از این آموزش‌ها می‌توانید به عنوان مرجعی ساده برای یادآوری اصول MEI هم بهره ببرید. – شما + همیشه می‌توانید به آنها بازگردید.

+

برای شروع، لطفاً دکمه "Continue" را در پایین سمت راست این پاراگراف فشار دهید.

+
\ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html b/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html new file mode 100644 index 000000000..1feaee6fc --- /dev/null +++ b/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html @@ -0,0 +1,31 @@ +
+

+ گام اول: چند نت‌ها را برای یک آکورد فراهم کنید. +

+

در MEI، مفهوم یک آکورد به معنای "صدا دادن همزمان دو یا چند نت در یک لایه‌ی صوتی با مدت زمان مشابه" است (به + مشخصات المنت + مراجعه کنید). بنابراین، یک آکورد از دو یا چند المنت نت که به یک صدا (لایه) تعلق دارند و ارزش زمانی یکسانی دارند + ساخته شده‌است. (مواردی وجود دارند که ممکن است نخواهید همه نت‌های آکورد ارزش زمانی یکسانی داشته باشند، اما این + موارد در این آموزش پایه‌ای نیستند.) +

+

برای کدگذاری این "صدادهی همزمان"، المنت <chord> در MEI استفاده می‌شود. استفاده از آن ساده است: + چندین المنت <note> در همان لایه با یک المنت <chord> محصور شده و خصیصه کشش + زمانی (@dur) از نت‌ها به المنت <chord> منتقل می‌شود (زیرا ارزش زمانی برای همه نت‌ها یکسان + است). با این حال، اینکه ابتدا المنت بیرونی <chord> را بنویسید تا برخی المنت‌های + <note> داخلی اضافه کنید، یا ابتدا با نت‌ها شروع کنید و سپس آنها را در یک المنت + <chord> محصور کنید، در عمل تفاوتی ندارد.

+

برای این آموزش، بیایید به رویکرد دوم پایبند باشیم: این یعنی ابتدا به چند نت نیاز داریم.

+

در ویرایشگر زیر، لطفاً سه المنت <note> زیر را وارد کنید:

+ +
    +
  • <note pname="e" oct="4" dur="4"/>
  • +
  • <note pname="g" oct="4" dur="4"/>
  • +
  • <note pname="c" oct="5" dur="4"/>
  • +
+ +

شما باید سه نت را به ترتیب (یکی پس از دیگری) ببینید. فعلاً شبیه به آکورد نیست. اما نگران نباشید؛ در مرحله بعدی به + آن خواهیم پرداخت. تا آن زمان، می‌توانید با مقادیر خصیصه‌ها بازی کنید تا ببینید چگونه بر خروجی تأثیر می‌گذارند. + همچنین راهنمایی‌هایی درباره نحوه نوشتن کد صحیح خواهید دید. هر زمان آماده شدید، مطمئن شوید که کد صحیح در ویرایشگر + وجود دارد و سپس دکمه "ادامه" را فشار دهید.

+
\ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-01/103_chords_step-01-prefill.xml b/_tutorials-FA/103_chords/step-01/103_chords_step-01-prefill.xml new file mode 100644 index 000000000..b28124ba0 --- /dev/null +++ b/_tutorials-FA/103_chords/step-01/103_chords_step-01-prefill.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-01/103_chords_step-01.xml b/_tutorials-FA/103_chords/step-01/103_chords_step-01.xml new file mode 100644 index 000000000..e49836f7c --- /dev/null +++ b/_tutorials-FA/103_chords/step-01/103_chords_step-01.xml @@ -0,0 +1,36 @@ + + + + + + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <note pname="e" oct="4" dur="4"/> + <note pname="g" oct="4" dur="4"/> + <note pname="c" oct="5" dur="4"/> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html b/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html new file mode 100644 index 000000000..5e27d06cc --- /dev/null +++ b/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html @@ -0,0 +1,16 @@ +<div> + <p class="tutorialGoal"> + گام دوم: یک آکورد ساده (تریاد) را کدگذاری کنید. + </p> + <p>خوب، حالا وقت آن است که از این سه المنت <code><note></code> یک <code><chord></code> بسازید. همانطور + که در مرحله قبل ذکر شد، باید المنت‌های نت را در یک المنت <code><chord></code> محصور کرده و خصیصه‌های مدت + زمان را از نت‌ها به آکورد منتقل کنید.</p> + <p class="tutorialTask">در ویرایشگر زیر، سه المنت <code><note></code> را در یک المنت + <code><chord></code> محصور کنید (یعنی تگ آغازین <code><chord></code> را قبل از اولین نت و تگ پایانی + را بعد از آخرین نت وارد کنید). حالا باید سه نت به جای اینکه به ترتیب قرار بگیرند، به صورت عمودی مرتب شوند، اما + هنوز مدت زمان صحیحی ندارند. بنابراین خصیصه‌های مدت زمان را از همه نت‌ها حذف کرده و به آکورد اضافه‌اش کنید. مدت + زمان نت سیاه (<code>@dur="4"</code>) را نگه دارید.</p> + <p>شما باید آکورد را در خروجی ببینید. دوباره، می‌توانید با مقادیر خصیصه‌ها بازی کنید تا ببینید چگونه بر خروجی تأثیر + می‌گذارند. هر زمان آماده شدید، مطمئن شوید که کد صحیح در ویرایشگر وجود دارد و سپس دکمه "ادامه" را در پایین سمت + راست فشار دهید.</p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-02/103_chords_step-02-prefill.xml b/_tutorials-FA/103_chords/step-02/103_chords_step-02-prefill.xml new file mode 100644 index 000000000..be6b1777a --- /dev/null +++ b/_tutorials-FA/103_chords/step-02/103_chords_step-02-prefill.xml @@ -0,0 +1,5 @@ +<!-- Your encoding should replace this line --> + <note pname="e" oct="4" dur="4"/> + <note pname="g" oct="4" dur="4"/> + <note pname="c" oct="5" dur="4"/> +<!-- Your encoding should replace this line --> diff --git a/_tutorials-FA/103_chords/step-02/103_chords_step-02.xml b/_tutorials-FA/103_chords/step-02/103_chords_step-02.xml new file mode 100644 index 000000000..9a0b47ddd --- /dev/null +++ b/_tutorials-FA/103_chords/step-02/103_chords_step-02.xml @@ -0,0 +1,38 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <chord dur="4"> + <note pname="e" oct="4" /> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + </chord> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html b/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html new file mode 100644 index 000000000..baa203659 --- /dev/null +++ b/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html @@ -0,0 +1,14 @@ +<div> + <p class="tutorialGoal"> + گام سوم: یک توالی ساده از آکوردها کدگذاری کنید. + </p> + <p>عالی! شما یک آکورد را در MEI کدگذاری کرده‌اید! حالا بیایید در ادامه، چند آکورد دیگر اضافه کنیم تا یک زنجیره‌ی + آکوردی ساده را کدگذاری کنیم: + + <img style="display: block; margin: .5rem auto; width: 240px;" src="./103_chord-sequence.png" + alt="Simple chord sequence"> + </p> + <p class="tutorialTask">در ویرایشگر زیر، لطفاً سعی کنید زنجیره آکوردی بالا را با MEI بازتولید کنید. نت‌ها با + المنت‌های آکورد محصور می‌شوند. هر آکورد به یک خصیصه <code>@dur</code> نیاز دارد و هر نت به خصیصه‌های + <code>@pname</code> و <code>@oct</code> نیاز دارد.</p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-03/103_chords_step-03-prefill.xml b/_tutorials-FA/103_chords/step-03/103_chords_step-03-prefill.xml new file mode 100644 index 000000000..217271f97 --- /dev/null +++ b/_tutorials-FA/103_chords/step-03/103_chords_step-03-prefill.xml @@ -0,0 +1,5 @@ +<chord dur="4"> + <note pname="e" oct="4" /> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> +</chord> diff --git a/_tutorials-FA/103_chords/step-03/103_chords_step-03.xml b/_tutorials-FA/103_chords/step-03/103_chords_step-03.xml new file mode 100644 index 000000000..3d6d62dcf --- /dev/null +++ b/_tutorials-FA/103_chords/step-03/103_chords_step-03.xml @@ -0,0 +1,53 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <chord dur="4"> + <note pname="e" oct="4" /> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + </chord> + <chord dur="4"> + <note pname="f" oct="4" /> + <note pname="a" oct="4" /> + <note pname="c" oct="5" /> + </chord> + <chord dur="4"> + <note pname="d" oct="4" /> + <note pname="g" oct="4" /> + <note pname="b" oct="4" /> + </chord> + <chord dur="4"> + <note pname="e" oct="4" /> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + </chord> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/103_chords/step-04/103_chords_step-04-desc.html b/_tutorials-FA/103_chords/step-04/103_chords_step-04-desc.html new file mode 100644 index 000000000..81e638069 --- /dev/null +++ b/_tutorials-FA/103_chords/step-04/103_chords_step-04-desc.html @@ -0,0 +1,26 @@ +<div> + <p class="tutorialGoal"> + گام چهارم: یک توالی گسترده‌تر از آکوردها کدگذاری کنید. + </p> + <p>بسیار خب، توانستید توالی ساده‌ای از آکوردها را در MEI کدگذاری کنید. حالا در ادامه، بیایید فیگوهای ریتمیک گوناگون + را برای یک توالی مبسوط تر از آکوردها داشته باشیم. در واقع، ما به یک هارمونیزه کردن نمونه "Mary had a little + lamb" از <a href="./101-quickstart.html" target="_blank" rel="noopener, noreferrer">آموزش سریع</a> خواهیم رسید: + + <img style="display: block; margin: .5rem auto; width: 240px;" src="./103_chord-little-lamb.png" + alt="Extended chord sequence"> + </p> + <p class="tutorialTask">در ویرایشگر زیر، لطفاً سعی کنید توالی آکورد بالا را با MEI بازتولید کنید. نت‌ها با المنت‌های + آکورد محصور می‌شوند. هر آکورد به یک خصیصه <code>@dur</code> نیاز دارد و هر نت به خصیصه‌های <code>@pname</code> و + <code>@oct</code> نیاز دارد.</p> + <p>به خاطر داشته باشید که خصیصه <code>@dur</code> می‌تواند مقادیری مانند <code>"1"</code>، <code>"2"</code>، + <code>"4"</code>، <code>"8"</code> یا <code>"16"</code> داشته باشد تا ارزش‌های زمانی مختلف را نشان دهد. + برای اولین آکورد، به یک خصیصه <code>@dur="2"</code> نیاز داریم.</p> + <p> + برای آکورد اول، به خصیصه <code>@dots</code> هم نیاز دارید، که باید تعداد نقطه‌ها را به‌صورت یک عدد صحیح + مشخص کنید – در این مورد، <code>dots="1"</code> است. + </p> + <p> + نکته: هنگامی که ساختار آکوردی را ایجاد کردید، باید بتوانید بلوک حاوی سه المنت <code><note></code> را کپی و + پیست کنید. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/103_chords/step-04/103_chords_step-04-prefill.xml b/_tutorials-FA/103_chords/step-04/103_chords_step-04-prefill.xml new file mode 100644 index 000000000..8c14d778f --- /dev/null +++ b/_tutorials-FA/103_chords/step-04/103_chords_step-04-prefill.xml @@ -0,0 +1,5 @@ +<chord dur="4"> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + <note pname="e" oct="5" /> +</chord> diff --git a/_tutorials-FA/103_chords/step-04/103_chords_step-04.xml b/_tutorials-FA/103_chords/step-04/103_chords_step-04.xml new file mode 100644 index 000000000..129092268 --- /dev/null +++ b/_tutorials-FA/103_chords/step-04/103_chords_step-04.xml @@ -0,0 +1,68 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?> + <chord dur="4" dots="1"> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + <note pname="e" oct="5" /> + </chord> + <chord dur="8"> + <note pname="f" oct="4" /> + <note pname="b" oct="4" /> + <note pname="d" oct="5" /> + </chord> + <chord dur="4"> + <note pname="e" oct="4" /> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + </chord> + <chord dur="4"> + <note pname="f" oct="4" /> + <note pname="b" oct="4" /> + <note pname="d" oct="5" /> + </chord> + <chord dur="4"> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + <note pname="e" oct="5" /> + </chord> + <chord dur="4"> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + <note pname="e" oct="5" /> + </chord> + <chord dur="2"> + <note pname="g" oct="4" /> + <note pname="c" oct="5" /> + <note pname="e" oct="5" /> + </chord> + <?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/104_rests/104_rests-multirest.png b/_tutorials-FA/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-FA/104_rests/104_rests-spaces.png b/_tutorials-FA/104_rests/104_rests-spaces.png new file mode 100644 index 0000000000000000000000000000000000000000..94dd19a4c5f3a7ce0387d41f75dc3f59faf129ff GIT binary patch literal 4048 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 Y8kN`=-HC%2a;9*ACEUiW0_GO=ACl>b8~^|S literal 0 HcmV?d00001 diff --git a/_tutorials-FA/104_rests/104_rests.json b/_tutorials-FA/104_rests/104_rests.json new file mode 100644 index 000000000..b5860072e --- /dev/null +++ b/_tutorials-FA/104_rests/104_rests.json @@ -0,0 +1,74 @@ +{ + "steps": [ + [ + { + "label": "خوش‌ آمدید", + "descFile": "104_rests_step-00-desc.html", + "xmlFile": "104_rests_step-00.xml", + "editorLines": 1, + "xpaths": [ + { "rule": "count(//mei:rest) = 1", "renderanyway": false, "hint": "باید یک المنت سکوت داشته باشید." }, + { "rule": "count(//mei:rest/@*) = 1 and //mei:rest/@dur", "renderanyway": false, "hint": "باید یک خصیصه @dur داشته باشید." }, + { "rule": "//mei:rest/@dur = '4'", "renderanyway": true, "hint": "خصیصه @dur از مقادیری مانند '1'، '2' یا '4' استفاده می‌کند. از مقدار آخر برای سکوت نت سیاه استفاده کنید." } + ] + }, + { + "label": "ارزش‌های زمانی مختلف", + "editorLines": 5, + "descFile": "104_rests_step-01-desc.html", + "xmlFile": "104_rests_step-00.xml", + "xpaths": [ + { "rule": "count(//mei:rest) = 5", "renderanyway": true, "hint": "باید پنج المنت سکوت کدگذاری کنید." }, + { "rule": "//mei:rest[1]/@dur and //mei:rest[1]/@dur = '1'", "renderanyway": true }, + { "rule": "//mei:rest[2]/@dur and //mei:rest[2]/@dur = '2'", "renderanyway": true }, + { "rule": "//mei:rest[3]/@dur and //mei:rest[3]/@dur = '4' and //mei:rest[3]/@dots and //mei:rest[3]/@dots = '1'", "renderanyway": true }, + { "rule": "//mei:rest[4]/@dur and //mei:rest[4]/@dur = '8'", "renderanyway": true }, + { "rule": "//mei:rest[5]/@dur and //mei:rest[5]/@dur = '16'", "renderanyway": true } + ] + }, + { + "label": "سکوت‌های یک میزانی", + "editorLines": 1, + "descFile": "104_rests_step-02-desc.html", + "xmlFile": "104_rests_step-02.xml", + "prefillFile": "104_rests_step-02-prefill.xml", + "xpaths": [ + { "rule": "count(//mei:mRest) = 1", "renderanyway": true, "hint": "باید یک المنت mRest داشته باشید." }, + { "rule": "count(//mei:mRest/@*) = 0", "renderanyway": true, "hint": "المنت mRest نباید خصیصه‌ای داشته باشد." }, + { "rule": "count(//mei:layer/mei:*) = 1", "renderanyway": true, "hint": "باید تنها یک المنت mRest کدگذاری کنید." } + ] + }, + { + "label": "سکوت‌های چند میزانی", + "editorLines": 1, + "descFile": "104_rests_step-03-desc.html", + "xmlFile": "104_rests_step-02.xml", + "xpaths": [ + { "rule": "count(//mei:multiRest) = 1", "renderanyway": true, "hint": "باید یک المنت multiRest داشته باشید." }, + { "rule": "count(//mei:layer/mei:*) = 1", "renderanyway": true, "hint": "باید تنها یک المنت multiRest کدگذاری کنید." }, + { "rule": "count(//mei:multiRest/@*) = 1 and //mei:multiRest/@num", "renderanyway": true, "hint": "المنت multiRest باید یک خصیصه (@num) داشته باشد." }, + { "rule": "//mei:multiRest/@num = '15'", "renderanyway": true, "hint": "المنت multiRest باید دارای مدت زمانی معادل 15 میزان باشد." } + ] + }, + { + "label": "فضاهای خالی / سکوت‌های نامرئی", + "editorLines": 6, + "descFile": "104_rests_step-04-desc.html", + "xmlFile": "104_rests_step-04.xml", + "prefillFile": "104_rests_step-04-prefill.xml", + "xpaths": [ + { "rule": "//mei:space/following-sibling::mei:note", "renderanyway": true, "hint": "المنت space باید پیش از المنت note قرار گیرد." }, + { "rule": "count(//mei:space[@dur = '4']) = 3 or (//mei:space[@dur = '2' and @dots = '1']) or (//mei:space[@dur = '2'] and //mei:space[@dur = '4'])", "renderanyway": true } + ] + } + ] + + ], + "end":"104_rests_end.html", + "resp":[ + { + "name":"Johannes Kepper", + "affiliation":"Beethovens Werkstatt | Universität Paderborn" + } + ] +} diff --git a/_tutorials-FA/104_rests/104_rests.md b/_tutorials-FA/104_rests/104_rests.md new file mode 100644 index 000000000..b226f0191 --- /dev/null +++ b/_tutorials-FA/104_rests/104_rests.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "مبتندی: سکوت‌ها" +fullname: "درسی کوتاه درباره سکوت‌ها در MEI" +data: "104_rests.json" +--- diff --git a/_tutorials-FA/104_rests/104_rests.png b/_tutorials-FA/104_rests/104_rests.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa00cc49d6c71443ce1898564d1e7b4012c9708 GIT binary patch literal 9681 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 literal 0 HcmV?d00001 diff --git a/_tutorials-FA/104_rests/104_rests_end.html b/_tutorials-FA/104_rests/104_rests_end.html new file mode 100644 index 000000000..cb744a053 --- /dev/null +++ b/_tutorials-FA/104_rests/104_rests_end.html @@ -0,0 +1,27 @@ +<div> + <h3>تبریک!</h3> + <p> + در این درس، یاد گرفتید که چگونه سکوت‌ها را با MEI کدگذاری کنید. المنت‌هایی که یاد گرفتید عبارتند + از: + </p><ul> + <li> + <a href="/guidelines/v4/elements/rest.html" target="_blank" ref="noopener, noreferrer"><rest></a> + </li> + <li> + <a href="/guidelines/v4/elements/mrest.html" target="_blank" ref="noopener, noreferrer"><mRest></a> + </li> + <li> + <a href="/guidelines/v4/elements/multirest.html" target="_blank" ref="noopener, noreferrer"><multiRest></a> + </li> + <li> + <a href="/guidelines/v4/elements/space.html" target="_blank" ref="noopener, noreferrer"><space></a> + </li> + </ul> + این المنت‌ها تقریباً همیشه خالی هستند و هیچ المنت فرزندی ندارند. با المنت space، شما با یک مکانیسم پیشرفته + هماهنگ‌سازی چندین صدا که یک staff را به اشتراک می‌گذارند، آشنا شدید. اگر به این موضوع علاقه‌مندید، ممکن است + بخواهید به خصیصه‌های <code>@next</code> و <code>@prev</code> از کلاس خصیصه <a href="/guidelines/v4/attribute-classes/att.linking.html" target="_blank" ref="noopener, noreferrer">att.linking</a> (موجود بر روی <code><note></code> و دیگر رویدادها) نیز + نگاهی بیندازید. این کلاس خصیصه اجازه می‌دهد تا "ردپاهایی" در یک فایل MEI ایجاد شود که امکان دنبال کردن صداها در + بین چندین لایه (و اگر لازم باشد، چندین staff) را فراهم می‌کند. البته این ویژگی بیشتر برای استفاده تحلیلی از فایل MEI + مفید است و در اکثر موقعیت‌ها لازم نیست. + <br><p></p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html b/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html new file mode 100644 index 000000000..da4146e04 --- /dev/null +++ b/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html @@ -0,0 +1,10 @@ +<div> + <p> در این آموزش، خواهید آموخت که چگونه انواع مختلف سکوت‌ها را در رپرتوار مربوط به نت‌نگاری رایج (Common Music Notation - CMN)با استفاده از + MEI کدگذاری کنید. </p> + <p> لطفاً در صورت نیاز به اطلاعات بیشتر برای حل مسئله زیر، به <a href="/tutorials/100-structure.html" target="_blank" rel="noopener, noreferrer">مبانی XML و ساختار مینیمال MEI</a> و/یا آموزش <a href="/tutorials/101-quickstart.html" target="_blank" rel="noopener, noreferrer">شروع سریع</a> مراجعه + کنید. </p> + <p> طبق <a href="/guidelines/v4/elements/rest.html" target="_blank" rel="noopener, noreferrer">تعریف MEI</a>، + یک سکوت "رویدادی غیر صوتی است که در متن قرار دارد". کدگذاری آن ساده است: فقط + از یک المنت <code><rest></code> استفاده کنید، با یک خصیصه <code>@dur</code>. </p> + <p class="tutorialTask"> لطفاً یک سکوت نت سیاه را کدگذاری کنید. </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-00/104_rests_step-00.xml b/_tutorials-FA/104_rests/step-00/104_rests_step-00.xml new file mode 100644 index 000000000..9a203253b --- /dev/null +++ b/_tutorials-FA/104_rests/step-00/104_rests_step-00.xml @@ -0,0 +1,32 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?><rest dur="4"/><?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html b/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html new file mode 100644 index 000000000..66d0dcd4d --- /dev/null +++ b/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html @@ -0,0 +1,15 @@ +<div> + <p> + تبریک! شما اولین سکوت خود را کدگذاری کردید. مورد بعدی هم همینقدر آسان است: + </p> + <p class="tutorialTask"> + یک توالی از پنج سکوت را کدگذاری کنید: + <img style="display: block; margin: .5rem auto; width: 240px;" src="./104_rests.png" alt="یک توالی از سکوت‌ها"> + </p> + <p> + برای سکوت سوم، نیاز به یک خصیصه اضافی <code>@dots</code> دارید، که باید تعداد نقطه‌ها را به‌صورت یک + عدد صحیح مشخص کنید – در این مورد، <code>dots="1"</code> است. به خاطر داشته باشید که خصیصه + <code>@dur</code> می‌تواند مقادیری مانند <code>"1"</code>, <code>"2"</code>, <code>"4"</code>, + <code>"8"</code> یا <code>"16"</code> داشته باشد. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-01/104_rests_step-01.xml b/_tutorials-FA/104_rests/step-01/104_rests_step-01.xml new file mode 100644 index 000000000..9a203253b --- /dev/null +++ b/_tutorials-FA/104_rests/step-01/104_rests_step-01.xml @@ -0,0 +1,32 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?><rest dur="4"/><?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html b/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html new file mode 100644 index 000000000..8ef9e24cf --- /dev/null +++ b/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html @@ -0,0 +1,15 @@ +<div> + <p> + اغلب، سکوت باید یک میزان کامل را پر کند، بدون توجه به متر. + البته ممکن است از المنت‌های <code><rest></code> معمولی با ارزش زمانی مناسب برای این کار استفاده کنید – + در حالت متر 4/4، این فقط یک <code><rest dur="1"/></code> خواهد بود. با این حال، در مترهای دیگر ممکن + است به نشانه‌گذاری بیشتری نیاز داشته باشد. + به همین دلیل، MEI یک المنت خاص به نام <code><mRest/></code> دارد – یک + <i>سکوت میزان</i>. این المنت نیازی به خصیصه <code>@dur</code> ندارد (اگرچه استفاده از آن مجاز + است) و همیشه یک میزان کامل را پر می‌کند، بدون توجه به متر. بنابراین نباید آن را با رویدادهای دیگر در همان + میزان ترکیب کنید. + </p> + <p class="tutorialTask"> + لطفاً سکوت گرد (که لزوماً با متر مطابقت ندارد) را به یک <code><mRest/></code> تبدیل کنید. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-02/104_rests_step-02-prefill.xml b/_tutorials-FA/104_rests/step-02/104_rests_step-02-prefill.xml new file mode 100644 index 000000000..33896b86c --- /dev/null +++ b/_tutorials-FA/104_rests/step-02/104_rests_step-02-prefill.xml @@ -0,0 +1 @@ +<rest dur="1"/> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-02/104_rests_step-02.xml b/_tutorials-FA/104_rests/step-02/104_rests_step-02.xml new file mode 100644 index 000000000..7ce4594ef --- /dev/null +++ b/_tutorials-FA/104_rests/step-02/104_rests_step-02.xml @@ -0,0 +1,32 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?edit-start?><?edit-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html b/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html new file mode 100644 index 000000000..12c8cdc4a --- /dev/null +++ b/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html @@ -0,0 +1,14 @@ +<div> + <p> + در موسیقی‌ای که معمولاً برای پارتهای مختلفتنظیم می‌شود، خیلی پیش می‌آید سکوت‌هایی بیش از یک میزان طول بکشند. + <img style="display: block; margin: .5rem auto; width: 120px;" src="./104_rests-multirest.png" alt="سکوت چندین میزان"> + </p> + <p> + در MEI، این سکوت‌ها با استفاده از المنت مخصوص<code><multiRest/></code> کدگذاری می‌شوند. این المنت از + اعداد صحیح در خصیصه <code>@num</code> برای مشخص کردن تعداد میزان‌هایی که نوازنده آن بخش باید سکوت کند، + استفاده می‌کند. + </p> + <p class="tutorialTask"> + لطفاً یک <code><multiRest/></code> به مدت 15 میزان کدگذاری کنید. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html b/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html new file mode 100644 index 000000000..2357096fc --- /dev/null +++ b/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html @@ -0,0 +1,32 @@ +<div> + <p> + وقتی چند ساز یا بخش صدایی در یک حامل مشترک نوشته‌ شده‌باشند، گاهی لازم است که رویدادهایی مانند نت‌ها را + به جایی بعدتر در میزان هل بدهیم، بدون اینکه بگوییم آنها در حال سکوت هستند. این معمولاً زمانی اتفاق + می‌افتد که سندی که قرار است کدگذاری شود، بین حالت «نت‌نویسی مبتنی بر آکورد» و «ساقه‌های جداگانه در یک میزان» تغییر شکل دهد (به شکل زیر مراجعه کنید). از آنجایی که MEI از المنت <a href="/guidelines/v4/elements/layer.html" target="_blank" rel="noopener, noreferrer"><layer></a> برای چیدمان چندین ساز استفاده می‌کند، و در + این موقعیت‌ها یک ساز بین این لایه‌ها در میان میزان تغییر می‌کند، "فاصله‌ها" در آن میزان‌ها باید پر شوند. و این، دلیل وجود المنت <code><space></code> است!<img style="display: block; margin: .5rem auto; width: 240px;" src="./104_rests-spaces.png" alt="موقعیتی که نیاز به المنت‌های space دارد"> + </p> + <p> + البته، فضای خالی واقعاً سکوت محسوب نمی‌شود. با این حال، <span style="font-size: 2rem;">در فرمت‌های کدگذاری یا برنامه‌های نت‌نویسی دیگر، </span><span style="font-size: 2rem;">اغلب برای این اهداف از </span><span style="font-size: 2rem;">سکوت‌های نامرئی استفاده می‌شود. مزیت المنت </span><code style="font-size: 2rem;"><space></code><span style="font-size: 2rem;"> در MEI این است که + هیچ معنایی ندارد – فقط رویدادهای دیگر را به اطراف منتقل می‌کند. این باعث می‌شود که پردازش یک کدگذاری و + استخراج صداهای جداگانه از آن بسیار آسان‌تر باشد، زیرا اینطور نیست که صرفاً برای هماهنگی بهتر، المنت اطلاعاتی نادرستی را معرفی کرده باشیم.</span></p> + <p> + با این حال، می‌توانید مدت زمانی را به المنت <code><space></code> اختصاص دهید، با استفاده از خصیصه + <code>@dur</code>. حتی می‌توانید از <code>@dots</code> برای یک و نیم برابر کردن ارزش زمانی اش استفاده کنید. + ارزش زمانی‌ای که به <code><space></code> اختصاص می‌دهید، تعداد ضرباتی است که رویدادهایی مانند + <code><note></code> پس از <code><space></code> به سمت راست منتقل می‌شوند. + </p> + <p class="tutorialTask"> + در ویرایشگر زیر، شما یک کدگذاریِ از پیش نوشته شده <span style="font-size: 2rem;">را</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">از نت G4 (که در ضرب اول لایه‌صدایی دوم قرار دارد) می‌بینید. + لطفاً این نت را به انتهای میزان منتقل کنید تا در ضرب آخر میزان زیر نت D5 قرار گیرد، همان‌طور که در تصویر بالا + دیده می‌شود. برای این کار، از المنت </span><code style="font-size: 2rem;"><space></code><span style="font-size: 2rem;"> استفاده کنید و مدت زمان مناسب (باید در مجموع + 3 ضرب باشد) را اعمال کنید. در واقع، روش‌های متعددی برای کدگذاری آن وجود دارد:</span></p> + <ul> + <li>با استفاده از سه <code><space></code> با مقدار یکسان برای <code>@dur</code>،</li> + <li>با استفاده از دو المنت <code><space></code> با دو مقدار متفاوت فقط برای <code>@dur</code>،</li> + <li>یا حتی با استفاده از یک المنت <code><space></code> و استفاده از <code>@dur</code> و + <code>@dots</code>. + </li> + </ul> + <p> + می‌توانید کمی با مقادیر خصیصه‌ها بازی کنید تا ببینید که چگونه بر خروجی رندر تأثیر می‌گذارند. آیا میتوانید از هر سه راه حل جواب بگیرید؟</p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/104_rests/step-04/104_rests_step-04-prefill.xml b/_tutorials-FA/104_rests/step-04/104_rests_step-04-prefill.xml new file mode 100644 index 000000000..9a2313133 --- /dev/null +++ b/_tutorials-FA/104_rests/step-04/104_rests_step-04-prefill.xml @@ -0,0 +1,4 @@ +<layer n="2"> + <!-- Your encoding should replace this line --> + <note pname="g" oct="4" dur="4" color="blue"/> +</layer> diff --git a/_tutorials-FA/104_rests/step-04/104_rests_step-04.xml b/_tutorials-FA/104_rests/step-04/104_rests_step-04.xml new file mode 100644 index 000000000..7651f114f --- /dev/null +++ b/_tutorials-FA/104_rests/step-04/104_rests_step-04.xml @@ -0,0 +1,43 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer n="1"> + <chord dur="2" stem.dir="up" color="green"> + <note pname="c" oct="5" /> + <note pname="a" oct="4" /> + </chord> + <rest dur="4" color="green"/> + <note pname="d" oct="5" dur="4" color="green" /> + </layer> + <?edit-start?> + <layer n="2"> + <space dur="2" dots="1"/> + <note pname="g" oct="4" dur="4" color="blue"/> + </layer> + <?edit-end?> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html new file mode 100644 index 000000000..61866c350 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html @@ -0,0 +1,27 @@ +<div> + <h1>درک ODD</h1> + <p>این آموزش، درسی در سطح پیشرفته است که به بررسی ساختارهای درونی MEI می‌پردازد. با استفاده از این ساختارها، می‌توان + MEI + را به نیازها و چشم‌اندازهای هر کاربردی از آن انتظار می‌رود محدود کرد؛ که به عنوان یک رویه خوب شناخته می‌شود. + تنها با چنین نسخه + محدودشده‌ای (که معمولاً "سفارشی" نامیده می‌شود) از MEI، می‌توان اصول ویراستاری پروژه را طوری اعمال کرد که به‌طور + فنی کیفیت داده‌ها را تضمین کند. هرچند چنین اعتبارسنجی به‌ندرت مانع از بروز خطاهای معنایی (مثلاً رمزگذاری + نت‌های اشتباه) می‌شود، اما اطمینان می‌دهد که تنها از نشانه‌گذاری‌هایی استفاده می‌شود که جریان کار پروژه + برای آن‌ها طراحی شده است و هیچ تفسیر نادرستی از نشانه‌گذاری‌های غیرمنتظره پیش نمی‌آید. + </p> + <p> + این درس مفاهیم پایه‌ای زبان ODD را که برای تعریف MEI استفاده می‌شود معرفی می‌کند. در درس دیگری، به + معرفی جریان‌های کاری و ابزارهایی که به سفارشی‌سازی‌های فردی کمک می‌کنند، خواهیم پرداخت؛ اما شدیداً توصیه + می‌کنیم ابتدا با ساختارهای زیرین در این درس آشنا شوید. + </p> + <p>صادقانه، این یکی از پیچیده‌ترین موضوعات مرتبط با MEI است و به‌طور قطع نیاز به زمان دارد تا با ODD بصورت کاربردی + آشنا شوید. با این حال، جامعه گسترده MEI با کمال میل <a href="/community/community-contacts.html" + target="_blank" rel="noopener, noreferrer">به سوالاتتان پاسخ ‌می‌دهد</a>؛ و البته <a + href="/community/technical-team.html" target="_blank" rel="noopener, noreferrer">تیم فنی MEI</a> هم، + همینطور. فقط با حوصله این درس را بگذرانید و نگاهی دقیق‌تر به + <a href="https://music-encoding.org/guidelines/v4/content/introduction.html#meicustomization" target="_blank" + rel="noopener, noreferrer">فصل مربوطه از دستورالعمل‌های MEI</a> بیندازید. + در نهایت، شما در استفاده از استانداردهای DH مانند MEI ماهر خواهید شد – از اینجا به بعد، فقط کافی است روی + «<b>ادامه» </b>کلیک کنید :-) + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html new file mode 100644 index 000000000..4eeae4683 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html @@ -0,0 +1,32 @@ +<div> + <p> + ODD، یک مخفف برای <em>یک سند برای همه‌کار «</em>One Document Does-it-all</i>است و بخشی از + <a href="https://tei-c.org/guidelines/customization/getting-started-with-p5-odds/" target="_blank" + rel="noopener, noreferrer">استاندارد TEI</a> + است که حتی برای تعریف خود TEI نیز استفاده می‌شود. + </p> + <p> + ODD برای توصیف فرمت‌های مبتنی بر XML، از مجموعه‌ای از المنت‌های ویژه استفاده در + <a href="https://tei-c.org/ns/1.0/" target="_blank" rel="noopener, noreferrer">نام‌حوزه TEI</a>  استفاده + می‌کند. علاوه بر TEI اصلی، از آن نه تنها برای فرمت‌های مبتنی بر TEI مانند + <a href="https://sourceforge.net/p/epidoc/wiki/Home/" target="_blank" rel="noopener, noreferrer">EpiDoc</a>، + بلکه برای فرمت‌هایی که به طور فنی مستقل هستند مانند MEI هم استفاده می‌شود. در سال ۲۰۱۶، TEI نسخه‌ای از + ODD به نام + <em><a href="https://wiki.tei-c.org/index.php/ODD#.22Pure_ODD.22" target="_blank" rel="noopener, noreferrer">ODD + خالص</a></em> + را معرفی کرد. با این حال، از تابستان ۲۰۲۰،  MEI همچنان از نسخه قدیمی ODD استفاده می‌کند، زیرا نسخه + جدید هیچ + مزیت مهمی برای MEI ندارد، اما باعث کار اضافه برای نگهداری ابزارها و جریان‌های کاری مرتبط با MEI + می‌شود. + </p> + <p> + تفاوت اصلی با <em>ODD خالص</em> این است که نسخه قدیمی مورد استفاده MEI از المنت‌هایی از نام‌حوزه + <em><a href="https://relaxng.org/" target="_blank" rel="noopener, noreferrer">RelaxNG</a></em> + استفاده می‌کند. در نهایت، فایل‌های ODD معمولاً به یک RelaxNG (یا XSD) کامپایل می‌شوند، زیرا عملاً هیچ + پشتیبانی نرم‌افزاری برای اعتبارسنجی مستقیم در برابر ODD وجود ندارد. با این حال، این استفاده از RelaxNG در + داخل ODD وابستگی دیگری به جریان کاری TEI اضافه می‌کند و بنابراین آزادی فنی برای تعریف TEI و/یا ODD را تا + حد(کم؟)ای کاهش می‌دهد. از آنجایی که MEI در حال حاضر در فرمت‌هایی تعریف شده است که از کنترل (مستقیم) جامعه + MEI خارج است و باید با چندین نام‌حوزه XML کار کند، استدلال برای تعریف همه چیز به‌طور سازگار در <em>ODD + خالص</em> زیاد جذاب نبوده و تا کنون دنبال نشده است. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html new file mode 100644 index 000000000..73385b053 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html @@ -0,0 +1,32 @@ +<div> + <p> + علیرغم نامش، تنظیمات پیش‌فرض برای کار با ODD معمولاً به حداقل <u>دو</u> فایل <em>منطقی</em> نیاز دارد (اگرچه این + فایل‌ها ممکن است در فایل‌های بیشتری پخش شوند، همان‌طور که در مرحله بعدی این آموزش نشان داده + شده است). اولین این فایل‌ها به اصطلاح <em>منبع (سورس)</em> است: این فایل شامل مشخصات کامل فرمت است، در این مورد + MEI. در مخزن ما، در فایل + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/mei-source.xml" target="_blank" + rel="noopener, noreferrer">mei-source.xml</a> + قرار دارد. علاوه بر آن فایل، یک <em>سفارشی‌سازی</em> جداگانه مورد نیاز است تا مشخص کند کدام بخش‌های مشخصات + در یک زمینه خاص استفاده خواهند شد. هدف کلی ODD این است که سفارشی‌سازی‌های انعطاف‌پذیر از اسکیم فراهم شود. + MEI مجموعه‌ای از + <a href="https://music-encoding.org/guidelines/v4/content/introduction.html#meiprofiles" target="_blank" + rel="noopener, noreferrer">پروفایل‌های از پیش تعریف شده</a> + را فراهم می‌کند که چیزی جز سفارشی‌سازی‌های اسکیم MEI نیستند. + </p> + <p> + برای استفاده از MEI (یا هر فرمت مبتنی بر ODD دیگر)، از فایل <em>سفارشی‌سازی</em> استفاده می‌شود تا کنترل کند + که چگونه فایل <em>منبع</em> کامپایل شود. چندین فرمت هدف برای آن کامپایل وجود دارد که در جای دیگری توضیح داده + شده است<!-- TODO: Add reference to second tutorial -->. رایج‌ترین هدف یک فایل + <a href="https://relaxng.org/" target="_blank" rel="noopener, noreferrer">RelaxNG</a> + است که هم سلسله مراتب RelaxNG و هم قوانین اضافی Schematron را به عنوان تعریف شده در ODD در بر می‌گیرد و + می‌تواند برای اعتبارسنجی در برابر هر دو نوع شِما استفاده شود. تمام فرمت‌های خروجی دیگر برای MEI به‌طور + معمول استفاده نمی‌شوند. + (یادداشت فرعی: ما بعداً در این آموزش به توضیح مختصر Schematron باز خواهیم گشت.) + </p> + <p> + در حالی که این آموزش بر توضیح اصول پایه‌ای ساختارهای ODD در منابع MEI تمرکز دارد، یک آموزش جداگانه در مورد + ODD نحوه سفارشی‌سازی MEI برای نیازهای خاص را توضیح می‌دهد. مراحل زیر مکانیسم‌های اصلی ساختارهای ODD در MEI + را معرفی می‌کنند: ماژول‌ها، المنت‌ها، مدل‌ها، خصیصه‌ها، انواع‌ِ داده‌ها و ماکروها. بیایید <strong>ادامه + دهیم</strong> تا با نگاهی نزدیک‌تر به <em>ماژول‌ها</em> شروع کنیم... + </p> +</div> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html new file mode 100644 index 000000000..6af36be46 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html @@ -0,0 +1,63 @@ + +<div> + <p><em>ماژول‌ها </em><span>بالاترین سطح در </span><span>ساختار مفهومی ODD</span><span> هستند. + ماژول‌ها امکان تقسیم‌بندی طرح را + به نواحی مختلف فراهم می‌کنند، که هرکدام یک جنبه مشخص را تعریف خواهد کرد. تا سال 2019، ساختار راهنماهای + وبسایت MEI از + ماژول‌های ODD پیروی می‌کرد، اما این ساختار با یک تقسیم‌بندی آموزشی‌تر جایگزین شد. + اکنون، ماژول‌ها در راهنماهای MEI در بالای تعاریف المنت‌ها، خصیصه‌ها و غیره نمایش داده می‌شوند:</span></p> + <div> + <img style="width: 100%;" src="./beam-module.png"> + </div> + <p> + این تنها یک ارجاع ساده به ماژول‌ها است. اگر قصد کار بر روی ODD در MEI را دارید، مهم‌تر است بدانید که + کد سورس MEI بر اساس ماژول‌ها تقسیم‌بندی شده است. فایل + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/mei-source.xml" target="_blank" + rel="noopener, noreferrer">mei-source.xml</a> + به عنوان نقطه شروع برای ورود به مشخصات MEI عمل می‌کند. المنت + <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-schemaSpec.html" target="_blank" + rel="noopener, noreferrer"><schemaSpec></a> + در <a + href="https://github.com/music-encoding/music-encoding/blob/93d8c00cd14126af2e680d47f437042227eb2c0e/source/mei-source.xml#L83" + target="_blank" rel="noopener, noreferrer">خط 83</a> (یا همان حوالی) یک شِمای جدید را با نام‌حوزه MEI + (<code>@ns="http://www.music-encoding.org/ns/mei"</code>) تعریف می‌کند. + سپس تعدادی + <em>XInclude</em> به عنوان المنت‌های فرزند دارد. <em>XInclude</em> برای تقسیم یک فایل XML منطقی بزرگ‌تر به + فایل‌های کوچک‌تر و مدیریت‌پذیرتر استفاده می‌شود. در اینجا، هر ماژول MEI در یک فایل جداگانه در زیرپوشه + <a href="https://github.com/music-encoding/music-encoding/tree/develop/source/modules" target="_blank" + rel="noopener, noreferrer">modules</a> ذخیره شده است. + </p> + <p> + ماژول‌های MEI بر اساس موضوعات مختلف ساخته شده‌اند. ماژول‌هایی هستند که بر روی رپرتوارهای موسیقی خاص تمرکز + دارند + (<a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.cmn.xml" + target="_blank" rel="noopener, noreferrer">CMN</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.mensural.xml" + target="_blank" rel="noopener, noreferrer">Mensural</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.neumes.xml" + target="_blank" rel="noopener, noreferrer">Neumes</a>، یا + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.stringtab.xml" + target="_blank" rel="noopener, noreferrer">Tablature زهی</a>)، + اما همچنین ماژول‌هایی برای دیدگاه‌های خاص در موسیقی + (<a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.visual.xml" + target="_blank" rel="noopener, noreferrer">بصری</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.gestural.xml" + target="_blank" rel="noopener, noreferrer">حرکتی</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.analytical.xml" + target="_blank" rel="noopener, noreferrer">تحلیلی</a>)، + فناوری‌ها ( + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.midi.xml" + target="_blank" rel="noopener, noreferrer">MIDI</a>) یا موارد استفاده + (<a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.facsimile.xml" + target="_blank" rel="noopener, noreferrer">نسخه‌ها</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.performance.xml" + target="_blank" rel="noopener, noreferrer">اجراها</a>، + <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/modules/MEI.edittrans.xml" + target="_blank" rel="noopener, noreferrer">استفاده ویرایشی</a>). + دامنه هر یک از این ماژول‌ها در راهنماهای MEI توصیف شده است. + </p> + <p> + علاوه بر بهبود قابلیت نگهداری سورس‌کد MEI به دلیل کاهش حجم فایل‌ها، این تقسیم‌بندی عمدتاً به ما امکان + می‌دهد که به‌راحتی بخش‌های بزرگ‌تر (-> ماژول‌ها) از طرح MEI را «خاموش کنیم». + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-05.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-05.html new file mode 100644 index 000000000..1ed52be9e --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-05.html @@ -0,0 +1,59 @@ +<div> + <p> + آشکارترین بلوک‌های ساختاری برای مشخصات MEI تعاریف المنت‌ها هستند. این کار با استفاده از + <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-elementSpec.html" target="_blank" + rel="noopener, noreferrer"><elementSpec></a> در TEI انجام می‌شود. + بیایید به المنت <a href="https://music-encoding.org/guidelines/v4/elements/castitem.html" target="_blank" + rel="noopener, noreferrer"><castItem></a> در MEI نگاهی بیندازیم: + </p> + <pre class="codeblock"><elementSpec ident="castItem" module="MEI.shared"> + <desc>Contains a single entry within a cast list, describing either a single role or a list of non-speaking roles.</desc> + <classes> + <memberOf key="att.common"/> + <memberOf key="att.bibl"/> + <memberOf key="att.facsimile"/> + <memberOf key="att.lang"/> + </classes> + <content> + <rng:oneOrMore> + <rng:choice> + <rng:text/> + <rng:ref name="role" /> + <rng:ref name="roleDesc" /> + <rng:ref name="actor" /> + <rng:ref name="perfRes" /> + </rng:choice> + </rng:oneOrMore> + </content> + <remarks> + <p part="N">This element is modelled on an element in the Text Encoding Initiative (TEI) standard.</p> + </remarks> + </elementSpec></pre> + + + <p> + المنت <em><castItem></em> مشخصات بسیار کوتاهی دارد، که با این حال اطلاعات زیادی در مورد آن ارائه + می‌دهد. اول، نام المنت در خصیصه <strong>@ident</strong> در المنت <elementSpec> مشخص شده است. علاوه + بر این، ماژولی که به آن تعلق دارد با خصیصه <strong>@module</strong> تعیین شده است. ماژول + <em>MEI.shared</em> که در اینجا استفاده شده است به عنوان پشتیبان برای بسیاری از المنت‌های عمومی عمل می‌کند + که + به خوبی در سایر ماژول‌ها قرار نمی‌گیرند یا برای استفاده از MEI ضروری هستند. + </p> + <p> + سپس یک المنت <em><desc></em> مشاهده می‌کنیم که توضیحی بسیار مختصر از هدف و دامنه المنت مورد نظر ارائه + می‌دهد. این اطلاعات اغلب به عنوان یک نکته راهنما در نرم‌افزارها استفاده می‌شود تا یک کدگذار را به استفاده از + المنت‌های مناسب راهنمایی کند. بنابراین، توضیح روشن بسیار حائز اهمیت است. + </p> + <p> + قطعه اطلاعات بعدی با المنت <strong><classes></strong> ارائه می‌شود، که تعیین می‌کند این المنت به کدام + <em>کلاس‌ها</em> تعلق دارد. ما این موضوع را در ادامه با جزئیات بیشتری بررسی خواهیم کرد، اما به طور کلی + این‌ها در واقع گروه‌هایی از خصیصه‌ها هستند که می‌توانند برای عناصر عضو استفاده شوند. + </p> + <p> + سرانجام، ویژگی <strong>content</strong> را می‌بینیم. هر المنت XML باید به وضوح تعیین کند که چه نوع محتوایی + ممکن است شامل شود. در اینجا، المنت می‌تواند شامل یک یا چند زیرالمنت شود که شامل <em><role></em>، + <em><roleDesc></em>، <em><actor></em> یا <em><perfRes></em> می‌شوند، اما متن ساده نیز + قابل قبول است. + <br> + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html new file mode 100644 index 000000000..060d4b7e9 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html @@ -0,0 +1,155 @@ +<div> + <p> + همان‌طور که دیدیم، ODD این امکان را می‌دهد که مشخص کنید <span style="font-size: 2rem;">درون یک المنت + خاص،</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">دقیقاً</span><span + style="font-size: 2rem;"> </span><span style="font-size: 2rem;">چه المنت‌هایی به عنوان فرزند مجاز + هستند. این قابلیت کنترل بسیار دقیقی روی سلسله‌مراتب عناصر MEI فراهم می‌کند، اما به قیمت فهرست‌بندی مفصل و + طولانی از آنچه هر المنت ممکن است دربرداشته باشد! </span><span style="font-size: 2rem;">نگهداری و + دنبال‌کردن</span><span style="font-size: 2rem;"> چن</span><span style="font-size: 2rem;">ین روشی آسان + نیست چون برخی از المنت‌ها در MEI می‌توانند ده‌ها المنت دیگر را شامل شوند، و مقایسه‌ی چنین المنتهایی باهم، + فرایند زمانبری است.</span></p> + <p> + مثلاً، المنت + <a href="https://music-encoding.org/guidelines/v4/elements/castitem.html" target="_blank" + rel="noopener, noreferrer"><castItem></a> + از مرحله‌ی اخیر این آموزش یک المنت فرزند + <a href="https://music-encoding.org/guidelines/v4/elements/role.html" target="_blank" + rel="noopener, noreferrer"><role></a> دارد. مستندات + برای <em><role></em> شامل ۵۴ المنت فرزند به‌علاوه محتوای متنی است: + </p> + <div> + <img style="width: 100%;" src="./role-children.png"> + </div> + <p>اما با مشاهده <em><elementSpec></em> میبینیم که چنین فهرستی وجود ندارد: + </p> + <pre class="codeblock"><elementSpec ident="role" module="MEI.shared"> + <desc>Name of a dramatic role, as given in a cast list.</desc> + <classes> + <memberOf key="att.common"/> + <memberOf key="att.facsimile"/> + <memberOf key="att.lang"/> + </classes> + <content> + <rng:zeroOrMore> + <rng:choice> + <rng:text/> + <rng:ref name="model.textPhraseLike.limited" /> + </rng:choice> + </rng:zeroOrMore> + </content> + <remarks> + <p part="N">این المنت بر اساس یک المنت در استاندارد Text Encoding Initiative (TEI) مدل‌سازی شده است.</p> + </remarks> +</elementSpec></pre> + <p> + به جای ۵۴ المنت از تصویر بالا، تنها یک ارجاع <em><rng:ref></em> داده شده است که به چیزی به نام + <em>model.textPhraseLike.limited</em> اشاره می‌کند. این یک <strong>کلاسِ مدل</strong> است. کلاس‌های مدل به + عنوان جایگزینی برای گروه‌هایی از المنت‌ها در نظر گرفته می‌شوند. خود کلاس مدل نمی‌داند که کدام المنت‌ها را شامل + می‌شود: + </p> + <pre class="codeblock"><classSpec ident="model.textPhraseLike.limited" module="MEI.shared" type="model"> + <desc>Groups textual elements that occur at the level of individual words or phrases. This class is equivalent to the model.textPhraseLike class without the pb element.</desc> + <classes> + <memberOf key="model.rdgPart.text"/> + <memberOf key="model.editTransPart.text"/> + <memberOf key="model.textPhraseLike"/> + </classes> +</classSpec></pre> + <p> + کلاسِ مدل با یک المنت + <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-classSpec.html" target="_blank" + rel="noopener, noreferrer"><classSpec></a> کدگذاری شده است، + که دارای خصیصه <strong>@type="model"</strong> است. مانند المنت‌ها، با استفاده از + خصیصه <strong>@ident</strong> به طور منحصربه‌فرد شناسایی می‌شود و به یکی از ماژول‌های MEI با + خصیصه <em>@module</em> اختصاص داده می‌شود. + MEI از این قرارداد پیروی می‌کند که تمام نام‌های کلاس مدل با رشته "<em>model.</em>" شروع می‌شوند. همچنین همیشه + یک <em><desc></em> با توضیح مختصری از هدف گروه دارند. بیایید عناصر <em><memberOf></em> را در + <em><classSpec></em> از مثال بالا موقتا نادیده بگیریم و ببینیم که چگونه آن ۵۴ المنتی که بالاتر دیدیم + به + <em>model.textPhraseLike.limited</em> پیوند داده می‌شوند. + </p> + <p> + اگر به مستندات MEI برای + <a href="https://music-encoding.org/guidelines/v4/model-classes/model.textphraselike.limited.html#members" + target="_blank" rel="noopener, noreferrer">model.textPhraseLike.limited</a> + برویم، می‌بینیم که شش المنت به‌صورت مستقیم "<em>اعضا</em>" این کلاس مدل هستند: <em><dedicatee></em>, + <em><dimensions></em>, + <em><extent></em>، <em><seg></em>، <em><symbol></em>، و <em><term></em>. حالا بیایید + نگاهی به <em><dedicatee></em> بیاندازیم: + </p> + <pre class="codeblock"><elementSpec ident="dedicatee" module="MEI.shared"> + <desc>Entity to whom a creative work is formally offered.</desc> + <classes> + <-- other memberShips removed for brevity --> + <memberOf key="model.textPhraseLike.limited"/> + </classes> + <content> + <rng:zeroOrMore> + <rng:choice> + <rng:text/> + <rng:ref name="model.textPhraseLike.limited" /> + </rng:choice> + </rng:zeroOrMore> + </content> + <-- constraintSpec removed for brevity--> + </elementSpec></pre> + <p> + این المنت دارای یک المنت <em><memberOf></em> است که از خصیصه <strong>@key</strong> برای ارجاع به کلاس + مدل + <em>model.textPhraseLike.limited</em> استفاده می‌کند. بنابراین، یک المنت ادعای عضویت در یک کلاس مدل مشخص را + می‌کند + و به‌طور خودکار در هر جایی که این کلاس مدل به‌عنوان محتوا مجاز باشد، مجاز خواهد بود. یک نکته جانبی: + این بدین معناست که <em><dedicatee></em> می‌تواند خودش را هم شامل شود. (یک المنت dedicatee می‌تواند + یک dedicatee دیگر را به‌عنوان المنت فرزند داشته باشد)، + که این موضوع، بیشتر یکی از ویژگیهای ذاتی سیستم کلاس‌هاست تا یک ویژگی خاص در MEI… + </p> + <p> + با این حال، در MEI معمولی تنها شش المنت به‌صورت مستقیم عضو <em>model.textPhraseLike.limited</em> هستند، اما + دیدیم که با ارجاع به این کلاس مدل، + مجموعاً 54 المنت به‌عنوان محتوای مجاز (یعنی المنت‌های فرزند) اضافه می‌شوند. 48 المنت باقی‌مانده از کجا + آمده‌اند؟ + اعتراف می‌کنیم که ارائه فعلی مستندات راهنما به‌خوبی نشان نمی‌دهد که این المنت‌های اضافی از کجا آمده‌اند. + پاسخ به این است که <strong>کلاس‌های مدل تو در تو</strong> هستند. یک کلاس مدل می‌تواند عضو یک کلاس مدل دیگر + باشد، همان‌طور که در <em><classSpec></em> + بالا دیده‌ایم. بیایید به فرزندان مجاز المنت <em><role></em> در دیدگاه <em>بر اساس کلاس</em> برگردیم: + </p> + <div> + <img style="width: 100%;" src="./role-children-byclass.png"> + </div> + <p> + ما شش فرزند مستقیم را می‌بینیم، اما همچنین <em><fig></em> را تحت برچسب <em>model.figureLike</em> + فهرست‌شده و <em><catchwords></em> + و <em><fingerprint></em> از <em>model.msInline</em> آمده‌اند. + <a href="https://music-encoding.org/guidelines/v4/elements/role.html#mayContain" target="_blank" + rel="noopener, noreferrer">این فهرست</a> ادامه دارد و منشا همه + 54 المنت را توضیح می‌دهد. اگر به <em>model.figureLike</em> نگاهی بیاندازیم، می‌بینیم که این کلاس یک + <em><memberOf></em> دارد که به <em>model.textPhraseLike.limited</em> اشاره می‌کند: + </p> + <pre class="codeblock"><classSpec ident="model.figureLike" module="MEI.figtable" type="model"> + <desc>عناصری را گروه‌بندی می‌کند که اطلاعات گرافیکی مانند یک تصویر یا شکل را نمایش می‌دهند یا شامل می‌کنند.</desc> + <classes> + <memberOf key="model.textPhraseLike.limited"/> + </classes> + </classSpec></pre> + <p> + بنابراین، <em>model.figureLike</em> عضوی از <em>model.textPhraseLike.limited</em> است، به این معنی که هر + جایی که <em>model.textPhraseLike.limited</em> به‌عنوان محتوای فرزند مجاز باشد، <em>model.figureLike</em> (و + همه المنت‌هایی که عضو آن هستند) نیز مجاز خواهند بود. عمیق‌ترین <em>تودرتویی</em> کلاس‌ها در + <em>model.textPhraseLike.limited</em> در واقع سه لایه است: <em>model.nameLike.geogName</em> عضو + <em>model.nameLike.place</em> است، که عضو <em>model.nameLike</em> است، که عضو + <em>model.textPhraseLike.limited</em> است. + همه المنت‌هایی که عضو هر یک از این کلاس‌ها هستند به‌عنوان فرزندان هر المانی که <em><rng:ref + name="model.textPhraseLike.limited" /></em> در <em><content></em> خود دارد مجاز خواهند بود. + </p> + <p> + همانطور که از نام‌ها در سلسله مراتب کلاس بالا می‌بینید، کلاس‌های خاص‌تر، اعضای کلاس‌های کلی‌تر هستند. هنگام + تلاش برای شناسایی مجموعه‌ای از المنت‌هایی که باید در یک المنت (جدید) مجاز باشند، ممکن است به‌طور عمدی کلاسی + انتخاب شود که تعدادی المنت بسیار خاص را اضافه کند، یا که طیف وسیعی از المنت‌ها را به ارمغان بیاورد. این + سیستم کلاس مدل‌ها کار را بسیار آسان می‌کند تا محتویات مجاز المنت‌ها به‌طور بسیار انتخابی تعیین شود. همچنین + اضافه کردن المنت‌های جدید به MEI را بسیار آسان می‌کند: با عضویت در کلاس‌های مدل موجود، این المنت‌ها به‌طور + خودکار در طرح‌واره در تمام مکان‌هایی که آن کلاس‌های مدل از قبل مجاز هستند، قرار خواهند گرفت. + </p> + <p> + حالا بیایید به <em>خصیصه‌ها</em> برویم، که به شیوه‌ای بسیار مشابه مدیریت می‌شوند. + </p> +</div> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html new file mode 100644 index 000000000..2dc516628 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html @@ -0,0 +1,158 @@ +<div> + + + <p> + همان‌طور که در مرحله قبل دیدیم، بخش زیادی از سلسله‌مراتب MEI از طریق استفاده از کلاس‌های مدل برقرار می‌شود. + مکانیسمی بسیار مشابه توسط ODD برای دسترس‌پذیر کردن خصیصه‌ها در المنت‌های متعدد استفاده می‌شود. اما قبل از بررسی + کلاس‌های خصیصه، بیایید نگاهی کوتاه به نحوه تعریف واقعی یک خصیصه در ODD بیندازیم. خصیصه <em>@xml:id</em> در هر + المنت MEI موجود است و با مشخصات زیر تعریف شده است: + </p> + <pre class="codeblock"><attDef ident="xml:id" usage="opt"> + <desc>Regularizes the naming of an element and thus facilitates building links between it and other resources. Each id attribute within a document must have a unique value.</desc> + <datatype maxOccurs="1" minOccurs="1"> + <rng:data type="ID"/> + </datatype> + </attDef></pre> + <p> + خصیصه‌ها با استفاده از المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-attDef.html" + target="_blank" rel="noopener, noreferrer"><attDef></a> + مشخص می‌شوند و از برخی از قواعدی که قبلاً روی المنت‌ها و کلاس‌های مدل دیده‌ایم، پیروی می‌کنند: نام آنها در خصیصه + <em>@ident</em> ارائه می‌شود و دارای یک المنت <em><desc></em> با توضیح مختصر هستند. آنچه جدید است، خصیصه + <strong>@usage</strong> است که مورد استفاده از خصیصه را مشخص می‌کند. مقدار در اینجا، "<em>opt</em>"، برای + خصیصه‌های اختیاری استفاده می‌شود – <em>@xml:id</em> می‌تواند روی همه المنت‌های MEI استفاده شود، اما الزامی به + استفاده آن نیست. مقادیر دیگر مجاز برای <em>@usage</em> شامل "<em>req</em>" (الزامی) و "<em>rec</em>" (توصیه‌شده + در صورت لزوم) هستند. + </p> + <p> + حالا بیایید ببینیم این المنت‌های <em><attDef></em> کجا قرار دارند. حتی اگر این واقعاً راه‌حل ترجیحی نباشد، + گاهی اوقات خصیصه‌ها در همان المنتی که باید استفاده شوند تعریف می‌شوند، مانند خصیصه <em>@type</em> در <a + href="https://music-encoding.org/guidelines/v4/elements/meihead.html" target="_blank" + rel="noopener, noreferrer"><meiHead></a>: + </p> + <pre class="codeblock"><elementSpec ident="meiHead" module="MEI.header"> + <desc>(MEI header) – Supplies the descriptive and declarative metadata prefixed to every + MEI-conformant text.</desc> + <classes> + <!-- memberOf elements skipped for brevity --> + </classes> + <content> + <!-- contents skipped for brevity --> + </content> + <!-- constraintSpecs skipped for brevity --> + <attList> + <attDef ident="type" usage="opt"> + <desc>Specifies the kind of document to which the header is attached, for example whether it + is a corpus or individual text.</desc> + <valList type="closed"> + <valItem ident="music"> + <desc>Header is attached to a music document.</desc> + </valItem> + <valItem ident="corpus"> + <desc>Header is attached to a corpus.</desc> + </valItem> + <valItem ident="independent"> + <desc>Header is independent; i.e., not attached to either a music or a corpus + document.</desc> + </valItem> + </valList> + </attDef> + </attList> + <!-- remarks skipped for brevity --> + </elementSpec></pre> + <p> + همان‌طور که می‌بینیم، خصیصه‌ها تنها در یک المنت <em><attList></em> درون <em><elementSpec></em> قرار + دارند. با این حال، در بیشتر موارد، خصیصه‌ای در نظر گرفته شده است که در بیش از یک المنت موجود باشد. خصیصه + <em>@xml:id</em> که در بالا معرفی شد در هر المنت MEI موجود است، بنابراین باید چند صد بار تعریف شود – دوباره، این + نه نگهداری‌پذیر است و نه کارآمد. در عوض، ODD بار دیگر از یک سیستم کلاس استفاده می‌کند، این بار برای + <strong>کلاس‌های خصیصه</strong>. بیایید ببینیم چگونه <em>@xml:id</em> واقعاً در MEI از طریق کلاس خصیصه + <em>att.id</em> توزیع می‌شود: + </p> + <pre class="codeblock"><classSpec ident="att.id" module="MEI.shared" type="atts"> + <desc>Attributes that uniquely identify an element.</desc> + <attList org="group"> + <attDef ident="xml:id" usage="opt"> + <!-- skipping this, as it is the very same as in the example above --> + </attDef> + </attList> + </classSpec></pre> + <p> + قبلاً المنت <em><attDef></em> را دیده‌ایم و تفاوتی بین خصیصه‌هایی که درون یک المنت یا درون یک کلاس خصیصه + تعریف شده‌اند وجود ندارد. اما همچنین قبلاً المنت <a + href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-classSpec.html" target="_blank" + rel="noopener, noreferrer"><classSpec></a> را در کلاس‌های مدل دیده‌ایم. تنها تفاوت این است که کلاس‌های + خصیصه از خصیصه <strong>@type="atts"</strong> استفاده می‌کنند، و در حالی که نام کلاس‌های مدل با "<em>model.</em>" + شروع می‌شود، نام کلاس‌های خصیصه در MEI همیشه با "<em>att.</em>" شروع می‌شود. + </p> + <p> + در اوایل این آموزش، تعریف المنت <a href="https://music-encoding.org/guidelines/v4/elements/role.html" + target="_blank" rel="noopener, noreferrer"><role></a> را دیدیم. بیایید دوباره به آن نگاهی بیندازیم و + برخی قسمت‌های آن را نادیده بگیریم: + </p> + <pre class="codeblock"><elementSpec ident="role" module="MEI.shared"> + <desc>Name of a dramatic role, as given in a cast list.</desc> + <classes> + <memberOf key="att.common"/> + <memberOf key="att.facsimile"/> + <memberOf key="att.lang"/> + </classes> + <!-- skipping content and remarks here --> + </elementSpec></pre> + <p> + بر این اساس، <em><role></em> عضو کلاس‌های خصیصه <em>att.common</em>، <em>att.facsimile</em> و + <em>att.lang</em> است، اما نه <em>att.id</em>. با این حال، مستندات <em><role></em> بیان می‌کند که + <em>@xml:id</em> در دسترس است. پاسخ این است که اینجا هم از <em>کلاس‌های تو در تو</em> استفاده شده. + <em><role></em> به کلاس خصیصه <em>att.common</em> عضو می‌شود و همه خصیصه‌های آن کلاس را به دست می‌آورد (که + در واقع هیچ کدام نیستند). در عوض، <em>att.common</em> خود به کلاس خصیصه <em>att.basic</em> عضو می‌شود (که خصیصه + <em>@xml:base</em> را وارد می‌کند)، و آن به کلاس خصیصه <em>att.id</em> عضو می‌شود که در نهایت خصیصه + <em>@xml:id</em> را وارد می‌کند. برای دیدن این مکانیزم در عمل، بیایید نگاهی کوتاه به <em>att.common</em> + بیندازیم: + </p> + + + + <pre class="codeblock"><classSpec ident="att.common" module="MEI.shared" type="atts"> + <desc>Attributes common to many elements.</desc> + <classes> + <memberOf key="att.basic"/> + <memberOf key="att.labelled"/> + <memberOf key="att.linking"/> + <memberOf key="att.nNumberLike"/> + <memberOf key="att.responsibility"/> + <memberOf key="att.typed"/> + </classes> + </classSpec></pre> + <p> + باز هم، از طریق استفاده از یک المنت <em><memberOf></em> با <em>@key</em> مناسب، عضویت در کلاس‌های + مختلف در + MEI محقق می‌شود، بنابراین این مکانیزم باید برای شما آشنا باشد. و مانند <em>کلاس‌های مدل</em>، <em>کلاس‌های + خصیصه</em> نیز از کلاس‌های نسبتاً عمومی تا مجموعه‌های خاص‌تر از خصیصه‌های هم‌راستا استفاده می‌کنند. با + عضو + شدن در کلاس(های) خصیصه مناسب، یک المنت می‌تواند دقیقاً مجموعه مناسب از خصیصه‌ها را به دست آورد و این امکان + وجود + دارد که به صورت انتخابی خصیصه‌ها را به المنت‌های جدید یا موجود اضافه یا از آنها حذف کنیم. + </p> + <p> + مشخصات <em>att.common</em> که در بالا مشاهده می‌شود، کلاس خصیصه دیگری به نام <em>att.typed</em> را فاش + می‌کند که + یک + خصیصه <em>@type</em> را فراهم می‌کند. واضح است که این خصیصه در <em><meiHead></em> استفاده نشده است، + همانطور که + در بالا دیده می‌شود. دلیل این امر این است که کلاس خصیصه یک خصیصه <em>@type</em> را فراهم می‌کند که تنها یک + توضیح بسیار عمومی دارد: <em>تعیین‌کننده‌ای که عنصر را از نظر خاصی توصیف می‌کند و از هر طرح یا طبقه‌بندی + مناسب + که برچسب‌های تک‌کلمه‌ای را به کار می‌برد، استفاده می‌کند.</em> در مقایسه با آن، <em>@type</em> در + <em><meiHead></em> + تعریف بسیار دقیقی داشت. به طور کلی، MEI سعی می‌کند از استفاده از همان نام خصیصه با تعاریف چندگانه اجتناب + کند، + اما این همیشه ممکن نیست و حداقل + باعث سردرگمی <em>فنی</em> نمی‌شود. با دیدگاه "بر اساس کلاس" در مورد خصیصه‌ها (به <a + href="https://music-encoding.org/guidelines/v4/elements/meihead.html#attributes" target="_blank" + rel="noopener, noreferrer"><meiHead></a> مشخصات)، می‌توان به راحتی پیگیری کرد که هر خصیصه مجاز از + کجا + آمده است. + </p> + <p> + تنها بخش بزرگی که برای درک ODD <span style="font-size: 2rem;"> </span><span + style="font-size: 2rem;">باقی‌مانده، </span><span style="font-size: 2rem;">نوع داده‌ها است که در مرحله + بعدی این آموزش معرفی خواهد شد.</span></p> +</div> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html new file mode 100644 index 000000000..bb874b865 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html @@ -0,0 +1,176 @@ +<div> + <p> + بیشتر انواع داده‌ها در ODD از مفاهیم شناخته‌شده پیروی می‌کنند: اعداد صحیح، مقادیر boolean (true or false)، + رشته‌های متنی و غیره. بیایید نگاهی دقیق‌تر به برخی از آن‌ها داشته باشیم. خصیصه <em>@n</em> در کلاس خصیصه + <em><a + href="https://music-encoding.org/guidelines/v4/attribute-classes/att.ninteger.html">att.nInteger</a></em>  + به این صورت تعریف شده است: + </p> + <pre class="codeblock"><attDef ident="n" usage="opt"> + <desc>Provides a numeric designation that indicates an element's position in a sequence of similar elements. Its value must be a non-negative integer.</desc> + <datatype maxOccurs="1" minOccurs="1"> + <rng:data type="nonNegativeInteger"/> + </datatype> + </attDef></pre> + <p> + این‌جا از یک المنت <em><data></em> از نام‌حوزه <em>rng:</em> استفاده شده، که <em>@type</em> از یک + مقدار تعریف شده در RelaxNG استفاده می‌کند. خصیصه‌های <em>@maxOccurs</em> و <em>@minOccurs</em> مشخص می‌کنند + که چند بار مقدار این «نوعِ داده» ممکن است مقداردهی شود. <span + style="font-size: 2rem;"> </span><span style="font-size: 2rem;">در</span><span + style="font-size: 2rem;"> </span><em style="font-size: 2rem;">att.staffIdent</em><span + style="font-size: 2rem;"> </span><span style="font-size: 2rem;">می‌توان</span><span + style="font-size: 2rem;"> </span><span style="font-size: 2rem;">مثالی دیگر یافت برای مقادیری که در + خصیصه </span><em style="font-size: 2rem;">@staff</em><span style="font-size: 2rem;"> تعریف + شده‌اند</span><span style="font-size: 2rem;">. این خصیصه برای ارتباط + </span><a href="https://music-encoding.org/guidelines/v4/content/introduction.html#eventsControlevents" + target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">کنترل رویدادها</a><span + style="font-size: 2rem;"> + با یک یا چند خط حامل استفاده می‌شود و ممکن است یک یا چند عدد صحیح نگهداری کند. از + </span><a href="https://music-encoding.org/guidelines/v4/attribute-classes/att.staffident.html" + target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">نشانه‌گذاری زیر</a><span + style="font-size: 2rem;"> برای دستیابی به این هدف استفاده می‌کند:</span></p> + <pre class="codeblock"><datatype maxOccurs="unbounded" minOccurs="1"> + <rng:data type="positiveInteger"/> + </datatype></pre> + <p> + در موارد دیگر، MEI انواع داده خاص خود را تعریف می‌کند. این کار با یک المنت + <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-macroSpec.html" target="_blank" + rel="noopener, noreferrer"><macroSpec></a> انجام می‌شود. + بیایید نگاهی به نوع داده + <em><a href="https://music-encoding.org/guidelines/v4/data-types/data.barrendition.html" target="_blank" + rel="noopener, noreferrer">data.BARRENDITION</a></em> که برای تعریف ظاهر خطوط میزان استفاده می‌شود، + بیاندازیم: + </p> + <pre class="codeblock"><macroSpec ident="data.BARRENDITION" module="MEI" type="dt"> + <desc>Renderings of bar lines. Some values correspond to the Western Musical Symbols portion of the Unicode Standard.</desc> + <content> + <valList type="closed"> + <valItem ident="dashed"> + <desc>Dashed line (Unicode 1D104).</desc> + </valItem> + <valItem ident="dotted"> + <desc>Dotted line.</desc> + </valItem> + <valItem ident="dbl"> + <desc>(Unicode 1D101).</desc> + </valItem> + <valItem ident="dbldashed"> + <desc>Double dashed line.</desc> + </valItem> + <valItem ident="dbldotted"> + <desc>Double dotted line.</desc> + </valItem> + <valItem ident="end"> + <desc>(Unicode 1D102).</desc> + </valItem> + <valItem ident="invis"> + <desc>Bar line not rendered.</desc> + </valItem> + <valItem ident="rptstart"> + <desc>Repeat start (Unicode 1D106).</desc> + </valItem> + <valItem ident="rptboth"> + <desc>Repeat start and end.</desc> + </valItem> + <valItem ident="rptend"> + <desc>Repeat end (Unicode 1D107).</desc> + </valItem> + <valItem ident="single"> + <desc>(Unicode 1D100).</desc> + </valItem> + </valList> + </content> + </macroSpec></pre> + <p> + دوباره خصیصه‌های <em>@ident</em> و <em>@module</em> به کار رفته‌اند و همانطور که قبلاً دیده‌ایم، یک المنت + <em><desc></em> نیز وجود دارد. چیزی که مهم است، خصیصه <em>@type</em> با مقداری از "<em>dt</em>" (نوعِ + داده) است. + بر اساس قرارداد، تمام نام‌های نوعِ داده با "<em>data.</em>" شروع می‌شوند و نام بعدی به صورت تمام حروف بزرگ + داده می‌شود. + سپس لیستی از مقادیر (valList) داریم که در این مورد، یک لیست بسته است. به این معنی که تمام مقادیر ممکن در + اینجا فهرست شده‌اند. در موارد دیگر، خصیصه <em>@type</em> با مقدار "<em>semi</em>" نشان‌دهنده یک لیست + نیمه‌بسته است. چنین لیستی توصیه‌هایی ارائه می‌دهد، اما به کاربر اجازه می‌دهد در صورت عدم تطابق هیچ یک از + پیشنهادات با وضعیت فعلی، مقادیر سفارشی ایجاد کند. + این معمولاً تعادل خوبی بین اطمینان از سازگاری و امکان توسعه بر اساس نیاز از طرح‌واره را فراهم می‌کند. + </p> + <p><span style="font-size: 2rem;">انواع داده هم </span>مانند کلاس‌های <em>مدل</em> و <em>خصیصه</em>، + می‌توانند تو در تو باشند. یک مثال برای این مورد، نوع داده + <em><a href="https://music-encoding.org/guidelines/v4/data-types/data.noteheadmodifier.html" target="_blank" + rel="noopener, noreferrer">data.NOTEHEADMODIFIER</a></em> است: + </p> + <pre class="codeblock"><macroSpec ident="data.NOTEHEADMODIFIER" module="MEI" type="dt"> + <desc>Captures any notehead "modifiers"; that is, symbols added to the notehead, such as slashes, lines, text, and enclosures, etc.</desc> + <content> + <rng:choice> + <rng:ref name="data.NOTEHEADMODIFIER.list" /> + <rng:ref name="data.NOTEHEADMODIFIER.pat" /> + </rng:choice> + </content> + </macroSpec></pre> + <p> + این بدان معنی است که خصیصه‌ای که از نوع داده <em>data.NOTEHEADMODIFIER</em> استفاده می‌کند، مقادیری را قبول + خواهد کرد که از قوانین نوع داده <em>data.NOTEHEADMODIFIER.list</em> یا <em>data.NOTEHEADMODIFIER.pat</em> + پیروی می‌کنند. + </p> + <p> + آخرین نوع داده‌ای که می‌خواهیم معرفی کنیم <em>data.COLORVALUES</em> است که توسط <em>data.COLOR</em> استفاده + می‌شود که به نوبه خود برای کنترل مقادیر خصیصه‌هایی مانند <em>@color</em> (از طریق + <em><a href="https://music-encoding.org/guidelines/v4/attribute-classes/att.color.html" target="_blank" + rel="noopener, noreferrer">att.color</a></em>) + و <em>@linecolor</em> (از طریق <em>att.linecolor</em>) استفاده می‌شود. + </p> + <pre class="codeblock"><macroSpec ident="data.COLORVALUES" module="MEI" type="dt"> + <desc>Parameterized color values</desc> + <content> + <rng:choice> + <rng:data type="token"> + <rng:param name="pattern">#[0-9A-Fa-f]{6,6}</rng:param> + </rng:data> + <rng:data type="token"> + <rng:param name="pattern">#[0-9A-Fa-f]{8,8}</rng:param> + </rng:data> + <rng:data type="token"> + <rng:param name="pattern"> + rgb\((\s*(([01]?[0-9]?[0-9])|2[0-4][0-9]|25[0-5])\s*,\s*){2} + ([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*\) + </rng:param> + </rng:data> + <rng:data type="token"> + <rng:param name="pattern"> + rgba\(\s*(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*,\s*){3}( + 0(\.\d+)?|1(\.0+)?)\s*\)|rgba\(\s*(((\d{1,2})?%|100%)\s*,\s* + ){2}(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + </rng:param> + </rng:data> + <rng:data type="token"> + <rng:param name="pattern"> + hsl\(\s*((\d{1,2})|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|1 + 00%)\s*,\s*(\d{1,2}%|100%)\s*\) + </rng:param> + </rng:data> + <rng:data type="token"> + <rng:param name="pattern"> + hsla\(\s*(\d{1,2}|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|10 + 0%)\s*,\s*(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + </rng:param> + </rng:data> + </rng:choice> + </content> + </macroSpec></pre> + + + <p> + المنت <em><rng:choice></em> که دور المنت‌های مختلف <em><rng:data></em> قرار دارد، بیان می‌کند که + مقدار خصیصه <em>@color</em> باید با یکی از الگوهای regex موجود مطابقت داشته باشد. + توضیح مفهوم <u>عبارات باقاعده</u> (Regular Expressions - Regex) خارج از حیطه این آموزش است – در اصل، + روشی برای توصیف یک الگو برای یک رشته‌ی متنی است و می‌تواند برای بررسی تطابق آن رشته با الگو استفاده شود. + نقطه شروع خوبی برای آشنایی با عبارات باقاعده، <strong>جدول کلمات متقاطع Regex</strong> است که در <a + href="https://regexcrossword.com/" target="_blank" + rel="noopener, noreferrer">https://regexcrossword.com/</a> در دسترس است. + </p> + <p>بسیاری دیگر از انواع داده‌هاوجود دارد که می‌توان از آن‌ها استفاده کرد، اما چون تودرتویی معمولاً به اندازه + کلاس‌های <em>مدل</em> یا <em>خصیصه</em> عمیق نیست، انواع داده‌ها اغلب هنگام ورود به ODD دسترس‌پذیرتر در نظر + گرفته می‌شوند – قطعاً برای یادگیری آن‌ها موارد کمتری وجود دارد. پس بیایید به <em>ماکروها</em> برویم. + </p> + +</div> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html new file mode 100644 index 000000000..16783d9d4 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html @@ -0,0 +1,63 @@ +<div> + <p> + ماکروها آخرین بخش ODD هستند که برای درک کامل مشخصات MEI لازم است، و به وضوح کم‌اهمیت‌ترین جنبه به شمار + می‌آیند. ماکروها به عنوان جایگزینی برای المنت‌ها عمل می‌کنند که می‌توانند به صورت یکجا به + <em><content></em> یک المنت اضافه شوند. احتمالاً پرکاربردترین ماکرو + <em>macro.struc-unstrucContent</em> است که به شرح زیر تعریف شده است: + </p> + <pre class="codeblock"><macroSpec ident="macro.struc-unstrucContent" module="MEI.shared" type="pe"> + <desc>Provides a choice between structured and unstructured/mixed content.</desc> + <content> + <rng:choice> + <rng:group> + <rng:zeroOrMore> + <rng:ref name="model.headLike" /> + </rng:zeroOrMore> + <rng:zeroOrMore> + <rng:ref name="model.pLike" /> + </rng:zeroOrMore> + </rng:group> + <rng:zeroOrMore> + <rng:choice> + <rng:text/> + <rng:ref name="model.textPhraseLike.limited" /> + </rng:choice> + </rng:zeroOrMore> + </rng:choice> + </content> + </macroSpec></pre> + <p> + ماکروها دوباره از المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-macroSpec.html" + target="_blank" rel="noopener, noreferrer"><em><macroSpec></em></a> استفاده می‌کنند، اما این بار + با خصیصه <em>@type</em> با مقدار "<em>pe</em>". نام‌ها، که دوباره در <em>@ident</em> ذخیره می‌شوند، با + "<em>macro.</em>" پیشوند می‌گیرند، و البته دوباره <em><desc></em> نیز داریم. تفاوت اصلی با + <em>کلاس‌های مدل</em> این است که <em>ماکرو</em>ها فقط جایگزین المنت‌ها نیستند، بلکه برای قوانین پیچیده‌تری + هم در مورد ترکیب المنت‌ها استفاده می‌شوند. در اینجا، <em>macro.struc-unstrucContent</em> نمونه خوبی است. این + ماکرو کاربر را مجبور می‌کند تا بین یک مدل رمزگذاری ساختاریافته (با استفاده از یک المنت <em><head></em> + اختصاصی و دنبال شده توسط چندین پاراگراف) یا یک مدل غیرساختاریافته (که در آن محتوای متنی مستقیماً وارد می‌شود + و می‌تواند با المنت‌های مختلفی علامت‌گذاری شود) تصمیم بگیرد. می‌توان آن را داخل المنت‌هایی مانند + <em><watermark></em> استفاده کرد و به جلوگیری از تعریف مجدد ترکیب یکسان المنت‌ها در مکان‌های متعدد کمک + می‌کند. + </p> + <pre class="codeblock"><elementSpec ident="watermark" module="MEI.header"> + <desc>Contains a description of a watermark or similar device.</desc> + <classes> + <!-- memberships skipped for brevity --> + </classes> + <content> + <rng:ref name="macro.struc-unstrucContent" /> + </content> + <!-- remarks skipped for brevity --> + </elementSpec></pre> + <p> + به طور کلی، <em><rng:ref></em> داخل <em><elementSpec></em> فقط با المنت‌های فرزند + <em><macroSpec></em> در <em><content></em> جایگزین می‌شود، به طوری که امکان ترکیب یک + <em>ماکرو</em> با سایر محتویات وجود دارد. <em>ماکرو</em>ها به این ترتیب به عنوان بلوک‌های مشخصات از پیش + تعریف شده و قابل استفاده مجدد عمل می‌کنند. + </p> + <p> + همان‌طور که قبلاً ذکر شد، <em>ماکروها</em> از دید MEI جنبه مهمی از ODD نیستند، و بنابراین شما باید تا این + مرحله تمامی موارد لازم را فرا گرفته باشید. این یعنی شما با این مرحله پایانی تمام شده‌اید – برای برخی نکات + پایانی روی دکمه ادامه کلیک کنید... + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html new file mode 100644 index 000000000..372c1d8e0 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html @@ -0,0 +1,17 @@ +<div> + <p> + <strong>تبریک!</strong> شما موفق شدید این مقدمه به ODD را از دید MEI پشت سر بگذارید. اکنون باید با تمامی + بلوک‌های سازنده مشخصات MEI آشنا شده باشید. به صراحت بگویم، این مسیر سختی بوده است و شاید لازم باشد چندین بار + آن را بازخوانی کنید تا واقعاً با آن آشنا شوید. مهم است که به یاد داشته باشید نسخه ODD که MEI در حال حاضر + استفاده می‌کند کمی قدیمی است و ممکن است به طور کامل با مستندات TEI همسو نباشد. با این حال، تمامی ابزارها و + فرآیندهای MEI به درستی با این نسخه کار می‌کنند، بنابراین از دید MEI مشکلی وجود ندارد. + </p> + <p> + مرحله بعدی از اینجا، یادگیری چگونگی نوشتن <strong>شخصی‌سازی‌های MEI</strong> واقعی با استفاده از ODD است. + برای این کار یک آموزش جداگانه وجود دارد (یا به زودی خواهد بود...)، که به جزئیات آن فرایند خواهد پرداخت. این + شخصی‌سازی‌ها از برخی مفاهیم اضافی در بالای آنچه که تاکنون آموخته‌اید استفاده خواهد کرد، اما درک کامل مفاهیم + پایه‌ای برای این مرحله ضروری است. به محض اینکه احساس کنید ODD را تا اینجا درک کرده‌اید، این سطح اضافی نباید + دیگر شما را نگران کند. و با شخصی‌سازی‌های مناسب، قادر خواهید بود از MEI به‌طور تخصصی برای نیازهای خود + استفاده کنید :) + </p> +</div> diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd.json b/_tutorials-FA/180_understanding_odd/180_understanding_odd.json new file mode 100644 index 000000000..f2b98c831 --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd.json @@ -0,0 +1,47 @@ +{ + "steps": [ + { + "label":"Introduction", + "descFile": "180_understanding_odd-01.html" + }, + { + "label":"Background", + "descFile": "180_understanding_odd-02.html" + }, + { + "label":"ODD", + "descFile": "180_understanding_odd-03.html" + }, + { + "label":"Modules", + "descFile": "180_understanding_odd-04.html" + }, + { + "label":"Elements", + "descFile": "180_understanding_odd-05.html" + }, + { + "label":"Models", + "descFile": "180_understanding_odd-06.html" + }, + { + "label":"Attributes", + "descFile": "180_understanding_odd-07.html" + }, + { + "label":"Datatypes", + "descFile": "180_understanding_odd-08.html" + }, + { + "label":"Macros", + "descFile": "180_understanding_odd-09.html" + } + ], + "end":"180_understanding_odd-end.html", + "resp":[ + { + "name":"Johannes Kepper", + "affiliation":"Beethovens Werkstatt | Universität Paderborn" + } + ] +} \ No newline at end of file diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd.md b/_tutorials-FA/180_understanding_odd/180_understanding_odd.md new file mode 100644 index 000000000..fa9d2acff --- /dev/null +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "سطح پیشرفته: درک ODD" +fullname: "درس پیشرفته درباره ساختار درونی MEI" +data: "180_understanding_odd.json" +--- diff --git a/_tutorials-FA/180_understanding_odd/beam-module.png b/_tutorials-FA/180_understanding_odd/beam-module.png new file mode 100644 index 0000000000000000000000000000000000000000..6272aea2507a92e9a035d154af6378e3372c31bc GIT binary patch literal 21869 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 Bk|Y2C literal 0 HcmV?d00001 diff --git a/_tutorials-FA/180_understanding_odd/role-children-byclass.png b/_tutorials-FA/180_understanding_odd/role-children-byclass.png new file mode 100644 index 0000000000000000000000000000000000000000..5a818f8693b43f19e95847e10bbdcd9b7759cd1a GIT binary patch literal 136985 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 kVLJuF$|TAGGr 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 GMEna+o6pby literal 0 HcmV?d00001 diff --git a/_tutorials-FA/180_understanding_odd/role-children.png b/_tutorials-FA/180_understanding_odd/role-children.png new file mode 100644 index 0000000000000000000000000000000000000000..b83f1342b386763a9477750ba3dc72b4e225ec97 GIT binary patch literal 62583 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 BdHDbU literal 0 HcmV?d00001 diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html new file mode 100644 index 000000000..a2b189f6c --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html @@ -0,0 +1,23 @@ + +<div> + <h1>شخصی‌سازی ODD</h1> + <p> + این درس پیشرفته، نحوه شخصی‌سازی MEI برای نیازهای خاص پروژه را معرفی می‌کند. برای فراگیری این درس، نیاز دارید که ساختارهای داخلی ODD در MEI را کاملاً درک کرده باشید (همان‌طور که در آموزش <a href="/tutorials/103-chords.html" target="_blank" rel="noopener, noreferrer">درک ODD</a> توضیح داده شده است). اگر با المنت‌های <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-elementSpec.html" target="_blank" rel="noopener, noreferrer"><elementSpec></a>، کلاس‌های «مدل»ها و کلاس‌های «خصیصه»ها آشنا نیستید، احتمالاً بهتر + است ابتدا به <a href="/tutorials/103-chords.html" target="_blank" rel="noopener, noreferrer">آن آموزش</a> رجوع کنید. + </p> + <p> + حال بیایید درسمان را شروع کنیم. <em>هدف</em> از شخصی‌سازی‌ها، <em>محدود کردن</em> طرح‌واره MEI به بخش‌هایی از + چارچوب است که برای یک وظیفه یا پروژه خاص مرتبط هستند. التبه <span style="font-size: 2rem;">با استفاده از همین مکانیزم‌هایی که در اینجا توضیح داده شده‌اند </span><span style="font-size: 2rem;">امکان </span><em style="font-size: 2rem;">گسترش</em><span style="font-size: 2rem;"> MEI هم وجود دارد، اما این موضوع به یک درس دیگر موکول خواهد شد. در حال حاضر، + تمرکز بر روی زیرمجموعه‌سازی در MEI است، زیرا فایل‌هایی که در برابر چنین نسخه شخصی‌شده‌ای از MEI اعتبارسنجی شوند، در برابر شخصی‌سازی </span><a href="/resources/schemas.html" target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">MEI All</a><span style="font-size: 2rem;"> + که نماینده چارچوب کامل MEI است هم اعتبارسنجی خواهند شد. این موضوع تضمین میکند که فایل، در سطح قابل‌توجهی با ابزارها و مستندات موجود </span><span style="font-size: 2rem;">سازگار خواهد بود.</span><span style="font-size: 2rem;"> به طور کلی، گسترش MEI باید تنها زمانی که کاملاً ضروری است، انجام شود، و در چنین مواردی معمولاً ایده + خوبی است که با </span><a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">جامعه + MEI</a><span style="font-size: 2rem;"> مشورت کنید تا مطمئن شوید که قبلاً راه‌حل دیگری برای منظور شما وجود نداشته.</span></p> + <p> + در این آموزش، ابتدا خواهیم آموخت که چگونه از <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> استفاده کنیم، که یک رابط کاربری گرافیکی برای ایجاد + شخصی‌سازی‌های محدودکننده پایه ارائه می‌دهد. این ابزار بخشی از <a href="https://meigarage.edirom.de" target="_blank" rel="noopener, noreferrer">MEI Garage</a> است و با وجود اینکه کمی محدود است، به درک بهتر + مفاهیم شخصی‌سازی‌های MEI کمک می‌کند. سپس، خروجی MEI ProfileDrafter را بررسی خواهیم کرد و خواهیم دید چگونه <span style="font-size: 2rem;">برای اهداف اعتبارسنجی</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">یک + فایل RelaxNG از آن تولید کنیم. در نهایت، برخی گزینه‌های پیشرفته شخصی‌سازی که فراتر از + محدوده MEI ProfileDrafter هستند را معرفی خواهیم کرد. ممکن است بخواهید از یک برنامه ویرایشگر XML در برخی نقاط + استفاده کنید، اما ما برای تمامی پردازش‌ها از خدمات وب استفاده خواهیم کرد، بنابراین واقعاً مهم نیست کدام ویرایشگر + را انتخاب می‌کنید – هر کدام مناسب است. حال که این توضیحات به پایان رسید، بیایید شروع کنیم!</span></p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html new file mode 100644 index 000000000..17d2f21a2 --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html @@ -0,0 +1,23 @@ + + <div> + <p> + برای مراحل زیر، شما باید <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> را در یک پنجره مرورگر جداگانه (یا تب) باز کنید تا این دستورات را دنبال کنید. + </p> + <!--<div> + <img style="width: 100%;" src="./profileDrafter_overview.png"/> + </div>--> + <p> + وقتی ProfileDrafter را باز می‌کنید، یک لیست از تمام ماژول‌های MEI در ستون مرکزی مشاهده خواهید کرد. برای هر ماژول، تعداد المنت‌ها و کلاس‌های خصیصه در آن ماژول نمایش داده شده است. می‌توانید ماژول‌های MEI را با برداشتن تیک کنار نام آن‌ها غیرفعال کنید. + </p> + <p> + غیرفعال کردن یا انتخاب ماژول‌های MEI بسیار ساده است، نه؟! با این حال، با استفاده از این تیک‌ها، بازخورد زیادی درباره عواقب انتخاب‌های خود دریافت نمی‌کنید – رابط کاربری واقعاً به شما نمی‌گوید که با این انتخاب‌ها چه چیزی از طرح‌واره حذف شده است. اما هر جعبه ماژول همچنین دارای دکمه <em>شخصی‌سازی</em> در گوشه بالا سمت راست است. با کلیک بر روی این دکمه، لیست ماژول‌ها در ستون مرکزی با لیستی از تمام المنت‌ها و کلاس‌های خصیصه که بخشی از ماژول فعلی هستند جایگزین می‌شود. لطفاً توجه داشته باشید که این فقط برای ماژول‌هایی که از طرح‌واره حذف نشده‌اند امکان‌پذیر است. + </p> + <p> + اگر ماژول <em>MEI.cmnOrnaments</em> را برای شخصی‌سازی انتخاب کنید، لیستی شامل المنت‌های <mordent>، <trill>، و <turn> و کلاس‌های خصیصه <em>att.mordent.log</em>، <em>att.ornamentAccid</em>، <em>att.ornamPresent</em>، <em>att.trill.log</em>، و <em>att.turn.log</em> مشاهده خواهید کرد. دوباره می‌توانید هر یک از این موارد را بسته به نیاز خاص خود غیرفعال کنید. در حالی که در صفحه قبلی می‌توانستید ماژول‌ها را به طور کامل غیرفعال کنید، در اینجا می‌توانید انتخاب‌های خاصی انجام دهید و MEI را دقیقاً به نیازهای خود محدود کنید. اگر به هر دلیلی به نسخه‌ای از MEI نیاز دارید که امکان رمزگذاری <trill> را فراهم کند، اما از <mordent> و <turn> پشتیبانی نمی‌کند، می‌توانید به راحتی آن دو المنت را غیرفعال کنید، اما ماژول <em>MEI.cmnOrnaments</em> را حفظ کنید. با نگاه کردن به ماژول‌های "بزرگتر" مانند <em>MEI.cmn</em>، <em>MEI.header</em>، یا <em>MEI.edittrans</em>، می‌توان موارد استفاده عملی بیشتری برای این حذف انتخابی المنت‌ها تصور کرد. + </p> + <p> + همان‌طور که برای المنت‌ها امکان‌پذیر است، می‌توان <strong>کلاس‌های خصیصه</strong> را نیز در این نمای ماژول‌ها غیرفعال کرد. با این حال، این کار نیاز به درک خوبی از کلاس‌های موجود و ساختار تودرتوی آن‌ها دارد. برای بیشتر کاربران (و بیشتر موارد استفاده)، این کار، عملی‌تر است. برای هر المنت، یک دکمه «<em>تنظیم خصیصه‌ها»</em> (set attributes) وجود دارد. اگر روی آن دکمه کلیک کنید، محتوای ستون اصلی بار دیگر با محتوای متفاوتی جایگزین می‌شود. این بار، یک لیست از تمام خصیصه‌های موجود بر روی آن المنت خواهید یافت. طرح این لیست بر اساس کلاس‌های خصیصه‌ای که این المنت عضو آن‌ها است تنظیم شده است. هر کلاس خصیصه یک چک‌باکس دارد که می‌توان آن را برای غیرفعال کردن استفاده کرد. اگر یک کلاس خصیصه را غیرفعال کنید، نه تنها خصیصه‌های تعریف شده در آن کلاس حذف می‌شوند، بلکه تمام کلاس‌های خصیصه دیگری که از طریق سلسله مراتب کلاس به ارث برده شده‌اند – شامل تمام خصیصه‌های تعریف شده توسط آن‌ها – نیز حذف می‌شوند. به عنوان مثال، اگر کلاس خصیصه </span><em style="font-size: 2rem;">att.basic</em><span style="font-size: 2rem;"> (که از طریق کلاس </span><em style="font-size: 2rem;">att.common</em><span style="font-size: 2rem;"> بر روی هر المنت در MEI موجود است) را غیرفعال کنید، این نه تنها خصیصه </span><em style="font-size: 2rem;">@xml:base</em><span style="font-size: 2rem;">، بلکه کلاس </span><em style="font-size: 2rem;">att.id</em><span style="font-size: 2rem;"> و از طریق آن خصیصه </span><em style="font-size: 2rem;">@xml:id</em><span style="font-size: 2rem;"> را نیز حذف می‌کند. پس از انجام این کار بر روی هر المنت انتخابی خود، باید به یک المنت دیگر بروید. در آنجا متوجه خواهید شد که همان کلاس خصیصه قبلاً غیرفعال شده است: تمام این گزینه‌ها به درستی هماهنگ هستند. این شامل کلاس‌های خصیصه فهرست شده در سطح ماژول‌های جداگانه نیز می‌شود.</span></p> + <p> + با گزینه‌های غیرفعال کردن <strong>ماژول‌ها</strong>، <strong>المنت‌های</strong> جداگانه، و <strong>کلاس‌های خصیصه‌ها</strong>ی مورد نظر، می‌توان طرح‌واره MEI را به طور قابل توجهی محدود کرده، آن را برای نیازهای خاص هر پروژه مناسب‌تر کرد، تا از ناسازگاری و سایر مشکلات رمزگذاری در آن پروژه جلوگیری کند. از آنجا که MEI ProfileDrafter اجازه می‌دهد تا از چندین شخصی‌سازی رسمی MEI شروع کنید، ایجاد نسخه شخصی‌شده‌ای از MEI که پروفایل MEI CMN (یا هر شخصی‌سازی دیگر) را بیشتر محدود کند بسیار ساده است. در مرحله بعدی این آموزش، خواهیم دید چگونه از این شخصی‌سازی استفاده کنیم. + </p> + </div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html new file mode 100644 index 000000000..99fc609a9 --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html @@ -0,0 +1,17 @@ +<div> + <p> + به محض اینکه نسخه‌ای محدود شده از MEI با استفاده از ابزار + <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> ایجاد کردید، گام بعدی، آماده‌سازی اولین <em>سفارشی‌سازی MEI</em> برای اعتبارسنجی است – باید آن را به یک فایل RelaxNG کامپایل کنید. + در حالی که ProfileDrafter در آینده یک نسخه کامپایل شده برای دانلود مستقیم ارائه خواهد داد، ما بر روی یک روش کامپایل متفاوت تمرکز خواهیم کرد که به شما امکان می‌دهد تغییرات دستی بیشتری روی فایل سفارشی‌سازی ODD انجام دهید. در یک پروژه حرفه‌ای، باید سفارشی‌سازی ODD خود را هم به درستی نسخه‌بندی و مستندسازی کنید – این موارد خارج از محدوده ProfileDrafter هستند. + </p> + <p> + لطفاً دکمه <em>Download ODD</em> را در ستون سمت چپ ProfileDrafter فشار دهید و فایل ارائه شده را در یک مکان مناسب ذخیره کنید. حالا یک پنجره مرورگر جدید را به + <a href="https://meigarage.edirom.de/customization" target="_blank" rel="noopener, noreferrer">خدمات سفارشی‌سازی MEI</a> + که بخشی از MEI Garage است، هدایت کنید. در اینجا باید فایل منبع MEI که سفارشی‌سازی شما بر اساس آن است را انتخاب کنید. با توجه به اینکه ProfileDrafter فعلاً به MEI نسخه 4.0.1 محدود است، می‌توانید گزینه پیش‌فرض را در خدمات سفارشی‌سازی نگه دارید. گام بعدی انتخاب و آپلود فایل <em>سفارشی‌سازی محلی</em> شما در ستون مرکزی است. سپس باید گزینه <em>خروجی</em> را بر روی <em>RelaxNG</em> تنظیم کنید. حالا می‌توانید دکمه بزرگ <em>Process</em> را که به رنگ آبی است فشار دهید. پس از پردازش در سمت سرور، برچسب آن دکمه به <em>Download</em> تغییر خواهد کرد. به محض اینکه این اتفاق افتاد، می‌توانید دوباره کلیک کنید تا فایل <strong>RelaxNG</strong> حاصل را دانلود کنید. لطفاً مطمئن شوید که فایل دانلود شده را به نامی معنادار تغییر دهید و از پسوند <code>.rng</code> استفاده کنید. حالا یک فایل RelaxNG صحیح دارید که از سفارشی‌سازی ODD شما کامپایل شده است. این فایل ممکن است برای اعتبارسنجی فایل‌های XML در مقابل پروفایل سفارشی MEI شما استفاده شود. تبریک! شما در استفاده از MEI <span style="font-size: 2rem;">پیشرفت قابل توجهی</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">داشته‌اید! بهرحال، یک نسخه که به طور خاص برای نیازهای شما سفارشی شده است، بر نسخه‌ای عمومی که برای همه مناسب است، ارجحیت دارد.</span></p> + <p> + این درس می‌توانست در همین جا متوقف شود. چالش واقعی این است که <strong>نیازهای خود را شناسایی کنید</strong> و <strong>آنها را به طور مناسب مدل‌سازی کنید</strong>، اما این، چیزی نیست که بتوان در یک درس آنلاین آموزش داد. در حالی که کسب تجربه لازم برای این کار به زمان و تبادل اطلاعات بستگی دارد، شما در حال حاضر مهارت‌های فنی لازم برای نزدیک شدن به مدل‌های خوب را دارید. + </p> + <p> + با این حال، با برخی تنظیمات اضافی در سفارشی‌سازی ODD، امکان کنترل بهتر بر روی طرح‌واره حاصل وجود دارد و این به شما امکان کنترل دقیق‌تری بر اعتبارسنجی داده‌ها و جلوگیری از خطاهای داده تا حد ممکن را می‌دهد. چنین تنظیماتی خارج از محدوده ProfileDrafter هستند و بنابراین نیاز به تنظیمات دستی در سفارشی‌سازی ODD دارند. در گام بعدی، ساختارهایی که ProfileDrafter برای حذف <em>ماژول‌ها</em>، <em>المنت‌ها</em> و <em>کلاس‌های خصیصه</em> از MEI استفاده می‌کند را تحلیل خواهیم کرد. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-04.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-04.html new file mode 100644 index 000000000..83b95e98c --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-04.html @@ -0,0 +1,34 @@ +<div> + <p> + شما قبلاً یاد گرفته‌اید که چگونه از ابزار + <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> + استفاده کنید و با استفاده از + <a href="https://meigarage.edirom.de/customization" target="_blank" rel="noopener, noreferrer">خدمات سفارشی‌سازی MEI</a> + سفارشی‌سازی خود را کامپایل کرده‌اید. شما یک فایل <code>.odd</code> با آن سفارشی‌سازی دانلود کرده‌اید. فرض می‌کنیم سفارشی‌سازی شما برخی ماژول‌ها، المنت‌ها و کلاس‌های خصیصه را حذف کرده است. حالا بررسی کنیم که این موضوع چگونه در فایل سفارشی‌سازی ODD منعکس شده است. لطفاً آن را با یک ویرایشگر مناسب XML باز کنید. + </p> + <p> + شما یک فایل TEI معمولی خواهید یافت، با برخی اعلانات در بالا و یک المنت <code><teiHeader></code> که ممکن است به عنوان نقطه شروعی برای ارائه مستندسازی مناسب برای سفارشی‌سازی شما خدمت کند. شما قطعاً می‌خواهید <code><respStmt></code> (بیانیه مسئولیت) که معمولاً در حدود خط 27 قرار دارد را تنظیم کنید تا مسئولیت را ادعا کنید. محتوای جالب از خط 54 شروع می‌شود (عدد دقیق ممکن است متفاوت باشد). + در آنجا، ما به المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-schemaSpec.html" target="_blank" rel="noopener, noreferrer"><schemaSpec></a> + می‌رسیم که سفارشی‌سازی ما را شروع می‌کند. بیایید فعلاً خصیصه‌های مشخص شده در اینجا را کنار بگذاریم و همچنین المنت <code><constraintSpec></code> را نادیده بگیریم. + </p> + <p> + سپس، لیستی از المنت‌های <code><moduleRef></code> + (<a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-moduleRef.html" target="_blank" rel="noopener, noreferrer">ارجاع به ماژول</a>) + را می‌بینیم که هر کدام به یک ماژول MEI با خصیصه <code>@key</code> خود اشاره می‌کنند. فقط آن خصیصه‌هایی که شما از طرح‌واره حذف نکرده‌اید، در اینجا فهرست شده‌اند. بر این اساس، حذف دستی یک ماژول MEI از سفارشی‌سازی بسیار ساده است: فقط نیاز دارید ارجاع به آن را در فایل سفارشی‌سازی خود حذف کنید. + </p> + <p> + بر روی یک یا چند <code><moduleRef></code> باید خصیصه اضافی <code>@except</code> را ببینید. این خصیصه شامل یک + <em>لیست از المنت‌ها</em> از ماژول مشخص شده است که باید از سفارشی‌سازی حذف شوند. اساساً، شما می‌توانید المنت‌های فردی را به طور انتخابی حذف کنید، در حالی که تمام المنت‌های دیگر از ماژول فعلی را در سفارشی‌سازی خود نگه می‌دارید. ODD همچنین از رویکرد معکوس پشتیبانی می‌کند که به صراحت المنت‌های یک ماژول را از طریق خصیصه <code>@include</code> مجاز می‌کند. ترکیب هر دو رویکرد مجاز نیست و طبق دستورالعمل‌های TEI، از پردازنده‌های ODD درخواست می‌شود که پیام خطا صادر کنند. MEI ProfileDrafter هر دو رویکرد را هنگام آپلود سفارشی‌سازی‌های موجود درک خواهد کرد، اما هنگام صادرات داده‌ها، <em>@except</em> را بر <em>@include</em> ترجیح خواهد داد. + </p> + <p> + در نهایت، در انتهای فایل ODD شما لیستی از المنت‌های <code><classSpec></code> + (<a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-classSpec.html" target="_blank" rel="noopener, noreferrer">مشخصات کلاس</a>) + با <code>@type="atts"</code> وجود خواهد داشت. این المنت‌ها نیز از خصیصه <code>@ident</code> برای شناسایی کلاس‌های خصیصه فردی استفاده می‌کنند. لطفاً توجه داشته باشید که این المنت به ماژولی که این خصیصه در آن تعریف شده است اشاره نمی‌کند. در عوض، و مهمتر از آن، از خصیصه <code>@mode</code> برای مشخص کردن اینکه چه عملی باید بر روی منابع اصلی MEI که قرار است توسط سفارشی‌سازی شما تغییر یابند انجام شود، استفاده می‌کند. در اینجا، تنها مقداری که استفاده خواهد شد <code>@mode="delete"</code> است – کلاس‌های خصیصه مربوطه از سفارشی‌سازی شما حذف خواهند شد و در طرح‌واره حاصل در دسترس نخواهند بود. باز هم، انجام چنین حذفیات به صورت دستی بسیار ساده است. + </p> + <p> + همانطور که می‌بینید، ProfileDrafter در واقع کار چندانی در ODD انجام نمی‌دهد – این ابزار عمدتاً یک رابط کاربری مناسب است که به نشان دادن پیامدهای حذف اجزای مختلف از طرح‌واره کمک می‌کند. به عنوان مثال، این ابزار بسیار واضح نشان می‌دهد که کدام خصیصه‌ها بر روی المنت <code><note></code> زمانی که ماژول <em>MEI.gestural</em> غیرفعال شود، در دسترس نخواهند بود. از نظر فنی، با این حال، این ابزار فقط کارهای بسیار ساده‌ای انجام می‌دهد که به همان خوبی می‌توان آنها را به صورت دستی نیز انجام داد. + </p> + <p> + در گام بعدی، برخی مفاهیم دیگر برای سفارشی‌سازی ODD را معرفی خواهیم کرد و مسیر را برای سفارشی‌سازی‌های ODD حتی خاص‌تر هموار خواهیم کرد. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-05.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-05.html new file mode 100644 index 000000000..ff2ff21db --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-05.html @@ -0,0 +1,66 @@ +<div> + <p> + در مرحله قبل، یاد گرفتیم که یک <code><classSpec type="atts" ident="att.basic" mode="delete"/></code> + می‌تواند برای حذف کلاس خصیصه <em>att.basic</em> (مانند هر کلاس دیگری) از یک سفارشی‌سازی MEI استفاده شود. خصیصه <code>@mode</code> + در اینجا این رفتار را تعیین می‌کند. راهنمای TEI برای کلاس خصیصه + <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-att.combinable.html" target="_blank" rel="noopener, noreferrer">att.combinable</a> + مستندات اضافی درباره مقادیر مجاز ارائه می‌دهد. این راهنما بیان می‌کند که "<em>یک پردازنده ODD باید مقادیر @mode را به این شکل پردازش کند</em>": + </p> + <dl> + <dt>add</dt> + <dd>شیء باید ایجاد شود (پردازش هر فرزند در حالت افزودن)؛ در صورتی که شیئی با همان شناسه از قبل وجود داشته باشد، خطا ایجاد شود.</dd> + <dt>replace</dt> + <dd>این شیء به جای هر شیء موجود با همان شناسه استفاده شود و فرزندان آن شیء نادیده گرفته شوند؛ هر فرزند جدید در حالت "جایگزینی" پردازش شود.</dd> + <dt>delete</dt> + <dd>این شیء یا هر شیء موجود با همان شناسه پردازش نشود؛ در صورت ارائه هر فرزند جدید خطا ایجاد شود</dd> + <dt>change</dt> + <dd>این شیء پردازش شود و فرزندان آن و فرزندان هر شیء موجود با همان شناسه در حالت "تغییر" پردازش شوند</dd> + </dl> + <p> + با این روش، <span style="font-size: 2rem;">نه تنها</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">امکان </span><em style="font-size: 2rem;">حذف</em><span style="font-size: 2rem;"> کلاس‌های خصیصه از طریق سفارشی‌سازی وجود دارد، بلکه می‌توان آن را تغییر هم داد. مثلاً، در + </span><a href="/guidelines/dev/content/introduction.html#meiprofiles" target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">سفارشی‌سازی MEI Basic</a><span style="font-size: 2rem;"> + خصیصه </span><code style="font-size: 2rem;">@xml:base</code><span style="font-size: 2rem;"> از شِما حذف شده است. در منابع MEI، این خصیصه در کلاس خصیصه </span><code style="font-size: 2rem;">att.basic</code><span style="font-size: 2rem;"> تعریف شده است:</span></p> + <pre class="codeblock"><classSpec ident="att.basic" module="MEI.shared" type="atts"> + <desc>خصیصه‌هایی که پایه کلاس att.common را تشکیل می‌دهند.</desc> + <classes> + <memberOf key="att.id"/> + </classes> + <attList> + <attDef ident="xml:base" usage="opt"> + <desc>یک مرجع URI پایه فراهم می‌کند که برنامه‌ها می‌توانند از آن برای تبدیل مراجع URI نسبی به مراجع URI مطلق استفاده کنند.</desc> + <datatype> + <rng:ref name="data.URI"/> + </datatype> + </attDef> + </attList> +</classSpec></pre> + <p> + همان‌طور که مشاهده می‌کنید، کلاس <code>att.basic</code> عضوی از کلاس <code>att.id</code> است - که مسئول ارائه خصیصه <code>@xml:id</code> + برای هر المنت می‌باشد. بنابراین، حذف <code>att.basic</code> از شِما، استفاده از <code>@xml:id</code>ها را در هر جایی از فایل‌هایی که با سفارشی‌سازی حاصل مطابقت دارند، غیرفعال می‌کند؛ قطعاً این، ایده خوبی نیست! در عوض، انعطاف‌پذیری ارائه‌شده از طریق <code>@mode</code>های مختلف می‌تواند برای بیان‌های دقیق‌تر در اینجا استفاده شود. مثال زیر نشان می‌دهد که چه چیزی برای سفارشی‌سازی <code>att.basic</code> برای پروفایل MEI Basic انجام شده است: + </p> + <pre class="codeblock"><classSpec ident="att.basic" module="MEI.shared" type="atts" mode="replace"> + <desc>خصیصه‌هایی که پایه کلاس att.common را تشکیل می‌دهند.</desc> + <classes> + <memberOf key="att.id"/> + </classes> +</classSpec></pre> + <p> + به جای <code>mode="delete"</code>، از <code>mode="replace"</code> برای ارائه تعریف جدید برای کلاس خصیصه استفاده شده است. این کلاس خصیصه، دیگر شامل تعریف خصیصه <code>@xml:base</code> نمی‌باشد. از سوی دیگر، ممکن بود از <code>@mode="change"</code> + برای کلاس خصیصه استفاده شود، فرزندان کلاس‌ها حذف شوند (چون مقدار <em>تغییر</em> باعث پردازش کلاس‌های اصلی نیز می‌شود، همان‌طور که در بالا مشاهده شد)، + و یک <code>mode="delete"</code> اضافی برای تعریف خصیصه داده شود، همان‌طور که در مثال زیر آمده است: + </p> + <pre class="codeblock"><classSpec ident="att.basic" module="MEI.shared" type="atts" mode="change"> + <attList> + <attDef ident="xml:base" mode="delete"/> + </attList> +</classSpec></pre> + <p> + هر دو روش به نتایج یکسانی می‌رسند، بنابراین انتخاب راه‌حل بیشتر به ترجیح فرد بستگی دارد. معمولاً یک روش خوب این است که یک تعریف موجود (که همیشه از طریق راهنمای MEI در دسترس است) را به سفارشی‌سازی خود کپی کرده و سپس با دقت <code>@mode</code>ها را برای خود شیء و فرزندان آن وارد کنید. <code>@mode</code> می‌تواند در تعدادی از المنت‌های مختلف در یک سفارشی‌سازی ODD استفاده شود: <strong><elementSpec></strong>ها، <strong><remarks></strong>، <strong><classSpec></strong>ها، + <strong><memberOf></strong>ها، <strong><constraintSpec></strong>ها، <strong><macroSpec></strong>ها، <strong><attDef></strong>ها، <strong><valList></strong>ها، و <strong><valItem></strong>ها. برای مثال، مقادیر علائم تغییر یافته تعریف‌شده در + <a href="/guidelines/dev/data-types/data.ACCIDENTAL.WRITTEN.basic.html" target="_blank" rel="noopener, noreferrer">data.ACCIDENTAL.WRITTEN.basic</a> + نه تنها شامل مقادیری مانند <em>s</em> (دیز) و <em>f</em> (بمل) می‌شوند، بلکه شامل <em>tf</em> (برای سه بمل) نیز هستند. در پروژه‌هایی که بر روی مواد فاقد چنین علائم تغییر یافته کار می‌کنند، ممکن است ایده خوبی باشد که آنها را به طور کامل از شِما حذف کنند، به طوری که کسی نتواند آنها را بدون ایجاد خطای اعتبارسنجی وارد کند. + </p> + <p> + یک نوع تغییر نهایی وجود دارد که این آموزش قرار است پوشش دهد. این را در مرحله بعد پیدا خواهید کرد. + </p> +</div> diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-06.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-06.html new file mode 100644 index 000000000..697284f3d --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-06.html @@ -0,0 +1,25 @@ +<div> + <p> + MEI معمولی المنت‌های <strong>سندی</strong> زیر را مجاز می‌داند: <code><mei></code>، + <code><meiHead></code>، + <code><music></code>، و <code><meiCorpus></code>. این بدان معناست که این المنت‌ها می‌توانند به عنوان المنت‌های + بیرونی در یک فایل MEI عمل کنند. با این حال، یک پروژه ممکن است ساختار داده‌ای را پیشنهاد دهد که به المنت‌های شروع دیگر یا اضافی نیاز داشته باشد. + به عنوان مثال، یک پروژه ممکن است تصمیم بگیرد که تمام توضیحات ویرایشی را به صورت فایل‌های جداگانه نگه دارد، هر کدام شامل المنت خاص خود <code><annot></code> باشد. سفارشی‌سازی رسمی <a href="/guidelines/dev/content/introduction.html#meiprofiles" target="_blank" rel="noopener, noreferrer">mei-all_anyStart</a> + اجازه می‌دهد که هر المنت منفرد در نام‌حوزه MEI به عنوان المنت شروع استفاده شود، اما این بیشتر برای اهداف آموزشی است و برای استفاده عملی توصیه نمی‌شود. در عوض، ODD یک مکانیزم ساده برای تعریف المنت‌های شروع مجاز ارائه می‌دهد، با استفاده از المنت اولیه + <code><schemaSpec></code>. + </p> + <pre class="codeblock"><schemaSpec ident="mei" + ns="http://www.music-encoding.org/ns/mei" + prefix="mei_" + start="mei meiHead meiCorpus music"></pre> + <p> + همان‌طور که مشاهده می‌کنید، خصیصه <code>@start</code> به عنوان یک لیست جداشده با فاصله از تمام المنت‌های شروع استفاده می‌شود. اگر پروژه ذکرشده تصمیم بگیرد که <code><mei></code> و <code><annot></code> را مجاز کند، اما تمام المنت‌های شروع دیگر را غیرمجاز کند، این می‌تواند به این صورت اصلاح شود: + </p> + <pre class="codeblock"><schemaSpec ident="mei" + ns="http://www.music-encoding.org/ns/mei" + prefix="mei_" + start="mei annot"></pre> + <p> + همان‌طور که مشاهده می‌کنید، تنظیم المنت‌های شروع در واقع بسیار ساده است. بیایید مرور کنیم که چه چیزهایی درباره سفارشی‌سازی ODD یاد گرفته‌ایم. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-end.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-end.html new file mode 100644 index 000000000..85f525040 --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-end.html @@ -0,0 +1,18 @@ + + <div> + <p> + در این درس، آموختید که چگونه از + <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> + برای ایجاد سفارشی‌سازی‌های MEI از طریق یک رابط کاربری گرافیکی استفاده کنید. یاد گرفتید که این ابزار دامنه محدودی دارد، اما در حال حاضر اجازه می‌دهد MEI را به طور قابل توجهی محدود کنید. یاد گرفتید که نشانه‌گذاری ODD تولیدشده توسط این ابزار در واقع بسیار ساده است و می‌توان آن را به همان خوبی به صورت دستی انجام داد. یاد گرفتید چگونه از <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-att.combinable.html" target="_blank" rel="noopener, noreferrer">@mode</a> + در سفارشی‌سازی‌های پیشرفته ODD استفاده کنید و چگونه آنها کنترل دقیق‌تری بر شِمای حاصل فراهم می‌کنند. در همین راستا، همچنین یاد گرفتید که چگونه یک سفارشی‌سازی ODD را به یک فایل RelaxNG که می‌تواند برای اعتبارسنجی استفاده شود، کامپایل کنید، با استفاده از + <a href="https://meigarage.edirom.de/customization" target="_blank" rel="noopener, noreferrer">MEI Customization Service</a>. + </p> + <p> + البته، روش‌های دیگری برای کامپایل ODD وجود دارد، مفاهیم اضافی برای در نظر گرفتن وجود دارد، و این واقعیت که MEI از نسخه قدیمی‌تری از + ODD نسبت به TEI استفاده می‌کند (همان‌طور که در آموزش <a href="/tutorials/understanding-odd.html" target="_blank" rel="noopener, noreferrer">Understanding ODD</a> توضیح داده شده است) + ممکن است در طول مسیر باعث سردرگمی شود. کار با ODD مطمئناً کمی عجیب است، اما قطعاً ارزش تلاش را دارد، زیرا به شما اجازه می‌دهد از نسخه‌ای از + MEI استفاده کنید که به نیازهای شما بسیار خاص است. این به شما کمک می‌کند مستندات مناسبی ارائه دهید، که به دیگران کمک می‌کند داده‌های شما را بهتر درک کرده و استفاده کنند. بنابراین، نوشتن سفارشی‌سازی‌های ODD قطعاً یک سرمایه‌گذاری خوب در پایداری تحقیقات شما است. + </p> + <p>هشدار: این آموزش کاملاً در حال پیشرفت است و ممکن است بعد از بررسی بازخوردهایی که از ورکشاپها گرفته می‌شود، تا حدودی تغییر کند. + </p> + </div> \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei.json b/_tutorials-FA/181_customizing_MEI/181_customizing_mei.json new file mode 100644 index 000000000..3b120eddf --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei.json @@ -0,0 +1,35 @@ +{ + "steps": [ + { + "label":"Welcome", + "descFile": "181_customizing_mei-01.html" + }, + { + "label":"ProfileDrafter", + "descFile": "181_customizing_mei-02.html" + }, + { + "label":"Compiling ODD", + "descFile": "181_customizing_mei-03.html" + }, + { + "label":"Review simple Customizations", + "descFile": "181_customizing_mei-04.html" + }, + { + "label":"Understanding Modes", + "descFile": "181_customizing_mei-05.html" + }, + { + "label":"Changing Roots", + "descFile": "181_customizing_mei-06.html" + } + ], + "end":"181_customizing_mei-end.html", + "resp":[ + { + "name":"Johannes Kepper", + "affiliation":"Beethovens Werkstatt | Universität Paderborn" + } + ] +} \ No newline at end of file diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei.md b/_tutorials-FA/181_customizing_MEI/181_customizing_mei.md new file mode 100644 index 000000000..a1dfff488 --- /dev/null +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "ADVANCED: Customizing MEI (WIP)" +fullname: "Creating custom MEI profiles" +data: "181_customizing_mei.json" +--- diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-01.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-01.html new file mode 100644 index 000000000..05800922c --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-01.html @@ -0,0 +1,22 @@ +<div> + <h1>یک خوش‌آمدگویی گرم به این آموزش ویژه</h1> + <p> + مشخصاً شما به MEI اهمیت می‌دهید و این عالی است! اگر دست به کار شوید و یک درس آموزشی برای آن بنویسید، هم از + درکی که از MEI دارید اطمینان پیدا می‌کنید، هم به دیگران کمک می‌کنید تا درک بهتری پیدا کنند. + </p> + <p> + نوشتن مستندات معمولاً کاری کم‌پاداش است. مهم نیست چقدر می‌نویسید، همیشه نیاز به مطالب بیشتری وجود دارد و هر + چقدر هم تلاش کنید، هرگز نمی‌توانید نیازها و انتظارات همه را برآورده کنید. بهترین راه برای رسیدگی به این + مشکلات، تقسیم کار بر روی شانه‌های متعدد است: کار برای همه کمتر خواهد شد و با نگاه به MEI از دیدگاه‌ها و سطوح + تخصصی مختلف، احتمال ارائه کمک مناسب برای نیازهای خاص هر فرد بیشتر می‌شود. + </p> + <p> + بنابراین، زمانی که چیزی درباره MEI یاد گرفتید که فکر می‌کنید دیگران ممکن است از آن بهره‌مند شوند، لطفاً + <i>تردید نکنید</i> و مشارکت کنید. این آموزش به شما توضیح می‌دهد که چه چیزی لازم است. نگران نباشید، برای + نوشتن آموزش خود، معرفی یک رپرتوار خاص، یا توصیه‌ی روش‌های کارآمدتر، نیازی نیست که حتماً برنامه‌نویس باشید. + جامعه MEI برای <a href="/community/community-contacts.html" target="_blank">کمک به شما</a> حضور دارد، و <a + href="/community/technical-team.html" target="_blank">تیم فنی</a> اطمینان حاصل می‌کند که هر آنچه + می‌نویسید از نظر فنی صحیح است – هیچ مشکلی پیش نمی‌آید، قول می‌دهیم. بنابراین لطفاً با کلیک روی <b>ادامه</b> + در زیر، ما را در صفحه بعدی دنبال کنید. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-02.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-02.html new file mode 100644 index 000000000..96aee78b3 --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-02.html @@ -0,0 +1,38 @@ +<div> + <p> + مانند سایر قسمت‌های وب‌سایت ما، همه آموزش‌ها به طور مستقیم از یک + <a href="https://github.com/music-encoding/music-encoding.github.io" target="_blank">مخزن GitHub</a> ارائه + می‌شوند. این روش هم مزایا و هم معایبی دارد. یک مزیت فوق‌العاده این است که ایجاد یک آموزش جدید به سادگی اضافه + کردن یک پوشه به مخزن است (بعداً توضیح خواهیم داد، نگران نباشید). بزرگ‌ترین معایب این روش این است که تعامل + لازم برای یک آموزش با این تنظیمات فنی به خوبی پشتیبانی نمی‌شود و ما واقعاً نمی‌توانیم آن را با طرح MEI + اعتبارسنجی کنیم. ما به هر دو جنبه رسیدگی کرده‌ایم و امیدواریم که راه‌حل‌های ما تعادلی مناسب بین نیاز کاربران + به راهنمایی و تلاش لازم برای آماده‌سازی یک آموزش ایجاد کنند. به این موضوع نیز بعداً خواهیم پرداخت. + </p> + <p> + حالا <b>بیایید شروع کنیم</b>. صفحات ما توسط <a href="https://jekyllrb.com/" target="_blank">Jekyll</a> ساخته + و ارائه می‌شوند. در مورد آموزش‌های ما، این به این معناست که ما به یک فایل <a + href="https://en.wikipedia.org/wiki/Markdown" target="_blank">Markdown</a> + با جزئیاتی در مورد آموزش خود نیاز داریم که وب‌سایت مادر، برای ادغام صحیح مطالب، به آن نیاز دارد. بیایید به + فایل Markdown + همین آموزش نگاه کنیم: + </p> + <pre class="codeblock">--- +layout: tutorials +type: tutorial +name: "Writing Tutorials" +fullname: "An Introduction to writing MEI tutorials" +data: "tutorials.json" +---</pre> + <label>tutorials.md (فایل Markdown)</label> + <p>در حالی که دو خط اول، <code>layout: tutorials</code> و <code>type: tutorial</code> همیشه باید به همین صورت + بمانند، دو خط بعدی ممکن است تغییر کنند. + آنچه در اینجا می‌نویسید در لیست آموزش‌ها نمایش داده می‌شود، به عنوان مثال. لطفاً توجه داشته باشید که خط اول + و آخر، که هر کدام دارای سه خط تیره هستند، باید برای عملکرد صحیح آموزش به این صورت باقی بمانند. + </p> + <p> + همانطور که قبلاً گفتیم، ما باید تا حدودی محدودیت‌های تنظیمات فنی خود را دور بزنیم. به همین دلیل، ما به یک + فایل به نام <code>tutorials.json</code> + اشاره می‌کنیم که در همان پوشه قرار دارد. نام فایل اهمیتی ندارد، مادامی که بتوان آن را در همان پوشه فایل + Markdown پیدا کرد. حالا بیایید به محتوای این فایل JSON نگاه کنیم. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-03.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-03.html new file mode 100644 index 000000000..69d916d2d --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-03.html @@ -0,0 +1,99 @@ + +<div> + <p> + در فایل <a href="https://en.wikipedia.org/wiki/JSON" target="_blank">JSON</a>، محتوای یک آموزش هماهنگ + می‌شود. این فایل شامل یک شیء (object) با چندین ویژگی (property) است. بیایید به -یک نسخه ساده‌شده از- این + آموزش فعلی <span style="font-size: 2rem;">نگاهی</span><span + style="font-size: 2rem;"> بیندازیم:</span></p> + <pre class="codeblock">{ + "steps": [ + { + "label":"Welcome",<br> "descFile": "writingTutorials-01.html" + }, + { + "label":""Website Setup",<br> "descFile": "writingTutorials-02.html" + }, + + <span class="text-gray"><i>… مراحل بیشتری در اینجا اضافه خواهد شد …</i></span> + + ], + "end":"writingTutorials-end.html", + "resp":[ + { + "name":"Johannes Kepper", + "affiliation":"Beethovens Werkstatt | Universität Paderborn" + } + ] +}</pre> + <label>tutorials.json</label> + <p> + سه خصیصه مهم در اینجا وجود دارد. اولین خصیصه، <code>"steps"</code>، برای توصیف مراحل مختلف در یک آموزش + استفاده می‌شود. به این موضوع در ادامه بازمی‌گردیم. خصیصه بعدی، <code>"end"</code>، یک فایل را مشخص می‌کند که + صفحه پایانی یک آموزش در آن ارائه می‌شود. در نهایت، خصیصه <code>"resp"</code> وجود دارد. در این آرایه، شما + باید نام و وابستگی خود را وارد کنید. به این ترتیب، نه تنها سعی می‌کنیم فردی را به‌عنوان تماس در صورت بروز + سؤال شناسایی کنیم، بلکه همچنین مقداری شناسایی عمومی برای کاری که در MEI انجام می‌دهید ارائه دهیم. اگر روی یک + آموزش به‌صورت گروهی کار کرده‌اید، می‌توانید همه افراد را وارد کنید. پس چرا از برخی از دانشجویان خود نخواهید + که روی این آموزش‌ها کار کنند؟ + </p> + <h1>مراحل</h1> + <p> + برگردیم به خصیصه steps. این یک آرایه (array) از اشیاء است که هر کدام یک مرحله از آموزش را توصیف می‌کنند. + تنها خصیصه‌ای که به‌طور قطع لازم است، <code>"descFile"</code> است. در اینجا باید نام یک فایل HTML را که شامل + دستورالعمل‌های این مرحله است ارائه کنید. اساساً، این همان چیزی است که در حال حاضر می‌خوانید. این فایل یک + فایل HTML کامل نیست؛ باید با یک المنت <code><div></code> ریشه شروع شود و شامل HTML ساده باشد. + خصیصه بعدی، <code>"label"</code>، اختیاری است. اگر آن را ارائه نکنید، مرحله بر اساس موقعیتش نام‌گذاری می‌شود + (مثلاً "مرحله ۳" یا مشابه آن). + </p> + <p> + بدیهی است که یک آموزش نباید فقط متن ساده باشد (که این تنظیمات را توجیه نمی‌کند…). گاهی ممکن است بخواهید + کاربر واقعاً چیزهایی را کدگذاری کند. بیایید نگاهی به تعریف چنین "مرحله‌ای" بیندازیم: + </p> + <pre class="codeblock">{ + <span class="text-gray">"label":"یک مرحله نمونه",</span> + <span class="text-gray">"descFile": "step-instructions.html",</span> + "xmlFile": "encoding.xml", + "xpaths": [ + { + "rule":"count(//mei:note) = 1", + "renderanyway":false + }, + { + "rule":"//mei:note/@pname = 'g'", + "renderanyway":true, + "hint":"شما به یک خصیصه @pname با مقدار g نیاز دارید." + } + ], + "editorLines":3, + "prefillFile":"prefill.xml" +}</pre> + <label>تعریف یک مرحله آموزشی که شامل یک مولفه ویرایشگر است، برای اضافه شدن در آرایه "steps" در tutorials.json + </label> + <p> + دو خصیصه‌ای که قبلاً می‌شناسیم به رنگ خاکستری نمایش داده شده‌اند، نیازی نیست که به آن‌ها بازگردیم. اگر یک + مرحله شامل هر دو خصیصه <code>"xmlFile"</code> و <code>"xpaths"</code> باشد، یک ویرایشگر نمایش داده خواهد شد. + در همین حال، دکمه "ادامه" در گوشه پایین سمت راست ناپدید خواهد شد. برای ادامه، کاربر اکنون باید + دستورالعمل‌های شما را دنبال کند و کد MEI را در ویرایشگر وارد کند. برای تصمیم‌گیری درباره موفقیت یا شکست + کاربر، باید تعدادی قوانین <a href="https://en.wikipedia.org/wiki/XPath" target="_blank">XPath</a> ارائه + کنید. XPath خود در یک خصیصه <code>"rule"</code> ذخیره می‌شود. باید یک مقدار بولیَن (یعنی <i>true</i> یا + <i>false</i>) بازگرداند. اگر می‌خواهید کاربر را راهنمایی کنید، می‌توانید یک خصیصه <code>"hint"</code> ارائه + دهید. اگر محتوای ویرایشگر با یک قانون XPath مطابقت نداشته باشد، پیام هشدار آن به‌صورت یک جعبه زیر ویرایشگر + نمایش داده می‌شود. قوانین XPath به ترتیب بررسی می‌شوند و بررسی بیشتر با هر قانون نادرستی متوقف می‌شود. اگر + همه قوانین مطابقت داشته باشند، آموزش به‌طور خودکار به مرحله بعدی ادامه می‌یابد. + </p> + <p> + خصیصه <code>"renderanyway"</code> یک قانون XPath زمانی مفید است که بخواهید کاربر با کدگذاری "بازی کند". + به‌طور عادی، ورودی کاربر تنها زمانی رندر می‌شود که همه قوانین XPath مطابقت داشته باشند. با این حال، ممکن است + از کاربر بخواهید که زیر و بمی‌های مختلف را امتحان کند و بگویید که تور زمانی ادامه می‌یابد که یک زیر و بمی + خاص وارد شود. سپس می‌توانید <code>"renderanyway"</code> را به <code>true</code> تنظیم کنید، و Verovio تلاش + خواهد کرد تا بهترین نتیجه را برای رندر ورودی فعلی کاربر ارائه دهد. این رفتار در قانون دوم XPath بالا + پیاده‌سازی شده است. + </p> + <p> + خصیصه <code>"xmlfile"</code> یک فایل را مشخص می‌کند که به‌عنوان زمینه برای ویرایشگر استفاده می‌شود. در مرحله + بعدی این آموزش، این موضوع را با جزئیات بیشتری توضیح خواهیم داد. دو خصیصه دیگر نیز ممکن است مفید باشند. با + خصیصه <code>"editorLines"</code> می‌توانید ارتفاع پنجره ویرایشگر را مشخص کنید. اگر آن را ارائه نکنید، یک + ارتفاع پیش‌فرض <i>5</i> خط فرض خواهد شد. در نهایت، می‌توانید در ابتدای یک مرحله ویرایشگر را با محتوای یک + فایلی که با خصیصه <code>"prefillFile"</code> مشخص کرده‌اید پر کنید. اگر آن را ارائه نکنید، ویرایشگر ورودی‌ای + که کاربر در مرحله قبلی وارد کرده است را نگه می‌دارد (یا در مرحله اول خالی خواهد بود). + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-04.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-04.html new file mode 100644 index 000000000..4c5f88f93 --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-04.html @@ -0,0 +1,56 @@ +<div> + <p> + هنگام انجام یک آموزش به‌صورت شخصی، ممکن است تعجب کرده باشید که Verovio چگونه قادر است MEI کاربر را رندر کند، + حتی زمانی که یک فایل کامل MEI توسط کاربر وارد نشده است. این کار توسط خاصیت <code>"xmlFile"</code> + در یک مرحله آموزشی که در صفحه قبلی معرفی شد، انجام می‌شود. این خاصیت به یک فایل کامل MEI اشاره می‌کند، + که زمینه‌ای را فراهم می‌کند که باید برای رندر درست "اطراف" ورودی کاربر قرار گیرد. بیایید یک مثال ساده را + بررسی کنیم: + </p> + <pre class="codeblock"><mei xmlns="http://www.music-encoding.org/ns/mei"> +<meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> +</meiHead> +<music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <span class="text-error"><?snippet-start?></span> + <note pname="c" oct="4" dur="4"/> + <span class="text-error"><?snippet-end?></span> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> +</music> +</mei></pre> + <label>یک فایل ساده MEI، برای استفاده به عنوان زمینه ورودی کاربر.</label> + <p> + این فقط یک فایل معمولی MEI است، اما حاوی دو <i>دستور پردازشی</i> مهم (که به رنگ قرمز مشخص شده‌اند) است. + محتوای این فایل در حافظه خوانده می‌شود. هر زمان که ورودی کاربر در ویرایشگر یک XML با ساختار صحیح باشد، + این ورودی <i>بین</i> دو دستور پردازشی درج می‌شود و فایل کامل (که اکنون شامل ورودی کاربر است) + اعتبارسنجی شده و (در صورت امکان) برای رندر به Verovio ارسال می‌شود. + </p> + <p> + آنچه که بین دو <i>دستور پردازشی</i> ذخیره شده است به عنوان یک راه‌حل نمونه در نظر گرفته شده است. + این قابلیت هنوز پیاده‌سازی نشده است، اما به زودی اضافه خواهد شد. در حال حاضر امکان دانلود فایل کامل + (شامل زمینه) وجود دارد، به طوری که کاربران می‌توانند از آن برای مراجعه‌های آینده یا به عنوان مدلی + برای کارهای خود استفاده کنند. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-05.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-05.html new file mode 100644 index 000000000..c27dbbdd6 --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-05.html @@ -0,0 +1,40 @@ +<div> + <p> + واضح است که اعتبارسنجی ورودی مناسب برای موفقیت یادگیری مؤثر و پایدار بسیار مهم است. + با این حال، به دلیل اینکه وب‌سایت ما مبتنی بر Jekyll است، مجبور به تکیه بر اعتبارسنجی سمت کاربر هستیم + (اعتماد به یک سرویس خارجی برای اعتبارسنجی به تنهایی احتمالاً به اندازه کافی قابل‌اعتماد نیست، بنابراین + از این رویکرد صرف‌نظر کردیم). تا به امروز، اعتبارسنجی سمت کلاینت (= جاوااسکریپت) پشتیبانی مناسب برای + <a href="https://en.wikipedia.org/wiki/RelaxNG" target="_blank">RelaxNG</a>، زبان اسکیما که در پروژه‌های + واقعی + برای اعتبارسنجی MEI استفاده می‌شود، ارائه نمی‌دهد. به همین دلیل، نیاز داریم از رویکرد مبتنی بر XPath + که قبلاً ذکر شد استفاده کنیم. + </p> + <p> + خاصیت <code>"xpaths"</code> در مرحله فعلی یک آرایه از قوانینی را نگه می‌دارد که کدگذاری کاربر باید برای + تکمیل + آن مرحله با آن‌ها مطابقت داشته باشد. این قوانین به صورت اشیاء JSON با سه خاصیت مشخص می‌شوند: + </p> + <pre class="codeblock">{ + "rule":"//mei:note/@pname = 'g'", + "renderanyway":true, + "hint":"شما نیاز به یک خصیصه @pname با مقدار g دارید." +}</pre> + <p> + خاصیت <code>"rule"</code> حاوی یک عبارت <a href="https://en.wikipedia.org/wiki/XPath" target="_blank">XPath + 1</a> + است که باید به یک عبارت منطقی تبدیل شود: یا <i>true</i> یا <i>false</i> باشد. + خاصیت <code>"renderanyway"</code> برای تصمیم‌گیری درباره اینکه آیا ویرایشگر فعلی می‌تواند توسط Verovio + رندر شود حتی اگر XPath مطابقت نداشته باشد، استفاده می‌شود. محتوای <code>"hint"</code> برای کمک به کاربر + برای رسیدن به کدگذاری صحیح در نظر گرفته شده است. فقط اولین XPath ناموفق به صورت هم‌زمان نمایش داده می‌شود + تا کاربر را گام به گام از میان الزامات مختلف راهنمایی کند. با این حال، همه مراحل نیاز به راهنما ندارند – + گاهی اوقات بهتر است که به کاربر اجازه داده شود کمی خودش کاوش کند. + </p> + <p> + برای اعتبارسنجی، ورودی فعلی کاربر بین + <code><?snippet-start?></code> و <code><?snippet-end?></code> + در فایل XML فعلی درج می‌شود و سپس قوانین XPath در برابر آن فایل کامل بررسی می‌شوند. + به محض اینکه یکی از این قوانین شکست بخورد (یعنی <i>false</i> برگرداند)، + <code>"hint"</code> مربوطه نمایش داده می‌شود. هنگامی که همه قوانین <i>true</i> بازگردانند، + دکمه "ادامه" فعال می‌شود و کاربر می‌تواند به مرحله بعدی برود. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-end.html b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-end.html new file mode 100644 index 000000000..31bca7c1f --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials-end.html @@ -0,0 +1,25 @@ +<div> + <p> + همین! فقط کافی است تعدادی فایل بنویسید و آن‌ها را در وب‌سایت MEI در پوشه + <a href="https://github.com/music-encoding/music-encoding.github.io/tree/main/_tutorials" + target="_blank">tutorials</a> + قرار دهید. حالت ایده‌آل این است که آموزش را در شاخه (branch) خودتان آماده کنید و سپس یک درخواست Pull به مخزن + MEI ارسال کرده + و از تیم فنی بخواهید آن را بررسی کنند. + البته، ما خوشحال می‌شویم که به شما کمک کنیم – فقط <a href="/community/community-contacts.html" + target="_blank">تماس</a> + بگیرید. برای شروع سریع، ممکن است بخواهید یک آموزش موجود را کپی کرده و آن را برای نیازهای خودتان تغییر دهید. + آموزش <code>101_quickstart</code> می‌تواند نقطه شروع خوبی باشد، زیرا بسیار ساده است اما همچنان تمام + ویژگی‌های + مرتبط را دارد. + </p> + <p> + از اینکه همه این‌ها را خواندید متشکریم. از اینکه برای نوشتن یک آموزش برای MEI فکر می‌کنید حتی بیشتر تشکر + می‌کنیم. + ورودی شما می‌تواند واقعاً تفاوت ایجاد کند. حتی اگر مطمئن نیستید که به اندازه کافی با MEI آشنا هستید، قطعاً + می‌توانید + برخی از دیدگاه‌های خود را با دیگران به اشتراک بگذارید. حتی اگر فقط ایده‌ای دارید که باید در آموزش پوشش داده + شود، + لطفاً قدم جلو بگذارید، تا شاید بتوانیم آن را با هم بسازیم – به عنوان یک جامعه، برای جامعه. + </p> +</div> \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.json b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.json new file mode 100644 index 000000000..6722f9293 --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.json @@ -0,0 +1,31 @@ +{ + "steps": [ + { + "label":"Welcome", + "descFile": "199_writing_tutorials-01.html" + }, + { + "label":"Website Setup", + "descFile": "199_writing_tutorials-02.html" + }, + { + "label":"The JSON file", + "descFile": "199_writing_tutorials-03.html" + }, + { + "label":"The Editor", + "descFile": "199_writing_tutorials-04.html" + }, + { + "label":"Validation", + "descFile": "199_writing_tutorials-05.html" + } + ], + "end":"199_writing_tutorials-end.html", + "resp":[ + { + "name":"Johannes Kepper", + "affiliation":"Beethovens Werkstatt | Universität Paderborn" + } + ] +} \ No newline at end of file diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.md b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.md new file mode 100644 index 000000000..2b290be9a --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.md @@ -0,0 +1,7 @@ +--- +layout: tutorials +type: tutorial +name: "متا: نوشتن آموزش‌ها" +fullname: "معرفی نوشتن آموزش‌های MEI" +data: "199_writing_tutorials.json" +--- diff --git a/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.xml b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.xml new file mode 100644 index 000000000..811c8cdbd --- /dev/null +++ b/_tutorials-FA/199_writing_tutorials/199_writing_tutorials.xml @@ -0,0 +1,34 @@ +<mei xmlns="http://www.music-encoding.org/ns/mei"> + <meiHead> + <fileDesc> + <titleStmt> + <title/> + </titleStmt> + <pubStmt/> + </fileDesc> + </meiHead> + <music> + <body> + <mdiv> + <score> + <scoreDef> + <staffGrp> + <staffDef clef.shape="G" clef.line="2" n="1" lines="5"/> + </staffGrp> + </scoreDef> + <section> + <measure> + <staff n="1"> + <layer> + <?snippet-start?> + <note pname="c" oct="4" dur="4"/> + <?snippet-end?> + </layer> + </staff> + </measure> + </section> + </score> + </mdiv> + </body> + </music> +</mei> From f93034a7ba320d6747baa1d298d8f24a34cbdc28 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:03:57 +0330 Subject: [PATCH 02/40] Update 100_structure_step-00-desc.html --- .../100_structure/step-00/100_structure_step-00-desc.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html b/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html index f731747d8..c63a42a08 100644 --- a/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html +++ b/_tutorials-FA/100_structure/step-00/100_structure_step-00-desc.html @@ -1,16 +1,16 @@ <div> <p> - در این آموزش، با مبانی پایه‌ای XML آشنا خواهید شد و درباره بیرونی‌ترین لایه‌های یک سند معتبر MEI یاد می‌گیرید. -در پایان این آموزش، باید بتوانید بخش‌های مختلف یک فایل MEI را شناسایی کنید و بدانید در هر بخشی از فایل MEI چه نوع اطلاعاتی را می‌توانید انتظار داشته باشید. + در این آموزش، با مبانی پایه‌ای XML آشنا خواهید شد و بیرونی‌ترین لایه‌های یک سند معتبر MEI را خواهید شناخت. +در پایان این آموزش، باید بتوانید بخش‌های مختلف یک فایل MEI را شناسایی کنید و بدانید در هر بخشی از فایل MEI چه نوع اطلاعاتی را می‌توان انتظار داشت. </p> <p> موضوعات مطرح شده در این آموزش به فصل <a href="https://music-encoding.org/guidelines/v4/content/shared.html#sharedStructuralElements" target="_blank" rel="noopener, noreferrer">اِلِمنت‌های ساختاری</a> از راهنمای MEI اشاره دارد. پیشنهاد می‌شود برای اطلاعات دقیق‌تر به این فصل مراجعه کنید. </p> <p> - لطفاً توجه داشته باشید که کدی که در این آموزش می‌نویسید به دلیل نداشتن اطلاعات درباره محتوای واقعی موسیقایی، بلافاصله قابل رندر نخواهد بود. + لطفاً توجه داشته باشید کدی که در این آموزش می‌نویسید به دلیل نداشتن اطلاعات درباره محتوای واقعی موسیقایی، بلافاصله قابل رندر نخواهد بود. </p> <p> - با این حال، پس از اتمام این آموزش، ممکن است بخواهید سایر آموزش‌ها را انجام دهید که جنبه‌های مهم دیگری از MEI را معرفی می‌کنند. (بسیاری از آن‌ها شامل کدهای قابل رندر برای موسیقی هستند.) این درس‌ها همچنین به عنوان مرجع ساده‌ای برای MEI عمل می‌کنند و شما همیشه می‌توانید به آن‌ها بازگردید. + با این حال، پس از اتمام این آموزش، ممکن است بخواهید سایر آموزش‌ها را انجام دهید که جنبه‌های مهم دیگری از MEI را معرفی می‌کنند. (بسیاری از آن‌ها شامل کدهای قابل رندر برای موسیقی هستند.) این درس‌ها به عنوان مرجع ساده‌ای برای MEI هم عمل می‌کنند و شما همیشه می‌توانید به آن‌ها بازگردید. </p> <p>برای شروع، لطفاً روی دکمه "ادامه" در پایین سمت راست این پاراگراف کلیک کنید.</p> </div> From aeaabd4c3ead6303efb323bfb2800a4c48fafbb7 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:06:21 +0330 Subject: [PATCH 03/40] Update 100_structure_step-01-desc.html --- .../100_structure/step-01/100_structure_step-01-desc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html b/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html index 8b1569425..360919d9c 100644 --- a/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html +++ b/_tutorials-FA/100_structure/step-01/100_structure_step-01-desc.html @@ -1,6 +1,6 @@ <div> <p class="tutorialGoal"> - گام اول: آشنایی با مبانی پایه‌ای XML و یادگیری درباره عنصر ریشه‌ای MEI. + گام اول: آشنایی با مبانی پایه‌ای XML و یادگیری درباره المنت ریشه‌ای MEI. </p> <p> MEI از <a href="https://en.wikipedia.org/wiki/XML" target="_blank" rel="noopener, noreferrer">XML</a> برای نمایش نت‌های موسیقی استفاده می‌کند. XML یک سیستم کدنویسی سلسله‌مراتبی است که اجزای اصلی آن، المنتها هستند. این المنتها با استفاده از چیزی به نام «تگ‌» نمایش داده می‌شوند. معمولاً این تگ‌ها شامل یک تگ آغاز (باز شونده - که نام آن در داخل براکت‌های زاویه‌ای مانند From 4790ae41627fa7285c4bf2c953e136d5e7cb0984 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:09:33 +0330 Subject: [PATCH 04/40] Update 100_structure_step-02-desc.html --- .../step-02/100_structure_step-02-desc.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html b/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html index 405804514..6292f079b 100644 --- a/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html +++ b/_tutorials-FA/100_structure/step-02/100_structure_step-02-desc.html @@ -3,12 +3,12 @@ گام دوم: آشنایی با کاربرد و استفاده از نام‌حوزه‌ها (namespaces). </p> <p> - بسیارخب! همان‌طور که در گام قبلی ذکر شد، نام المنتهای ریشه‌ای یک سند XML اساساً نامی دلخواه است که به خودی خود معنایی برای کامپیوتر ندارد. برای روشن کردن اینکه یک المنت در چه زمینه‌ای تعریف شده و برای جلوگیری از تضاد نام‌ها با المنت‌ها دیگر، XML از چیزی به نام - <a href="https://en.wikipedia.org/wiki/XML_namespace" target="_blank" rel="noopener, noreferrer">نام‌حوزه‌ها</a> استفاده می‌کند. - نام‌حوزه‌ها می‌توانند با افزودن اعلام نام‌حوزه‌ی <code>@xmlns</code> به المنت ریشه‌ای معرفی شوند. + بسیارخب! همان‌طور که در گام قبلی ذکر شد، نام المنتهای ریشه‌ای یک سند XML اساساً نامی دلخواه است که به خودی خود معنایی برای کامپیوتر ندارد. برای روشن کردن اینکه یک المنت در چه زمینه‌ای تعریف شده و برای جلوگیری از تداخل نام‌ها با المنت‌ها دیگر، XML از + <a href="https://en.wikipedia.org/wiki/XML_namespace" target="_blank" rel="noopener, noreferrer">نام‌حوزه‌ها</a> استفاده می‌شود. + نام‌حوزه‌ها می‌توانند با افزودن اعلان نام‌حوزه‌ی <code>@xmlns</code> به المنت ریشه‌ای معرفی شوند. </p> <p> - به عنوان مثال، نام‌حوزه‌ی MEI <code>http://www.music-encoding.org/ns/mei</code> است و می‌تواند به صورت زیر اعلام شود: <code>xmlns="http://www.music-encoding.org/ns/mei"</code> + به عنوان مثال، نام‌حوزه‌ی MEI <code>http://www.music-encoding.org/ns/mei</code> است و می‌تواند به صورت زیر اعلان شود: <code>xmlns="http://www.music-encoding.org/ns/mei"</code> </p> <p> هرگاه در متن نشانه‌ای با علامت <code>@</code> پیش‌نشسته را دیدید (مانند <code>@xmlns</code> بالا)، این به معنای اشاره به یک خصیصه (Attribute) درXML است. (این نوع اشاره متداولی است که از زبان @@ -16,5 +16,5 @@ خصیصه‌ها حاوی اطلاعات مشخص شده (مقادیر خصیصه) هستند که به المنت‌ها مربوط می‌شوند. با این حال، بر خلاف المنت‌ها، خصیصه‌های XML تگ‌های باز یا بسته خود را ندارند و تنها در داخل تگ باز المنت و در کنار نام المنت قرار می‌گیرند. آنها شامل نام خصیصه و علامت مساوی به همراه مقدار خصیصه هستند که همیشه باید درون گیومه (کوتاه یا بلند) قرار گیرد. خصیصه‌های متعدد با فضاهای خالی (space بین کلمات) از یکدیگر جدا می‌شوند. توجه داشته باشید که علامت <code>@</code> تنها در توصیف‌های متنی قبل از نام خصیصه قرار می‌گیرد و در خود کدنویسی نمی‌آید. </p> - <p class="tutorialTask">در کادر زیر، یک اعلامیه (Declaration) نام‌حوزه‌ی MEI به المنت ریشه‌ای <code>MEI</code> اضافه کنید.</p> + <p class="tutorialTask">در کادر زیر، یک اعلان (Declaration) نام‌حوزه‌ی MEI به المنت ریشه‌ای <code>MEI</code> اضافه کنید.</p> </div> From a088d52e5ab2f2f5506dbd2156e9bc7f774394f4 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:11:56 +0330 Subject: [PATCH 05/40] Update 100_structure_step-03-desc.html --- .../step-03/100_structure_step-03-desc.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html b/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html index 6899a96ed..b358fce18 100644 --- a/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html +++ b/_tutorials-FA/100_structure/step-03/100_structure_step-03-desc.html @@ -4,19 +4,18 @@ و <code><music></code>. </p> <p> - آفرین! حالا که نام‌حوزه را در المنت ریشه‌ای خود اعلام کرده‌ایم، تمامی المنت‌ها دیگر که در عنصر ریشه‌ای - جاگذاری شده‌اند، می‌توانند بر اساس نام‌حوزه MEI توسط کامپیوتر شناسایی شوند. + آفرین! حالا که نام‌حوزه را در المنت ریشه‌ای خود اعلان کرده‌ایم، تمامی المنت‌ها دیگر که در عنصر ریشه‌ای جاگذاری شده‌اند، می‌توانند بر اساس نام‌حوزه MEI توسط کامپیوتر شناسایی شوند. </p> <p> - همان‌طور که قبلاً ذکر شد، می‌توانید به سند XML مانند درختی فکر کنید که از یک عنصر ریشه‌ای (بیرونی) به عناصر فرزند (درونی) شاخه می‌شود. یک فایل کدگذاری شده MEI حداقل شامل دو ساختار درون عنصر ریشه‌ای + همان‌طور که قبلاً ذکر شد، می‌توانید به سند XML مانند درختی فکر کنید که از یک عنصر ریشه‌ای (بیرونی) به عناصر فرزند (درونی) شاخه می‌شود. یک فایل کدگذاری شده MEI حداقل شامل دو المنت درون المنتِ ریشه‌ای <code><mei></code> است: </p> <ul> <li> - <code><meiHead></code> - شامل مجموعه‌ای از عناصر است که فراداده‌های مربوط به کدگذاری MEI را فراهم می‌آورد، از جمله اطلاعات کتاب‌شناسی، بیانیه‌های مسئولیت، استانداردهای کدگذاری یا منبع‌شناسی. + <code><meiHead></code> - شامل مجموعه‌ای از المنتهاست که فراداده‌های مربوط به کدگذاری MEI را فراهم می‌کند، از جمله اطلاعات کتاب‌شناسی، بیانیه‌های مسئولیت، استانداردهای کدگذاری یا منبع‌شناسی. </li> <li> - <code><music></code> - شامل مجموعه‌ای از المنت‌هاست که برای کدگذاری محتوای موسیقایی واقعی استفاده می‌شود. این المنت ممکن است شامل المنت‌های ساختاری برای توصیف فرم یک قطعه موسیقایی (بخش‌ها، موومان‌ها، گروه‌های اسناد) یا المنت‌های مربوط به نت‌نگاری، مانند نت‌ها، سکوت‌ها، آرتیکولاسیون‌ یا نوانس باشد. + <code><music></code> - شامل مجموعه‌ای از المنت‌هاست که برای کدگذاری محتوای موسیقایی واقعی استفاده می‌شود. این المنت ممکن است شامل المنت‌های ساختاری برای توصیف فرمال یک قطعه موسیقایی (بخش‌ها، موومان‌ها، گروه‌های اسناد) یا المنت‌های مربوط به نت‌نگاری، مانند نت‌ها، سکوت‌ها، آرتیکولاسیون‌ یا نوانس باشد. </li> </ul> From e8dbfd55b39837ed7593bc898fb6890bc8b4adb0 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 5 Apr 2025 18:14:26 +0330 Subject: [PATCH 06/40] Update 100_structure_end.html --- _tutorials-FA/100_structure/100_structure_end.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/100_structure/100_structure_end.html b/_tutorials-FA/100_structure/100_structure_end.html index a44534780..53bc25681 100644 --- a/_tutorials-FA/100_structure/100_structure_end.html +++ b/_tutorials-FA/100_structure/100_structure_end.html @@ -5,16 +5,16 @@ <h3>تبریک!</h3> </p> <ul> <li>اصول پایه‌ای XML و چگونگی استفاده آن به عنوان پایه برای MEI را درک کنید</li> - <li>ساختار پایه‌ای اصلی (بیرونی) یک سند مطابق با MEI شامل عنوان آن را شناسایی و بنویسید</li> - <li>دو بخش اصلی یک فایل MEI که مسئول اطلاعات فراداده (<code><meiHead></code>) یا اطلاعات مربوط به محتوای موسیقایی (<code><music></code>) هستند، را تشخیص دهید.</li> + <li>ساختار پایه‌ای اصلی (بیرونی) یک سند مطابق با MEI شامل عنوان آن را شناسایی کرده و بنویسید</li> + <li>دو بخش اصلی یک فایل MEI که مسئول اطلاعات فراداده (<code><meiHead></code>) یا اطلاعات مربوط به محتوای موسیقایی (<code><music></code>) هستند را تشخیص دهید.</li> </ul> <p> - از آنجا که مباحث مطرح شده در این درس به فصل <a href="https://music-encoding.org/guidelines/v4/content/shared.html#sharedStructuralElements" target="_blank" rel="noopener, noreferrer"> المنت‌ها ساختاری</a> از دستورالعمل‌های MEI اشاره داشتند، توصیه می‌کنیم که این فصل را هروقت به اطلاعات دقیق‌تری نیاز داشتید، مطالعه کنید. + از آنجا که مباحث مطرح شده در این درس به فصل <a href="https://music-encoding.org/guidelines/v4/content/shared.html#sharedStructuralElements" target="_blank" rel="noopener, noreferrer"> المنت‌های ساختاری</a> از دستورالعمل‌های MEI اشاره داشتند، توصیه می‌کنیم که این فصل را هروقت به اطلاعات دقیق‌تری نیاز داشتید، مطالعه کنید. </p> <p> البته برای داشتن یک فایل MEI جامع، به اطلاعات بیشتری نیاز است – ما تمامی اطلاعات مربوط به محتوای موسیقایی مانند میزان‌ها، خطوط حامل یا نت‌ها را کنار گذاشتیم و همینطور باید یاد بگیرید که چگونه میزان، کلید و حامل‌ها را تنظیم کنید. چند درس دیگر هم هستند که به عنوان مراحل بعدی آشنایی با MEI توصیه می‌کنیم. البته می‌توانید هر زمان که خواستید به این درس‌ها (یا حتی همین درس) بازگردید و مطالب را مرور کنید. </p> <p> - وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer">جامعه MEI</a> به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک <a href="./199-writing-tutorials.html" target="_blank" rel="noopener, noreferrer"> درس در مورد نحوه نوشتن آموزش‌ها</a> داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) + وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer">جامعه MEI</a> به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک <a href="./199-writing-tutorials.html" target="_blank" rel="noopener, noreferrer"> درس در مورد نحوه نوشتن آموزش‌ها</a> داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شده و به این راحتی عضو فعال جامعه MEI شوید :-) </p> </div> From e68be8e3881a0890c8c2ca98f5ed9f538c57bf82 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:31:59 +0330 Subject: [PATCH 07/40] Update 101_quickstart_step-01-desc.html --- .../101_quickstart/step-01/101_quickstart_step-01-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html index aca756c22..79850cb99 100644 --- a/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html +++ b/_tutorials-FA/101_quickstart/step-01/101_quickstart_step-01-desc.html @@ -1,6 +1,6 @@ <div> <p> - برای رمزگذاری (encode) یک نت، تمام اطلاعات مربوطه باید طوری ثبت شوند که کامپیوتر بتواند آنها را بخواند. این که کدام جزئیات اهمیت بیشتری دارند، بسته به نیازهای یک پروژه ممکن است متفاوت باشد؛ اما برای پیش بردن این مقدمه، بیایید بر روی اطلاعات اساسی یک نت توافق کنیم: نام نت (written pitch) نوشته شده و مدت زمان آن (duration). برای بیان گام، MEI از + برای کدگذاری (encode) یک نت، تمام اطلاعات مربوطه باید طوری ثبت شوند که کامپیوتر بتواند آنها را بخواند. این که کدام جزئیات اهمیت بیشتری دارند، بسته به نیازهای یک پروژه ممکن است متفاوت باشد؛ اما برای پیش بردن این مقدمه، بیایید بر روی اطلاعات اساسی یک نت توافق کنیم: نام نت (written pitch) نوشته شده و مدت زمان آن (duration). برای بیان گام، MEI از <a href="https://en.wikipedia.org/wiki/Scientific_pitch_notation" target="_blank" rel="noopener, noreferrer">نشان‌گذاری علمی  نام نت</a> استفاده می‌کند، که در آن، نت دو میانی به شکل "C4" بیان می‌شود. با این حال، آن را به دو بخش جداگانه از اطلاعات تقسیم می‌کند: نام نت (در MEI به عنوان <code>@pname</code> شناخته می‌شود) و اکتاو (<code>@oct</code>). این جداسازی دلایل مختلفی دارد که در اینجا به آنها نمی‌پردازیم. همچنین لازم به ذکر است که نام نت‌ها در MEI به صورت رشته‌های متنی با حروف کوچک نوشته می‌شوند. </p> <p>ویژگی مهم دیگر نت، کشش زمانی (<code>@dur</code>) است. در اینجا، اعداد صحیح برای نشان دادن مدت زمان یک نت استفاده می‌شوند. یک نت گرد مقداری برابر با <code>1</code> دارد، یک نت سفید: <code>2</code>، نت سیاه <code>4</code> و به همین ترتیب. @@ -14,4 +14,4 @@ نشأت می‌گیرد. هنگام نوشتن آنها در XML، فقط نام خصیصه را (بدون @) بنویسید. برای اطلاعات بیشتر، به <a href="/tutorials/100-structure.html" target="_blank" rel="noopener, noreferrer">آموزش مقدمات XML</a> ما نگاهی بیندازید. </p> -</div> \ No newline at end of file +</div> From b54e8dd8a1e3349ae174530f7d4a2c43a2a3826f Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:44:52 +0330 Subject: [PATCH 08/40] Update 102_incipit_step-01-desc.html --- .../102_incipit/step-01/102_incipit_step-01-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html index b8d1658d0..650d06ea5 100644 --- a/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html +++ b/_tutorials-FA/102_incipit/step-01/102_incipit_step-01-desc.html @@ -1,8 +1,8 @@ <div > - <p class="tutorialGoal">گام اول: کدگذاری اسکلت اصلی ملودی نمونه.</p> + <p class="tutorialGoal">گام اول: کدگذاری اسکلت اصلی عبارت آغازین</p> <p>برای کدگذاری خط ملودی این مثال، باید درباره اینکه پارتیتور و خطوط حامل در این قطعه چطور سازماندهی شده‌اند اطلاعاتی را اضافه کنیم. در MEI، این نوع اطلاعات از طریق المنت‌های <code><scoreDef></code> (تعریف پارتیتور)، <code><staffGrp></code> (گروه خطوط حامل) و <code><staffDef></code> (تعریف خط حامل) داده می‌شود. در اینجا، <code><scoreDef></code> برای مشخص کردن پارامترهای عمومی پارتیتور استفاده می‌شود، <code><staffGrp></code> اطلاعاتی در مورد گروه‌بندی خطوط حامل ارائه می‌دهد (اینکه در هر سیستم، چه حامل‌هایی داریم، و اطلاعات کلی‌ای از هرکدام از این حامل‌ها) و <code><staffDef></code> شامل تمام اطلاعات مربوط به یک خط حامل خاص است. به طور کلی، این المنت‌ها زمینه ساختاری برای محتوای موسیقی ارائه می‌دهند، مثلاً اطلاعاتی درباره تعداد، گروه‌بندی یا ترتیب خطوط حامل، کلید، علائم تغییردهنده سرکلید (مایه‌نما) یا میزان‌نما.</p> <!-- TODO: add link to structure tutorial here --> <p>فعلاً با اسکلت ساختاری شروع کنیم.</p> <p class="tutorialTask">در ویرایشگر زیر، لطفاً یک المنت <code><scoreDef></code> ایجاد کنید که شامل یک المنت فرزند <code><staffGrp></code> و المنت فرزند آن <code><staffDef></code> باشد. برای دیدن خروجی بصری (رندر) کدگذاری، نیاز داریم در مراحل بعدی اطلاعات بیشتری را اضافه کنیم.</p> </div> - \ No newline at end of file + From cefc054116b161e8ae6b53824c858de90e7073d6 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:53:29 +0330 Subject: [PATCH 09/40] Update 102_incipit_step-02-desc.html --- .../step-02/102_incipit_step-02-desc.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html index 7ce4fff3c..bc9b78d09 100644 --- a/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html +++ b/_tutorials-FA/102_incipit/step-02/102_incipit_step-02-desc.html @@ -1,19 +1,19 @@ <div > <p class="tutorialGoal">گام دوم: افزودن چند خصیصه به اسکلت اصلی که در مرحله قبلی ایجاد کردید. این خصیصه‌ها اطلاعات پایه‌ای در مورد خط حامل، کلید و مایه‌نمای ملودی نمونه ارائه می‌دهند.</p> - <p>شما در مرحله قبل یاد گرفتید که المنت <code><scoreDef></code> برای مشخص کردن پارامترهای عمومی پارتیتور استفاده می‌شود، و <code><staffDef></code> شامل تمام اطلاعات مربوط به یک خط حامل خاص است. به وضوح، فقط یک خط حامل در این مثال وجود دارد، بنابراین می‌توانید مایه‌نما (۳ بمل) و میزان‌نما (cut time - دو دو) را در <code><staffDef></code> اعلام کنید. اما بیایید این اطلاعات را به <code><scoreDef></code> منتقل کنیم، به فرض اینکه کلید، تنالیته و میزان‌نما برای تمامی سازها یا بخش‌های دیگر پارتیتور کامل Opus 1 Halvorsen یکسان باشد. برای مشخص کردن یک کلید یا میزان‌نمای خاص، باید از خصیصه‌های زیر در <code><scoreDef></code> استفاده کنید و آنها را به المنت <code><scoreDef></code> اضافه کنید:</p> + <p>شما در مرحله قبل یاد گرفتید که المنت <code><scoreDef></code> برای مشخص کردن پارامترهای عمومی پارتیتور استفاده می‌شود، و <code><staffDef></code> شامل تمام اطلاعات مربوط به یک خط حامل خاص است. فقط یک حامل در این عبارت آغازین (incipit) مثال وجود دارد، بنابراین می‌توانید مایه‌نما (۳ بمل) و میزان‌نما (cut time - دو دو) را در <code><staffDef></code> اعلام کنید. اما بیایید این اطلاعات را به <code><scoreDef></code> منتقل کنیم، با این فرض که کلید، تنالیته و میزان‌نما برای تمامی سازها یا بخش‌های دیگر پارتیتور کامل Opus 1 Halvorsen یکسان باشد. برای مشخص کردن یک کلید یا میزان‌نمای خاص، باید از خصیصه‌های زیر در <code><scoreDef></code> استفاده کرده و آنها را به المنت <code><scoreDef></code> اضافه کنید:</p> <ul> - <li><code>@key.sig</code> (امضای کلید) – تعداد دیزها/بمل‌های موجود در امضای کلید نوشته شده، از <code>“3f”</code> برای ۳ بمل استفاده کنید.</li> - <li><code>@meter.sym</code> (نشان متریک) – از <code>“cut”</code> برای میزان‌نمای دو-دو (C/).</li> + <li><code>@key.sig</code> (مایه‌نما) – تعداد دیزها/بمل‌های موجود در مایه‌نما (علائم سرکلید) نوشته می‌شود. از <code>“3f”</code> برای ۳ بمل استفاده کنید.</li> + <li><code>@meter.sym</code> (میزان‌نما) – از <code>“cut”</code> برای میزان‌نمای دو-دو (C/).</li> </ul> - <p>درباره «کلید»، بعدتر هنگام آشنایی با المنت <code><staffDef></code> بیشتر خواهیم آموخت، زیرا مربوط به خط حامل خاص است (سازهای دیگر ممکن است کلیدهای دیگری داشته باشند). شما باید از خصیصه‌های زیر در <code><staffDef></code> استفاده کنید:</p> + <p>درباره «کلید»، بعدتر هنگام آشنایی با المنت <code><staffDef></code> بیشتر خواهیم آموخت، زیرا برای هرکدام از حامل‌های پارتیتور، بطور جداگانه تعریف میشود (سازهای دیگر ممکن است کلیدهای دیگری داشته باشند). شما باید از خصیصه‌های زیر در <code><staffDef></code> استفاده کنید:</p> <ul> <li><code>@n</code> (شماره ترتیبی) – موقعیت خط حامل در گروه <code><staffGrp></code>؛ برای اولین (و تنها) خط حامل از <code>”1”</code> استفاده کنید.</li> <li><code>@lines</code> – برای خط حامل پنج خطی از <code>“5”</code> استفاده کنید.</li> - <li><code>@clef.shape</code> – نماد کلید: از <code>“G”</code> برای نماد کلید G استفاده کنید.</li> + <li><code>@clef.shape</code> – نماد کلید: از <code>“G”</code> برای نماد کلید سل استفاده کنید.</li> <li><code>@clef.line</code> – خط حامل که کلید در آن قرار دارد (از پایین شمرده می‌شود)، از <code>“2”</code> استفاده کنید.</li> </ul> <p class="tutorialTask">خصیصه‌های توضیح داده شده در بالا و مقادیر مربوطه را به <code><scoreDef></code> و <code><staffDef></code> در ویرایشگر زیر اضافه کنید. (برای رندر کردن، هنوز اطلاعات بیشتری نیاز است. با ما همراه باشید!)</p> <p>پی‌نوشت: اگرچه ما<span > </span><span >در متن درس‌ها، </span><span >خصیصه‌ها را</span><span > </span><span >با علامت @ نشان می‌دهیم، نباید این علامت را در کدگذاری استفاده کنیم.</span></p> </div> - \ No newline at end of file + From 93ccf6eb58a54fcfb58359b521bdfb7e960a8da1 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:59:52 +0330 Subject: [PATCH 10/40] Update 102_incipit_step-03-desc.html --- .../102_incipit/step-03/102_incipit_step-03-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html index 06db59bf4..6654eda40 100644 --- a/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html +++ b/_tutorials-FA/102_incipit/step-03/102_incipit_step-03-desc.html @@ -5,5 +5,5 @@ <p>در MEI، المنت <code><section></code> به عنوان ظرفی برای المنت‌های <code><measure></code> عمل می‌کند و دقیقاً بعد از تعریف پارتیتور (<code><scoreDef></code>) قرار می‌گیرد. المنت‌های <code><measure></code> می‌توانند حاوی خطوط حامل متعدد (<code><staff></code>) باشند که هر یک می‌توانند لایه‌ها (بخش‌های صدایی) متعدد (<code><layer></code>) داشته باشند. المنت <code><layer></code> به عنوان المنت والد برای المنت‌های <code><note></code> در مرحله بعدی خواهد بود.</p> <p>برای نشان دادن موقعیت شماره‌گذاری شده میزان‌ها، خطوط حامل یا لایه‌ها، می‌توان از خصیصه <code>@n</code> استفاده کرد.</p> <p class="tutorialTask">میزان آفتاکت را بنویسید: در ویرایشگر، یک المنت <code><section></code> وارد کنید. داخل <code><section></code>، یک المنت <code><measure></code> خالی اضافه کنید و شماره میزان آفتاکت را <code>"0"</code> بگذارید. یک المنت فرزند <code><staff></code> به المنت <code><measure></code> اضافه کنید و شماره آن را <code>"1"</code> بگذارید (اولین خط حامل در میزان ۰). سپس یک المنت فرزند <code><layer></code> بدون شماره به المنت <code><staff></code> اضافه کنید.</p> - <p>پی‌نوشت: با توجه به اطلاعات لازم در scoreDef و section/measure، رندر اکنون قادر به تجسم کدگذاری است. شما می‌توانید با مقادیر خصیصه‌های <code><scoreDef></code> و <code><staffDef></code> بازی کنید تا ببینید که چگونه بر رندر تاثیر می‌گذارند.</p> - </div> \ No newline at end of file + <p>پی‌نوشت: با توجه به اطلاعات لازم در scoreDef و section/measure، حالا فایل میتواند رندر شود. شما می‌توانید با مقادیر خصیصه‌های <code><scoreDef></code> و <code><staffDef></code> بازی کنید تا ببینید که چگونه بر رندر تاثیر می‌گذارند.</p> + </div> From f9658e0d86681a3df6e990a3c58f68fe5afaebd4 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:14:03 +0330 Subject: [PATCH 11/40] Update 102_incipit_step-04-desc.html --- .../102_incipit/step-04/102_incipit_step-04-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html index b10fb1000..3afbaf4ff 100644 --- a/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html +++ b/_tutorials-FA/102_incipit/step-04/102_incipit_step-04-desc.html @@ -1,13 +1,13 @@ <div > - <p class="tutorialGoal" >گام چهارم: کدگذاری اولین نت ملودی نمونه.</p> + <p class="tutorialGoal" >گام چهارم: کدگذاری اولین نت عبارت آغازین.</p> <p >پس از آماده‌سازی ساختار میزان آفتاکت در مرحله قبل، اکنون آماده هستید تا اولین نت این ملودی را کدگذاری کنید. در MEI، نت‌ها قرار است رویدادی را با زیروبمی بخصوص توصیف کنند. که در المنت‌های <code><note></code> کدگذاری می‌شوند. المنت‌های <code><note></code> می‌توانند فرزندان المنت <code><layer></code> باشند. شما می‌توانید ویژگی‌های اصلی نت مانند نام نت و کشش زمانی را با استفاده از خصیصه‌های زیر در <code><note></code> مشخص کنید:</p> <ul > <li ><code>@pname</code> (نام نت) – حروف کوچک از <code>“a”</code> تا <code>“g”</code> استفاده کنید.</li> <li ><code > @oct </code> - (اکتاو) – از عددی استفاده کنید که اکتاو نوت را مشخص می‌کند، مثلاً  + (اکتاو) – از عددی استفاده کنید که اکتاو نت را مشخص می‌کند، مثلاً  <code >4</code> نشان‌دهنده دوی وسط (C4) است.</li> <li ><code>@dur</code> (کشش زمانی) – مثلاً برای نت چنگ، از <code>“8”</code> استفاده کنید.</li> From 2f3a238b57cccf155f6d003d90285bd808fd464a Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:18:56 +0330 Subject: [PATCH 12/40] Update 102_incipit_step-05-desc.html --- .../102_incipit/step-05/102_incipit_step-05-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html index 89674918d..54e15b323 100644 --- a/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html +++ b/_tutorials-FA/102_incipit/step-05/102_incipit_step-05-desc.html @@ -2,7 +2,7 @@ <p class="tutorialGoal">مرحله پنجم: <span style="font-size: 2rem;">در این مرحله </span><span style="font-size: 2rem;">برای تلفیق آنچه در دو مرحله گذشته یاد گرفته‌اید، </span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">هم ساختار میزان بعدی و هم</span><span style="font-size: 2rem;"> نت دوم ملودی نمونه را رمزگذاری خواهید کرد.</span></p> <p class="tutorialTask">در ویرایشگر زیر، بعد از میزانی که تابحال نوشته اید، یک المنت <code><measure></code> دیگر اضافه کنید - (<code>@n="1"</code>) به همراه حامل (برای حامل هم: <code>@n="1"</code>) با یک لایه صدایی (<span style="font-family: monospace;"><layer></span>). نت دوم مثال (یک نت می‌بمل سیاه E-flat 4) را به این میزان جدید اضافه کنید. نگران ناقص بودن این میزان (باتوجه به میزان‌نما) نباشید – شما آن را در مراحل بعدی پر خواهید کرد.</p> + (<code>@n="1"</code>) به همراه حامل (برای حامل هم: <code>@n="1"</code>) با یک لایه صدایی (<span style="font-family: monospace;"><layer></span>). نت دوم مثال (یک نت می‌بمل سیاه E-flat 4) را به این میزان جدید اضافه کنید. نگران ناقص بودن این میزان (باتوجه به میزان‌نما) نباشید –در مراحل بعدی کامل خواهد شد.</p> <p>پ.ن: رمزگذاری به محض وارد کردن نت جدید نمایش داده می‌شود.</p> -</div> \ No newline at end of file +</div> From dd2433ede814273659c5bfd09f4ada86aee5d265 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:25:01 +0330 Subject: [PATCH 13/40] Update 102_incipit_step-07-desc.html --- .../102_incipit/step-07/102_incipit_step-07-desc.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html index c5325f048..567ac24e6 100644 --- a/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html +++ b/_tutorials-FA/102_incipit/step-07/102_incipit_step-07-desc.html @@ -2,7 +2,7 @@ <p class="tutorialGoal">مرحله هفتم: رمزگذاری نت‌های نقطه‌دار.</p> <p>دو نت بعدی در ملودی، الگوی ریتمیک جدیدی دارند: یک نت سیاه نقطه‌دار و یک چنگ. برای رمزگذاری یک نت نقطه‌دار، باید از خصیصه <code>@dots</code> در المنت - <code><note></code> استفاده کنید و تعداد نقاط را به عنوان مقدار خصیصه قرار دهید، به عنوان مثال <span style="font-size: 2rem;">برای یک نقطه:</span><span style="font-size: 2rem;"> </span><code style="font-size: 2rem;">“1”</code><span style="font-size: 2rem;"> یا </span><span style="font-size: 2rem;">برای دو نقطه: </span><code style="font-size: 2rem;">“2”</code><span style="font-size: 2rem;">.</span></p> - + <code><note></code> استفاده کنید و تعداد نقاط را به عنوان مقدار خصیصه قرار دهید، به عنوان مثال برای یک نقطه:<code>“1”</code> یا برای دو نقطه:;<code>“2”</code> + </p> <p class="tutorialTask">لطفاً بقیه میزان (<code>@n=1</code>) را در ویرایشگر زیر رمزگذاری کنید و دو المنت <code><note></code> با ارزشهای زمانی مختلف (سیاه نقطه‌دار، چنگ) را درون المنت <code><beam></code> که در مرحله قبل اضافه کرده‌اید، اضافه کنید.</p> -</div> \ No newline at end of file +</div> From 13ed3e4defc7b8c7090e75f41009f1e3d3e6899b Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:26:51 +0330 Subject: [PATCH 14/40] Update 102_incipit_step-08-desc.html --- .../102_incipit/step-08/102_incipit_step-08-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html index 26bbadc04..872c9d1dd 100644 --- a/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html +++ b/_tutorials-FA/102_incipit/step-08/102_incipit_step-08-desc.html @@ -1,4 +1,4 @@ -<div> +direction: rtl<div> <p class="tutorialGoal">مرحله هشتم: رمزگذاری کامل میزان بعدی برای مرور همه نکاتی که در این مراحل آموخته‌اید.</p> <p class="tutorialTask">لطفاً میزان بعدی را (<code>@n=2</code>) در ویرایشگر زیر رمزگذاری کنید. یک المنت @@ -6,5 +6,5 @@ <code><beam></code> با دو نت چنگ <code><note></code> (E-flat 4، G4) و یک نت سیاه نقطه‌دار <code><note></code> (B-flat 4) با یک نت چنگ <code><note></code> (G4).</p> - <p>به‌عنوان یک چالش اضافی، این بار کادر ویرایشگر هیچ محتوای پیش‌فرضی ندارد، بنابراین شما هیچ راهنمایی از رمزگذاری میزان‌های قبلی دریافت نمی‌کنید. البته اگر مطئن نبودید، می‌توانید به نکات راهنما که در زیر کادر ویرایشگر نمایش داده می‌شود توجه کنید.</p> + <p>به‌عنوان یک چالش بیشتر، این بار کادر ویرایشگر هیچ محتوای پیش‌فرضی ندارد، بنابراین شما هیچ راهنمایی از رمزگذاری میزان‌های قبلی دریافت نمی‌کنید. البته اگر مطئن نبودید، می‌توانید به نکات راهنما که در زیر کادر ویرایشگر نمایش داده می‌شود توجه کنید.</p> </div> From edbb16cf281fc4dd992832612d858adc454f4ac4 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:28:28 +0330 Subject: [PATCH 15/40] Update 102_incipit_step-09-desc.html --- _tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html index 90cc9fff2..2898704f8 100644 --- a/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html +++ b/_tutorials-FA/102_incipit/step-09/102_incipit_step-09-desc.html @@ -11,5 +11,5 @@ <code><layer></code> و همچنین المنت‌های متناظر <code><note></code>، <code><beam></code> یا <code><rest></code> را اضافه کنید. یادتان باشد که المنت <code><beam></code> میتواند المنت‌های <code><note></code> را گروه‌بندی کند.</p> - <p>در این مرحله هم هیچ محتوای پیش‌فرضی در جعبه ویرایشگر وجود ندارد. هروقت احساس گیجی داشتید، سعی کنید به نکات راهنما (زیر کادر ویرایشگر) توجه کنید. </p> + <p>در این مرحله هم هیچ محتوای پیش‌فرضی در کادر ویرایشگر وجود ندارد. هروقت احساس کردید گیج شده‌اید، سعی کنید به نکات راهنما (زیر کادر ویرایشگر) توجه کنید. </p> </div> From 51b8aaa2fab2efc6c631302005de4b1cca2f3ca1 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:30:02 +0330 Subject: [PATCH 16/40] Update 102_incipit_step-10-desc.html --- _tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html index d7e6a124e..969e51176 100644 --- a/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html +++ b/_tutorials-FA/102_incipit/step-10/102_incipit_step-10-desc.html @@ -1,7 +1,7 @@ <div> <p class="tutorialGoal">مرحله دهم: افزودن علامت‌های اجرایی (آرتیکولاسیون).</p> - <p>عالی! شما کل خط ملودی را رمزگذاری کرده‌اید. حالا، بیایید المنت‌های اضافی که جا مانده‌اند، مانند دینامیک‌ها، خطوط اتصال یا تاکیدات را مرحله به مرحله بررسی کنیم.</p> + <p>عالی! شما کل خط ملودی را رمزگذاری کرده‌اید. حالا، بیایید المنت‌های اضافی را که جا مانده‌اند (مانند دینامیک‌، خطوط اتصال یا تاکیدها) مرحله به مرحله بررسی کنیم.</p> <p>علائم اجرایی، یعنی نشانه‌هایی از چگونگی اجرای یک نت یا آکورد، می‌توانند با المنت‌های <code><artic></code> که به عنوان فرزندهای المنت‌های <code><note></code> اعمال می‌شوند، رمزگذاری شوند. خصیصه‌های زیر در المنت <code><artic></code> باید در این مرحله از درس استفاده شود:</p> From eb2daf4a4bb1a617d8ec285f5a9ae1fc5841b94c Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:36:25 +0330 Subject: [PATCH 17/40] Update 102_incipit_step-11-desc.html --- .../step-11/102_incipit_step-11-desc.html | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html index 564dda502..6d32b8265 100644 --- a/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html +++ b/_tutorials-FA/102_incipit/step-11/102_incipit_step-11-desc.html @@ -1,5 +1,5 @@ <div> - <p class="tutorialGoal">گام یازدهم: اضافه کردن علامت دینامیک به کدگذاری ملودی نمونه.</p> + <p class="tutorialGoal">گام یازدهم: اضافه کردن علامت دینامیک به کدگذاری عبارت آغازین نمونه.</p> <p>علائم مربوط به دینامیک (نوانس) با المنت <code><dynam></code> تعریف می‌شوند. المنت <code><dynam></code> می‌تواند برای علائم متنی دینامیک ناگهانی یا پیوسته مانند <code>“p”</code>، @@ -7,11 +7,9 @@ و بسته المنت <code><dynam></code> قرار می‌گیرند، مانند <code><dynam>pp</dynam></code>.</p> <p>برخلاف علائم آرتیکولاسیون، المنت <code><dynam></code> یک "رویدادِ کنترل‌گر" است (مانند المنتهایی چون - دینامیک‌ها، کشش‌ها، علائم فراز، علائم پدال و غیره) که وابسته به رویدادهای دیگر (<span - style="font-size: 2rem;">مانند نت‌ها یا سکوت‌ها) </span><span style="font-size: 2rem;">هستند. در کل، + دینامیک‌ها، کشش‌ها، علائم فراز، علائم پدال و غیره) که وابسته به رویدادهای دیگر (مانند نت‌ها یا سکوت‌ها) هستند. در کل، رویدادهای کنترل‌گر به عنوان فرزند المنتهایی که برای کنترل آنها طراحی شده‌اند کدگذاری نمی‌شوند. به عبارت - ساده‌تر، در بیشتر موارد این رویدادها خارج از المنت </span><code style="font-size: 2rem;">staff</code><span - style="font-size: 2rem;"> قرار می‌گیرند.</span></p> + ساده‌تر، در بیشتر موارد این رویدادها خارج از المنت <code>staff</code> قرار می‌گیرند.<p/> <p>روش‌های مختلفی برای اشاره به المنت‌های <code><note></code> یا <code><rest></code> (یا هر رویداد دیگر) از یک "رویدادِ کنترل‌گر" مانند <code><dynam></code> وجود دارد:</p> @@ -31,7 +29,7 @@ <p>خصیصه‌های زیر باید در المنت <code><dynam></code> استفاده شوند:</p> <ul> - <li><code>@staff</code> – شماره شناسه استاف که یک المنت بر آن اعمال می‌شود، مانند <code>“1”</code> در این مثال + <li><code>@staff</code> – شماره شناسه حامل که یک المنت بر آن اعمال می‌شود، مانند <code>“1”</code> در این مثال </li> <li><code>@tstamp</code> (شناسه زمان) – زمان آغاز در قالب زمان موسیقی، یعنی ضرب‌ها، مانند <code>“1”</code> یا <code>“2.5”</code></li> @@ -39,7 +37,6 @@ </ul> <p class="tutorialTask">لطفاً المنت‌های <code><note></code> را در نمونه‌ای که دینامیک‌ها به آن‌ها اختصاص داده - شده است پیدا کنید. یک المنت هم‌رده <code><dynam></code> به المنت <code><staff></code> مربوطه اضافه - کنید و خصیصه‌های مورد نظر (<code>@staff</code>، <code>@tstamp</code>، <code>@place</code>) را اعمال کنید. فراموش - نکنید که علامت <code>ff</code> را بین تگ‌های باز و بسته <code><dynam></code> درج کنید.</p> + شده است پیدا کنید. یک المنت هم‌رده <code><dynam></code> به المنت <code><staff></code> مربوطه بیفزایید و خصیصه‌های مورد نظر (<code>@staff</code>، <code>@tstamp</code>، <code>@place</code>) را اعمال کنید. فراموش + نکنید که علامت <code>ff</code> باید بین تگ‌های باز و بسته <code><dynam></code> درج شود.</p> </div> From 10876fbbee24899c007f8179ed9fcd1bd09a0935 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sun, 13 Apr 2025 10:37:57 +0330 Subject: [PATCH 18/40] Update 102_incipit_end.html --- _tutorials-FA/102_incipit/102_incipit_end.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_tutorials-FA/102_incipit/102_incipit_end.html b/_tutorials-FA/102_incipit/102_incipit_end.html index 3a78d280f..e5160e38c 100644 --- a/_tutorials-FA/102_incipit/102_incipit_end.html +++ b/_tutorials-FA/102_incipit/102_incipit_end.html @@ -1,10 +1,10 @@ <div> <h3>تبریک!</h3> - <p>حالا شما با موفقیت این درس پیشرفته را به پایان رسانده‌اید و باید بتوانید یک ملودی تک‌صدایی با چند میزان، نت‌ها و سکوتها با ارزشهای زمانی مختلف، خطوط شاهین، اسلر و دینامیک‌ها را کدگذاری کنید.</p> + <p>حالا شما با موفقیت این درس پیشرفته را به پایان رسانده‌اید و باید بتوانید یک ملودی تک‌صدایی با چند میزان، نت‌ها و سکوت‌ها با ارزش‌های زمانی مختلف، خطوط شاهین، اسلر و دینامیک‌ها را کدگذاری کنید.</p> - <p>اینجا چند آموزش دیگر وجود دارد که ما به عنوان گام‌های بعدی در MEI توصیه می‌کنیم. البته، شما همیشه می‌توانید به این آموزش‌ها (یا حتی همین یکی) بازگردید وقتی که می‌خواهید خودتان را در انجام کارهای خاصی در MEI یادآوری کنید.</p> + <p>چند آموزش دیگر هست که ما به عنوان گام‌های بعدی در MEI توصیه می‌کنیم. البته، شما همیشه می‌توانید به این آموزش‌ها (یا حتی همین یکی) بازگردید وقتی که می‌خواهید خودتان را در انجام کارهای خاصی در MEI یادآوری کنید.</p> <p> وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer">جامعه MEI</a> به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک <a href="./199-writing-tutorials.html" target="_blank" rel="noopener, noreferrer"> درس در مورد نحوه نوشتن آموزش‌ها</a> داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) </p> -</div> \ No newline at end of file +</div> From 440ae059eabef6bf445a0293e1a83d5a30707bdb Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 21 Apr 2025 06:45:39 +0330 Subject: [PATCH 19/40] Update 103_chords_end.html --- _tutorials-FA/103_chords/103_chords_end.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/103_chords/103_chords_end.html b/_tutorials-FA/103_chords/103_chords_end.html index ea65678e0..c72d8a352 100644 --- a/_tutorials-FA/103_chords/103_chords_end.html +++ b/_tutorials-FA/103_chords/103_chords_end.html @@ -1,12 +1,12 @@ <div> <h3>تبریک!</h3> - <p>شما به‌تازگی این آموزش مقدماتی در مورد آکوردها در MEI را به پایان رسانده‌اید و باید بتوانید توالی‌های ساده‌ای از آکوردها را با MEI کدگذاری کنید. + <p>شما این آموزش مقدماتی در مورد آکوردها در MEI را به پایان رسانده‌اید و باید بتوانید توالی‌های ساده‌ای از آکوردها را با MEI کدگذاری کنید. </p> <p> - البته، موارد زیادی برای یک فایل جامع MEI مورد نیاز است – ما تمام اطلاعات ساختاری در مورد المنت‌های measure و staff را کنار گذاشته‌ایم، و همچنین باید یاد بگیرید که چگونه میزان‌نما، مایه‌نما و کلیدهای نت‌نویسی را تنظیم کنید. به عنوان مراحل بعدی با MEI، پیشنهاد می‌کنیم آموزش ما در مورد <a href="./104-rests.html" target="_blank" rel="noopener, noreferrer">سکوت‌ها</a> را دنبال کنید. - البته، همیشه میتوانید برای یادگیری این درس‌ها، می‌توانید به این آموزش‌ها بازگردید. + البته، موارد زیادی برای یک فایل جامع MEI مورد نیاز است – ما تمام اطلاعات ساختاری در مورد المنت‌های measure و staff را کنار گذاشته‌ایم، و همینطور، باید یاد بگیرید که چگونه میزان‌نما، مایه‌نما و کلیدهای نت‌نویسی را تنظیم کنید. به عنوان مراحل بعدی در فراگیری MEI، پیشنهاد می‌کنیم آموزش ما در مورد <a href="./104-rests.html" target="_blank" rel="noopener, noreferrer">سکوت‌ها</a> را دنبال کنید. + البته، همیشه میتوانید برای مرور، به این آموزش‌ها بازگردید. </p> <p> وقتی تا حدودی با MEI آشنا شدید، از شما دعوت می‌کنیم تجربه خود را با <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer">جامعه MEI</a> به اشتراک بگذارید و یک آموزش درباره جنبه‌ای از MEI که به آن علاقه‌مندید بنویسید. برای این کار لازم نیست حتماً متخصص باشید – خوب است درس‌ها را در سطوح متفاوتی داشته‌باشیم و خیلی وقت‌ها، پیش رفتن با آموزشی که یک تازه‌وارد نوشته، آسان‌تر از درسی است که یک متخصص نوشته چون ممکن است برای یک متخصص، الفبای موضوع آنقدر بدیهی باشد که اشاره‌ای به آن نکند. ما یک <a href="./199-writing-tutorials.html" target="_blank" rel="noopener, noreferrer"> درس در مورد نحوه نوشتن آموزش‌ها</a> داریم که در آن می‌توانید با الگوهای قراردادی نوشتن آموزش‌ها آشنا شوید و به این راحتی عضو فعال جامعه MEI شوید :-) </p> - </div> \ No newline at end of file + </div> From cd20fdf149c35ef89225d90ca855dda856199d25 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 21 Apr 2025 06:50:17 +0330 Subject: [PATCH 20/40] Update 103_chords_step-01-desc.html --- .../103_chords/step-01/103_chords_step-01-desc.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html b/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html index 1feaee6fc..f62491772 100644 --- a/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html +++ b/_tutorials-FA/103_chords/step-01/103_chords_step-01-desc.html @@ -1,8 +1,8 @@ <div> <p class="tutorialGoal"> - گام اول: چند نت‌ها را برای یک آکورد فراهم کنید. + گام اول: چند نت‌ را برای یک آکورد فراهم کنید. </p> - <p>در MEI، مفهوم یک آکورد به معنای "صدا دادن همزمان دو یا چند نت در یک لایه‌ی صوتی با مدت زمان مشابه" است (به + <p>در MEI، مفهوم یک آکورد به معنای "صدا دادن همزمان دو یا چند نت در یک بخش صدایی، با مدت زمان مشابه" است (به <a href="https://music-encoding.org/guidelines/v4/elements/chord.html" target="_blank" rel="noopener, noreferrer">مشخصات المنت</a> مراجعه کنید). بنابراین، یک آکورد از دو یا چند المنت نت که به یک صدا (لایه) تعلق دارند و ارزش زمانی یکسانی دارند @@ -16,7 +16,7 @@ <code><note></code> داخلی اضافه کنید، یا ابتدا با نت‌ها شروع کنید و سپس آنها را در یک المنت <code><chord></code> محصور کنید، در عمل تفاوتی ندارد.</p> <p>برای این آموزش، بیایید به رویکرد دوم پایبند باشیم: این یعنی ابتدا به چند نت نیاز داریم.</p> - <p class="tutorialTask">در ویرایشگر زیر، لطفاً سه المنت <code><note></code> زیر را وارد کنید:</p> + <p class="tutorialTask"> لطفاً سه المنت <code><note></code> زیر را وارد ویرایشگر کنید:</p> <ul> <li><code><note pname="e" oct="4" dur="4"/></code></li> @@ -26,6 +26,6 @@ <p>شما باید سه نت را به ترتیب (یکی پس از دیگری) ببینید. فعلاً شبیه به آکورد نیست. اما نگران نباشید؛ در مرحله بعدی به آن خواهیم پرداخت. تا آن زمان، می‌توانید با مقادیر خصیصه‌ها بازی کنید تا ببینید چگونه بر خروجی تأثیر می‌گذارند. - همچنین راهنمایی‌هایی درباره نحوه نوشتن کد صحیح خواهید دید. هر زمان آماده شدید، مطمئن شوید که کد صحیح در ویرایشگر - وجود دارد و سپس دکمه "ادامه" را فشار دهید.</p> -</div> \ No newline at end of file + همچنین راهنمایی‌هایی درباره نحوه نوشتن کد صحیح، زیر ویرایشگر برای شما نمایان خواهد شد. هر زمان آماده شدید، مطمئن شوید که کد صحیح را در ویرایشگر + نوشته‌اید و سپس دکمه "ادامه" را فشار دهید.</p> +</div> From b50fff9d3406a0346acac6c0941f74b444bd06ac Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 21 Apr 2025 06:52:20 +0330 Subject: [PATCH 21/40] Update 103_chords_step-02-desc.html --- .../103_chords/step-02/103_chords_step-02-desc.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html b/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html index 5e27d06cc..6c456e709 100644 --- a/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html +++ b/_tutorials-FA/103_chords/step-02/103_chords_step-02-desc.html @@ -3,14 +3,13 @@ گام دوم: یک آکورد ساده (تریاد) را کدگذاری کنید. </p> <p>خوب، حالا وقت آن است که از این سه المنت <code><note></code> یک <code><chord></code> بسازید. همانطور - که در مرحله قبل ذکر شد، باید المنت‌های نت را در یک المنت <code><chord></code> محصور کرده و خصیصه‌های مدت - زمان را از نت‌ها به آکورد منتقل کنید.</p> + که در مرحله قبل ذکر شد، باید المنت‌های نت را در یک المنت <code><chord></code> محصور کرده و خصیصه‌ کشش زمانی را از نت‌ها به آکورد منتقل کنید.</p> <p class="tutorialTask">در ویرایشگر زیر، سه المنت <code><note></code> را در یک المنت <code><chord></code> محصور کنید (یعنی تگ آغازین <code><chord></code> را قبل از اولین نت و تگ پایانی - را بعد از آخرین نت وارد کنید). حالا باید سه نت به جای اینکه به ترتیب قرار بگیرند، به صورت عمودی مرتب شوند، اما - هنوز مدت زمان صحیحی ندارند. بنابراین خصیصه‌های مدت زمان را از همه نت‌ها حذف کرده و به آکورد اضافه‌اش کنید. مدت + را بعد از آخرین نت بگذارید). حالا باید سه نت به جای اینکه به ترتیب قرار بگیرند، به صورت عمودی مرتب شوند، اما + هنوز مدت زمان صحیحی ندارند. بنابراین خصیصه‌های کشش زمانی را از همه نت‌ها حذف کرده و به آکورد اضافه‌اش کنید. مدت زمان نت سیاه (<code>@dur="4"</code>) را نگه دارید.</p> <p>شما باید آکورد را در خروجی ببینید. دوباره، می‌توانید با مقادیر خصیصه‌ها بازی کنید تا ببینید چگونه بر خروجی تأثیر می‌گذارند. هر زمان آماده شدید، مطمئن شوید که کد صحیح در ویرایشگر وجود دارد و سپس دکمه "ادامه" را در پایین سمت راست فشار دهید.</p> -</div> \ No newline at end of file +</div> From 1291aa8556d2ab551f5976d681f04d4932ac64f2 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 21 Apr 2025 06:56:11 +0330 Subject: [PATCH 22/40] Update 103_chords_step-03-desc.html --- .../103_chords/step-03/103_chords_step-03-desc.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html b/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html index baa203659..e409f22f5 100644 --- a/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html +++ b/_tutorials-FA/103_chords/step-03/103_chords_step-03-desc.html @@ -3,12 +3,12 @@ گام سوم: یک توالی ساده از آکوردها کدگذاری کنید. </p> <p>عالی! شما یک آکورد را در MEI کدگذاری کرده‌اید! حالا بیایید در ادامه، چند آکورد دیگر اضافه کنیم تا یک زنجیره‌ی - آکوردی ساده را کدگذاری کنیم: + آکوردی ساده بسازیم: <img style="display: block; margin: .5rem auto; width: 240px;" src="./103_chord-sequence.png" alt="Simple chord sequence"> </p> <p class="tutorialTask">در ویرایشگر زیر، لطفاً سعی کنید زنجیره آکوردی بالا را با MEI بازتولید کنید. نت‌ها با - المنت‌های آکورد محصور می‌شوند. هر آکورد به یک خصیصه <code>@dur</code> نیاز دارد و هر نت به خصیصه‌های + تگ‌های آغازین و پایانی آکورد محصور می‌شوند. هر آکورد به یک خصیصه <code>@dur</code> و هر نت به خصیصه‌های <code>@pname</code> و <code>@oct</code> نیاز دارد.</p> -</div> \ No newline at end of file +</div> From 573fe0014e0fd1bd4832e3f493ee565fb3fdfc7b Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:58:41 +0330 Subject: [PATCH 23/40] Update 104_rests_step-00-desc.html --- .../104_rests/step-00/104_rests_step-00-desc.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html b/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html index da4146e04..2a76db5ef 100644 --- a/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html +++ b/_tutorials-FA/104_rests/step-00/104_rests_step-00-desc.html @@ -1,10 +1,10 @@ <div> - <p> در این آموزش، خواهید آموخت که چگونه انواع مختلف سکوت‌ها را در رپرتوار مربوط به نت‌نگاری رایج (Common Music Notation - CMN)با استفاده از + <p> در این آموزش، خواهید آموخت که چگونه انواع مختلف سکوت‌ها را -در رپرتوار مربوط به نت‌نگاری رایج (Common Music Notation - CMN)- با استفاده از MEI کدگذاری کنید. </p> - <p> لطفاً در صورت نیاز به اطلاعات بیشتر برای حل مسئله زیر، به <a href="/tutorials/100-structure.html" target="_blank" rel="noopener, noreferrer">مبانی XML و ساختار مینیمال MEI</a> و/یا آموزش <a href="/tutorials/101-quickstart.html" target="_blank" rel="noopener, noreferrer">شروع سریع</a> مراجعه + <p> لطفاً در صورت نیاز به اطلاعات بیشتر برای حل مسئله زیر، به <a href="/tutorials/100-structure.html" target="_blank" rel="noopener, noreferrer">مبانی XML و ساختار مینیمال MEI</a> و/یا آموزش <a href="/tutorials/101-quickstart.html" target="_blank" rel="noopener, noreferrer">شروع سریع</a> رجوع کنید. </p> <p> طبق <a href="/guidelines/v4/elements/rest.html" target="_blank" rel="noopener, noreferrer">تعریف MEI</a>، - یک سکوت "رویدادی غیر صوتی است که در متن قرار دارد". کدگذاری آن ساده است: فقط + یک سکوت "رویدادی غیر صوتی است که در متن قرار می‌گیرد". کدگذاری آن ساده است: فقط از یک المنت <code><rest></code> استفاده کنید، با یک خصیصه <code>@dur</code>. </p> <p class="tutorialTask"> لطفاً یک سکوت نت سیاه را کدگذاری کنید. </p> -</div> \ No newline at end of file +</div> From fdaab622b5b4f3dce9cda60be42828ce54bcf6bf Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:59:31 +0330 Subject: [PATCH 24/40] Update 104_rests_step-01-desc.html --- _tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html b/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html index 66d0dcd4d..37fcfaf07 100644 --- a/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html +++ b/_tutorials-FA/104_rests/step-01/104_rests_step-01-desc.html @@ -3,7 +3,7 @@ تبریک! شما اولین سکوت خود را کدگذاری کردید. مورد بعدی هم همینقدر آسان است: </p> <p class="tutorialTask"> - یک توالی از پنج سکوت را کدگذاری کنید: + پنج سکوت زیر را به ترتیب کدگذاری کنید: <img style="display: block; margin: .5rem auto; width: 240px;" src="./104_rests.png" alt="یک توالی از سکوت‌ها"> </p> <p> @@ -12,4 +12,4 @@ <code>@dur</code> می‌تواند مقادیری مانند <code>"1"</code>, <code>"2"</code>, <code>"4"</code>, <code>"8"</code> یا <code>"16"</code> داشته باشد. </p> -</div> \ No newline at end of file +</div> From 3acfdb202699920806665866a8bec4f7d804d410 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 09:03:45 +0330 Subject: [PATCH 25/40] Update 104_rests_step-02-desc.html --- _tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html b/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html index 8ef9e24cf..b800b5908 100644 --- a/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html +++ b/_tutorials-FA/104_rests/step-02/104_rests_step-02-desc.html @@ -1,6 +1,6 @@ <div> <p> - اغلب، سکوت باید یک میزان کامل را پر کند، بدون توجه به متر. + اغلب، سکوت باید یک میزان را - بدون توجه به متر- کامل پر کند، البته ممکن است از المنت‌های <code><rest></code> معمولی با ارزش زمانی مناسب برای این کار استفاده کنید – در حالت متر 4/4، این فقط یک <code><rest dur="1"/></code> خواهد بود. با این حال، در مترهای دیگر ممکن است به نشانه‌گذاری بیشتری نیاز داشته باشد. @@ -12,4 +12,4 @@ <p class="tutorialTask"> لطفاً سکوت گرد (که لزوماً با متر مطابقت ندارد) را به یک <code><mRest/></code> تبدیل کنید. </p> -</div> \ No newline at end of file +</div> From c5f127e08dc4d755edf098e4869961c2c0970e6c Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 09:04:32 +0330 Subject: [PATCH 26/40] Update 104_rests_step-03-desc.html --- _tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html b/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html index 12c8cdc4a..ba5f85c1f 100644 --- a/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html +++ b/_tutorials-FA/104_rests/step-03/104_rests_step-03-desc.html @@ -1,6 +1,6 @@ <div> <p> - در موسیقی‌ای که معمولاً برای پارتهای مختلفتنظیم می‌شود، خیلی پیش می‌آید سکوت‌هایی بیش از یک میزان طول بکشند. + در موسیقی‌ای که معمولاً برای پارت‌های مختلف تنظیم می‌شود، خیلی پیش می‌آید سکوت‌هایی بیش از یک میزان طول بکشند. <img style="display: block; margin: .5rem auto; width: 120px;" src="./104_rests-multirest.png" alt="سکوت چندین میزان"> </p> <p> @@ -9,6 +9,6 @@ استفاده می‌کند. </p> <p class="tutorialTask"> - لطفاً یک <code><multiRest/></code> به مدت 15 میزان کدگذاری کنید. + لطفاً یک <code><multiRest/></code> به طول 15 میزان کدگذاری کنید. </p> -</div> \ No newline at end of file +</div> From 43d3e7694cd70ed11daaffd2e03a36cea3e2affe Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 09:34:03 +0330 Subject: [PATCH 27/40] Update 104_rests_step-04-desc.html --- .../step-04/104_rests_step-04-desc.html | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html b/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html index 2357096fc..50979a4fc 100644 --- a/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html +++ b/_tutorials-FA/104_rests/step-04/104_rests_step-04-desc.html @@ -1,25 +1,36 @@ <div> <p> - وقتی چند ساز یا بخش صدایی در یک حامل مشترک نوشته‌ شده‌باشند، گاهی لازم است که رویدادهایی مانند نت‌ها را - به جایی بعدتر در میزان هل بدهیم، بدون اینکه بگوییم آنها در حال سکوت هستند. این معمولاً زمانی اتفاق - می‌افتد که سندی که قرار است کدگذاری شود، بین حالت «نت‌نویسی مبتنی بر آکورد» و «ساقه‌های جداگانه در یک میزان» تغییر شکل دهد (به شکل زیر مراجعه کنید). از آنجایی که MEI از المنت <a href="/guidelines/v4/elements/layer.html" target="_blank" rel="noopener, noreferrer"><layer></a> برای چیدمان چندین ساز استفاده می‌کند، و در - این موقعیت‌ها یک ساز بین این لایه‌ها در میان میزان تغییر می‌کند، "فاصله‌ها" در آن میزان‌ها باید پر شوند. و این، دلیل وجود المنت <code><space></code> است!<img style="display: block; margin: .5rem auto; width: 240px;" src="./104_rests-spaces.png" alt="موقعیتی که نیاز به المنت‌های space دارد"> + وقتی چند ساز یا بخش صدایی در یک حامل مشترک نوشته‌ شده‌باشند، گاهی لازم است که رویدادهایی مانند نت‌ها را به جایی بعدتر در میزان هل بدهیم، بدون اینکه اشاره کنیم آن بخش در حال سکوت است. این معمولاً زمانی اتفاق + می‌افتد که سندی که قرار است کدگذاری شود، بین حالت «نت‌نویسی مبتنی بر آکورد» و «ساقه‌های جداگانه در یک میزان» + تغییر شکل دهد (به شکل زیر نگاه کنید). چون MEI از المنت <a href="/guidelines/v4/elements/layer.html" + target="_blank" rel="noopener, noreferrer"><layer></a> برای چیدمان چندین ساز استفاده می‌کند، و در + این موقعیت‌ها یک ساز بین این لایه‌ها در میان میزان تغییر می‌کند، "فاصله‌ها" در آن میزان‌ها باید پر شوند. و این + به این دلیل به المنت <code><space></code> نیاز داریم!<img + style="display: block; margin: .5rem auto; width: 240px;" src="./104_rests-spaces.png" + alt="موقعیتی که نیاز به المنت‌های space دارد"> </p> <p> - البته، فضای خالی واقعاً سکوت محسوب نمی‌شود. با این حال، <span style="font-size: 2rem;">در فرمت‌های کدگذاری یا برنامه‌های نت‌نویسی دیگر، </span><span style="font-size: 2rem;">اغلب برای این اهداف از </span><span style="font-size: 2rem;">سکوت‌های نامرئی استفاده می‌شود. مزیت المنت </span><code style="font-size: 2rem;"><space></code><span style="font-size: 2rem;"> در MEI این است که + البته، فضای خالی واقعاً سکوت محسوب نمی‌شود. با این حال، در فرمت‌های کدگذاری یا برنامه‌های نت‌نویسی + دیگر، + اغلب برای این اهداف از سکوت‌های نامرئی استفاده می‌شود. مزیت المنت <code> + <space></code> در MEI این است که هیچ معنایی ندارد – فقط رویدادهای دیگر را به اطراف منتقل می‌کند. این باعث می‌شود که پردازش یک کدگذاری و - استخراج صداهای جداگانه از آن بسیار آسان‌تر باشد، زیرا اینطور نیست که صرفاً برای هماهنگی بهتر، المنت اطلاعاتی نادرستی را معرفی کرده باشیم.</span></p> + استخراج صداهای جداگانه از آن بسیار آسان‌تر باشد، زیرا اینطور نیست که صرفاً برای هماهنگی بهتر، المنت اطلاعاتی + نادرستی را معرفی کرده باشیم.</p> <p> - با این حال، می‌توانید مدت زمانی را به المنت <code><space></code> اختصاص دهید، با استفاده از خصیصه - <code>@dur</code>. حتی می‌توانید از <code>@dots</code> برای یک و نیم برابر کردن ارزش زمانی اش استفاده کنید. - ارزش زمانی‌ای که به <code><space></code> اختصاص می‌دهید، تعداد ضرباتی است که رویدادهایی مانند + با این حال، می‌توانید برای المنت <code><space></code> ارزش زمانی در نظر بگیرید -با استفاده از خصیصه + <code>@dur</code>. حتی می‌توانید از <code>@dots</code> برای یک و نیم برابر کردن ارزش زمانی‌اش استفاده کنید. + ارزش زمانی‌ای که به <code><space></code> اختصاص می‌دهید، تعداد ضرب‌هایی است که رویدادهایی مانند <code><note></code> پس از <code><space></code> به سمت راست منتقل می‌شوند. </p> <p class="tutorialTask"> - در ویرایشگر زیر، شما یک کدگذاریِ از پیش نوشته شده <span style="font-size: 2rem;">را</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">از نت G4 (که در ضرب اول لایه‌صدایی دوم قرار دارد) می‌بینید. - لطفاً این نت را به انتهای میزان منتقل کنید تا در ضرب آخر میزان زیر نت D5 قرار گیرد، همان‌طور که در تصویر بالا - دیده می‌شود. برای این کار، از المنت </span><code style="font-size: 2rem;"><space></code><span style="font-size: 2rem;"> استفاده کنید و مدت زمان مناسب (باید در مجموع - 3 ضرب باشد) را اعمال کنید. در واقع، روش‌های متعددی برای کدگذاری آن وجود دارد:</span></p> + در ویرایشگر زیر، شما یک کدگذاریِ از پیش نوشته شده رااز نت G4 (که در ضرب اول لایه‌ صدایی دوم + قرار دارد) می‌بینید. + لطفاً این نت را به انتهای میزان منتقل کنید تا در ضرب آخر میزان زیر نت D5 قرار گیرد، همان‌طور که در تصویر + بالا + دیده می‌شود. برای این کار، از المنت <code><space></code> + استفاده کنید و مدت زمان مناسب (باید در مجموع + 3 ضرب باشد) را اعمال کنید. در واقع، روش‌های متعددی برای کدگذاری آن وجود دارد:</p> <ul> <li>با استفاده از سه <code><space></code> با مقدار یکسان برای <code>@dur</code>،</li> <li>با استفاده از دو المنت <code><space></code> با دو مقدار متفاوت فقط برای <code>@dur</code>،</li> @@ -28,5 +39,6 @@ </li> </ul> <p> - می‌توانید کمی با مقادیر خصیصه‌ها بازی کنید تا ببینید که چگونه بر خروجی رندر تأثیر می‌گذارند. آیا میتوانید از هر سه راه حل جواب بگیرید؟</p> -</div> \ No newline at end of file + می‌توانید کمی با مقادیر خصیصه‌ها بازی کنید تا ببینید که چگونه بر خروجی رندر تأثیر می‌گذارند. آیا میتوانید از هر + سه راه حل جواب بگیرید؟</p> +</div> From 4cba03ed0e3bbc84737a6e075e4e580faac194db Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Mon, 28 Apr 2025 09:35:36 +0330 Subject: [PATCH 28/40] Update 104_rests_end.html --- _tutorials-FA/104_rests/104_rests_end.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/104_rests/104_rests_end.html b/_tutorials-FA/104_rests/104_rests_end.html index cb744a053..cae22354c 100644 --- a/_tutorials-FA/104_rests/104_rests_end.html +++ b/_tutorials-FA/104_rests/104_rests_end.html @@ -18,10 +18,10 @@ <h3>تبریک!</h3> </li> </ul> این المنت‌ها تقریباً همیشه خالی هستند و هیچ المنت فرزندی ندارند. با المنت space، شما با یک مکانیسم پیشرفته - هماهنگ‌سازی چندین صدا که یک staff را به اشتراک می‌گذارند، آشنا شدید. اگر به این موضوع علاقه‌مندید، ممکن است - بخواهید به خصیصه‌های <code>@next</code> و <code>@prev</code> از کلاس خصیصه <a href="/guidelines/v4/attribute-classes/att.linking.html" target="_blank" ref="noopener, noreferrer">att.linking</a> (موجود بر روی <code><note></code> و دیگر رویدادها) نیز + هماهنگ‌سازی چندین صدا که یک حامل را به اشتراک می‌گذارند، آشنا شدید. اگر به این موضوع علاقه‌مندید، ممکن است + بخواهید به خصیصه‌های <code>@next</code> و <code>@prev</code> از کلاس خصیصه <a href="/guidelines/v4/attribute-classes/att.linking.html" target="_blank" ref="noopener, noreferrer">att.linking</a> (برای المنت <code><note></code> و دیگر رویدادها) نیز نگاهی بیندازید. این کلاس خصیصه اجازه می‌دهد تا "ردپاهایی" در یک فایل MEI ایجاد شود که امکان دنبال کردن صداها در - بین چندین لایه (و اگر لازم باشد، چندین staff) را فراهم می‌کند. البته این ویژگی بیشتر برای استفاده تحلیلی از فایل MEI + بین چندین لایه (و اگر لازم باشد، چندین حامل) را فراهم می‌کند. البته این ویژگی بیشتر برای استفاده تحلیلی از فایل MEI مفید است و در اکثر موقعیت‌ها لازم نیست. <br><p></p> -</div> \ No newline at end of file +</div> From 8bc5b8e72a7b11bac5f1ab4cc1a4ecfe8ac47061 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 3 May 2025 05:10:27 +0330 Subject: [PATCH 29/40] Update 180_understanding_odd-01.html --- .../180_understanding_odd/180_understanding_odd-01.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html index 61866c350..770b92f6b 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-01.html @@ -2,16 +2,16 @@ <h1>درک ODD</h1> <p>این آموزش، درسی در سطح پیشرفته است که به بررسی ساختارهای درونی MEI می‌پردازد. با استفاده از این ساختارها، می‌توان MEI - را به نیازها و چشم‌اندازهای هر کاربردی از آن انتظار می‌رود محدود کرد؛ که به عنوان یک رویه خوب شناخته می‌شود. + را به نیازها و چشم‌اندازهای هر کاربردی از آن انتظار می‌رود محدود کرد؛ که اصولاً باعث بهینه‌تر شدن فرایند کدگذاری شده و به عنوان یک رویه خوب شناخته می‌شود. تنها با چنین نسخه - محدودشده‌ای (که معمولاً "سفارشی" نامیده می‌شود) از MEI، می‌توان اصول ویراستاری پروژه را طوری اعمال کرد که به‌طور + محدودشده‌ای از MEI (که معمولاً "سفارشی" نامیده می‌شود)، می‌توان اصول ویراستاری پروژه را طوری اعمال کرد که به‌طور فنی کیفیت داده‌ها را تضمین کند. هرچند چنین اعتبارسنجی به‌ندرت مانع از بروز خطاهای معنایی (مثلاً رمزگذاری نت‌های اشتباه) می‌شود، اما اطمینان می‌دهد که تنها از نشانه‌گذاری‌هایی استفاده می‌شود که جریان کار پروژه برای آن‌ها طراحی شده است و هیچ تفسیر نادرستی از نشانه‌گذاری‌های غیرمنتظره پیش نمی‌آید. </p> <p> این درس مفاهیم پایه‌ای زبان ODD را که برای تعریف MEI استفاده می‌شود معرفی می‌کند. در درس دیگری، به - معرفی جریان‌های کاری و ابزارهایی که به سفارشی‌سازی‌های فردی کمک می‌کنند، خواهیم پرداخت؛ اما شدیداً توصیه + معرفی جریان‌های کاری و ابزارهایی که به سفارشی‌سازی‌های فردی کمک می‌کنند، خواهیم پرداخت؛ اما اکیداً توصیه می‌کنیم ابتدا با ساختارهای زیرین در این درس آشنا شوید. </p> <p>صادقانه، این یکی از پیچیده‌ترین موضوعات مرتبط با MEI است و به‌طور قطع نیاز به زمان دارد تا با ODD بصورت کاربردی @@ -24,4 +24,4 @@ <h1>درک ODD</h1> در نهایت، شما در استفاده از استانداردهای DH مانند MEI ماهر خواهید شد – از اینجا به بعد، فقط کافی است روی «<b>ادامه» </b>کلیک کنید :-) </p> -</div> \ No newline at end of file +</div> From 82d91d05ba0ff0c5b0f7691045bb1f7e22428b6d Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 3 May 2025 05:14:22 +0330 Subject: [PATCH 30/40] Update 180_understanding_odd-02.html --- .../180_understanding_odd-02.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html index 4eeae4683..0be550ac8 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-02.html @@ -3,20 +3,20 @@ ODD، یک مخفف برای <em>یک سند برای همه‌کار «</em>One Document Does-it-all</i>است و بخشی از <a href="https://tei-c.org/guidelines/customization/getting-started-with-p5-odds/" target="_blank" rel="noopener, noreferrer">استاندارد TEI</a> - است که حتی برای تعریف خود TEI نیز استفاده می‌شود. + بوده که حتی برای تعریف خود TEI نیز استفاده می‌شود. </p> <p> ODD برای توصیف فرمت‌های مبتنی بر XML، از مجموعه‌ای از المنت‌های ویژه استفاده در - <a href="https://tei-c.org/ns/1.0/" target="_blank" rel="noopener, noreferrer">نام‌حوزه TEI</a>  استفاده + <a href="https://tei-c.org/ns/1.0/" target="_blank" rel="noopener, noreferrer">نام‌حوزه (Namespace) TEI</a>; استفاده می‌کند. علاوه بر TEI اصلی، از آن نه تنها برای فرمت‌های مبتنی بر TEI مانند <a href="https://sourceforge.net/p/epidoc/wiki/Home/" target="_blank" rel="noopener, noreferrer">EpiDoc</a>، بلکه برای فرمت‌هایی که به طور فنی مستقل هستند مانند MEI هم استفاده می‌شود. در سال ۲۰۱۶، TEI نسخه‌ای از ODD به نام <em><a href="https://wiki.tei-c.org/index.php/ODD#.22Pure_ODD.22" target="_blank" rel="noopener, noreferrer">ODD خالص</a></em> - را معرفی کرد. با این حال، از تابستان ۲۰۲۰،  MEI همچنان از نسخه قدیمی ODD استفاده می‌کند، زیرا نسخه + را معرفی کرد. با این حال، از تابستان ۲۰۲۰، MEI همچنان از نسخه قدیمی ODD استفاده می‌کند، زیرا نسخه جدید هیچ - مزیت مهمی برای MEI ندارد، اما باعث کار اضافه برای نگهداری ابزارها و جریان‌های کاری مرتبط با MEI + مزیت مهمی برای MEI ندارد و بیشتر باعث کار اضافه برای نگهداری ابزارها و جریان‌های کاری مرتبط با MEI می‌شود. </p> <p> @@ -29,4 +29,4 @@ MEI خارج است و باید با چندین نام‌حوزه XML کار کند، استدلال برای تعریف همه چیز به‌طور سازگار در <em>ODD خالص</em> زیاد جذاب نبوده و تا کنون دنبال نشده است. </p> -</div> \ No newline at end of file +</div> From 575657a9aa98230ab05004dffcb9995d73d2c3d7 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 3 May 2025 05:19:58 +0330 Subject: [PATCH 31/40] Update 180_understanding_odd-03.html --- .../180_understanding_odd-03.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html index 73385b053..e6150d883 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-03.html @@ -3,25 +3,24 @@ علیرغم نامش، تنظیمات پیش‌فرض برای کار با ODD معمولاً به حداقل <u>دو</u> فایل <em>منطقی</em> نیاز دارد (اگرچه این فایل‌ها ممکن است در فایل‌های بیشتری پخش شوند، همان‌طور که در مرحله بعدی این آموزش نشان داده شده است). اولین این فایل‌ها به اصطلاح <em>منبع (سورس)</em> است: این فایل شامل مشخصات کامل فرمت است، در این مورد - MEI. در مخزن ما، در فایل + MEI. در مخزن گیت‌هاب ما، در فایل <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/mei-source.xml" target="_blank" rel="noopener, noreferrer">mei-source.xml</a> قرار دارد. علاوه بر آن فایل، یک <em>سفارشی‌سازی</em> جداگانه مورد نیاز است تا مشخص کند کدام بخش‌های مشخصات - در یک زمینه خاص استفاده خواهند شد. هدف کلی ODD این است که سفارشی‌سازی‌های انعطاف‌پذیر از اسکیم فراهم شود. + در یک زمینه خاص استفاده خواهند شد. هدف کلی ODD این است که سفارشی‌سازی‌های انعطاف‌پذیر از شِما فراهم شود. MEI مجموعه‌ای از <a href="https://music-encoding.org/guidelines/v4/content/introduction.html#meiprofiles" target="_blank" rel="noopener, noreferrer">پروفایل‌های از پیش تعریف شده</a> - را فراهم می‌کند که چیزی جز سفارشی‌سازی‌های اسکیم MEI نیستند. + را فراهم می‌کند که چیزی جز سفارشی‌سازی‌های شِمای MEI نیستند. </p> <p> برای استفاده از MEI (یا هر فرمت مبتنی بر ODD دیگر)، از فایل <em>سفارشی‌سازی</em> استفاده می‌شود تا کنترل کند که چگونه فایل <em>منبع</em> کامپایل شود. چندین فرمت هدف برای آن کامپایل وجود دارد که در جای دیگری توضیح داده شده است<!-- TODO: Add reference to second tutorial -->. رایج‌ترین هدف یک فایل <a href="https://relaxng.org/" target="_blank" rel="noopener, noreferrer">RelaxNG</a> - است که هم سلسله مراتب RelaxNG و هم قوانین اضافی Schematron را به عنوان تعریف شده در ODD در بر می‌گیرد و - می‌تواند برای اعتبارسنجی در برابر هر دو نوع شِما استفاده شود. تمام فرمت‌های خروجی دیگر برای MEI به‌طور - معمول استفاده نمی‌شوند. - (یادداشت فرعی: ما بعداً در این آموزش به توضیح مختصر Schematron باز خواهیم گشت.) + است که هم سلسله مراتب RelaxNG و هم قوانین دیگر Schematron را به عنوان تعریف شده در ODD در بر می‌گیرد و + می‌تواند برای اعتبارسنجی در برابر هر دو نوع شِما استفاده شود. معمولاً تمام فرمت‌های خروجی ممکنِ دیگر برای MEI به کار نمی‌روند. + (ما بعداً در این آموزش به توضیح مختصر Schematron باز خواهیم گشت.) </p> <p> در حالی که این آموزش بر توضیح اصول پایه‌ای ساختارهای ODD در منابع MEI تمرکز دارد، یک آموزش جداگانه در مورد From 123a4a1aa7a5ed00ba8761b67eac6b13b222e456 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 3 May 2025 05:27:44 +0330 Subject: [PATCH 32/40] Update 180_understanding_odd-04.html --- .../180_understanding_odd-04.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html index 6af36be46..cad1eaeff 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-04.html @@ -1,17 +1,17 @@ <div> - <p><em>ماژول‌ها </em><span>بالاترین سطح در </span><span>ساختار مفهومی ODD</span><span> هستند. + <p><em>ماژول‌ها</em>بالاترین سطح در ساختار مفهومی ODD هستند. ماژول‌ها امکان تقسیم‌بندی طرح را به نواحی مختلف فراهم می‌کنند، که هرکدام یک جنبه مشخص را تعریف خواهد کرد. تا سال 2019، ساختار راهنماهای وبسایت MEI از ماژول‌های ODD پیروی می‌کرد، اما این ساختار با یک تقسیم‌بندی آموزشی‌تر جایگزین شد. - اکنون، ماژول‌ها در راهنماهای MEI در بالای تعاریف المنت‌ها، خصیصه‌ها و غیره نمایش داده می‌شوند:</span></p> + اکنون، ماژول‌ها در راهنماهای MEI در بالای تعاریف المنت‌ها، خصیصه‌ها و... نمایش داده می‌شوند:</span></p> <div> <img style="width: 100%;" src="./beam-module.png"> </div> <p> این تنها یک ارجاع ساده به ماژول‌ها است. اگر قصد کار بر روی ODD در MEI را دارید، مهم‌تر است بدانید که - کد سورس MEI بر اساس ماژول‌ها تقسیم‌بندی شده است. فایل + سورس‌کد MEI بر اساس ماژول‌ها تقسیم‌بندی شده است. فایل <a href="https://github.com/music-encoding/music-encoding/blob/develop/source/mei-source.xml" target="_blank" rel="noopener, noreferrer">mei-source.xml</a> به عنوان نقطه شروع برای ورود به مشخصات MEI عمل می‌کند. المنت @@ -19,7 +19,7 @@ rel="noopener, noreferrer"><schemaSpec></a> در <a href="https://github.com/music-encoding/music-encoding/blob/93d8c00cd14126af2e680d47f437042227eb2c0e/source/mei-source.xml#L83" - target="_blank" rel="noopener, noreferrer">خط 83</a> (یا همان حوالی) یک شِمای جدید را با نام‌حوزه MEI + target="_blank" rel="noopener, noreferrer">خط 83</a>(یا همان حوالی) یک شِمای جدید را با نام‌حوزه MEI (<code>@ns="http://www.music-encoding.org/ns/mei"</code>) تعریف می‌کند. سپس تعدادی <em>XInclude</em> به عنوان المنت‌های فرزند دارد. <em>XInclude</em> برای تقسیم یک فایل XML منطقی بزرگ‌تر به @@ -60,4 +60,4 @@ علاوه بر بهبود قابلیت نگهداری سورس‌کد MEI به دلیل کاهش حجم فایل‌ها، این تقسیم‌بندی عمدتاً به ما امکان می‌دهد که به‌راحتی بخش‌های بزرگ‌تر (-> ماژول‌ها) از طرح MEI را «خاموش کنیم». </p> -</div> \ No newline at end of file +</div> From bb08d5571d5a0f273e6fa279aebd5dabd9fe3a65 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 3 May 2025 05:43:04 +0330 Subject: [PATCH 33/40] Update 180_understanding_odd-06.html --- .../180_understanding_odd-06.html | 58 +++++++++---------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html index 060d4b7e9..3f6ec2f7c 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-06.html @@ -1,13 +1,13 @@ <div> <p> - همان‌طور که دیدیم، ODD این امکان را می‌دهد که مشخص کنید <span style="font-size: 2rem;">درون یک المنت - خاص،</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">دقیقاً</span><span - style="font-size: 2rem;"> </span><span style="font-size: 2rem;">چه المنت‌هایی به عنوان فرزند مجاز - هستند. این قابلیت کنترل بسیار دقیقی روی سلسله‌مراتب عناصر MEI فراهم می‌کند، اما به قیمت فهرست‌بندی مفصل و - طولانی از آنچه هر المنت ممکن است دربرداشته باشد! </span><span style="font-size: 2rem;">نگهداری و - دنبال‌کردن</span><span style="font-size: 2rem;"> چن</span><span style="font-size: 2rem;">ین روشی آسان + همان‌طور که دیدیم، ODD این امکان را می‌دهد که مشخص کنید درون یک المنت + خاص، دقیقاً چه المنت‌هایی به عنوان فرزند مجاز + هستند. این قابلیت، کنترل بسیار دقیقی روی سلسله‌مراتب عناصر MEI فراهم می‌کند، اما به قیمت فهرست‌بندی مفصل و + طولانی از آنچه هر المنت ممکن است دربرداشته باشد! نگهداری و + دنبال‌کردن چنین روشی آسان نیست چون برخی از المنت‌ها در MEI می‌توانند ده‌ها المنت دیگر را شامل شوند، و مقایسه‌ی چنین المنتهایی باهم، - فرایند زمانبری است.</span></p> + فرایند زمانبری است. + </p> <p> مثلاً، المنت <a href="https://music-encoding.org/guidelines/v4/elements/castitem.html" target="_blank" @@ -20,11 +20,10 @@ <div> <img style="width: 100%;" src="./role-children.png"> </div> - <p>اما با مشاهده <em><elementSpec></em> میبینیم که چنین فهرستی وجود ندارد: - </p> - <pre class="codeblock"><elementSpec ident="role" module="MEI.shared"> - <desc>Name of a dramatic role, as given in a cast list.</desc> - <classes> + <p>اما با مشاهده<em><elementSpec></em>;میبینیم که چنین فهرستی وجود ندارد: + </p> <pre class="codeblock"><elementSpec ident="role" module="MEI.shared"> + <desc>Name of a dramatic role, as given in a cast list.</desc> + <classes> <memberOf key="att.common"/> <memberOf key="att.facsimile"/> <memberOf key="att.lang"/> @@ -38,11 +37,11 @@ </rng:zeroOrMore> </content> <remarks> - <p part="N">این المنت بر اساس یک المنت در استاندارد Text Encoding Initiative (TEI) مدل‌سازی شده است.</p> + <p part="N">This element is modelled on an element in the Text Encoding Initiative (TEI) standard.</p> </remarks> </elementSpec></pre> <p> - به جای ۵۴ المنت از تصویر بالا، تنها یک ارجاع <em><rng:ref></em> داده شده است که به چیزی به نام + به جای ۵۴ المنت از تصویر بالا، تنها یک ارجاع<em><rng:ref></em> داده شده است که به چیزی به نام <em>model.textPhraseLike.limited</em> اشاره می‌کند. این یک <strong>کلاسِ مدل</strong> است. کلاس‌های مدل به عنوان جایگزینی برای گروه‌هایی از المنت‌ها در نظر گرفته می‌شوند. خود کلاس مدل نمی‌داند که کدام المنت‌ها را شامل می‌شود: @@ -59,10 +58,10 @@ کلاسِ مدل با یک المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-classSpec.html" target="_blank" rel="noopener, noreferrer"><classSpec></a> کدگذاری شده است، - که دارای خصیصه <strong>@type="model"</strong> است. مانند المنت‌ها، با استفاده از - خصیصه <strong>@ident</strong> به طور منحصربه‌فرد شناسایی می‌شود و به یکی از ماژول‌های MEI با - خصیصه <em>@module</em> اختصاص داده می‌شود. - MEI از این قرارداد پیروی می‌کند که تمام نام‌های کلاس مدل با رشته "<em>model.</em>" شروع می‌شوند. همچنین همیشه + که دارای خصیصه<strong>@type="model"</strong> است. مانند المنت‌ها، با استفاده از + خصیصه <strong>@ident</strong> به طور منحصربه‌فرد شناسایی می‌شود و مختص به یکی از ماژول‌های MEI با + خصیصه<em>@module</em> است. + MEI از این قرارداد پیروی می‌کند که تمام نام‌های کلاس مدل با رشته متنی "<em>model.</em>" شروع می‌شوند. همچنین همیشه یک <em><desc></em> با توضیح مختصری از هدف گروه دارند. بیایید عناصر <em><memberOf></em> را در <em><classSpec></em> از مثال بالا موقتا نادیده بگیریم و ببینیم که چگونه آن ۵۴ المنتی که بالاتر دیدیم به @@ -109,30 +108,29 @@ مجموعاً 54 المنت به‌عنوان محتوای مجاز (یعنی المنت‌های فرزند) اضافه می‌شوند. 48 المنت باقی‌مانده از کجا آمده‌اند؟ اعتراف می‌کنیم که ارائه فعلی مستندات راهنما به‌خوبی نشان نمی‌دهد که این المنت‌های اضافی از کجا آمده‌اند. - پاسخ به این است که <strong>کلاس‌های مدل تو در تو</strong> هستند. یک کلاس مدل می‌تواند عضو یک کلاس مدل دیگر - باشد، همان‌طور که در <em><classSpec></em> - بالا دیده‌ایم. بیایید به فرزندان مجاز المنت <em><role></em> در دیدگاه <em>بر اساس کلاس</em> برگردیم: + پاسخ این است که <strong>کلاس‌های مدل، تو در تو هستند. </strong> همان‌طور که در <em><classSpec></em> + بالا دیدیم، یک کلاس مدل می‌تواند عضو یک کلاس مدل دیگر + باشد. بیایید به فرزندان مجاز المنت <em><role></em> در دیدگاه <em>کلاس محور</em> برگردیم: </p> <div> <img style="width: 100%;" src="./role-children-byclass.png"> </div> <p> - ما شش فرزند مستقیم را می‌بینیم، اما همچنین <em><fig></em> را تحت برچسب <em>model.figureLike</em> + ما شش فرزند مستقیم را می‌بینیم، اما همچنین <em><fig></em> را زیرمجموعه تگ <em>model.figureLike</em> فهرست‌شده و <em><catchwords></em> و <em><fingerprint></em> از <em>model.msInline</em> آمده‌اند. <a href="https://music-encoding.org/guidelines/v4/elements/role.html#mayContain" target="_blank" rel="noopener, noreferrer">این فهرست</a> ادامه دارد و منشا همه 54 المنت را توضیح می‌دهد. اگر به <em>model.figureLike</em> نگاهی بیاندازیم، می‌بینیم که این کلاس یک <em><memberOf></em> دارد که به <em>model.textPhraseLike.limited</em> اشاره می‌کند: - </p> - <pre class="codeblock"><classSpec ident="model.figureLike" module="MEI.figtable" type="model"> - <desc>عناصری را گروه‌بندی می‌کند که اطلاعات گرافیکی مانند یک تصویر یا شکل را نمایش می‌دهند یا شامل می‌کنند.</desc> - <classes> - <memberOf key="model.textPhraseLike.limited"/> - </classes> - </classSpec></pre> + </p> <pre class="codeblock"><classSpec ident="model.figureLike" module="MEI.figtable" type="model"> + <desc>Groups elements representing or containing graphic information such as an illustration or figure.</desc> + <classes> + <memberOf key="model.textPhraseLike.limited"/> + </classes> +</classSpec></pre> <p> - بنابراین، <em>model.figureLike</em> عضوی از <em>model.textPhraseLike.limited</em> است، به این معنی که هر + بنابراین، <em>model.figureLike</em> عضوی از <em>model.textPhraseLike.limited</em> است، یعنی هر جایی که <em>model.textPhraseLike.limited</em> به‌عنوان محتوای فرزند مجاز باشد، <em>model.figureLike</em> (و همه المنت‌هایی که عضو آن هستند) نیز مجاز خواهند بود. عمیق‌ترین <em>تودرتویی</em> کلاس‌ها در <em>model.textPhraseLike.limited</em> در واقع سه لایه است: <em>model.nameLike.geogName</em> عضو From 1fe22cd9b32676ba79a05f11039e003911041128 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 07:17:09 +0330 Subject: [PATCH 34/40] Update 180_understanding_odd-07.html --- .../180_understanding_odd-07.html | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html index 2dc516628..67ab7c896 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-07.html @@ -2,9 +2,9 @@ <p> - همان‌طور که در مرحله قبل دیدیم، بخش زیادی از سلسله‌مراتب MEI از طریق استفاده از کلاس‌های مدل برقرار می‌شود. - مکانیسمی بسیار مشابه توسط ODD برای دسترس‌پذیر کردن خصیصه‌ها در المنت‌های متعدد استفاده می‌شود. اما قبل از بررسی - کلاس‌های خصیصه، بیایید نگاهی کوتاه به نحوه تعریف واقعی یک خصیصه در ODD بیندازیم. خصیصه <em>@xml:id</em> در هر + همان‌طور که در مرحله قبل دیدیم، بخش زیادی از سلسله‌مراتب MEI از طریق استفاده از کلاس‌های مدل شکل می‌گیرد. + ODD برای دادن خصیصه‌ها به المنت‌های مخلتف هم از مکانیزم مشابهی استفاده می‌کند. اما قبل از بررسی + کلاس‌های خصیصه، بیایید نگاهی کوتاه به تعریف یک خصیصه در ODD بیندازیم. خصیصه <em>@xml:id</em> در هر المنت MEI موجود است و با مشخصات زیر تعریف شده است: </p> <pre class="codeblock"><attDef ident="xml:id" usage="opt"> @@ -16,16 +16,15 @@ <p> خصیصه‌ها با استفاده از المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-attDef.html" target="_blank" rel="noopener, noreferrer"><attDef></a> - مشخص می‌شوند و از برخی از قواعدی که قبلاً روی المنت‌ها و کلاس‌های مدل دیده‌ایم، پیروی می‌کنند: نام آنها در خصیصه - <em>@ident</em> ارائه می‌شود و دارای یک المنت <em><desc></em> با توضیح مختصر هستند. آنچه جدید است، خصیصه - <strong>@usage</strong> است که مورد استفاده از خصیصه را مشخص می‌کند. مقدار در اینجا، "<em>opt</em>"، برای + معرفی می‌شوند و از برخی از قواعدی که قبلاً روی المنت‌ها و کلاس‌های مدل دیده‌ایم، پیروی می‌کنند: نام آنها در خصیصه‌ی + <em>@ident</em> ارائه می‌شود و دارای یک المنت <em><desc></em> با توضیح مختصر هستند. چیزی که قبلتر در معرفی المنت نداشتیم و حالا در معرفی خصیصه‌ها داریم، خصیصه + <strong>@usage</strong> است که مورد استفاده از خصیصه را مشخص می‌کند. در اینجا، "<em>opt</em>"، برای خصیصه‌های اختیاری استفاده می‌شود – <em>@xml:id</em> می‌تواند روی همه المنت‌های MEI استفاده شود، اما الزامی به استفاده آن نیست. مقادیر دیگر مجاز برای <em>@usage</em> شامل "<em>req</em>" (الزامی) و "<em>rec</em>" (توصیه‌شده در صورت لزوم) هستند. </p> <p> - حالا بیایید ببینیم این المنت‌های <em><attDef></em> کجا قرار دارند. حتی اگر این واقعاً راه‌حل ترجیحی نباشد، - گاهی اوقات خصیصه‌ها در همان المنتی که باید استفاده شوند تعریف می‌شوند، مانند خصیصه <em>@type</em> در <a + حالا ببینیم این المنت‌های <em><attDef></em> کجا قرار دارند. گاهی اوقات خصیصه‌ها در همان المنتی که باید استفاده شوند تعریف می‌شوند (حتی اگر این راه را ترجیح ندهیم)، مانند خصیصه <em>@type</em> در <a href="https://music-encoding.org/guidelines/v4/elements/meihead.html" target="_blank" rel="noopener, noreferrer"><meiHead></a>: </p> @@ -62,8 +61,7 @@ <p> همان‌طور که می‌بینیم، خصیصه‌ها تنها در یک المنت <em><attList></em> درون <em><elementSpec></em> قرار دارند. با این حال، در بیشتر موارد، خصیصه‌ای در نظر گرفته شده است که در بیش از یک المنت موجود باشد. خصیصه - <em>@xml:id</em> که در بالا معرفی شد در هر المنت MEI موجود است، بنابراین باید چند صد بار تعریف شود – دوباره، این - نه نگهداری‌پذیر است و نه کارآمد. در عوض، ODD بار دیگر از یک سیستم کلاس استفاده می‌کند، این بار برای + <em>@xml:id</em> که در بالا معرفی شد در هر المنت MEI موجود است، بنابراین باید چند صد بار تعریف شود – اینطوری، هم کارآمد نیست، هم نگهداری و ویرایشش دشوار است. در عوض، ODD بار دیگر از یک سیستم کلاس استفاده می‌کند، این بار برای <strong>کلاس‌های خصیصه</strong>. بیایید ببینیم چگونه <em>@xml:id</em> واقعاً در MEI از طریق کلاس خصیصه <em>att.id</em> توزیع می‌شود: </p> @@ -102,9 +100,9 @@ <em>att.lang</em> است، اما نه <em>att.id</em>. با این حال، مستندات <em><role></em> بیان می‌کند که <em>@xml:id</em> در دسترس است. پاسخ این است که اینجا هم از <em>کلاس‌های تو در تو</em> استفاده شده. <em><role></em> به کلاس خصیصه <em>att.common</em> عضو می‌شود و همه خصیصه‌های آن کلاس را به دست می‌آورد (که - در واقع هیچ کدام نیستند). در عوض، <em>att.common</em> خود به کلاس خصیصه <em>att.basic</em> عضو می‌شود (که خصیصه - <em>@xml:base</em> را وارد می‌کند)، و آن به کلاس خصیصه <em>att.id</em> عضو می‌شود که در نهایت خصیصه - <em>@xml:id</em> را وارد می‌کند. برای دیدن این مکانیزم در عمل، بیایید نگاهی کوتاه به <em>att.common</em> + در واقع هیچ کدام نیستند). در عوض، <em>att.common</em> خود عضو کلاس خصیصه <em>att.basic</em> می‌شود (که خصیصه + <em>@xml:base</em> را اضافه می‌کند)، و عضو کلاس خصیصه <em>att.id</em> می‌شود که در نهایت خصیصه + <em>@xml:id</em> را اضافه می‌کند. برای دیدن این مکانیزم در عمل، بیایید نگاهی کوتاه به <em>att.common</em> بیندازیم: </p> @@ -124,35 +122,33 @@ <p> باز هم، از طریق استفاده از یک المنت <em><memberOf></em> با <em>@key</em> مناسب، عضویت در کلاس‌های مختلف در - MEI محقق می‌شود، بنابراین این مکانیزم باید برای شما آشنا باشد. و مانند <em>کلاس‌های مدل</em>، <em>کلاس‌های + MEI محقق می‌شود، پس این مکانیزم باید برای شما آشنا باشد. و مانند <em>کلاس‌های مدل</em>، <em>کلاس‌های خصیصه</em> نیز از کلاس‌های نسبتاً عمومی تا مجموعه‌های خاص‌تر از خصیصه‌های هم‌راستا استفاده می‌کنند. با - عضو - شدن در کلاس(های) خصیصه مناسب، یک المنت می‌تواند دقیقاً مجموعه مناسب از خصیصه‌ها را به دست آورد و این امکان + عضو شدن در کلاس(های) خصیصه مناسب، یک المنت می‌تواند دقیقاً مجموعه مناسب از خصیصه‌ها را به دست آورد و این امکان وجود دارد که به صورت انتخابی خصیصه‌ها را به المنت‌های جدید یا موجود اضافه یا از آنها حذف کنیم. </p> <p> - مشخصات <em>att.common</em> که در بالا مشاهده می‌شود، کلاس خصیصه دیگری به نام <em>att.typed</em> را فاش - می‌کند که + مشخصات <em>att.common</em> که در بالا مشاهده می‌شود، کلاس خصیصه دیگری به نام <em>att.typed</em> را می‌آورد که یک خصیصه <em>@type</em> را فراهم می‌کند. واضح است که این خصیصه در <em><meiHead></em> استفاده نشده است، همانطور که - در بالا دیده می‌شود. دلیل این امر این است که کلاس خصیصه یک خصیصه <em>@type</em> را فراهم می‌کند که تنها یک - توضیح بسیار عمومی دارد: <em>تعیین‌کننده‌ای که عنصر را از نظر خاصی توصیف می‌کند و از هر طرح یا طبقه‌بندی + در بالا دیده می‌شود. دلیل این امر این است که کلاس خصیصه، یک خصیصه <em>@type</em> را فراهم می‌کند که تنها یک + توضیح بسیار عمومی دارد: <em>تعیین‌کننده‌ای که المنت را از نظر خاصی توصیف می‌کند و از هر طرح یا طبقه‌بندی مناسب که برچسب‌های تک‌کلمه‌ای را به کار می‌برد، استفاده می‌کند.</em> در مقایسه با آن، <em>@type</em> در <em><meiHead></em> تعریف بسیار دقیقی داشت. به طور کلی، MEI سعی می‌کند از استفاده از همان نام خصیصه با تعاریف چندگانه اجتناب کند، اما این همیشه ممکن نیست و حداقل - باعث سردرگمی <em>فنی</em> نمی‌شود. با دیدگاه "بر اساس کلاس" در مورد خصیصه‌ها (به <a + باعث سردرگمی <em>فنی</em> نمی‌شود. با دیدگاه "بر اساس کلاس" در مورد خصیصه‌ها (به مشخصات <a href="https://music-encoding.org/guidelines/v4/elements/meihead.html#attributes" target="_blank" - rel="noopener, noreferrer"><meiHead></a> مشخصات)، می‌توان به راحتی پیگیری کرد که هر خصیصه مجاز از + rel="noopener, noreferrer"><meiHead></a> )، می‌توان به راحتی پیگیری کرد که هر خصیصه مجاز از کجا آمده است. </p> <p> - تنها بخش بزرگی که برای درک ODD <span style="font-size: 2rem;"> </span><span - style="font-size: 2rem;">باقی‌مانده، </span><span style="font-size: 2rem;">نوع داده‌ها است که در مرحله - بعدی این آموزش معرفی خواهد شد.</span></p> + تنها بخش بزرگی که برای درک ODD + باقی‌مانده، «نوع داده‌ها» است که در مرحله + بعدی این آموزش معرفی خواهد شد.</p> </div> From 3d7a3e3b96b4b8e313dce26eb3b6e262685a53fe Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 07:34:30 +0330 Subject: [PATCH 35/40] Update 180_understanding_odd-08.html --- .../180_understanding_odd-08.html | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html index bb874b865..f4783b82c 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-08.html @@ -3,7 +3,7 @@ بیشتر انواع داده‌ها در ODD از مفاهیم شناخته‌شده پیروی می‌کنند: اعداد صحیح، مقادیر boolean (true or false)، رشته‌های متنی و غیره. بیایید نگاهی دقیق‌تر به برخی از آن‌ها داشته باشیم. خصیصه <em>@n</em> در کلاس خصیصه <em><a - href="https://music-encoding.org/guidelines/v4/attribute-classes/att.ninteger.html">att.nInteger</a></em>  + href="https://music-encoding.org/guidelines/v4/attribute-classes/att.ninteger.html">att.nInteger</a></em> به این صورت تعریف شده است: </p> <pre class="codeblock"><attDef ident="n" usage="opt"> @@ -15,20 +15,17 @@ <p> این‌جا از یک المنت <em><data></em> از نام‌حوزه <em>rng:</em> استفاده شده، که <em>@type</em> از یک مقدار تعریف شده در RelaxNG استفاده می‌کند. خصیصه‌های <em>@maxOccurs</em> و <em>@minOccurs</em> مشخص می‌کنند - که چند بار مقدار این «نوعِ داده» ممکن است مقداردهی شود. <span - style="font-size: 2rem;"> </span><span style="font-size: 2rem;">در</span><span - style="font-size: 2rem;"> </span><em style="font-size: 2rem;">att.staffIdent</em><span - style="font-size: 2rem;"> </span><span style="font-size: 2rem;">می‌توان</span><span - style="font-size: 2rem;"> </span><span style="font-size: 2rem;">مثالی دیگر یافت برای مقادیری که در - خصیصه </span><em style="font-size: 2rem;">@staff</em><span style="font-size: 2rem;"> تعریف - شده‌اند</span><span style="font-size: 2rem;">. این خصیصه برای ارتباط - </span><a href="https://music-encoding.org/guidelines/v4/content/introduction.html#eventsControlevents" - target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">کنترل رویدادها</a><span - style="font-size: 2rem;"> - با یک یا چند خط حامل استفاده می‌شود و ممکن است یک یا چند عدد صحیح نگهداری کند. از - </span><a href="https://music-encoding.org/guidelines/v4/attribute-classes/att.staffident.html" - target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">نشانه‌گذاری زیر</a><span - style="font-size: 2rem;"> برای دستیابی به این هدف استفاده می‌کند:</span></p> + این «نوعِ داده» چند بار ممکن است مقداردهی شود. در<em>att.staffIdent</em> می‌توان مثالی دیگر یافت برای مقادیری که در +خصیصه <em>@staff</em> تعریف شده‌اند + این خصیصه برای ارتباط <a + href="https://music-encoding.org/guidelines/v4/content/introduction.html#eventsControlevents" target="_blank" + rel="noopener, noreferrer">کنترل‌رویدادها</a> + با یک یا چند خط حامل استفاده می‌شود و ممکن است یک یا چند عدد صحیح نگهداری کند. از + <a href="https://music-encoding.org/guidelines/v4/attribute-classes/att.staffident.html + < target="_blank" rel="noopener, noreferrer" + نشانه‌گذاری زیر</a> + + برای دستیابی به این هدف استفاده می‌کند:</p> <pre class="codeblock"><datatype maxOccurs="unbounded" minOccurs="1"> <rng:data type="positiveInteger"/> </datatype></pre> @@ -89,11 +86,12 @@ داده می‌شود. سپس لیستی از مقادیر (valList) داریم که در این مورد، یک لیست بسته است. به این معنی که تمام مقادیر ممکن در اینجا فهرست شده‌اند. در موارد دیگر، خصیصه <em>@type</em> با مقدار "<em>semi</em>" نشان‌دهنده یک لیست - نیمه‌بسته است. چنین لیستی توصیه‌هایی ارائه می‌دهد، اما به کاربر اجازه می‌دهد در صورت عدم تطابق هیچ یک از + نیمه‌بسته است. چنین لیستی توصیه‌هایی ارائه می‌کند، اما به کاربر اجازه می‌دهد در صورت عدم تطابق هیچ یک از پیشنهادات با وضعیت فعلی، مقادیر سفارشی ایجاد کند. این معمولاً تعادل خوبی بین اطمینان از سازگاری و امکان توسعه بر اساس نیاز از طرح‌واره را فراهم می‌کند. </p> - <p><span style="font-size: 2rem;">انواع داده هم </span>مانند کلاس‌های <em>مدل</em> و <em>خصیصه</em>، + <p> +انواع داده هم مانند کلاس‌های <em>مدل</em> و <em>خصیصه</em>، می‌توانند تو در تو باشند. یک مثال برای این مورد، نوع داده <em><a href="https://music-encoding.org/guidelines/v4/data-types/data.noteheadmodifier.html" target="_blank" rel="noopener, noreferrer">data.NOTEHEADMODIFIER</a></em> است: @@ -113,11 +111,11 @@ پیروی می‌کنند. </p> <p> - آخرین نوع داده‌ای که می‌خواهیم معرفی کنیم <em>data.COLORVALUES</em> است که توسط <em>data.COLOR</em> استفاده - می‌شود که به نوبه خود برای کنترل مقادیر خصیصه‌هایی مانند <em>@color</em> (از طریق + آخرین نوع داده‌ای که می‌خواهیم معرفی کنیم <em>data.COLORVALUES</em> است که در <em>data.COLOR</em> استفاده + می‌شود و به برای کنترل مقادیر خصیصه‌هایی مانند <em>@color</em> (از طریق <em><a href="https://music-encoding.org/guidelines/v4/attribute-classes/att.color.html" target="_blank" rel="noopener, noreferrer">att.color</a></em>) - و <em>@linecolor</em> (از طریق <em>att.linecolor</em>) استفاده می‌شود. + و <em>@linecolor</em> (از طریق <em>att.linecolor</em>) استفاده به کار می‌رود. </p> <pre class="codeblock"><macroSpec ident="data.COLORVALUES" module="MEI" type="dt"> <desc>Parameterized color values</desc> From 17f70a8fb231c8280a6195aea1a2a7253b8b2e7a Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 07:40:49 +0330 Subject: [PATCH 36/40] Update 180_understanding_odd-09.html --- .../180_understanding_odd-09.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html index 16783d9d4..5a45d7e4d 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-09.html @@ -1,6 +1,6 @@ <div> <p> - ماکروها آخرین بخش ODD هستند که برای درک کامل مشخصات MEI لازم است، و به وضوح کم‌اهمیت‌ترین جنبه به شمار + ماکروها آخرین بخش ODD هستند که شناختنشان برای درک کامل مشخصات MEI لازم است، و به وضوح کم‌اهمیت‌ترین جنبه به شمار می‌آیند. ماکروها به عنوان جایگزینی برای المنت‌ها عمل می‌کنند که می‌توانند به صورت یکجا به <em><content></em> یک المنت اضافه شوند. احتمالاً پرکاربردترین ماکرو <em>macro.struc-unstrucContent</em> است که به شرح زیر تعریف شده است: @@ -29,12 +29,11 @@ <p> ماکروها دوباره از المنت <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-macroSpec.html" target="_blank" rel="noopener, noreferrer"><em><macroSpec></em></a> استفاده می‌کنند، اما این بار - با خصیصه <em>@type</em> با مقدار "<em>pe</em>". نام‌ها، که دوباره در <em>@ident</em> ذخیره می‌شوند، با - "<em>macro.</em>" پیشوند می‌گیرند، و البته دوباره <em><desc></em> نیز داریم. تفاوت اصلی با + با خصیصه <em>@type</em> با مقدار "<em>pe</em>". نام‌ها، با پیشوند "<em>macro.</em>" در <em>@ident</em> ذخیره می‌شوند. و البته دوباره <em><desc></em> نیز داریم. تفاوت اصلی با <em>کلاس‌های مدل</em> این است که <em>ماکرو</em>ها فقط جایگزین المنت‌ها نیستند، بلکه برای قوانین پیچیده‌تری هم در مورد ترکیب المنت‌ها استفاده می‌شوند. در اینجا، <em>macro.struc-unstrucContent</em> نمونه خوبی است. این ماکرو کاربر را مجبور می‌کند تا بین یک مدل رمزگذاری ساختاریافته (با استفاده از یک المنت <em><head></em> - اختصاصی و دنبال شده توسط چندین پاراگراف) یا یک مدل غیرساختاریافته (که در آن محتوای متنی مستقیماً وارد می‌شود + اختصاصی که بعد از آن چندین پاراگراف می‌آید) یا یک مدل غیرساختاریافته (که در آن محتوای متنی مستقیماً وارد می‌شود و می‌تواند با المنت‌های مختلفی علامت‌گذاری شود) تصمیم بگیرد. می‌توان آن را داخل المنت‌هایی مانند <em><watermark></em> استفاده کرد و به جلوگیری از تعریف مجدد ترکیب یکسان المنت‌ها در مکان‌های متعدد کمک می‌کند. @@ -52,12 +51,12 @@ <p> به طور کلی، <em><rng:ref></em> داخل <em><elementSpec></em> فقط با المنت‌های فرزند <em><macroSpec></em> در <em><content></em> جایگزین می‌شود، به طوری که امکان ترکیب یک - <em>ماکرو</em> با سایر محتویات وجود دارد. <em>ماکرو</em>ها به این ترتیب به عنوان بلوک‌های مشخصات از پیش + <em>ماکرو</em> با محتویات دیگر وجود دارد. به این ترتیب، <em>ماکرو</em>ها به عنوان بلوک‌های مشخصات از پیش تعریف شده و قابل استفاده مجدد عمل می‌کنند. </p> <p> همان‌طور که قبلاً ذکر شد، <em>ماکروها</em> از دید MEI جنبه مهمی از ODD نیستند، و بنابراین شما باید تا این - مرحله تمامی موارد لازم را فرا گرفته باشید. این یعنی شما با این مرحله پایانی تمام شده‌اید – برای برخی نکات + مرحله تمامی موارد لازم را فرا گرفته باشید. این یعنی این درس، با این مرحله پایانی تمام شده‌است – برای برخی نکات پایانی روی دکمه ادامه کلیک کنید... </p> -</div> \ No newline at end of file +</div> From 4b2c7f94a1ab1bedaa3cc7594a1505698d2ab2b7 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 07:42:46 +0330 Subject: [PATCH 37/40] Update 180_understanding_odd-end.html --- .../180_understanding_odd/180_understanding_odd-end.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html b/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html index 372c1d8e0..60e2dc14f 100644 --- a/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html +++ b/_tutorials-FA/180_understanding_odd/180_understanding_odd-end.html @@ -1,13 +1,14 @@ <div> <p> <strong>تبریک!</strong> شما موفق شدید این مقدمه به ODD را از دید MEI پشت سر بگذارید. اکنون باید با تمامی - بلوک‌های سازنده مشخصات MEI آشنا شده باشید. به صراحت بگویم، این مسیر سختی بوده است و شاید لازم باشد چندین بار - آن را بازخوانی کنید تا واقعاً با آن آشنا شوید. مهم است که به یاد داشته باشید نسخه ODD که MEI در حال حاضر + عوامل بنیادین سازنده مشخصات MEI آشنا شده باشید. این مسیر سختی بوده است و شاید لازم باشد چندین بار + آن را بازخوانی کنید تا واقعاً با آن آشنا شوید. مهم است به یاد داشته باشید نسخه ODD که MEI در حال حاضر استفاده می‌کند کمی قدیمی است و ممکن است به طور کامل با مستندات TEI همسو نباشد. با این حال، تمامی ابزارها و فرآیندهای MEI به درستی با این نسخه کار می‌کنند، بنابراین از دید MEI مشکلی وجود ندارد. </p> <p> - مرحله بعدی از اینجا، یادگیری چگونگی نوشتن <strong>شخصی‌سازی‌های MEI</strong> واقعی با استفاده از ODD است. + مرحله بعدی از اینجا، یادگیری چگونگی نوشتن <strong>شخصی‌سازی‌های MEI + </strong> واقعی با استفاده از ODD است. برای این کار یک آموزش جداگانه وجود دارد (یا به زودی خواهد بود...)، که به جزئیات آن فرایند خواهد پرداخت. این شخصی‌سازی‌ها از برخی مفاهیم اضافی در بالای آنچه که تاکنون آموخته‌اید استفاده خواهد کرد، اما درک کامل مفاهیم پایه‌ای برای این مرحله ضروری است. به محض اینکه احساس کنید ODD را تا اینجا درک کرده‌اید، این سطح اضافی نباید From 2d0130947df81ee0b708fbcb62b7133fc5c501c1 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 07:56:38 +0330 Subject: [PATCH 38/40] Update 181_customizing_mei-01.html --- .../181_customizing_mei-01.html | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html index a2b189f6c..441927e6a 100644 --- a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-01.html @@ -2,22 +2,27 @@ <div> <h1>شخصی‌سازی ODD</h1> <p> - این درس پیشرفته، نحوه شخصی‌سازی MEI برای نیازهای خاص پروژه را معرفی می‌کند. برای فراگیری این درس، نیاز دارید که ساختارهای داخلی ODD در MEI را کاملاً درک کرده باشید (همان‌طور که در آموزش <a href="/tutorials/103-chords.html" target="_blank" rel="noopener, noreferrer">درک ODD</a> توضیح داده شده است). اگر با المنت‌های <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-elementSpec.html" target="_blank" rel="noopener, noreferrer"><elementSpec></a>، کلاس‌های «مدل»ها و کلاس‌های «خصیصه»ها آشنا نیستید، احتمالاً بهتر - است ابتدا به <a href="/tutorials/103-chords.html" target="_blank" rel="noopener, noreferrer">آن آموزش</a> رجوع کنید. + این درس پیشرفته، نحوه شخصی‌سازی MEI برای نیازهای خاص پروژه را معرفی می‌کند. برای فراگیری این درس، نیاز دارید که ساختارهای داخلی ODD در MEI را کاملاً درک کرده باشید (همان‌طور که در آموزش + <a href="/tutorials/180-understanding-odd.html" target="_blank" rel="noopener, noreferrer">درک ODD</a> توضیح داده شده است). اگر با المنت‌های <a href="https://tei-c.org/release/doc/tei-p5-doc/en/html/ref-elementSpec.html" target="_blank" rel="noopener, noreferrer"><elementSpec></a>، کلاس‌های «مدل»ها و کلاس‌های «خصیصه»ها آشنا نیستید، احتمالاً بهتر + است ابتدا به <a href="/tutorials/180-understanding-odd.html" target="_blank" rel="noopener, noreferrer">آن آموزش</a> رجوع کنید. </p> <p> - حال بیایید درسمان را شروع کنیم. <em>هدف</em> از شخصی‌سازی‌ها، <em>محدود کردن</em> طرح‌واره MEI به بخش‌هایی از - چارچوب است که برای یک وظیفه یا پروژه خاص مرتبط هستند. التبه <span style="font-size: 2rem;">با استفاده از همین مکانیزم‌هایی که در اینجا توضیح داده شده‌اند </span><span style="font-size: 2rem;">امکان </span><em style="font-size: 2rem;">گسترش</em><span style="font-size: 2rem;"> MEI هم وجود دارد، اما این موضوع به یک درس دیگر موکول خواهد شد. در حال حاضر، - تمرکز بر روی زیرمجموعه‌سازی در MEI است، زیرا فایل‌هایی که در برابر چنین نسخه شخصی‌شده‌ای از MEI اعتبارسنجی شوند، در برابر شخصی‌سازی </span><a href="/resources/schemas.html" target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">MEI All</a><span style="font-size: 2rem;"> - که نماینده چارچوب کامل MEI است هم اعتبارسنجی خواهند شد. این موضوع تضمین میکند که فایل، در سطح قابل‌توجهی با ابزارها و مستندات موجود </span><span style="font-size: 2rem;">سازگار خواهد بود.</span><span style="font-size: 2rem;"> به طور کلی، گسترش MEI باید تنها زمانی که کاملاً ضروری است، انجام شود، و در چنین مواردی معمولاً ایده - خوبی است که با </span><a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer" style="font-size: 2rem;">جامعه - MEI</a><span style="font-size: 2rem;"> مشورت کنید تا مطمئن شوید که قبلاً راه‌حل دیگری برای منظور شما وجود نداشته.</span></p> + حال بیایید درسمان را شروع کنیم. <em>هدف</em> از شخصی‌سازی‌ها، <em>محدود کردن</em> طرح‌واره MEI به بخش‌هایی از چارچوب است که مرتبط یک وظیفه یا پروژه خاص هستند. البته با استفاده از همین مکانیزم‌هایی که در اینجا توضیح داده شده‌اند امکان<em> توسعه MEI </em هم وجود دارد، اما این موضوع به یک درس دیگر موکول خواهد شد. در حال حاضر، + تمرکزمان روی زیرمجموعه‌سازی در MEI است، زیرا فایل‌هایی که در برابر چنین نسخه شخصی‌شده‌ای از MEI اعتبارسنجی شوند، در برابر شخصی‌سازی <a href="/resources/schemas.html" target="_blank" rel="noopener, noreferrer" >MEI All</a> + که نماینده چارچوب کامل MEI است هم اعتبارسنجی خواهند شد. این موضوع تضمین می‌کند که فایل، در سطح قابل‌توجهی با ابزارها و مستندات موجود سازگار خواهد بود. به طور کلی، توسعه MEI باید تنها زمانی که کاملاً ضروری است، انجام شود، و در چنین مواردی معمولاً ایده + خوبی است که با + <a href="/community/community-contacts.html" target="_blank" rel="noopener, noreferrer + جامعهMEI + </a> + مشورت کنید تا مطمئن شوید که قبلاً راه‌حل دیگری برای منظور شما وجود نداشته. + </p> <p> در این آموزش، ابتدا خواهیم آموخت که چگونه از <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> استفاده کنیم، که یک رابط کاربری گرافیکی برای ایجاد شخصی‌سازی‌های محدودکننده پایه ارائه می‌دهد. این ابزار بخشی از <a href="https://meigarage.edirom.de" target="_blank" rel="noopener, noreferrer">MEI Garage</a> است و با وجود اینکه کمی محدود است، به درک بهتر - مفاهیم شخصی‌سازی‌های MEI کمک می‌کند. سپس، خروجی MEI ProfileDrafter را بررسی خواهیم کرد و خواهیم دید چگونه <span style="font-size: 2rem;">برای اهداف اعتبارسنجی</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">یک + مفاهیم شخصی‌سازی‌های MEI کمک می‌کند. سپس، خروجی MEI ProfileDrafter را بررسی خواهیم کرد و خواهیم دید چگونه برای اهداف اعتبارسنجی یک فایل RelaxNG از آن تولید کنیم. در نهایت، برخی گزینه‌های پیشرفته شخصی‌سازی که فراتر از - محدوده MEI ProfileDrafter هستند را معرفی خواهیم کرد. ممکن است بخواهید از یک برنامه ویرایشگر XML در برخی نقاط + محدوده MEI ProfileDrafter هستند را معرفی خواهیم کرد. ممکن است بخواهید در قسمتهایی، از یک برنامه ویرایشگر XML استفاده کنید، اما ما برای تمامی پردازش‌ها از خدمات وب استفاده خواهیم کرد، بنابراین واقعاً مهم نیست کدام ویرایشگر - را انتخاب می‌کنید – هر کدام مناسب است. حال که این توضیحات به پایان رسید، بیایید شروع کنیم!</span></p> -</div> \ No newline at end of file + را انتخاب می‌کنید – هر کدام مناسب است. حال که این توضیحات به پایان رسید، بیایید شروع کنیم! +</p> +</div> From fdf6c298e4b095890241f4f0509ec5f695ece19c Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 08:04:49 +0330 Subject: [PATCH 39/40] Update 181_customizing_mei-02.html --- .../181_customizing_mei-02.html | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html index 17d2f21a2..59383eac7 100644 --- a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-02.html @@ -1,23 +1,26 @@ <div> <p> - برای مراحل زیر، شما باید <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> را در یک پنجره مرورگر جداگانه (یا تب) باز کنید تا این دستورات را دنبال کنید. + برای مراحل زیر، شما باید <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> را در یک پنجره (یا تب) جداگانه در مرورگر باز کنید تا با این دستورالعمل پیش بروید. </p> <!--<div> <img style="width: 100%;" src="./profileDrafter_overview.png"/> </div>--> <p> - وقتی ProfileDrafter را باز می‌کنید، یک لیست از تمام ماژول‌های MEI در ستون مرکزی مشاهده خواهید کرد. برای هر ماژول، تعداد المنت‌ها و کلاس‌های خصیصه در آن ماژول نمایش داده شده است. می‌توانید ماژول‌های MEI را با برداشتن تیک کنار نام آن‌ها غیرفعال کنید. + وقتی ProfileDrafter را باز می‌کنید، در ستون مرکزی، لیستی از تمام ماژول‌های MEI مشاهده خواهید کرد. برای هر ماژول، تعداد المنت‌ها و کلاس‌های خصیصه در آن ماژول نمایش داده شده است. می‌توانید ماژول‌های MEI را با برداشتن تیک کنار نام آن‌ها غیرفعال کنید. </p> <p> - غیرفعال کردن یا انتخاب ماژول‌های MEI بسیار ساده است، نه؟! با این حال، با استفاده از این تیک‌ها، بازخورد زیادی درباره عواقب انتخاب‌های خود دریافت نمی‌کنید – رابط کاربری واقعاً به شما نمی‌گوید که با این انتخاب‌ها چه چیزی از طرح‌واره حذف شده است. اما هر جعبه ماژول همچنین دارای دکمه <em>شخصی‌سازی</em> در گوشه بالا سمت راست است. با کلیک بر روی این دکمه، لیست ماژول‌ها در ستون مرکزی با لیستی از تمام المنت‌ها و کلاس‌های خصیصه که بخشی از ماژول فعلی هستند جایگزین می‌شود. لطفاً توجه داشته باشید که این فقط برای ماژول‌هایی که از طرح‌واره حذف نشده‌اند امکان‌پذیر است. + غیرفعال کردن یا انتخاب ماژول‌های MEI بسیار ساده است، نه؟! با این حال، با استفاده از این تیک‌ها، بازخورد زیادی درباره عواقب انتخاب‌های خود دریافت نمی‌کنید – رابط کاربری واقعاً به شما نمی‌گوید که با این انتخاب‌ها چه چیزی از طرح‌واره حذف شده است. اما هر ماژول دارای دکمه <em>شخصی‌سازی</em> هم در گوشه بالا سمت راست است. با کلیک بر روی این دکمه، لیست ماژول‌ها در ستون مرکزی با لیستی از تمام المنت‌ها و کلاس‌های خصیصه که بخشی از ماژول فعلی هستند جایگزین می‌شود. لطفاً توجه داشته باشید که این فقط برای ماژول‌هایی که از طرح‌واره حذف نشده‌اند امکان‌پذیر است. </p> <p> اگر ماژول <em>MEI.cmnOrnaments</em> را برای شخصی‌سازی انتخاب کنید، لیستی شامل المنت‌های <mordent>، <trill>، و <turn> و کلاس‌های خصیصه <em>att.mordent.log</em>، <em>att.ornamentAccid</em>، <em>att.ornamPresent</em>، <em>att.trill.log</em>، و <em>att.turn.log</em> مشاهده خواهید کرد. دوباره می‌توانید هر یک از این موارد را بسته به نیاز خاص خود غیرفعال کنید. در حالی که در صفحه قبلی می‌توانستید ماژول‌ها را به طور کامل غیرفعال کنید، در اینجا می‌توانید انتخاب‌های خاصی انجام دهید و MEI را دقیقاً به نیازهای خود محدود کنید. اگر به هر دلیلی به نسخه‌ای از MEI نیاز دارید که امکان رمزگذاری <trill> را فراهم کند، اما از <mordent> و <turn> پشتیبانی نمی‌کند، می‌توانید به راحتی آن دو المنت را غیرفعال کنید، اما ماژول <em>MEI.cmnOrnaments</em> را حفظ کنید. با نگاه کردن به ماژول‌های "بزرگتر" مانند <em>MEI.cmn</em>، <em>MEI.header</em>، یا <em>MEI.edittrans</em>، می‌توان موارد استفاده عملی بیشتری برای این حذف انتخابی المنت‌ها تصور کرد. </p> <p> - همان‌طور که برای المنت‌ها امکان‌پذیر است، می‌توان <strong>کلاس‌های خصیصه</strong> را نیز در این نمای ماژول‌ها غیرفعال کرد. با این حال، این کار نیاز به درک خوبی از کلاس‌های موجود و ساختار تودرتوی آن‌ها دارد. برای بیشتر کاربران (و بیشتر موارد استفاده)، این کار، عملی‌تر است. برای هر المنت، یک دکمه «<em>تنظیم خصیصه‌ها»</em> (set attributes) وجود دارد. اگر روی آن دکمه کلیک کنید، محتوای ستون اصلی بار دیگر با محتوای متفاوتی جایگزین می‌شود. این بار، یک لیست از تمام خصیصه‌های موجود بر روی آن المنت خواهید یافت. طرح این لیست بر اساس کلاس‌های خصیصه‌ای که این المنت عضو آن‌ها است تنظیم شده است. هر کلاس خصیصه یک چک‌باکس دارد که می‌توان آن را برای غیرفعال کردن استفاده کرد. اگر یک کلاس خصیصه را غیرفعال کنید، نه تنها خصیصه‌های تعریف شده در آن کلاس حذف می‌شوند، بلکه تمام کلاس‌های خصیصه دیگری که از طریق سلسله مراتب کلاس به ارث برده شده‌اند – شامل تمام خصیصه‌های تعریف شده توسط آن‌ها – نیز حذف می‌شوند. به عنوان مثال، اگر کلاس خصیصه </span><em style="font-size: 2rem;">att.basic</em><span style="font-size: 2rem;"> (که از طریق کلاس </span><em style="font-size: 2rem;">att.common</em><span style="font-size: 2rem;"> بر روی هر المنت در MEI موجود است) را غیرفعال کنید، این نه تنها خصیصه </span><em style="font-size: 2rem;">@xml:base</em><span style="font-size: 2rem;">، بلکه کلاس </span><em style="font-size: 2rem;">att.id</em><span style="font-size: 2rem;"> و از طریق آن خصیصه </span><em style="font-size: 2rem;">@xml:id</em><span style="font-size: 2rem;"> را نیز حذف می‌کند. پس از انجام این کار بر روی هر المنت انتخابی خود، باید به یک المنت دیگر بروید. در آنجا متوجه خواهید شد که همان کلاس خصیصه قبلاً غیرفعال شده است: تمام این گزینه‌ها به درستی هماهنگ هستند. این شامل کلاس‌های خصیصه فهرست شده در سطح ماژول‌های جداگانه نیز می‌شود.</span></p> + همان‌طور که برای المنت‌ها امکان‌پذیر است، می‌توان <strong>کلاس‌های خصیصه</strong> را نیز در این نمای ماژول‌ها غیرفعال کرد. با این حال، این کار نیاز به درک خوبی از کلاس‌های موجود و ساختار تودرتوی آن‌ها دارد. برای بیشتر کاربران (و بیشتر موارد استفاده)، این کار، عملی‌تر است. برای هر المنت، یک دکمه «<em>تنظیم خصیصه‌ها»</em> (set attributes) وجود دارد. اگر روی آن دکمه کلیک کنید، محتوای ستون اصلی بار دیگر با محتوای متفاوتی جایگزین می‌شود. این بار، یک لیست از تمام خصیصه‌های موجود بر روی آن المنت خواهید یافت. طرح این لیست بر اساس کلاس‌های خصیصه‌ای که این المنت عضو آن‌ها است تنظیم شده است. هر کلاس خصیصه یک چک‌باکس دارد که می‌توان آن را برای غیرفعال کردن استفاده کرد. اگر یک کلاس خصیصه را غیرفعال کنید، نه تنها خصیصه‌های تعریف شده در آن کلاس حذف می‌شوند، بلکه تمام کلاس‌های خصیصه دیگری که از طریق سلسله مراتب کلاس به ارث برده شده‌اند – شامل تمام خصیصه‌های تعریف شده توسط آن‌ها – نیز حذف می‌شوند. به عنوان مثال، اگر کلاس خصیصه <em>att.basic</em> (که از طریق کلاس <em >att.common</em> بر روی هر المنت در MEI موجود است) را غیرفعال کنید، این نه تنها خصیصه <em>@xml:base</em>، بلکه کلاس <em >att.id</em> و از طریق آن خصیصه <em>@xml:id</em> را نیز حذف می‌کند. پس از انجام این کار بر روی هر المنت انتخابی خود، باید به یک المنت دیگر بروید. در آنجا متوجه خواهید شد که همان کلاس خصیصه قبلاً غیرفعال شده است: تمام این گزینه‌ها باهم هماهنگ هستند. این شامل کلاس‌های خصیصه فهرست شده در سطح ماژول‌های جداگانه نیز می‌شود. + </p> <p> - با گزینه‌های غیرفعال کردن <strong>ماژول‌ها</strong>، <strong>المنت‌های</strong> جداگانه، و <strong>کلاس‌های خصیصه‌ها</strong>ی مورد نظر، می‌توان طرح‌واره MEI را به طور قابل توجهی محدود کرده، آن را برای نیازهای خاص هر پروژه مناسب‌تر کرد، تا از ناسازگاری و سایر مشکلات رمزگذاری در آن پروژه جلوگیری کند. از آنجا که MEI ProfileDrafter اجازه می‌دهد تا از چندین شخصی‌سازی رسمی MEI شروع کنید، ایجاد نسخه شخصی‌شده‌ای از MEI که پروفایل MEI CMN (یا هر شخصی‌سازی دیگر) را بیشتر محدود کند بسیار ساده است. در مرحله بعدی این آموزش، خواهیم دید چگونه از این شخصی‌سازی استفاده کنیم. + با گزینه‌های غیرفعال کردن <strong>ماژول‌ها</strong>، <strong>المنت‌های</strong> جداگانه، و <strong>کلاس‌های خصیصه‌ها</strong>ی مورد نظر، می‌توان طرح‌واره MEI را به طور قابل توجهی محدود کرده، + آن را برای نیازهای خاص هر پروژه مناسب‌تر کرد، تا از ناسازگاری و سایر مشکلات رمزگذاری در آن پروژه جلوگیری کند. از آنجا که MEI ProfileDrafter اجازه می‌دهد تا از چندین شخصی‌سازی رسمی MEI شروع کنید، + ایجاد نسخه شخصی‌شده‌ای از MEI که پروفایل MEI CMN (یا هر شخصی‌سازی دیگر) را بیشتر محدود کند بسیار ساده است. در مرحله بعدی این آموزش، خواهیم دید چگونه از این شخصی‌سازی استفاده کنیم. </p> - </div> \ No newline at end of file + </div> From d368b4cc853e7aeca3a392ea376ff1a7fdd3f5c6 Mon Sep 17 00:00:00 2001 From: Reza Seyedi <96647722+rezaseyedi91@users.noreply.github.com> Date: Sat, 10 May 2025 08:10:00 +0330 Subject: [PATCH 40/40] Update 181_customizing_mei-03.html --- .../181_customizing_mei-03.html | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html index 99fc609a9..430bef447 100644 --- a/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html +++ b/_tutorials-FA/181_customizing_MEI/181_customizing_mei-03.html @@ -1,17 +1,28 @@ <div> <p> به محض اینکه نسخه‌ای محدود شده از MEI با استفاده از ابزار - <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> ایجاد کردید، گام بعدی، آماده‌سازی اولین <em>سفارشی‌سازی MEI</em> برای اعتبارسنجی است – باید آن را به یک فایل RelaxNG کامپایل کنید. - در حالی که ProfileDrafter در آینده یک نسخه کامپایل شده برای دانلود مستقیم ارائه خواهد داد، ما بر روی یک روش کامپایل متفاوت تمرکز خواهیم کرد که به شما امکان می‌دهد تغییرات دستی بیشتری روی فایل سفارشی‌سازی ODD انجام دهید. در یک پروژه حرفه‌ای، باید سفارشی‌سازی ODD خود را هم به درستی نسخه‌بندی و مستندسازی کنید – این موارد خارج از محدوده ProfileDrafter هستند. + <a href="https://meigarage.edirom.de/profiler" target="_blank" rel="noopener, noreferrer">MEI ProfileDrafter</a> ایجاد کردید، + گام بعدی، آماده‌سازی اولین <em>سفارشی‌سازی MEI</em> برای اعتبارسنجی است – باید آن را به یک فایل RelaxNG کامپایل کنید. + در حالی که ProfileDrafter در آینده یک نسخه کامپایل شده برای دانلود مستقیم ارائه خواهد داد، ما بر روی یک روش کامپایل متفاوت تمرکز خواهیم کرد که به شما امکان می‌دهد تغییرات دستی بیشتری + روی فایل سفارشی‌سازی ODD انجام دهید. در یک پروژه حرفه‌ای، باید سفارشی‌سازی ODD خود را هم به درستی نسخه‌بندی و مستندسازی کنید – این موارد خارج از محدوده ProfileDrafter هستند. </p> <p> لطفاً دکمه <em>Download ODD</em> را در ستون سمت چپ ProfileDrafter فشار دهید و فایل ارائه شده را در یک مکان مناسب ذخیره کنید. حالا یک پنجره مرورگر جدید را به <a href="https://meigarage.edirom.de/customization" target="_blank" rel="noopener, noreferrer">خدمات سفارشی‌سازی MEI</a> - که بخشی از MEI Garage است، هدایت کنید. در اینجا باید فایل منبع MEI که سفارشی‌سازی شما بر اساس آن است را انتخاب کنید. با توجه به اینکه ProfileDrafter فعلاً به MEI نسخه 4.0.1 محدود است، می‌توانید گزینه پیش‌فرض را در خدمات سفارشی‌سازی نگه دارید. گام بعدی انتخاب و آپلود فایل <em>سفارشی‌سازی محلی</em> شما در ستون مرکزی است. سپس باید گزینه <em>خروجی</em> را بر روی <em>RelaxNG</em> تنظیم کنید. حالا می‌توانید دکمه بزرگ <em>Process</em> را که به رنگ آبی است فشار دهید. پس از پردازش در سمت سرور، برچسب آن دکمه به <em>Download</em> تغییر خواهد کرد. به محض اینکه این اتفاق افتاد، می‌توانید دوباره کلیک کنید تا فایل <strong>RelaxNG</strong> حاصل را دانلود کنید. لطفاً مطمئن شوید که فایل دانلود شده را به نامی معنادار تغییر دهید و از پسوند <code>.rng</code> استفاده کنید. حالا یک فایل RelaxNG صحیح دارید که از سفارشی‌سازی ODD شما کامپایل شده است. این فایل ممکن است برای اعتبارسنجی فایل‌های XML در مقابل پروفایل سفارشی MEI شما استفاده شود. تبریک! شما در استفاده از MEI <span style="font-size: 2rem;">پیشرفت قابل توجهی</span><span style="font-size: 2rem;"> </span><span style="font-size: 2rem;">داشته‌اید! بهرحال، یک نسخه که به طور خاص برای نیازهای شما سفارشی شده است، بر نسخه‌ای عمومی که برای همه مناسب است، ارجحیت دارد.</span></p> + که بخشی از MEI Garage است، ببرید. در اینجا باید فایل منبع MEI که سفارشی‌سازی شما بر اساس آن است را انتخاب کنید. با توجه به اینکه ProfileDrafter فعلاً به MEI نسخه 4.0.1 محدود است، + می‌توانید گزینه پیش‌فرض را در خدمات سفارشی‌سازی نگه دارید. گام بعدی انتخاب و آپلود فایل <em>سفارشی‌سازی محلی</em> شما در ستون مرکزی است. سپس باید گزینه <em>خروجی</em> را بر روی + <em>RelaxNG</em> تنظیم کنید. حالا می‌توانید دکمه بزرگ <em>Process</em> را که به رنگ آبی است فشار دهید. پس از پردازش در سمت سرور، برچسب آن دکمه به <em>Download</em> تغییر خواهد کرد. + به محض اینکه این اتفاق افتاد، می‌توانید دوباره کلیک کنید تا فایل <strong>RelaxNG</strong> حاصل را دانلود کنید. لطفاً مطمئن شوید که فایل دانلود شده را به نامی معنادار تغییر دهید و از پسوند <code>.rng</code> استفاده کنید. + حالا یک فایل RelaxNG صحیح دارید که از سفارشی‌سازی ODD شما کامپایل شده است. این فایل ممکن است برای اعتبارسنجی فایل‌های XML در مقابل پروفایل سفارشی MEI شما استفاده شود. تبریک! شما در استفاده از + MEI پیشرفت قابل توجهی داشته‌اید! بهرحال، یک نسخه که به طور خاص برای نیازهای شما سفارشی شده است، بر نسخه‌ای عمومی که برای همه مناسب است، ارجحیت دارد. + </span> + </p> <p> - این درس می‌توانست در همین جا متوقف شود. چالش واقعی این است که <strong>نیازهای خود را شناسایی کنید</strong> و <strong>آنها را به طور مناسب مدل‌سازی کنید</strong>، اما این، چیزی نیست که بتوان در یک درس آنلاین آموزش داد. در حالی که کسب تجربه لازم برای این کار به زمان و تبادل اطلاعات بستگی دارد، شما در حال حاضر مهارت‌های فنی لازم برای نزدیک شدن به مدل‌های خوب را دارید. + این درس می‌توانست در همین جا متوقف شود. چالش واقعی این است که <strong>نیازهای خود را شناسایی کنید</strong> و <strong>آنها را به طور مناسب مدل‌سازی کنید</strong>، + اما این، چیزی نیست که بتوان در یک درس آنلاین آموزش داد. البته که کسب تجربه لازم برای این کار به زمان و تبادل اطلاعات بستگی دارد، اما شما همین حالا مهارت‌های فنی لازم برای نزدیک شدن به مدل‌های خوب را دارید. </p> <p> - با این حال، با برخی تنظیمات اضافی در سفارشی‌سازی ODD، امکان کنترل بهتر بر روی طرح‌واره حاصل وجود دارد و این به شما امکان کنترل دقیق‌تری بر اعتبارسنجی داده‌ها و جلوگیری از خطاهای داده تا حد ممکن را می‌دهد. چنین تنظیماتی خارج از محدوده ProfileDrafter هستند و بنابراین نیاز به تنظیمات دستی در سفارشی‌سازی ODD دارند. در گام بعدی، ساختارهایی که ProfileDrafter برای حذف <em>ماژول‌ها</em>، <em>المنت‌ها</em> و <em>کلاس‌های خصیصه</em> از MEI استفاده می‌کند را تحلیل خواهیم کرد. + با این حال، با برخی تنظیمات اضافی در سفارشی‌سازی ODD، امکان کنترل بهتر بر روی طرح‌واره حاصل وجود دارد و این به شما امکان کنترل دقیق‌تری بر اعتبارسنجی داده‌ها و جلوگیری از خطاهای داده تا حد ممکن را می‌دهد. + چنین تنظیماتی خارج از محدوده ProfileDrafter هستند و بنابراین نیاز به تنظیمات دستی در سفارشی‌سازی ODD دارند. در گام بعدی، ساختارهایی که ProfileDrafter برای حذف <em>ماژول‌ها</em>، <em>المنت‌ها</em> و <em>کلاس‌های خصیصه</em> از MEI استفاده می‌کند را تحلیل خواهیم کرد. </p> -</div> \ No newline at end of file +</div>