QuestionForm
Description
The QuestionForm
data format describes one or more
questions for a HIT, or for a Qualification test. It contains
instructions and data Workers use to answer the questions, and a set of one or more form
fields, which are rendered as a web form for a Worker to fill out and submit.
A QuestionForm
is a string value that consists of XML data. This XML
data must conform to the QuestionForm
schema. All elements in a
QuestionForm
belong to a namespace whose name is identical to
the URL of the QuestionForm
schema document. See Schema Locations for the
location of this schema.
Tip
For information about creating HITs that use your own web site in a frame instead of questions, see the ExternalQuestion data structure.
The QuestionForm
data structure is used as a parameter value for the following operations:
-
CreateHIT and CreateHITWithHITType
-
CreateQualificationType
-
UpdateQualificationType
For more information about using XML data as a parameter or return value, see Using XML Parameter Values.
QuestionForm Structure
The top-most element of the QuestionForm
data structure is a
QuestionForm
element. This element contains optional
Overview
elements and one or more Question
elements. There can be any number of these two element types
listed in any order. The following example structure has an Overview
element and a Question
element followed
by a second Overview
element and Question
element—all within the same QuestionForm
.
<QuestionForm xmlns="
[the QuestionForm schema URL]
"> <Overview>[...]
</Overview> <Question>[...]
</Question> <Overview>[...]
</Overview> <Question>[...]
</Question>[...]
</QuestionForm>
The Overview
element describes instructions and information,
and presents them separately from the set of questions. It can contain any kind of
informational content, as described below. If omitted, no overview text is displayed
above the questions.
Each Question
element can contain the elements described in
the following table. See also the example below the table.
Name | Description | Required |
---|---|---|
|
An identifier for the question. This identifier is used to associate the Worker's answers with the question in the answer data. Type: String Default: None |
Yes |
|
A name for the question, displayed as a prominent heading. Type: String Default: None |
No |
|
Specifies whether the Worker must provide an answer for this question to successfully submit the form. Type: Boolean Default: false Valid Values: true | false |
No |
|
The instructions and data specific to this question, such as the text of the question. It can contain any kind of informational content, as described in the Content Structure section below. Type: Content structure Default: None |
Yes |
|
A structure that describes the field type and possible values for the answer to this question, as described in the Answer Specification section below. This element controls how the form field is rendered and specifies which values are valid answers for this question. Type: An answer specification structure Default: None Valid Values: |
Yes |
For example:
<Question> <QuestionIdentifier>my_question_id</QuestionIdentifier> <DisplayName>My Question</DisplayName> <IsRequired>true</IsRequired> <QuestionContent>
[...]
</QuestionContent> <AnswerSpecification>[...]
</AnswerSpecification> </Question>
Content Structure
The Overview
elements and the QuestionContent
elements of a QuestionForm
can
contain different types of information. For example, you might include a paragraph of
text and an image in your HIT's overview.
Each kind of information is defined by a corresponding element. These elements can appear in any number, in any order. The content elements are rendered in the order in which they occur in the containing element.
Following are the allowed information types:
-
Title
-
Text
-
List
-
Binary
-
Application (Deprecated)
-
EmbeddedBinary
-
FormattedContent
Each of these types are described in detail in the following subsections. A full example showing the use of the elements and information types is at the end of the section.
Title
A Title
element specifies a string to be rendered as a
title or heading.
<Title>The Next Move</Title>
Text
A Text
element specifies a block of text to be rendered as
a paragraph. Only plain text is allowed. HTML is not allowed. If HTML characters
(such as angle brackets) are included in the data, they appear verbatim in the web
output.
<Text>What is the best next move for "X" in this game of Tic-Tac-Toe?</Text>
List
A List
element displays a bulleted list of items. Items
are specified using one or more ListItem
elements inside the
List
. The ListItem
element is a
string.
<List> <ListItem>It must be a valid move.</ListItem> <ListItem>"X" cannot resign.</ListItem> </List>
Binary
A Binary
element specifies non-textual data of some kind,
such as an image, audio, or video. The elements listed in the following table are
required and must be entered in the order shown here.
Name | Description | Required |
---|---|---|
|
Specifies the type of the data. Type: Default: None Child Elements:
|
Yes |
|
The data itself specified with a Type: Default: None |
Yes |
|
The text that should appear if the data cannot be rendered in the browser. Type: String Default: None |
Yes |
<Binary> <MimeType> <Type>image</Type> <SubType>gif</SubType> </MimeType> <DataURL>http://tictactoe.amazon.com/game/01523/board.gif</DataURL> <AltText>The game board, with "X" to move.</AltText> </Binary>
Application (Deprecated)
Important
Beginning Tuesday, December 12th 2017 the QuestionForm data structure will no longer support the Application
element. Instead, we recommend using the HTMLQuestion or ExternalQuestion data
structures for including interactive content for Workers.
An Application
element specifies an embedded application.
It contains either a JavaApplet
element or a Flash
element.
You can specify zero or more parameters to pass to your Java applet or Flash
application when it is opened in the web page. For a HIT, in addition to the
parameters you specify, Amazon Mechanical Turk includes two parameters specific to
the HIT: hitId
and assignmentId
. The hitId
parameter is equal to the ID of the HIT. The assignmentId
parameter is
equal to the ID of the assignment if the Worker has accepted the HIT, or equal to
ASSIGNMENT_ID_NOT_AVAILABLE
if the Worker is only previewing the
HIT.
The JavaApplet
element includes the elements described in
the following table:
Name | Description | Required |
---|---|---|
|
The URL path to the directory that contains Java classes for the applet. Type: URL Default: None |
Yes |
|
The name of the class file that contains the applet code,
which is located in the path specified by Type: String Default: None |
Yes |
|
The width of the bounding box for the applet. Type: String Default: None |
Yes |
|
The height of the bounding box for the applet. Type: String Default: None |
Yes |
|
The parameters for the applet. Type: Default: None Child Elements:
|
No |
The Flash
element includes the elements described in the
following table:
Name | Description | Required |
---|---|---|
|
The URL of the Flash movie file. Type: URL Default: None |
Yes |
|
The width of the bounding box for the Flash movie. Type: String Default: None |
Yes |
|
The height of the bounding box for the Flash movie. Type: String Default: None |
Yes |
|
The parameters for the Flash movie. Type: Default: None Child Elements:
|
No |
<Application> <JavaApplet> <AppletPath>http://tictactoe.amazon.com/applets/</AppletPath> <AppletFilename>GameViewer.class</AppletFilename> <Width>400</Width> <Height>300</Height> <ApplicationParameter> <Name>game_id<Name> <Value>01523</Value> </ApplicationParameter> </JavaApplet> </Application>
EmbeddedBinary
An EmbeddedBinary
element specifies an external object of
non-textual data of some kind, such as an image, audio or video, that displays in
your browser. The elements listed in the following table are required and must be
entered in the order shown here.
Name | Description | Required |
---|---|---|
|
Specifies the type of the data. Type: Default: None Child Elements:
|
Yes |
|
The data itself specified by a Type: Default: None |
Yes |
|
The text that should appear if the data cannot be rendered in the browser. Type: String Default: None |
Yes |
|
The width of the bounding box for the object. Type: String Default: None |
Yes |
|
The height of the bounding box for the object. Type: String Default: None |
Yes |
|
The parameters for the Type: Default: None Child elements:
|
No |
<EmbeddedBinary> <EmbeddedMimeType> <Type>image</Type> <SubType>gif</SubType> </EmbeddedMimeType> <DataURL>http://tictactoe.amazon.com/game/01523/board.gif</DataURL> <AltText>The game board, with "X" to move.</AltText> <Width>400</Width> <Height>300</Height> <ApplicationParameter> <Name>game_id<Name> <Value>01523</Value> </ApplicationParameter> </EmbeddedBinary>
FormattedContent
For finer control over the display of your HIT information, you can specify a
FormattedContent
element. Formatted content is a block of
text with formatting information specified using XHTML tags. For example, you can
use XHTML tags to specify that certain words appear in a boldface font or to include
a table in your HIT information.
Only a limited subset of XHTML is supported. For more information on the creating and validating XHTML formatted content, see Formatted Content: XHTML.
The value of the FormattedContent
element must be
specified as an XML CDATA block. CDATA tells the web service that the XHTML elements
are not part of the QuestionForm
data schema. For example,
the following describes a paragraph of formatted text:
<FormattedContent><![CDATA[ <p>This is a paragraph with <b>bold text</b>, <i>italic text</i>, and <b><i>bold italic text</i></b>.</p> ]]></FormattedContent>
Answer Specification
The AnswerSpecification
element describes the format and
possible values for answers to a question. It contains a FreeTextAnswer
element, which describes a text field; a SelectionAnswer
element, which describes a multiple choice field; or a
FileUploadAnswer
, which prompts the Worker to upload a file
as the answer to the question.
FreeTextAnswer
A FreeTextAnswer
element describes a text field and
constraints on its possible values. It includes the elements described in the
following table:
Name | Description | Required |
---|---|---|
|
Describes the constraints on the allowed values for the text field. This element is described in the next table. Type: Default: None |
No |
|
Specifies default text. This value appears in the form when it is rendered, and is accepted as the answer if the Worker does not change it. Type: String Default: An empty value |
No |
|
Specifies how tall the form field should be, if possible. The field might be rendered as a text box with this many lines, depending on the device the Worker is using to see the form. Type: Integer Default: 1 |
No |
Note
A Qualification test that is to be graded automatically using an answer key cannot have any free-text questions. An answer key can only match multiple-choice questions and cannot match free-text fields.
The optional Constraints
element describes constraints on
the allowed values for the text field. If no constraints are specified, any value is
accepted for the field.
The Constraints
element includes the elements described in
the following table:
Name | Description | Required |
---|---|---|
|
Specifies that the value entered must be numeric. Type: empty element Default: None Attributes:
|
No |
|
Specifies the length range of the answer. Type: empty element Default: None Attributes:
|
No |
|
Specifies that JavaScript validates the answer string against a given pattern. NoteA limitation of this approach is that Workers who have disabled JavaScript on their browsers cannot validate their answers. Although this is uncommon, you might want to caution your Workers. Type: empty element Default: None Attributes:
|
No |
The Constraints
element can contain multiple AnswerFormatRegex
elements. All AnswerFormatRegex
constraints must be satisfied before the Worker
can submit the HIT.
The following examples demonstrate how to use the FreeTextAnswer
element.
If you want a 3-digit positive integer between 100 and 999, use the following:
<FreeTextAnswer> <Constraints> <IsNumeric minValue="100" maxValue="999"/> <Length minLength="3" maxLength="3"/> </Constraints> </FreeTextAnswer>
If you want a 3-digit number that includes decimals, use the following:
<FreeTextAnswer> <Constraints> <IsNumeric/> <Length minLength="3" maxLength="3"/> </Constraints> </FreeTextAnswer>
If you want to ensure that there is some text, use the following example. The
minLength
attribute includes whitespaces in the character
count.
<FreeTextAnswer> <Constraints> <Length minLength="2" /> <AnswerFormatRegex regex="\S" errorText="The content cannot be blank."/> </Constraints> </FreeTextAnswer>
If you specify the minLength
attribute, it is the same as
if the IsRequired
element is true
. If you want
to allow an optional string that must be at least two
characters, use the following:
<FreeTextAnswer> <Constraints> <AnswerFormatRegex regex="(^$|\S{2,})" errorText="You must enter at least two characters."/> </Constraints> </FreeTextAnswer>
To request a US phone number in the format 1-nnn-nnn-nnnn, where "1-" is optional, use the following:
<FreeTextAnswer> <Constraints> <AnswerFormatRegex regex="^(1[- ]?)?(\([2-9]\d{2}\)\s*|[2-9]\d{2}-?)[2-9]\d{2}-?\d{4}$)" errorText="You must enter a US phone number in the format 1-555-555-1234 or 555-555-1234."/> </Constraints> </FreeTextAnswer>
If you want an answer that contains a date formatted as yyyy-mm-dd, use the following:
<FreeTextAnswer> <Constraints> <AnswerFormatRegex regex="^[12][0-9]{3}-[01]?\d-[0-3]?\d$" errorText="You must enter a date with the format yyyy-mm-dd."/> </Constraints> </FreeTextAnswer>
If you want an answer that contains "regex" and variations including RegEx, REGex, and RegExes, use the following:
<FreeTextAnswer> <Constraints> <AnswerFormatRegex regex="regex" flags="i" errorText="You must enter 'regex'."/> </Constraints> </FreeTextAnswer>
SelectionAnswer
A SelectionAnswer
describes a multiple-choice question.
Depending on the element defined, the Worker might be able to select zero, one, or
multiple items from a set list as the answer to the question.
A SelectionAnswer
element includes the elements described
in the following table:
Name | Description | Required |
---|---|---|
|
Specifies the minimum number of selections allowed for a valid answer. This value can range from 0 to the number of selections. Type: non-negative Integer Default: 1 |
No |
|
Specifies the maximum number of selections allowed for a valid answer. This value can range from 1 to the number of selections. Type: positive Integer Default: 1 |
No |
|
Specifies what style of multiple-choice form field to use when displaying the question to the Worker. The field might not use the suggested style, depending on the device the Worker is using to see the form. Type: String Default: None Valid Values:
|
No |
|
Specifies the answer selections. Type: Default: None Child elements:
|
Yes |
The Selections
element lists the selection options
available. It contains one or more Selection
elements, one
for each possible answer in the set. The Selection
element
includes the elements described in the following table:
Name | Description | Required |
---|---|---|
|
A unique alphanumeric string that is in the answer data if this selection is chosen. Type: String Default: None |
Yes |
One of the following elements: |
Yes |
|
|
Contains the content of the selected item. Type: String Default: None |
|
|
A block of text formatted using XHTML tags that contains the content of the selected item. For more information about this format, see Formatted Content: XHTML. Type: String Default: None |
|
|
Contains the content of the selected item. Type: Default: None |
The following example shows a SelectionAnswer
element that
specifies a question with four radiobuttons.
<SelectionAnswer> <StyleSuggestion>radiobutton</StyleSuggestion> <Selections> <Selection> <SelectionIdentifier>C1</SelectionIdentifier> <Text>C1 (northeast)</Text> </Selection> <Selection> <SelectionIdentifier>C2</SelectionIdentifier> <Text>C2 (east)</Text> </Selection> <Selection> <SelectionIdentifier>A3</SelectionIdentifier> <Text>A3 (southwest)</Text> </Selection> <Selection> <SelectionIdentifier>C3</SelectionIdentifier> <Text>C3 (southeast)</Text> </Selection> </Selections> </SelectionAnswer>
FileUploadAnswer (Deprecated)
Important
Beginning Tuesday, December 12th 2017 the Answer Specification structure will no longer support the FileUploadAnswer
element to be used for the QuestionForm data structure. Instead,
we recommend that Requesters who want to create HITs asking Workers to upload
files use Amazon S3
A FileUploadAnswer
prompts the Worker to upload a file as
the answer to the question. When the Worker uploads the file, Amazon Mechanical Turk
stores the file separately from the answer data. Once the HIT is submitted, your
application can call the GetFileUploadURL
operation to get a
temporary URL it can use to download the file.
The FileUploadAnswer
specification contains two required
elements, a MinFileSizeInBytes
and a MaxFileSizeInBytes
, that specify the minimum and maximum allowed
file sizes respectively. If the Worker uploads a file whose size in bytes is outside
of this range, the answer is rejected, and the Worker must upload a different file
to complete the HIT. You can specify a maximum size up to 2000000000 (2 billion)
bytes.
Note
A FileUploadAnswer
element can only be used with
HITs. It cannot be used with Qualification tests.
The following example demonstrates a FileUploadAnswer
element that specifies a file with a minimum of 1000 bytes and a maximum of 3000000
bytes.
<FileUploadAnswer> <MaxFileSizeInBytes>3000000</MaxFileSizeInBytes> <MinFileSizeInBytes>1000</MinFileSizeInBytes> </FileUploadAnswer>
Example
The following is an example of a complete QuestionForm
data
structure. Remember that to pass this structure in as a value of a parameter to an
operation, XML characters must be escaped as character entities. (See Using XML Parameter Values for more information.)
<QuestionForm xmlns="
[the QuestionForm schema URL]
"> <Overview> <Title>Game 01523, "X" to play</Title> <Text> You are helping to decide the next move in a game of Tic-Tac-Toe. The board looks like this: </Text> <Binary> <MimeType> <Type>image</Type> <SubType>gif</SubType> </MimeType> <DataURL>http://tictactoe.amazon.com/game/01523/board.gif</DataURL> <AltText>The game board, with "X" to move.</AltText> </Binary> <Text> Player "X" has the next move. </Text> </Overview> <Question> <QuestionIdentifier>nextmove</QuestionIdentifier> <DisplayName>The Next Move</DisplayName> <IsRequired>true</IsRequired> <QuestionContent> <Text> What are the coordinates of the best move for player "X" in this game? </Text> </QuestionContent> <AnswerSpecification> <FreeTextAnswer> <Constraints> <Length minLength="2" maxLength="2" /> </Constraints> <DefaultText>C1</DefaultText> </FreeTextAnswer> </AnswerSpecification> </Question> <Question> <QuestionIdentifier>likelytowin</QuestionIdentifier> <DisplayName>The Next Move</DisplayName> <IsRequired>true</IsRequired> <QuestionContent> <Text> How likely is it that player "X" will win this game? </Text> </QuestionContent> <AnswerSpecification> <SelectionAnswer> <StyleSuggestion>radiobutton</StyleSuggestion> <Selections> <Selection> <SelectionIdentifier>notlikely</SelectionIdentifier> <Text>Not likely</Text> </Selection> <Selection> <SelectionIdentifier>unsure</SelectionIdentifier> <Text>It could go either way</Text> </Selection> <Selection> <SelectionIdentifier>likely</SelectionIdentifier> <Text>Likely</Text> </Selection> </Selections> </SelectionAnswer> </AnswerSpecification> </Question> </QuestionForm>