]> git.uio.no Git - u/philim/db2osl_thesis.git/commitdiff
Major change
authorPhilipp Martis <martispp@hspc31.informatik.uni-stuttgart.de>
Fri, 13 May 2016 17:05:53 +0000 (19:05 +0200)
committerPhilipp Martis <martispp@hspc31.informatik.uni-stuttgart.de>
Fri, 13 May 2016 17:05:53 +0000 (19:05 +0200)
Change involving restructuring and additional (sub)subsections
Dependencies from uncommon LaTeX packages were removed.
Many TODOs were fixed.
Bibliography was changed and extended.

19 files changed:
Bachelor thesis.pdf
Bachelor thesis.tex
Images/bootstrapping_illustration.pdf [new file with mode: 0644]
Images/inherit_graph_8.inkscape.svg
Images/inherit_graph_8.pdf
OSL-Specification.pdf
OSL-Specification.tex
background.tex
bibliography.bib
introduction.tex
osl.tex
program.tex
program_arch.tex
program_code.tex
program_functionality.tex
program_interface.tex
program_stats.tex
program_tools.tex
program_versioning.tex

index cbaa64bd41a565eb2c3c7c103782df7b08c164a2..11e89fafa7708141150c46206bfa517a5b54f498 100644 (file)
Binary files a/Bachelor thesis.pdf and b/Bachelor thesis.pdf differ
index 658fe890b5a7b9e43fc85f782dd19ae4ae42e232..7b82bafd8cca5de13f549b69fff16a181a24a2b2 100644 (file)
@@ -8,7 +8,6 @@
        relational databases}
 \newcommand{\myprog}{\name{db2osl}}
 \newcommand{\osl}{\name{OSL}}
-\newcommand{\oslspec}{\osl{} specification}
 \newcommand{\myfontsize}{12pt}
 \newcommand{\smallerfontsize}{11pt}
 \newcommand{\smallfontsize}{10pt}
 
 % Mathematische Symbole etc.
 \usepackage{amsmath,amssymb}
-\usepackage[binary-units=true,decimalsymbol=comma]{siunitx}
+%\usepackage[binary-units=true,decimalsymbol=comma]{siunitx}
 
 % Algorithmen
-\usepackage{algpseudocode}
-\usepackage{algorithm}
-\usepackage{algorithmicx}
+%\usepackage{algpseudocode}
+%\usepackage{algorithm}
+%\usepackage{algorithmicx}
 
 % Tabellen
 \usepackage{longtable,lscape}
             author={Philipp Martis},
             type=bachelor,
             institute=ipvs,
-            number=TODO,
+            number=281,
             course=cs,
             examiner={PD\ Dr.\ Holger Schwarz},
             supervisor={M. Sc. Leif Harald Karlsen},
diff --git a/Images/bootstrapping_illustration.pdf b/Images/bootstrapping_illustration.pdf
new file mode 100644 (file)
index 0000000..5554835
Binary files /dev/null and b/Images/bootstrapping_illustration.pdf differ
index 0ac27987e8d630570110997c2f3df765cd58dd56..65f9e958093ef9791ff6bce7aec748f0336b7e4d 100644 (file)
Binary files a/Images/inherit_graph_8.inkscape.svg and b/Images/inherit_graph_8.inkscape.svg differ
index fe441d9182048ac911135d795a19ef1a20f51a1f..76652070f35fba8616d448b6967d39ee1bea56d8 100644 (file)
Binary files a/Images/inherit_graph_8.pdf and b/Images/inherit_graph_8.pdf differ
index dd18b6dea77dc32d010240c737443b637bed6e1e..02340dd248f4c745009952eb05f4758cad6d0765 100644 (file)
Binary files a/OSL-Specification.pdf and b/OSL-Specification.pdf differ
index 9f8519c63ae25c0b5c288faba6c91498b68822df..8e191b6ca0e67083d6a633beba2ec68fcb983dfe 100644 (file)
@@ -8,7 +8,6 @@
        Specification}
 \newcommand{\myprog}{\name{db2osl}}
 \newcommand{\osl}{\name{OSL}}
-\newcommand{\oslspec}{\osl{} specification}
 \newcommand{\myfontsize}{12pt}
 \newcommand{\smallerfontsize}{11pt}
 \newcommand{\smallfontsize}{10pt}
 
 % Mathematische Symbole etc.
 \usepackage{amsmath,amssymb}
-\usepackage[binary-units=true,decimalsymbol=comma]{siunitx}
+%\usepackage[binary-units=true,decimalsymbol=comma]{siunitx}
 
 % Algorithmen
-\usepackage{algpseudocode}
-\usepackage{algorithm}
-\usepackage{algorithmicx}
+%\usepackage{algpseudocode}
+%\usepackage{algorithm}
+%\usepackage{algorithmicx}
 
 % Tabellen
 \usepackage{longtable,lscape}
index 7c9a0250e0aa18ff1398bf542b13eab75276838f..766877c444c45e779bb5cc0590be7813c0176387 100644 (file)
@@ -1,18 +1,12 @@
 \chapter{Background and related work}
-Bei experimentellen Untersuchungen sind die benutzte Versuchsanordnung
-sowie Messanordnungen und Messverfahren ausführlich zu
-beschreiben. Analog sind die Grundlagen eventuell verwendeter oder
-erweiterter Berechnungsprogramme zusammenfassend darzustellen. Bei
-übernommenen Formeln, Bildern, Tabellen und bei Zitaten ist stets die
-Quelle durch den Namen des Verfassers und die zugehörige Nummer im
-Literaturverzeichnis anzugeben (z.B. \cite{eng})
+TODO: Grundlagen (?)\\
 
-Nam eu dolor a nisl faucibus suscipit. Nulla interdum sapien id lectus. Curabitur fringilla pulvinar nibh. Aenean porta luctus purus. Cras dictum mauris quis velit. Nullam pharetra pede at risus. Nullam orci sapien, porttitor eu, iaculis et, bibendum ultricies, ipsum. Mauris eget justo. Donec semper auctor tortor. Mauris a ante et magna facilisis mollis. Proin sem turpis, interdum quis, fermentum aliquet, faucibus scelerisque, quam. In mi nibh, facilisis eu, euismod sed, luctus ut, sapien. Etiam ut dui eget libero dapibus elementum.
-
-Nulla ut felis et libero tempus luctus. Praesent vitae velit. Vivamus pharetra pharetra sem. Morbi id mauris. Ut sem mauris, fermentum non, interdum eu, nonummy non, nunc. Aenean a sem et odio ornare dictum. Phasellus fermentum justo quis justo. Aenean et felis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur faucibus ornare augue. Nullam blandit pellentesque odio. Vestibulum tempor tempor ante. Etiam scelerisque elementum diam. Vestibulum enim sem, dictum et, rhoncus vitae, ullamcorper ut, dolor. Sed diam.
+\section{Background}
+As explained in section \fullref{motivation}, the sole bootstrapping of
+\name{RDF} triples \cite{rdf} or other forms of structured information
+from relational database schemata is a relatively well understood topic.
 
-Sed dignissim diam vel erat. Pellentesque ac lacus sed dui vehicula tristique. Curabitur justo sapien, convallis in, faucibus nec, hendrerit eu, sapien. Quisque imperdiet lacus vitae lacus. Vestibulum aliquet rutrum enim. Fusce et leo. Ut id dui non felis rhoncus laoreet. Nullam ipsum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+TODO: OPTIQUE \cite{optique}
 
 
-\section{Background}
 \section{Related work}
