Використання <snippets>

Хоча включення файлів, як це показано у попередньому розділі є достатньо потужним інструментом, найкориснішим він стає, якщо його поєднати з фрагментами, <snippets>. Фрагменти — малі шматки коду, які ви можете вставити у іншу частину файла. Найкращою ілюстрацією буде приклад:

<document>
        <snippets>
                <snippet id="note">
                        <frame>
                                <text>
                This will be inserted at two places in the GUI
                                </text>
                        </frame>
                </snippet>
        </snippets>
        <dialog label="test">
                <column>
                        <insert snippet="note"/>
                        [...]
                        <insert snippet="note"/>
                </column>
        </dialog>
</document>
        

Отже, ви визначаєте фрагмент коду у одному місці на початку файла XML, а потім використовуєте <insert> для вставлення коду туди, куди ви хочете його вставити.

Хоча цей приклад і не є таким уже надкорисним сам собою, можна уявити його у поєднанні з включенням за допомогою <include> файла .xml. Зауважте, що ви також можете розташувати фрагменти для файла .rkh у тому самому файлі. Ви просто вкажете його за допомогою <include> і вставите відповідний фрагмент за допомогою <insert>:

<!-- Це файл, який називається «common_snippets.xml» -->
<document>
        <snippet id="common_options">
                <spinbox id="something" [...]/>
                [...]
        </snippet>
        <snippet id="common_note">
                <text>Важлива нотатка для цього типу додатків</text>
        </snippet>

        <snippet id="common_help">
                <setting id="something">Виконує якусь дію</setting>
                [...]
        </snippet>
</document>
        
<!-- Це файл .xml додатка -->
<document>
        <snippets>
                <!-- Імпортуємо загальні фрагменти -->
                <include file="common_snippets.xml"/>
        </snippets>

        <dialog label="test2">
                <insert snippet="common_note"/>
                <spinbox id="something_plugin_specific" [...] />
                <insert snippet="common_options"/>
        </dialog>
</document>
        

Подібно до включення до JS, зворотний підхід часто є навіть ще кориснішим:

<!-- Це файл із назвою «common_layout.xml» -->
<document>
        <column>
                <insert snippet="note">
                [...]
                <insert snippet="plugin_parameters">
        </column>
        [...]
</document>
        
<!-- Це файл .xml додатка -->
<document>
        <snippets>
                <snippet id="note">
                        <text>Нотатка для цього додатка</text>
                </snippet>

                <snippet id="plugin_parameters">
                        <frame label="Специфічні для цього додатка параметри">
                                [...]
                        </frame>
                </snippet>
        </snippets>

        <dialog label="test3">
                <include file="common_layout.xml"/>
        </dialog>
</document>
        

Нарешті, можна вставляти фрагменти за допомогою <insert> у інші фрагменти, якщо виконуються такі умови: а) буде використано лише один рівень вкладеності і б) розділ <snippets> розташовано на початку файла (до вставляння вкладеного фрагмента); причиною цього є те, що обробка інструкцій <insert> відбувається у файлі згори вниз.