% document \maketitle \include{./epigrafe} %% opcional \include{./agradecimentos} %% opcional %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % RESUMO %% obrigatório \begin{resumo} %% insira seu resumo abaixo \hypertarget{estilo:resumo}{} % Este relatório apresenta duas formas em que um identificador global pode ser criado para identificar e prover acesso consistente e perene a diversos tipos de itens de informação (documentos, mapas, imagens, etc.) armazenados em acervos como os encontrados em repositórios digitais, em arquivos, ou em outra entidade de informação. A implantação desse identificador global requer, de uma forma indireta, infraestrutura já existente e facilmente disponível da Internet. Portanto, sem custo adicional, quanto a este aspecto. Esse identificador global pode ser utilizado em associação com o processo de armazenamento de informação em acervos. O que também torna simples a criação de cópias em acervos distintos, incluindo a própria migração de itens de informação entre tais acervos. As diversas aplicações de um identificador global desta natureza são também de particular interesse para uso em sistemas de dados espaciais e de informação. Este relatório complementa um relatório anterior intitulado ``Identificador com base na Internet (IBI): Sistema de identificação''. O primeiro relatório apresentou duas formas em que um identificador global denominado IBI pode ser criado para identificar diversos tipos de itens de informação (documentos, mapas, imagens, etc.) armazenados em acervos como os encontrados em repositórios digitais, em Arquivos, ou em outra entidade de informação. Este segundo relatório introduz um sistema de resolução de URL persistentes para prover um acesso consistente e perene aos itens de informação, uma vez identificados por IBI. O modo de armazenamento dos itens de informação em Arquivos, que privilegia os conceitos de original e cópias, é descrito formalmente. O relatório ainda apresenta uma minilinguagem para definir ``modificadores'' de IBI que estendem os acessos a itens de informação relacionados como traduções, última edição ou metadados. Além dos navegadores utilizados pelos usuários, o sistema de resolução é constituído dos Arquivos que armazenam os itens de informação e de um resolvedor que intermedia a comunicação entre os navegadores e os Arquivos. A ênfase neste relatório é dada à concepção dos serviços de Arquivo voltados para a resolução de IBI, trazendo recomendações de como esses serviços devem ser construídos. \end{resumo} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ABSTRACT %% obrigatório \begin{abstract} %% insira abaixo seu abstract \selectlanguage{english} %% para os documentos em português com abstract.tex em inglês \hypertarget{estilo:abstract}{} % This report presents a procedure that leads to the creation of two versions of a global identifier which is intended, in a long term, to consistently and compactly identify and to provide a convenient access to various kinds of information items (documents, maps, images, etc.) which are typically stored in collections, as found in digital repositories, in archives, or elsewhere. The practical deployment of this global identifier conveniently and essentially solely requires, at no additional cost, the widely, already available infrastructure of the Internet. This global identifier can be used in combination with information storage systems which deal with collections and which, in this way, may enable remarkable simplicity in the processes dedicated to the creation of copies in different collections, also including simplicity in the migration of information items among such collections. In particular, a variety of convenient applications of a global identifier of this nature in space data and information systems are envisioned. This report complements an earlier report entitled ``Identificador com base na Internet (IBI): Sistema de identificação'' (Internet based identifier (IBI): identification system). The first report presented two ways in which a global identifier called IBI can be created to identify different types of information items (documents, maps, images, etc.) stored in collections like those found in digital repositories, Archives, or elsewhere. This second report introduces a system for the resolution of persistent URL to provide a consistent and enduring access to information items once identified by IBI. The storage model of the information items in Archive which privileges the concepts of original and copies, is formally described. The report also presents a mini-language to define IBI ``modifier'' that extend the access to related information items like translations, the latest edition or metadata. Besides the browsers used by the users, the resolution system consists of the Archives that store the information items and a resolver that facilitates the communication between browsers and Archives. The emphasis in this report is given to the design of the Archive services aimed at the IBI resolution, bringing recommendations of how these services should be built. \selectlanguage{portuguese} %% para os documentos em português com abstract.tex em inglês \end{abstract} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \includeListaFiguras %% obrigatório caso haja mais de 3 figuras, gerado automaticamente \includeListaTabelas %% obrigatório caso haja mais de 3 tabelas, gerado automaticamente \includeSumario %% obrigatório, gerado automaticamente %\include{./docs/abreviaturasesiglas} %% opcional, mas recomendado com mais de três%% para tese ou dissertação atualize o arquivo siglaseabreviaturas.tex e tire o comentário desta linha %\include{./docs/simbolos} %% opcional, mas recomendado com mais de três%% para tese ou dissertação atualize o arquivo simbolos.tex e tire o comentário desta linha %\end{comment} \inicioIntroducao %% não altere este comando %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% O corpo do texto começo aqui \hypertarget{estilo:capitulo}{} %% uso para este manual \chapter{Introdução} \label{chap:introducao} \section*{Objetivo} Num universo de objetos (chamado aqui de itens ou itens de informação), existe sempre o problema de como encontrá-los. Uma solução consiste em identificá-los (associando univocamente a cada um deles um nome ou rótulo) e manter junto a cada identificador de um item a informação de sua localização no universo. Num relatório anterior intitulado ``Identificador com base na Internet (IBI): Sistema de identificação'' \cite{Banon:2011:SiId}, foi apresentado as regras gramaticais e os algoritmos para criar o IBI de um item, isto é, torná-lo um item identificado. O presente relatório expõe as recomendações sobre um sistema de resolução de IBI que associa univocamente a cada IBI a localização do item identificado. Considerando os itens de informação acessíveis via Internet, o sistema de resolução retornará cópias digitais dos itens identificados. Neste aspecto, os sistemas de resolução e de identificação de IBI são mutualmente inversos. O modo de armazenamento dos itens de informação em Arquivos, que privilegia os conceitos de original e cópias, é descrito formalmente. O protocolo de comunicação entre o resolvedor, que recebe as solicitações de resolução de IBI, e os Arquivos que armazenam os itens de informação é apresentado, assim como os serviços desempenhados por estes. O relatório ainda apresenta uma minilinguagem para definir ``modificadores'' de IBI que extendem os acessos à item de informações relacionados como traduções, última edição ou metadados \begin{comment} Na Seção \ref{chap:descricao}, os componentes e os atores do sistema de resolução de IBI são apresentados. O modo de armazenamento dos itens de informação que privilegia os conceitos de original e copias é descrito formalmente. Na Seção \ref{chap:protocolo}, o formato das solicitações e respostas ... \end{comment} \section*{Justificativa} Parte-se do princípio que os hipervínculos (\textsl{hyperlinks}), ou simplesmente vínculos ou ponteiros, elementos essenciais na navegação entre itens de informação (documentos, mapas, imagens etc.), disponíveis na Internet, devem ter o seu funcionamento preservado por longo prazo. A solução para tornar os ponteiros persistentes consiste no uso combinado de um sistema de identificação global e um sistema de resolução associado. O sistema de endereçamento físico de um item de informação na Web por meio de uma URL (\textsl{Uniform Resource Locator}) não é um sistema de identificação persistente, pois, com o tempo, um determinado item de informação pode mudar de localização, fazendo com que a associação ``item de informação'' $\mapsto$ URL não fique permanente. Uma vez escolhido um sistema de identificação, e por meio dele atribuídos rótulos a itens de informação, o problema da construção de ponteiros persistentes pode ser solucionado com o uso de um sistema de resolução de identificador. O sistema de resolução deve ter o propósito básico de redirecionar cada URL persistente, agora contendo apenas o identificador de um item de informação, para a URL que, efetivamente, contém o seu endereço físico. O sistema de identificação descrito em \citeonline{Banon:2011:SiId} junto ao sistema de resolução descrito neste relatório, ambos extensivamente utilizados na plataforma UR{\slshape Lib}, o primeiro desde 1995 e o segundo desde 1998, apresenta-se como uma alternativa simples, quando comparadas a outras soluções como as usadas, por exemplo, no PURL \cite{WeibelJulShaf:2015:PeUnRe} ou no Handle System$^\circledR$ \cite{CNRI:2015:HaSyFu}. Na fase de identificação, a principal diferença do sistema, quando comparado ao PURL ou ao Handle System$^\circledR$, é que, enquanto estes têm um sistema próprio de cadastro de seus usuários, o sistema de identificação por IBI reaproveita indiretamente o sistema já existente de cadastro dos atores da Internet detentores de nomes de domínio (\textsl{fully qualified domain names}), portanto, sem custo adicional, nesse aspecto. Por distinguir entre os conceitos de original e cópias, o modo de armazenamento dos itens de informação em Arquivos do sistema para resolução de IBI, permite, mesmo em presença de cópias, autenticar \textsl{a posteriori} a posse de obras inéditas depositadas em Arquivos desse sistema, isto é, reconhecer \textsl{a posteriori} quem é o dono ou detentor dos direitos patrimoniais. Isto porque, em caso de um original ser reivindicado por mais de um dono ou detentor\footnote{O dono ou detentor de um original é o dono do Arquivo onde ele está armazenado.}, o sistema para resolução de IBI emite um alerta informando que existem dois ou mais Arquivos sob suspeita e que uma investigação é necessária para reconhecer o verdadeiro dono ou detentor (cf. Seção~\ref{sec:processoresolucao}). Quanto à autoria de uma obra inédita depositada em um Arquivo deste sistema, o modo de armazenamento permite que ela seja atestada \textsl{a posteriori} pelo dono do Arquivo que armazenou sua versão original. Finalmente, o uso de ``modificadores'' de IBI permite estabelecer, a partir de um mesmo IBI, acessos persistentes a itens de informação futuros, como novas traduções ou uma nova edição de um item de informação já existente. \begin{comment} No sistema de identificação por IBI, por exemplo, o acesso persistente a um item de informação localizado atualmente em: \begin{center} \scriptsize \texttt{http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/@relatorio.pdf} \end{center} será garantida por meio do uso de qualquer uma das duas URL persistentes: \begin{center}\texttt{http://urlib.net/LK47B6W/362SFKH}\end{center} \begin{center}\texttt{http://urlib.net/iconet.com.br/banon/2009/09.09.22.01}\end{center} onde \texttt{LK47B6W/362SFKH} e \texttt{iconet.com.br/banon/2009/09.09.22.01} são duas formas do IBI do item de informação considerado. \end{comment} \chapter{Terminologia} \label{chap:termimologia} Para os efeitos deste documento, aplicam-se os seguintes termos e definições. \textbf{Arquivo}: (com A maiúscula para diferenciar de arquivo de computador) componente do \textbf{sistema para resolução de IBI} que armazena \textbf{itens identificados}. % \textbf{DOI}$^\circledR$: sigla para \textsl{digital object identifier}, identificador digital de um objeto \cite{IDF:2014:DoHa}. \textbf{Chave de cadastro}: código de segurança próprio a um \textbf{Arquivo}, informado ao solicitar seu cadastro no \textbf{sistema para resolução de IBI}, usado nas comunicaçôes entre o \textbf{Arquivo} e o \textbf{resolvedor}. \textbf{Chave de URL}: código de segurança criado pelo \textbf{Arquivo} ao retornar a URL de acesso ao \textbf{item de informação} apontado por uma \textbf{URL persistente}, usado na comunicação entre o \textbf{resolvedor} e o \textbf{Arquivo}. \textbf{Estado}: atributo que define o estado de um \textbf{item identificado}, o qual assume o valor ``Original'', caso seja tido como original, ou ``Copy'', caso seja considerado cópia, ou ainda ``Deleted'' caso tenha sido removido. \textbf{IBI}: sigla para ``Identificador com Base na Internet''. Qualquer \textbf{rótulo} gerado pelo \textbf{sistema para geração de IBI}. % \textbf{IBI de um item}: \textbf{rótulo} atribuido a um \textbf{item} pelo \textbf{sistema para geração de IBI}, utilizando o endereçamento por nome de domínio ou IP. \textbf{IBIp}: qualquer \textbf{rótulo} gerado pelo \textbf{sistema para geração de IBI}, utilizando o endereçamento por IP. % \textbf{IBIp de um item}: \textbf{rótulo} atribuido a um \textbf{item} pelo \textbf{sistema para geração de IBI} utilizando o endereçamento por IP. % \textbf{Identificador com base na Internet}: qualquer \textbf{rótulo} gerado pelo \textbf{sistema para geração de IBI}. \textbf{Identificador de um item}: \textbf{rótulo} atribuido a um \textbf{item} por um \textbf{sistema de identificação}. \textbf{Item}: qualquer objeto a ser identificado. \textbf{Item de informação}: qualquer \textbf{item}, consistindo exclusivamente em dados digitais. Por exemplo: documentos, mapas, imagens, programas de computador, serviço web, etc. no formato digital. \textbf{Item identificado}: qualquer \textbf{item} identificado por \textbf{IBI}. \textbf{Modo de armazenamento}: maneira como estão armazenados os \textbf{itens identificados}. \textbf{Nome de repositório uniforme}: qualquer \textbf{rótulo} gerado pelo \textbf{sistema para geração de IBI}, utilizando o endereçamento por nome de domínio. % \textbf{Nome do repositório uniforme de um item}: \textbf{identificador de um item} podendo ser utilizado para armazená-lo digitalmente em um sistema de arquivos, caso este seja um \textbf{item de informação}. \textbf{Rótulo} atribuido a um \textbf{item} pelo \textbf{sistema para geração de IBI}, utilizando o endereçamento por nome de domínio. % \textbf{Original global}: \textbf{item identificado} tido como original do ponto de visto legal e sendo identificado por um \textbf{sistema de identificação} global (por exemplo os \textbf{sistemas de identificação} por \textbf{IBI} ou \textbf{DOI}$^\circledR$). \textbf{Resolvedor}: componente do \textbf{sistema para resolução de IBI} que recebe as \textbf{URL persistentes} e as redireciona para as URL que contêm as localizações físicas dos respectivos \textbf{itens de informação}. \textbf{Rótulo}: qualquer cadeia finita de caracteres escolhidos dentro de um alfabeto finito, que possa ser utilizada como \textbf{identificador de um item}. \textbf{Serviço de Arquivo}: serviço \textsl{Web} oferecido por um \textbf{Arquivo} ao \textbf{sistema para resolução de IBI} que, em cada \textbf{Arquivo}, é único, intransferível e identidificado por um \textbf{IBI}. \textbf{Serviço de resolvedor}: serviço \textsl{Web} oferecido pelo \textbf{resolvedor} ao \textbf{sistema para resolução de IBI} e identidificado pelo \textbf{IBI} \texttt{J8LNKB5R7W/3FUQHC5}. \textbf{Sistema de identificação}: qualquer função injetora entre um conjunto de \textbf{itens} e um conjunto de \textbf{rótulos}, que associa a cada \textbf{item} o \textbf{identificador deste item}. \textbf{Sistema de resolução}: qualquer função injetora entre um conjunto de \textbf{rótulos} (usados como \textbf{identificadores de itens}) e um conjunto de \textbf{itens}, que associa a cada \textbf{rótulo} o \textbf{item identificado} por este \textbf{rótulo}. %, usando um \textbf{sistema de identificação}. Em outras palavras, o \textbf{sistema de resolução} é a função inversa do \textbf{sistema de identificação}. \textbf{Sistema para geração de IBI}: \textbf{sistema de identificação} objeto do relatório por \citeonline{Banon:2011:SiId}. Inverso do \textbf{sistema para resolução de IBI}. \textbf{Sistema para resolução de IBI}: \textbf{sistema de resolução} objeto deste relatório. Inverso do \textbf{sistema para geração de IBI}. \textbf{URL}: sigla em inglês para \textsl{Uniform Resource Locator}. \textbf{URL persistente}: URL que dá acesso a um \textbf{item de informação}, independentemente de sua localização na \textsl{Web}. \chapter{Descrição do sistema para resolução de IBI} \label{chap:descricao} \section{Componentes e atores do sistema} \label{sec:componenteseatores} O \textbf{sistema para resolução de IBI} é composto por três tipos de componente: os navegadores, os \textbf{Arquivos} e o \textbf{resolvedor}, interligados entre si por meio da Internet; e dois tipos de atores: os usuários e os administradores, como mostrado na Figura~\ref{fig:componentesatores}. \begin{figure}[htbp] \caption{Componentes e atores do \textbf{Sistema para resolução de IBI}} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \tikzstyle{navegador} = [rectangle, draw, fill=yellow!20, text width=5em, text centered, minimum height=4em] \tikzstyle{resolvedor} = [rectangle, draw, fill=red!20, text width=5em, text centered, minimum height=4em] \tikzstyle{arquivo} = [rectangle, draw, fill=cyan!20, text width=5em, text centered, minimum height=4em] \tikzstyle{dashedline} = [draw, loosely dashed, thick] \tikzstyle{line} = [draw] \begin{tikzpicture}[node distance = 2cm, auto] \coordinate (a) at (4.2,7); \coordinate (b) at (4.2,0); \coordinate (c) at (7.6,0); \coordinate (d) at (7.6,7); \node [navegador] (1) at (2.5,6) {navegador}; \node [navegador] (2) at (2.5,1) {navegador}; \node [resolvedor] (3) at (5.9,3.6) {resolvedor}; \node [arquivo] (4) at (9.3,6) {Arquivo}; \node [arquivo] (5) at (9.3,4.2) {Arquivo}; \node [arquivo] (6) at (9.3,1) {Arquivo}; \draw[orange, ultra thick, rounded corners] (a) -- (b) node[anchor=north] at ($(b)!(3)!(c)$) {Internet} -- (c) -- (d); \umlactor[x=0, y=6]{usuário} \umlactor[x=0, y=1]{usuário} \umlactor[x=11.9, y=5.1]{administrador} \umlactor[x=11.9, y=1]{administrador} \coordinate (u1) at (0,6); \coordinate (u2) at (0,1); \coordinate (a1) at (11.9,5.1); \coordinate (a2) at (11.9,1); \coordinate (e1) at ($(1) + (0,0.12)$); % add some extra value for not cutting the first and last dash \path [dashedline] ($(e1)!0.3!(2)$) -- ($(1)!0.7!(2)$); \coordinate (e2) at ($(5) + (0,0.18)$); % add some extra value for not cutting the first and last dash \path [dashedline] ($(e2)!0.4!(6)$) -- ($(5)!0.6!(6)$); \draw[orange, thick] (1) -- ($(a)!(1)!(b)$); \draw[orange, thick] (2) -- ($(a)!(2)!(b)$); \draw[orange, thick] (3) -- ($(b)!(3)!(c)$); \draw[orange, thick] (4) -- ($(c)!(4)!(d)$); \draw[orange, thick] (5) -- ($(c)!(5)!(d)$); \draw[orange, thick] (6) -- ($(c)!(6)!(d)$); \path [line] ($(u1)!0.35!(1)$) -- (1); \path [line] ($(u2)!0.35!(2)$) -- (2); \path [line] ($(a1)!0.35!(4)$) -- (4); \path [line] ($(a1)!0.35!(5)$) -- (5); \path [line] ($(a2)!0.35!(6)$) -- (6); \end{tikzpicture} \end{center} \vspace{1mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Os navegadores, o resolvedor e os Arquivos são interligados por meio da Internet. Dois ou mais \textbf{Arquivos} podem ter o mesmo administrador.} % legenda - opcional \label{fig:componentesatores} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} Os navegadores são as interfaces entre os usuários e os outros componentes do \textbf{sistema para resolução de IBI}. Os \textbf{Arquivos} (com A maiúscula para diferenciar de arquivo de computador) são as entidades que armazenam os \textbf{itens identificados}, isto é, os \textbf{itens de informação} a serem encontrados com base nos seus \textbf{IBI}. Os \textbf{Arquivos} estão sob a responsabilidade do seus administradores. O \textbf{resolvedor} é a entidade que apenas intermedeia a comunicação entre os navegadores e os \textbf{Arquivos}. O \textbf{resolvedor} pode ou não armazenar a informação sobre a localização, na \textsl{Web}, dos \textbf{itens de informação}. No entanto, esta informação deve estar armazenada nos respectivos \textbf{Arquivos}. Os atores do \textbf{sistema para resolução de IBI} são os usuários do sistema e os administradores dos \textbf{Arquivos}. A Figura~\ref{fig:diagramadecasosdeuso} apresenta o \textbf{sistema para resolução de IBI} e seus atores por meio de um diagrama de casos de uso UML \cite{Guedes:2011:AbPr}\footnote{Nos diagramas UML deixa-se de usar o A maiúsculo na palavra \textbf{Arquivo}, reservando esta notação para representar a classe dos arquivos.}. % http://perso.ensta-paristech.fr/~kielbasi/tikzuml/index.php?id=doc \begin{figure}[htbp] \caption{Diagrama de casos de uso do \textbf{Sistema para resolução de IBI}} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \begin{umlsystem}[x=3.2, y=0, fill=red!10]{Sistema de resolução de IBI} \umlusecase[x=3.2, y=1.2, width=1.5cm]{Informar chave} \umlusecase[x=7.8, width=1.5cm]{Ligar arquivo} \umlusecase[x=7.8, y=-2.4, width=1.5cm]{Desligar arquivo} \umlusecase[x=3.2, y=-1.2, width=1.5cm]{Resolver IBI} \umlactor[y=-1.2]{usuário} \umlactor[x=11.6, y=-1.2]{administrador} \umlextend[name=extend]{usecase-1}{usecase-2} \umlassoc{administrador}{usecase-2} \umlassoc{administrador}{usecase-3} \umlassoc{usuário}{usecase-4} \umlnote[x=10.6, y=1.8, width=3.5cm]{extend-1}{caso o arquivo não esteja cadastrado} \end{umlsystem} \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Os quatro casos de uso e seus atores.} % legenda - opcional \label{fig:diagramadecasosdeuso} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} Os usuários do sistema são os atores que solicitam a resolução de \textbf{IBI}. Os administradores de \textbf{Arquivos} são os atores que os ligam no momento de participar do \textbf{sistema para resolução de IBI} e os desligam em caso de manutenção ou de afastamento definitivo do sistema. Um administrador pode ser responsável por mais de um \textbf{Arquivo}. Se o \textbf{Arquivo} ainda não estiver cadastrado no \textbf{sistema para resolução de IBI}, antes de ligar o \textbf{Arquivo}, o seu administrador deverá informar uma chave de cadastro (cf. detalhes na Seção \ref{sec:cadastrar}). A hospedagem dos Arquivos em servidores distintos permite que administradores independentes participem do processo de resolução. \section{Itens originais e cópias} \label{itensoriginaisecopias} Um Arquivo pode armazenar um número qualquer de itens identificados, mas não pode armazenar dois itens identificados com o mesmo IBI. Nos Arquivos, distingue-se dois tipos de item identificado: os originais e as cópias. Como qualquer \textbf{item}, os \textbf{itens de informação} podem ser reproduzidos por meio de cópias. No \textbf{sistema para resolução de IBI}, os \textbf{itens identificados}, considerados cópias de um determinado \textbf{item identificado} tido como original, mantêm o \textbf{IBI} do original. Além disso, enquanto o original deve pertencer a (ou estar armazenado em) apenas um único \textbf{Arquivo}, eventuais cópias de um mesmo original podem pertencer a (ou estar armazenadas em) mais de um \textbf{Arquivo}. Essa configuração está ilustrada na Figura~\ref{fig:diagramadeclasses} na forma de um diagrama de classes UML \cite{Guedes:2011:AbPr}, na qual se destacam três classes e suas associações. \mbox{\textbf{ItemIdentificadoOriginal}} é a classe dos \textbf{itens identificados} tidos como originais; \textbf{ItemIdentificadoCópia}, a classe dos \textbf{itens identificados} considerados cópias de alguns originais; e \textbf{Arquivo}, a classe dos \textbf{Arquivos}. \begin{comment} % https://www.sharelatex.com/learn/TikZ_package \begin{figure}[htbp] \caption{Diagrama de classes} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura % \begin{center} \begin{tikzpicture} % \small \footnotesize \coordinate (a) at (0,0); % ItemIdentificadoOriginal % \coordinate (b) at (0,-3); % ItemIdentificadoCópia \coordinate (b) at (0,-2.4); % ItemIdentificadoCópia %% \coordinate (c) at (10,-0.66); % Arquivo % \coordinate (c) at (10,-0.46); % Arquivo \coordinate (c) at (10,-0.16); % Arquivo \begin{class}[text width=4.7cm]{ItemIdentificadoOriginal}{a} \attribute{- itemibi} % \attribute{archiveserviceibi} \end{class} \begin{class}[text width=4.7cm]{ItemIdentificadoCópia}{b} \attribute{- itemibi} % \attribute{archiveserviceibi} \end{class} \begin{class}[text width=4.7cm]{Arquivo}{c} \attribute{\# archiveaddress} \attribute{\# archiveserviceibi} \attribute{\# archiveip} \attribute{\# archiveprotocol} \attribute{\# archiveplatformversion} \attribute{\# archiveadmemailaddress} \end{class} \association{ItemIdentificadoOriginal}{contém}{0..*}{Arquivo}{}{pertence} % \aggregation {ItemIdentificadoOriginal}{}{}{Arquivo} \association{ItemIdentificadoCópia}{contém}{0..*}{Arquivo}{1..*}{pertence} \association{ItemIdentificadoOriginal}{}{}{ItemIdentificadoCópia}{}{} \coordinate (d) at ($(ItemIdentificadoOriginal)!0.5!(ItemIdentificadoCópia)$); %% \draw ($(d) + (0.7,0.5)$) node {possui}; %% \draw ($(d) + (-0.7,-0.5)$) node {possui}; %% \draw ($(d) + (0.5,-0.44)$) node {0..*}; % \draw ($(d) + (0.7,0.7)$) node {possui}; % \draw ($(d) + (-0.7,-0.7)$) node {possui}; % \draw ($(d) + (0.5,-0.64)$) node {0..*}; \draw ($(d) + (0.7,0.4)$) node {possui}; \draw ($(d) + (-0.7,-0.4)$) node {possui}; \draw ($(d) + (0.5,-0.34)$) node {0..*}; % \coordinate (e) at ($(d)+(4.7,0)$); % Note % \draw[purple, dashed] (e) -- ($(ItemIdentificadoOriginal)!(e)!(Arquivo)$); % \draw[purple, dashed] (e) -- ($(ItemIdentificadoCópia)!(e)!(Arquivo)$); %% \filldraw[color=purple, fill=yellow!20]($(e) + (-0.5,0.3)$) -- ($(e) + (0.5,0.3) - (0.2,0)$) -- ($(e) + (0.5,0.3) - (0,0.2)$) -- ($(e) + (0.5,-0.3)$) -- ($(e) + (-0.5,-0.3)$) -- cycle; %% \filldraw[color=purple, fill=yellow!40!black!60, ultra thin]($(e) + (0.5,0.3) - (0.2,0)$) -- ($(e) + (0.5,0.3) - (0.2,0.2)$) -- ($(e) + (0.5,0.3) - (0,0.2)$) -- cycle; % \filldraw[color=purple, fill=yellow!20]($(e) + (-0.6,0.3)$) -- ($(e) + (0.6,0.3) - (0.2,0)$) -- ($(e) + (0.6,0.3) - (0,0.2)$) -- ($(e) + (0.6,-0.3)$) -- ($(e) + (-0.6,-0.3)$) -- cycle; % \filldraw[color=purple, fill=yellow!40!black!60, ultra thin]($(e) + (0.6,0.3) - (0.2,0)$) -- ($(e) + (0.6,0.3) - (0.2,0.2)$) -- ($(e) + (0.6,0.3) - (0,0.2)$) -- cycle; % \draw (e) node {\hspace{-2mm}\{ou\}$^1$}; %%% \fill [red] ($(ItemIdentificadoOriginal)!0.5!(ItemIdentificadoCópia)+(0,0)$) circle (2pt); \end{tikzpicture} % \end{center} \vspace{1mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{% As três classes e suas associações. % $^1$A restrição ``ou'' exclusivo aplica-se somente a objetos possuindo o mesmo IBI. } % legenda - opcional \label{fig:diagramadeclasses} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} \begin{figure}[htbp] \caption{Diagrama de classes} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \umlclass[x=-4.6, y=0, width=5.4cm]{ItemIdentificadoOriginal}{- itemibi}{} \umlclass[x=-4.6, y=-3.4, width=5.4cm]{ItemIdentificadoCópia}{- itemibi}{} \umlclass[x=4.6, y=-1.7, width=5.4cm]{Arquivo}{\# archiveaddress \\ \# archiveserviceibi \\ \# archiveip \\ \# archiveprotocol \\ \# archiveplatformversion \\ \# archiveadmemailaddress}{} \umlHVassoc[attr1=contém|0..*, pos1=0.13, attr2=|pertence, pos2=0.43, name=assoc1]{ItemIdentificadoOriginal}{Arquivo} \umlHVassoc[attr1=contém|0..*, pos1=0.13, attr2=1..*|pertence, pos2=0.43, name=assoc2]{ItemIdentificadoCópia}{Arquivo} \umlVHassoc[attr1= possui|, pos1=0.13, attr2=0..*|possui, pos2=0.48]{ItemIdentificadoOriginal}{ItemIdentificadoCópia} \end{tikzpicture} \end{center} \vspace{1mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{As três classes e suas associações.} % legenda - opcional \label{fig:diagramadeclasses-} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} \end{comment} % http://perso.ensta-paristech.fr/~kielbasi/tikzuml/index.php?id=doc \begin{figure}[htbp] \caption{Diagrama de classes} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \umlclass[x=-4.6, y=0, width=5.4cm]{ItemIdentificadoOriginal}{- itemibi}{} \path let \p1 = (ItemIdentificadoOriginal) in coordinate (segundaExtremidadeOriginal) at (-\x1,\y1); \draw[purple] (ItemIdentificadoOriginal) -- (segundaExtremidadeOriginal); \umlclass[x=-4.6, y=-3.4, width=5.4cm]{ItemIdentificadoCópia}{- itemibi}{} \path let \p1 = (ItemIdentificadoCópia) in coordinate (segundaExtremidadeCópia) at (-\x1,\y1); \draw[purple] (ItemIdentificadoCópia) -- (segundaExtremidadeCópia); \umlclass[x=4.6, y=-1.7, width=5.4cm]{Arquivo}{\# archiveaddress \\ \# archiveserviceibi \\ \# archiveip \\ \# archiveprotocol \\ \# archiveplatformversion \\ \# archiveadmemailaddress}{} % \umlHVassoc[attr1=contém|0..*, pos1=0.13, attr2=|pertence, pos2=0.43, name=assoc1]{ItemIdentificadoOriginal}{Arquivo} % \umlHVassoc[attr1=contém|0..*, pos1=0.13, attr2=1..*|pertence, pos2=0.43, name=assoc2]{ItemIdentificadoCópia}{Arquivo} \umlVHassoc[attr1= |possui, pos1=0.13, attr2=0..*|possui, pos2=0.48]{ItemIdentificadoOriginal}{ItemIdentificadoCópia} % \draw[purple] (ItemIdentificadoOriginal) -- (Arquivo); % \draw[purple] (ItemIdentificadoCópia) -- (Arquivo); \coordinate (d) at ($(ItemIdentificadoOriginal)!0.5!(ItemIdentificadoCópia)$); \draw[purple] ($(d) + (3.52,2.02)$) node {\small contém}; \draw[purple] ($(d) + (3.52,1.44)$) node {\small 0..*}; \draw[purple] ($(d) + (3.52,0.94)$) node {\small \{único\}}; \draw[purple] ($(d) + (5.66,1.97)$) node {\small pertence}; \draw[purple] ($(d) + (3.52,-1.35)$) node {\small contém}; \draw[purple] ($(d) + (3.52,-1.93)$) node {\small 0..*}; \draw[purple] ($(d) + (3.52,-2.43)$) node {\small \{único\}}; \draw[purple] ($(d) + (5.66,-1.40)$) node {\small pertence}; \draw[purple] ($(d) + (5.66,-1.93)$) node {\small 1..*}; \coordinate (e) at ($(d)+(4.7,0)$); % Note % \draw[purple, dashed] (e) -- ($(ItemIdentificadoOriginal)!(e)!(Arquivo)$); \draw[purple, dashed] (e) -- ($(ItemIdentificadoOriginal)!(e)!(segundaExtremidadeOriginal)$); % \draw[purple, dashed] (e) -- ($(ItemIdentificadoCópia)!(e)!(Arquivo)$); \draw[purple, dashed] (e) -- ($(ItemIdentificadoCópia)!(e)!(segundaExtremidadeCópia)$); \coordinate (1) at ($(e) + (-0.9,0.6)$); \coordinate (2) at ($(e) + (0.9,0.6) - (0.3,0)$); \coordinate (3) at ($(e) + (0.9,0.6) - (0,0.3)$); \coordinate (4) at ($(e) + (0.9,-0.6)$); \coordinate (5) at ($(e) + (-0.9,-0.6)$); \coordinate (6) at ($(e) + (0.9,0.6) - (0.3,0.3)$); \filldraw[color=purple, fill=green!20](1) -- (2) -- (3) -- (4) -- (5) -- cycle; \filldraw[color=purple, fill=green!20, rounded corners=0.2pt](2) -- (6) -- (3) -- cycle; \draw (e) node {\hspace{-2mm}\{ou\}$^1$}; \end{tikzpicture} \end{center} \vspace{1mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{% As três classes e suas associações. \\ $^1$A restrição ``ou'' (exclusivo) é relativa à associação ``contém'' e aplica-se somente aos \textbf{itens de informação} possuindo o mesmo \textbf{IBI}. } % legenda - opcional \label{fig:diagramadeclasses} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} A associação ``pertence'', que liga as classes \textbf{ItemIdentificadoOriginal} e \textbf{Arquivo}, indica que cada \textbf{item identificado} tido como original pertence a um único \textbf{Arquivo}. Quanto à associação ``contém'', ela indica que cada \textbf{Arquivo} pode conter zero ou mais \textbf{itens identificados} tidos como originais, desde que apenas um seja identificado pelo mesmo \textbf{IBI} (cf. a primeira restrição \{único\} na Figura~\ref{fig:diagramadeclasses}). % desde que dois deles não sejam identificados pelo mesmo \textbf{IBI} A associação ``pertence'', que liga as classes \textbf{ItemIdentificadoCópia} e \textbf{Arquivo}, indica que cada \textbf{item identificado} considerado cópia pertence a um ou mais \textbf{Arquivos}. Quanto à associação ``contém'', ela indica que cada \textbf{Arquivo} pode conter zero ou mais \textbf{itens identificados} considerados cópias, desde que não haja dois \textbf{itens identificados} com o mesmo \textbf{IBI} (cf. a segunda restrição \{único\} na Figura~\ref{fig:diagramadeclasses}). % A nota em verde, na Figura~\ref{fig:diagramadeclasses}, indica que cada \textbf{Arquivo} deve conter apenas um \textbf{item identificado} com o mesmo \textbf{IBI}, seja ele considerado original ou cópia. A nota em verde, na Figura~\ref{fig:diagramadeclasses}, indica que, se um \textbf{Arquivo} contiver um \textbf{item identificado} tido como original, então ele não poderá conter um \textbf{item identificado} considerado cópia e possuindo o mesmo \textbf{IBI}, e vice-versa. Em consequência disto, as associações ``possui'' entre as classes \textbf{ItemIdentificadoOriginal} e \textbf{ItemIdentificadoCópia} indicam que um \textbf{item identificado} tido como original pode possuir zero ou mais \textbf{itens identificados} considerados cópias, e que cada \textbf{item identificado} considerado cópia possui um (e apenas um) \textbf{item identificado} tido como original (cf. Proposição \ref{pro:propriedadecopia} sobre esta última asserção). \begin{comment} A associação ``contém'' que liga as classes \textbf{ItemIdentificadoOriginal} e \textbf{Arquivo} indica que cada \textbf{Arquivo} pode conter um número qualquer de \textbf{itens identificados} tidos como original desde que dois deles não sejam identificados pelo mesmo \textbf{IBI} (cf. a primeira restrição \{único\} na Figura~\ref{fig:diagramadeclasses}). Da mesma forma, a associação ``contém'' que liga as classes \textbf{ItemIdentificadoCópia} e \textbf{Arquivo} indica que \textbf{Arquivo} pode conter um número qualquer de \textbf{itens identificados} considerados cópias desde que dois deles não sejam identificados pelo mesmo \textbf{IBI} (cf. a segunda restrição \{único\} na Figura~\ref{fig:diagramadeclasses}). A nota em verde, na Figura~\ref{fig:diagramadeclasses}, indica que cada \textbf{Arquivo} deve conter apenas um \textbf{item identificado} com o mesmo \textbf{IBI}, seja ele considerado original ou cópia. \end{comment} \begin{comment} A associação ``pertence'' que liga as classes \textbf{ItemIdentificadoOriginal} e \textbf{Arquivo} indica que cada \textbf{item identificado} tido como original pertence a um único \textbf{Arquivo}. A associação ``pertence'' que liga as classes \textbf{ItemIdentificadoCópia} e \textbf{Arquivo} indica que cada \textbf{item identificado} considerado cópia pertence a um ou mais \textbf{Arquivos}. A restrição \{ou\} indica que um \textbf{Arquivo} contém apenas um \textbf{item identificado} com o mesmo IBI. Em consequência disto, as associações ``possui'' entre as classes \textbf{ItemIdentificadoOriginal} e \textbf{ItemIdentificadoCópia} indicam que um \textbf{item identificado} tido como original pode possuir ou não \textbf{itens identificados} consideradas cópias e que cada \textbf{item identificado} considerada cópia possui um único \textbf{item identificado} tido como original. A associação ``pertence'' que liga as classes \textbf{ItemIdentificadoOriginal} e \textbf{Arquivo} indica que cada \textbf{item identificado} cujo \textbf{estado} é ``Original'' pertence a um único \textbf{Arquivo}. A associação ``pertence'' que liga as classes \textbf{ItemIdentificadoCópia} e \textbf{Arquivo} indica que cada \textbf{item identificado} cujo \textbf{estado} é ``Copy'' pertence a um ou mais \textbf{Arquivos}. A restrição \{ou\} indica que um \textbf{Arquivo} contém apenas \textbf{item identificado} cujo \textbf{estado} é ``Original'' ou (exclusivo) ``Copy''. Em consequência disto, a associação ``possui'' entre as classes \textbf{ItemIdentificadoOriginal} e \textbf{ItemIdentificadoCópia} indica que um \textbf{item identificado} cujo \textbf{estado} é ``Original'' pode possuir ou não \textbf{itens identificados} cujos \textbf{estados} são ``Copy'' e que cada \textbf{item identificado} cujo \textbf{estado} é ``Copy'' possui um único \textbf{item identificado} cujo \textbf{estado} é ``Original''. \end{comment} Um \textbf{item identificado} deve ser considerado somente original ou cópia (completude)\footnote{Desconsideram-se aqui os \textbf{itens identificados} tido como originais que foram removidos (\textsl{deleted}).}, mas não pode ser considerado as duas coisas juntas (separabilidade). Com estas propriedades, tem-se o conceito de classe-mãe \textbf{ItemIdentificado}, como mostrado na Figura~\ref{fig:classemae}. Nesta classe, aparecem o atributo ``archiveserviceibi'', que especifica em que \textbf{Arquivo} está armazenado um determinado \textbf{item identificado}, o atributo ``itemibi'', que informa o \textbf{IBI} do \textbf{item identificado}, e o atributo ``state'', que assumirá o valor ``Original'', se o \textbf{item identificado} for tido como original, ou o valor ``Copy'', se for considerado cópia. \begin{comment} Admitindo que o \textbf{estado} de um \textbf{item identificado} pode ser somente ``Original'' ou ``Copy'' (completude) e que não pode ser considerado as duas coisas juntas (separabilidade), leva ao conceito de classe-mãe \textbf{ItemIdentificado} como mostrada na Figura~\ref{fig:classemae}. Nessa classe aparece o atributo ``archiveserviceibi'' herdado da classe \textbf{Arquive} e o atributo ``state'' que, para um determinado objeto, assume o valor ``Original'' caso se trata de um \textbf{item identificado} condiderado original ou o valor ``Copy'' caso se trata de uma cópia. \end{comment} \begin{comment} \begin{figure}[htbp] \caption{Classe \textbf{ItemIdentificado} como classe-mãe} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} % \small \footnotesize \coordinate (a) at (0,0); % ItemIdentificado \coordinate (b) at ($(a) + (-3,-3.6)$); % ItemIdentificadoOriginal \coordinate (c) at ($(a) + (3,-3.6)$); % ItemIdentificadoCópia % \coordinate (b) at ($(a) + (-3,-3)$); % ItemIdentificadoOriginal % \coordinate (c) at ($(a) + (3,-3)$); % ItemIdentificadoCópia \begin{class}[text width=4.7cm]{ItemIdentificado}{a} \attribute{\# archiveserviceibi} \attribute{$-$ itemibi} \attribute{$-$ state} \end{class} \begin{class}[text width=4.7cm]{ItemIdentificadoOriginal}{b} \end{class} \begin{class}[text width=4.7cm]{ItemIdentificadoCópia}{c} \end{class} \coordinate (d) at ($(ItemIdentificadoOriginal)!0.5!(ItemIdentificadoCópia)$); \coordinate (e) at ($(d)!0.24!(ItemIdentificado)$); \draw[purple,arrows = -{Triangle[open, angle=40:4mm]}] (e) -- (ItemIdentificado); \draw[purple] (node cs:name=ItemIdentificadoOriginal,anchor=north) |- (e); \draw[purple] (node cs:name=ItemIdentificadoCópia,anchor=north) |- (e); \draw ($(e) + (2.0,0.6)$) node {\{Separada, Completa\}}; \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Os objetos da classe-mãe se diferenciam uns dos outros por meio de três atributos. O atributo ``archiveserviceibi'' indica em qual \textbf{Arquivo} o \textbf{item identificado} pertence. O atributo ``itemibi'' informa o \textbf{IBI} do \textbf{item identificado}. Finalmente, o atributo ``state'' separa os \textbf{itens identificados} tidos como originais dos considerados cópias.} % legenda - opcional \label{fig:classemae} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} \end{comment} \begin{figure}[htbp] \caption{Classe \textbf{ItemIdentificado} como classe-mãe} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} % \small % \footnotesize \umlclass[width=5.4cm]{ItemIdentificado}{\# archiveserviceibi \\ $-$ itemibi \\ $-$ state}{} \umlemptyclass[x=-3, y=-3.4, width=5.4cm]{ItemIdentificadoOriginal} \umlemptyclass[x=3, y=-3.4, width=5.4cm]{ItemIdentificadoCópia} \umlVHVinherit[arm2=-2.3cm]{ItemIdentificadoOriginal}{ItemIdentificado} \umlVHVinherit[mult={\{Separada, Completa\}}, pos=2.5, arm2=-2.3cm]{ItemIdentificadoCópia}{ItemIdentificado} \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Os \textbf{itens identificados} da classe-mãe diferenciam-se uns dos outros por meio de três atributos. O atributo ``archiveserviceibi'' fornece o \textbf{IBI} do \textbf{Serviço de Arquivo} do \textbf{Arquivo} onde o \textbf{item identificado} está armazenado; o atributo ``itemibi'' informa seu \textbf{IBI}; e o atributo ``state'' especifica seu \textbf{estado}.} % legenda - opcional \label{fig:classemae} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} % \vspace{-6mm} Os conceitos apresentados acima em termo de classes, descrevendo como são armazenados os \textbf{itens identificados}, podem ser transpostos em termos matemáticos. Os \textbf{itens identificados}, armazenados em \textbf{Arquivos} e em determinados \textbf{estados}, são caracterizados pelos seus \textbf{IBI} (``itemibi''), pelos \textbf{Arquivos} onde estão armazenados (``archiveserviceibi'') e por seus \textbf{estados} (``state''), os quais satisfazem uma relação terceira como apresentado na definição a seguir. \begin{definition}[modo de armazenamento] \label{def:modoarmazenamento} Considera-se os conjuntos a seguir. \renewcommand{\baselinestretch}{1.0} \normalsize \begin{description} \item[] Seja $I$ o conjunto dos \textbf{itens identificados}. \item[] Seja $A$ o conjunto dos \textbf{Arquivos} que armazenam os \textbf{itens identificados}. \item[] Seja $S$ o conjunto \{Original, Copy\} de \textbf{estados} definindo a genuinidade dos \textbf{itens identificados}. \end{description} O \textbf{modo de armazenamento} é a relação terceira $R$ definida como o quadrupleto $(I, A, S, G)$ onde $G$ (o grafo de $R$) satisfaz as seguintes propriedades: \begin{description} \item[1.] Para todo $i \in I$, $a_1$ e $a_2 \in A$ tem-se: \begin{equation*} (i, a_1, \text{Original}) \in G \text{ e } (i, a_2, \text{Original}) \in G \Rightarrow a_1 = a_2 \end{equation*} isto é, o original de um \textbf{item identificado} está armazenado em um único arquivo. \item[2.] Para todo $i \in I$, existe um $a \in A$ tal que $(i, a, \text{Original}) \in G$ isto é, há sempre um \textbf{Arquivo} para armazenar qualquer \textbf{item identificado} tido como original. \end{description} $(i, a, s) \in G$ é lido ``$i$ está armazenado em $a$ como $s$''. \qed \end{definition} \vspace{10mm} Com base na Definição \ref{def:modoarmazenamento}, pode-se enunciar uma proposição estabelecendo uma propriedade da relação binária $R_\text{Original}$ definida como tripleto $(I, A, G_\text{Original})$, cujo grafo é o conjunto $G_\text{Original} \triangleq \{(i, a) \in I \times A : (i, a, \text{Original}) \in G\}$. \begin{proposition}[propriedades da relação entre originais e Arquivos] \label{pro:originaisxarquivos} A relação binária $R_\text{Original}$ é uma relação: % \begin{description} % \item[1.] Funcional, isto, é, para todo $i \in I$, $a_1$ e $a_2 \in A$ tem-se: 1. Funcional, isto, é, para todo $i \in I$, $a_1$ e $a_2 \in A$ tem-se: \begin{equation*} (i, a_1) \in G_\text{Original} \text{ e } (i, a_2) \in G_\text{Original} \Rightarrow a_1 = a_2; \end{equation*} % \item[2.] Esquerda-total, isto é, para todo $i \in I$, existe um $a \in A$ tal que $(i, a) \in G_\text{Original}.$ 2. Esquerda-total, isto é, para todo $i \in I$, existe um $a \in A$ tal que $(i, a) \in G_\text{Original}.$ % \end{description} \qed \end{proposition} %\vspace{-16mm} \begin{proof}[Prova] A proposição é uma consequência direta das Propriedades 1 e 2 da Definição \ref{def:modoarmazenamento}, observando que para todo $i \in I$ e $a \in A$ tem-se: \begin{equation*} (i, a, \text{Original}) \in G \Leftrightarrow (i, a) \in G_\text{Original} \end{equation*} \end{proof} %\vspace{-16mm} Em outros termos, o grafo de $R_\text{Original}$ é um grafo-de-um-mapeamento \cite{Banon:2000:FoInDi}: para todo $i \in I$, existe um único $a \in A$ tal que $(i, a) \in G_\text{Original}$. Isto é, todo \textbf{item identificado} tido como original está armazenado em um único \textbf{Arquivo}. Com base na Proposição~\ref{pro:originaisxarquivos} pode-se estabelecer propriedades importantes de uma relação entre cópias e originais. Seja $R_\text{Copy}$ a relação binária definida como tripleto $(I, A, G_\text{Copy})$, cujo grafo é o conjunto $G_\text{Copy} \triangleq \{(i, a) \in I \times A : (i, a, \text{Copy}) \in G\}$. Então, com base na Proposição \ref{pro:originaisxarquivos}, pode-se enunciar mais uma proposição estabelecendo uma propriedade da relação binária $\mathcal{R}$ definida como o tripleto $(G_\text{Copy}, G_\text{Original}, \mathcal{G})$, cujo grafo $\mathcal{G}$ é, por sua vez, definido, para todo $i$ e $j \in I$ e $a$ e $b \in A$, por: \begin{equation*} ((i, a), (j, b)) \in \mathcal{G} \Leftrightarrow i = j \end{equation*} \begin{proposition}[propriedades da relação entre cópias e originais] \label{pro:propriedadecopia} A relação binária $\mathcal{R}$ é uma relação funcional e esquerda-total. \qed \end{proposition} \begin{proof}[Prova] 1. Para todo $(i, a) \in G_\text{Copy}, (j_1, b_1) \text{ e } (j_2, b_2) \in G_\text{Original}$, tem-se: \begin{align*} ((i, a), (j_1, b_1)) \text{ e } ((i, a), (j_2, b_2)) \in \mathcal{G} \Rightarrow j_1 &= i &(\text{Def. de } \mathcal{G}) \\ i &= j_2 &(\text{Def. de } \mathcal{G}) \\ b_1 &= b_2 &(j_1 = j_2 \text{ e } G_\text{Original} \text{ é funcional}), \end{align*} isto é, $((i, a), (j_1, b_1)) \text{ e } ((i, a), (j_2, b_2)) \in \mathcal{G} \Rightarrow (j_1, b_1) = (j_2, b_2)$. Em outras palavras, $\mathcal{R}$ é funcional. 2. Para todo $(i, a) \in G_\text{Copy}$, existe um $b \in A$ tal que $(i, b) \in G_\text{Original}$ (pois, $R_\text{Original}$ é esquerda-total), isto é, pela definição de $\mathcal{G}$, $((i, a), (i, b)) \in \mathcal{G}$. Ou seja, para todo $(i, a) \in G_\text{Copy}$, existe $(j, b) \in G_\text{Original}$ (basta escolher $j = i$) tal que $((i, a), (j, b)) \in \mathcal{G}$. Em outras palavras, $\mathcal{R}$ é esquerda-total também. \end{proof} Assim pela Proposição~\ref{pro:propriedadecopia}, cada \textbf{item identificado} armazenado como cópia possui um único \textbf{item identificado} armazenado como original (i.e., não há cópia sem original e este é único). Finalmente, os \textbf{itens identificados} tidos como originais são divididos em transferíveis e intransferíveis. No primeiro caso, eles poderão ser transferidos (migrados) de um \textbf{Arquivo} para outro, enquanto os intransferíveis deverão permanecer nos \textbf{Arquivos} em que foram originalmente armazenados. O \textbf{item identificado} denominado \textbf{serviço de Arquivo} das duas próximas seções é um exemplo de \textbf{item identificado} intransferível. \chapter{Protocolo de comunicação} \label{chap:protocolo} \section{Formato de solicitação de serviço} \label{sec:formatosolicitacao} % O funcionamento do \textbf{sistema para resolução de IBI} depende de serviços executados tanto pelos \textbf{Arquivos} por meio dos denominados ``serviços de \textbf{Arquivo} para resolução de \textbf{IBI}'' ou simplesmente \textbf{serviços de Arquivo} (cada \textbf{Arquivo} deve ter um \textbf{serviço de Arquivo} identificado pelo seu \textbf{IBI}), quanto pelo \textbf{resolvedor}, por meio do chamado \textbf{serviço de resolvedor}, quanto da comunicação entre eles. Essa comunicação deve ocorrer na forma de mensagens HTTP (Hypertext Transfer Protocol). O funcionamento do \textbf{sistema para resolução de IBI} depende de serviços executados tanto pelos \textbf{Arquivos} quanto pelo \textbf{resolvedor}, assim como da comunicação entre o \textbf{resolvedor} de um lado e os \textbf{Arquivos} do outro. Os serviços executados pelos \textbf{Arquivos} são denominados ``serviços de \textbf{Arquivo} para resolução de \textbf{IBI}'' ou simplesmente \textbf{serviços de Arquivo}. Cada \textbf{Arquivo} deve ter um \textbf{serviço de Arquivo} identificado pelo seu \textbf{IBI}. O serviço executado pelo \textbf{resolvedor} é denominado \textbf{serviço de resolvedor}. A comunicação entre os componentes do \textbf{sistema para resolução de IBI} (cf. Seção~\ref{sec:componenteseatores}) deve ocorrer na forma de mensagens HTTP (\textsl{Hypertext Transfer Protocol}). Toda solicitação HTTP deve utilizar o método \texttt{GET}. Dessa forma, qualquer mensagem de solicitação torna-se uma URL. A URL de base das mensagens de solicitação de serviço endereçadas ao \textbf{resolvedor} deve ser: \begin{center}\texttt{http://urlib.net/J8LNKB5R7W/3FUQHC5}\end{center} onde \texttt{urlib.net} é o endereço \textsl{Web} (nome de domínio) do resolvedor e \texttt{J8LNKB5R7W/3FUQHC5} é o \textbf{IBI} do \textbf{serviço de resolvedor}. A URL de base das mensagens de solicitação de serviço endereçadas a um \textbf{Arquivo} deve ser do tipo: \begin{center}\texttt{http:///}\end{center} onde o valor \texttt{} do componente \texttt{archiveaddress} é o endereço \textsl{Web} do \textbf{Arquivo}, e o valor \texttt{} do componente \texttt{archiveserviceibi} é o \textbf{IBI} do \textbf{serviço de Arquivo}, informado no momento de cadastrar o \textbf{Arquivo} (cf. Seção~\ref{sec:cadastrar}). A formação de \texttt{} deve seguir a regra gramatical denominada \texttt{hostport} na Seção 3.2.2 intitulada \textsl{Server-based Naming Authority} em \citeonline{BernersFielIrviMasi:1998:UnReId}, em que as regras \texttt{host} e \texttt{port} são as definidas, respectivamente, nas Seções 3.2.2 e 3.2.3 em \citeonline{BernersFielMasi:2005:UnReId}. Por sua vez, a formação de \texttt{} deve seguir as regras gramaticais \texttt{repositório} ou \texttt{IBIp} para um \textbf{IBI}, como definidas em \citeonline{Banon:2011:SiId}. Além da URL de base, toda mensagem de solicitação de serviço consiste em uma lista de pares \texttt{=} que deve ser anexada à URL de base e separada dela por \texttt{?}. Múltiplos pares podem aparecer em qualquer ordem e são separados por \texttt{\&}. Em todo tipo de solicitação deve constar o par \texttt{servicesubject=}, em que \texttt{} é o assunto do serviço solicitado. Quando existirem, os outros pares definem os parâmetros da solicitação. Os componentes \texttt{valor} dos pares \texttt{=} devem consistir em sequências de caracteres codificados no sistema ASCII (do Inglês \textsl{American Standard Code for Information Interchange}) \cite{ComissãodeEA:1992:CC64}. Alguns caracteres considerados especiais nos componentes \texttt{valor} devem ser codificados, como mostrado na Tabela~\ref{tab:codificacao}. Os caracteres especiais são aqueles reservados para delimitar a URL de base dos pares anexados a esta (\texttt{?}), como também para delimitar os pares entre si (\texttt{\&}) e os constituintes destes pares entre si (\texttt{=}), assim como criar espaço em branco (\textsl{espaço em branco} e \texttt{+}) ou codificar no sistema hexadecimal caracteres que não sejam ASCII, usando o prefixo percentagem (\texttt{\%}). % http://www.ietf.org/rfc/rfc2396.txt %\begin{table}[H] \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \small \centering \caption{Codificação hexadecimal de caracteres especiais.} \label{tab:codificacao} \begin{tabular}{cc} \hline% horizontal line \slshape Caractere & \slshape Codificação \\* \hline \hline \textsl{espaço em branco} & \texttt{\%20} \\* %\hline \texttt{\#} & \texttt{\%23} \\* \hline \texttt{\%} & \texttt{\%25} \\* \hline \texttt{\&} & \texttt{\%26} \\* \hline \texttt{+} & \texttt{\%2B} \\* %\hline \texttt{/} & \texttt{\%2F} \\* %\hline \texttt{:} & \texttt{\%3A} \\* %\hline \texttt{;} & \texttt{\%3B} \\* \hline \texttt{=} & \texttt{\%3D} \\* \hline \texttt{?} & \texttt{\%3F} \\* \hline \hline \end{tabular} \end{table} Por exemplo, o valor \texttt{1997-07-16T19:20+01:00} contendo o caractere especial \texttt{+} deve ser codificado: \texttt{1997-07-16T19:20\%2B01:00}. % Exemplo 4.1 \begin{example}[mensagem de solicitação de serviço] \label{exa:solicitacaoservico} URL: \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=urlRequest\&clientinformation.ipaddress=150.163.2.175\&parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5}{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=urlRequest\&clientinformation.ipaddress=150.163.2.175\&parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5}{servicesubject=urlRequest\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=urlRequest\&clientinformation.ipaddress=150.163.2.175\&parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5}{clientinformation.ipaddress=150.163.2.175\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=urlRequest\&clientinformation.ipaddress=150.163.2.175\&parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5}{parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5}} \qed \end{example} %\renewcommand{\baselinestretch}{1.2} %\normalsize No Exemplo~\ref{exa:solicitacaoservico}, a URL é a mensagem de solicitação de serviço endereçada ao \textbf{Arquivo} cujo endereço \textsl{Web} é \texttt{mtc-m16d.sid.inpe.br}, sendo \texttt{sid.inpe.br/mtc-m19@80/2009/08.21.17.02} o \textbf{IBI} do seu \textbf{serviço de Arquivo}. Anexada à URL de base, encontra-se uma lista de três pares \texttt{=}, sendo que o par \texttt{servicesubject=urlRequest} define o assunto do serviço solicitado (aqui \texttt{urlRequest}), e os pares \texttt{clientinformation.ipaddress=150.163.2.175} e \texttt{parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5} definem os parâmetros da solicitação. \section{Formato de resposta a uma solicitação de serviço} Toda resposta a uma solicitação HTTP feita para um serviço do \textbf{sistema para resolução de IBI} deve ser gerada com o \texttt{Content-Type} assumindo o valor \texttt{text/plain}. Por sua vez, todo conteúdo deve ter o formato de uma ``lista de pares'', cuja formação siga as regras gramaticais definidas na Tabela~\ref{tab:listadepares}. Nesta tabela, as regras gramaticais são especificadas por meio do uso da notação BNF -- \textsl{Backus Normal Form} ou \textsl{Backus-Naur Form} -- (aumentada) \cite{Crocker:1982:StFoAR, CrockerOver:2008:AuBNSy}\footnote{Neste relatório, a notação BNF é usada com a seguinte alteração: ``\texttt{|}'' é utilizado para representar alternativas no lugar de ``\texttt{/}''.}. % com a seguinte alteração: \verb!"|"! é utilizado para alternativas no lugar de \verb!"/"!. % http://matt.might.net/articles/grammars-bnf-ebnf/ %As regras em maíuscula: \verb!SP!, \verb!HTAB!, \verb!CR! e \verb!LF! são as mesmas regras que em \citeonline{CrockerOver:1997:AuBNSy}, e as regras em maíuscula: \verb!UTF8-NONASCII! e \verb!UTF8-CONT! são as mesmas regras que em \citeonline{RosenbergSCJPSHS:2002:SeInPr}. As regras em maiúsculas \verb!SP! (espaço em branco) e \verb!CRLF! (nova linha) são as mesmas que em \citeonline{CrockerOver:1997:AuBNSy}. %, e as regras em maíuscula \verb!UTF8-NONASCII! e \verb!UTF8-CONT! são as mesmas que em \citeonline{RosenbergSCJPSHS:2002:SeInPr}. %A regra \texttt{listapar} define uma lista com número par de \texttt{palavra} separadas por espaços. Onde uma \texttt{palavra} é uma sequência de caracteres sem espaço a não ser que começa com \texttt{\{} e acaba com \texttt{\}}. A regra \texttt{lista-de-pares} da Tabela~\ref{tab:listadepares} define uma lista formada por uma alternância de \texttt{nome} e de \texttt{valor}. Um \texttt{nome} e um \texttt{valor} consecutivos estão separados entre si por pelo menos um espaço em branco (\texttt{SP}), e formam juntos um \texttt{par}. Os pares entre si estão separados por \texttt{espaço}. O \texttt{nome} deve ser uma \texttt{palavra}, isto é, uma concatenação de \texttt{caractere}, observa-se que a regra \texttt{caractere} não contempla o espaço em branco (\texttt{SP}). Por sua vez, o \texttt{valor} deve ser uma \texttt{palavra} ou uma sequência dessas separadas por um espaço em branco (\texttt{SP}), neste último caso o \texttt{valor} deve começar com \texttt{\{}, e terminar com \texttt{\}}. % http://www.tcl.tk/man/tcl/TclCmd/Tcl.htm % UTF8-CONT % http://arran.fi.muni.cz/bnfparser2/share/rfc3261-25.abnf % !import("ALPHA", "CRLF", "DIGIT", "DQUOTE", "HEXDIG", "HTAB", "OCTET", "SP", "WSP", "rfc2234-6.1.abnf") % http://arran.fi.muni.cz/bnfparser2/share/rfc2234-6.1.abnf % domain % http://arran.fi.muni.cz/bnfparser2/share/rfc1035-2.3.abnf % https://tools.ietf.org/html/rfc2234 % https://cafe.bevocal.com/docs/grammar/abnf.html \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \texttt{lista-de-pares}} \label{tab:listadepares} \begin{center} \begin{tabular}{rcl} \verb!lista-de-pares! & \verb!=! & \verb!par *(espaço par); ex: a1 {a2 a3} a4 a5! \\ \verb!par! & \verb!=! & \verb!nome 1*SP valor; ex: a1 {a2 a3}! \\ \verb!nome! & \verb!=! & \verb!palavra; ex: a1! \\ \verb!valor! & \verb!=! & \verb!palavra | ("{" lista "}"); ex: {a2 a3}! \\ \verb!lista! & \verb!=! & \verb!palavra 1*(SP palavra);! \\ & & \verb!lista de palavras, ex: a1 a2! \\ \verb!espaço! & \verb!=! & \verb!SP | CRLF! \\ \verb!SP! & \verb!=! & \verb!%x20; espaço em branco! \\ \verb!CRLF! & \verb!=! & \verb!CR LF! \\ \verb!CR! & \verb!=! & \verb!%x0D; retorno de carro! \\ \verb!LF! & \verb!=! & \verb!%x0A; nova linha! \\ \verb!palavra! & \verb!=! & \verb!1*caractere; palavra sem espaço em branco, ex: a1! \\ \verb!caractere! & \verb!=! & \verb!%x21-7A | %x7C | %x7E; caracteres ASCII menos { e }! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} \begin{comment} \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \texttt{lista}} \label{tab:lista} \begin{center} \begin{tabular}{rcl} \verb!lista! & \verb!=! & \verb!par *(espaço par); ex: a1 {a2 a3} a4 a5! \\ \verb!par! & \verb!=! & \verb!palavrasb 1*SP palavra; ex: a1 {a2 a3}! \\ \verb!palavra! & \verb!=! & \verb!palavrasb | ("{" palavracb "}"); ex: {a2 a3}! \\ \verb!palavracb! & \verb!=! & \verb!palavrasb 1*(SP palavrasb);! \\ & & \verb!palavra com espaço em branco, ex: a1 a2! \\ \verb!espaço! & \verb!=! & \verb!SP | CRLF! \\ \verb!CRLF! & \verb!=! & \verb!CR LF! \\ \verb!SP! & \verb!=! & \verb!%x20; espaço em branco! \\ \verb!CR! & \verb!=! & \verb!%x0D; retorno de carro! \\ \verb!LF! & \verb!=! & \verb!%x0D; nova linha! \\ \verb!palavrasb! & \verb!=! & \verb!1*caractere; palavra sem espaço em branco, ex: a1! \\ \verb!caractere! & \verb!=! & \verb!ascii | UTF8-NONASCII; caractere UTF-8 menos { e }! \\ \verb!ascii! & \verb!=! & \verb!%x21-7A | %x7C | %x7E; caractere ascii menos { e }! \\ \verb!UTF8-NONASCII! & \verb!=! & \verb!%xC0-DF 1UTF8-CONT |! \\ & & \verb!%xE0-EF 2UTF8-CONT |! \\ & & \verb!%xF0-F7 3UTF8-CONT |! \\ & & \verb!%xF8-FB 4UTF8-CONT |! \\ & & \verb!%xFC-FD 5UTF8-CONT! \\ \verb!UTF8-CONT! & \verb!=! & \verb!%x80-BF! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} \end{comment} Pela regra \texttt{caractere} da Tabela~\ref{tab:listadepares}, observa-se que os caracteres da ``lista de pares'' são os codificados no sistema ASCII (do Inglês \textsl{American Standard Code for Information Interchange}) \cite{ComissãodeEA:1992:CC64} e, em consequência disto, serão os únicos caracteres da resposta a uma solicitação de qualquer serviço do \textbf{sistema para resolução de IBI}. Se for necessário usar caracteres não codificados no sistema ASCII, cada um destes deverá ser representado por um par de algarismos hexadecimais, precedido pelo símbolo \texttt{\%}, sendo que cada par corresponde ao número decimal entre 0 e 255, usado na codificação do caractere, no sistema de codificação adotado. Por exemplo, o caractere \texttt{ó}, parte do alfabeto Latino, codificado no sistema da ISO/IEC 8859-1 pelo valor decimal 243, será representado por \texttt{\%f3}. % Exemplo 4.2 \begin{example}[mensagem de resposta à uma solicitação de serviço] \label{exa:repostaasolicitacaoservico} Lista de pares: % \scriptsize \tiny \begin{verbatim} archiveaddress mtc-m16d.sid.inpe.br contenttype Data ibi {rep sid.inpe.br/mtc-m19/2013/09.04.12.27.57 ibip 8JMKD3MGP7W/3EPGUE5} ibi.archiveservice {rep sid.inpe.br/mtc-m19@80/2009/08.21.17.02} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state Original timestamp 2013-10-04T14:32:14Z url http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat%f3rio%20Final.pdf urlkey 1426203276-5985125171467764 \end{verbatim} \qed \end{example} No Exemplo~\ref{exa:repostaasolicitacaoservico}, a ``lista de pares'' é a resposta à mensagem de solicitação do Exemplo~\ref{exa:solicitacaoservico}. Esta lista é constituída por pares nome/valor, dispostos ao longo de 9 linhas (um em cada linha), sendo o nome e o valor de cada par separados por espaços em branco. Observa-se que, na URL (oitavo par), o caractere \texttt{ó}, parte da palavra \texttt{Relatório}, por não fazer parte dos caracteres codificados em ASCII, é representado pelo par de algarismos hexadecimais \texttt{\%f3}, sendo o sistema da ISO/IEC 8859-1, o adotado no momento da criação do nome de arquivo ``\texttt{Relatório Final.pdf}'', e que o espaço em branco nesse nome é representado pelo par de algarismos hexadecimais \texttt{\%20}, conforme a Tabela~\ref{tab:codificacao}. \begin{comment} \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \texttt{listapar}} \label{tab:listapar} \begin{center} \begin{tabular}{rcl} \verb!listpar! & \verb!=! & \verb!par *(espaço par); ex: a1 {a2 a3}! \\ \verb!par! & \verb!=! & \verb!palavra " " palavra; ex: a1 {a2 a3}! \\ \verb!lista! & \verb!=! & \verb!palavra *(espaço palavra); ex: b1 {b2 b3}! \\ \verb!palavra! & \verb!=! & \verb!palavrase | ("{" (texto | lista "}"); ex: {a2 a3}! \\ \verb!texto! & \verb!=! & \verb!*(palavrase | espaço); ex: a2 a3! \\ \verb!palavrase! & \verb!=! & \verb!1*caractere; palavra sem espaço, ex: a1! \\ \verb!espaço! & \verb!=! & \verb!SP | HTAB | CR | LF! \\ \verb!SP! & \verb!=! & \verb!%x20; espaço em branco! \\ \verb!HTAB! & \verb!=! & \verb!%x09; tabulação! \\ \verb!CR! & \verb!=! & \verb!%x0D; retorno de carro! \\ \verb!LF! & \verb!=! & \verb!%x0D; nova linha! \\ \verb!caractere! & \verb!=! & \verb!ascii | UTF8-NONASCII; caractere UTF-8 menos { e }! \\ \verb!ascii! & \verb!=! & \verb!%x21-7A | %x7C | %x7E; caractere ascii menos { e }! \\ \verb!UTF8-NONASCII! & \verb!=! & \verb!%xC0-DF 1UTF8-CONT |! \\ & & \verb!%xE0-EF 2UTF8-CONT |! \\ & & \verb!%xF0-F7 3UTF8-CONT |! \\ & & \verb!%xF8-FB 4UTF8-CONT |! \\ & & \verb!%xFC-FD 5UTF8-CONT! \\ \verb!UTF8-CONT! & \verb!=! & \verb!%x80-BF! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \texttt{palavra}} \label{tab:palavra} \begin{center} \begin{tabular}{rcl} \verb!palavra! & \verb!=! & \verb!palavrasb | ("{" palavracb "}"); ex: {a1 a2}! \\ \verb!palavracb! & \verb!=! & \verb!palavrasb 1*(espaço palavrasb); ex: a1 a2! \\ \verb!palavrasb! & \verb!=! & \verb!1*caractere; ex: a1! \\ \verb!espaço! & \verb!=! & \verb!SP | HTAB | CR | LF! \\ \verb!SP! & \verb!=! & \verb!%x20; espaço em branco! \\ \verb!HTAB! & \verb!=! & \verb!%x09; tabulação! \\ \verb!CR! & \verb!=! & \verb!%x0D; retorno de carro! \\ \verb!LF! & \verb!=! & \verb!%x0D; nova linha! \\ \verb!caractere! & \verb!=! & \verb!ascii | UTF8-NONASCII; caractere UTF-8 menos { e }! \\ \verb!ascii! & \verb!=! & \verb!%x21-7A | %x7C | %x7E; caractere ascii menos { e }! \\ \verb!UTF8-NONASCII! & \verb!=! & \verb!%xC0-DF 1UTF8-CONT |! \\ & & \verb!%xE0-EF 2UTF8-CONT |! \\ & & \verb!%xF0-F7 3UTF8-CONT |! \\ & & \verb!%xF8-FB 4UTF8-CONT |! \\ & & \verb!%xFC-FD 5UTF8-CONT! \\ \verb!UTF8-CONT! & \verb!=! & \verb!%x80-BF! \\ % \verb!SÍMBOLO! & \verb!=! & \verb!"(" | ")" | "," | "-" | "." | "/" | ":" | ";" | "<" |! \\ % & & \verb!">" | "@" | "[" | "]" | "_" | "~"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} \end{comment} \chapter{Inclusão e exclusão de Arquivo} \section{Cadastrar um Arquivo} \label{sec:cadastrar} Do ponto de vista do funcionamento do \textbf{sistema para resolução de IBI}, o papel do administrador de um \textbf{Arquivo} resume-se em ligá-lo e desligá-lo (cf. Seção~\ref{sec:componenteseatores}). No entanto, para que o \textbf{Arquivo} possa, ao ligá-lo, passar a ser incluído no \textbf{sistema para resolução de IBI} (cf. Seção~\ref{sec:incluirexcluirarquivo}), o administrador deve inicialmente cadastrá-lo junto a este sistema. Por motivo de segurança no processo de inclusão/exclusão de um \textbf{Arquivo}, o administrador deverá informar uma \textbf{chave de cadastro} de sua escolha no momento do cadastramento (cf. a nota em verde na Figura~\ref{fig:diagramadecasosdeuso}). A Tabela~\ref{tab:chave} contém, conforme a notação BNF % -- \textsl{Backus Normal Form} ou \textsl{Backus-Naur Form} -- (aumentada)% % \cite{Crocker:1982:StFoAR, CrockerOver:2008:AuBNSy}\footnote{Nesse relatório, a notação BNF é usada com a seguinte alteração: \texttt{``|''} é utilizado para representar alternativas no lugar de \texttt{``/''}} , as três regras para a formação da \textbf{chave de cadastro}. Observa-se que a chave consiste simplesmente em uma, ou opcionalmente duas, sequência(s) de 10 ou mais dígitos. \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \textbf{chave de cadastro}} \label{tab:chave} \begin{center} \begin{tabular}{rcl} \verb!chave! & \verb!=! & \verb!número ["-" número]; ex: 1234567890-1234567890! \\ \verb!número! & \verb!=! & \verb!10*DÍGITO; ex: 1234567890! \\ \verb!DÍGITO! & \verb!=! & \verb!"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} % O administrador de \textbf{Arquivo} deve encaminhar a \textbf{chave de cadastro} escolhida por meio de um \textsl{e-mail} endereçado à Agência IBI de sua preferência. % O administrador do \textbf{Arquivo} deve encaminhar a \textbf{chave de cadastro} escolhida, por meio de um \textsl{e-mail} endereçado à uma entidade responsável pelo cadastro dos \textbf{Arquivos} que desejam participar do \textbf{sistema para resolução de IBI}. % Para identificar o \textbf{Arquivo}, o seu administrador deve encaminhar, junto com a \textbf{chave de cadastro}, o \textbf{IBI} \cite{Banon:2011:SiId} do \textbf{item identificado} tido como original intransferível, e denominado ``serviço de \textbf{Arquivo} para resolução de \textbf{IBI}'' ou simplesmente \textbf{serviço de Arquivo}, previamente criado nesse \textbf{Arquivo} (cf. Seção \ref{chap:servicoarquivo}). O cadastramento de um \textbf{Arquivo} é realizado com base numa solicitação de cadastro feita pelo seu administrador por meio de um \textsl{e-mail} endereçado a uma entidade responsável pelo cadastro de \textbf{Arquivos} que desejam participar do \textbf{sistema para resolução de IBI}. A solicitação de cadastro de um \textbf{Arquivo} deve conter a identificação do Arquivo e sua \textbf{chave de cadastro}. O identificador do Arquivo deve ser o \textbf{IBI} \cite{Banon:2011:SiId} do \textbf{item identificado}, tido como original intransferível, denominado ``serviço de \textbf{Arquivo} para resolução de \textbf{IBI}'', ou simplesmente \textbf{serviço de Arquivo}, previamente criado e armazenado neste \textbf{Arquivo} (cf. Seção \ref{chap:servicoarquivo}). % Exemplo 5.1 \begin{example}[\textsl{e-mail} de solicitação de cadastro de um \textbf{Arquivo}] \label{exa:emailcadastro} Assunto: \texttt{Solicitação de cadastro de um novo Arquivo} Conteúdo: \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{IBI do serviço de Arquivo:}\\ \texttt{archiveserviceibi = dpi.inpe.br/banon/1999/01.09.22.14} \texttt{Chave de cadastro:}\\ \texttt{registrationkey = 1234567890} \qed \end{example} No Exemplo \ref{exa:emailcadastro}, o conteúdo do \textsl{e-mail} informou que o administrador do \textbf{Arquivo}, com o \textbf{serviço de Arquivo} identificado pelo \textbf{IBI} \texttt{dpi.inpe.br/banon/1999/01.09.22.14}, solicitou seu cadastramento no \textbf{sistema para resolução de IBI}, com a \textbf{chave de cadastro} constituída pela sequência de dígitos: \texttt{1234567890}. \section{Incluir/excluir um Arquivo} \label{sec:incluirexcluirarquivo} Uma vez o \textbf{Arquivo} cadastrado no \textbf{sistema para resolução de IBI}, seu administrador receberá um \textsl{e-mail} de confirmação. Então, o \textbf{Arquivo} que implementar esta norma passará a ser automaticamente incluído no \textbf{sistema para resolução de IBI} no momento em que for ligado pelo seu administrador. Ligar um \textbf{Arquivo} significa expô-lo na \textsl{Web} e, em particular, expor seu \textbf{serviço de Arquivo}. Ao desligar o \textbf{Arquivo}, isto é, deixar de expô-lo na \textsl{Web}, este será automaticamente excluído do \textbf{sistema para resolução de IBI}, no entanto, seu cadastro será mantido para poder ser incluído novamente quando religado. No momento de ser religado, o endereço \textsl{Web} do \textbf{Arquivo}, isto é, o componente \texttt{archiveaddress} introduzido na Seção~\ref{sec:formatosolicitacao}, poderá assumir, ou não, um novo valor. O processo de inclusão/exclusão de \textbf{Arquivo} no/do \textbf{sistema para resolução de IBI} é detalhado no diagrama de sequência da Figura~\ref{fig:diagramasequenciainclusaoexclusao}. Este processo é desencadeado pela emissão da mensagem ``Ligar arquivo''~(1), enviada pelo administrador ao \textbf{Arquivo}, e termina pela emissão da mensagem ``Desligar arquivo''~(6). \begin{comment} \begin{figure}[htbp] \caption{Diagrama de sequência do processo de inclusão/exclusão de \textbf{Arquivo}} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \begin{umlseqdiag} \umlbasicobject[stereo=actor]{administrador} \umlbasicobject[x=6]{arquivo} \umlbasicobject[x=12]{resolvedor} % \begin{umlcall}[op={1. Ligar/Desligar arquivo}, return={6. status do cadastro}, dt=5]{administrador}{arquivo} \begin{umlcall}[op={1. Ligar/Desligar arquivo}, dt=5]{administrador}{arquivo} \begin{umlcall}[op={2. Incluir/Excluir arquivo}, return={5. status}]{arquivo}{resolvedor} \begin{umlcall}[op={3. Solicitar confirmação}, dt=6.6]{resolvedor}{arquivo} \begin{umlcall}[type=return, op={4. confirmação}]{arquivo}{resolvedor} \end{umlcall} \end{umlcall} \end{umlcall} \end{umlcall} \end{umlseqdiag} \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Ao receber de um \textbf{Arquivo} a mensagem ``Incluir/Excluir arquivo''~(2), o \textbf{resolvedor} envia a mensagem ``Solicitar confirmação''~(3) a esse mesmo \textbf{Arquivo} que deve retornar a ``confirmação''~(4); conforme a presença ou ausência de resposta do \textbf{Arquivo}, o \textbf{resolvedor} retorna ou não uma determinada mensagem ``status''~(5).} % legenda - opcional \label{fig:diagramasequenciainclusaoexclusao} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} \end{comment} \begin{figure}[htbp] \caption{Diagrama de sequência do processo de inclusão/exclusão de \textbf{Arquivo}} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \begin{umlseqdiag} \umlbasicobject[stereo=actor]{administrador} \umlbasicobject[x=6]{arquivo} \umlbasicobject[x=12]{resolvedor} % \begin{umlcall}[op={1. Ligar/Desligar arquivo}, return={6. status do cadastro}, dt=5]{administrador}{arquivo} \begin{umlcall}[op={1. Ligar arquivo}, dt=5]{administrador}{arquivo} \begin{umlcall}[op={2. Incluir arquivo}, return={5. \textsl{status}}]{arquivo}{resolvedor} \begin{umlcall}[op={3. Solicitar confirmação}, dt=6.6]{resolvedor}{arquivo} \begin{umlcall}[type=return, op={4. confirmação}]{arquivo}{resolvedor} \end{umlcall} \end{umlcall} \end{umlcall} \end{umlcall} \begin{umlcall}[op={6. Desligar arquivo}, dt=5]{administrador}{arquivo} \begin{umlcall}[op={7. Excluir arquivo}, padding=3, return={8. \textsl{status}}]{arquivo}{resolvedor} % \begin{umlcall}[type=return, op={8. status}, dt=10]{resolvedor}{arquivo} % \end{umlcall} \end{umlcall} \end{umlcall} \end{umlseqdiag} \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Ao receber de um \textbf{Arquivo} a mensagem ``Incluir arquivo''~(2), o \textbf{resolvedor} envia a mensagem ``Solicitar confirmação''~(3) a este mesmo \textbf{Arquivo} que deve retornar uma ``confirmação''~(4); conforme a presença ou ausência de resposta do \textbf{Arquivo}, o \textbf{resolvedor} retorna uma mensagem ``\textsl{status}''~(5) indicando que o \textbf{Arquivo} foi incluído e se a mensagem de confirmação foi ou não recebida. Ao receber de um \textbf{Arquivo} a mensagem ``Excluir arquivo''~(7), o \textbf{resolvedor} retorna uma mensagem ``\textsl{status}''~(8) indicando que o \textbf{Arquivo} foi excluído.} % legenda - opcional \label{fig:diagramasequenciainclusaoexclusao} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} Ao ser ligado, o \textbf{Arquivo} deverá emitir a mensagem ``Incluir Arquivo''~(2) endereçada ao \textbf{resolvedor}. Da mesma forma, ao ser desligado, o \textbf{Arquivo} deverá emitir a mensagem ``Excluir Arquivo''~(7). Em uma solicitação de inclusão, o par \texttt{servicesubject=inclusionRequest} deve ser anexado à URL de base; em uma solicitação de exclusão, é o par \texttt{servicesubject=exclusionRequest} que deve ser anexado. % Junto a esse par, uma solicitação de inclusão ou exclusão deve conter mais outros sete pares, como mostrado na Tabela~\ref{tab:inclusaoexclusao}. Nessa tabela, a coluna \textsl{Domínio} indica o domínio dos valores possíveis para cada par. Quando os valores não são enumerados explicitamente, pode ser feita referência a uma ``regra'' gramatical, cuja especificação utiliza a notação BNF (aumentada), para a formação dos possíveis valores. A coluna \textsl{Tipo} indica que todos os oito pares são obrigatórios (obr.). Junto a este par, uma solicitação de inclusão ou exclusão deve conter mais outros sete pares, como mostrado na Tabela~\ref{tab:inclusaoexclusao}. Nesta tabela, a coluna \textsl{Domínio} indica o domínio dos valores possíveis para cada par. Os valores são aqueles que podem ser gerados a partir de uma gramática especificada por meio da notação BNF (aumentada). A coluna \textsl{Tipo} indica que todos os oito pares são obrigatórios (obr.). %\begin{table}[H] \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Pares \texttt{=} a serem anexados à URL de base para as mensagens ``Incluir Arquivo''~(2) e ``Excluir Arquivo''~(7), endereçadas ao \textbf{resolvedor} por um \textbf{Arquivo}.} \label{tab:inclusaoexclusao} \begin{tabular}{p{4cm}p{3.3cm}p{5.2cm}p{0.5cm}} \hline \multicolumn{3}{c}{\slshape Par} & \multicolumn{1}{c}{\slshape Tipo} \\* \cline{1-3} \multicolumn{1}{l}{\slshape Nome} & \multicolumn{2}{c}{\slshape Valor} & \\* \cline{2-3} & \multicolumn{1}{c}{\slshape Domínio} & \multicolumn{1}{c}{\slshape Significado} & \\* \hline \hline \texttt{servicesubject} & \texttt{"inclusionRequest"} \texttt{"exclusionRequest"} & em caso de solicitação de inclusão em caso de solicitação de exclusão & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveaddress} & regra \texttt{hostport} da Seção~\ref{sec:formatosolicitacao} & o endereço \textsl{Web} do \textbf{Arquivo} ex: \texttt{mtc-m21.sid.inpe.br} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveserviceibi} & regra \texttt{repositório} ou \texttt{IBIp} em \citeonline{Banon:2011:SiId} & o \textbf{IBI} do \textbf{serviço de Arquivo} informado no momento de cadastrar o \textbf{Arquivo} (cf. Seção~\ref{sec:cadastrar}) % ex: \texttt{sid.inpe.br/mtc-m21/2012/06.05.15.34.39} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveip} & regra \texttt{IPv4address} ou \texttt{IPv6address} da Seção 3.2.2 em \citeonline{BernersFielMasi:2005:UnReId} & o IP do servidor hospedando o \textbf{Arquivo} ex: \texttt{150.163.34.239} % IPv6address e IPv4address % http://tools.ietf.org/html/rfc3986 & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveprotocol} & \texttt{"HTTP"} & o protocolo de comunicação & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveplatformversion} & sequência ASCII conforme Seção~\ref{sec:formatosolicitacao} & a versão da plataforma computacional hospedando o \textbf{Arquivo} ex: \texttt{2014:11.09.02.16.15} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{archiveadmemailaddress} & regra \texttt{authority} da Seção 3.2 em \citeonline{BernersFielMasi:2005:UnReId} & o endereço de \textsl{e-mail} do administrador do \textbf{Arquivo} ex: \texttt{banon@dpi.inpe.br} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{registrationkey} & regra \texttt{chave} da Tabela~\ref{tab:chave} & a chave de cadastro do \textbf{Arquivo} informado no momento de cadastrá-lo (cf. Seção~\ref{sec:cadastrar}) ex: \texttt{1234567890} & \multicolumn{1}{c}{obr.} \\* \hline \hline \end{tabular} \end{table} Neste relatório, apenas um único protocolo de comunicação está sendo considerado: o protocolo HTTP. Por este motivo, o par com nome \texttt{archiveprotocol} deve assumir o único valor permitido \texttt{HTTP}. No futuro, haverá a possibilidade de recomendar outros protocolos. Por exemplo, atualmente está sendo usado, porém ainda não divulgado, o protocolo USP para ``UR{\slshape Lib}Service Protocol''. % Selo do Site: <{mtc-m21.sid.inpe.br 802} sid.inpe.br/mtc-m21/2012/06.05.15.34.39 150.163.34.239>. % Versão do URLibService: <2014:11.09.02.16.15 dpi.inpe.br/banon/1999/01.09.22.14 gerald.banon>. % {mtc-m21.sid.inpe.br 802} sid.inpe.br/mtc-m21/2012/06.05.15.34.39 150.163.34.239 USP {2014:11.09.02.16.15 dpi.inpe.br/banon/1999/01.09.22.14 gerald.banon} banon@dpi.inpe.br 1 % Exemplo 5.2 \begin{example}[mensagem de solicitação de inclusão emitida pelo \textbf{Arquivo} ao ser ligado pelo seu administrador] \label{exa:solicitacaoinclusao} URL de solicitação de inclusão: % http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest&archiveaddress=mtc-m21.sid.inpe.br&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39&archiveip=150.163.34.239&archiveprotocol=HTTP&archiveplatformversion=2014:11.09.02.16.15&archiveadmemailaddress=banon@dpi.inpe.br®istrationkey=1234567890 \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{servicesubject=\textcolor{purple}{inclusionRequest}\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveaddress=mtc-m21.sid.inpe.br\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveip=150.163.34.239\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveprotocol=HTTP\&}}\\ %\texttt{archiveplatformversion=2014:11.09.02.16.15 dpi.inpe.br/banon/1999/01.09.22.14 gerald.banon\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveplatformversion=2014:11.09.02.16.15\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveadmemailaddress=banon@dpi.inpe.br\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=inclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{registrationkey=1234567890}} \end{flushleft} \qed \end{example} % \clearpage % Exemplo 5.3 \begin{example}[mensagem de solicitação de exclusão emitida pelo \textbf{Arquivo} ao ser desligado pelo seu administrador] \label{exa:solicitacaoexclusao} URL de solicitação de exclusão: % http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest&archiveaddress=mtc-m21.sid.inpe.br&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39&archiveip=150.163.34.239&archiveprotocol=HTTP&archiveplatformversion=2014:11.09.02.16.15&archiveadmemailaddress=banon@dpi.inpe.br®istrationkey=1234567890 \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{servicesubject=\textcolor{purple}{exclusionRequest}\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveaddress=mtc-m21.sid.inpe.br\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveip=150.163.34.239\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveprotocol=HTTP\&}}\\ %\texttt{archiveplatformversion=2014:11.09.02.16.15 dpi.inpe.br/banon/1999/01.09.22.14 gerald.banon\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveplatformversion=2014:11.09.02.16.15\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{archiveadmemailaddress=banon@dpi.inpe.br\&}}\\ \texttt{\href{http://www.urlib.net/J8LNKB5R7W/3FUQHC5?servicesubject=exclusionRequest\&archiveaddress=mtc-m21.sid.inpe.br\&archiveserviceibi=sid.inpe.br/mtc-m21/2012/06.05.15.34.39\&archiveip=150.163.34.239\&archiveprotocol=HTTP\&archiveplatformversion=2014:11.09.02.16.15\&archiveadmemailaddress=banon@dpi.inpe.br\®istrationkey=1234567890}{registrationkey=1234567890}} \end{flushleft} \qed \end{example} Nos Exemplos~\ref{exa:solicitacaoinclusao} e~\ref{exa:solicitacaoexclusao}, as URL foram, respectivamente, as mensagens ``Incluir Arquivo''~(2) e ``Excluir Arquivo''~(7) endereçadas ao \textbf{resolvedor} pelo \textbf{Arquivo} de endereço web \texttt{mtc-m21.sid.inpe.br} e de \textbf{serviço de Arquivo} identificado pelo \textbf{IBI} \texttt{sid.inpe.br/mtc-m21/2012/06.05.15.34.39}, solicitando, respectivamente, sua inclusão e exclusão. Apenas o valor de \texttt{servicesubject} esteve alterado na segunda mensagem em relação a primeira (cf. textos em vermelho). Ao receber de um \textbf{Arquivo} a mensagem ``Incluir Arquivo''~(2), o \textbf{resolvedor} verificará se o \textbf{Arquivo} é realmente acessível na \textsl{Web} por meio do endereço informado \texttt{}. Nem sempre o acesso é possível, como, por exemplo, em alguns casos de IP dinâmico. % para esse mesmo \textbf{Arquivo} (não é para a ...) Para cumprir essa verificação, o \textbf{resolvedor} enviará a este mesmo \textbf{Arquivo} a mensagem ``Solicitar confirmação''~(3), na expectativa de receber uma resposta de confirmação. Apenas o par \texttt{servicesubject=inclusionConfirmationRequest} é anexado à URL de base%, como mostrado na Tabela \ref{tab:confirmacao} \ em uma solicitação de confirmação. \begin{comment} \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \small \centering \caption{Par \texttt{=} a ser anexado à URL de base para a mensagem ``Solicitar confirmação''~(3) endereçada ao \textbf{Arquivo}.} \label{tab:confirmacao} \begin{tabular}{p{4.75cm}|p{8.75cm}} \hline% horizontal line \slshape Nome & \slshape Valor \\* \hline \texttt{servicesubject} & \texttt{inclusionConfirmationRequest} \\* \hline \end{tabular} \end{table} \end{comment} % Exemplo 5.4 \begin{example}[mensagem de solicitação de confirmação emitida pelo \textbf{resolvedor}] \label{exa:solicitacaoconfirmacao} URL de solicitação de confirmação: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{\href{http://mtc-m21.sid.inpe.br/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?servicesubject=inclusionConfirmationRequest}{http://mtc-m21.sid.inpe.br/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?}}\\ \texttt{\href{http://mtc-m21.sid.inpe.br/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?servicesubject=inclusionConfirmationRequest}{servicesubject=inclusionConfirmationRequest}} \end{flushleft} \qed \end{example} No Exemplo~\ref{exa:solicitacaoconfirmacao}, a URL é a mensagem ``Solicitar confirmação''~(3) enviada pelo \textbf{resolvedor} ao \textbf{Arquivo} cujo endereço \textsl{Web} é \texttt{mtc-m21.sid.inpe.br}, sendo \texttt{sid.inpe.br/mtc-m21/2012/06.05.15.34.39} o \textbf{IBI} do seu \textbf{serviço de Arquivo}. O valor da mensagem ``confirmação''~(4) deve ser constante e igual a ``\texttt{confirmation yes}'' (cf. Seção \ref{chap:servicoarquivo}). Ao receber a mensagem ``Incluir Arquivo'' (2), o \textbf{resolvedor} incluirá o \textbf{Arquivo} no \textbf{sistema para resolução de IBI}, se este já estiver cadastrado e se a chave de cadastro informada na mensagem ``Incluir Arquivo'' (2) coincidir com a chave informada no momento do cadastro. Além disto, se o \textbf{resolvedor} receber também a mensagem ``confirmação''~(4), ele retornará ao \textbf{Arquivo} a mensagem ``\textsl{status}''~(5) com o valor: \begin{center} ``\texttt{status.archive included status.confirmation successful}'', \end{center} caso contrário, o \textbf{resolvedor} retornará ao \textbf{Arquivo} a mensagem ``\textsl{status}''~(5) com o valor: \begin{center} ``\texttt{status.archive included status.confirmation unsuccessful}''. \end{center} Ao receber a mensagem ``Excluir Arquivo'' (7), se a chave de cadastro informada nesta mensagem coincidir com a chave informada no momento do cadastro, o \textbf{resolvedor} excluirá o \textbf{Arquivo} do \textbf{sistema para resolução de IBI} e retornará ao \textbf{Arquivo} a mensagem ``\textsl{status}''~(5) com o valor: \begin{center} ``\texttt{status.archive excluded}''. \end{center} \chapter{Resolução de \textbf{IBI}} \label{chap:resolucaoibi} \section{URL persistente} \label{sec:urlpersistente} O papel do \textbf{sistema para resolução de IBI} é atender aos usuários do sistema que solicitam a resolução de \textbf{IBI} com o intuito de receber de volta os \textbf{itens identificados} correspondentes. A solicitação de resolução de \textbf{IBI} é codificada na forma de uma \textbf{URL persistente}, contendo o \textbf{IBI} do \textbf{item identificado} de interesse. A forma simples de uma \textbf{URL persistente} é: \begin{center}\texttt{http://urlib.net/}\end{center} em que \texttt{http} é o esquema (protocolo), \texttt{urlib.net} é o endereço \textsl{Web} (nome de domínio) do \textbf{resolvedor} do \textbf{sistema para resolução de IBI} e \texttt{} é o \textbf{IBI} do \textbf{item identificado} de interesse, isto é, o \textbf{IBI} a ser resolvido. \begin{comment} A URL: \begin{center}\texttt{http://urlib.net/LK47B6W/362SFKH}\end{center} é um exemplo de \textbf{URL persistente}, onde \texttt{LK47B6W/362SFKH} é o \textbf{IBI} de um determinado \textbf{item identificado}. \end{comment} % Exemplo 6.1 \begin{example}[\textbf{URL persistentes}] \label{exa:urlpersistentes} URL: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E}{http://urlib.net/8JMKD3MGP8W/35MME4E}} \end{center} \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8}{http://urlib.net/8JMKD3MGP8W/35MMLL8}} \end{center} \begin{center} \texttt{\href{http://urlib.net/LK47B6W/362SFKH}{http://urlib.net/LK47B6W/362SFKH}} \end{center} \begin{center} \texttt{\href{http://urlib.net/iconet.com.br/banon/2009/09.09.22.01}{http://urlib.net/iconet.com.br/banon/2009/09.09.22.01}} \end{center} \qed \end{example} Nas três primeiras \textbf{URL persistentes} do Exemplo~\ref{exa:urlpersistentes}, \texttt{8JMKD3MGP8W/35MME4E}, \texttt{8JMKD3MGP8W/35MMLL8} e \texttt{LK47B6W/362SFKH} são \textbf{IBI} na forma opaca de \textbf{IBIp} \cite{Banon:2011:SiId}. Na quarta \textbf{URL persistente}, o \textbf{IBI} \texttt{iconet.com.br/banon/2009/09.09.22.01} está na forma de \textbf{nome de repositório uniforme} \cite{Banon:2011:SiId}. No exemplo~\ref{exa:urlpersistentes}, as três primeiras URL apontam para três \textbf{itens identificados} distintos. A terceira e quarta URL apontam para o mesmo \textbf{item identificado}, isto é, \texttt{LK47B6W/362SFKH} e \texttt{iconet.com.br/banon/2009/09.09.22.01} constituem um exemplo das duas formas do \textbf{IBI} de um mesmo \textbf{item identificado}. A forma completa de uma \textbf{URL persistente} é: \begin{center}\texttt{http://urlib.net/?}\end{center} em que \texttt{mdf} é um componente opcional, chamado de modificador de \textbf{URL persistente}; \texttt{caminho} é um componente opcional que especifica um recurso (e.g., arquivo) de interesse, parte do \textbf{item identificado}; e \texttt{pergunta} é um componente opcional que contém parâmetros de funcionalidade e que deve ser interpretados pelo \textbf{sistema para resolução de IBI} ou pelo próprio \textbf{item identificado} (quando este é um serviço \textsl{Web} por exemplo). A implementação dos recursos necessários para atender a qualquer forma não simples de uma \textbf{URL persistente} é facultativa por parte dos \textbf{Arquivos} (cf. implmentação mínima na Seção \ref{sec:respostas}). Em termos de linguagem formal, uma \textbf{URL persistente} é um caso particular de URI \cite{BernersFielMasi:2005:UnReId}. A Tabela~\ref{tab:urlpersistente} especifica as regras de formação de uma \texttt{URL-persistente}. A especificação utiliza a notação BNF (aumentada) e as seguintes regras predefinidas: \texttt{repositório} (\textbf{IBI} como \textbf{nome de repositório uniforme}), \texttt{IBIp} (\textbf{IBI} como \textbf{IBIp}), \texttt{ALFAMI} (letras minúsculas) e \texttt{ALFAMA} (letras maiúsculas), introduzidas em \citeonline{Banon:2011:SiId}, assim como a regra \texttt{path-absolute} (caminho de arquivo começando com \texttt{"/"}), encontrada em \citeonline{BernersFielMasi:2005:UnReId}, e as regras \texttt{idioma} e \texttt{país} da Tabela~\ref{tab:idiomapais} do Apêndice~\ref{apendiceA}. \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} % \small \footnotesize \caption{Regras definindo a formação de uma \texttt{URL-persistente}} \label{tab:urlpersistente} \begin{center} \begin{tabular}{rcl} \verb!URL-persistente! & \verb!=! & \verb!"http://urlib.net/" IBI [mdf] [path-absolute] ["?" pergunta]! \\ \verb!IBI! & \verb!=! & \verb!repositório | IBIp; ex: LK47B6W/362SFKH! \\ \verb!mdf! & \verb!=! & \verb'([u [t]] | [t [u]]) [m [t]]; modificador, ex: !+:' \\ \verb!u! & \verb!=! & \verb'"!"; última edição' \\ \verb!t! & \verb!=! & \verb!"+" ["(" idioma ["-" país] ")"]; tradução, ex: +(pt-BR)! \\ % \verb!idioma! & \verb!=! & \verb!2ALFAMI; ex: pt! \\ % \verb!país! & \verb!=! & \verb!2ALFAMA; ex: BR! \\ \verb!m! & \verb!=! & \verb!":" ["(" formato ")"]; metadados, ex: :(oai_dc)! \\ \verb!formato! & \verb!=! & \verb!"oai_dc"! \\ \verb!pergunta! & \verb!=! & \verb![par ["&" par]]! \\ \verb!par! & \verb!=! & \verb!nome "=" valor! \\ \verb!nome! & \verb!=! & \verb!1*caractere! \\ \verb!valor! & \verb!=! & \verb!*caractere! \\ \verb!caractere! & \verb!=! & \verb!%x21-25 | %x27-3C | %x3E-7E; caracteres ASCII menos & e =! \\ % \verb!par! & \verb!=! & \verb!"ibiurl.requireditemstatus=" ["Original" | "Copy"] |! \\ % & & \verb!"ibiurl.verblist=" [verbo *("+" verbo)]! \\ % \verb!verbo! & \verb!=! & \verb!"(GetTranslation" ["(" idioma ["-" país] ")"]) |! \\ % & & \verb!"GetLastEdition" | ("GetMetadata" ["(" tipo ")"]) |! \\ % & & \verb!"GetFileList"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} Um modificador de \textbf{URL persistente} é um operador que modifica o processo de resolução de \textbf{IBI}, de forma a retornar um \textbf{item de informação} que possui um certo relacionamento com o \textbf{item identificado}. Este operador é construído por meio da composição de operadores escolhidos dentre de três operadores (ou modificadores) elementares. O primeiro operador elementar, denotado pelo símbolo \textsl{dois pontos} (\texttt{:}), retorna metadados do \textbf{item identificado}. O segundo, denotado pelo símbolo \textsl{ponto de exclamação} (\texttt{!}), retorna a última edição do \textbf{item identificado}. O terceiro, denotado pelo símbolo \textsl{mais} (\texttt{+}), retorna uma dada tradução do \textbf{item identificado}. Na Tabela~\ref{tab:urlpersistente}, os três modificadores elementares estão especificados por meio das regras \texttt{m} (para metadados), \texttt{u} (para última edição) e \texttt{t} (para tradução). O modificador que retorna metadados (\texttt{:}) e o que retorna uma tradução (\texttt{+}) podem ser parametrizados. A Tabela~\ref{tab:modificadoribi} descreve todas as composições permitidas de operadores escolhidos dentre dos três modificadores elementares de \textbf{URL persistente}. \begin{comment} \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Modificadores de \textbf{URL persistente}.} \label{tab:modificadoribi} \begin{tabular}{p{2.2cm}p{11.3cm}} \hline \slshape Modificador & \slshape Retorno \\* \hline \hline \texttt{!} & última edição \\* \hline \texttt{!+} & tradução, no idioma preferido, da última edição \\* \hline \texttt{!+(xx)} & tradução, no idioma \texttt{xx}, da última edição \\* \hline \hline \texttt{!:} & metadados da última edição \\* \hline \texttt{!+:} & metadados da tradução, no idioma preferido, da última edição \\* \hline \texttt{!+(xx):} & metadados da tradução, no idioma \texttt{xx}, da última edição \\* \hline \hline \texttt{!:+} & tradução, no idioma preferido, dos metadados da última edição \\* \hline \texttt{!+:+} & tradução, no idioma preferido, dos metadados da tradução, no idioma preferido, da última edição \\* \hline \texttt{!+(xx):+} & tradução, no idioma preferido, dos metadados da tradução, no idioma \texttt{xx}, da última edição \\* \hline \hline \texttt{!:+(yy)} & tradução, no idioma \texttt{yy}, dos metadados da última edição \\* \hline \texttt{!+:+(yy)} & tradução, no idioma \texttt{yy}, dos metadados da tradução, no idioma preferido, da última edição \\* \hline \texttt{!+(xx):+(yy)} & tradução, no idioma \texttt{yy}, dos metadados da tradução, no idioma \texttt{xx}, da última edição \\* \hline \end{tabular} \end{table} \end{comment} \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Modificadores de \textbf{URL persistente}.} \label{tab:modificadoribi} \begin{tabular}{p{1.6cm}p{8.5cm}} \hline \slshape Modificador & \slshape Retorno \\* \hline \hline \hspace{5mm}\texttt{:} & metadados \\* \hspace{5mm}\texttt{:+} & tradução dos metadados \\* \hline \hline \hspace{5mm}\texttt{!} & última edição \\* \hspace{5mm}\texttt{!+} & tradução da última edição \\* \hline \hspace{5mm}\texttt{!:} & metadados da última edição \\* \hspace{5mm}\texttt{!+:} & metadados da tradução da última edição \\* \hline \hspace{5mm}\texttt{!:+} & tradução dos metadados da última edição \\* \hspace{5mm}\texttt{!+:+} & tradução dos metadados da tradução da última edição \\* \hline \hline \hspace{5mm}\texttt{+} & tradução \\* \hspace{5mm}\texttt{+!} & última edição da tradução \\* \hline \hspace{5mm}\texttt{+:} & metadados da tradução \\* \hspace{5mm}\texttt{+!:} & metadados da última edição da tradução \\* \hline \hspace{5mm}\texttt{+:+} & tradução dos metadados da tradução \\* \hspace{5mm}\texttt{+!:+} & tradução dos metadados da última edição da tradução \\* \hline \hline \end{tabular} \end{table} %Sem parâmetros, o primeiro modificador (\texttt{:}) retorna os metadados em formato livre; parametrizado, na forma \texttt{:(BibTeX)} retorna os metadados no formato BibTeX \cite{Lamport:1986:DoPrSy} e na forma \texttt{:(BibINPE)} no formato BibINPE. Sem parâmetros, o primeiro modificador, \textsl{dois pontos} (\texttt{:}), retorna os metadados em formato livre; parametrizado, na forma \texttt{:(oai\_dc)}, retorna os metadados no formato \textsl{oai\_dc} \cite{LagozeSompNelsWarn:2002:OpArIn}. % Exemplo 6.2 \begin{example}[\textbf{URL persistentes} apontando para metadados] \label{exa:urlpersistentesparametadados} URL: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E:}{http://urlib.net/8JMKD3MGP8W/35MME4E:}} \end{center} \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E:(oai\_dc)}{http://urlib.net/8JMKD3MGP8W/35MME4E:(oai\_dc)}} \end{center} \qed \end{example} Ao acrescentar o modificador \textsl{dois pontos} (\texttt{:}) à primeira \textbf{URL persistente} do Exemplo~\ref{exa:urlpersistentes}, tem-se as URL do Exemplo~\ref{exa:urlpersistentesparametadados}. Uma \textbf{URL persistente} como a primeira deste exemplo, deve retornar em formato livre os metadados do \textbf{item identificado} (aqui, no exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}). Uma \textbf{URL persistente} como a segunda do exemplo, em que o modificador \textsl{dois pontos} (\texttt{:}) está parametrizado na forma \texttt{:(oai\_dc)}, deve retornar os metadados no formato \textsl{oai\_dc}. Sem parâmetros, o segundo modificador, \textsl{mais} (\texttt{+}), retorna a tradução no idioma de preferência selecionado pelo usuário em seu navegador; parametrizado, na forma \texttt{+(xx-XX)}, retorna a tradução no idioma definido por \texttt{xx-XX}. \begin{comment} A URL: \begin{center}\texttt{http://urlib.net/8JMKD3MGP8W/35MME4E}\end{center} é um exemplo de \textbf{URL persistente} que aponta para um \textbf{item identificado} escrito em inglês. Acrescentando o modificador \textsl{mais} (\texttt{+}), a nova URL: \begin{center}\texttt{http://urlib.net/8JMKD3MGP8W/35MME4E+}\end{center} é um exemplo de \textbf{URL persistente} que pode retornar uma tradução em português do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E} caso o idioma de preferência selecionado pelo usuário em seu navegador seja português. Se o idioma selecionado for inglês essa mesma \textbf{URL persistente} retornará o \textbf{item identificado} original, isto é, o escrito em inglês. Finalmente, parametrizando o modificador \textsl{mais} (\texttt{+}) na forma \texttt{+(pt)}, a URL: \begin{center}\texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E+(pt)}{http://urlib.net/8JMKD3MGP8W/35MME4E+(pt)}}\end{center} é um exemplo de \textbf{URL persistente} que deve retornar uma tradução em português do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}. \end{comment} % Exemplo 6.3 \begin{example}[\textbf{URL persistentes} apontando para uma tradução] \label{exa:urlpersistentesparatradução} URL: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E+}{http://urlib.net/8JMKD3MGP8W/35MME4E+}} \end{center} \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MME4E+(pt)}{http://urlib.net/8JMKD3MGP8W/35MME4E+(pt)}} \end{center} \qed \end{example} Ao acrescentar o modificador \textsl{mais} (\texttt{+}) à primeira \textbf{URL persistente} do Exemplo~\ref{exa:urlpersistentes}, que aponta para um \textbf{item de informação} escrito em inglês, tem-se as URL do Exemplo~\ref{exa:urlpersistentesparatradução}. Se o idioma de preferência selecionado pelo usuário em seu navegador for o inglês, então uma \textbf{URL persistente} como a primeira deste exemplo, deve retornar o próprio \textbf{item identificado} (aqui, no exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}), pois este está escrito em inglês. Se o idioma de preferência selecionado pelo usuário em seu navegador for o português, então uma \textbf{URL persistente} como esta, deve retornar, se existir, a tradução em português do \textbf{item identificado} (aqui, no exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}), senão deve retornar simplesmente a versão do item de informação no seu idioma original. Uma \textbf{URL persistente} como a segunda do exemplo, em que o modificador \textsl{mais} (\texttt{+}) está parametrizado na forma \texttt{+(pt)}, deve retornar, se existir, a tradução em português do \textbf{item identificado} (aqui, no exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}), independentemente do idioma de preferência selecionado no navegador. Se não existir, a URL persistente deve retornar um aviso informando que a tradução não existe. No caso do Exemplo~\ref{exa:urlpersistentesparatradução}, por extensão de linguagem, é aceita o uso do modificador +(en) para fazer referência também ao item de informação escrito em inglês, apesar deste não ser uma tradução propriamente dita, pois trata-se da versão original em inglês. \begin{comment} A URL:' \begin{center}\texttt{http://urlib.net/8JMKD3MGP8W/35MMLL8}\end{center} é um exemplo de \textbf{URL persistente} que retorna um \textbf{item identificado} publicado em 2002. Acrescentando o modificador \textsl{ponto de esclamação} (\texttt{!}), a nova URL: \begin{center}\texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8!}{http://urlib.net/8JMKD3MGP8W/35MMLL8!}}\end{center} é um exemplo de \textbf{URL persistente} que deve retornar a última edição (nesse exemplo, publicada em 2012, ou posterior) do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Acrescentando o modificador \textsl{dois pontos} com parâmetro \texttt{oai\_dc} (\texttt{:(oai\_dc)}), a nova URL: \begin{center}\texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}}\end{center} é um exemplo de \textbf{URL persistente} que deve retornar no formato \textsl{oai\_dc} os metadados da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. \end{comment} O terceiro modificador, \textsl{ponto de exclamação} (!), retorna a última edição. % Exemplo 6.4 \begin{example}[\textbf{URL persistentes} com um ou mais modificadores elementares] \label{exa:urlpersistentescommodificadores} URL: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8!}{http://urlib.net/8JMKD3MGP8W/35MMLL8!}} \end{center} \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}} \end{center} \qed \end{example} Ao acrescentar o modificador \textsl{ponto de exclamação} (\texttt{!}) à segunda \textbf{URL persistente} do Exemplo~\ref{exa:urlpersistentes}, tem-se as URL do Exemplo~\ref{exa:urlpersistentescommodificadores}. Uma \textbf{URL persistente} como a primeira deste exemplo, deve retornar a última edição (aqui, no exemplo, publicada em 2012, ou posterior) do \textbf{item identificado} (aqui, no exemplo, publicado em 2002 e com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}). Ao acrescentar o modificador \textsl{dois pontos} com parâmetro \texttt{oai\_dc} (\texttt{:(oai\_dc)}) à primeira \textbf{URL persistente} desse exemplo, tem-se a segunda URL. Uma \textbf{URL persistente} como esta, deve retornar no formato \textsl{oai\_dc} os metadados da última edição do \textbf{item identificado} (aqui, no exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}). Pela regra \texttt{pergunta} da Tabela~\ref{tab:urlpersistente}, o valor do componente \texttt{pergunta} da \textbf{URL persistente} deve ser uma lista de pares \texttt{=}. Por sua vez, alguns caracteres considerados especiais nos componentes \texttt{valor} devem ser codificados, como mostrado na Tabela~\ref{tab:codificacao}. Quando o par deve ser interpretado pelo \textbf{sistema para resolução de IBI}, o componente \texttt{nome} deve se decompor em um prefixo e um sufixo separados por \textsl{um ponto} (\texttt{.}), e o prefixo deve ser \texttt{ibiurl} (o prefixo \texttt{ibiurl} é para lembrar \textbf{URL persistente}). Caso contrário, o par será ignorado por este sistema. Os dois pares \texttt{=}, atualmente interpretados pelo \textbf{sistema para resolução de IBI}, são mostrados na Tabela~\ref{tab:ibiurl}. Nela, a coluna \textsl{Tipo} indica que os dois pares são facultativos (fac.). \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Pares \texttt{=} da URL persistente a serem interpretados pelo \textbf{sistema para resolução de IBI}.} \label{tab:ibiurl} \begin{tabular}{p{4.8cm}p{3.4cm}p{3.5cm}p{0.5cm}} \hline \multicolumn{3}{c}{\slshape Par} & \multicolumn{1}{c}{\slshape Tipo} \\* \cline{1-3} \multicolumn{1}{l}{\slshape Nome} & \multicolumn{2}{c}{\slshape Valor} & \\* \cline{2-3} & \multicolumn{1}{c}{\slshape Domínio} & \multicolumn{1}{c}{\slshape Significado} & \\* \hline \hline \texttt{ibiurl.requireditemstatus} & \texttt{"Original"} % \texttt{Secure Original} % \texttt{Global Original} & solicitação do original % com teste de unicidade % \textbf{original global} & \multicolumn{1}{c}{fac.} \\* \hline \texttt{ibiurl.verblist} & regra \texttt{lista-de-verbos} da Tabela~\ref{tab:listadeverbos} & \mbox{modificador de} \mbox{\textbf{URL persistente}} ex: \texttt{GetLastEdition} & \multicolumn{1}{c}{fac.} \\* \hline \hline \end{tabular} \end{table} % O primeiro par com nome \texttt{ibiurl.requireditemstatus} assume um dos três valores: \texttt{Original} para solicitar o original de um \textbf{item identificado}, \texttt{Secure Original} para que a solicitação seja acompanhada de um teste de unicidade, ou \texttt{Global Original} para solicitar o \textbf{original global} ou seja trans-sistema-de-identificação. % O primeiro par com nome \texttt{ibiurl.requireditemstatus} assume um dos dois valores: \texttt{Original} para solicitar o original de um \textbf{item identificado}, ou ``\texttt{Global Original}'' para solicitar o \textbf{original global}.% ou seja trans-sistema-de-identificação. O primeiro par com nome \texttt{ibiurl.requireditemstatus} assume o valor constante \texttt{Original} e é usado para solicitar o original de um \textbf{item de informação}. % A primeira opção é útil toda vez que se queira acessar por segurança o original em vez de uma cópia, lembrando, por exemplo, que a manutenção de um \textbf{item de informação} deve ser feita no original, e que a manutenção das cópias deve consistir apenas em copiar o original, o que pode não ocorrer imediatamente após o término da manutenção do original. Essa opção é útil toda vez que se queira acessar por segurança o original em vez de uma possível cópia, lembrando que, por exemplo, a manutenção de um \textbf{item de informação} deve ser feita no original, e a manutenção das cópias deve consistir apenas em copiar o original, o que pode não ocorrer imediatamente após o término da manutenção do original. % Na segunda opção, o original é retornado somente se armazenado em um único \textbf{Arquivo} como deve ser por definição (cf. \textbf{item identificado} tido como original na Seção \ref{itensoriginaisecopias}), caso contrário uma mensagem alerta que existem dois ou mais \textbf{Arquivos} sob suspeita e que uma investigação é necessária. % Na terceira opção, o \textbf{original global} é retornado podendo ser identificado com uso de um outro sistema de identificação que não seja o sistema de identificação por \textbf{IBI}. % Na segunda opção, o \textbf{original global} é retornado. Em \textbf{Arquivos} formando um repositório digital institucional, pode ser de interesse armazenar trabalhos já publicado em outros repositórios. Por exemplo, um repositório institucional pode hospedar, desde que respeita os termos de uso, cópias de artigos publicados em revistas científicas. Nesse caso, mesmo que o \textbf{item identificado} seja tido como original no sentido da Seção~\ref{itensoriginaisecopias}, do ponto de vista legal, este é uma cópia. Assim ao solicitar um \textbf{original global} por meio de um \textbf{IBI}, o \textbf{sistema para resolução} deve retornar o original do ponto de vista legal independente do \textbf{sistema de identificação} usado para sua identificação. O segundo par com nome \texttt{ibiurl.verblist} assume um valor verificando a regra gramatical \texttt{lista-de-verbos}. Como mostrado na Tabela~\ref{tab:listadeverbos}, a \texttt{lista-de-verbos} é formada a partir dos quatro verbos: \texttt{GetMetadata}, \texttt{GetLastEdition}, \texttt{GetTranslation} e \texttt{GetFileList}. Estes atuam como modificadores elementares da \textbf{URL persistente}. \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} % \small \footnotesize \caption{Regras definindo a formação de uma \texttt{lista-de-verbos}} \label{tab:listadeverbos} \begin{center} \begin{tabular}{rcl} \verb!lista-de-verbos! & \verb!=! & \verb![verbo *("+" verbo)]; ex: GetLastEdition+GetMetadata! \\ \verb!verbo! & \verb!=! & \verb!("GetTranslation" ["(" idioma ["-" país] ")"]) |! \\ & & \verb!"GetLastEdition" | ("GetMetadata" ["(" formato ")"]) |! \\ & & \verb!"GetFileList"! \\ \verb!idioma! & \verb!=! & \verb!2ALFAMI; ex: pt! \\ \verb!país! & \verb!=! & \verb!2ALFAMA; ex: BR! \\ \verb!formato! & \verb!=! & \verb!"oai_dc"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} Como mostrado na Tabela~\ref{tab:verbos}, os três primeiros verbos possuem sinônimos, que são os modificadores elementares de \textbf{URL persistente} já introduzidos nesta seção. Na prática, estes três verbos atuam da mesma forma que seus sinônimos. \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Verbos atuando como modificador elementar de \textbf{URL persistente}.} \label{tab:verbos} \begin{tabular}{p{2.6cm}p{1.5cm}p{2.5cm}} \hline \multicolumn{1}{c}{\slshape Verbo} & \multicolumn{1}{c}{\slshape Sinônimo} & \multicolumn{1}{c}{\slshape Retorno} \\* \hline \hline \texttt{GetMetadata} & \multicolumn{1}{c}{\texttt{:}} & metadados \\* \hline \texttt{GetLastEdition} & \multicolumn{1}{c}{\texttt{!}} & última edição \\* \hline \texttt{GetTranslation} & \multicolumn{1}{c}{\texttt{+}} & tradução \\* \hline \texttt{GetFileList} & \texttt{} & lista de arquivos \\* \hline \hline \end{tabular} \end{table} % Exemplo 6.5 \begin{example}[\textbf{URL persistente} modificada por uma lista de verbos] \label{exa:urlpersistenteslistaverbos} URL: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8?ibiurl.verblist=GetLastEdition+GetMetadata(oai\_dc)}{http://urlib.net/8JMKD3MGP8W/35MMLL8?}}\\ \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8?ibiurl.verblist=GetLastEdition+GetMetadata(oai\_dc)}{ibiurl.verblist=GetLastEdition+GetMetadata(oai\_dc)}} \end{flushleft} \qed \end{example} Ao acrescentar à segunda \textbf{URL persistente}, apresentada no Exemplo~\ref{exa:urlpersistentes}, o par \texttt{ibiurl.verblist=GetLastEdition+GetMetadata(oai\_dc)}, tem-se a \textbf{URL persistente} do Exemplo~\ref{exa:urlpersistenteslistaverbos}. Uma \textbf{URL persistente} como a deste exemplo, deve retornar no formato \textsl{oai\_dc} os metadados da última edição do \textbf{item identificado} (aqui, neste exemplo, com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}). Esta \textbf{URL persistente} é equivalente à segunda URL do Exemplo~\ref{exa:urlpersistentescommodificadores} que faz uso do modificador \texttt{!:(oai\_dc)}. Enquanto a posição dos três primeiros verbos (\texttt{GetMetadata}, \texttt{GetLastEdition} e \texttt{GetTranslation}) na lista de verbos \texttt{ibiurl.verblist} é pertinente, a posição do quarto verbo (\texttt{GetFileList}) é indiferente quanto ao resultado do retorno. Uma \textbf{URL persistente} modificada pelo verbo \texttt{GetFileList} deve retornar a lista de recursos (arquivos) que compõe o \textbf{item de informação} apontado pela mesma \textbf{URL persistente} porém sem esse verbo. A lista de recursos (arquivos) pode ser gerada em formato livre. % Exemplo 6.6 \begin{example}[\textbf{URL persistente} modificada retornando uma lista de recursos] \label{exa:urlpersistentelistarecursos} URL: \begin{center} \texttt{\href{http://urlib.net/LK47B6W/362SFKH?ibiurl.verblist=GetFileList}{http://urlib.net/LK47B6W/362SFKH?ibiurl.verblist=GetFileList}}\\ \end{center} \qed \end{example} Ao acrescentar à terceira \textbf{URL persistente}, apresentada no Exemplo~\ref{exa:urlpersistentes}, o par \texttt{ibiurl.verblist=GetFileList}, tem-se a URL do Exemplo~\ref{exa:urlpersistentelistarecursos}. Uma \textbf{URL persistente} como a deste exemplo, deve retornar a lista dos recursos (arquivos) que compõem o \textbf{item identificado} (aqui, neste exemplo, com \textbf{IBI} \texttt{LK47B6W/362SFKH}). Finalmente, em uma \textbf{URL persistente}, o componente \texttt{caminho} permite especificar um determinado recurso (arquivo) que compõe um certo \textbf{item de informação}. % Exemplo 6.7 \begin{example}[\textbf{URL persistente} retornando um recurso específico] \label{exa:urlpersistenterecursoespecifico} URL: \begin{center} \texttt{\href{http://urlib.net/LK47B6W/362SFKH/reference.bib}{http://urlib.net/LK47B6W/362SFKH/reference.bib}} \end{center} \qed \end{example} Ao acrescentar à terceira \textbf{URL persistente}, apresentada no Exemplo~\ref{exa:urlpersistentes}, o caminho \texttt{/reference.bib}, tem-se a URL do Exemplo~\ref{exa:urlpersistenterecursoespecifico}. Uma \textbf{URL persistente} como a deste exemplo, deve retornar apenas o conteúdo do arquivo especificado (aqui, neste exemplo, \texttt{/reference.bib}) que compõe o \textbf{item identificado} (aqui, neste exemplo, com \textbf{IBI} \texttt{LK47B6W/362SFKH}). Para merecer o qualificativo de ``persistent'' uma URL persistente apresentando o componente \texttt{caminho}, deve apontar para um recurso (arquivo) cujo nome \texttt{} se mantenha continuamente inalterado. \section{Processo de resolução} \label{sec:processoresolucao} O processo de resolução de \textbf{IBI} é detalhado no diagrama de sequência da Figura~\ref{fig:diagramasequenciaresolucaoIBI}. \begin{figure}[H] \caption{Diagrama de sequência do processo de resolução de \textbf{IBI}} \vspace{6mm} % acrescentar o espaçamento vertical apropriado entre o título e a borda superior da figura \begin{center} \begin{tikzpicture} \begin{umlseqdiag} \umlbasicobject[stereo=actor]{usuário} \umlbasicobject[x=4.4]{navegador} \umlbasicobject{resolvedor} \umlobject[class=Arquivo]{arquivo} \begin{umlcall}[op={1. Resolver \textbf{IBI}}, padding=3, return={10. item/alerta}, dt=5]{usuário}{navegador} \begin{umlcall}[op={2. Resolver \textbf{IBI}}, padding=3, return={7. URL/alerta}]{navegador}{resolvedor} \begin{umlfragment}[type=loop, name=loop, label={p/ cada arq.}, inner xsep=10] \begin{umlcall}[op={3. Solicitar URL}, padding=3, return={4. lista de URL}]{resolvedor}{arquivo} \end{umlcall} \end{umlfragment} \umlnote[x=2.21, y=-2.8]{loop}{repetir o \textsl{loop} para solicitar a URL de um eventual novo \textbf{IBI}} \begin{umlfragment}[type={\hspace{1.6mm}opt}, label={URL existe}, inner xsep=10] \begin{umlcall}[op={5. Agradecer}, padding=3, return={6. aviso}, dt=5]{resolvedor}{arquivo} \end{umlcall} \end{umlfragment} \end{umlcall} \begin{umlfragment}[type={\hspace{1.6mm}opt}, label={URL existe}, inner xsep=10] \begin{umlcall}[op={8. Trazer item de informação}, padding=3, return={9. item de informação}, dt=5]{navegador}{arquivo} \end{umlcall} \end{umlfragment} \end{umlcall} \end{umlseqdiag} \end{tikzpicture} \end{center} \vspace{4mm} % acrescentar o espaçamento vertical apropriado entre a borda inferior da figura e a legenda ou a fonte quando não há legenda (o valor pode ser negativo para subir) \legenda{Ao receber a mensagem ``Resolver \textbf{IBI}''~(2), o \textbf{resolvedor} endereça a mensagem ``Solicitar URL''~(3) a todos os \textbf{Arquivos} e cada um dos quais retorna, em seguida, uma ``lista de URL''~(4) (eventualmente vazia); após análise das respostas, caso a URL solicitada existir, o \textbf{resolvedor} emitirá uma mensagem ``Agradecer''~(5) para o \textbf{Arquivo} que a forneceu, e retornará essa URL~(7), senão emitirá um alerta. No caso da URL existir, ao recebê-la, o navegador a redireciona para esse \textbf{Arquivo}, na forma da mensagem ``Trazer item de informação''~(8). O ``item de informação''~(9) é retornado ao navegador que o exibe na tela do usuário~(10). No caso da URL não existir, o navegador exibirá na tela do usuário~(10) o alerta emitido pelo \textbf{resolvedor} indicando que o \textbf{item de informação} não foi encontrado.} % legenda - opcional \label{fig:diagramasequenciaresolucaoIBI} \FONTE{Produção do autor.} % fonte consultada (elemento obrigatório, mesmo que seja produção do próprio autor) \end{figure} O processo de resolução de \textbf{IBI} é desencadeado pela emissão da mensagem ``Resolver IBI''~(1), enviada pelo usuário ao seu navegador. Esta mensagem consiste em uma \textbf{URL persistente}, como descrita na Seção~\ref{sec:urlpersistente}. A emissão ocorre quando o usuário, após digitar no campo de endereço do seu navegador a \textbf{URL persistente}, clica no botão de envio da URL. Esta emissão pode ainda ocorrer quando o usuário clica num ponteiro persistente\footnote{Um ponteiro persistente é um ponteiro cujo valor é uma \textbf{URL persistente}.}, parte de um hipertexto. Em consequência da ativação de uma \textbf{URL persistente} pelo usuário, o navegador emite a mensagem ``Resolver IBI''~(2) endereçada ao \textbf{resolvedor} \texttt{urlib.net} por meio do protocolo HTTP, reproduzindo a própria \textbf{URL persistente} de solicitação de resolução do \textbf{IBI} escolhido pelo usuário. Ao receber a mensagem ``Resolver IBI''~(2) na forma de uma \textbf{URL persistente}, o \textbf{resolvedor} captura dados sobre o usuário e dados extraídos da \textbf{URL persistente}, como apresentado na Tabela~\ref{tab:dadoscapturados}. % >>>> clientinformation.ipaddress % >>>> clientinformation.languagepreference % >>>> parsedibiurl.filepath % >>>> parsedibiurl.ibi % >>>> ibiurl.requireditemstatus (não repassado) % >>>> ibiurl.verblist (até 4 verbos) \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Dados capturados pelo \textbf{resolvedor} ao receber uma \textbf{URL persistente}.} \label{tab:dadoscapturados} \begin{tabular}{p{7.2cm}p{3.6cm}p{2cm}} \hline % \slshape Nome \multicolumn{1}{c}{\slshape Nome} & % \slshape Significado \multicolumn{1}{c}{\slshape Significado} & \multicolumn{1}{c}{\slshape Repassado} \\* \hline \hline \texttt{clientinformation.ipaddress} & IP do usuário & \multicolumn{1}{c}{sim} \\* \hline \texttt{clientinformation.languagepreference} & preferência de idioma do usuário & \multicolumn{1}{c}{não} \\* \hline \texttt{parsedibiurl.filepath} & caminho até o recurso (arquivo) & \multicolumn{1}{c}{sim} \\* \hline \texttt{parsedibiurl.ibi} & \textbf{IBI} objeto de resolução & \multicolumn{1}{c}{sim} \\* \hline \texttt{parsedibiurl.requireditemstatus} & valor solicitado para o \textbf{estado} do \textbf{item de informação} & \multicolumn{1}{c}{não} \\* \hline \texttt{parsedibiurl.verblist} & lista de verbos & \multicolumn{1}{c}{sim} \\* \hline \hline \end{tabular} \end{table} Os valores das variáveis \texttt{parsedibiurl.filepath}, \texttt{parsedibiurl.ibi}, \texttt{parsedibiurl.requireditemstatus} e \texttt{parsedibiurl.verblist} são os valores extraidos da \textbf{URL persistente}. Precisamente, o valor de \texttt{parsedibiurl.filepath} é o valor do componente \texttt{caminho}; o valor de \texttt{parsedibiurl.ibi}, o valor do componente \texttt{ibi}; o valor de \texttt{parsedibiurl.requireditemstatus}, o valor do par com nome \texttt{ibiurl.requireditemstatus} do componente \texttt{pergunta}; e o valor de \texttt{parsedibiurl.verblist}, a união (sem repetição e sem modificação de ordem) dos verbos cujos sinônimos constam do componente \texttt{mdf} e dos verbos que constam no par com nome \texttt{ibiurl.verblist} do componente \texttt{pergunta}. % Exemplo 6.8 % http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Original&ibiurl.verblist=GetMetadata % http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Secure+Original&ibiurl.verblist=GetMetadata \begin{example}[Dados capturados pelo \textbf{resolvedor} ao receber uma \textbf{URL persistente}] \label{exa:dadoscapturados} \textbf{URL persistente}: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \normalsize % \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Secure+Original\&ibiurl.verblist=GetMetadata}{http://urlib.net/LK47B6W/362SFKH+?}}\\ % \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Secure+Original\&ibiurl.verblist=GetMetadata}{ibiurl.requireditemstatus=Secure+Original\&}}\\ % \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Secure+Original\&ibiurl.verblist=GetMetadata}{ibiurl.verblist=GetMetadata}} \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Original\&ibiurl.verblist=GetMetadata}{http://urlib.net/LK47B6W/362SFKH+?}}\\ \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Original\&ibiurl.verblist=GetMetadata}{ibiurl.requireditemstatus=Original\&}}\\ \texttt{\href{http://urlib.net/LK47B6W/362SFKH+?ibiurl.requireditemstatus=Original\&ibiurl.verblist=GetMetadata}{ibiurl.verblist=GetMetadata}} \end{flushleft} Ao receber a solicitação de resolução desta URL persistente, o revolvedor capturou os dados da Tabela~\ref{tab:exemplodadosusuario} sobre o usuário (navegador) que emitiu esta solicitação. \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Dados sobre o usuário.} \label{tab:exemplodadosusuario} \begin{tabular}{p{6.8cm}p{6.0cm}} \hline \multicolumn{1}{c}{\slshape Nome} & \multicolumn{1}{c}{\slshape Valor} \\* \hline \hline \texttt{clientinformation.ipaddress} & \texttt{150.163.2.175} \\* \hline \texttt{clientinformation.languagepreference} & \texttt{pt-br,fr;q=0.8,en;q=0.5,pt;q=0.3} \\* \hline \hline \end{tabular} \end{table} \vspace{-6mm} \qed \end{example} A Tabela~\ref{tab:exemplodadosusuario} do Exemplo~\ref{exa:dadoscapturados} mostra os dois pares nome/valor que informaram sobre o usuário, e a Tabela~\ref{tab:exemplodadosextraidos}, os três que foram extraídos da \textbf{URL persistente} exemplificada. \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Dados extraídos da \textbf{URL persistente}.} \label{tab:exemplodadosextraidos} \begin{tabular}{p{6.8cm}p{6.0cm}} \hline \multicolumn{1}{c}{\slshape Nome} & \multicolumn{1}{c}{\slshape Valor} \\* \hline \hline \texttt{parsedibiurl.filepath} & \multicolumn{1}{c}{(indefinido)} \\* \hline \texttt{parsedibiurl.ibi} & \texttt{LK47B6W/362SFKH} \\* \hline \texttt{parsedibiurl.requireditemstatus} & % \texttt{Secure Original} \texttt{Original} \\* \hline \texttt{parsedibiurl.verblist} & \texttt{GetTranslation GetMetadata} \\* \hline \hline \end{tabular} \end{table} Na etapa seguinte, somente parte dos dados da Tabela~\ref{tab:dadoscapturados}, como indicado na coluna três, será repassada aos \textbf{Arquivos}. Por razões de privacidade, a preferência de idioma que consta no navegador do usuário (\texttt{clientinformation.languagepreference}) não está sendo repassada aos \textbf{Arquivos}; esta é tratada somente pelo \textbf{resolvedor}. Por razões de simplicidade na concepção do \textbf{serviço de Arquivo} e de segurança do funcionamento do \textbf{sistema para resolução de IBI}, o \textsl{status} do \textbf{item de informação} solicitado (\texttt{parsedibiurl.requireditemstatus}), também não está sendo repassado aos \textbf{Arquivos}. Quando o \textsl{status} de original é solicitado, um \textbf{Arquivo} mal-intencionado, que informar irregularmente estar hospedando um original do \textbf{item de informação}, poderá ser descoberto pelo \textbf{resolvedor} e, por isto, os \textbf{Arquivos}não podem tomar conhecimento dessa solicitação. Em seguida, então, o \textbf{resolvedor} endereça a mensagem ``Solicitar URL''~(3) a todos os \textbf{Arquivos} cadastrados e incluídos no \textbf{sistema para resolução de IBI} (cf. Seção \ref{sec:incluirexcluirarquivo}). Essa solicitação é feita conforme o formato de solicitação de serviço da Seção~\ref{sec:formatosolicitacao}, anexando à URL de base todos os pares, ou parte deles, apresentados na Tabela~\ref{tab:solicitacaourl}. \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Pares \texttt{=} a serem anexados à URL de base para a mensagem ``Solicitar URL''~(3) endereçada aos \textbf{Arquivos} pelo \textbf{resolvedor}.} \label{tab:solicitacaourl} \begin{tabular}{p{5.3cm}p{3.3cm}p{3.5cm}p{0.5cm}} \hline \multicolumn{3}{c}{\slshape Par} & \multicolumn{1}{c}{\slshape Tipo} \\* \cline{1-3} \multicolumn{1}{l}{\slshape Nome} & \multicolumn{2}{c}{\slshape Valor} & \\* \cline{2-3} & \multicolumn{1}{c}{\slshape Domínio} & \multicolumn{1}{c}{\slshape Significado} & \\* \hline \hline \texttt{servicesubject} & \texttt{"urlRequest"} & solicitação de URL & \multicolumn{1}{c}{obr.} \\* \hline \texttt{clientinformation.ipaddress} & regra \texttt{\texttt{lista-de-IP}} da tabela~\ref{tab:listadeip} & endereço IP do usuário solicitando a resolução de um \textbf{IBI} ex: \texttt{150.163.2.175} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{parsedibiurl.filepath} & regra \texttt{path-absolute} em \citeonline{BernersFielMasi:2005:UnReId} & caminho do recurso (arquivo) ex: \texttt{/reference.bib} & \multicolumn{1}{c}{fac.} \\* \hline \texttt{parsedibiurl.ibi} & regra \texttt{repositório} ou \texttt{IBIp} em \citeonline{Banon:2011:SiId} & \textbf{IBI} objeto de resolução ex: \texttt{LK47B6W/362SFKH} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{parsedibiurl.verblist} & % \texttt{GetFileList} regra \texttt{lista-de-verbos} da Tabela~\ref{tab:listadeverbos} & % a URL solicitada deve retornar uma lista de arquivos \mbox{modificador de} \mbox{\textbf{URL persistente}} & \multicolumn{1}{c}{fac.} \\* \hline \hline \end{tabular} \end{table} A Tabela~\ref{tab:listadeip} especifica as regras de formação da regra \texttt{lista-de-IP} usada na definição do domínio dos valores do par com nome \texttt{clientinformation.ipaddress} da Tabela~\ref{tab:solicitacaourl}. A especificação utiliza a notação BNF (aumentada) e as regras predefinidas: \texttt{IPv4} e \texttt{IPv6}, introduzidas em \citeonline{BernersFielMasi:2005:UnReId}. Na lista de IP, o primeiro elemento é o IP do usuário. Caso existirem outros elementos, estes são os IP dos seus sucessivos procuradores (\textsl{proxy servers})\footnote{Em algumas situações, o primeiro elemento da lista de IP pode não ser do usuário, mas sim o do seu procurador final.}. % lista-de-IP = IP *(SP IP) % IP = IPv4 | IPv6 % \cite{BernersFielMasi:2005:UnReId} \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de uma \texttt{lista-de-IP}} \label{tab:listadeip} \begin{center} \begin{tabular}{rcl} \verb!lista-de-IP! & \verb!=! & \verb!IP *(SP IP); ex: 172.16.44.200 150.163.68.1! \\ \verb!IP! & \verb!=! & \verb!IPv4 | IPv6! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} Um exemplo de mensagem do tipo ``Solicitar URL''~(3) já foi dada no Exemplo~\ref{exa:solicitacaoservico}. Em resposta à solicitação do \textbf{resolvedor}, cada \textbf{Arquivo} retorna uma ``lista de URL''~(4) (eventualmente vazia), conforme descrito na Seção~\ref{chap:servicoarquivo}. Ao receber as respostas dos \textbf{Arquivos}, o \textbf{resolvedor} executa a análise delas. \begin{comment} Se a variável \texttt{parsedibiurl.requireditemstatus} existir e seu valor for %``\texttt{Secure Original}'' \texttt{Original} ou ``\texttt{Global Original}'', então o \textbf{resolvedor} analisará todas as respostas. Se todas as respostas não vazias contiverem a URL para o \textbf{item de informação} solicitado então o \textbf{resolvedor} verificará se não existe duas ou mais respostas reivindicando o \textbf{item de informação} como original. Se houver uma única resposta reivindicando o \textbf{item de informação} como original, então o \textbf{resolvedor} selecionará essa resposta, senão emitirá um alerta. \end{comment} Se a variável \texttt{parsedibiurl.requireditemstatus} existir (seu valor será \texttt{Original}), então o \textbf{resolvedor} analisará todas as respostas que satisfazem a mensagem ``Solicitar URL''~(3). Se todas as respostas não vazias contiverem a URL para o \textbf{item de informação} solicitado, então o \textbf{resolvedor} verificará se não existem duas ou mais respostas reinvindicando o \textbf{item de informação} como original. Se houver uma única resposta reinvindicando o \textbf{item de informação} como original, então o \textbf{resolvedor} selecionará essa resposta, caso contrário, emitirá um alerta informando que existem dois ou mais \textbf{Arquivos} sob suspeita e que uma investigação é necessária. Em todos os outros casos, o \textbf{resolvedor} selecionará a primeira resposta não vazia que satisfaz a mensagem ``Solicitar URL''~(3). Nesses casos, se a resposta não contiver ainda a URL para o \textbf{item de informação} solicitado, então o \textbf{resolvedor} endereçará uma nova mensagem ``Solicitar URL''~(3) a todos os \textbf{Arquivos} (cf. a nota em verde ligado ao fragmento \textsl{loop} da Figura~\ref{fig:diagramasequenciaresolucaoIBI}). Nessa nova mensagem, o valor do par com nome \texttt{parsedibiurl.ibi} será, entre os \textbf{IBI} contidos na resposta selecionada, aquele que atende à lista de verbos que consta no par \texttt{parsedibiurl.verblist} capturado da \textbf{URL persistente} (cf. Tabela~\ref{tab:dadoscapturados}). O processo se repetirá até que a resposta selecionada pelo \textbf{resolvedor} contenha a URL para o \textbf{item de informação} solicitado (cf. o exemplo da Seção \ref{sec:exemplocommodificador}). Após ter encontrado a URL apropriada à solicitação de resolução de \textbf{IBI}, o \textbf{resolvedor}, emite uma mensagem ``Agradecer''~(5) para o \textbf{Arquivo} que forneceu essa URL. A mensagem é construída conforme o formato de solicitação de serviço da Seção~\ref{sec:formatosolicitacao}, anexando à URL de base todos os pares apresentados na Tabela~\ref{tab:agradecimento}. Nessa tabela os valores dos pares com nome \texttt{contenttype}, \texttt{ibi}, \texttt{state}, \texttt{url} e \texttt{urlkey} são os valores dos pares com os mesmos nomes recebidos do próprio Arquivo (ver Seção~\ref{sec:respostas}). O par com nome \texttt{ibi} é do tipo facultivo (fac.), porque um Arquivo não é obrigado a fornecer o IBI de todos itens de informação apontados por uma URL persistente modificada (por exemplo, no caso em que os metadados não possuem IBI). Para mais detalhes, ver a rotina \textsc{CriarParIBI} na Seção ~\ref{sec:respostas}. \begin{table}[h] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Pares \texttt{=} a serem anexados à URL de base para a mensagem ``Agradecer''~(5) endereçada ao \textbf{Arquivo} pelo \textbf{resolvedor}.} \label{tab:agradecimento} \begin{tabular}{p{5.3cm}p{3.6cm}p{3.6cm}p{0.5cm}} \hline \multicolumn{3}{c}{\slshape Par} & \multicolumn{1}{c}{\slshape Tipo} \\* \cline{1-3} \multicolumn{1}{l}{\slshape Nome} & \multicolumn{2}{c}{\slshape Valor} & \\* \cline{2-3} & \multicolumn{1}{c}{\slshape Domínio} & \multicolumn{1}{c}{\slshape Significado} & \\* \hline \hline \texttt{servicesubject} & \texttt{"acknowledgment"} & agradecimento & \multicolumn{1}{c}{obr.} \\* \hline \texttt{clientinformation.ipaddress} & regra \texttt{\texttt{lista-de-IP}} da tabela~\ref{tab:listadeip} & endereço IP do usuário que solicitou a resolução de um \textbf{IBI} ex: \texttt{150.163.2.175} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{contenttype} & \texttt{``Data'' | ``Metadata''} & tipo de conteúdo do \textbf{item de informação} apontado pela \textbf{URL persistente} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{ibi} & regra \texttt{formas-de-ibi} da Tabela~\ref{tab:formasdeibi} & formas de \textbf{IBI} identificando o \textbf{item de informação} apontado pela \textbf{URL persistente} & \multicolumn{1}{c}{fac.} \\* \hline \texttt{state} & \texttt{``Original'' | ``Copy''} & \textbf{estado} do \textbf{item de informação} apontado pela \textbf{URL persistente} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{url} & regra \texttt{URI} em Seção~3 de \cite{BernersFielMasi:2005:UnReId} com \texttt{scheme} valendo \texttt{http} & URL de acesso ao \textbf{item de informação} apontado pela \textbf{URL persistente} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{url.persistent} & regra \texttt{URL-persistente} da Tabela~\ref{tab:urlpersistente} & \textbf{URL persistente} na origem da solicitação de resolução de \textbf{IBI} & \multicolumn{1}{c}{obr.} \\* \hline \texttt{urlkey} & regra \texttt{chave} da Tabela~\ref{tab:chave} & chave de URL constando da mensagem ``lista de URL''~(4) recebida do \textbf{Arquivo} & \multicolumn{1}{c}{obr.} \\* \hline \hline \end{tabular} \end{table} A mensagem de agradecimento pode ser útil para os \textbf{Arquivos} que queiram, por exemplo, manter estatísticas de acesso aos \textbf{itens identificados}, pois, quando recebida por um \textbf{Arquivo}, ela indica que um determinado \textbf{item de informação} armazenado nele foi selecionado no processo de resolução de \textbf{IBI} e deverá ser retornado ao usuário do \textbf{sistema para resolução de IBI} na fase final do processo de resolução. % Exemplo 6.9 \begin{example}[mensagem de agradecimento emitida pelo \textbf{resolvedor}] \label{exa:mensagemdeagradecimento} URL: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \footnotesize % http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment&clientinformation.ipaddress=150.163.2.175&contenttype=Data&ibi=rep+sid.inpe.br/mtc-m19/2013/09.04.12.27.57+ibip+8JMKD3MGP7W/3EPGUE5&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat%f3rio+Final.pdf&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5&urlkey=1424636122-5331490054869684 \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{servicesubject=acknowledgment\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{clientinformation.ipaddress=150.163.2.175\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{contenttype=Data\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{Relat\%f3rio\%20Final.pdf\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&}}\\ \texttt{\href{http://mtc-m16d.sid.inpe.br/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?servicesubject=acknowledgment\&clientinformation.ipaddress=150.163.2.175\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m19/2013/09.04.12.27.57\%20ibip\%208JMKD3MGP7W/3EPGUE5\&url=http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf\&url.persistent=http://mtc-m16d.sid.inpe.br:80/8JMKD3MGP7W/3EPGUE5\&urlkey=1424636122-5331490054869684}{urlkey=1424636122-5331490054869684}} \end{flushleft} \qed \end{example} No Exemplo~\ref{exa:mensagemdeagradecimento}, a URL é a mensagem ``Agradecer''~(5) enviada pelo \textbf{resolvedor} ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16d.sid.inpe.br} e com \textbf{serviço de Arquivo} identificado pelo \textbf{IBI} \texttt{sid.inpe.br/mtc-m19@80/2009/08.21.17.02}. À URL de base estão anexados os pares definidos na Tabela~\ref{tab:agradecimento}. O par \texttt{clientinformation.ipaddress=150.163.2.175} informa que a \textbf{URL persistente} foi emitida pelo usuário com IP \texttt{150.163.2.175}. O par \texttt{contenttype=Data} indica que o \textbf{item de informação} selecionado é do tipo dados (e não metadados). O par com nome \texttt{ibi} indica que seu ibi é \texttt{sid.inpe.br/mtc-m19/2013/09.04.12.27.57} (na forma de \textbf{nome de repositório uniforme}) e \texttt{8JMKD3MGP7W/3EPGUE5} (na forma opaca de \textbf{IBIp}). Finalmente, os três últimos pares com nomes \texttt{url}, \texttt{url.persistent} e \texttt{urlkey} informam, respectivamente, a URL de acesso ao \textbf{item de informação}, a \textbf{URL persistente} que deu origem à solicitação de resolução de \textbf{IBI} e a chave de URL fornecido pelo \textbf{Arquivo} no momento de retornar a mensagem ``lista de URL''~(4). Após emitir a mensagem de agradecimento, o \textbf{resolvedor} retorna a URL de acesso ao \textbf{item de informação}, resultado do processo de resolução, ao navegador do usuário. Ao receber a URL~(7), o navegador emite a mensagem ``Trazer item de informação''~(8) endereçada ao \textbf{Arquivo} selecionado, reproduzindo a URL recebida. O \textbf{Arquivo} então retorna o \textbf{item de informação}~(9) ao navegador do usuário para sua exibição~(10). Se a análise das respostas recebidas pelo \textbf{resolvedor} indicar que o \textbf{IBI} objeto da resolução não existe ou foi removido, então o \textbf{resolvedor} não emitirá nenhuma mensagem de agradecimento, e retornará para o navegador do usuário uma mensagem de alerta~(7). \chapter{Serviço de Arquivo} \label{chap:servicoarquivo} \section{Solicitações} \label{sec:solicitacoes} O ``serviço de \textbf{Arquivo} para resolução de \textbf{IBI}'', ou simplesmente \textbf{serviço de Arquivo}, é um programa de computador, geralmente um \textsl{script} CGI (\textsl{Common Gateway Interface}), que recebe solicitações da \textsl{Web} e retorna respostas. Cada \textbf{Arquivo} deve ter seu próprio \textbf{serviço de Arquivo} e torná-lo um \textbf{item identificado} tido como original intransferível. O \textbf{serviço de Arquivo} é solicitado pelo \textbf{resolvedor} em três circunstâncias. A primeira, quando o \textbf{resolvedor} solicita a confirmação de inclusão do \textbf{Arquivo} no \textbf{sistema para resolução de IBI}, ao emitir a mensagem ``Solicitar confirmação''~(3) do Diagrama~\ref{fig:diagramasequenciainclusaoexclusao} da Seção \ref{sec:incluirexcluirarquivo}. Nesse caso, o \texttt{servicesubject} é \texttt{inclusionConfirmationRequest}, e apenas o par \texttt{servicesubject=inclusionConfirmationRequest} é anexado à URL de base (cf. Exemplo \ref{exa:solicitacaoconfirmacao}). A segunda, quando o \textbf{resolvedor} solicita, a todos os \textbf{Arquivos} incluídos no \textbf{sistema para resolução de IBI}, a URL de acesso ao \textbf{item de informação} apontado pela \textbf{URL persistente}, isto é, quando emitir a mensagem ``Solicitar URL''~(3) do Diagrama~\ref{fig:diagramasequenciaresolucaoIBI} da Seção \ref{sec:processoresolucao}. Nesse caso, o \texttt{servicesubject} é \texttt{urlRequest} e os parâmetros da solicitação são os quatro últimos pares da Tabela~\ref{tab:solicitacaourl} (cf. Exemplo~\ref{exa:solicitacaoservico}). % Finalmente, a terceira, quando o \textbf{resolvedor}, após selecionar um \textbf{Arquivo} que possua o \textbf{item de informação} cujas especificações atendem à solicitação de resolução de \textbf{IBI}, emite a mensagem ``Agradecer''~(5) do Diagrama~\ref{fig:diagramasequenciaresolucaoIBI} da Seção \ref{sec:processoresolucao}. Nesse caso, o \texttt{servicesubject} é \texttt{acknowledgment} e os parâmetros do agradecimento são os sete últimos pares da Tabela~\ref{tab:agradecimento} (cf. Exemplo~\ref{exa:mensagemdeagradecimento}). Finalmente, a terceira, quando o \textbf{resolvedor} emite a mensagem ``Agradecer''~(5) do Diagrama~\ref{fig:diagramasequenciaresolucaoIBI} da Seção \ref{sec:processoresolucao} para o \textbf{Arquivo} que possua o \textbf{item de informação} cujas especificações atendam a uma solicitação de resolução de \textbf{IBI}. Nesse caso, o \texttt{servicesubject} é \texttt{acknowledgment} e os parâmetros do agradecimento são os sete últimos pares da Tabela~\ref{tab:agradecimento} (cf. Exemplo~\ref{exa:mensagemdeagradecimento}). \section{Respostas} \label{sec:respostas} As regras gramaticais e as descrições semânticas que devem guiar a resposta dada à solicitação dos três serviços mencionados na seção anterior são apresentadas por meio do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}) e de seus componentes: as rotinas apresentadas na Tabela~\ref{tab:componente1}. Nesta seção, para distinguir entre nomes de variável e seus valores, os valores serão denotados entre aspas (\texttt{``''}). \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Componentes do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}).} \label{tab:componente1} \begin{tabular}{p{6.6cm}p{1.5cm}} \hline \multicolumn{1}{c}{\slshape Componente} & \multicolumn{1}{c}{\slshape Página} \\* \hline Rotina \hyperlink{pro:decodqs}{\textsc{DecodQS}} & \multicolumn{1}{c}{\pageref{pro:decodqs}} \\* \hline % Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) & \multicolumn{1}{c}{\pageref{alg:montarlistadeurl}} \\* Rotina \hyperlink{pro:montar}{\textsc{MontarListaDeURL}} & \multicolumn{1}{c}{\pageref{pro:montar}} \\* \hline Rotina \hyperlink{pro:filtrar}{\textsc{FiltrarListaDeURL}} & \multicolumn{1}{c}{\pageref{pro:filtrar}} \\* \hline \end{tabular} \end{table} \clearpage %\topskip0pt \vspace*{\fill} \begin{nicealgo}{alg:montarresposta} \naTITLE{\textsc{MontarResposta}.} \naPREAMBLE \naGLOBAL{\textnormal{\texttt{clientinformation.ipaddress}} \textnormal{(}IP usuário -- criado nesse algoritmo -- usado por \textsc{MontarListaDeURL}\textnormal{)},} \naCONTINUE{\textnormal{\texttt{parsedibiurl.filepath}} \textnormal{(}caminho de recurso -- criado nesse algoritmo -- usado por \textsc{MontarListaDeURL}\textnormal{)},} % \naCONTINUE{\textnormal{\texttt{parsedibiurl.requireditemstatus}} \textnormal{(}status solicitado de item de informação\textnormal{)},} \naCONTINUE{\textnormal{\texttt{parsedibiurl.verblist}} \textnormal{(}lista de verbos -- criada nesse algoritmo -- usada por \textsc{MontarListaDeURL} e por \textsc{FiltrarListaDeURL}\textnormal{)}.} \naINPUT{\textnormal{\texttt{qs}} \textnormal{(}lista de pares \textnormal{\texttt{=}} anexados à URL de base da mensagem \textnormal{\mbox{``Solicitar~URL''~(3)}}\textnormal{)}.} \naOUTPUT{\textnormal{\texttt{resposta}} \textnormal{(}lista de pares\textnormal{)}.} % \naAUX{\textnormal{\texttt{parsedibiurl.ibi}} \textnormal{(}cadeia de caracteres especificando o \textbf{IBI} objeto de resolução\textnormal{)}.} % \naCONTINUE{\textnormal{\texttt{servicesubject}} \textnormal{(}uma de três cadeis de caracteres especificando o assunto do serviço\textnormal{)}.} \naBODY \na{$\texttt{servicesubject} \mget \textsc{DecodQS}(\texttt{qs}, \texttt{``servicesubject''})$} \naBEGIN{\naIF $\texttt{servicesubject} = \texttt{``inclusionConfirmationRequest''}$ \naTHEN} % \na{$\texttt{resposta} \mget \textsc{MontarConfirmação}$} \na{$\texttt{resposta} \mget \texttt{``confirmation yes''}$} \naENDN{1}{\naRETURN} \naBEGIN{\naIF $\texttt{servicesubject} = \texttt{``urlRequest''}$ \naTHEN} \na{$\texttt{clientinformation.ipaddress} \mget \textsc{DecodQS}(\texttt{qs}, \texttt{``clientinformation.ipaddress''})$} \naBEGIN{\naIF \texttt{``parsedibiurl.filepath''} presente em \texttt{qs} \naTHEN} \naENDN{1}{$\texttt{parsedibiurl.filepath} \mget \textsc{DecodQS}(\texttt{qs}, \texttt{``parsedibiurl.filepath''})$} \naBEGIN{\naELSE} \naENDN{1}{$\texttt{parsedibiurl.filepath} \mget \texttt{``''}$} \na{$\texttt{parsedibiurl.ibi} \mget \textsc{DecodQS}(\texttt{qs}, \texttt{``parsedibiurl.ibi''})$} \naBEGIN{\naIF \texttt{``parsedibiurl.verblist''} presente em \texttt{qs} \naTHEN} \naENDN{1}{$\texttt{parsedibiurl.verblist} \mget \textsc{DecodQS}(\texttt{qs}, \texttt{``parsedibiurl.verblist''})$} \naBEGIN{\naELSE} \naENDN{1}{$\texttt{parsedibiurl.verblist} \mget \texttt{``''}$} \na{$\texttt{resposta} \mget \textsc{MontarListaDeURL}(\texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{FiltrarListaDeURL}(\texttt{resposta}, \texttt{parsedibiurl.verblist})$} % \na{$\texttt{resposta} \mget \textsc{MontarListaDeURL}(\texttt{parsedibiurl.ibi},$} % \na{$\hspace{57.5mm}\texttt{parsedibiurl.filepath},$} % \na{$\hspace{57.5mm}\texttt{parsedibiurl.verblist})$} \naENDN{1}{\naRETURN} \naBEGIN{\naIF $\texttt{servicesubject} = \texttt{``acknowledgment''}$ \naTHEN} % \na{$\texttt{resposta} \mget \textsc{MontarRecibo}$} \na{$\texttt{resposta} \mget \texttt{``notice \{acknowledgment received\}''}$} \naENDN{1}{\naRETURN} \end{nicealgo} \begin{comment} \begin{nicealgo}{alg:montarconfirmação} \naTITLE{\textsc{MontarConfirmação}.} \naPREAMBLE \naOUTPUT{\textnormal{\texttt{resposta}} \textnormal{(}lista de pares reduzida a um par\textnormal{)}.} \naBODY \na{$\texttt{resposta} \mget \texttt{``confirmation yes''}$} \na{\naRETURN{\texttt{resposta}}} \end{nicealgo} \end{comment} \vspace*{\fill} \clearpage \hypertarget{pro:decodqs}{} O Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}) usa a rotina \textsc{DecodQS}\label{pro:decodqs} (Decodificação da \textsl{Query String}). Essa rotina extrai da cadeia de caracteres informada em seu primeiro argumento a cadeia de caracteres correspondente ao valor do par \texttt{=}, cujo nome é informado em seu segundo argumento. % Exemplo 7.1 \begin{example}[Funcionamento da rotina \textsc{DecodQS}] \label{exa:funcionamentodecodqs} A execução de: \begin{equation*} \textsc{DecodQS}(\texttt{qs}, \texttt{``servicesubject''}) \end{equation*} onde o valor da variável \texttt{qs} era a cadeia de caracteres: \renewcommand{\baselinestretch}{0.9} \normalsize \texttt{servicesubject=urlRequest\&}\\ \texttt{clientinformation.ipaddress=150.163.2.175\&}\\ \texttt{parsedibiurl.ibi=8JMKD3MGP7W/3EPGUE5} \renewcommand{\baselinestretch}{1} \normalsize resultou na cadeia de caracteres: \begin{equation*} \texttt{urlRequest} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentodecodqs}, a rotina \textsc{DecodQS} é usada para extrair da cadeia de caracteres em \texttt{qs} a cadeia de caracteres que especificou o assunto da solicitação de serviço enviada ao \textbf{Arquivo} (aqui, nesse exemplo, \texttt{urlRequest}). No exemplo, a cadeia de caracteres em \texttt{qs} escolhida é a lista de pares \texttt{=} anexados à URL de base da mensagem de solicitação de serviço do Exemplo~\ref{exa:solicitacaoservico}. Esta é uma possível mensagem ``Solicitar~URL''~(3) da Figura \ref{fig:diagramasequenciaresolucaoIBI}. A primeira etapa do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}) consiste em extrair (Linha 1) da variável de entrada \texttt{qs} o valor do par \texttt{servicesubject=} anexado à URL de base da mensagem endereçada ao \textbf{Arquivo}. Este valor, dado por \textsc{DecodQS}(\texttt{qs}, \texttt{``servicesubject''}), é guardado na variável \texttt{servicesubject}. Se o valor da variável \texttt{servicesubject} for \texttt{``inclusionConfirmationRequest''}, então a resposta deverá ser a constante \texttt{``confirmation yes''} (Linha 3). Se o valor da variável \texttt{servicesubject} for \texttt{``acknowledgment''}, então a resposta deverá ser a constante \texttt{``notice \{acknowledgment received\}''} (Linha 20). Se o valor da variável \texttt{servicesubject} for \texttt{``urlRequest''}, então a resposta deverá ser a da rotina \textsc{MontarListaDeURL} (Linha 16) ou, de modo opcional, sua versão filtrada dada pela rotina \textsc{FiltrarListaDeURL} (Linha 17). % Para o funcionamento dessas rotinas, o Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}) deve capturar (Linhas 6 a 15), por meio da rotina \textsc{DecodQS}, os valores de mais quatro possíveis pares \texttt{=} anexados à URL de base da mensagem endereçada ao \textbf{Arquivo}. Esses pares são os quatro últimos da Tabela~\ref{tab:solicitacaourl}, dois deles são facultativos. Os valores capturados são guardados nas variáveis: \texttt{clientinformation.ipaddress}, \texttt{parsedibiurl.filepath}, \texttt{parsedibiurl.ibi} e \texttt{parsedibiurl.verblist}. Quando um par não está presente na variável \texttt{qs}, o valor guardado é a cadeia de caracteres vazia (Linhas 10 e 15). Das quatro variáveis, a primeira, a segunda e a última, são globais e serão usadas no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) e na Rotina \textsc{FiltrarListaDeURL}. Para o funcionamento dessas rotinas, o Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}) deve capturar (Linhas 6 a 15), por meio da rotina \textsc{DecodQS}, os valores de mais quatro possíveis pares \texttt{=} anexados à URL de base da mensagem endereçada ao \textbf{Arquivo}. Os valores capturados são guardados nas variáveis: \texttt{clientinformation.ipaddress}, \texttt{parsedibiurl.filepath}, \texttt{parsedibiurl.ibi} e \texttt{parsedibiurl.verblist}. Das quatro variáveis, a primeira, a segunda e a última, são globais e serão usadas no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}))\footnote{Essas três variáveis foram definidas como globais, unicamente por uma razão editorial, evitando assim a definição e uso de rotinas com muitos argumentos.}, sendo a última também usada como argumento na Rotina \textsc{FiltrarListaDeURL}. %(complementado pelo Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns}) e na Rotina \textsc{FiltrarListaDeURL}. Conforme a Tabela~\ref{tab:solicitacaourl}, os dois pares com nomes \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist} são facultativos na mensagem ``Solicitar~URL''~(3). Por este motivo, antes de capturar os valores desses pares por meio da rotina \textsc{DecodQS}, a sua presença é testada (Linhas 7 e 12). Se estiverem ausentes, as variáveis correspondentes \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist} receberão uma cadeia de caracteres vazia (Linhas 10 e 15). % Nos casos da variável \texttt{servicesubject} assumir os valores \texttt{inclusionConfirmationRequest} e \texttt{acknowledgment} o Algoritmo~\ref{alg:montarresposta} retorna respostas simplesmente constantes como definidas as Linhas 13 e 20. No caso \texttt{servicesubject} assumir o valor \texttt{urlRequest} a reposta é definida por meio do Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL} que por sua vez é complementado pelo Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns}. \hypertarget{pro:montar}{} A Linha 16 do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}), a rotina \textsc{MontarListaDeURL}\label{pro:montar} (Algoritmo~\ref{alg:montarlistadeurl}) retorna, na forma de uma lista de pares, um conjunto de propriedades do \textbf{IBI} informado no único argumento da rotina. Entre essas propriedades, podem constar ou não, em particular, as URL de acesso aos \textbf{itens de informação} relacionados ao \textbf{item identificado} com esse \textbf{IBI}. % Exemplo 7.2 % http://urlib.net/8JMKD3MGP8W/35MME4E+ % http://mtc-m16c.sid.inpe.br/8JMKD3MGP8W/35MME4E+ \begin{example}[Funcionamento da rotina \textsc{MontarListaDeURL}] \label{exa:funcionamentodeontarlistadeurl} A execução de: \begin{equation*} \textsc{MontarListaDeURL}(\texttt{``8JMKD3MGP8W/35MME4E''}) \end{equation*} resultou em uma cadeia de caracteres formando a lista de pares: % \scriptsize \tiny \begin{verbatim} archiveaddress mtc-m16c.sid.inpe.br contenttype Data contenttype.lastedition Data contenttype.lastedition.metadata Metadata contenttype.lastedition.metadata(oai_dc) Metadata contenttype.metadata Metadata contenttype.metadata(oai_dc) Metadata contenttype.metadata.translation Metadata contenttype.translation(en) Data contenttype.translation(pt) Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23 ibip 8JMKD3MGP8W/35MME4E} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.lastedition {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23 ibip 8JMKD3MGP8W/35MME4E} ibi.lastedition.metadata {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47} ibi.lastedition.metadata(oai_dc) {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47} ibi.metadata {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47} ibi.metadata(oai_dc) {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47} ibi.metadata.translation {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} ibi.translation(en) {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23} ibi.translation(pt) {rep sid.inpe.br/mtc-m18@80/2009/08.25.19.43} state Original state.lastedition Original state.lastedition.metadata Original state.lastedition.metadata(oai_dc) Original state.metadata Original state.metadata(oai_dc) Original state.metadata.translation Original state.translation(en) Original state.translation(pt) Original timestamp 2009-07-21T13:23:45Z timestamp.lastedition 2009-07-21T13:23:45Z timestamp.lastedition.metadata 2014-04-04T17:39:54Z timestamp.lastedition.metadata(oai_dc) 2014-04-04T17:39:54Z timestamp.metadata 2014-04-04T17:39:54Z timestamp.metadata(oai_dc) 2014-04-04T17:39:54Z timestamp.metadata.translation 2014-04-04T17:39:54Z timestamp.translation(en) 2009-07-21T13:23:45Z timestamp.translation(pt) 2011-09-22T14:45:11Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23/doc/CCSDS%20643.0-B-1.pdf url.lastedition http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23/doc/CCSDS%20643.0-B-1.pdf url.lastedition.metadata http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47/doc/metadata.cgi url.lastedition.metadata(oai_dc) http://mtc-m16c ... br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47/doc/metadata.cgi?choice=oai_dc url.metadata http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47/doc/metadata.cgi url.metadata(oai_dc) http://mtc-m16c ... br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47/doc/metadata.cgi?choice=oai_dc url.metadata.translation http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23.47/doc/metadata.cgi url.translation(en) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23/doc/CCSDS%20643.0-B-1.pdf url.translation(pt) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/08.25.19.43/doc/RTC-07.pdf urlkey 1426387214-9164566186556927 \end{verbatim} \qed \end{example} A lista de pares do Exemplo~\ref{exa:funcionamentodeontarlistadeurl} ilustra um conjunto de propriedades disponíveis a respeito do \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E} informado no único argumento da rotina. Nessa lista, o nome de alguns pares consiste em uma sequência de palavras separadas por \textsl{pontos} (\texttt{.}). Por definição, a primeira palavra é chamado de prefixo do nome. Omitindo o prefixo, o resto do nome é chamado de qualificador de prefixo. Por exemplo, no nome \texttt{ibi.lastedition}, \texttt{ibi} é o seu prefixo e \texttt{.lastedition} o qualificador do prefixo \texttt{ibi}. Em um exemplo como este, para se referir ao nome \texttt{ibi.lastedition}, usa-se a expressão ``nome com prefixo \texttt{ibi} qualificado como \texttt{.lastedition}''. Na lista de pares do exemplo, o par com nome \texttt{ibi} (o décimo primeiro par) informa as duas formas desse IBI. O par com nome \texttt{archiveaddress} (o primeiro par) informa qual foi o endereço \textsl{web} do \textbf{Arquivo} que gerou esse conjunto de propriedades. No conjunto, observa-se o par com nome \texttt{url}, cujo valor foi a URL de acesso ao \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}. Além desse par, nesse exemplo, existem outros oito pares com nomes cujos prefixos foram \texttt{url}, e com valores sendo URL de acesso a \textbf{itens de informação} relacionados ao \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E}. O qualificador de prefixo do nome desses pares indica o tipo de relação com o \textbf{item identificado}. Por exemplo, o qualificador \texttt{.metadata} em \texttt{url.metadata} indica que a URL é a dos metadados do \textbf{item identificado} objeto da resolução (cf. Tabela~\ref{tab:relacao} e Exemplo~\ref{exa:algumasrelacoes}). No conjunto de propriedades do Exemplo~\ref{exa:funcionamentodeontarlistadeurl}, observa-se também que os valores dos pares com nomes com prefixo qualificado como \texttt{.lastedition} são os mesmos que os dos pares com nomes sem qualificador de prefixo. Isto ocorre porque o \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MME4E} não possui (ainda) uma próxima edição. Nesse caso, a última edição do \textbf{item identificado} é o próprio \textbf{item}. Pelo mesmo motivo, os valores dos pares com nomes com prefixo qualificado como \texttt{.lastedition.metadata} são os mesmos que os dos pares com nomes com prefixo qualificado como \texttt{.metadata}. Observa-se ainda que os valores dos pares com nomes com prefixo \texttt{ibi} qualificado como \texttt{.metadata(oai\_dc)} são os mesmos que os dos pares com nomes com prefixo \texttt{ibi} qualificado como \texttt{.metadata}. Isto ocorre, nse exemplo, porque o acesso a estes metadados é feito a partir de um mesmo \textsl{script} CGI que gera os metadados em diversos formatos. Dependendo do conhecimento ao alcance do \textbf{Arquivo}, o conjunto das propriedades de um \textbf{IBI} pode ser eventualmente grande (cf. as numerosas chamadas às rotinas \textsc{CriarPar} e \textsc{JuntarPar} no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL})). \hypertarget{pro:filtrar}{} A Linha 17 do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}), a rotina \textsc{FiltrarListaDeURL}\label{pro:filtrar}, com base na lista de verbos (\texttt{parsedibiurl.verblist}) informada em seu segundo argumento, elimina, da resposta informada em seu primeiro argumento, os pares que não terão qualquer utilidade na finalização do processo de resolução de \textbf{IBI} pelo \textbf{resolvedor}. Em outros termos, considerando a lista de verbos, a rotina \textsc{FiltrarListaDeURL} preserva apenas as propriedades de interesse ao processo de resolução de \textbf{IBI}. O uso da rotina \textsc{FiltrarListaDeURL} é facultativo. Seu papel é diminuir o tamanho da resposta ``lista de URL''~(4). Mesmo que essa rotina não elimine par algum sem utilidade, o resultado do processo de resolução de \textbf{IBI} não será alterado, apenas o desempenho do processo não será tão eficiente. % Exemplo 7.3 % http://urlib.net/8JMKD3MGP8W/35MME4E+ % http://mtc-m16c.sid.inpe.br/8JMKD3MGP8W/35MME4E+ \begin{example}[Funcionamento da rotina \textsc{FiltrarListaDeURL}] \label{exa:funcionamentodefiltrarlistadeurl} A execução de: \begin{equation*} \textsc{FiltrarListaDeURL}(\texttt{resposta}, \texttt{``GetTranslation''}) \end{equation*} onde o valor de \texttt{resposta} é a lista de pares do Exemplo~\ref{exa:funcionamentodeontarlistadeurl}, resultou em uma cadeia de caracteres formando a lista de pares: \tiny \begin{verbatim} archiveaddress mtc-m16c.sid.inpe.br contenttype.translation(en) Data contenttype.translation(pt) Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23 ibip 8JMKD3MGP8W/35MME4E} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} ibi.translation(en) {rep sid.inpe.br/mtc-m18@80/2009/07.21.13.23} ibi.translation(pt) {rep sid.inpe.br/mtc-m18@80/2009/08.25.19.43} state.translation(en) Original state.translation(pt) Original timestamp.translation(en) 2009-07-21T13:23:45Z timestamp.translation(pt) 2011-09-22T14:45:11Z url.translation(en) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.13.23/doc/CCSDS%20643.0-B-1.pdf url.translation(pt) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/08.25.19.43/doc/RTC-07.pdf urlkey 1426387214-9164566186556927 \end{verbatim} \qed \end{example} No Exemplo~\ref{exa:funcionamentodefiltrarlistadeurl}, a rotina \textsc{FiltrarListaDeURL} é usada para simplificar (filtrar) a lista de pares especificada na variável \texttt{resposta}, em seu primeiro argumento. Nesse exemplo, a lista de verbos, no segundo argumento da rotina, é formado pelo único verbo \texttt{GetTranslation}. Com base nesse verbo, a lista de pares pôde ser simplificada sem prejuizo à finalização do processo de resolução de \textbf{IBI}, a ser executado posteriormente no \textbf{resolvedor}. A simplificação consiste em preservar apenas os pares cujos nomes possuem um prefixo qualificado como \texttt{.translation} (com ou sem parâmetro). Observa-se que, da lista de nove URL do Exemplo~\ref{exa:funcionamentodeontarlistadeurl}, ficaram apenas duas, relativas às traduções em inglês e português, nos pares com nomes \texttt{url.translation(en)} e \texttt{url.translation(pt)}, respectivamente. Conforme especificado na Tabela~\ref{tab:listadeverbos}, o verbo \texttt{GetTranslation} pode ou não estar acompanhado de um parâmetro indicando o idioma (e o país) da tradução solicitada (e.g., \texttt{GetTranslation(pt)}). Na ausência de parâmetro, como no Exemplo~\ref{exa:funcionamentodefiltrarlistadeurl}, a seleção da URL de acesso ao \textbf{item de informação} no idioma apropriado será feita pelo \textbf{resolvedor}. Por esse motivo, as várias opções de URL apontando, cada uma para uma tradução em um idioma diferente, como inglês (\texttt{en}) e português (\texttt{pt}), devem constar na lista de pares a ser encaminhada ao \textbf{resolvedor}. Ao receber a resposta dos \textbf{Arquivos}, o \textbf{resolvedor} escolherá a URL que corresponde ao idioma que melhor atende as preferências do usuário, como especificado em seu navegador. Para isso, o \textbf{resolvedor} fará uso do par com o nome \texttt{clientinformation.languagepreference} da Tabela~\ref{tab:dadoscapturados}. % Os Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL} e Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns} apresentados acima usam a rotina \textsc{CriarPar}. Essa rotina cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}, cujo nome é dado pelo primeiro argumento e cujo valor é referente ao \textbf{IBI} informado no segundo argumento, sendo nome e valor separados por um espaço em branco (\texttt{SP}). Caso o \textbf{IBI} não existir no \textbf{Arquivo} ou o valor referente ao \textbf{IBI} ser desconhecido, a rotina \textsc{CriarPar} cria uma cadeia de caracteres vazia. % Os Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL} e Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns} apresentados acima usam a rotina \textsc{CriarPar}. Essa rotina cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par é o valor informado no primeiro argumento da rotina. O valor do par é referente ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} informado no segundo argumento. O Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}), usado na Linha 16 do Algoritmo~\ref{alg:montarresposta} (\textsc{MontarResposta}), para gerar as propriedades do \textbf{IBI} objeto de resolução, é, junto às rotinas que o compõem (cf. Tabela~\ref{tab:componente2}), a peça principal do \textbf{serviço de Arquivo}. \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Componentes do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}).} \label{tab:componente2} \begin{tabular}{p{6.6cm}p{1.5cm}} \hline \multicolumn{1}{c}{\slshape Componente} & \multicolumn{1}{c}{\slshape Página} \\* \hline Rotina \hyperlink{pro:criarpar}{\textsc{CriarPar}} & \multicolumn{1}{c}{\pageref{pro:criarpar}} \\* \hline Rotina \hyperlink{pro:criarparstate}{\textsc{CriarParState}} & \multicolumn{1}{c}{\pageref{pro:criarparstate}} \\* \hline Rotina \hyperlink{pro:juntar}{\textsc{Juntar}} & \multicolumn{1}{c}{\pageref{pro:juntar}} \\* \hline Rotina \hyperlink{pro:criarparnextedition}{\textsc{CriarParNextEdition}} & \multicolumn{1}{c}{\pageref{pro:criarparnextedition}} \\* \hline Rotina \hyperlink{pro:criarparibi}{\textsc{CriarParIBI}} & \multicolumn{1}{c}{\pageref{pro:criarparibi}} \\* \hline Rotina \hyperlink{pro:criarparurl}{\textsc{CriarParURL}} & \multicolumn{1}{c}{\pageref{pro:criarparurl}} \\* \hline \end{tabular} \end{table} \clearpage \vspace*{\fill} \begin{nicealgo}{alg:montarlistadeurl} \naTITLE{\textsc{MontarListaDeURL}.} \naPREAMBLE \naGLOBAL{\textnormal{\texttt{relações}} \textnormal{(}subconjunto de relações verificando a regra \textnormal{\texttt{relação}} da Tabela~\ref{tab:relacao}\textnormal{)},} % \naCONTINUE{\textnormal{\texttt{clientinformation.ipaddress}} \textnormal{(}IP usuário -- usada por \textsc{CriarParRedirec}\textnormal{)},} \naCONTINUE{\textnormal{\texttt{clientinformation.ipaddress}} \textnormal{(}IP do usuário -- usado por \textsc{CriarParURL}\textnormal{)},} \naCONTINUE{\textnormal{\texttt{parsedibiurl.filepath}} \textnormal{(}caminho de um recurso -- usado por \textsc{CriarParURL}\textnormal{)},} \naCONTINUE{\textnormal{\texttt{parsedibiurl.verblist}} \textnormal{(}lista de verbos -- usada por \textsc{CriarParURL}\textnormal{)}.} \naINPUT{\textnormal{\texttt{parsedibiurl.ibi}} \textnormal{(}IBI objeto da resolução\textnormal{)}.} \naOUTPUT{\textnormal{\texttt{resposta}} \textnormal{(}lista de pares\textnormal{)}.} % \naAUX{\textnormal{\texttt{relação}} \textnormal{(}cadeia de caracteres verificando a regra \textnormal{\texttt{relação}} da Tabela~\ref{tab:relacao}\textnormal{)}.} \naBODY \na{$\texttt{resposta} \mget \texttt{``''}$} % \na{$\texttt{state} \mget \textsc{CriarPar}(\texttt{``state''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{state} \mget \textsc{CriarParState}(\texttt{parsedibiurl.ibi})$} \naBEGIN{\naIF $\texttt{state} = \texttt{``''}$ \naTHEN} \naENDN{1}{\naRETURN{\texttt{resposta}}} \naBEGIN{\naELSE} % \na{$\texttt{resposta} \mget \textsc{AdicionarParesComuns}(\texttt{resposta}, \texttt{parsedibiurl.ibi})$} % \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``archiveaddress''}, \texttt{parsedibiurl.ibi})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \textsc{CriarPar}(\texttt{``archiveaddress''}, \texttt{parsedibiurl.ibi}))$} \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``ibi.archiveservice''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``ibi.platformsoftware''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \naBEGIN{\naIF $\texttt{state} = \texttt{``Deleted''}$ \naTHEN} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{``contenttype \{\}''})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \textsc{CriarPar}(\texttt{``ibi''}, \texttt{parsedibiurl.ibi}))$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{state})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{``redirecttometadata no''})$} % \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``timestamp''}, \texttt{parsedibiurl.ibi})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \textsc{CriarPar}(\texttt{``timestamp''}, \texttt{parsedibiurl.ibi}))$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{``url \{\}''})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{``urlkey \{\}''})$} \naENDN{1}{\naRETURN{\texttt{resposta}}} \naBEGIN{\naELSE} % \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``contenttype''}, \texttt{parsedibiurl.ibi})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} % \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``ibi.nextedition''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{par} \mget \textsc{CriarParNextEdition}(\texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} % \na{$\hspace{71mm}\texttt{clientinformation.ipaddress})$} % \na{$\texttt{redirecttometadata} \mget \textsc{CriarParRedirec}(\texttt{parsedibiurl.ibi})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{redirecttometadata})$} % \na{$\texttt{par} \mget \textsc{CriarParURL}(\texttt{parsedibiurl.ibi})$} % \na{$\hspace{37.4mm}\texttt{parsedibiurl.filepath},$} % \na{$\hspace{37.4mm}\texttt{parsedibiurl.verblist})$} \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``urlkey''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \textsc{CriarPar}(\texttt{``urlkey''}, \texttt{parsedibiurl.ibi})$} % \naBEGIN{\naIF \texttt{``GetFileList''} $\notin$ \texttt{parsedibiurl.verblist} \naTHEN} \naBEGIN{\naFOREACH \texttt{relação} $\in$ \texttt{relações} \naDO} % \na{$\texttt{par} \mget \textsc{CriarPar}((\texttt{``ibi'' relação}), \texttt{parsedibiurl.ibi})$} \na{$\texttt{par} \mget \textsc{CriarParIBI}(\texttt{relação}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarParURL}(\texttt{relação}, \texttt{parsedibiurl.ibi})$} \naBEGIN{\naIF $\texttt{par} \neq \texttt{``''}$ \naTHEN} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}((\texttt{``contenttype'' relação}), \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}((\texttt{``state'' relação}), \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}((\texttt{``timestamp'' relação}), \texttt{parsedibiurl.ibi})$} \naENDN{2}{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \naENDN{2}{\naRETURN{\texttt{resposta}}} \end{nicealgo} \vspace*{\fill} \clearpage \begin{comment} \vspace*{\fill} \begin{nicealgo}{alg:adicionarparescomuns} \naTITLE{\textsc{AdicionarParesComuns}.} \naPREAMBLE \naINPUT{\textnormal{\texttt{resposta}} \textnormal{(}lista de pares\textnormal{)}.} \naCONTINUE{\textnormal{\texttt{parsedibiurl.ibi}} \textnormal{(}IBI objeto da resolução\textnormal{)}.} \naOUTPUT{\textnormal{\texttt{resposta}} \textnormal{(}lista de pares\textnormal{)}.} \naBODY \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``archiveaddress''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``ibi.archiveservice''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``ibi.platformsoftware''}, \texttt{parsedibiurl.ibi})$} \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} % \na{$\texttt{par} \mget \textsc{CriarPar}(\texttt{``timestamp''}, \texttt{parsedibiurl.ibi})$} % \na{$\texttt{resposta} \mget \textsc{Juntar}(\texttt{resposta}, \texttt{par})$} \na{\naRETURN{$\texttt{resposta}$}} \end{nicealgo} \vspace*{\fill} \clearpage \end{comment} \hypertarget{pro:criarpar}{} O Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}), apresentado acima, usa a rotina \textsc{CriarPar}\label{pro:criarpar}. Essa rotina cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par é o valor informado no primeiro argumento da rotina. O valor do par é referente ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} informado no segundo argumento. Precisamente, usando a notação BNF (aumentada), para toda cadeia de caracteres \texttt{x} da Tabela~\ref{tab:} e todo \textbf{IBI} \texttt{i} existente, \[ \textsc{CriarPar}(\texttt{x}, \texttt{i}) \triangleq \texttt{x 1*SP < x, i >} \] onde \texttt{SP} é a regra definida na Tabela~\ref{tab:listadepares} e \texttt{< x, i >} é a cadeia de caracteres que representa o valor de \texttt{x} referente a \texttt{i}, como apresentado na Tabela~\ref{tab:}. \begin{table}[H] \renewcommand{\baselinestretch}{1.2}% for tabular environment \footnotesize \centering \caption{Descrição da função \texttt{< x, i >}.} \label{tab:} \begin{tabular}{p{3.9cm}p{5.8cm}p{3.9cm}} \hline \multicolumn{1}{c}{\texttt{x}} & \multicolumn{2}{c}{\texttt{< x, i >}} \\* \cline{2-3} & \multicolumn{1}{c}{\slshape Domínio} & \multicolumn{1}{c}{\slshape Significado} \\* \hline \hline \texttt{``archiveaddress''} & regra \texttt{hostport} da Seção~\ref{sec:formatosolicitacao} & endereço \textsl{Web} do \textbf{Arquivo} ex: \texttt{marte.sid.inpe.br} \\* % \hline \hline \texttt{``contenttype'' relação} (\texttt{relação} $\in$ \texttt{relações}) & \texttt{``Data'' | ``Metadata''} & % tipo de conteúdo do \textbf{item de informação} ligado ao \textbf{IBI} \texttt{i} via \texttt{relação} tipo de conteúdo do \textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i} \\* % \hline \hline \texttt{``ibi'' relação} (\texttt{relação} $\in$ \texttt{relações}) & regra \texttt{formas-de-ibi} da Tabela~\ref{tab:formasdeibi} & formas do \textbf{IBI} do \textbf{item identificado} em \texttt{relação} com \textbf{IBI} \texttt{i} \\* % \hline \hline \texttt{``ibi.archiveservice''} & regra \texttt{formas-de-ibi} da Tabela~\ref{tab:formasdeibi} & formas do \textbf{IBI} do \textbf{serviço de Arquivo} informado no momento de cadastrá-lo (cf. Seção~\ref{sec:cadastrar}) \\* % \hline \hline \texttt{``ibi.nextedition''} & regra \texttt{formas-de-ibi} da Tabela~\ref{tab:formasdeibi} & formas do \textbf{IBI} identificando a próxima edição do \textbf{item identificado} com \textbf{IBI} \texttt{i} \\* % \hline \hline \texttt{``ibi.platformsoftware''} & \texttt{formas-de-ibi | "\{\}"} & % formas do \textbf{IBI} identificando a plataforma que hospede o \textbf{Arquivo} formas do \textbf{IBI} identificando o \textsl{software} que assegura o funcionamento da plataforma hospedando o \textbf{Arquivo} \\* % \hline \hline \texttt{``state'' relação} (\texttt{relação} $\in$ \texttt{relações}) & \texttt{``Original'' | ``Copy'' | ``Deleted''} & \textbf{estado} do \textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i} \\* % \hline \hline \texttt{``timestamp'' relação} (\texttt{relação} $\in$ \texttt{relações}) & ISO 8601 & data e hora da última atualização ou remoção do \textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i} ex: 2014-01-02T17:23:57Z \\* % \hline % \hline \texttt{``url'' relação} % % (\texttt{relação} $\in$ \texttt{relações}) % % (\texttt{relação} $\neq$ \texttt{``''}) % & % regra \texttt{URI} em Seção~3 de \cite{BernersFielMasi:2005:UnReId} com \texttt{scheme} valendo \texttt{http} % & % URL de acesso ao \textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i} % \\* % \hline \hline \texttt{``urlkey''} & regra \texttt{chave} da Tabela~\ref{tab:chave} & chave de URL de acesso ao \textbf{item de informação} relacionado com o \textbf{item identificado} com \textbf{IBI} \texttt{i} \\* \hline \hline \end{tabular} \end{table} A expressão ``formas de \textbf{IBI}'', na coluna \textsl{Significado} da Tabela~\ref{tab:}, refere-se às várias formas como um \textbf{IBI} pode ser escrito \cite{Banon:2011:SiId}. Por exemplo, \texttt{sid.inpe.br/mtc-m19/2013/09.04.12.27.57} e \texttt{8JMKD3MGP7W/3EPGUE5} são duas formas do \textbf{IBI} de um mesmo \textbf{item identificado}. A primeira forma é o \textbf{IBI} como \textbf{nome de repositório uniforme}; a segunda, como \textbf{IBIp}. A Tabela~\ref{tab:formasdeibi} especifica as regras de formação da regra \texttt{formas-de-ibi} usada na coluna \textsl{Domínio} da Tabela~\ref{tab:}. A especificação utiliza a notação BNF (aumentada) e as regras predefinidas: \texttt{repositório} (\textbf{IBI} como \textbf{nome de repositório uniforme}) e \texttt{IBIp} (\textbf{IBI} como \textbf{IBIp}), introduzidas em \citeonline{Banon:2011:SiId}. \begin{table}[h] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} \small \caption{Regras definindo a formação de \texttt{formas-de-ibi}} \label{tab:formasdeibi} \begin{center} \begin{tabular}{rcl} \verb!formas-de-ibi! & \verb!=! & \verb!forma-rep | forma-ibip | forma-rep " " forma-ibip! \\ \verb!forma-rep! & \verb!=! & \verb!"rep " repositório! \\ \verb!forma-ibip! & \verb!=! & \verb!"ibip " IBIp! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} % Exemplo 7.4 \begin{example}[Funcionamento da rotina \textsc{CriarPar} para acessar o \textbf{estado} de um \textbf{item identificado}] \label{exa:funcionamentocriarparparaestado} A execução de: \begin{equation*} \textsc{CriarPar}(\texttt{``state''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} \texttt{state Original} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparparaestado}, a rotina \textsc{CriarPar} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor \texttt{Original} do par, dado por \texttt{< ``state'', ``8JMKD3MGP7W/3EPGUE5'' >}, fornece o \textbf{estado} do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5}. Assim, o resultado da execução da rotina \textsc{CriarPar}(\texttt{``state''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) transmite a informação de que o \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5} deve ser tido como original (no \textbf{Arquivo} considerado). Na coluna \texttt{x} da Tabela~\ref{tab:}, aparecem expressões como ``\texttt{``contenttype'' relação}'' em que \texttt{relação} $\in$ \texttt{relações}. A primeira parte da expressão usa a notação BNF (aumentada). Por exemplo, se \texttt{relação} for a cadeia de caracteres \texttt{".metadata"}, então ``\texttt{``contenttype'' relação}'' é, por concatenação, a cadeia de caracteres \texttt{"contenttype.metadata"}. Na segunda parte, \texttt{relações} é a variável global do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}). Ela representa um subconjunto de relações que verificam a regra \texttt{relação} da Tabela~\ref{tab:relacao}. \begin{table}[H] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} % \small \footnotesize \caption{Regras definindo a formação de uma \texttt{relação}} \label{tab:relacao} \begin{center} \begin{tabular}{rcl} \verb!relação! & \verb!=! & \verb'([u [t]] | [t [u]]) [m [t]]; ex: .lastedition.metadata' \\ \verb!u! & \verb!=! & \verb'".lastedition"; ex: .lastedition' \\ \verb!t! & \verb!=! & \verb!".translation" ["(" idioma ["-" país] ")"];! \\ & & \verb!ex: .translation(en)! \\ \verb!idioma! & \verb!=! & \verb!2ALFAMI; ex: pt! \\ \verb!país! & \verb!=! & \verb!2ALFAMA; ex: BR! \\ \verb!m! & \verb!=! & \verb!".metadata" ["(" formato ")"]; ex: .metadata(oai_dc)! \\ \verb!formato! & \verb!=! & \verb!"oai_dc"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} % Exemplo 7.5 No Exemplo~\ref{exa:algumasrelacoes}, são apresentadas algumas relações verificando a regra \texttt{relação} da Tabela~\ref{tab:relacao}, assim como seus significados. \begin{example}[Algumas relações] \label{exa:algumasrelacoes} Relações e seus significados: % \footnotesize \scriptsize \begin{tabular}{ll} \texttt{``''} & do próprio \textbf{item identificado} (ii)\\ \texttt{".lastedition"} & da última edição do ii\\ \texttt{".translation"} & da tradução do ii\\ \texttt{".translation(pt-BR)"} & da tradução em português do Brasil do ii\\ \texttt{".metadata"} & dos metadados do ii\\ \texttt{".metadata(oai\_dc)"} & dos metadados no formato oai\_dc do ii\\ \texttt{".lastedition.translation"} & da tradução da última edição do ii\\ \texttt{".lastedition.translation(pt-BR)"} & da tradução em português do Brasil da última edição do ii\\ \texttt{".lastedition.metadata"} & dos metadados da última edição do ii\\ \texttt{".lastedition.metadata(oai\_dc)"} & dos metadados no formato \textsl{oai\_dc} da última edição do ii\\ \texttt{".translation(pt-BR).lastedition"} & da última edição da tradução em português do Brasil do ii\\ \texttt{".translation(en).metadata"} & dos metadados da tradução em inglês do ii\\ \texttt{".metadata.translation(en)"} & da tradução em inglês dos metadados do ii\\ \end{tabular} \qed \end{example} Cada \textbf{Arquivo} pode ter seu próprio subconjunto \texttt{relações}. Por exemplo, um \textbf{Arquivo} que não armazena \textbf{itens de informação} no idioma Valão (\textsl{Walloon}) não deveria incluir, no subconjunto \texttt{relações}, relações contendo a relação elementar \texttt{.translation(wa)}. % % Caso o fizesse, a rotina \textsc{CriarParURL}, a Linha 24 do Algoritmo~\ref{alg:montarlistadeurl}, retornaria uma cadeia de caracteres vazia (\texttt{``''}), já que não haveria qualquer \textbf{item de informação} no idioma Valão, e as Linhas 26 a 32 seriam transpostas, o que levaria a processamentos desnecessários. % Caso o fizesse, as rotinas \textsc{CriarParIBI} e \textsc{CriarParURL}, respectivamente, as Linhas 22 e 24 do Algoritmo~\ref{alg:montarlistadeurl}, retornariam sempre, ambas, uma cadeia de caracteres vazia (\texttt{``''}), já que não haveria qualquer \textbf{item de informação} no idioma Valão, fazendo com que a resposta criada até o momento seria devolvida inalterada, ou seja, os processamentos realizados referentes ao idioma Valão (\textsl{Walloon}) teriam sido totalmente desnecessários. Por outro lado, se o \textbf{Arquivo} armazenar \textbf{itens de informação} sem especificação de idioma, então ele deverá incluir no subconjunto \texttt{relações}, relações contendo a relação elementar \texttt{.translation} (sem parâmetro de idioma). Essa opção será útil para o \textbf{resolvedor} poder retornar a URL do \textbf{item de informação} que atende à \textbf{URL persistente} quando esta contém o modificador \textsl{mais} (\texttt{+}) sem parâmetro de idioma também. Se não fizer, o resolvedor retornará ao usuário, que emitiu a URL persistente, uma mensagem indicando que o item de informação não foi encontrado. O subconjunto relações deve conter pelo menos a relação vazia \texttt{``''} (cadeia de caracteres vazia). Numa implementação mínima do Sistema para resolução de IBI, na parte que cabe um Arquivo, o subconjunto \texttt{relações} pode ser reduzido à uma única relação que deve ser a relação vazia. Neste caso, o Arquivo somente poderá atender às solicitações do resolvedor referente às URL persistentes na sua forma simples (cf. \ref{sec:urlpersistente}). Na coluna \textsl{Significado} da Tabela~\ref{tab:}, a expressão ``\textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i}'' é um atalho para ``\textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela variável \texttt{relação}''. Assim, se o valor da variável \texttt{relação} for \texttt{``.lastedition.metadata''}, a expressão ``\textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i}'' significará ``metadados da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{i}'', e o significado de \texttt{< x, i >} na Tabela~\ref{tab:} para ``\texttt{``state'' relação}'', ou seja, para \texttt{``state.lastedition.metadata''}, será: ``\textbf{estado} dos metadados da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{i}''. Quando o valor da variável \texttt{relação} for vazio (\texttt{``''}), então a expressão ``\textbf{item de informação} em \texttt{relação} com \textbf{IBI} \texttt{i}'' deve ser entendida simplesmente como ``\textbf{item identificado} com \textbf{IBI} \texttt{i}'', pois, neste caso, o ``\textbf{item de informação} em relação com \textbf{IBI} i'' é o próprio ``\textbf{item identificado} com \textbf{IBI} i''. % Exemplo 7.6 \begin{example}[Funcionamento da rotina \textsc{CriarPar} para acessar o carimbo de data/hora (\textsl{time stamp}) da última edição de um \textbf{item identificado}] \label{exa:funcionamentocriarparparaibiultimaedicao} A execução de: \begin{equation*} \textsc{CriarPar}(\texttt{``timestamp.lastedition''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} \texttt{timestamp.lastedition 2013-10-04T14:32:14Z} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparparaibiultimaedicao}, a rotina \textsc{CriarPar} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor \texttt{2013-10-04T14:32:14Z} do par, dado por \texttt{<~``timestamp.lastedition'',~``8JMKD3MGP7W/3EPGUE5''~>}, fornece o carimbo de data/hora (\textsl{time stamp}) da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5}. Assim, o resultado da execução da rotina \textsc{CriarPar}(\texttt{``timestamp.lastedition''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) transmite a informação de que carimbo de data/hora da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5} é \texttt{2013-10-04T14:32:14Z}. \hypertarget{pro:criarparstate}{} A primeira etapa do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) consiste em encontrar (Linha 2) o valor do \textbf{estado} (\texttt{state}) do \textbf{item identificado} com \textbf{IBI} especificado na variável de entrada \texttt{parsedibiurl.ibi}. Para isso, o Algoritmo~\ref{alg:montarlistadeurl} usa a rotina \textsc{CriarParState}\label{pro:criarparstate}. Se o \textbf{IBI} informado em seu único argumento existir, essa rotina deverá criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par deverá ser \texttt{state}; o seu valor, o \textbf{estado} do \textbf{item identificado} com o \textbf{IBI} informado. Se o \textbf{IBI} não existir no \textbf{Arquivo}, a rotina \textsc{CriarParState} deverá criar uma cadeia de caracteres vazia. Precisamente, para todo \textbf{IBI} \texttt{i}, \[ \textsc{CriarParState}(\texttt{i}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \textsc{CriarPar}(\texttt{``state''}, \texttt{i}) & \quad \text{se \textbf{IBI} \texttt{i} existir},\\ \texttt{``''} & \quad \text{caso contrário}.\\ \end{array} \right. \] % A Linha 3 do Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL}, o valor da variável \texttt{state} é testado. Caso o valor for vazio (\texttt{``''}) então o valor da variável de saída \texttt{resposta} deverá ser também vazio (\texttt{``''}) indicando que o \textbf{IBI} informado não existe no \textbf{Arquivo}. Caso contrário, a rotina \textsc{AdicionarParesComuns}, a Linha 6, deverá adicionar à variável \texttt{resposta} os pares com nomes \texttt{archiveaddress}, \texttt{ibi.archiveservice} e \texttt{ibi.platformsoftware} que servem a identificar o \textbf{Arquivo} que está gerando a resposta. A Linha 3 do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}), o valor da variável \texttt{state} é testado. Se o valor for vazio (\texttt{``''}), então o valor da variável de saída \texttt{resposta} deverá ser também vazio (\texttt{``''}), indicando que o \textbf{IBI} informado não existe no \textbf{Arquivo}. Senão, os pares com nomes \texttt{archiveaddress}, \texttt{ibi.archiveservice} e \texttt{ibi.platformsoftware}, que servem para identificar o \textbf{Arquivo}, deverão ser adicionados à variável \texttt{resposta}, por meio das rotinas \textsc{CriarPar} e \textsc{Juntar} as Linhas 6 a 10. Caso o \textsl{software} que assegura o funcionamento da plataforma hospedando o \textbf{Arquivo} não esteja sendo identificado por IBI, o valor do par com nome \texttt{ibi.platformsoftware} deverá ser vazio, representado pela cadeia de caracteres \textsl{abre e fecha chaves} (\texttt{\{\}}). % A rotina \textsc{Juntar}, usada no Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL} e no Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns}, junta as cadeias de caracteres informadas em seus argumentos deixando-as separadas por um \texttt{espaço}. \hypertarget{pro:juntar}{} A rotina \textsc{Juntar}\label{pro:juntar}, usada várias vezes no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL})%e no Algoritmo~\ref{alg:adicionarparescomuns} \textsc{AdicionarParesComuns} , junta as cadeias de caracteres informadas em seus argumentos, deixando-as separadas por um \texttt{espaço}. % A rotina \textsc{JuntarPar} junta a cadeia de caracteres informado no segundo arqumento a direita da cadeia de caracteres informado no primeiro agumento deixando-as separadas por um \texttt{espaço}. Precisamente, usando a notação BNF (aumentada), para toda cadeia de caracteres \texttt{x} e \texttt{y}, \[ \textsc{Juntar}(\texttt{x}, \texttt{y}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \texttt{x espaço y} & \quad \text{se \texttt{x} e \texttt{y} $\neq$ \texttt{``''}},\\ \texttt{y} & \quad \text{se \texttt{x} $=$ \texttt{``''}},\\ \texttt{x} & \quad \text{se \texttt{y} $=$ \texttt{``''}}.\\ \end{array} \right. \] onde \texttt{espaço} é a regra definida na Tabela~\ref{tab:listadepares}. % Exemplo 7.7 \begin{example}[Funcionamento da rotina \textsc{Juntar}] \label{exa:funcionamentojuntar} A execução de: \begin{equation*} \textsc{Juntar}(\texttt{``archiveaddress mtc-m16d.sid.inpe.br''}, \texttt{``state Original''}) \end{equation*} resultou na cadeia de caracteres: \begin{equation*} \texttt{archiveaddress mtc-m16d.sid.inpe.br state Original} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentojuntar}, a rotina \textsc{Juntar} é usada para juntar duas cadeias de caracteres que formam, cada um, um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O resultado é uma lista de dois pares que verifica a regra \texttt{lista-de-pares} da Tabela~\ref{tab:listadepares}. Nesse exemplo, usou-se como ``espaço'' o espaço em branco (\texttt{SP}). Observa-se que o segundo par poderia ser o resultado da execução da rotina \textsc{CriarPar}, como ilustrado no Exemplo~\ref{exa:funcionamentocriarparparaestado}. A Linha 11 do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}), o valor da variável \texttt{state} é comparado ao valor \texttt{``Deleted''}. Se a comparação indicar que o \textbf{IBI} foi removido do \textbf{Arquivo}, então os pares com nomes \texttt{ibi}, \texttt{state} e \texttt{timestamp} deverão ser adicionados à variável \texttt{resposta}, como mostrado as Linhas 12 a 14, antes de seu valor ser retornado (Linha 15). Se a comparação indicar que o \textbf{IBI} não foi removido, então os pares que retratam as propriedades do \textbf{IBI} deverão ser criados, como mostrado nas linhas seguintes. \hypertarget{pro:criarparnextedition}{} A Linha 17, o Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) usa a rotina \textsc{CriarParNextEdition}\label{pro:criarparnextedition}. Se o \textbf{item identificado}, com \textbf{IBI} informado em seu único argumento, possuir uma nova edição, essa rotina deverá criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par será \texttt{``ibi.nextedition''}; o seu valor, as formas do \textbf{IBI} da nova edição do \textbf{item identificado}. Se não houver nova edição, a rotina \textsc{CriarParNextEdition} deverá criar uma cadeia de caracteres vazia. Precisamente, usando a notação BNF (aumentada), para todo \textbf{IBI} \texttt{i} existente, \footnotesize \[ \textsc{CriarParNextEdition}(\texttt{i}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \textsc{CriarPar}(\texttt{``ibi.nextedition''}, \texttt{i}) & \quad \text{se existir nova edição},\\ \texttt{``''} & \quad \text{caso contrário}.\\ \end{array} \right. \] \normalsize A propriedade que consiste em informar que o \textbf{item identificado} possui uma nova edição poderá ser importante quando o processo de resolução de \textbf{IBI} deve levar à última edição do \textbf{item identificado} (cf. o exemplo da Seção~\ref{sec:exemplocommodificador}). % A Linha 19, o Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) usa a rotina \textsc{CriarPar} para criar um par, com nome \texttt{urlkey} e cujo valor é uma \textbf{chave de URL}. Essa chave que poderá ser usada, por motivo de segurança, pelo \textbf{Arquivo} ao receber a mensagem ``Agradecer''~(5) enviada pelo \textbf{resolvedor}, para autorizar, por exemplo, a incrementação das estatísticas de acesso ao \textbf{item de informação} que deverá ser retornado ao usuário do \textbf{sistema para resolução de IBI}. % nova redação em 2015-06-20 A Linha 19, o Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) usa a rotina \textsc{CriarPar} para criar um par, com nome \texttt{urlkey} e cujo valor é uma \textbf{chave de URL}. Essa chave poderá ser usada pelo \textbf{Arquivo} ao receber a mensagem ``Agradecer''~(5), enviada pelo \textbf{resolvedor}, para autorizar, por exemplo, a incrementação das estatísticas de acesso ao \textbf{item de informação} que deverá ser retornado ao usuário do \textbf{sistema para resolução de IBI}. Por motivo de segurança, essa chave deveria ser trocada a cada resposta fornecida pelo \textbf{Arquivo}. A Linha 21, o Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) entra em um \textsl{loop} do tipo \textsf{\textbf{Para Cada}}, em que a variável \texttt{relação} vai assumir todos os valores possíveis dentre um subconjunto de relações verificando a regra \texttt{relação} da Tabela~\ref{tab:relacao}. O Exemplo~\ref{exa:algumasrelacoes} ilustra alguns possíveis valores para a variável \texttt{relação}. \hypertarget{pro:criarparibi}{} A Linha 22, já dentro do \textsl{loop}, o Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) usa a rotina \textsc{CriarParIBI}\label{pro:criarparibi}. Se o \textbf{IBI} do \textbf{item de informação}, relacionado ao \textbf{item identificado} com \textbf{IBI} informado no segundo argumento da rotina, for conhecido, então essa rotina deverá criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par será ``\texttt{``ibi''} \texttt{r}'' (usando a notação BNF (aumentada)), em que o valor da relação \texttt{r} é o valor informado no primeiro argumento da rotina. O valor do par será as formas do \textbf{IBI} do \textbf{item de informação} relacionado ao \textbf{item identificado}, de acordo com o relacionamento definido pela relação \texttt{r}. Se o \textbf{IBI} do \textbf{item de informação} não for conhecido (por exemplo, no caso em que os metadados não possuem \textbf{IBI}, ou seja, não são um \textbf{item identificado}), a rotina \textsc{CriarParIBI} deverá criar uma cadeia de caracteres vazia. Precisamente, usando a notação BNF (aumentada), para toda cadeia de caracteres \texttt{r} que verifica a regra \texttt{relação} da Tabela~\ref{tab:relacao} e todo \textbf{IBI} \texttt{i} existente, \[ \textsc{CriarParIBI}(\texttt{r}, \texttt{i}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \texttt{``ibi'' r 1*SP < r, i >} & \quad \text{se }\texttt{< \textperiodcentered\ >}\text{ for conhecido},\\ \texttt{``''} & \quad \text{caso contrário}.\\ \end{array} \right. \] onde \texttt{SP} é a regra definida na Tabela~\ref{tab:listadepares} e \texttt{< r, i >} é a cadeia de caracteres que representa as formas do \textbf{IBI} (cf. Tabela~\ref{tab:formasdeibi}) do \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}. % Exemplo 7.8 \begin{example}[Funcionamento da rotina \textsc{CriarParIBI} para acessar o \textbf{IBI} de um \textbf{item de informação} relacionado a um \textbf{item identificado}] \label{exa:funcionamentocriarparibi} A execução de: \begin{equation*} \textsc{CriarParIBI}(\texttt{``.metadata''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} \texttt{ibi.metadata \{rep sid.inpe.br/mtc-m19/2013/09.04.12.27.58\}} \end{equation*} Ou ainda, a execução de: \begin{equation*} \textsc{CriarParIBI}(\texttt{``.lastedition''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) \end{equation*} resultou numa cadeia de caracteres formando o par: \begin{equation*} \scriptsize \texttt{ibi.lastedition \{rep sid.inpe.br/mtc-m19/2013/09.04.12.27.57 ibip 8JMKD3MGP7W/3EPGUE5\}} \end{equation*} \qed \end{example} Na primeira parte do Exemplo~\ref{exa:funcionamentocriarparibi}, a rotina \textsc{CriarParIBI} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor \texttt{\{rep sid.inpe.br/mtc-m19/2013/09.04.12.27.58\}} do par, dado por \mbox{\texttt{< ``.metadata'', ``8JMKD3MGP7W/3EPGUE5'' >}}, fornece a forma \texttt{rep} do \textbf{IBI} dos metadados do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5}. Assim, o resultado da execução da rotina \textsc{CriarParIBI}(\texttt{``.metadata''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) transmite a informação de que os metadados do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5} é, por sua vez, identificados pelo \textbf{IBI} \texttt{sid.inpe.br/mtc-m19/2013/09.04.12.27.58}. Na segunda parte do Exemplo~\ref{exa:funcionamentocriarparibi}, a rotina \textsc{CriarParIBI} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor \texttt{\{rep sid.inpe.br/mtc-m19/2013/09.04.12.27.57 ibip 8JMKD3MGP7W/3EPGUE5\}} do par, dado por \mbox{\texttt{< ``.lastedition'', ``8JMKD3MGP7W/3EPGUE5'' >}}, fornece as formas do \textbf{IBI} da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5}. Assim, o resultado da execução da rotina \textsc{CriarParIBI}(\texttt{``.lastedition''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) transmite a informação de que a última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5} é o próprio \textbf{item identificado}, ou seja, nesse caso, o \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5} não possui (ainda) uma nova edição. De forma geral, a informação retornada pela rotina \textsc{CriarParIBI} é útil, porque será repassada, na mensagem ``Agradecer''~(5), para o \textbf{Arquivo} que forneceu a URL apropriada à solicitação de resolução de \textbf{IBI}. Dessa forma, esse \textbf{Arquivo} poderá, por exemplo, manter estatísticas de acesso aos \textbf{itens identificados}. A informação retornada pela rotina \textsc{CriarParIBI} é, também, essencial para tentar completar o processo de resolução de \textbf{IBI} quando, para uma mesma relação \texttt{r}, a rotina \textsc{CriarParURL}, a ser apresentada em seguida, não consegue retornar a URL de interesse. Nesse caso, o \textbf{resolvedor} recorrerá ao \textbf{IBI} retornado pela rotina \textsc{CriarParIBI}, para emitir uma nova mensagem ``Solicitar~URL''~(3), na expectativa de receber uma nova resposta que forneça a URL de interesse (cf. o exemplo da Seção \ref{sec:exemplocommodificador}). % A rotina \textsc{CriarParURL}, usada no Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL}, cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}, cujo nome é \texttt{url} e cujo valor é uma URL referente ao \textbf{IBI} informado em seu único argumento. Essa rotina usa mais duas variáveis globais: \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist}. % A rotina \textsc{CriarParURL}, usada no Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL}, cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par é ``\texttt{``url''} \texttt{relação}'' (usando a notação BNF), onde o valor da variável \texttt{relação} é o valor informado no primeiro argumento da rotina. O valor do par é uma URL de acesso ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} informado em seu segundo argumento, de acordo com o relacionamento definido pela variável \texttt{relação}. Essa rotina usa mais três variáveis globais: \texttt{parsedibiurl.filepath}, \texttt{parsedibiurl.requireditemstatus} e \texttt{parsedibiurl.verblist}. \hypertarget{pro:criarparurl}{} % A rotina \textsc{CriarParURL}\label{pro:criarparurl}, usada no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) Linha 24, cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par é ``\texttt{``url''} \texttt{r}'' (usando a notação BNF), em que o valor da relação \texttt{r} é o valor informado no primeiro argumento da rotina. O valor do par é uma URL de acesso ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i} informado em seu segundo argumento, de acordo com o relacionamento definido pela relação \texttt{r}. Essa rotina usa mais duas variáveis globais: \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist}. A rotina \textsc{CriarParURL}\label{pro:criarparurl}, usada no Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) Linha 24, cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O nome do par é ``\texttt{``url''} \texttt{r}'' (usando a notação BNF (aumentada)), em que o valor da relação \texttt{r} é o valor informado no primeiro argumento da rotina. O valor do par é uma das três URL definidas abaixo, dependendo dos valores das duas variáveis globais \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist}. % Se essas duas variáveis estão vazias (iguais à \texttt{``''}), o que é o caso mais usual, então a URL deve ser simplesmente a de acesso ao \textbf{item identificado} com \textbf{IBI} informado no único argumento da rotina. Se essas duas variáveis globais estiverem vazias (iguais à \texttt{``''}), o que é o mais usual, então a URL deverá ser simplesmente a de acesso ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i} informado em seu segundo argumento, de acordo com o relacionamento definido pela relação \texttt{r}. % Se a primeira variável (\texttt{parsedibiurl.filepath}) não está vazia e a segunda está vazia, então a URL deve ser a de acesso ao recurso (arquivo) especificado nessa variável e compondo o \textbf{item identificado} com \textbf{IBI} informado no único argumento da rotina. % Se a única variável não vazia for \texttt{parsedibiurl.filepath}, então a URL deverá ser a de acesso ao recurso (arquivo) especificado nessa variável e compondo o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} informado em seu segundo argumento, de acordo com o relacionamento definido como informado no segundo argumento da rotina. Se a única variável não vazia for \texttt{parsedibiurl.filepath} e contiver o nome de um recurso (arquivo) que compõe o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}, então a URL deverá ser a de acesso a esse recurso (arquivo). % Se a primeira está vazia e a segunda (\texttt{parsedibiurl.verblist}) contém o verbo \texttt{GetFileList}, então a URL deve ser a de acesso a página de exibiçao da lista de recursos (arquivos) compondo o \textbf{item identificado} com \textbf{IBI} informado no único argumento da rotina. Se a única variável não vazia for \texttt{parsedibiurl.verblist} e contiver o verbo \texttt{GetFileList}, então a URL deverá ser a de acesso a uma página de exibição da lista de recursos (arquivos) que compõem o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}. Se essas duas variáveis não estiverem vazias, então deve prevalecer a segunda (\texttt{parsedibiurl.verblist}). % Se essas duas variáveis acima não estiver vazias e a variável \texttt{parsedibiurl.requireditemstatus} for vazia, então deve prevalecer a variável (\texttt{parsedibiurl.verblist}). % Se a variável \texttt{parsedibiurl.requireditemstatus} não estiver vazia, então essa variável deve prevalecer sobre as duas outras. % Mais precisamente, usando a notação BNF (aumentada), para toda cadeia de caracteres \texttt{i}, \texttt{x}, \texttt{y} e \texttt{z}, sendo as duas últimas as variáveis globais \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist} respectivamente, Se a URL de acesso for desconhecida do \textbf{Arquivo}, a rotina \textsc{CriarParURL} deverá criar uma cadeia de caracteres vazia. % Mais precisamente, usando a notação BNF (aumentada), para toda relação \texttt{r} verificando a regra \texttt{relação} da Tabela~\ref{tab:relacao} e para toda cadeia de caracteres \texttt{i}, \texttt{x}, \texttt{y} e \texttt{z}, sendo as três últimas, nessa ordem, as variáveis globais: \texttt{parsedibiurl.requireditemstatus}, \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist}, Precisamente, usando a notação BNF (aumentada), para toda cadeia de caracteres \texttt{r} que verifica a regra \texttt{relação} da Tabela~\ref{tab:relacao}, para todo \textbf{IBI} \texttt{i} existente, e para toda cadeia de caracteres \texttt{y} e \texttt{z}, sendo, respectivamente, as variáveis globais \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist}, \begin{comment} \[ \textsc{CriarParURL}(\texttt{x}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \texttt{``url'' SP < x >} & \quad \text{se \texttt{y}} = \texttt{``''}\text{ e \texttt{z}} = \texttt{``''},\\ \texttt{``url'' SP < x, y >} & \quad \text{se \texttt{y}} \neq \texttt{``''}\text{ e \texttt{z}} = \texttt{``''},\\ \texttt{``url'' SP < x, z >} & \quad \text{se \texttt{y}} = \texttt{``''}\text{ e \texttt{z}} \neq \texttt{``''},\\ \texttt{``url'' SP < x, z >} & \quad \text{se \texttt{y}} \neq \texttt{``''}\text{ e \texttt{z}} \neq \texttt{``''}.\\ \end{array} \right. \] \small \[ \textsc{CriarParURL}(\texttt{r, i}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \texttt{``''} & \quad \text{se } \texttt{i} \text{ não existir ou } \texttt{< \textperiodcentered\ >}_. \\ & \quad \text{abaixo for desconhecido},\\ \texttt{``url'' r SP < i >}_1 & \quad \text{se } \texttt{x} = \texttt{``''} \text{ e } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r SP < i, y >}_3 & \quad \text{se } \texttt{x} = \texttt{``''} \text{ e } \texttt{y} \neq \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r SP < i, z >}_4 & \quad \text{se } \texttt{x} = \texttt{``''} \text{ e } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} \neq \texttt{``''},\\ \texttt{``url'' r SP < i, z >}_4 & \quad \text{se } \texttt{x} = \texttt{``''} \text{ e } \texttt{y} \neq \texttt{``''} \text{ e } \texttt{z} \neq \texttt{``''}.\\ \texttt{``url'' r SP < i, x >}_2 & \quad \text{se } \texttt{x} \neq \texttt{``''} \text{ e } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r SP < i, x >}_2 & \quad \text{se } \texttt{x} \neq \texttt{``''} \text{ e } \texttt{y} \neq \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r SP < i, x >}_2 & \quad \text{se } \texttt{x} \neq \texttt{``''} \text{ e } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} \neq \texttt{``''},\\ \texttt{``url'' r SP < i, x >}_2 & \quad \text{se } \texttt{x} \neq \texttt{``''} \text{ e } \texttt{y} \neq \texttt{``''}\text{ e } \texttt{z} \neq \texttt{``''}.\\ \end{array} \right. \] \normalsize \end{comment} \small \[ \textsc{CriarParURL}(\texttt{r, i}) \triangleq \left\{ \hspace{-1mm} \begin{array}{l l} \texttt{``''} & \quad \text{se } \texttt{< \textperiodcentered\ >}_. \text{ abaixo}\\ & \quad \text{for desconhecido},\\ \texttt{``url'' r 1*SP < r, i >}_1 & \quad \text{se } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r 1*SP < r, i, y >}_2 & \quad \text{se } \texttt{y} \neq \texttt{``''} \text{ e } \texttt{z} = \texttt{``''},\\ \texttt{``url'' r 1*SP < r, i, z >}_3 & \quad \text{se } \texttt{y} = \texttt{``''} \text{ e } \texttt{z} \neq \texttt{``''},\\ \texttt{``url'' r 1*SP < r, i, z >}_3 & \quad \text{se } \texttt{y} \neq \texttt{``''} \text{ e } \texttt{z} \neq \texttt{``''}.\\ \end{array} \right. \] \normalsize onde \texttt{SP} é a regra definida na Tabela~\ref{tab:listadepares} e \begin{comment} \item \texttt{< x >} é a cadeia de caracteres que representando a URL de acesso ao \textbf{item identificado} com \textbf{IBI} especificado em \texttt{x}, \item \texttt{< x, y >} é a cadeia de caracteres representando a URL de acesso ao recurso (arquivo) especificado em \texttt{y} que compõe o \textbf{item identificado} com \textbf{IBI} especificado em \texttt{x}, \item \texttt{< x, z >} é a cadeia de caracteres representando a URL de acesso à página de exibição da lista de recursos (arquivos) que compõem o \textbf{item identificado} com \textbf{IBI} especificado em \texttt{x}, se \texttt{``GetFileList''} $\in$ \texttt{z}\footnote{Caso, por medida de segurança, a lista dos recursos (arquivos) que compõem um certo \textbf{item identificado} não deve ser divulgada, a página de exibição deve informar explicitamente que o acesso a lista não está permitida.}, senão é simplesmente a cadeia de caracteres \texttt{< x >}. \end{comment} \begin{enumerate} \item \texttt{< r, i >$_1$} é a cadeia de caracteres que representa a URL de acesso ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}, % \item \texttt{< i, ``Original'' >}$_2$ é a cadeia de caracteres representando a URL de acesso ao \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela variável \texttt{r}, desde que o \textbf{item de informação} seja tido como original. % \item \texttt{< i, ``Global Original'' >}$_2$ é a cadeia de caracteres representando a URL de acesso ao \textbf{item identificado} tido como original e com \textbf{IBI} especificado em \texttt{i} se o \textbf{item identificado} é orignal do ponto de visto legal, caso contrário, é a cadeia de caracteres representando a URL de acesso ao \textbf{item de informação} tido como original do ponto de vista legal e sendo identificado por um outro \textbf{sistema de identificação} global. \item \texttt{< r, i, y >$_2$} é a cadeia de caracteres que representa a URL de acesso ao recurso (arquivo) especificado em \texttt{y} e que compõe o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}. \item \texttt{< r, i, z >$_3$} é a cadeia de caracteres representando a URL de acesso à página de exibição da lista de recursos (arquivos) que compõem o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r}, se \texttt{``GetFileList''} $\in$ \texttt{z}\footnote{Quando, por medida de segurança, a lista dos recursos (arquivos) que compõem um determinado \textbf{item identificado} não pode ser divulgada, a página de exibição deve informar explicitamente que o acesso a lista não está permitida.}, caso contrário, será simplesmente a cadeia de caracteres \texttt{< r, i >$_1$}. % latex footnotes on same page \end{enumerate} A critério do \textbf{Arquivo}, a rotina \textsc{CriarParURL} pode usar ou não a variável global \texttt{clientinformation.ipaddress} para determinar qual URL será usada. Por exemplo, um \textbf{Arquivo} pode, por razão de licença de uso de um determinado \textbf{item de informação}, querer que uma \textbf{URL persistente} aponte para o próprio \textbf{item de informação} ou para seus metadados, dependendo do IP do usuário. Essa situação ocorre, em particular, para \textbf{Arquivos} que formam um repositório digital institucional, nos quais estão armazenados trabalhos já publicados em outros repositórios, como os das editoras científicas. % Exemplo 7.9 \begin{example}[Funcionamento da rotina \textsc{CriarParURL} para acessar a URL de um \textbf{item identificado}] \label{exa:funcionamentocriarparurl1} Com as variáveis globais \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist} vazias, a execução de: % http://urlib.net/8JMKD3MGP7W/3EPGUE5 % http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat%f3rio%20Final.pdf % http://urlib.net/LK47B6W/362SFKH % http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/@relatorio.pdf \begin{equation*} \textsc{CriarParURL}(\texttt{``''}, \texttt{``LK47B6W/362SFKH''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} % \footnotesize \scriptsize % \tiny % \texttt{``url http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.57/doc/Relat\%f3rio\%20Final.pdf''} % \texttt{url \href{http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/@relatorio.pdf}{http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/@relatorio.pdf}} \texttt{url http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/@relatorio.pdf} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparurl1}, a rotina \textsc{CriarParURL} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor do par, dado por \texttt{< ``'', ``LK47B6W/362SFKH'' >}$_1$, fornece a URL de acesso ao \textbf{item identificado} com \textbf{IBI} \texttt{LK47B6W/362SFKH}. % Caso a \textbf{URL persistente} for simplesmente \href{http://urlib.net/LK47B6W/362SFKH}{http://urlib.net/LK47B6W/362SFKH} (sem modificadores), então esta URL poderá ser selecionado pelo \textbf{resolvedor} para atender o usuário do \textbf{sistema para resolução de IBI}. % Exemplo 7.10 \begin{example}[Funcionamento da rotina \textsc{CriarParURL} para acessar a URL dos metadados de um \textbf{item identificado}] \label{exa:funcionamentocriarparulparametadados} Com as variáveis globais \texttt{parsedibiurl.filepath} e \texttt{parsedibiurl.verblist} vazias, a execução de: \begin{equation*} \textsc{CriarParURL}(\texttt{``.metadata''}, \texttt{``8JMKD3MGP7W/3EPGUE5''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} % \scriptsize \tiny \texttt{url.metadata http://mtc-m16d.sid.inpe.br/col/sid.inpe.br/mtc-m19/2013/09.04.12.27.58/doc/metadata.cgi} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparulparametadados}, a rotina \textsc{CriarParURL} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor do par, dado por \texttt{< ``.metadata'', ``8JMKD3MGP7W/3EPGUE5'' >}$_1$, fornece a URL de acesso aos metadados do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP7W/3EPGUE5}. % Exemplo 7.11 \begin{example}[Funcionamento da rotina \textsc{CriarParURL} para acessar a URL de um arquivo que compõe um \textbf{item identificado}] \label{exa:funcionamentocriarparurl2} Com a variável global \texttt{parsedibiurl.filepath} assumindo o valor \texttt{``reference.bib''}, a execução de: % http://urlib.net/LK47B6W/362SFKH/reference.bib \begin{equation*} \textsc{CriarParURL}(\texttt{``''}, \texttt{``LK47B6W/362SFKH''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} \scriptsize % \tiny \texttt{url http://mtc-m16d.sid.inpe.br/col/iconet.com.br/banon/2009/09.09.22.01/doc/reference.bib} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparurl2}, a rotina \textsc{CriarParURL} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor do par, dado por \texttt{< ``'', ``LK47B6W/362SFKH'' >}$_2$, fornece a URL de acesso ao arquivo \texttt{reference.bib} que compõe o \textbf{item identificado} com \textbf{IBI} \texttt{LK47B6W/362SFKH}. O nome desse arquivo é especificado na primeira variável global \texttt{parsedibiurl.filepath}. Em relação à URL criada no Exemplo~\ref{exa:funcionamentocriarparurl1}, observa-se que o nome de arquivo \texttt{@relatorio.pdf} foi substituído, na URL desse novo exemplo, pelo nome de arquivo \texttt{reference.bib}. Com essa opção, foi possível substituir o nome de arquivo \texttt{@relatorio.pdf}, considerado arquivo padrão (ou arquivo alvo), por um outro nome de arquivo que compõe o \textbf{item identificado}. O exemplo seguinte mostra como acessar a lista de todos os arquivos que compõem o \textbf{item identificado}. % Exemplo 7.12 \begin{example}[Funcionamento da rotina \textsc{CriarParURL} para acessar a URL da página de exibição da lista dos arquivos que compõem um \textbf{item identificado}] \label{exa:funcionamentocriarparurl3} Com a variável global \texttt{parsedibiurl.verblist} contendo o valor \texttt{``GetFileList''}, a execução de: % http://urlib.net/LK47B6W/362SFKH?ibiurl.verblist=GetFileList \begin{equation*} \textsc{CriarParURL}(\texttt{``''}, \texttt{``LK47B6W/362SFKH''}) \end{equation*} resultou em uma cadeia de caracteres formando o par: \begin{equation*} \scriptsize % \tiny \texttt{url http://mtc-m16d.sid.inpe.br/displaydoccontent.cgi/LK47B6W/362SFKH?displaytype=FileList} \end{equation*} \qed \end{example} No Exemplo~\ref{exa:funcionamentocriarparurl3}, a rotina \textsc{CriarParURL} é usada para criar uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}. O valor do par, dado por \texttt{< ``'', ``LK47B6W/362SFKH'' >}$_3$, fornece a URL de acesso à página de exibição dos arquivos que compõem o \textbf{item identificado} com \textbf{IBI} \texttt{LK47B6W/362SFKH}. % Caso não existir ainda uma próxima edição para o \textbf{item identificado} com \textbf{IBI} \texttt{i}, a execução de \textsc{CriarPar}(\texttt{``ibi.nextedition''}, \texttt{i}) (Linha 16 do Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL}) deve retornar o mesmo valor que \textsc{CriarPar}(\texttt{``ibi''}, \texttt{i}). % Da mesma forma, caso não existir uma próxima edição para o \textbf{item identificado} com \textbf{IBI} \texttt{i}, a execução de \textsc{CriarPar}(\texttt{x ``.lastedition'' [t] [m [t]]}, \texttt{i}), onde \texttt{t} e \texttt{m} são as regras da Tabela~\ref{tab:relacao}, deve retornar o mesmo valor que \textsc{CriarPar}(\texttt{x}, \texttt{i}) para todo \texttt{x} assumindo os valores \texttt{``contenttype''}, \texttt{``ibi''}, \texttt{``state''}, \texttt{``timestamp''} ou \texttt{``url''}. % Finalmente, toda vez que o valor de \textsc{CriarParURL}(\texttt{r}, \texttt{i}) for uma cadeia de caracteres não vazia para uma determinada relação \texttt{r} e um determinado \textbf{IBI} \texttt{i}, então para todo ``\texttt{nome = contenttype | state | timestamp}'' (usando a notação BNF) os valores de \textsc{CriarPar}(\texttt{(nome r)}, \texttt{i}) as Linhas 26, 28 e 30 do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}) deverão ser também uma cadeia de caracteres não vazia. Isto é importante, por exemplo, para que o \textbf{resolvedor} seja informado do estado (original ou cópia) do \textbf{item de informação} apontado por uma determinada URL e assim o \textbf{sistema para resolução} poder atender a uma solicitação de \textbf{URL persistente} quando o par \texttt{ibiurl.requireditemstatus=Original} é anexado à URL de base \texttt{http://urlib.net}. Após a execução da rotina \textsc{CriarParURL}, sua saída é testada a Linha 25 do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}). Se essa não for vazia, então as rotinas \textsc{CriarPar}, das Linhas 27, 29 e 31, deverão ser executadas. Isto é importante, por exemplo, para que o \textbf{resolvedor} seja informado do \textbf{estado} (original ou cópia) do \textbf{item de informação} apontado por uma determinada URL. Assim, o \textbf{sistema para resolução de IBI} poderá atender uma solicitação de \textbf{URL persistente} quando o par \texttt{ibiurl.requireditemstatus=Original} é anexado à URL de base \texttt{http://urlib.net}. % Finalmente, se não existir (ainda) uma próxima edição para o \textbf{item de informação} relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r} dada por ``\texttt{[t] [m [t]]}'' (usando a notação BNF), onde \texttt{t} e \texttt{m} são as regras da Tabela~\ref{tab:relacao}, a execução de \textsc{CriarParIBI}(\texttt{``.lastedition''} \texttt{r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{``.lastedition''} \texttt{r}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r}, \texttt{i}). % ".lastedition" [t] [m [t]] == [t] [m [t]] % [t] ".lastedition" [m [t]] == [t] [m [t]] % Finalmente, se não existir (ainda) uma próxima edição para o \textbf{item de informação} que fora relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido pela relação \texttt{r} dada por \texttt{[t] } (usando a notação BNF (aumentada)), em que \texttt{t} é a regra da Tabela~\ref{tab:relacao}, a execução de \textsc{CriarParIBI}(\texttt{r ``.lastedition''}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r ``.lastedition''}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r}, \texttt{i}). % Finalmente, se não existir (ainda) uma próxima edição para o \textbf{item de informação}, a execução de \textsc{CriarParIBI}(\texttt{``.lastedition'' [t] [m [t]]}, \texttt{i}) e \textsc{CriarParURL}(\texttt{``.lastedition'' [t] [m [t]]}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{[t] [m [t]]}, \texttt{i}) e \textsc{CriarParURL}(\texttt{[t] [m [t]]}, \texttt{i}). Finalmente, se não existir (ainda) uma próxima edição para o \textbf{item identificado} com \textbf{IBI} \texttt{i}, a execução de \textsc{CriarParIBI}(\texttt{``.lastedition'' r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{``.lastedition'' r}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r}, \texttt{i}), para toda relação \texttt{r} tal que ``\texttt{``.lastedition'' r}'' (usando a notação BNF (aumentada)) pertença ao subconjunto \texttt{relações}, a variável global do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}). Nas mesmas condições, a execução de \textsc{CriarPar}(\texttt{x ``.lastedition'' r}, \texttt{i}) deverá retornar o mesmo valor que \textsc{CriarPar}(\texttt{x r}, \texttt{i}) para todo \texttt{x} assumindo os valores \texttt{``contenttype''}, \texttt{``state''} ou \texttt{``timestamp''}. De forma similar, se não existir (ainda) uma próxima edição para uma tradução \texttt{t} do \textbf{item identificado} com \textbf{IBI} \texttt{i}, a execução de \textsc{CriarParIBI}(\texttt{t ``.lastedition'' r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{t ``.lastedition'' r}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{t r}, \texttt{i}) e \textsc{CriarParURL}(\texttt{t r}, \texttt{i}), para toda relação \texttt{r} tal que ``\texttt{t ``.lastedition'' r}'' (usando a notação BNF (aumentada)) pertença ao subconjunto \texttt{relações}. Nas mesmas condições, a execução de \textsc{CriarPar}(\texttt{x t ``.lastedition'' r}, \texttt{i}) deverá retornar o mesmo valor que \textsc{CriarPar}(\texttt{x t r}, \texttt{i}) para todo \texttt{x} assumindo os valores \texttt{``contenttype''}, \texttt{``state''} ou \texttt{``timestamp''}. % Da mesma forma, se não existir (ainda) uma próxima edição para o \textbf{item de informação} que fora relacionado ao \textbf{item identificado} com \textbf{IBI} \texttt{i}, de acordo com o relacionamento definido por qualquer relação \texttt{r} dada por \texttt{[t]} (usando a notação BNF (aumentada)), em que \texttt{t} é a regra da Tabela~\ref{tab:relacao}, a execução de \textsc{CriarParIBI}(\texttt{r ``.lastedition'' [m [t]]}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r ``.lastedition'' [m [t]]}, \texttt{i}), deverá retornar o mesmo valor que, respectivamente, \textsc{CriarParIBI}(\texttt{r [m [t]]}, \texttt{i}) e \textsc{CriarParURL}(\texttt{r [m [t]]}, \texttt{i}). % Da mesma forma, se não existir uma próxima edição para o \textbf{item identificado} com \textbf{IBI} \texttt{i}, a execução de \textsc{CriarPar}(\texttt{x ``.lastedition'' [t] [m [t]]}, \texttt{i}), onde \texttt{t} e \texttt{m} são as regras da Tabela~\ref{tab:relacao}, deverá retornar o mesmo valor que \textsc{CriarPar}(\texttt{x}, \texttt{i}) para todo \texttt{x} assumindo os valores \texttt{``contenttype''}, \texttt{``state''} ou \texttt{``timestamp''}. % Da mesma forma, a execução de \textsc{CriarPar}(\texttt{x r ``.lastedition''}, \texttt{i}) deverá retornar o mesmo valor que \textsc{CriarPar}(\texttt{x r}, \texttt{i}) para todo \texttt{x} assumindo os valores \texttt{``contenttype''}, \texttt{``state''} ou \texttt{``timestamp''}. Esta convenção consiste em admitir que, se não existir (ainda) uma próxima edição, a última edição deverá ser simplesmente a edição atual (cf. comentários acompanhando o Exemplo~\ref{exa:funcionamentodeontarlistadeurl}). Uma vez processada cada \texttt{relação} do \textsl{loop} \textsf{\textbf{Para Cada}} do Algoritmo~\ref{alg:montarlistadeurl} (\textsc{MontarListaDeURL}), a variável \texttt{resposta} contém, na forma de uma lista de pares, todas as propriedades conhecidas do \textbf{IBI} objeto da resolução. Seu valor é então retornado a Linha 33. % A rotina \textsc{CriarParRedirec}, usada no Algoritmo~\ref{alg:montarlistadeurl} \textsc{MontarListaDeURL}, cria uma cadeia de caracteres que forma um par, conforme a regra \texttt{par} da Tabela~\ref{tab:listadepares}, cujo nome é \texttt{redirecttometadata} e cujo valor, referente ao \textbf{IBI} informado em seu único argumento, é \texttt{yes} ou \texttt{no}. O valor \texttt{yes} indica ao \textbf{resolvedor} que a URL de acesso deve ser a dos metadados do \textbf{item identificado} com o \textbf{IBI} informado, e não o póprio \textbf{item identificado}. Essa rotina normalmente usa a variável global \texttt{clientinformation.ipaddress} para determinar o valor do par referente ao \textbf{IBI} informado. Assim, dependendo do IP do usuário e a critério do \textbf{Arquivo}, a \textbf{URL persistente} poderá apontar para o \textbf{item identificado} ou os seus metadados. \chapter{Exemplos de comunicação entre o \textbf{resolvedor} e os \textbf{Arquivos}} \label{chap:exemplocomunicacao} \section{Exemplo sem modificador de IBI} \begin{comment} ResolveIBI: input parsedIBIURL {parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 parsedibiurl.filepath {} parsedibiurl.verblist {} parsedibiurl.metadatafieldnamelist {} parsedibiurl.backgroundlanguage {} parsedibiurl.metadataheader {} parsedibiurl.cssfileurl {} parsedibiurl.requiredsite {} parsedibiurl.requireditemstatus {} parsedibiurl.querylist {}} contextLanguage pt-BR displayWarningMessage 1 callingProcedureName {} useURLibServerFlag 0 >>>1493377526 ReturnURLPropertyList input: criterionList clientinformation.ipaddress 189.69.52.107 clientinformation.languagepreference {pt-BR,pt;q=0.8,fr;q=0.5,en;q=0.3} parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 FindURLPropertyList: criterionList2 - input of GetURLPropertyList clientinformation.ipaddress 189.69.52.107 parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 FindURLPropertyList: HTTP request http://urlib.net/dpi.inpe.br/banon/2004/02.16.09.29?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.242/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/banon/2003/12.10.19.30?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/hermes2@80/2006/05.03.12.24?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.247/sid.inpe.br/bibdigital@80/2006/04.07.15.50?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/sid.inpe.br/banon/2001/04.03.15.36?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.250/sid.inpe.br/banon/2001/03.09.09.16?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/sid.inpe.br/banon/2001/03.30.15.38?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/plutao@80/2008/08.19.15.01?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/lcp.inpe.br/ignes/2004/02.12.18.39?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.243/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/bighost.com.br/gabi_sf/2005/12.11.22.35?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.248/sid.inpe.br/banon/2003/08.15.17.40?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.249/sid.inpe.br/banon/2001/04.06.10.52?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/marte2/2013/05.17.15.03.06?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21b/2013/09.26.14.25.20?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest >>>1493377526 ReturnURLPropertyList: searchResultList - output of FindURLPropertyList archiveaddress mtc-m16c.sid.inpe.br contenttype Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state Original timestamp 2009-07-21T14:43:31Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf urlkey 1427244889-5349022633744855 archiveaddress mtc-m16c.sid.inpe.br contenttype Data contenttype.metadata Metadata contenttype.metadata(BibINPE) Metadata contenttype.metadata(BibTeX) Metadata contenttype.metadata(oai_dc) Metadata contenttype.metadata.translation Metadata contenttype.translation(en) Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.metadata {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33} ibi.metadata(BibINPE) {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33} ibi.metadata(BibTeX) {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33} ibi.metadata(oai_dc) {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33} ibi.metadata.translation {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33} ibi.nextedition {rep sid.inpe.br/mtc-m18/2012/07.12.18.08} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} ibi.translation(en) {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43} state Original state.metadata Original state.metadata(BibINPE) Original state.metadata(BibTeX) Original state.metadata(oai_dc) Original state.metadata.translation Original state.translation(en) Original timestamp 2009-07-21T14:43:31Z timestamp.metadata 2014-04-04T20:32:36Z timestamp.metadata(BibINPE) 2014-04-04T20:32:36Z timestamp.metadata(BibTeX) 2014-04-04T20:32:36Z timestamp.metadata(oai_dc) 2014-04-04T20:32:36Z timestamp.metadata.translation 2014-04-04T20:32:36Z timestamp.translation(en) 2009-07-21T14:43:31Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf url.metadata http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33/doc/metadata.cgi url.metadata(BibINPE) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33/doc/metadata.cgi?choice=fullBibINPE url.metadata(BibTeX) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33/doc/metadata.cgi?choice=fullbibtex url.metadata(oai_dc) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33/doc/metadata.cgi?choice=oai_dc url.metadata.translation http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43.33/doc/metadata.cgi url.translation(en) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf urlkey 1427245206-54732938957476 ResolveIBI2: url 0 Get-: output of ResolveIBI archiveaddress mtc-m16c.sid.inpe.br contenttype Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state Original timestamp 2009-07-21T14:43:31Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf urlkey 1427244889-5349022633744855 Get-: query string for acknowledgment contenttype Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} servicesubject acknowledgment state Original url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf url.persistent http://urlib.net:80/8JMKD3MGP8W/35MMLL8 urlkey 1427244889-5349022633744855 http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?contenttype=Data&ibi=rep%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43%20ibip%208JMKD3MGP8W/35MMLL8&servicesubject=acknowledgment&state=Original&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8&urlkey=1427244889-5349022633744855 Location: http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf \end{comment} % http://urlib.net/8JMKD3MGP8W/35MMLL8 No exemplo escolhido, considera-se que o \textbf{resolvedor} recebeu a mensagem ``Resolver IBI''~(2) da Figura~\ref{fig:diagramasequenciaresolucaoIBI}, correspondente à \textbf{URL persistente}: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8}{http://urlib.net/8JMKD3MGP8W/35MMLL8}} \end{center} Essa URL é a segunda do Exemplo~\ref{exa:urlpersistentes}. Ao receber esta URL, o resolvedor capturou, conforme a Tabela~\ref{tab:dadoscapturados}, os seguintes pares de informação: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \small \texttt{clientinformation.ipaddress \{172.16.44.200 150.163.68.1\}}\\ \texttt{clientinformation.languagepreference pt-BR,fr;q=0.8,en;q=0.5,pt;q=0.3}\\ \texttt{parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8} \end{flushleft} O primeiro par informa o IP do usuário (\texttt{172.16.44.200}) e do seu procurador (\texttt{150.163.68.1}). O segundo par informa a preferência de idioma selecionada pelo usuário em seu navegador (aqui, o primeiro idioma de preferência do usuário é o português (\texttt{pt}) do Brasil (\texttt{BR})). O terceiro informa o \textbf{IBI} da \textbf{URL persistente}, objeto da resolução. Em seguida, o \textbf{resolvedor} emitiu a mensagem ``Solicitar URL''~(3) da Figura~\ref{fig:diagramasequenciaresolucaoIBI}, endereçada a todos os \textbf{Arquivos} incluídos no \textbf{sistema para resolução de IBI}, anexando à URL de base referente a cada \textbf{Arquivo} os pares \texttt{=} conforme a Tabela~\ref{tab:solicitacaourl}, parte deles sendo os capturados ao receber a mensagem ``Resolver IBI''~(2). Por exemplo, a mensagem destinada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} e \textbf{serviço de Arquivo} com \textbf{IBI} \texttt{sid.inpe.br/mtc-m18@80/2008/03.17.15.17}, foi: % http://150.163.34.243/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=189.69.52.107&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8&servicesubject=urlRequest \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \small \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&servicesubject=urlRequest}{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&servicesubject=urlRequest}{clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&servicesubject=urlRequest}{parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&servicesubject=urlRequest}{servicesubject=urlRequest}} \end{flushleft} A primeira resposta ``lista de URL''~(4) (cf. Figura~\ref{fig:diagramasequenciaresolucaoIBI}) não vazia, recebida dos \textbf{Arquivos}, foi a lista de pares: \tiny \begin{verbatim} archiveaddress mtc-m16c.sid.inpe.br contenttype Data ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state Original timestamp 2009-07-21T14:43:31Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf urlkey 1427244889-5349022633744855 \end{verbatim} \normalsize Essa lista traz as propriedades disponíveis a respeito do \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8} mencionado no terceiro par (com nome \texttt{ibi}). Nessa lista, o primeiro par indica ao \textbf{resolvedor} que foi precisamente o \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} que possuía informações sobre o \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Observa-se que a resposta contém, no oitavo par (com nome \texttt{url}), a URL de acesso ao \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. No passo seguinte, o \textbf{resolvedor} emitiu a mensagem ``Agradecer''~(5) endereçada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br}, isto é, ao \textbf{Arquivo} que forneceu a URL de acesso ao \textbf{item identificado} com \textbf{IBI} 8JMKD3MGP8W/35MMLL8. Conforme a Tabela~\ref{tab:agradecimento}, a URL correspondente a essa mensagem foi: % http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?contenttype=Data&ibi=rep%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43%20ibip%208JMKD3MGP8W/35MMLL8&servicesubject=acknowledgment&state=Original&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS%20650.0-B-1.pdf&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8&urlkey=1427244889-5349022633744855 \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \footnotesize \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{contenttype=Data\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{servicesubject=acknowledgment\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{state=Original\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{\ \ \ \ CCSDS\%20650.0-B-1.pdf\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Data\&ibi=rep\%20sid.inpe.br/mtc-m18@80/2009/07.21.14.43\%20ibip\%208JMKD3MGP8W/35MMLL8\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8\&urlkey=1427244889-5349022633744855}{urlkey=1427244889-5349022633744855}} \end{flushleft} A resposta ``aviso''~(6) (cf. Figura~\ref{fig:diagramasequenciaresolucaoIBI}) do \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} foi, então, o par: \vspace{-4mm} \begin{equation*} \texttt{notice \{acknowledgment received\}} \end{equation*} Finalmente, o \textbf{resolvedor} retornou ao navegador do usuário, para redirecionamento, a URL~(7): % http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \footnotesize \texttt{\href{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf}{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18@80/2009/07.21.14.43/doc/CCSDS\%20650.0-B-1.pdf}{\ \ \ \ CCSDS\%20650.0-B-1.pdf}} \end{flushleft} \section{Exemplo com modificador de IBI} \label{sec:exemplocommodificador} \begin{comment} ResolveIBI: input parsedIBIURL {parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 parsedibiurl.filepath {} parsedibiurl.verblist {GetLastEdition GetMetadata(BibINPE)} parsedibiurl.metadatafieldnamelist {} parsedibiurl.backgroundlanguage {} parsedibiurl.metadataheader {} parsedibiurl.cssfileurl {} parsedibiurl.requiredsite {} parsedibiurl.requireditemstatus {} parsedibiurl.querylist {}} contextLanguage pt-BR displayWarningMessage 1 callingProcedureName {} useURLibServerFlag 0 >>>333108260 ReturnURLPropertyList input: criterionList clientinformation.ipaddress 187.57.190.231 clientinformation.languagepreference {pt-BR,fr;q=0.8,en;q=0.5,pt;q=0.3} parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 parsedibiurl.verblist {GetLastEdition GetMetadata(BibINPE)} >>>333108260 ReturnURLPropertyList: criterionList2 - input of FindURLPropertyList clientinformation.ipaddress 187.57.190.231 parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8 parsedibiurl.verblist {GetLastEdition GetMetadata(BibINPE)} FindURLPropertyList: HTTP request http://urlib.net/dpi.inpe.br/banon/2004/02.16.09.29?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/banon/2003/12.10.19.30?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/hermes2@80/2006/05.03.12.24?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.247/sid.inpe.br/bibdigital@80/2006/04.07.15.50?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/sid.inpe.br/banon/2001/04.03.15.36?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.250/sid.inpe.br/banon/2001/03.09.09.16?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/sid.inpe.br/banon/2001/03.30.15.38?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/plutao@80/2008/08.19.15.01?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/lcp.inpe.br/ignes/2004/02.12.18.39?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.242/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.243/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/bighost.com.br/gabi_sf/2005/12.11.22.35?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.248/sid.inpe.br/banon/2003/08.15.17.40?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.249/sid.inpe.br/banon/2001/04.06.10.52?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/marte2/2013/05.17.15.03.06?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21b/2013/09.26.14.25.20?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(BibINPE)\&servicesubject=urlRequest >>>333108260 ReturnURLPropertyList: searchResultList - output of FindURLPropertyList archiveaddress mtc-m16c.sid.inpe.br ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.nextedition {rep sid.inpe.br/mtc-m18/2012/07.12.18.08} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} ResolveIBI2: url.lastedition.metadata(BibINPE) 0 ResolveIBI: input parsedIBIURL {parsedibiurl.cssfileurl {} parsedibiurl.backgroundlanguage {} parsedibiurl.ibi sid.inpe.br/mtc-m18/2012/07.12.18.08 parsedibiurl.requireditemstatus {} parsedibiurl.filepath {} parsedibiurl.querylist {} parsedibiurl.requiredsite {} parsedibiurl.metadataheader {} parsedibiurl.metadatafieldnamelist {} parsedibiurl.verblist GetMetadata(BibINPE)} contextLanguage {} displayWarningMessage 0 callingProcedureName {} useURLibServerFlag 0 >>>333325495 ReturnURLPropertyList input: criterionList clientinformation.ipaddress 187.57.190.231 clientinformation.languagepreference {pt-BR,fr;q=0.8,en;q=0.5,pt;q=0.3} parsedibiurl.ibi sid.inpe.br/mtc-m18/2012/07.12.18.08 parsedibiurl.verblist GetMetadata(BibINPE) >>>333325495 ReturnURLPropertyList: criterionList2 - input of FindURLPropertyList clientinformation.ipaddress 187.57.190.231 parsedibiurl.ibi sid.inpe.br/mtc-m18/2012/07.12.18.08 parsedibiurl.verblist GetMetadata(BibINPE) FindURLPropertyList: HTTP request http://urlib.net/dpi.inpe.br/banon/2004/02.16.09.29?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/banon/2003/12.10.19.30?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/hermes2@80/2006/05.03.12.24?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.247/sid.inpe.br/bibdigital@80/2006/04.07.15.50?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/sid.inpe.br/banon/2001/04.03.15.36?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.250/sid.inpe.br/banon/2001/03.09.09.16?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/sid.inpe.br/banon/2001/03.30.15.38?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/dpi.inpe.br/plutao@80/2008/08.19.15.01?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.246/lcp.inpe.br/ignes/2004/02.12.18.39?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.242/sid.inpe.br/mtc-m19@80/2009/08.21.17.02?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.243/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.245/bighost.com.br/gabi_sf/2005/12.11.22.35?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.248/sid.inpe.br/banon/2003/08.15.17.40?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.249/sid.inpe.br/banon/2001/04.06.10.52?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.241/dpi.inpe.br/marte2/2013/05.17.15.03.06?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21b/2013/09.26.14.25.20?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest FindURLPropertyList: HTTP request http://150.163.34.239/sid.inpe.br/mtc-m21/2012/06.05.15.34.39?clientinformation.ipaddress=187.57.190.231\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetMetadata(BibINPE)\&servicesubject=urlRequest >>>333325495 ReturnURLPropertyList: searchResultList - output of FindURLPropertyList archiveaddress mtc-m16c.sid.inpe.br contenttype.metadata(BibINPE) Metadata ibi {rep sid.inpe.br/mtc-m18/2012/07.12.18.08 ibip 8JMKD3MGP8W/3C9EP6P} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.metadata(BibINPE) {rep sid.inpe.br/mtc-m18/2012/07.12.18.08.49} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state.metadata(BibINPE) Original timestamp.metadata(BibINPE) 2014-04-04T17:36:01Z url.metadata(BibINPE) http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=fullBibINPE urlkey 1426195759-7482124485596707 ResolveIBI2: url.metadata(BibINPE) 1 Get-: output of ResolveIBI archiveaddress mtc-m16c.sid.inpe.br contenttype Metadata ibi {rep sid.inpe.br/mtc-m18/2012/07.12.18.08.49} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state Original timestamp 2014-04-04T17:36:01Z url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=fullBibINPE urlkey 1426195759-7482124485596707 Get-: query string for acknowledgment servicesubject acknowledgment contenttype Metadata ibi {rep sid.inpe.br/mtc-m18/2012/07.12.18.08.49} url http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=fullBibINPE url.persistent http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(BibINPE) urlkey 1426195759-7482124485596707 http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?servicesubject=acknowledgment\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3fchoice\%3dfullBibINPE\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(BibINPE)\&urlkey=1426195759-7482124485596707 Location: http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=fullBibINPE \end{comment} No exemplo escolhido, considera-se que o \textbf{resolvedor} recebeu a mensagem ``Resolver IBI''~(2) da Figura~\ref{fig:diagramasequenciaresolucaoIBI}, correspondente à \textbf{URL persistente}: \begin{center} \texttt{\href{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}{http://urlib.net/8JMKD3MGP8W/35MMLL8!:(oai\_dc)}} \end{center} Essa URL é a segunda do Exemplo~\ref{exa:urlpersistentescommodificadores}. Concatenado ao \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}, o modificador \texttt{!:(oai\_dc)} informou o \textbf{resolvedor} que devia retornar no formato \textsl{oai\_dc}, os metadados da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Ao receber esta URL, o resolvedor capturou os seguintes pares de informação: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \small \texttt{clientinformation.ipaddress \{172.16.44.200 150.163.68.1\}}\\ \texttt{clientinformation.languagepreference pt-BR,fr;q=0.8,en;q=0.5,pt;q=0.3}\\ \texttt{parsedibiurl.ibi 8JMKD3MGP8W/35MMLL8}\\ \texttt{parsedibiurl.verblist \{GetLastEdition GetMetadata(oai\_dc)\}}\\ \end{flushleft} % O par da primeira linha informou o IP do usuário. O par da segunda linha informou a preferência de idioma selecionada pelo usuário em seu navegador (aqui, o primeiro idioma de preferência do usuário é o português (\texttt{pt}) do Brasil (\texttt{BR})). O par da terceira linha informou o \textbf{IBI} da \textbf{URL persistente}, objeto da resolução. Finalmente, o par da última linha informou a lista dos dois verbos que descrevem o modificador \texttt{!:(oai\_dc)} da \textbf{URL persistente} (cf. Tabela~\ref{tab:verbos}). A ordem dos verbos indicou que o \textbf{resolvedor} deverá retornar, no formato \texttt{oai\_dc}, os metadados da última edição do \textbf{item identificado}. % O par da primeira linha informou o IP do usuário. O par da segunda linha informou a preferência de idioma selecionada pelo usuário em seu navegador (aqui, o primeiro idioma de preferência do usuário é o português (\texttt{pt}) do Brasil (\texttt{BR})). O par da terceira linha informou o \textbf{IBI} da \textbf{URL persistente}, objeto da resolução. Finalmente, o O último par informa a lista dos dois verbos que descrevem o modificador \texttt{!:(oai\_dc)} da \textbf{URL persistente} (cf. Tabela~\ref{tab:verbos}). % A ordem dos verbos indicou que o \textbf{resolvedor} devia retornar, no formato \texttt{oai\_dc}, os metadados da última edição do \textbf{item identificado}. % Em seguida, o \textbf{resolvedor} emitiu a mensagem ``Solicitar URL''~(3) da Figura~\ref{fig:diagramasequenciaresolucaoIBI}, endereçada a todos os \textbf{Arquivos} incluídos no \textbf{sistema para resolução de IBI}, anexando à URL de base, referente a cada \textbf{Arquivo}, parte dos pares capturados ao receber a mensagem ``Resolver IBI''~(2) (com exceção do par com nome \texttt{clientinformation.languagepreference}, conforme Tabela~\ref{tab:dadoscapturados}). Por exemplo, a mensagem destinada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} e \textbf{serviço de Arquivo} com \textbf{IBI} \texttt{sid.inpe.br/mtc-m18@80/2008/03.17.15.17} foi: Em seguida, o \textbf{resolvedor} emitiu a mensagem ``Solicitar URL''~(3) da Figura~\ref{fig:diagramasequenciaresolucaoIBI}, endereçada a todos os \textbf{Arquivos} incluídos no \textbf{sistema para resolução de IBI}% %, anexando à URL de base, referente a cada \textbf{Arquivo}, parte dos pares capturados ao receber a mensagem ``Resolver IBI''~(2) (com exceção do par com nome \texttt{clientinformation.languagepreference}, conforme Tabela~\ref{tab:dadoscapturados}) . Por exemplo, a mensagem destinada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} e \textbf{serviço de Arquivo} com \textbf{IBI} \texttt{sid.inpe.br/mtc-m18@80/2008/03.17.15.17} foi: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \small \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{clientinformation.ipaddress=172.16.44.200\%20150.163.68.11\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.11\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=8JMKD3MGP8W/35MMLL8\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{servicesubject=urlRequest}} \end{flushleft} A primeira resposta ``lista de URL''~(4) (cf. Figura~\ref{fig:diagramasequenciaresolucaoIBI}) não vazia, recebida dos \textbf{Arquivos}, foi a lista de pares: \scriptsize \begin{verbatim} archiveaddress mtc-m16c.sid.inpe.br ibi {rep sid.inpe.br/mtc-m18@80/2009/07.21.14.43 ibip 8JMKD3MGP8W/35MMLL8} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.nextedition {rep sid.inpe.br/mtc-m18/2012/07.12.18.08} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} \end{verbatim} \normalsize % Essa lista trouxe as propriedades disponíveis a respeito do \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8} mencionado no par com nome \texttt{ibi} (segundo par). Nessa lista, o primeiro par indicou ao \textbf{resolvedor} que o \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} possuía informações sobre o \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Entretanto, observa-se que a resposta não contém, como esperado, o par com nome \texttt{url.lastedition}, cujo valor seria a URL de acesso à última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. No entanto, a lista contém o par com nome \texttt{ibi.nextedition} (quarto par), cujo valor é o \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08} para uma nova edição do \textbf{item identificado}. Nesse caso então, o \textbf{resolvedor} teve que emitir uma nova mensagem ``Solicitar URL''~(3) endereçada novamente a todos os \textbf{Arquivos} para tentar resolver o \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08}. Desta vez, dentre de todas as mensagens emitidas, a mensagem destinada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} foi: Essa lista traz as propriedades disponíveis a respeito do \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}% % mencionado no par com nome \texttt{ibi} (segundo par) . % Nessa lista, o primeiro par indicou ao \textbf{resolvedor} que o \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} possuía informações sobre o \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Entretanto, observa-se que a resposta não contém, como esperado, o par com nome \texttt{url.lastedition.metadata(oai\_dc)}, cujo valor seria a URL de acesso aos metadados, no formato \textsl{oai\_dc}, da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. Nem contém o par com nome \texttt{ibi.lastedition}, cujo valor seria o \textbf{IBI} da última edição do \textbf{item identificado}. No entanto, a lista contém o par com nome \texttt{ibi.nextedition} (quarto par), cujo valor é o \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08} de uma nova edição do \textbf{item identificado}. Nesse caso então, o \textbf{resolvedor} teve que emitir uma nova mensagem ``Solicitar URL''~(3) endereçada novamente a todos os \textbf{Arquivos} para tentar resolver o \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08}. Desta vez, entre todas as mensagens emitidas, a mensagem destinada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} foi: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \small \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&parsedibiurl.ibi=sid.inpe.br/mtc-m18/2012/07.12.18.08\&parsedibiurl.verblist=GetLastEdition\%20GetMetadata(oai\_dc)\&servicesubject=urlRequest}{servicesubject=urlRequest}} \end{flushleft} Comparando a primeira solicitação ``Solicitar URL''~(3) com esta segunda, observa-se que no par com nome \texttt{parsedibiurl.ibi}, o valor \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08} (\textbf{IBI} da próxima edição) está substituindo o valor \texttt{8JMKD3MGP8W/35MMLL8} (\textbf{IBI} da edição anterior). A primeira resposta ``lista de URL''~(4) (cf. Figura~\ref{fig:diagramasequenciaresolucaoIBI}) não vazia, recebida dos \textbf{Arquivos}, foi a lista de pares: % http://mtc-m16c.sid.inpe.br/8JMKD3MGP8W/35MMLL8 % http://mtc-m16c.sid.inpe.br/8JMKD3MGP8W/35MMLL8!:(oai_dc) %\scriptsize \tiny \begin{verbatim} archiveaddress mtc-m16c.sid.inpe.br contenttype.lastedition.metadata(oai_dc) Metadata ibi {rep sid.inpe.br/mtc-m18/2012/07.12.18.08 ibip 8JMKD3MGP8W/3C9EP6P} ibi.archiveservice {rep sid.inpe.br/mtc-m18@80/2008/03.17.15.17} ibi.lastedition.metadata(oai_dc) {rep sid.inpe.br/mtc-m18/2012/07.12.18.08.49} ibi.platformsoftware {rep dpi.inpe.br/banon/1998/08.02.08.56} state.lastedition.metadata(oai_dc) Original timestamp.lastedition.metadata(oai_dc) 2014-04-04T17:36:01Z url.lastedition.metadata(oai_dc) http://mtc-m16c ... br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=oai_dc urlkey 1426286454-36108967764060357 \end{verbatim} \normalsize Essa nova lista traz as propriedades disponíveis a respeito do \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08}, mencionado no terceiro par (com nome \texttt{ibi}). Nessa lista, o primeiro par indica ao \textbf{resolvedor} que o \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} possuía informações sobre o \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08}% %que identificava, como foi visto na solicitação anterior, uma nova edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8 . Entretanto, agora, em vez e exibir o \textbf{IBI} para uma próxima edição\footnote{Isto indica que o \textbf{item identificado} com \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08} não possui uma próxima edição, ou seja a última edição deste \textbf{item} é ele próprio.}, a resposta contém no nono par (com nome \texttt{url.lastedition.metadata(oai\_dc)}) a URL de acesso aos metadados, no formato \textsl{oai\_dc}, da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{sid.inpe.br/mtc-m18/2012/07.12.18.08}. % Lembrando que esse último \textbf{IBI} era o da próxima edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}, objeto inicial da resolução, essa URL de acesso aos metadados é, também, a URL de acesso aos metadados da última edição do \textbf{item identificado} com \textbf{IBI} \texttt{8JMKD3MGP8W/35MMLL8}. O que encerrou a sequência de solicitações de URL, lembrando que a última edição de qualquer edição com IBI $i$ é também a última edição de qualquer outra edição com IBI $j$. No passo seguinte, o \textbf{resolvedor} emitiu a mensagem ``Agradecer''~(5) endereçada ao \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br}, isto é, ao \textbf{Arquivo} que forneceu a URL de acesso aos metadados, no formato \textsl{oai\_dc}, da última edição do \textbf{item identificado} com \textbf{IBI} 8JMKD3MGP8W/35MMLL8. A URL correspondente a essa mensagem foi: \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \footnotesize \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{contenttype=Metadata\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{servicesubject=acknowledgment\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{state=Original\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{\ \ \ \ metadata.cgi\%3Fchoice\%3Doai\_dc\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/sid.inpe.br/mtc-m18@80/2008/03.17.15.17?clientinformation.ipaddress=172.16.44.200\%20150.163.68.1\&contenttype=Metadata\&ibi=rep\%20sid.inpe.br/mtc-m18/2012/07.12.18.08.49\&servicesubject=acknowledgment\&state=Original\&url=http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi\%3Fchoice\%3Doai\_dc\&url.persistent=http://urlib.net:80/8JMKD3MGP8W/35MMLL8!:(oai\_dc)\&urlkey=1426286454-36108967764060357}{urlkey=1426286454-36108967764060357}} \end{flushleft} A resposta ``aviso''~(6) (cf. Figura~\ref{fig:diagramasequenciaresolucaoIBI}) do \textbf{Arquivo} com endereço \textsl{Web} \texttt{mtc-m16c.sid.inpe.br} foi, então, o par: \vspace{-4mm} \begin{equation*} \texttt{notice \{acknowledgment received\}} \end{equation*} Finalmente, o \textbf{resolvedor} retornou ao navegador do usuário, para redirecionamento, a URL~(7): \begin{flushleft} \renewcommand{\baselinestretch}{0.9} \footnotesize \texttt{\href{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=oai\_dc}{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/}}\\ \texttt{\href{http://mtc-m16c.sid.inpe.br/col/sid.inpe.br/mtc-m18/2012/07.12.18.08.49/doc/metadata.cgi?choice=oai\_dc}{\ \ \ \ metadata.cgi?choice=oai\_dc}} \end{flushleft} \clearpage \bibliography{./reference} \hypertarget{references}{} \inicioApendice %\include{./docs/apendice1} %% insira apendices tal qual capítulos acima %\hypertarget{estilo:apendice1}{} %% uso para este Guia %Este apêndice foi criado apenas para indicar como construir um apêndice no estilo, não existia no original da tese. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{APÊNDICE A - Regras \texttt{idioma} e \texttt{país}} \label{apendiceA} O significado de cada dupla de caracteres pode ser consultado em \citeonline{ISO:2002:CoReNa} para idioma e \citeonline{ISO:2013:CoReNa} para país. \begin{table}[H] % \renewcommand{\baselinestretch}{0.9} \renewcommand{\baselinestretch}{1} % \small \footnotesize \caption{Regras definindo a formação de \texttt{idioma} e \texttt{país}} \label{tab:idiomapais} \begin{center} \begin{tabular}{rcl} \verb!idioma! & \verb!=! & \verb!"aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" |! \\ & & \verb!"ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" |! \\ & & \verb!"br" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" |! \\ & & \verb!"cy" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" |! \\ & & \verb!"et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "fr" | "fy" | "ga" |! \\ & & \verb!"gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "hr" |! \\ & & \verb!"ht" | "hu" | "hy" | "hz" | "ia" | "id" | "ie" | "ig" | "ii" | "ik" |! \\ & & \verb!"io" | "is" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" |! \\ & & \verb!"kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" |! \\ & & \verb!"ky" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" |! \\ & & \verb!"mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" |! \\ & & \verb!"na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "no" | "nr" | "nv" |! \\ & & \verb!"ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" |! \\ & & \verb!"pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" |! \\ & & \verb!"se" | "sg" | "si" | "sk" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" |! \\ & & \verb!"sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "th" |! \\ & & \verb!"ti" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" |! \\ & & \verb!"ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" |! \\ & & \verb!"yi" | "yo" | "za" | "zh" | "zu"! \\ \verb!país! & \verb!=! & \verb!"AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AQ" | "AR" |! \\ & & \verb!"AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" |! \\ & & \verb!"BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" |! \\ & & \verb!"BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" |! \\ & & \verb!"CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" |! \\ & & \verb!"CU" | "CV" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" |! \\ & & \verb!"DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" |! \\ & & \verb!"FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" |! \\ & & \verb!"GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" |! \\ & & \verb!"GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" |! \\ & & \verb!"ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" |! \\ & & \verb!"JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" |! \\ & & \verb!"KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" |! \\ & & \verb!"LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" |! \\ & & \verb!"MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" |! \\ & & \verb!"MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" |! \\ & & \verb!"NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" |! \\ & & \verb!"NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" |! \\ & & \verb!"PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" |! \\ & & \verb!"RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" |! \\ & & \verb!"SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" |! \\ & & \verb!"SX" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" |! \\ & & \verb!"TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" |! \\ & & \verb!"UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" |! \\ & & \verb!"VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW"! \\ \end{tabular} \end{center} \renewcommand{\baselinestretch}{1} \normalsize \end{table} \begin{comment} http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes set x {ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nd ne ng nb nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sk sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 set x {AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW} llength $x 249 set list {} foreach {x1 x2 x3 x4 x5 x6 x7 x8 x9 x10} [lsort $x] { lappend list "\"$x1\" | \"$x2\" | \"$x3\" | \"$x4\" | \"$x5\" | \"$x6\" | \"$x7\" | \"$x8\" | \"$x9\" | \"$x10\" |" } \end{comment}