function createBaseTypes()
	{
		if ( $this->baseTypesLoaded ) return;

		$types = SchemaTypes::$xsTypes;

		// SchemaTypes are organized hierarchically
		$this->types = array_reduce( array_keys( SchemaTypes::$xsTypes ), function( $carry, $type ) use( $types ) {
			/** @var QName $qn */
			$qn = \lyquidity\xml\qname( $type, array( SCHEMA_PREFIX => SCHEMA_NAMESPACE ) );
			$typeNode = array(
				'parent' => isset( $types[ $type ] ) ? $types[ $type ] : null,
				'prefix' => $qn->prefix,
				'name' => $qn->localName,
			);
			$typeNode['numeric'] = $typeNode['name'] == 'double' || $typeNode['name'] == 'decimal' || $typeNode['name'] == 'float' || ( isset( $carry[ $typeNode['parent'] ]['numeric'] ) && $carry[ $typeNode['parent'] ]['numeric'] );
			$carry[ $type ] = $typeNode;
			return $carry;
		}, array() );

		$this->baseTypesLoaded = true;
	}