フィードバックXMLフォーマット
フィードバック活動では、XMLファイルフォーマットによる質問のインポートおよびエクスポートができます。これは問題バンクで使用されるMoodle XMLフォーマットとは別のものです。フィードバックXMLフォーマットはフィードバック活動モジュール専用であり、独自の構造を持っています。
このページでは、mod/feedback/import.phpおよび対応するエクスポート機能で使用されるXMLフォーマットの全体を、Moodleのソースコードに基づいて説明します。フィードバック活動のアンケートをプログラムで生成する必要のある開発者、インテグレータおよびAIツール向けのリファレンスです。
概要
フィードバックXMLフォーマットでは、次のことができます。
- フィードバック活動のすべての質問を
.xmlファイルとしてエクスポートする - 新規または既存のフィードバック活動に質問をインポートする
- テンプレート機能が使えない場合に、Moodleインスタンス間で質問を移動する
インポートするには、フィードバック活動 → 「テンプレート」タブ → 「質問をインポートする」に移動します。既存のアイテムを削除するか、既存のアイテムに追加するかを選択できます。
エクスポートするには、フィードバック活動 → 「テンプレート」タブ → 「質問をエクスポートする」に移動します。
ファイル構造
XMLファイルはBOM(バイトオーダーマーク)なしのUTF-8でエンコードする必要があります。<?xml>宣言はファイルの先頭行に置く必要があり、その前に空行があってはいけません。
全体の構造は次のとおりです。
<?xml version="1.0" encoding="UTF-8" ?>
<FEEDBACK VERSION="200701" COMMENT="XML-Importfile for mod/feedback">
<ITEMS>
<ITEM TYPE="..." REQUIRED="...">
...child elements...
</ITEM>
<ITEM TYPE="..." REQUIRED="...">
...child elements...
</ITEM>
</ITEMS>
</FEEDBACK>
ルート要素:FEEDBACK
| 属性 | 必須 | 説明 |
|---|---|---|
VERSION |
はい | 正確に200701である必要があります。インポートコードはこの値をチェックし、一致しない場合はファイルを拒否します。
|
COMMENT |
いいえ | 任意のコメントです。MoodleのエクスポートではXML-Importfile for mod/feedbackが使用されます。
|
コンテナ要素:ITEMS
<ITEMS>要素は、すべての<ITEM>要素を囲む単純なコンテナです。<FEEDBACK>の中には<ITEMS>要素がちょうど1つ必要です。
アイテム要素:ITEM
各<ITEM>要素は、1つの質問、ラベルまたは改ページを表します。アイテムはドキュメント内の順序でインポートされ、連続した位置が割り当てられます。
ITEMの属性
| 属性 | 必須 | 説明 |
|---|---|---|
TYPE |
はい | アイテムタイプです。全リストについては、下記の#アイテムタイプをご覧ください。 |
REQUIRED |
はい | 回答必須の質問の場合は1、任意の場合は0です。ラベル、改ページおよび情報アイテムでは0に設定します。
|
ITEMの子要素
すべての<ITEM>には、値が空であっても、次の子要素をすべて含める必要があります。空の値(<![CDATA[]]>)も含め、すべての値を<![CDATA[...]]>セクションで囲む必要があります。これはMoodleのエクスポートで生成されるフォーマットと一致しており、確実にインポートするために必要です。
| 要素 | 説明 |
|---|---|
ITEMID |
アイテムの数値識別子です。アイテム間の依存関係のマッピングに使用されます。インポート時にMoodleがこれらのIDを割り当て直すため、一意の整数であれば何でも使用できます(例:1からの連番)。依存関係を使用しない場合は0に設定します。
|
ITEMTEXT |
ユーザに表示される質問テキストです。labelおよびcaptchaタイプでは、インポート時に無視されます(空に設定されます)。その他のすべての質問タイプでは、これが質問/設問文になります。 |
ITEMLABEL |
依存機能に使用される任意のラベル識別子です。これは表示テキストではありません。依存するアイテムから参照できる短い識別子です。labelおよびcaptchaタイプでは無視されます(空に設定されます)。 |
PRESENTATION |
アイテムの表示方法を制御する、タイプ固有の表示データです。フォーマットはアイテムタイプによって異なります。詳細は#アイテムタイプをご覧ください。 |
OPTIONS |
追加の表示オプションです。multichoiceアイテムでは、レイアウトフラグ(例:水平の場合はh)を含めることができます。その他のタイプでは通常は空です。
|
DEPENDITEM |
このアイテムが依存する別のアイテムのITEMIDです。依存関係がない場合は0に設定します。設定した場合、参照先のアイテムでユーザがDEPENDVALUEに指定された値を選択したときにのみ、このアイテムが表示されます。
|
DEPENDVALUE |
このアイテムを表示するために、依存先のアイテムが持つ必要のある値です。依存関係がない場合は空です。 |
単一アイテムのテンプレート
<ITEM TYPE="multichoice" REQUIRED="1">
<ITEMID>
<![CDATA[1]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[Your question text here]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[r>>>>>Option A
|Option B
|Option C]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
アイテムタイプ
フィードバック活動では、次のアイテムタイプがサポートされています。それぞれにTYPE属性の値を示します。
multichoice
多肢選択の質問(評定なし)です。表示の接頭辞に応じて、ラジオボタン(単一回答)、チェックボックス(複数回答)またはドロップダウンリスト(単一回答)として表示できます。
PRESENTATIONのフォーマット:
{prefix}>>>>>{option1}
|{option2}
|{option3}
接頭辞によって表示スタイルが決まります。
| 接頭辞 | 表示スタイル | 選択 |
|---|---|---|
r |
ラジオボタン | 単一回答 |
c |
チェックボックス | 複数回答 |
d |
ドロップダウンリスト | 単一回答 |
例:ラジオボタン(単一回答)
<PRESENTATION>
<![CDATA[r>>>>>Strongly disagree
|Disagree
|Neutral
|Agree
|Strongly agree]]>
</PRESENTATION>
例:チェックボックス(複数回答)
<PRESENTATION>
<![CDATA[c>>>>>Email
|Slack
|Phone
|In person]]>
</PRESENTATION>
例:ドロップダウンリスト
<PRESENTATION>
<![CDATA[d>>>>>Engineering
|Marketing
|Sales
|Support]]>
</PRESENTATION>
OPTIONSフィールド:
OPTIONS要素では、ラジオボタンおよびチェックボックスのレイアウトを制御できます。
| 値 | 意味 |
|---|---|
| (空) | 垂直レイアウト(デフォルト) |
h |
水平レイアウト |
注意事項:
- 選択肢は、改行とそれに続くパイプ文字(
\n|)で区切ります。これはMoodleのエクスポートフォーマットと一致します。1行でパイプだけを使用する(改行なし)方法でも動作する場合がありますが、互換性のために改行を使うフォーマットをお勧めします。 - 回答必須ではないラジオボタンの質問には、活動設定で非表示にしていない限り、「未選択」の選択肢が自動的に追加されます。
d(ドロップダウン)接頭辞を使用すると、先頭にデフォルトの「未選択」が表示されます。
multichoicerated
数値付きの多肢選択の質問(評定あり)です。各選択肢には整数値が関連付けられており、Moodleは分析ビューで平均を計算できます。ラジオボタン、チェックボックスまたはドロップダウンにでき、接頭辞の仕組みはmultichoiceと同じです。
PRESENTATIONのフォーマット:
{prefix}>>>>>{value1}####{label1}
|{value2}####{label2}
|{value3}####{label3}
各選択肢は{integer_value}####{display_label}のフォーマットを使用します。
{integer_value}は、保存されて分析/平均に使用される数値です。####は文字どおりの区切り文字(4つのハッシュ文字)です。{display_label}はユーザに表示されるテキストです。
例:評定ありのラジオボタン(リッカート尺度)
<PRESENTATION>
<![CDATA[r>>>>>1####1 - Strongly disagree
|2####2
|3####3
|4####4
|5####5 - Strongly agree]]>
</PRESENTATION>
例:評定ありのチェックボックス
<PRESENTATION>
<![CDATA[c>>>>>1####Writing and editing
|2####Coding and debugging
|3####Data analysis
|4####Brainstorming]]>
</PRESENTATION>
注意事項:
- 整数値は連番である必要はありませんが、通常は連番です(1、2、3...)。
- フィードバックの分析ビューでは、Moodleは数値の平均を表示します。
- リッカート形式の尺度には
r接頭辞を、数値も必要な「当てはまるものをすべて選択」形式にはcを使用します。
textarea
長い自由記述の回答のための、複数行のテキスト入力ボックスです。
PRESENTATIONのフォーマット:
{width}|{height}
各項目の意味は次のとおりです。
{width}は列数(テキストエリアの文字幅)です。{height}は行数(表示される行)です。
例:
<PRESENTATION>
<![CDATA[60|5]]>
</PRESENTATION>
これにより、幅60文字、高さ5行のテキストエリアが作成されます。
textfield
短い自由記述の回答のための、1行のテキスト入力です。
PRESENTATIONのフォーマット:
{width}|{maxlength}
各項目の意味は次のとおりです。
{width}は入力フィールドの表示幅(文字数)です。{maxlength}はユーザが入力できる最大文字数です。
例:
<PRESENTATION>
<![CDATA[30|255]]>
</PRESENTATION>
これにより、幅30文字、最大255文字のテキストフィールドが作成されます。
numeric
指定された範囲内の数値を受け付ける数値入力です。
PRESENTATIONのフォーマット:
{range_from}|{range_to}
各項目の意味は次のとおりです。
{range_from}は受け付ける最小値です。{range_to}は受け付ける最大値です。
範囲に制限を設けない場合は、空文字列またはダッシュを使用します。
例:
<PRESENTATION>
<![CDATA[0|10]]>
</PRESENTATION>
これは0から10までの数値を受け付けます。
例:制限なし
<PRESENTATION>
<![CDATA[|]]>
</PRESENTATION>
これはあらゆる数値を受け付けます。
label
質問の間にセクションの見出し、指示または説明テキストを追加するために使用する、操作できないテキスト/HTMLブロックです。ラベルは質問ではないため、回答はありません。
インポート時の特別な動作:
ITEMTEXTは無視され、空に設定されます。ITEMLABELは無視され、空に設定されます。- 表示内容は
PRESENTATIONに入れます。
PRESENTATIONのフォーマット:
PRESENTATIONフィールドには、表示するHTMLコンテンツが入ります。標準のHTMLタグを使用できます。
例:
<ITEM TYPE="label" REQUIRED="0">
<ITEMID>
<![CDATA[1]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[<h3>Section 1: Your Background</h3>
<p>Please tell us about your experience level.</p>]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
pagebreak
フィードバックフォームに改ページを挿入します。改ページの前の質問は1つのページに、後の質問は次のページに表示されます。改ページには表示される内容はありません。
特別な動作:
pagebreakは仮想タイプであり、対応するfeedback_item_pagebreakクラスはありません。インポートコードはこれを特別なケースとして処理します。- すべての子要素の値は空にしてください(
0にするITEMIDおよびDEPENDITEMを除きます)。
例:
<ITEM TYPE="pagebreak" REQUIRED="0">
<ITEMID>
<![CDATA[0]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
info
自動的に生成された情報を表示します。これは質問ではなく、PRESENTATIONの値に基づいて状況に応じたデータを表示します。
PRESENTATIONのフォーマット:
表示する情報を選択する1つの整数です。
| 値 | 表示される情報 |
|---|---|
1 |
回答のタイムスタンプ(フィードバックが完了した日時) |
2 |
コース名(フィードバックに回答しているコース) |
3 |
コースカテゴリ |
例:
<PRESENTATION>
<![CDATA[2]]>
</PRESENTATION>
これはコース名を表示します。
captcha
フォームの自動送信を防ぐためのCAPTCHA認証です。フィードバックがサイトホームにあり、ログインしていないユーザに公開されている場合を除き、必要になることはほとんどありません。
インポート時の特別な動作:
labelと同様に、ITEMTEXTおよびITEMLABELは無視され、空に設定されます。PRESENTATIONは空にしてください。
例:
<ITEM TYPE="captcha" REQUIRED="0">
<ITEMID>
<![CDATA[0]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
旧タイプ名
古いバージョンのMoodleでは、異なるタイプ名が使用されていました。インポートコードはこれらを現在の対応するタイプ名に自動的に変換します。新しいファイルでは現在の名前を使用してください。ただし、後方互換性のために旧名も受け付けられます。
| 旧TYPE | 変換後 | 追加される表示接頭辞 |
|---|---|---|
radio |
multichoice |
r>>>>>を先頭に追加
|
dropdown |
multichoice |
d>>>>>を先頭に追加
|
check |
multichoice |
c>>>>>を先頭に追加
|
radiorated |
multichoicerated |
r>>>>>を先頭に追加
|
dropdownrated |
multichoicerated |
d>>>>>を先頭に追加
|
旧タイプを使用する場合、表示接頭辞はインポートコードによって自動的に追加されるため、PRESENTATIONの値には選択肢のみ(接頭辞なし)を含めてください。現在のタイプ(multichoice / multichoicerated)を使用する場合は、接頭辞を自分で含める必要があります。
アイテム間の依存関係
フィードバック活動では、前の質問への回答に基づいてアイテムを条件付きで表示できます。これはDEPENDITEMおよびDEPENDVALUEフィールドを使用して設定します。
依存関係を設定するには、次のようにします。
- 制御する側の質問に、意味のある
ITEMLABELを割り当てます(これは短いテキスト識別子であり、質問テキストではありません)。 - 依存する側のアイテムの
DEPENDITEMに、制御する側の質問のITEMIDを設定します。 DEPENDVALUEに、このアイテムを表示するきっかけとなる値を設定します。
注意事項:
- インポート時に、Moodleは
ITEMIDの値を新しいデータベースIDに割り当て直します。依存関係の参照は自動的に更新されます。 - 依存関係のないアイテム(デフォルト)では、
DEPENDITEMを0に、DEPENDVALUEを空に設定します。
完全な例
次に示すのは、いくつかのアイテムタイプを示す、完全かつ最小限のフィードバックXMLファイルです。
<?xml version="1.0" encoding="UTF-8" ?>
<FEEDBACK VERSION="200701" COMMENT="XML-Importfile for mod/feedback">
<ITEMS>
<ITEM TYPE="label" REQUIRED="0">
<ITEMID>
<![CDATA[1]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[<h3>Employee Satisfaction Survey</h3>
<p>Please answer the following questions honestly.</p>]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="multichoicerated" REQUIRED="1">
<ITEMID>
<![CDATA[2]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[How satisfied are you with your role? (1 = Very unsatisfied, 5 = Very satisfied)]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[r>>>>>1####1 - Very unsatisfied
|2####2
|3####3
|4####4
|5####5 - Very satisfied]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="multichoice" REQUIRED="1">
<ITEMID>
<![CDATA[3]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[Which department are you in?]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[d>>>>>Engineering
|Marketing
|Sales
|Support
|Other]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="multichoice" REQUIRED="1">
<ITEMID>
<![CDATA[4]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[What tools do you use daily? (Select all that apply)]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[c>>>>>Email
|Slack
|Jira
|Confluence
|Google Docs]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="pagebreak" REQUIRED="0">
<ITEMID>
<![CDATA[5]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="textarea" REQUIRED="0">
<ITEMID>
<![CDATA[6]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[Any additional comments or suggestions?]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[60|5]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="textfield" REQUIRED="0">
<ITEMID>
<![CDATA[7]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[Your name (optional)]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[30|255]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
<ITEM TYPE="numeric" REQUIRED="0">
<ITEMID>
<![CDATA[8]]>
</ITEMID>
<ITEMTEXT>
<![CDATA[How many years have you worked here?]]>
</ITEMTEXT>
<ITEMLABEL>
<![CDATA[]]>
</ITEMLABEL>
<PRESENTATION>
<![CDATA[0|50]]>
</PRESENTATION>
<OPTIONS>
<![CDATA[]]>
</OPTIONS>
<DEPENDITEM>
<![CDATA[0]]>
</DEPENDITEM>
<DEPENDVALUE>
<![CDATA[]]>
</DEPENDVALUE>
</ITEM>
</ITEMS>
</FEEDBACK>
アイテムタイプのクイックリファレンス
| TYPE属性 | 説明 | PRESENTATIONのフォーマット | 回答の有無 |
|---|---|---|---|
multichoice |
多肢選択(評定なし) | {r|c|d}>>>>>{opt1}\n|{opt2}\n|{opt3} |
あり |
multichoicerated |
多肢選択(評定あり/数値付き) | {r|c|d}>>>>>{val}####{label}\n|{val}####{label} |
あり |
textarea |
複数行のテキスト入力 | {width}|{height} |
あり |
textfield |
1行のテキスト入力 | {width}|{maxlength} |
あり |
numeric |
範囲付きの数値入力 | {min}|{max} |
あり |
label |
静的なHTMLテキストブロック | HTMLコンテンツ | なし |
pagebreak |
ページの区切り | (空) | なし |
info |
自動生成される情報 | 1、2または3 |
なし |
captcha |
CAPTCHA認証 | (空) | なし |
トラブルシューティング
「Cannot load XML」エラー
これは最もよくあるインポートエラーです。次の点を確認してください。
- VERSION属性:正確に
200701である必要があります(整数として。属性値の中に引用符は不要です)。インポートコードはintval($data['FEEDBACK']['@']['VERSION']) != 200701をチェックします。 - UTF-8エンコーディング:ファイルは有効なUTF-8である必要があります。BOM(バイトオーダーマーク)は使用しないでください。Moodleの
feedback_check_xml_utf8()関数がエンコーディングを検証します。 - CDATAによる囲み:すべての子要素の値を
<![CDATA[...]]>セクションで囲んでください。これは特殊文字(&、<、>、"、')を含む値の場合に特に重要です。 - すべての子要素の存在:すべての
<ITEM>には、7つの子要素ITEMID、ITEMTEXT、ITEMLABEL、PRESENTATION、OPTIONS、DEPENDITEM、DEPENDVALUEをすべて含める必要があります。要素が欠けていると、xmlize()パーサでPHPエラーが発生します。 - 整形式のXML:アップロードする前に、XMLパーサでファイルを検証してください。ウェブブラウザ(例:Firefox)でファイルを開くと、XMLの構文エラーが報告されます。
- 先頭行が空行でないこと:
<?xml宣言はファイルの最初の文字である必要があります。 - 選択肢テキスト内の特殊文字:CDATAセクションの外側のテキストでは、エスケープされていないアンパサンド(
&)および山括弧を避けてください。迷った場合は、すべてをCDATAで囲んでください。
アイテムはインポートされるが正しく表示されない
- multichoiceに選択肢が表示されない:PRESENTATIONの値に、正しい接頭辞(
r>>>>>、c>>>>>またはd>>>>>>)とそれに続くパイプ区切りの選択肢が含まれていることを確認してください。 - ラベルに内容が表示されない:ラベルアイテムでは、表示内容を
ITEMTEXTではなくPRESENTATIONに入れる必要があります。インポートコードはラベルのITEMTEXTを空に設定します。 - 評定値が計算されない:
multichoiceではなくmultichoiceratedを使用していること、および各選択肢が4つのハッシュ文字を使った{value}####{label}フォーマットになっていることを確認してください。
技術的な注意事項
インポートコードの動作
インポートはmod/feedback/import.phpによって処理され、次の2つの主要な関数が呼び出されます。
feedback_load_xml_data($xmlcontent):UTF-8エンコーディングを検証し、Moodleのxmlize()関数を使用してXMLを解析し、VERSION属性をチェックして、ITEMデータの配列を返します。feedback_import_loaded_data(&$data, $feedbackid):各アイテムを順に処理し、旧タイプ名を対応付け、feedback_itemのデータベースレコードを作成して、依存関係の参照を割り当て直します。
xmlize()関数(lib/xmlize.php)は、XMLを入れ子になったPHP配列に変換します。
- 属性には
['@']['ATTRIBUTE_NAME']でアクセスします。 - 子要素のテキスト内容には
['#']['ELEMENT_NAME'][0]['#']でアクセスします。
インポートコードはハードコードされた配列パスを使用しているため、要素名および構造を正確にすることが重要です。
ソースコードの参照先
- インポート/エクスポートのロジック:
mod/feedback/import.php - アイテムタイプのクラス:
mod/feedback/item/{typename}/lib.php(タイプごとに1つのディレクトリ) - データベーススキーマ:
mod/feedback/db/install.xml(feedback_itemテーブル)
関連項目
- フィードバック活動
- フィードバックテンプレート
- mod/feedback/import
- Moodle XMLフォーマット(別の小テスト問題バンク用フォーマット)