Child pages
  • Apply validation

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • The value of the score is a numeric such as score >= 0, 
  • The level is also a numeric such as  1 <= level <= 30 (there are 30 levels in your game),
  • The lives field is a numeric such as 0 <= lives <= 10 ,
  • The player's name only contains alphanumeric charactersis a string.

So let's go ahead and write a schema. We first start with the definition of the fields. Open the workbench as recommend in the preceding paragraph, then click "Manage App > Schemas >  New". The workbench opens an editor with a predefined schema template. Head to the "<fields>" section (we will get back later to the "<aclGroups>" section).

First step is to defined our fields, "score", "fields" and "lives" of type "numeric", and "player" of type "string"

Code Block
...
<fields>
	<field name="score" type="numeric"/>
	<field name="level" type="numeric"/>
	<field name="lives" type="numeric"/>
	<field name="player" type="string"/>
</fields>
...

That's cool. Now we know that documents based on this schema will contains the aforementioned fields.

Let move to the <aclGroups> section. We will not dive into it for now, just note that it is used to restrict the read/write access to your documents. For now, we will restrict read and write access on our document to the creator of that document (creator is a predefined role in Apstrata, automatically set to the user ). So this is how our final schema looks like:

Code Block
<schema>
	<aclGroups>		
		<aclGroup name="creator"> 
			<read>creator</read>
			<write>creator</write>
			<fields> <!-- the below fields are only accessible in read/write to the creator of the document -->
				<field>score</field>
				<field>level</field>
				<field>lives</field>
				<field>player</field>
			</fields>
		</aclGroup>
		<schemaAcl> <!-- nobody, except the application owner is entitled to read or modify the current schema -->
			<read>nobody</read>
			<write>nobody</write>
			<delete>nobody</delete>
		</schemaAcl>
	</aclGroups>
	<fields> <!-- Documents based on the current schema can contain the following fields -->
		<field name="score" type="numeric"/>
		<field name="level" type="numeric"/>
		<field name="lives" type="numeric"/>
		<field name="player" type="string"/>
</fields>
</schema>

Example 2: mandatory fields

But wait... how do we make these fields mandatory (i.e. we cannot save a game without a score)? That is simple: we just need to specify the minimum cardinality of the corresponding field:

...

Code Block
<fields>
	<field name="score" type="numeric">
		<validation>
				<cardinality min="1" max="1"/>
				<range min="0"/> <!-- The score cannot be less than 0 -->
		</validation>
	</field>
	<field name="level" type="numeric">
		<validation>
				<cardinality min="1" max="1"/>
				<range min="0" max="30" /> <!-- The level is a value between 0 and 30 -->
		</validation>
	</field>
	<field name="lives" type="numeric">
		<validation>
				<cardinality min="1" max="1"/>
				<range min="0" max="10" /> <!-- A player can have 0 from 10 lives -->
		</validation>
	</field>
	<field name="player" type="string">
		<validation>
				<cardinality min="1" max="1"/>
				<regex>^([a-zA-Z0-9@*#]{3,10})$</regex> <!-- The player's name is an alphanumeric string of 3 to 10 characters -->
		</validation>

	</field>
</fields>
  • The value of the score is a numeric such as score >= 0, 
  • The level is also a numeric such as  1 <= level <= 30 (there are 30 levels in your game)
  • The lives field is a numeric such as 0 <= lives <= 10 
  • The player's name only contains alphanumeric characters.