섹션·루프·로직
Flow block은 canonical answer model을 유지하면서 order와 routing을 제어합니다.
조건
Compact expression에는 if를 사용하고, boolean-like value를 반환하는 multi-line code에는 <condition>을 사용합니다.
<question type="single" name="TARGET" if="AGE.value >= 18 && BRAND.has(1)">
<description>Targeted question</description>
</question>
Runtime condition error는 fail open으로 처리되어 respondent가 계속 진행할 수 있게 하고 missing case를 최소화합니다.
Jump
<jump to="TARGET" title="Route to target" if="Q1.o1">
<condition>
return Q1.o1 && AGE.value >= 18;
</condition>
</jump>
Condition이 true이면 Survey Link는 target block이 포함된 page로 이동합니다. Hidden target은 다음 visible flow block으로 resolve됩니다.
섹션과 루프
Section은 child block order를 재배치할 수 있습니다. Loop는 item별로 block을 반복하며, runtime과 simulation 분석을 위해 loop order metadata가 system order field로 추적됩니다.
Section 예시
<section name="SEC_ROTATE" title="Rotating diagnostic section" order="rotation">
<question type="single" name="SEC_Q1"><description>Section item 1</description><option value="1">Yes</option></question>
<question type="text" name="SEC_Q2"><description>Section item 2</description></question>
</section>
Section은 answer name을 유지합니다. order="random" 또는 order="rotation"은 presentation order만 변경합니다.
Loop 예시
<loop name="BRAND_LOOP">
<items order="rotation" group-order="random">
<group name="PRIMARY">
<label>Primary brands</label>
<item name="1">Brand A</item>
<item name="2">Brand B</item>
</group>
</items>
<question type="rating" name="BRAND_RATE_{{item}}" mode="star" score="5">
<description>Rate {{item_label}}</description>
</question>
</loop>
Loop placeholder는 item별로 확장됩니다. Loop item name은 생성되는 question name과 export column 일부가 되므로 안정적으로 유지해야 합니다.
Share list 예시
<share-list name="CORE_OPTIONS">
<group name="CORE_GROUP"><label>Core</label><option value="1">One</option></group>
</share-list>
<question type="single" name="USES_SHARE_LIST">
<description>Shared options</description>
<options><insert-list from="CORE_OPTIONS" /></options>
</question>
<insert-list>는 authored reference를 유지하면서 runtime에서는 reusable option/attribute tree를 확장해 rotation, validation, export metadata에 사용합니다.