fixed irregularities with 1:1 relations

Esse commit está contido em:
Felipe Nascimento de Moura
2011-03-05 02:53:25 -03:00
commit 058d3aa0f1
10 arquivos alterados com 107 adições e 76 exclusões
+2 -2
Ver Arquivo
@@ -59,8 +59,8 @@ abstract class Normal {
* excluir a relação entre a mais forte e a mais fraca
* marcar a fk como pk
*/
//Analyst::unsetRelation(Analyst::$relations[$focus->rel.PROPERTY_SEPARATOR.$focus->name]);
//Analyst::$relations[$rel->name.PROPERTY_SEPARATOR.$focus->name]->uniqueRef= true;
Analyst::unsetRelation(Analyst::$relations[$rel->name.PROPERTY_SEPARATOR.$focus->name]);
Analyst::$relations[$focus->name.PROPERTY_SEPARATOR.$rel->name]->uniqueRef= true;
}
/**
+25 -17
Ver Arquivo
@@ -47,11 +47,16 @@
if(sizeof(self::$oneByOne) == 0)
return true;
reset(self::$oneByOne);
$rel= next(self::$oneByOne);
do
$rel= current(self::$oneByOne);
//do
//{
foreach(self::$oneByOne as &$rel)
{
$rel= &Analyst::$relations[$rel->name];
if(is_null($rel) || is_null($rel->focus) || is_null($rel->rel))
continue;
echo $rel->name.' - '.$rel->focus->name.' - '.$rel->rel->name."\n";
// defining the focus
$entities= self::setByRelevance($rel->focus, $rel->rel);
self::$focus= $entities[0];
@@ -63,21 +68,24 @@
// for 1:1 / 1:1 relations
self::mergeEntities(self::$focus, self::$predicate, $rel);
}elseif($rel->min== 0 && $rel->opposite->min == 0)
{
// for 0:1 / 0:1 relations
if(Analyst::isItWorthMerging(self::$predicate))
self::mergeEntities(self::$focus, self::$predicate, $rel);
else
self::fixOneByOneRelation(self::$focus,
self::$predicate,
$rel);
}else{
// for 0:1 / 1:1 relations
self::fixOneByOneRelation(self::$focus,
self::$predicate,
$rel);
}
}while($rel= next(self::$oneByOne));
{
// for 0:1 / 0:1 relations
if(Analyst::isItWorthMerging(self::$predicate))
{
self::mergeEntities(self::$focus, self::$predicate, $rel);
}else{
self::fixOneByOneRelation(self::$focus,
self::$predicate,
$rel);
}
}else{
// for 0:1 / 1:1 relations
self::fixOneByOneRelation(self::$focus,
self::$predicate,
$rel);
}
//}while($rel= next(self::$oneByOne));
}
}
/**
+17 -2
Ver Arquivo
@@ -8,6 +8,8 @@
*/
class Canonic{
public static $substantives= Array();
/**
* Takes a word to its canonic form(singular/male form)
* @param string$word
@@ -28,24 +30,37 @@ class Canonic{
*/
public function sweep()
{
self::$substantives= false;
self::$substantives= Array();
$content= Mind::$content;
$newContent= Array();
Mind::$tokenizer= new Tokenizer();
$ignoreForms= Mind::$currentProject['idiom'].'\IgnoreForms';
$verbalizer= Mind::$currentProject['idiom'].'\Verbalizer';
$posVerb= false;
foreach($content as $word)
{
if($ignoreForms::shouldBeIgnored($word))
continue;
if(!Tokenizer::isQualifier($word) && !Tokenizer::isQuantifier($word))
{
if(strlen($word) > 1 && ($isVerb= $verbalizer::isVerb($word)))
if( strlen($word) > 1
&&
!isset(self::$substantives[$word])
&&
($isVerb= $verbalizer::isVerb($word))
)
{
// is a verb
$word= $verbalizer::toInfinitive($word);
}
else{
// is a substantive
$word= explode(':', $word);
$word[0]= Canonic::canonize($word[0]);
self::$substantives[$word[0]]= true;
$word= implode(':', $word);
}
}
+3 -1
Ver Arquivo
@@ -36,8 +36,9 @@ class Token
const MT_QOF =1024;
const MS_QOF = 'C';
const MT_QBE =2048;
const MS_QBE = 'B';
const MT_QBRAKE = -4;
const MS_QBRAKE = 'B';
const MS_QBRAKE = 'b';
const MT_ANY =4096;
const MS_ANY = '*';
@@ -130,6 +131,7 @@ class Token
if(Tokenizer::isQualifier('be', $word))
{
self::$spine[]= Token::MT_QBE;
self::$string.= Token::MS_QBE;
return;
}
if(Tokenizer::isQualifier('key', $word))
@@ -70,7 +70,6 @@ class Shell
if (false === $command)
{
$this->output->writeln("\n");
break;
}
@@ -133,7 +132,6 @@ class Shell
protected function getHeader()
{
return <<<EOF
ZZZZZZZZZZZZZZZZZZZZZ
Welcome to the <info>{$this->application->getName()}</info> shell (<comment>{$this->application->getVersion()}</comment>).
At the prompt, type <comment>help</comment> for some help,
+2 -1
Ver Arquivo
@@ -38,7 +38,8 @@ class Verbalizer {
'/vo$/' => 'ver',
'/i$/' => 'er',
'/am$/' => 'ar',
'/ndo$/' => 'r',
'/ndo$/' => 'r',
'/(ado|ados|ada|adas)$/' => 'ar',
// these rules below are commented on theWebMind because
// we wont treat first person sentenses
/*'/o$/' => 'ar',
+4 -1
Ver Arquivo
@@ -6,4 +6,7 @@ aos
que
bem
também
tanto
tanto
somente
por
em
+1 -1
Ver Arquivo
@@ -11,7 +11,7 @@
<may>poder</may>
<notnull>obrigatório,not null,notnull,não nulo,requerido,required,necessário</notnull>
<of>de,do,da,dos,das</of>
<be>é,são,será,serão</be>
<be>é,são,será,serão,está,estar,estão,estarão,estará</be>
<key>chave,key,pk,indice,índice</key>
<coma>e,quanto</coma>
<unique>unico,único,isolado,isolada,isoladamente</unique>
+6
Ver Arquivo
@@ -1,4 +1,10 @@
SVS
SBVS
SQBVS
SQBVNONS
SQBVNS
SBVNONS
SBVNS
SQVS
SVNONS
SVNS
+47 -49
Ver Arquivo
@@ -1,53 +1,51 @@
// relacionamentos n/n
aluno tem vários professores e cada professor pode ter vários alunos.
tanto aluno quanto professor tem nome:varchar e idade:int.
/* // relacionamentos 1/1
pessoa tem um ou um registro e cada registro tem um ou uma pessoa.
pessoa pode ter vários clientes, mentores e fornecedores.
registro tem muitos endereços.
A universidade tem muitos alunos. Aluno tem nome:varchar, matrícula:int,
cpf:int e identidade:int, endereço:varchar,
telefone:int, data de nascimento:date, sexo:char, graduação:int.
Cada aluno pode estar matriculado em vários cursos sendo que cada curso pode ter muitos alunos matriculados.
Aluno também tem as disciplinas em que está matriculado, lembrando que cada disciplina terá diversos alunos inscritos.
registro tem uma id.
id tem um registro.
id tem codigo:int e nro:int.
registro tem data:date e descrição:text.
registro2 tem uma id2.
id2 tem um registro2.
id2 tem codigo2:int e nro2:int.
registro2 tem data2:date e descrição2:text.
registro3 tem um ou uma id3.
id3 tem nenhum ou um registro3.
id3 tem codigo3:int e nro3:int.
registro3 tem data3:date e descrição3:char(100).
pessoa tem nome:varchar(260), idade:int e sexo:char(1), sendo que registro terá
código do cadastro:int, observação:text, descrição:varchar(600).
*/
/*
armamento tem número de série:int(20, único), id:int(), peso do equipamento:int().
sogra e sogro tem um genro e nora.
professores tem muitos alunos.
radio tem \pilha.
sendo que cada registro tem uma pessoa.
pessoa pode ter um registro.
pessoa tem nome:varchar(256), idade:int e sexo:char().
Registro tem número do registro:varchar(20) e código:int.
//cada professor tem muitos alunos e todo aluno pode ter um ou vários professores.
comandante da tropa-militar tem armamentos.
armamento tem número de série:int(20, único), id:int(), peso do equipamento:int().
cada professor deve ter um ou vários alunos.
sogra e sogro tem um genro e nora.
sogra, sogro, genro e nora tem nome:varchar(200, obrigatório), idade:int e
sexo:char(1, {F=Feminino|M=Masculino}).
aluno tem foto:arquivo(xx)
cada mãe pode ter muitos alunos.
aluno tem um pai e mãe.
aluno tem nome:caractere(128, obrigatório, não nulo, "josé's da \"conceição\" machado")
pai usa \pilha.
tanto mãe quanto pai tem nome:varchar, idade:int e sexo:char(1, {F=Feminino|M=Masculino}).
professor também tem pai e mãe.
aluno pode ter divérsos irmãos.
Cada irmão pode ter filhos, e cada filho pode ter filho.
A grade de cadeiras terá várias disciplinas.
Algumas aplicações precisam se referenciar à cidade, estado e CEP do
endereço do estudante. Cada estudante pode ser identificado pelo
número de sua matrícula.
Cada departamento é descrito por um nome, um código, um telefone.
Tanto o nome como o código têm valores únicos para cada
departamento. Cada curso tem um nome, uma descrição, um código,
um número de horas de aula semestrais e um departamento
responsável. O valor do código é único para cada curso.
Cada disciplina tem um nome,um código,um número de horas-aula
semanais, e uma ou mais disciplinas como pré-requisito. O valor do
código e do nome é único para cada disciplina.
Para cada disciplina de um curso podem ser abertas uma ou mais turmas.
Cada turma é caracterizada por um código, o número do ano e do
semestre em que ela se realiza, o professor responsável, e o(s)
número(s) da(s) sala(s) que ela utiliza.
A universidade emprega professores e funcionários técnicoadministrativos. O funcionário tem uma matrícula que o identifica
dentro da universidade. Além disso devem ser guardados o nome,
endereço, sexo, documentos pessoais, telefone(s) de contato, nome e
data de nascimento dos seus dependentes, departamento ao qual está
vinculado e data de admissão. Um professor pode ministrar várias
disciplinas. Deve-se conhecer a capacitação do professor: congressos,
cursos de pós-graduação, cursos de extensão e trabalhos publicados.
Deve-se prover um relatório contendo a grade de avaliação dos alunos por
turma contendo as suas notas. Deve-se prover também o histórico
escolar contendo cada disciplina já cursada pelo aluno dentro de um
curso (com o ano,/semestre em que foi cursada e o resultado final).
*/