index 52c3f36b085d9b5c50d1882ea09a1b2f3f5b4351..d3acd4d22e32c00aa73211b0460b39007cd1bf06 100644 (file)
@@ -1,21 +1,3 @@
-@COMMENTBook{schlichting67,
-       author         = {H.~Schlichting and E.~Truckenbrodt},
-       title          = {Aerodynamik des Flugzeugs, Band 1},
-       publisher      = {Springer Verlag},
-       address        = {Berlin/Heidelberg/New York},
-       year           = 1967
-}
-
-@COMMENTTechReport{hartwick71,
-       author         = {G.~Hartwick and S.~Sadler},
-       title          = {Program Documentation for Development and Application of a Method for Predicting Rotor Wake Geometries and Rotor Wake Geometries and Rotor Loads},
-       institution    = {NASA},
-       address        = {New York},
-       year           = 1971,
-       type           = {Report},
-       number         = {69-9}
-}
-
 @Article{eng,
        shorthand      = {SGH\textsuperscript{+}15},
        author         = {Martin G. Skjæveland and Martin Giese and Dag Hovland and Espen H. Lian and Arild Waaler},
@@ -29,7 +11,7 @@
 @misc{owl,
        shorthand      = {W3C12},
        author         = {W3C OWL Working Group},
-       title          = {OWL 2 Web Ontology Language, Document Overview (Second Edition)},
+       title          = {OWL 2 Web Ontology Language - Document Overview (Second Edition)},
        year           = 2012,
        howpublished   = {\url{https://www.w3.org/TR/owl2-overview/}},
        note           = {[Accessed: 2016-04-02]}
@@ -45,8 +27,8 @@
 }
 
 @misc{dirm,
-       shorthand      = {W3C12},
-       author         = {TODO},
+       shorthand      = {W3CR12},
+       author         = {RDB2RDF Working Group},
        title          = {A Direct Mapping of Relational Data to RDF},
        year           = 2012,
        howpublished   = {\url{https://www.w3.org/TR/rdb-direct-mapping/}},
@@ -74,7 +56,6 @@
        month          = may,
        number         = 5,
        pages          = {34--43},
-       url            = {http://www.sciam.com/article.cfm?articleID=00048144-10D2-1C70-84A9809EC588EF21},
        volume         = 284,
        year           = 2001
 }
  address = {New York, NY, USA},
  keywords = {Java, Javari, assignable, immutability, mutable, readonly, type system, verification},
 }
+
+@inproceedings{optique,
+  shorthand = {KGJR\textsuperscript{+}13},
+  author = {Kharlamov, Evgeny and Giese, Martin and Jiménez-Ruiz, Ernesto and Skjæveland, Martin G. and Soylu, Ahmet and Zheleznyakov, Dmitriy and Bagosi, Timea and Console, Marco and Haase, Peter and Horrocks, Ian and Marciuska, Sarunas and Pinkel, Christoph and Rodriguez-Muro, Mariano and Ruzzi, Marco and Santarelli, Valerio and Savo, Domenico Fabio and Sengupta, Kunal and Schmidt, Michael and Thorstensen, Evgenij and Trame, Johannes and Waaler, Arild},
+  biburl = {http://www.bibsonomy.org/bibtex/2b2fd27981eefec0983a98a0da793f1a8/dblp},
+  booktitle = {International Semantic Web Conference (Posters \& Demos)},
+  crossref = {conf/semweb/2013p},
+  editor = {Blomqvist, Eva and Groza, Tudor},
+  ee = {http://ceur-ws.org/Vol-1035/iswc2013_demo_17.pdf},
+  interhash = {ee631e8fa9c8764e12ef94e82b4458a2},
+  intrahash = {b2fd27981eefec0983a98a0da793f1a8},
+  keywords = {dblp},
+  pages = {65--68},
+  publisher = {CEUR-WS.org},
+  series = {CEUR Workshop Proceedings},
+  title = {Optique 1.0: Semantic Access to Big Data: The Case of Norwegian Petroleum Directorate's FactPages},
+  volume = 1035,
+  year = 2013
+}
+
+@inproceedings{optique2,
+  shorthand = {CGH\textsuperscript{+}13},
+  title = {The Optique Project: Towards OBDA Systems for Industry (Short Paper)},
+  author = {D. Calvanese and M. Giese and P. Haase and I. Horrocks and T. Hubauer and Y. Ioannidis and E. Jim\'{e}nez-Ruiz and E. Kharlamov and H. Kllapi and J. Kl{\"u}wer and M. Koubarakis and S. Lamparter and R. M{\"o}ller and C. Neuenstadt and T. Nordtveit and {\"O}. {\"O}zcep and M. Rodriguez-Muro and M. Roshchin and Marco Ruzzi and F. Savo and M. Schmidt and A. Soylu and A. Waaler and D. Zheleznyakov},
+  year = "2013",
+  booktitle = "OWL Experiences and Directions Workshop (OWLED)",
+}
+
+@techreport{unix,
+   author = {M. D. McIlroy},
+   title = {A Research {UNIX} Reader: Annotated Excerpts from the Programmer's Manual, 1971-1986},
+   institution = {{AT\&T} Bell Laboratories},
+   year = {1987},
+   number = {CSTR 139}
+}
+
+@book{patterns,
+ author = {Buschmann, Frank and Meunier, Regine and Rohnert, Hans and Sommerlad, Peter and Stal, Michael},
+ title = {Pattern-Oriented Software Architecture - Volume 1: A System of Patterns},
+ year = {1996},
+ isbn = {0471958697, 9780471958697},
+ publisher = {Wiley Publishing}
+}
+
+@book{gof,
+  address = {Reading, MA},
+  author = {Gamma, Erich and Helm, Richard and Johnson, Ralph and Vlissides, John},
+  biburl = {http://www.bibsonomy.org/bibtex/2b074c2848d5c64657278632da5ecbd08/chato},
+  citeulike-article-id = {240673},
+  interhash = {d46ec5e2c98583730aa182ceb4a3ab22},
+  intrahash = {b074c2848d5c64657278632da5ecbd08},
+  keywords = {design; patterns; programming},
+  publisher = {Addison Wesley},
+  title = {Design Patterns},
+  year = 1995
+}
+
+@article{posix,
+shorthand = {IEEE13},
+journal={IEEE Std 1003.1, 2013 Edition (incorporates IEEE Std 1003.1-2008, and IEEE Std 1003.1-2008/Cor 1-2013)},
+title={Standard for Information Technology - Portable Operating System Interface (POSIX) - Base Specifications, Issue 7},
+year={2013},
+keywords={Application programming interfaces;File systems;IEEE standards;Information technology;Operating systems;CPU;FIFO;IEEE 1003.1;X/Open System Interface (XSI);application program interface (API);argument;asynchronous;basic regular expression (BRE);batch job;batch system;built-in utility;byte;child;command language interpreter;extended regular expression (ERE);file access control mechanism;input/output (I/O);job control;network;parent;portable operating system interface (POSIX);shell;stream;string;synchronous;system;thread},
+doi={10.1109/IEEESTD.2013.6506091},
+month={April},
+}
+
+@book{log,
+  title={Logging in Java with the JDK 1.4 Logging API and Apache log4j},
+  author={Gupta, S.},
+  isbn={9781590590997},
+  lccn={2003005480},
+  series={Apresspod Series},
+  year={2003},
+  publisher={Apress}
+}
+
+@misc{rdf,
+       shorthand      = {W3C14},
+       author         = {W3C RDF Working Group},
+       title          = {RDF 1.1 Concepts and Abstract Syntax},
+       year           = 2014,
+       howpublished   = {\url{https://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/}},
+       note           = {[Accessed: 2016-05-13]}
+}
+
+@misc{doxygen,
+  title={Doxygen: Source code documentation generator tool},
+  author={van Heesch, Dimitri},
+  howpublished={\url{http://www.doxygen.org}},
+  year={2016},
+  note={[Accessed: 2016-05-13]}
+}
+
+@misc{javadoc,
+  shorthand = {Ora16},
+  title={javadoc - The Java API Documentation Generator},
+  author={{Oracle Corporation}},
+  howpublished={\url{http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html}},
+  year={2016},
+  note={[Accessed: 2016-05-13]}
+}
+
+@book{struc,
+ author = {Dijkstra, E. W.},
+ editor = {Dahl, O. J. and Dijkstra, E. W. and Hoare, C. A. R.},
+ title = {Structured Programming},
+ year = {1972},
+ isbn = {0-12-200550-3},
+ source = {Library of Congress Catalog Card Number: 72-84452},
+ publisher = {Academic Press Ltd.},
+ address = {London, UK, UK}
+}
+
+@book{clean,
+ author = {Martin, Robert C.},
+ title = {Clean Code: A Handbook of Agile Software Craftsmanship},
+ year = {2008},
+ isbn = {0132350882, 9780132350884},
+ edition = {1},
+ publisher = {Prentice Hall PTR},
+ address = {Upper Saddle River, NJ, USA}
+}
+
+@book{weavingweb,
+ author = {Berners-Lee, Tim and Fischetti, Mark},
+ title = {Weaving the Web: The Original Design and Ultimate Destiny of the World Wide Web by Its Inventor},
+ year = {1999},
+ isbn = {0062515861},
+ edition = {1st},
+ publisher = {Harper San Francisco}
+}
+
+@techreport{web,
+  added-at = {2016-05-10T14:36:44.000+0200},
+  author = {Berners-Lee, Tim},
+  biburl = {http://sandbox.academic-puma.de/bibtex/27025bb82bcc97e330af31c908df0818a/alistair},
+  institution = {CERN},
+  interhash = {8fad800e51f4c9ae788b2ec32fa605e8},
+  intrahash = {7025bb82bcc97e330af31c908df0818a},
+  keywords = {grammar linguistic},
+  note = {March 1989, May 1990},
+  timestamp = {2017-11-18T00:00:13.000+0100},
+  title = {{I}nformation {M}anagement: {A} {P}roposal},
+  topics = {area.hyper,area.www},
+  url = {http://www.w3.org/History/1989/proposal.html},
+  year = 1989
+}
index 9627dce586650f92495d5af864193bc0610e87ec..802371268b96f5658cf89f24a88bd8be60132f7c 100644 (file)
@@ -1,28 +1,28 @@
 \chapter{Introduction}
-Sie führt in die Problematik ein, skizziert die Motivation und
-Zielsetzung sowie das geplante Vorgehen und die angestrebten
-Ergebnisse und sollte ca. 1 - 2 Seiten umfassen.\\
+\label{intro}
 
 \section{Motivation}
+\label{motivation}
 As estimated in 2007 \cite{deepweb}, publicly available databases contained
 up to 500 times more data than the static web and roughly 70 \% of all
 websites were backed by relational databases back then.
 As hardware has become cheaper yet more powerful, open source tools have
 become more and more widespread and the web has gotten more and more dynamic
 and interactive, it's likely that these numbers have even increased since then.
-This makes the publication of available data in a structured,
-machine-processable form
-and its retrieval with eligible software (Ontology based data access, OBDA)
-an interesting topic.
-This vision emerged as early as TODO and was entitled with the term ``semantic web''
-by Tim Berners-Lee \cite{thesemanticweb}.
-Definitely, the automatic translation of relational databases to RDF
-or similar representations of structured information is
+This makes the publication of available data in a structured, machine-processable
+form and its retrieval with eligible software an interesting topic.
+The most important formalism to represent structured data without the need of
+a fixed (database) schema is ontologies, and thus this approach is known
+under the term ``Ontology based data access'' (``OBDA'').
+The vision of a machine-processable web emerged as early as 1989 \cite{web}
+and was entitled with the term ``semantic web''
+by Tim Berners-Lee in 1999 \cite{weavingweb}.
+Definitely, the automatic translation of relational databases to \name{RDF}
+\cite{rdf} or similar representations of structured information is
 an integral part of the success of the semantic web \cite{deepweb}.
 This automatic translation process is commonly called ``bootstrapping''.
 
-Early work regarding the development of bootstrapping systems includes TODO.
-Today, the pure translation process is a relatively well understood topic,
+Today, the pure bootstrapping process is a relatively well understood topic,
 ranging from the rather simple direct mapping approach \cite{dirm} to TODO.
 On the other hand, the handling of the complexity introduced by these approaches
 and the use of sophisticated tools to perform various related tasks
@@ -37,15 +37,18 @@ all the information needed to coordinate the bootstrapping process
 and to drive the entire tool chain \cite{eng}.
 
 \section{Approach}
+\label{approach}
 This thesis describes the development of a specification language to serialize
-the declarative specification of the bootstrapping process and of a
+the declarative specification of the bootstrapping process
+(see section \fullref{motivation}) and of a
 software to in turn bootstrap it from a relational database schema.
 After the tasks they accomplish,
 the specification language was called ``OBDA Specification Language'' (``OSL'')
 and the software bootstrapping the specification was called ``db2osl''.
 
 Using a declarative specification makes the entire bootstrapping process a
-two-step-procedure: First, the OBDA specification is derived from the
+two-step-procedure, illustrated in figure \ref{intro_fig_bootstrapping}:
+First, the OBDA specification is derived from the
 database schema using \myprog{}.
 It specifies the actual bootstrapping process in a very general way,
 so it only has to be recreated when the database schema changes.
@@ -55,31 +58,35 @@ The development of a software that uses the OBDA specification
 to perform this second step currently is subject to ongoing work.
 It will be able to be parameterized accordingly to support different output
 formats, tools, tool versions and application ranges.
-\\\\TODO: illustration of overall process
+
+\begin{figure}[H]\begin{center}
+               \includegraphics[scale=0.9]{Images/bootstrapping_illustration.pdf}
+               \caption[Illustration of the overall
+                       bootstrapping process]{Illustration of the overall
+                       bootstrapping process using a declarative OBDA specification}
+               \label{intro_fig_bootstrapping}
+       \end{center}\end{figure}
 
 \section{Requirements and goals}
 The final system shall be able to cleanly fit into existing bootstrapping systems
 while being easy to use, taking the burden of dealing with \osl{} specifications
 manually from its users instead of adding even more complexity to the process.
-To achieve the former goal, use of existing tools, languages and conventions was
+To achieve these goals, use of existing tools, languages and conventions was
 made wherever possible.
-To fit into the environment used in the OPTIQUE project TODO it is ultimately
+To fit into the environment used in the OPTIQUE project\cite{optique2} it is ultimately
 part of, \name{Java} was used for the bootstrapping software.
 Care was taken to design it to be modular and flexible, making it
-usable not only as a whole but also as a collection of independent components
+usable not only as a whole but also as a collection of independent components,
 possibly serving as the basis for a program library in the future.
-To further support this aim TODO and to make the software more easily
+To achieve this aim and to make the software more easily
 understandable and extensible, it was documented carefully and thoroughly.
 
 As the software will be maintained by diverse people after its development and will
 likely be subject to changes, general code quality was also an issue to consider.
-Following good object-oriented software development practice TODO,
-real world artifacts like database schemas, database tables, columns, keys,
-OBDA specifications et cetera were modeled as software objects, provided with a
+Following good object-oriented software development practice \cite{str3},
+real world artifacts like database schemata, database tables, columns, keys,
+and OBDA specifications were modeled as software objects, provided with a
 carefully chosen set of operations to manipulate them and make them collaborate.
-Scarce, informative comments were inserted at places of higher complexity and to
-expose logical subdivisions, but care was taken to use ``speaking code'' in favor
-of rampant comments.
-Complex, misleading and hard-to-use interfaces were avoided wherever possible.
-External software libraries employed were chosen to be stable, specific,
-well structured, publicly available and ideally in wide use.
+This approach and other actions aiming at yielding clean code are described more
+thoroughly in section \fullref{code}, while
+the resulting structure of the software is discussed in section \fullref{arch}.
diff --git a/osl.tex b/osl.tex
index 56e910c9ca763ff32e501e9180e4f804dd49583d..c5ea8e39847350b9b29025bf588e0d26595ee9cb 100644 (file)
--- a/osl.tex
+++ b/osl.tex
@@ -26,13 +26,13 @@ machine-readable form for which tools are widely available, enabling the user to
 many aspects of an \osl{} document for conformity with minimal effort.
 
 \section{Specification}
-\label{oslspec}
+\label{osl_spec}
 \newcounter{parcount}
 \newcommand{\parnum}{\textsuperscript{\arabic{parcount}}}
 \newcommand{\p}{\refstepcounter{parcount} \parnum \hspace{1em}}
 
 \p An \osl{} document is a valid \name{OWL} 2 document (as described in \cite{owl})
-containing individuals and data that represent the OBDA Specification,
+containing individuals and data that represent the OBDA specification,
 as well as \name{OWL} properties that connect them.
 The individuals and \name{OWL} properties are recognized and mapped to their roles
 by their IRIs.
index 2ddb521f6ca1642cc03df694d8282db118805abf..26d70cd85e347eb137fc0a1d907f80207eca3486 100644 (file)
@@ -1,19 +1,20 @@
 \chapter{The db2osl software}
+\label{program}
 Besides the conception of the  ``OBDA Specification Language'' (\osl{}), the design
 and implementation of the \myprog{} software was an important part of this work.
 The program itself and its creation process are described in the following sections:
-Section \fullref{functionality} describes the functionality the program offers.
-Section \fullref{interface} describes how this functionality is exposed to the
+Section \ref{functionality} describes the functionality the program offers.
+Section \ref{interface} describes how this functionality is exposed to the
 program environment.
-Section \fullref{bootstrapping} explains in detail how the bootstrapping
+Section \ref{bootstrapping} explains in detail how the bootstrapping
 process was realized.
-Section \fullref{arch} describes the program architecture both on a coarse and
+Section \ref{arch} describes the program architecture both on a coarse and
 a fine level.
-Section \fullref{tools} explains what tools where used to create the program.
-Section \fullref{code} describes concepts and decisions that where implemented
+Section \ref{tools} explains what tools where used to create the program.
+Section \ref{code} describes concepts and decisions that where implemented
 on the code level to yield clean code.
-Section \fullref{stats} mentions some figures about the program.
-Section \fullref{versioning} gives a brief timewise TODO overview over the program
+Section \ref{stats} mentions some numbers and statistics about the program.
+Section \ref{versioning} gives a brief chronological overview over the program
 development and describes important milestones.
 For detailed descriptions of the classes and packages of \myprog{}, refer to
 Appendices TODO.
index a351b2b9af9e7ae6808bf20662fab0cb391b4de0..61d7be54e7ddba8d591b1e5361e9d4bbb0cf5464 100644 (file)
@@ -32,7 +32,7 @@ For a detailed package description, refer to Appendix TODO.
                \code{log} & Classes related to logging and diagnostic output\\
                \code{main} & The \code{Main} class\\
                \code{osl} & Classes representing OBDA specifications (as described in \cite{eng}) using the OBDA Specification Language (\osl{})\\
-               \code{output} & Classes used to output OBDA Specifications as described in \cite{eng}\\
+               \code{output} & Classes used to output OBDA specifications as described in \cite{eng}\\
                \code{settings} & Classes related to program and job settings (including command line parsing)\\
                \code{specification} & Classes representing (parts of) OBDA specifications (as described in \cite{eng}) directly, without involving \osl{}\\
                \code{test} & Classes offering testing facilities\\
@@ -72,7 +72,7 @@ and the presented partitioning was considered a more natural and
 comprehensible structuring, emphasizing different roles and thus being a more proper
 foundation for future extensions of the program.
 For example, because the \code{bootstrapping} package is central to the program and
-takes over TODO an active, processing role and in that is completely different
+takes over an active, processing role and in that is completely different
 from the classes of the \code{specification} package which on their part have a
 \emph{representing} role, it was considered senseful not to merge these two packages.
 This undergirds the separation of concerns within the program and stresses that
@@ -112,7 +112,7 @@ packages other than \code{settings} on other packages is three, which also seems
 reasonably less.
 However, in the new structuring, \code{specification} has no packages it depends on
 and thus suits its purpose of providing a mundane and straight-forward
-representation of an OBDA Specification much better.
+representation of an OBDA specification much better.
 %Furthermore, \code{output} doesn't depend on \code{database} anymore.
 
 \begin{figure}[H]\begin{center}
@@ -349,17 +349,17 @@ while standalone classes are listed in table \ref{arch_tbl_lone_classes}.
 
 Note that every class hierarchy has at least one \code{interface} at its top.
 Classes not belonging to a class hierarchy were chosen not to be given an interface
-``factitiously'', which would have made them part of a (small) class hierarchy TODO.
-Deliberately, the scheme often recommended in the Java world TODO
+``factitiously'', which would have made them part of a (small) class hierarchy \cite{java}.
+Deliberately, the scheme often recommended \cite{gof}
 to give every class an interface it \code{implements} was not followed
 but the approach described by Stroustrup \cite{str4} to provide a rich set of
 so called ``concrete types'' not designed for use within class hierarchies, which
-``build the foundation of every well-designed program \cite{str4}'' TODO.
+``build the foundation of every well-designed program'' \cite{str4}.
 The details of this consideration are explained in section \fullref{code_interfaces}.
 In fact, many useful types were already offered by the \name{Java} API
 and of course were not re-implemented.
 
-Class \code{Column} with its interface \code{ReadableColumn} is an exception TODO
+Class \code{Column} with its interface \code{ReadableColumn} is an exception
 in that it was given an interface although it is basically a concrete type.
 The reason for this is the chosen way to implement const correctness,
 described in section \nameref{const} (which is part of section \fullref{code_classes}).
index a514bbec4b925d73d467d4d625ffa455bb90f87d..4b6c112b7a8fc534002fb4908f255faeae134715 100644 (file)
@@ -1,14 +1,21 @@
 \section{Code style}
 \label{code}
-TODO: Conventions, ex.: iterators
-As the final system hopefully will have a long living cycle TODO
+TODO: Conventions, ex.: iterators\\
+As the final system hopefully will have a long lifetime cycle
 and will be used and refined by many people, high code quality was an important aim.
 Beyond architectural issues this also involves cleanness on the lower level,
 like the design of classes and the implementation of methods.
-Common software development principles were followed TODO and
+Common software development principles were followed and
 the unfamiliar reader was constantly taken into account
 to yield clean, readable and extensible code.
 
+%Scarce, informative comments were inserted at places of higher complexity and to
+%expose logical subdivisions, but care was taken to use ``speaking code'' in favor
+%of rampant comments.
+%Complex, misleading and hard-to-use interfaces were avoided wherever possible.
+%External software libraries employed were chosen to be stable, specific,
+%well structured, publicly available and ideally in wide use.
+
 \subsection{Comments}
 \label{comments}
 Comments were used at places ambiguities or misinterpretations could arise,
@@ -44,7 +51,7 @@ Wherever possible, the appropriate \name{Javadoc} comments were used in favor of
 plain comments, for example to specify parameters, return types, exceptions
 and links to other parts of the documentation.
 This proved even more useful due to the fact that \name{Doxygen} supports all
-of the used \name{Javadoc} comments TODO (but not vice versa TODO).
+of the used \name{Javadoc} comments \cite{doxygen} (but not vice versa \cite{javadoc}).
 
 \subsection{``Speaking code''}
 \label{speaking}
@@ -56,7 +63,8 @@ clean code amenable to unfamiliar readers and unpredictable changes was enforced
 This is especially important since, as described in section \fullref{arch},
 \myprog{} was designed to not only be a standalone program but also offer
 components suitable for reusability.
-%TODO: understandability <- code size
+
+TODO: understandability <- code size
 
 The following topics were identified to be addressed to get what can be
 conceived as ``speaking code'':
@@ -66,7 +74,6 @@ conceived as ``speaking code'':
        \item Variable names
        \item Intuitive control flow
        \item Limited nesting
-       \item Compact code units
        \item Usage of well-known structures
 \end{itemize}
 
@@ -82,7 +89,7 @@ Furthermore, inheritance should be used to express commonalities, to avoid
 code duplication and to separate implementations from interfaces \cite{str4}.
 
 All real-world artifacts to be modeled like database schemata, tables, table schemata.
-columns, keys and OBDA Specifications with their certain map types were directly
+columns, keys and OBDA specifications with their certain map types were directly
 translated into classes having simple predicting names like \code{Table},
 \code{TableSchema} and \code{Key}.
 Package affiliation provided the correct context to unambiguously understand these names.
@@ -96,17 +103,16 @@ Furthermore, method names often occur in interfaces and therefore are not limite
 to a local scope, and neither are easily changeable without affecting callers
 \cite{java}.
 
-Care was taken that method names reflect all important aspects of the respective
-method's behavior and 
-
-Consider the following method in \file{CLIDatabaseInteraction.java}:
+Ultimately, care was taken that method names reflect all important aspects
+of the respective method's behavior.
+Consider the following method from \file{CLIDatabaseInteraction.java}:
 \codepar{public static void promptAbortRetrieveDBSchemaAndWait\\
        \ind(final FutureTask<DBSchema> retriever) throws SQLException}
 
 It could have been called \code{promptAbortRetrieveDBSchema} only, with the
 waiting mentioned in a comment.
-However, the waiting is such an important part of its behavior, that this
-wouldn't have been enough, so the waiting was included in the function name.
+However, the waiting (blocking) is such an important part of its behavior, that this
+was considered not enough, so the waiting was included in the function name.
 Since the method is called at one place only, the lengthening of the method
 name by 7 characters or about 26 \% is really not a problem.
 
@@ -122,15 +128,83 @@ with ``\code{recvd}'', although in most cases this technically would not have
 been necessary.
 
 \subsubsection{Intuitive control flow}
+To consequently stick to the maxim of speaking code and further increase readability,
+control flow was tried to kept intuitive.
+\code{do-while} loops, for example, are unintuitive: they complicate matters due to
+the additional, unconditional, loop their reader has to keep in mind.
+Even worse, \name{Java}'s Syntax delays the occurrence of their most important
+control statement -- the loop condition -- till after the loop body.
+Usually, \code{do-while} loops can be circumvented by properly setting variables
+influencing the loop condition immediately before the loop and using a \code{while}
+loop.
+Consequently, \code{do-while} loops were omitted -- the code of \myprog{} does not
+contain a single \code{do-while} loop.
+TODO: references
+
+Another counterproductive technique is the avoidance of the advanced loop control
+statements \code{break}, \code{continue} and \code{return} and the sole direction
+of a loop's control flow with its loop condition, often drawing on additional
+boolean variables like \code{loopDone} or \code{loopContinued}.
+This approach is an essential part of the ``structured programming (paradigm)''
+\cite{struc} and its purpose is to enforce that a loop is always
+left regularly, by unsuccessfully checking the loop condition, which shall ease
+code verification \cite{struc}.
+A related topic is the general avoidance of the \code{return} statement (except at
+the end of a method) for similar considerations \cite{struc}.
+However, both are not needed \cite{clean} and, as always, the introduction
+of artificial technical constructs impairs readability and the ability of the code
+to ``speak for itself''.
+
+Consequently, control flow was not distorted for technical considerations
+and care was taken to yield straight-forward loops, utilizing advanced control
+statements to be concise and intuitive and cleverly designed methods that benefit
+from well-placed \code{return} statements.
 
 \subsubsection{Limited nesting}
-
-\subsubsection{Compact code units}
+A topic related to intuitive control flow is limited code nesting.
+Most introductions of new nesting levels greatly increase complexity,
+since the associated conditions for the respective code to be reached
+combine with the previous ones in often inscrutable ways.
+Besides being aware of the execution condition for the code he is currently
+reading, the reader is forced to either remember the sub-conditions introduced
+with each nesting level, as well as the current nesting level,
+or to jump back to the introduction of one or more nestings to figure out the
+relevant execution condition again.
+
+Naturally, such code is far from being readable and expressive.
+Thus, overly deep nesting was avoided by rearranging code or using control
+statements like \code{return} in favor of opening a new \code{if} block.
+The deepest and most complicated nesting in \myprog{} has level $5$
+(with normal, non-nested method code having level $0$), with
+one of these nestings being dedicated to a big enclosing \code{while} loop,
+one to a \code{try-catch} block and the remaining three to \code{if} blocks
+with no \code{else} parts and trivial one-expression conditions.
+Additionally, in this case all of the nesting blocks only contained
+a few lines of code, making the whole construction easily fit on one screen,
+so this was considered all right.
+At a few other places there occurs similar, less complicated, nesting up to level $5$.
+%These were similar to the above but with two enclosing loops and one or
+%even two \code{try-catch} blocks.
+TODO: references
 
 \subsubsection{Usage of well-known structures}
+Great benefit can be taken from constructs familiar to programmers
+regarding expressiveness.
+Surely, implementations based on such well-known constructs and patterns
+are much more likely to be instantly understood by programmers and therefore
+have a much higher ability of ``speaking for themselves''.
+
+Examples in \myprog{} are the (extensively used) iterator concept,
+const correctness (see paragraph ``\nameref{const}''
+in section \fullref{code_classes}), exceptions, predicates \cite{str4},
+run-time type information \cite{str4}, helper functions \cite{str4}
+and well-known interfaces from the \name{Java} API like \code{Set} or
+\code{Collection}, as well as common \name{Java} constructs, like
+classes performing a single action (e.g. \code{OSLSpecPrinter}), and
+naming schemes, like \code{get...}/\code{set...}/\code{is...}.
 
 \subsection{Robustness against incorrect use}
-Care was taken to produce code that is robust to incorrect use, making it
+Care was taken to produce code that is geared to incorrect use, making it
 suitable for the expected environment of sporadic updates by unfamiliar and
 potentially even unpracticed programmers, who besides have their emphasis
 on the concepts of bootstrapping rather than details of the present code anyway.
@@ -154,7 +228,7 @@ in combination, while cleanly fitting into the context of dynamic dispatching,
 are the following methods from \file{Column.java}:
 \codepar{public Boolean isNonNull()\\public Boolean isUnique()}
 
-There return type is the \name{Java} class \code{Boolean}, not the plain type
+Their return type is the \name{Java} class \code{Boolean}, not the plain type
 \code{boolean}, because the information they return is not always known.
 In an early stage of the program, they returned \code{boolean} and were
 accompanied by two methods
@@ -167,8 +241,8 @@ They were then changed to return the \name{Java} class \code{Boolean} and to ret
 null pointers in case the respective information is not known.
 This eliminated any possibility of using unreliable data in favor of generating
 exceptions instead, in this case a \code{NullPointerException}, which is thrown
-automatically by the \name{Java Runtime Environment} if the programmer forgets the
-null check and tries to get a definite value from one of these methods
+automatically by the \name{Java} Runtime Environment \cite{java} if the programmer
+forgets the null check and tries to get a definite value from one of these methods
 when the correct value currently is not known.
 
 Comparing two unknown values -- thus, two null pointers --
@@ -186,11 +260,11 @@ solution could make programmers making mistakes produce undetected errors, it wa
 
 TODO: summary
 
-\subsection{Classes}
+\subsection{Use of classes}
 \label{code_classes}
-Following the object-oriented programming paradigm, classes were heavily used
+Following the object-oriented programming paradigm \cite{obj}, classes were heavily used
 to abstract from implementation details and to yield intuitively usable objects with
-a set of useful operations \cite{obj}.
+a set of useful operations.
 
 \subsubsection{Identification of classes}
 To identify potential classes, entities from the problem domain were -- if reasonable --
@@ -202,7 +276,7 @@ and effective.
 As a consequence, the code declares classes like \code{Column}, \code{ColumnSet},
 \code{ForeignKey}, \code{Table}, \code{TableSchema} and \code{SQLType}.
 As described in section \fullref{speaking}, class names were chosen to be concise
-but nevertheless expressive TODO.
+but nevertheless expressive.
 \name{Java} packages were used to help attain this aim,
 which is why the previously mentioned class names are unambiguous.
 For details about package use, see section \fullref{code_packages}.
@@ -229,25 +303,28 @@ making it harder to achieve const correctness \cite{final}.
 It only specifies the similar keyword \code{final}, which is much less expressive and
 doesn't allow for a similarly effective error prevention \cite{final}.
 In particular, because \code{final} is not part of an object's type information,
-it is not possible to declare methods that return read-only objects TODO --
+it is not possible to declare methods that return read-only objects \cite{final} --
 placing a \code{final} before the method's return type would declare the
-method \code{final}. Similarly, there is no way to express that a method must not change
+method \code{final} \cite{java}.
+Similarly, there is no way to express that a method must not change
 the state of its object parameters. A method like \code{public f(final Object obj)}
 is only liable to not assigning a new value to its parameter object \code{obj} \cite{java}
 (which, if allowed, wouldn't affect the caller anyway \cite{java}).
-Methods changing its state, however, are allowed to be called on \code{obj} without
-restrictions \cite{java}.
+Methods changing its state, on the other hand,
+are allowed to be called on \code{obj} without restrictions.
 
 Several possibilities were considered to address this problem:
 \begin{itemize}
        \item Not implementing const correctness, but stating the access rules in
        comments only
-       \item Giving the methods which modify object states special names
-       like\\\code{setName\textendash\textendash USE\_WITH\_CARE}
-       \item Delegating changes of objects to special ``editor'' objects to be
-       obtained when an object shall be altered TODO
-       \item Deriving classes offering the modifying methods from the read-only
-       classes
+       \item Not implementing const correctness, but giving the methods which modify
+       object states special names like
+       \code{setName\textendash\textendash USE\_WITH\_CARE}
+       \item Implementing const correctness by delegating changes of objects
+       to special ``editor'' objects to be
+       obtained when an object shall be modified
+       \item Implementing const correctness by deriving classes offering
+       the modifying methods from read-only classes
 \end{itemize}
 
 Not implementing const correctness at all of course would have been the simplest
@@ -257,13 +334,14 @@ hard-to-spot errors which in many cases would have occurred under additional
 conditions only and at other places, for example when inserting a \code{Column}
 into a \code{ColumnSet}, this method was not seriously considered.
 
-Using intentionally angular, conspicuous names also was not considered seriously,
+Not implementing const correctness but using intentionally angular,
+conspicuous names also was not considered seriously,
 since it would have cluttered the code for the only sake of hopefully warning
 programmers of possible errors -- and not attempting to avoid them technically.
 
 So the introduction of new classes was considered the most effective and cleanest
 solution, either in the form of ``editor'' classes or derived classes offering the
-modifying methods directly. Again -- as in the identification of classes --,
+modifying methods directly. Again -- as during the identification of classes --,
 the most direct solution was considered the best, so the latter form of introducing
 additional classes was chosen and classes like \code{ReadableColumn},
 \code{ReadableColumnSet} et cetera were introduced which offer only the read-only
@@ -278,9 +356,9 @@ programmers that the resulting objects are to be used with care.
 
 \subsubsection{Java interfaces}
 \label{code_interfaces}
-In \name{Java} programming, it is quiet common and often recommended, that every
-class has at least one \code{interface} it \code{implements},
-specifying the operations the class provides. TODO
+In \name{Java} programming, it is quiet common and often recommended \cite{gof}
+that every class has at least one \code{interface} it \code{implements},
+specifying the operations the class provides.
 If no obvious \code{interface} exists for a class or the desired
 interface name is already given to some other entity,
 the interface is often given names like \code{ITableSchema}
@@ -290,8 +368,8 @@ However, for a special purpose program with a relatively fixed set of classes
 mostly representing real-world artifacts from the problem domain,
 this approach was considered overly cluttering, introducing artificial
 code entities for no benefit.
-In particular, as explained in section TODO, all program classes either are
-standing alone TODO or belong to a class hierarchy derived from at least one
+In particular, as explained in section \fullref{fine}, all program classes either
+are standing alone or belong to a class hierarchy derived from at least one
 interface.
 So, except from the standalone classes, an interface existed anyway, either
 ``naturally'' (as in the case of \code{Key}, for example) or because of
@@ -302,7 +380,7 @@ in some cases, \name{Java} interfaces like \code{Set} were implemented
 Introducing artificial interfaces for the standalone classes was considered
 unnecessary at least, if not messy.
 
-\subsection{Packages}
+\subsection{Use of packages}
 \label{code_packages}
 As mentioned in section \fullref{code_classes}, class names were chosen to be
 concise but nevertheless expressive.
@@ -313,28 +391,11 @@ For the current, relatively limited, extent of the program which currently
 comprises $45$ (\code{public}) classes, a flat package structure was
 considered ideal, because it is simple and doesn't stash source files deep
 in subdirectories (in \name{Java}, the directory structure of the source tree
-is required to reflect the package structure TODO).
+is required to reflect the package structure \cite{java}).
 Because also every class belongs to a package,
 each source file is to be found exactly one directory below the root
 program source directory, which in many cases eases their handling.
 
-The following $11$ packages exist in the program
-(their purpose and more details about the package structure are
-described in section \fullref{coarse}):
-\begin{multicols}{3}\begin{itemize}
-       \item \code{boostrapping}
-       \item \code{cli}
-       \item \code{database}
-       \item \code{helpers}
-       \item \code{log}
-       \item \code{main}
-       \item \code{osl}
-       \item \code{output}
-       \item \code{settings}
-       \item \code{specification}
-       \item \code{test}
-\end{itemize}\end{multicols}
-
 For the description of the packages, their interaction and considerations on
 their structuring, see section \fullref{coarse}.
 For a detailed package description, refer to Appendix TODO.
@@ -342,6 +403,6 @@ For a detailed package description, refer to Appendix TODO.
 Each package is documented in the source code also, namely in a file
 \file{package-info.java} residing in the respective package directory.
 This is a common scheme supported by the \name{Eclipse} IDE as well as the
-documentation generation systems \name{javadoc} and \name{doxygen} TODO
+documentation generation systems \name{Javadoc} and \name{Doxygen}
 (all of which were used in the creation of the program,
 as described in section \fullref{tools}).
index 439e192405b0d3f4bd14069b2322c35e63c136f4..7db1da494fd555722ce4954ae51b944bdfe27e83 100644 (file)
@@ -1,26 +1,30 @@
 \section{Functionality}
 \label{functionality}
-As described in the introduction, the \myprog{} software basically is a program which
-automatically derives an OBDA specification from a relational database schema,
+As described in the \hyperref[intro]{introduction} of this thesis,
+the \myprog{} software is
+a program automatically deriving an OBDA specification
+from a relational database schema,
 which then can be used by other tools to drive the actual bootstrapping process.
-Its functionality is described in the next section,
+Its functionality is described in the following section,
 leaving out self-evident features, and is then listed completely
 in the section after that.
+How this functionality is exposed to users is described in section \fullref{interface}.
 The bootstrapping process as the core functionality of the software is described in
 section \fullref{bootstrapping}.
+TODO: reference to OBDA topics
 
-\subsection{Description}
+\subsection{Function description}
 The database schema is retrieved by connecting to an \name{SQL} database
 and querying its schema information.
-Parsing \name{SQL} specifications TODO or \name{SQL} dumps currently is not supported.
+Parsing \name{SQL} scripts or \name{SQL} dumps currently is not supported.
 %Naturally, authentication on the \name{SQL} server is supported, also by
 %interactively querying for passwords while hiding the typed input.
 The databases to derive information from can be specified by regular expressions,
 while there are also options to use other databases than specified or even
 other database servers, taken from a list of hard-coded strings.
 While these features may not seem to carry real benefit at the first glance,
-they proved to be very useful for testing purposes, especially since the retrieval of a
-database schema can take some time (see TODO).
+they proved to be useful for testing purposes, especially since the retrieval of a
+database schema can take some time TODO (see section \fullref{stats}).
 For the same purpose, \myprog{} allows the processing of a hard-coded example database schema.
 
 In addition to \osl{} output, a low-level output format containing information on all fields of
@@ -28,7 +32,7 @@ the underlying objects is supported, which is useful for debugging
 (however, this feature has to be enabled via one slight change in the source code).
 To allow for some customization, the insertion of an own \osl{} header is supported
 (for more information on the \osl{} header, see the specification of the \osl{} language
-in section \ref{oslspec}).
+in section \ref{osl_spec}).
 If the standard \osl{} header is used, it is by default loaded from a hard-coded copy,
 so bootstrapping information from a database server running locally or from the hard-coded
 example schema requires no Internet connection
@@ -48,7 +52,7 @@ are enabled, disabled or set per operation.
 Finally, a help text can be displayed which describes the usage of \myprog{} including the
 description of all command-line arguments.
 
-\subsection{Summary}
+\subsection{Function summary}
 The functionality of the \myprog{} software can be summarized as follows:
 
 \begin{itemize}
@@ -71,7 +75,7 @@ The functionality of the \myprog{} software can be summarized as follows:
        \item Write to standard output or to a file
        \item Insert a custom \osl{} header
        (see the specification of the OBDA Specification Language (\osl{})
-       in section \ref{oslspec} for details)
+       in section \ref{osl_spec} for details)
        \item Consistency check against a custom \osl{} header
        \item Consistency check against the standard \osl{} header without internet connection
        \item Act interactively or non-interactively
index 8fc194e695058c5418d65031693d8c77ec2e078a..9b5846a0049b83f7bc7baa4e795babdd3b36c956 100644 (file)
@@ -7,20 +7,20 @@ For information on programming interfaces, see section \fullref{arch}.
 \subsubsection{Basic usage}
 \label{basic}
 Currently, the only user interface of \myprog{} is a command-line interface.
-Since the program is supposed to bootstrap the OBDA Specification automatically and
+Since the program is supposed to bootstrap the OBDA specification automatically and
 thus there is little interaction, but a lot of output, this was considered ideal.
 Basically, one invocation of \myprog{} will initiate the automatic, non-interactive
 bootstrapping of exactly one \osl{} specification written to the standard output,
 a behavior which can be modified via command-line arguments.
 Because of its ability to write to the standard output (which is also the default
 behavior), it is easy to pipe the output of \myprog{} directly into a program that
-handles it in a Unix-/POSIX-like fashion TODO:
+handles it in a Unix-/POSIX-like fashion \cite{unix}:
 \codepar{db2osl myserver.org | osl2onto myserver.org}
 
 (supposed \name{osl2onto} is a tool that reads an \osl{} specification from its
 standard input and uses it to bootstrap an ontology from the database
 specified on its command line).\\
-This scheme is known as ``filter-pattern'' TODO.
+This scheme is known as ``Pipes and Filters architectural pattern'' \cite{patterns}.
 
 By inserting additional ``filters'', the bootstrapping process can be customized
 without changing any of the involved programs:
@@ -31,7 +31,7 @@ a given \osl{} specification in the way the user desires).
 
 \subsubsection{Configuration via command-line arguments}
 The behavior of \myprog{} itself can be adjusted via command-line arguments (only).
-The syntax for their application follows the POSIX standard TODO.
+%The syntax for their application follows the POSIX standard \cite{posix} (no!).
 Most features can be configured via short options (as, for example, \code{-P}).
 To allow for enhanced readability of \myprog{} invocations, each feature can (also)
 be configured via a long option (like \code{\textendash\textendash password}).
@@ -40,7 +40,7 @@ seen as unnecessary complicating
 while not addressing any real difficulties.
 
 The command-line arguments \myprog{} currently supports are
-described in table \ref{if_tbl_arguments_desc},
+described in table \ref{if_tbl_arguments_desc};
 their default values are listed in table \ref{if_tbl_arguments_def}.
 There is currently no switch to set the output format, since the only supported
 output format, besides \osl{}, is a low-level output format for debugging purposes.
@@ -136,7 +136,7 @@ text editor if he wants to change them in ways that go beyond the functionality
 \myprog{} provides or that can be achieved by scripts or programs modifying their
 input automatically.
 Because of \osl{} being a subset of \name{OWL} (see the specification
-of \osl{} in section \ref{oslspec}), he can thereby take advantage of editors
+of \osl{} in section \ref{osl_spec}), he can thereby take advantage of editors
 supporting syntax highlighting or other features making the handling of
 the respective \name{OWL} serialization more comfortable.
 
@@ -161,7 +161,7 @@ re-bootstrapping necessary:
        done\\
        rm oldsum newsum\\
        \# notify web admin via e-mail:\\
-       mutt -s "Re-bootstrapping necessary" web-admin@myserver.org}
+       date | mutt -s "Re-bootstrapping necessary" web-admin@myserver.org}
 
 Another possible example is the integration of \myprog{} into a shell script
 that bootstraps all databases on a server:
@@ -182,7 +182,7 @@ to one single file.
 
 Since the programming language used to implement \myprog{} is \name{Java},
 it is possible to deploy it on all platforms offering the
-\name{Java Runtime Environment} TODO.
+\name{Java} Runtime Environment TODO.
 Additionally, it is possible to deploy it as a Web application TODO.
 
 To simplify integration on the code level, the architecture of \myprog{} was
@@ -203,6 +203,6 @@ If the accruing information shall be used in another way than being output or lo
 this of course has to be implemented.
 If not, it is sufficient to replace the used \code{Logger} object by anohter one
 providing the desired behavior, since the \code{Logger} class is part of the
-\name{Java} API and widely used TODO.
+\name{Java} API and widely used \cite{log}.
 This is a good example of how using well-known and commonly used classes can
 greatly improve modularity and reusability.
index 395b2dda32cf26d4dcb72592bff71f64736a8932..13155107ca52b79ed50c621f485a10e097cf856c 100644 (file)
@@ -1,3 +1,46 @@
 \section{Numbers and statistics}
 \label{stats}
-TODO: Retrieval times, (NC)LOC and other statistics
+
+The following numbers and statistics can be stated about \myprog{}, version $1.0$:
+
+\begin{table}[H]\begin{centering}
+               \begin{tabular}{p{8.4cm}|p{3.1cm}|p{4.5cm}}
+                       \textbf{Subject} & \textbf{Value} & \textbf{Details in sections} \\ \hline
+                       Number of classes/interfaces & 45 & \ref{fine}, \ref{code_classes}, \ref{code_interfaces} \\
+                       Number of packages & 11 & \ref{coarse}, \ref{code_packages} \\
+                       Classes per package & ca 4.1 & \ref{coarse} \\
+                       Number of methods & TODO & \\
+                       Number of comments & & \ref{comments} \\
+                       Number of \name{Javadoc} comments & & \ref{comments}, \ref{tools} (TODO) \\
+                       Number of non-\name{Javadoc} comments & & \ref{comments} \\
+                       Average length of non-\name{Javadoc} comments & & \ref{comments} \\
+                       Lines of code (LOC) & TODO \\
+                       Non-comment lines of code (NCLOC) & TODO \\
+                       Average NCLOC length & TODO & \\
+                       NCLOC per comment & TODO & \ref{comments} \\
+                       NCLOC per function & TODO \\
+                       NCLOC per class & TODO \\
+                       NCLOC per package & TODO \\
+                       Average NCLOC per method & TODO & \ref{comments} \\
+                       TODO: Method/class coupling & TODO & \ref{fine} \\
+                       Deepest nesting level & 5 & \ref{speaking} \\ \hline
+                       Retrieval time for \hyperref[example_schema]{example schema} & TODO & \ref{benchmarking} \\
+                       Bootstrapping time for \hyperref[example_schema]{example schema} & TODO & \ref{benchmarking} \\
+               \end{tabular}
+               \caption{Numbers and statistics about \myprog{}}
+               \label{stats_tbl}
+\end{centering}\end{table}
+
+\subsection{Benchmarking details}
+\label{benchmarking}
+\subsubsection{The example schema}
+\label{example_schema}
+TODO: description, URI
+
+\subsubsection{The benchmark process}
+\label{benchmark_process}
+TODO: description
+
+\subsubsection{The benchmark system}
+\label{benchmark_system}
+TODO: description
index 84ac91976a53c27a76fb95aa45bba6d0368ac6ff..010d588cd4425497217c6ab16b590d57485b5bbd 100644 (file)
@@ -1,2 +1,67 @@
 \section{Tools employed}
 \label{tools}
+
+Several tools were used for the creation of \myprog{}, some of which also
+proved useful during the creation of this thesis.
+There use is described briefly in this section.
+
+Thank is proffered to the contributers of these tools, all of which are free
+and open-source software TODO.
+
+\subsubsection{Debian GNU/Linux}
+The operating system to run the other tools on was \name{Debian GNU/Linux},
+version $8.0$ (``Jessie'').
+
+\subsubsection{Basic Unix tools}
+Some of the basic Unix shell tools, namely \name{find}, \name{cat}, \name{grep},
+\name{sed}, \name{less}, \name{diff}
+and, of course, the shell itself (\name{bash} was used) were very
+useful, for instance, for searching all source code files for common errors
+or for remains of obsolete constructs that were replaced,
+for carrying out changes on all source files and
+for detecting and removing debugging code.
+
+All of the tools were implementations created as part of the \name{GNU} project.
+
+\subsubsection{\name{git}}
+\name{git} was used both for version control and for shared access to the
+source code and related artifacts.
+
+\subsubsection{\name{vim}}
+To apply changes involving advanced regular expressions, to perform block editing
+(insert or remove columns from multiple lines at once), to insert debugging code
+and similar editing tasks, \name{vim} was very useful.
+
+\subsubsection{\name{Eclipse}}
+The IDE to develop the program in was \name{Eclipse}.
+It proved very useful particularly due to its abilities to easily create
+packages and move source files between them, to ease the creation of in-code
+documentation and other useful features like automatic indention or the
+automatic insertion of \code{final} keywords.
+
+\subsubsection{\name{OpenJDK}}
+The \name{Java} compiler, the \name{Javadoc} tool (see next paragraph),
+the \name{Java} debugger and the \name{Java} Runtime Environment
+used were the implementations provided by
+the \name{OpenJDK} project, version $7$.
+
+\subsubsection{\name{Javadoc}}
+\name{Javadoc} was used as the primary documentation generation system due to
+its ability to create clear and well-arranged documentations.
+Besides, documentations created by \name{Javadoc} are familiar to most
+\name{Java} programmers and cleanly integrate into the \name{Java} environment;
+for example, methods (automatically) inherited from the \code{Object}
+class are incorporated and links to methods and classes
+provided by the \name{Java} API are automatically generated.
+
+\subsubsection{\name{Doxygen}}
+To complement the documentation generated by \name{Javadoc} (see previous
+paragraph), \name{Doxygen} was used, which supports all used \name{Javadoc}
+constructs.
+This was particularly sensible, because \name{Doxygen} is able to create a
+much more in-depth documentation, that for instance includes \code{private}
+and \code{protected} members, the complete source code with syntax highlighting
+and references to it and detailed dependency and call graphs for all classes
+or methods, respectively.
+Thus, the \name{Doxygen} documentation is meant to be a more extensive,
+detail-oriented documentation providing insight into implementation issues.
index 8c45b7c74cd30b905b438eb5f5826a75fd7586fa..ec384f1abc0eaa06548520b65ff1de30a070cac5 100644 (file)
@@ -1,2 +1,44 @@
 \section{Versioning}
 \label{versioning}
+
+As mentioned in the introduction of \hyperref[program]{this section},
+the program version of \myprog{} described so far is version $1.0$.
+
+However, since \name{git} was used to manage the source code artifacts and the
+software has not been productively used, there basically was no need for an
+explicit versioning; if necessary versions could be identified by the commit name
+generated by \name{git} or their commit date.
+For this reason, an explicit versioning scheme used for the very first
+versions of \myprog{} was quickly abandoned and for now, version $1.0$ is regarded
+as the only version having a version number assigned.
+
+The following table lists important milestones of the \myprog{} software,
+using the commit date, their \name{git} commit name and, in case of version $1.0$,
+their version number for identification:
+
+\begin{table}[H]\begin{centering}
+               \begin{tabular}{p{3.1cm}|p{12.9cm}}
+                       \textbf{Version date} & \textbf{Commit name and description} \\ \hline
+                       27.12.2015 & \code{0f3690720a329ba8a3981948ebd822a20a41fa5b} \\ &
+                       Early prototype without support for important features and containing
+                       some bugs, but internally already closely resembling version $1.0$ \\
+                       07.01.2016 & \code{1f0ae35c566603c7c24115284fd7a66057b17617} \\ &
+                       First version that produces correct OBDA specifications \\
+                       07.01.2016 & \code{9682a863b62fef15ae952e7cd46d213ea4344ca9} \\ &
+                       OSL output added \\
+                       24.01.2016 & \code{4052000d3d8a3fea402fbf00d06531eed6201a35} \\ &
+                       Command-line arguments added \\
+                       11.02.2016 & \code{42fec808ea13a2131fe6d19869024fd9ca34543f} \\ &
+                       First version producing correct \osl{} output, regarding the
+                       specification of \osl{} as described in section \ref{osl_spec}. \\
+                       12.02.2016 & \code{e197c9cf47730c72d65d3fe9fbed364dabcb222d} \\ &
+                       Version tested by the Logic and Intelligent Data research group at the
+                       University of Oslo (no issues were reported) \\
+                       TODO (v1.0) & TODO \\ &
+                       Version described in this thesis, including minor improvements \\
+                       TODO & TODO \\ &
+                       New features added
+               \end{tabular}
+               \caption{Important milestones of \myprog{}}
+               \label{version_tbl}
+\end{centering}\end{table}