Capítulo 5 A Prova de Conceito
5.3 Aspectos da Manutenção dos Repositórios de Regras e de Ontologia
5.3.3 A Definição de Fatos
Além dos fatos que são criado automaticamente há os fatos que comporão as condições e ações das regras. Estes fatos poderão ser definidos isoladamente ou no instante de criação de regras. A Figura 5.5 mostra a seleção de modelo de fatos para definir um fato isoladamente e a Figura 5.6 mostra a mesma interface do Editor com alguns fatos já definidos.
Figura 5.6 - Editor de Fatos - Fatos definidos.
Neste ponto, é possível pesquisar por Serviços Web que realizem eventuais ações embutidas no fato em definição. Um clique no ícone “Pesquisa SW” e o Editor pesquisará no Mecanismo de Registro por URL de serviço Web para fazer o registro de Boletim de Ocorrência. Estes fatos são também acrescentados no Repositório de Regras conforme representação mostrada na Figura 5-7.
Figura 5.7 - Novos Fatos acrescentados pelo IDE.
Estes modelos em notação UML/MOF do sub-conjunto do vocabulário de identificação civil pode ser representado pelo trecho XML Schema mostrado na Tabela 5.7.
Tabela 5.7 - XML Schema do modelo UML/MOF para o vocabulário parcial de identificação civil.
<xsd:complexType name=“bo” > <xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”> <xsd:element name=“bo” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“branch” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“bo” type=“bo”/> <xsd:complexType name=“rg” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”> <xsd:element name=“rg” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“rg” type=“rg”/> <xsd:complexType name=“cidadao” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:element name=“cidadao” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“cidadao” type=“cidadao”/> <xsd:complexType name=“nome” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”> <xsd:element name=“nome” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“nome” type=“nome”/> <xsd:complexType name=“numero-rg” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”>
<xsd:element name=“numero-rg” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“numero-rg” type=“numero-rg”/> <xsd:complexType name=“numero-bo” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Instantiation”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”>
<xsd:element name=“numero-bo” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“numero-bo” type=“numero-bo”/> <xsd:complexType name=“cidadao-tem-nome” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Fact”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”>
<xsd:element name=“cidadao” type=“esbvr:Referent”/> <xsd:element name=“nome” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“cidadao” type=“xsd:IDREF” use=“optional”/> <xsd:attribute name=“nome” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“cidadao-tem-nome” type=“cidadao-tem-nome”/> <xsd:complexType name=“cidadao-tem-rg” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Fact”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”>
<xsd:element name=“cidadao” type=“esbvr:Referent”/> <xsd:element name=“rg” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“cidado” type=“xsd:IDREF” use=“optional”/> <xsd:attribute name=“rg” type=“xsd:IDREF” use=“optional”/> </xsd:extension>
</xsd:complexContent> </xsd:complexType>
<xsd:element name=“cidadao-tem-rg” type=“cidadao-tem-rg”/> <xsd:complexType name=“cidadao-perdeu-rg-e-registrou-bo” >
<xsd:complexContent >
<xsd:extension base=“esbvr:Fact”>
<xsd:choice minOccurs=“0” maxOccurs=“unbounded”> <xsd:element name=“cidadao” type=“esbvr:Referent”/> <xsd:element name=“rg” type=“esbvr:Referent”/> <xsd:element name=“bo” type=“esbvr:Referent”/> </xsd:choice>
<xsd:attribute name=“car” type=“xsd:IDREF” use=“optional”/>
<xsd:attribute name=“vehicle-identification-number” type=“xsd:IDREF” use=“optional”/> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name=“cidadao-perdeu-rg-e-registrou-bo” type=“cidadao-perdeu-rg-e-registrou-bo”/>
O trecho da Tabela 5.8 mostra como os fatos dos diagramas anteriores podem ser representados e validados pelo XML Schema produzido a partir do modelo UML/MOF, que por sua vez foi baseado no metamodelo SBVR.
Tabela 5.8 - Exemplo de fatos validados pelo XML Schema. <bo-tem-numero-bo bo="b" numero-bo="x"/>
<cidadão-tem-nome cidadão="c" nome="n"/> <cidadão-tem-rg cidadão="c" rg="r" /> <rg-tem-numero-rg rg="r" numero-rg="y"/> <cidadão-perdeu-rg-e-registrou-bo cidadão="c" rg="r" bo ="b"/> <rg-esta-cancelado rg="r"/> <esbvr:Thing xmi:id="b"/> <esbvr:Thing xmi:id="c"/> <esbvr:Thing xmi:id="r"/> <esbvr:Text xmi:id="x">123</esbvr:Text> <esbvr:Text xmi:id="n">José Silva</esbvrr:Text> <esbvr:Text xmi:id="y">987</esbvr:Text>