fixed irregularities with 1:1 relations
Esse commit está contido em:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -6,4 +6,7 @@ aos
|
||||
que
|
||||
bem
|
||||
também
|
||||
tanto
|
||||
tanto
|
||||
somente
|
||||
por
|
||||
em
|
||||
@@ -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>
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
SVS
|
||||
SBVS
|
||||
SQBVS
|
||||
SQBVNONS
|
||||
SQBVNS
|
||||
SBVNONS
|
||||
SBVNS
|
||||
SQVS
|
||||
SVNONS
|
||||
SVNS
|
||||
|
||||
@@ -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).
|
||||
*/
|
||||
Referência em uma Nova Issue
Bloquear um usuário