function bootstrapCollection( $collection, $languageId, $collectionType ) {
	$expression = findOrCreateExpression( $collection, $languageId );
	$definedMeaningId = addDefinedMeaning( $expression->id );
	$expression->assureIsBoundToDefinedMeaning( $definedMeaningId, true );
	addDefinedMeaningDefinition( $definedMeaningId, $languageId, $collection );
	return addCollection( $definedMeaningId, $collectionType );
}
function bootstrapDefinedMeaning( $spelling, $languageId, $definition ) {
	$expression = findOrCreateExpression( $spelling, $languageId );
	$definedMeaningId = createNewDefinedMeaning( $expression->id, $languageId, $definition );

	return $definedMeaningId;
}
	public function add( IdStack $idPath, $record ) {
		if ( $this->filterLanguageId == 0 ) {
			$expressionLanguageId = $record->expression->language;
		} else {
			$expressionLanguageId = $this->filterLanguageId;
		}

		$expressionMeanings = $record->expressionMeanings->expressionExactMeanings;

		if ( $expressionLanguageId != 0 && $expressionMeanings->getRecordCount() > 0 ) {
			$expressionMeaning = $expressionMeanings->getRecord( 0 );

			$definition = $expressionMeaning->definedMeaning->definition;
			$translatedContent = $definition->translatedText;
			
 			if ( $this->filterLanguageId == 0 ) {
				if ( $translatedContent->getRecordCount() > 0 ) {
					$definitionRecord = $translatedContent->getRecord( 0 );
	
					$text = $definitionRecord->text;
					$languageId = $definitionRecord->language;

					if ( $languageId != 0 && $text != "" ) {
						$expression = findOrCreateExpression( $this->spelling, $expressionLanguageId );
						createNewDefinedMeaning( $expression->id, $languageId, $text );
					}
				}
			}
			elseif ( $translatedContent != "" ) {
				$expression = findOrCreateExpression( $this->spelling, $expressionLanguageId );
				createNewDefinedMeaning( $expression->id, $this->filterLanguageId, $translatedContent );
			}
		}
	}
	public function getOrCreateMember( $internalMemberId, $spelling = "" ) {
		if ( isset( $this->collectionContents[$internalMemberId] ) )
			return $this->collectionContents[$internalMemberId];
		else {
			if ( $spelling == "" )
				$spelling = $internalMemberId;
			
			$expression = findOrCreateExpression( $spelling, $this->languageId );
			$definedMeaningId = createNewDefinedMeaning( $expression->id, $this->languageId, $spelling );
			addDefinedMeaningToCollection( $definedMeaningId, $this->collectionId, $internalMemberId );
			$this->collectionContents[$internalMemberId] = $definedMeaningId;
			
			return $definedMeaningId;
		}
	}
function importSNTypes( $collectionId, $query, $languageId ) {
	global
		$db;
	
	$queryResult = mysql_query( $query, $db );
	while ( $semanticNetworkType = mysql_fetch_object( $queryResult ) ) {
		$expressionText = $semanticNetworkType->semtypeab;
		$expressionText = strtolower( str_replace( "_", " ", $expressionText ) );
		$definedMeaningId = getDefinedMeaningFromCollection( $collectionId, $semanticNetworkType->semtypeab );
		$expression = findOrCreateExpression( $expressionText, $languageId );
		if ( !$definedMeaningId ) {
			$definedMeaningId = createNewDefinedMeaning( $expression->id, $languageId, $semanticNetworkType->definition );
			addDefinedMeaningToCollection( $definedMeaningId, $collectionId, $semanticNetworkType->semtypeab );
		}
	}
	
	mysql_free_result( $queryResult );
}
	/** Attempts to save defining expression if it does not exist "here"
	 * (This works right now because we override the datasetcontext in 
	 * SaveDM.php . dc should be handled more solidly) */
	protected function dupDefiningExpression() {

		$record = $this->getRecord();
		$expression = $record->expression;
		$spelling = $expression->definedMeaningDefiningExpression;
		$language = $expression->language;
		return findOrCreateExpression( $spelling, $language );
	}