abrupt 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +42 -1
- data/assets/rules/datatypes/cax-readability.ttl +1 -1
- data/assets/rules/production/{state_has_no_html_element.ttl → state_has_no_link.ttl} +9 -12
- data/assets/voc/tbox.ttl +23 -5
- data/doc/paper/listings/add_visit_duration.rb +9 -0
- data/doc/paper/listings/datatype_rule.ttl +10 -0
- data/doc/paper/listings/inconsistency_rule.ttl +1 -0
- data/doc/paper/listings/list_rule.ttl +2 -0
- data/doc/paper/listings/production_rule.ttl +10 -0
- data/doc/paper/listings/unique_nested_uris.ttl +9 -9
- data/doc/paper/literature.bib +8 -2
- data/doc/paper/main.tex +263 -76
- data/lib/abrupt.rb +1 -1
- data/lib/abrupt/converter.rb +6 -7
- data/lib/abrupt/transformation/client/visit.rb +14 -4
- data/lib/abrupt/transformation/client/visitor.rb +1 -0
- data/lib/abrupt/version.rb +1 -1
- data/spec/converter_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- metadata +6 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0add5487871d04392709d71b7423fab98c4ba287
         | 
| 4 | 
            +
              data.tar.gz: 052e630933996838bd150d205c8390d0c978a38d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7c4d1021885d1c1ec78cabad8116e40a3d61230b4e2280ba26f1a728f2f17679e214229ef16d1f1ac36e5aceb21206806a95f857ff8a30a668fa11913516019e
         | 
| 7 | 
            +
              data.tar.gz: 856a890befc37a1b7313f1a1300cae8abcf40415e6fdde21e265d4323aca6025f0fcee28915680af2d73fd97146304a60a3022a78e43282597d84eaec1490f18
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            # Abrupt
         | 
| 2 | 
            +
            [](http://badge.fury.io/rb/abrupt)
         | 
| 2 3 | 
             
            [](https://travis-ci.org/manuel84/abrupt)
         | 
| 3 4 | 
             
            [](https://codeclimate.com/github/manuel84/abrupt)
         | 
| 4 5 | 
             
            [](https://codeclimate.com/github/manuel84/abrupt)
         | 
| @@ -21,10 +22,50 @@ Or install it yourself as: | |
| 21 22 |  | 
| 22 23 | 
             
            ## Usage
         | 
| 23 24 |  | 
| 25 | 
            +
            ### Help
         | 
| 26 | 
            +
            ```shell
         | 
| 27 | 
            +
            abrupt -h
         | 
| 28 | 
            +
              NAME:
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                Abrupt
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              DESCRIPTION:
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                Automated Reasoning for Web Usability Problems
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              COMMANDS:
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                convert              Converts and merges xml files to owl
         | 
| 39 | 
            +
                crawl                Crawls a website
         | 
| 40 | 
            +
                help                 Display global or [command] help documentation
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              GLOBAL OPTIONS:
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                -h, --help
         | 
| 45 | 
            +
                    Display help documentation
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                -v, --version
         | 
| 48 | 
            +
                    Display version information
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                -t, --trace
         | 
| 51 | 
            +
                    Display backtrace when an error occurs
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              AUTHOR:
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                Manuel Dudda <manuelddudda@redpeppix.de>
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              SOURCE CODE:
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                https://github.com/manuel84/abrupt
         | 
| 60 | 
            +
            ```
         | 
| 61 | 
            +
             | 
| 62 | 
            +
             | 
| 63 | 
            +
            ### Example
         | 
| 64 | 
            +
             | 
| 24 65 | 
             
            For converting owl file from xml use: 
         | 
| 25 66 |  | 
| 26 67 | 
             
            ```shell
         | 
| 27 | 
            -
             | 
| 68 | 
            +
            abrupt convert spec/fixtures/rikscha_Result_min.xml spec/fixtures/rikscha.ohneBilder.2013-04-30_2013-08-17_min.xml --output tmp/out.ttl --format turtle
         | 
| 28 69 | 
             
            ```
         | 
| 29 70 |  | 
| 30 71 | 
             
            ## Contributing
         | 
| @@ -6,16 +6,13 @@ | |
| 6 6 | 
             
            @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
         | 
| 7 7 | 
             
            @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
         | 
| 8 8 |  | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                 rdfs:subClassOf :Problem ;
         | 
| 19 | 
            -
                 owl:onProperty :hasLink ;
         | 
| 20 | 
            -
                 owl:cardinality 0
         | 
| 9 | 
            +
            [
         | 
| 10 | 
            +
                rdfs:subClassOf :Problem;
         | 
| 11 | 
            +
                owl:intersectionOf ( :State
         | 
| 12 | 
            +
                [   a owl:Restriction ;
         | 
| 13 | 
            +
                    owl:onProperty :hasLink ;
         | 
| 14 | 
            +
                    owl:onClass :Link;
         | 
| 15 | 
            +
                    owl:maxQualifiedCardinality 0;
         | 
| 16 | 
            +
                ]
         | 
| 17 | 
            +
                )
         | 
| 21 18 | 
             
            ] .
         | 
    
        data/assets/voc/tbox.ttl
    CHANGED
    
    | @@ -555,6 +555,16 @@ | |
| 555 555 |  | 
| 556 556 |  | 
| 557 557 |  | 
| 558 | 
            +
            ###  http://wba.cs.hs-rm.de/AbRUPt/contentlength
         | 
| 559 | 
            +
             | 
| 560 | 
            +
            :contentlength rdf:type owl:DatatypeProperty ;
         | 
| 561 | 
            +
                           
         | 
| 562 | 
            +
                           rdfs:domain :Visit ;
         | 
| 563 | 
            +
                           
         | 
| 564 | 
            +
                           rdfs:range xsd:string .
         | 
| 565 | 
            +
             | 
| 566 | 
            +
             | 
| 567 | 
            +
             | 
| 558 568 | 
             
            ###  http://wba.cs.hs-rm.de/AbRUPt/contrast
         | 
| 559 569 |  | 
| 560 570 | 
             
            :contrast rdf:type owl:DatatypeProperty ;
         | 
| @@ -607,7 +617,7 @@ | |
| 607 617 |  | 
| 608 618 | 
             
                       rdfs:domain :Visit ;
         | 
| 609 619 |  | 
| 610 | 
            -
                       rdfs:range xsd: | 
| 620 | 
            +
                       rdfs:range xsd:string .
         | 
| 611 621 |  | 
| 612 622 |  | 
| 613 623 |  | 
| @@ -617,7 +627,7 @@ | |
| 617 627 |  | 
| 618 628 | 
             
                       rdfs:domain :Visit ;
         | 
| 619 629 |  | 
| 620 | 
            -
                       rdfs:range xsd: | 
| 630 | 
            +
                       rdfs:range xsd:string .
         | 
| 621 631 |  | 
| 622 632 |  | 
| 623 633 |  | 
| @@ -989,8 +999,6 @@ | |
| 989 999 |  | 
| 990 1000 | 
             
            :phpsessionid rdf:type owl:DatatypeProperty ;
         | 
| 991 1001 |  | 
| 992 | 
            -
                          rdfs:domain :Visit ;
         | 
| 993 | 
            -
                          
         | 
| 994 1002 | 
             
                          rdfs:range xsd:string .
         | 
| 995 1003 |  | 
| 996 1004 |  | 
| @@ -1223,6 +1231,16 @@ | |
| 1223 1231 |  | 
| 1224 1232 |  | 
| 1225 1233 |  | 
| 1234 | 
            +
            ###  http://wba.cs.hs-rm.de/AbRUPt/visitDuration
         | 
| 1235 | 
            +
             | 
| 1236 | 
            +
            :visitDuration rdf:type owl:DatatypeProperty ;
         | 
| 1237 | 
            +
                           
         | 
| 1238 | 
            +
                           rdfs:domain :Visit ;
         | 
| 1239 | 
            +
                           
         | 
| 1240 | 
            +
                           rdfs:range xsd:decimal .
         | 
| 1241 | 
            +
             | 
| 1242 | 
            +
             | 
| 1243 | 
            +
             | 
| 1226 1244 | 
             
            ###  http://wba.cs.hs-rm.de/AbRUPt/visualComplexity
         | 
| 1227 1245 |  | 
| 1228 1246 | 
             
            :visualComplexity rdf:type owl:DatatypeProperty ;
         | 
| @@ -1628,5 +1646,5 @@ | |
| 1628 1646 |  | 
| 1629 1647 |  | 
| 1630 1648 |  | 
| 1631 | 
            -
            ###  Generated by the OWL API (version 3. | 
| 1649 | 
            +
            ###  Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net
         | 
| 1632 1650 |  | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            # /lib/abrupt/transformation/client/visit.rb
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def add_visit_duration
         | 
| 4 | 
            +
              leavetime = Abrupt.parse_time(@values[:leavetime])
         | 
| 5 | 
            +
              enterteime = Abrupt.parse_time(@values[:entertime])
         | 
| 6 | 
            +
              return unless leavetime || enterteime # maybe no recognized leavetime
         | 
| 7 | 
            +
              visit_duration = (leavetime - enterteime).to_f # in seconds
         | 
| 8 | 
            +
              add_data_property('visitDuration', visit_duration)
         | 
| 9 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            abrupt:name rdfs:domain abrupt:FormElement .
         | 
| @@ -1,10 +1,10 @@ | |
| 1 | 
            -
            @prefix  | 
| 1 | 
            +
            @prefix abrupt: <http://wba.cs.hs-rm.de/AbRUPt/> .
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
                | 
| 5 | 
            -
                | 
| 6 | 
            -
                | 
| 7 | 
            -
                | 
| 8 | 
            -
                | 
| 9 | 
            -
                | 
| 10 | 
            -
                | 
| 3 | 
            +
            abrupt:Website/http://www.rikscha-mainz.de/Page/http://www.rikscha-mainz.de/Kontakt/State/state5/Form/kontaktformular/Text/name a abrupt:Text;
         | 
| 4 | 
            +
               abrupt:class "text";
         | 
| 5 | 
            +
               abrupt:id "name";
         | 
| 6 | 
            +
               abrupt:maxlength 60;
         | 
| 7 | 
            +
               abrupt:name "name";
         | 
| 8 | 
            +
               abrupt:placeholder "Vorname Nachname";
         | 
| 9 | 
            +
               abrupt:size 40;
         | 
| 10 | 
            +
               abrupt:type "text" .
         | 
    
        data/doc/paper/literature.bib
    CHANGED
    
    | @@ -22,7 +22,7 @@ | |
| 22 22 | 
             
            @manual{url_abrupt,
         | 
| 23 23 | 
             
            	AUTHOR = {Hochschule RheinMain},
         | 
| 24 24 | 
             
            	YEAR = {2014},
         | 
| 25 | 
            -
            	TITLE = { | 
| 25 | 
            +
            	TITLE = {Automated Reasoning for Web Usability Problems},
         | 
| 26 26 | 
             
            	ADDRESS = {http://wba.cs.hs-rm.de/AbRUPt/service/},
         | 
| 27 27 | 
             
            }
         | 
| 28 28 |  | 
| @@ -53,4 +53,10 @@ Profiles (Second Edition)}, | |
| 53 53 | 
             
                TITLE = {OWL 2 RL in RIF (Second Edition)},
         | 
| 54 54 | 
             
                ADDRESS = {http://www.w3.org/TR/rif-owl-rl},
         | 
| 55 55 | 
             
            }
         | 
| 56 | 
            -
             | 
| 56 | 
            +
             | 
| 57 | 
            +
            @article{lesbarkeit,
         | 
| 58 | 
            +
                AUTHOR = {Schopp, Jürgen F.},
         | 
| 59 | 
            +
                YEAR = {2003},
         | 
| 60 | 
            +
                TITLE = {Faktoren der Lesbarkeit},
         | 
| 61 | 
            +
                ADDRESS = {http://people.uta.fi/~trjusc/tt-lesbk.htm},
         | 
| 62 | 
            +
            }    
         | 
    
        data/doc/paper/main.tex
    CHANGED
    
    | @@ -17,12 +17,16 @@ | |
| 17 17 |  | 
| 18 18 |  | 
| 19 19 | 
             
            \documentclass[runningheads,a4paper]{llncs}
         | 
| 20 | 
            +
            \usepackage[ngerman]{babel}
         | 
| 21 | 
            +
            \usepackage[pdftex]{graphicx}
         | 
| 20 22 | 
             
            \usepackage[utf8x]{inputenc}
         | 
| 21 | 
            -
            \usepackage{ | 
| 23 | 
            +
            \usepackage[T1]{fontenc} 
         | 
| 24 | 
            +
            \usepackage{mathtools}
         | 
| 25 | 
            +
            \usepackage{amsfonts,amsmath,amssymb}
         | 
| 26 | 
            +
            \usepackage{wasysym}
         | 
| 27 | 
            +
            \usepackage{natbib}
         | 
| 22 28 |  | 
| 23 29 | 
             
            \setcounter{tocdepth}{3}
         | 
| 24 | 
            -
            \usepackage{graphicx}
         | 
| 25 | 
            -
            \usepackage{mathtools}
         | 
| 26 30 | 
             
            \usepackage{url}
         | 
| 27 31 |  | 
| 28 32 | 
             
            \usepackage{listings}
         | 
| @@ -35,25 +39,52 @@ morecomment=[l][\color{grey}]{@}, | |
| 35 39 | 
             
            morecomment=[l][\color{black}]{\#},
         | 
| 36 40 | 
             
            morestring=[b][\color{black}]\",
         | 
| 37 41 | 
             
            numbers=left,
         | 
| 38 | 
            -
            frame=shadowbox,
         | 
| 42 | 
            +
            %frame=shadowbox,
         | 
| 39 43 | 
             
            basicstyle=\scriptsize\ttfamily,
         | 
| 40 44 | 
             
            tabsize=2,
         | 
| 41 45 | 
             
            }     
         | 
| 42 46 |  | 
| 47 | 
            +
            \definecolor{codegreen}{rgb}{0,0.6,0}
         | 
| 48 | 
            +
            \definecolor{codegray}{rgb}{0.5,0.5,0.5}
         | 
| 49 | 
            +
            \definecolor{codepurple}{rgb}{0.58,0,0.82}
         | 
| 50 | 
            +
            \definecolor{backcolour}{rgb}{0.95,0.95,0.92}
         | 
| 51 | 
            +
             
         | 
| 52 | 
            +
            \lstdefinestyle{mystyle}{
         | 
| 53 | 
            +
                backgroundcolor=\color{backcolour},   
         | 
| 54 | 
            +
                commentstyle=\color{codegreen},
         | 
| 55 | 
            +
                keywordstyle=\color{magenta},
         | 
| 56 | 
            +
                numberstyle=\tiny\color{codegray},
         | 
| 57 | 
            +
                stringstyle=\color{codepurple},
         | 
| 58 | 
            +
                basicstyle=\footnotesize,
         | 
| 59 | 
            +
                breakatwhitespace=false,         
         | 
| 60 | 
            +
                breaklines=true,                 
         | 
| 61 | 
            +
                captionpos=b,                    
         | 
| 62 | 
            +
                keepspaces=true,                 
         | 
| 63 | 
            +
                numbers=left,                    
         | 
| 64 | 
            +
                numbersep=5pt,                  
         | 
| 65 | 
            +
                showspaces=false,                
         | 
| 66 | 
            +
                showstringspaces=false,
         | 
| 67 | 
            +
                showtabs=false,                  
         | 
| 68 | 
            +
                tabsize=2
         | 
| 69 | 
            +
            }
         | 
| 70 | 
            +
             
         | 
| 71 | 
            +
            \lstset{style=mystyle}
         | 
| 43 72 |  | 
| 44 73 | 
             
            \urldef{\mailsa}\path|manuel.b.dudda@student.hs-rm.de|    
         | 
| 45 74 | 
             
            \newcommand{\keywords}[1]{\par\addvspace\baselineskip
         | 
| 46 75 | 
             
            \noindent\keywordname\enspace\ignorespaces#1}
         | 
| 47 76 |  | 
| 77 | 
            +
             | 
| 48 78 | 
             
            \begin{document}
         | 
| 49 79 |  | 
| 80 | 
            +
             | 
| 50 81 | 
             
            \mainmatter  % start of an individual contribution
         | 
| 51 82 |  | 
| 52 83 | 
             
            % first the title is needed
         | 
| 53 84 | 
             
            \title{Schließen auf Usability-Probleme mit OWL 2 RL}
         | 
| 54 85 |  | 
| 55 86 | 
             
            % a short form should be given in case it is too long for the running head
         | 
| 56 | 
            -
            \titlerunning{ | 
| 87 | 
            +
            % \titlerunning{Schließen auf Usability-Probleme mit OWL 2 RL}
         | 
| 57 88 |  | 
| 58 89 | 
             
            % the name(s) of the author(s) follow(s) next
         | 
| 59 90 | 
             
            %
         | 
| @@ -63,7 +94,7 @@ tabsize=2, | |
| 63 94 | 
             
            %
         | 
| 64 95 | 
             
            \author{Manuel Dudda}
         | 
| 65 96 | 
             
            %
         | 
| 66 | 
            -
            \authorrunning{ | 
| 97 | 
            +
            % \authorrunning{Schließen auf Usability-Probleme mit OWL 2 RL}
         | 
| 67 98 | 
             
            % (feature abused for this document to repeat the title also on left hand pages)
         | 
| 68 99 |  | 
| 69 100 | 
             
            % the affiliations are given next; don't give your e-mail address
         | 
| @@ -86,134 +117,177 @@ Campus Unter den Eichen 5 | |
| 86 117 | 
             
            \tocauthor{Authors' Instructions}
         | 
| 87 118 | 
             
            \maketitle
         | 
| 88 119 |  | 
| 89 | 
            -
             | 
| 120 | 
            +
            \renewcommand{\abstractname}{Abstract}
         | 
| 90 121 | 
             
            \begin{abstract}
         | 
| 91 122 | 
             
            Die Usability von Internetauftritten wird größtenteils subjektiv wahrgenommen. 
         | 
| 92 123 | 
             
            Es existiert zwar eine Normierung durch die ISO für die Anforderungen an die Gebrauchstauglichkeit einer Software (EN ISO 9241-11), diese trifft jedoch nur sehr wage Aussagen und orientiert sich stark am respektiven Nutzungskontext. 
         | 
| 93 124 | 
             
            Trotzdem gibt es Merkmale einer Website, die allgemein als negativ für die Eigenschaften der Usability eingestuft werden können, so zum Beispiel schlechte Kontrastverhältnisse, ein hoher Lesbarkeitsindex und Diskrepanzen zwischen erwartetem und tatsächlichem Nutzerverhalten. 
         | 
| 94 | 
            -
            Das "AbRUPt"-System der Hochschule RheinMain ist in der Lage viele dieser Merkmale einer Website automatisiert zu erfassen. 
         | 
| 125 | 
            +
            Das "{}AbRUPt"{}-System der Hochschule RheinMain ist in der Lage viele dieser Merkmale einer Website automatisiert zu erfassen. 
         | 
| 95 126 | 
             
            Durch die Konvertierung, Modellierung und Entwicklung eines durchdachtes Regelsystem in der semantischen Ontologiesprache OWL 2 RL ensteht ein System, welches automatisiert Folgerungen auf Usability-Probleme ermöglicht.
         | 
| 96 127 | 
             
            \end{abstract}
         | 
| 97 128 |  | 
| 98 129 |  | 
| 99 130 | 
             
            \section{Einleitung}
         | 
| 100 | 
            -
             | 
| 131 | 
            +
            Die Gestaltungsvielfalt von Webseiten hat sich seit der Freigabe des Internets für die kommerzielle Nutzung (ca. 1990) rasant weiterentwickelt. 
         | 
| 132 | 
            +
            Anfangs bot nur eine kleine Anzahl von Institutionen, Firmen, Regierungen spärliche Informationen meist im Form von einfachen Texten an. 
         | 
| 133 | 
            +
            Mittlerweile gehört die Webseite zum Aushängeschild eines jeden Unternehmens. 
         | 
| 134 | 
            +
            Das Aussehen muss dabei häufig zur Unternehmensphilosphie passen, das sogenannte Cooperate Design sorgt für eine visuelle Identität, um sich von anderen Unternehmen zu unterschieden. 
         | 
| 135 | 
            +
            Dazu gehören Schriftbild, Farben, Logos, und vieles mehr.
         | 
| 136 | 
            +
            Des Weiteren wurden jede Menge Web-Dienste entwickelt, die den Webseiten mehr Interaktivität einräumen. 
         | 
| 137 | 
            +
            Viele Webanwendungen ähneln komplexer Software, die eine grafische Benutzeroberfläche im Browser zur Verfügung stellen.
         | 
| 138 | 
            +
            Für die Benutzerfreundlichkeit gibt es eine DIN-Norm, die folgende Anforderungen an die Software stellt.
         | 
| 139 | 
            +
            Die Gebrauchstauglichkeit einer Software ist von ihrem Nutzungskontext (beinhalten den Benutzer, die Arbeitsaufgabe, die Arbeitsmittel wie z.B. Hardware oder Software sowie die physische und soziale Umgebung) abhängig, in dem sie eingesetzt wird. 
         | 
| 140 | 
            +
            Im Teil 11 der ISO 9241 werden drei Leitkriterien für die Gebrauchstauglichkeit einer Software bestimmt:
         | 
| 141 | 
            +
            \begin{itemize}
         | 
| 142 | 
            +
            \item{Effektivität zur Lösung einer Aufgabe,}
         | 
| 143 | 
            +
            \item{Effizienz der Handhabung des Systems,}
         | 
| 144 | 
            +
            \item{Zufriedenheit der Nutzer einer Software.}
         | 
| 145 | 
            +
            \end{itemize}
         | 
| 146 | 
            +
            Hier wird deutlich, dass es keine objektive Bestimmung von Gebrauchstauglichkeit gibt, sondern diese stark vom Nutzungskontext abhängt. 
         | 
| 147 | 
            +
            Insbesondere spielt die Zielgruppe dabei eine Rolle. 
         | 
| 148 | 
            +
            Handelt es sich um ein jüngeres Publikum, die man mit einfacher Sprache zu erreichen versucht oder um Fachpublikum, für die komplexere Texte unabdingbar sind?
         | 
| 149 | 
            +
            Welche kulturellen Gegebenheiten sind zu beachten? 
         | 
| 150 | 
            +
            Das Farbverständnis der Chinesen beispielweise weicht der westlichen Welt stark ab, so ist weiß die Farbe der Trauer.
         | 
| 151 | 
            +
            Ob eine Software dementsprechend gebrauchstauglich ist oder nicht, ist demnach nur subjektiv von Menschen bewertbar.
         | 
| 152 | 
            +
            Dennoch gibt es auch Merkmale, die allgemeingültig als mögliche Probleme eingestuft werden können:
         | 
| 153 | 
            +
            \begin{itemize}
         | 
| 154 | 
            +
            \item{Schlechte Kontrastverhältnisse}
         | 
| 155 | 
            +
            \item{Seiten ohne/mit zu vielen Links}
         | 
| 156 | 
            +
            \item{Unausgeglichenes Bild/Text-Verhältnis}
         | 
| 157 | 
            +
            \item{Diskrepanzen zwischen erwarteter und tatsähcliher Eingabezeit in Formularen}
         | 
| 158 | 
            +
            \item{Texte mit schlechtem Lesbarkeitsindex anhand \cite{lesbarkeit}}
         | 
| 159 | 
            +
            \item{Inkonsistenzen in der HTML-Struktur}
         | 
| 160 | 
            +
            \end{itemize}
         | 
| 161 | 
            +
            Der Online-Service AbRUPt (\cite{url_abrupt}) von der Hochschule RheinMain bietet die Möglichkeit viele dieser Merkmale über eine Web-Schnittstelle zu erfassen. 
         | 
| 162 | 
            +
            Mit der Bachelor-Thesis \cite{Brieger} wurde gezeigt, wie man diese Schnittstelle anwendet und daraus ein Konstrukt für eine mögliche Datenauswertung entwickelt.
         | 
| 163 | 
            +
            Diese Arbeit beschäftigt sich mit der Weiterentwicklung des darin beschrieben Converters und dessen Datenuswertung (Abb. \ref{fig:converter}).
         | 
| 164 | 
            +
            \begin{figure}
         | 
| 165 | 
            +
            \caption{Funktionsweise des Converters}
         | 
| 166 | 
            +
            \centering
         | 
| 167 | 
            +
            \includegraphics[width=0.7\textwidth]{figures/converter}
         | 
| 168 | 
            +
            \label{fig:converter}
         | 
| 169 | 
            +
            \end{figure}
         | 
| 170 | 
            +
            Die Daten liegen zunächst im XML-Format vor und werden in OWL konvertiert.
         | 
| 171 | 
            +
            Mittels OWL-basierter Regeln wird überprüft, ob eine aussagekräftige Datenauswertung möglich ist.
         | 
| 172 | 
            +
            Es wird dabei besonderer Wert auf das OWL-Profil {}"RL{}" gelegt, um Performance-Schwachstellen zu vermeiden.
         | 
| 173 | 
            +
            Das OWL 2-RL Profil basiert auf dem funiderten Grundlagen der Beschreibungslogiken (\ref{sec:desclogic}.
         | 
| 174 | 
            +
             | 
| 101 175 | 
             
            \newpage
         | 
| 102 176 | 
             
            \section{Logik und Berechenbarkeit}
         | 
| 177 | 
            +
            \label{sec:logic}
         | 
| 103 178 |  | 
| 104 | 
            -
             | 
| 179 | 
            +
            Es gibt verschiedene Arten von formalen Logiken, die sich in ihrer Struktur und Mächtigkeit unterscheiden.
         | 
| 180 | 
            +
            Für triviale Anwendungsfälle reicht meistens die Verknüpfung von strukturlosen Elementaraussagen aus.
         | 
| 181 | 
            +
            Komplexere Aussagen lassen sich nur mit mächtigeren Logiken ausdrücken, für dessen automatiserten Schlussfolgerungen allerdings auch größere Auwände entstehen.
         | 
| 105 182 |  | 
| 106 | 
            -
             | 
| 183 | 
            +
            \subsection{Aussagenlogik}
         | 
| 184 | 
            +
            \label{sec:aussagenlogik}
         | 
| 185 | 
            +
             | 
| 186 | 
            +
            Mit der Aussagenlogik lassen sich in ihrer Mächtigkeit beschränkte Formeln aufstellen. Sie entsprechen in der Programmierung dem Datentyp \textit{Boolean}, also Elementarussagen, die verknüpft und negiert erscheinen und deren Wahrheitsgehalt \textit{Wahr} oder \textit{falsch} ist.
         | 
| 107 187 |  | 
| 108 188 | 
             
            \begin{figure}
         | 
| 109 189 | 
             
            \begin{align}
         | 
| 110 190 | 
             
            \begin{split}
         | 
| 111 191 | 
             
            A &= \textnormal{Die Checkbox hat den Namen \textit{agb}.}\\
         | 
| 112 192 | 
             
            B &= \textnormal{Die Checkbox ist kein Pflichtfeld.}\\
         | 
| 113 | 
            -
            A \to C &= \textnormal{Die Checkbox  | 
| 114 | 
            -
            (A \to C) \land B &= \textnormal{Es liegt ein  | 
| 193 | 
            +
            A \to C &= \textnormal{Die Checkbox hat den Namen \textit{agb}, also ist sie ein Pflichtfeld.}\\
         | 
| 194 | 
            +
            (A \to C) \land B &= \textnormal{\lightning\ (Es liegt ein Problem vor.)}
         | 
| 115 195 | 
             
            \label{eq:propositional_logic}
         | 
| 116 196 | 
             
            \end{split}
         | 
| 117 197 | 
             
            \end{align}
         | 
| 118 | 
            -
            \caption{Aussagenlogische  | 
| 198 | 
            +
            \caption{Aussagenlogische Formeln}
         | 
| 119 199 | 
             
            \end{figure}
         | 
| 120 | 
            -
             | 
| 200 | 
            +
             
         | 
| 121 201 | 
             
            Aus den oben genannten Aussagen \eqref{eq:propositional_logic}, folgt, dass die Checkbox mit dem Namen \textit{agb} ein Pflichtfeld ist (\(A \to C)\). 
         | 
| 122 202 | 
             
            Diese ist allerdings nicht als solches ausgezeichnet (\(B\)). 
         | 
| 123 | 
            -
            Aus dieser Inkonsistenzeigenschaft ergibt sich ein Problem (\(A \ | 
| 203 | 
            +
            Aus dieser Inkonsistenzeigenschaft ergibt sich ein Problem (\(A \to C) \land B\). 
         | 
| 124 204 | 
             
            Die Aussage \((A \to C)\) könnte genauso als die Negation von \(B\) definiert werden. 
         | 
| 125 205 | 
             
            Es ergäbe sich daraus eine Kontradiktion \((\neg B \land B)\), einer Formel die stets zu \textit{falsch} ausgewertet wird. 
         | 
| 126 206 | 
             
            Über Wahrheitstafeln können jegliche (zusammengesetzte) Aussagen auf deren Wahrheitsgehalt überprüft werden. 
         | 
| 127 207 | 
             
            Damit verdeutlicht sich einfach, dass das Schlussfolgern über die aussagenlogische Formeln ein entscheidbares Problem darstellt.
         | 
| 128 208 | 
             
            \\
         | 
| 129 209 |  | 
| 210 | 
            +
            \subsection{Prädikatenlogik}
         | 
| 211 | 
            +
            \label{sec:prediactelogic}
         | 
| 212 | 
            +
             | 
| 130 213 | 
             
            Eine Erweiterung der Aussagenlogik stellt die Prädikatenlogik dar.
         | 
| 131 214 | 
             
            In der Prädikatenlogik werden Elementaraussagen hinsichtlich ihrer Struktur untersucht.
         | 
| 132 | 
            -
            Mit  | 
| 133 | 
            -
             | 
| 215 | 
            +
            Mit Prädikaten können Eigenschaften über Individuen festgelegt werden. 
         | 
| 216 | 
            +
            Die Anzahl der Stellen im Prädikat ist dabei nicht beschränkt, so können mit 1-stelligen Prädikaten Zugehörikeiten \eqref{eq:fol_predicate1}, mit 2-stelligen Rolleneigenschaften \eqref{eq:fol_predicate1} modelliert werden  
         | 
| 217 | 
            +
            Quantoren geben an, von wie vielen Individuen eine Aussage erfüllt wird, so kann die Aussage über die Existenz eines Individuums getroffen werden \eqref{eq:fol_quantors}.
         | 
| 134 218 | 
             
            % \renewcommand{\figurename}{Fig.}
         | 
| 135 219 | 
             
            \begin{figure}
         | 
| 136 220 | 
             
            \begin{equation}
         | 
| 137 | 
            -
             | 
| 138 | 
            -
            \label{eq: | 
| 221 | 
            +
            TextInput(x)
         | 
| 222 | 
            +
            \label{eq:fol_predicate1}
         | 
| 139 223 | 
             
            \end{equation}
         | 
| 140 | 
            -
            \caption{Prädikatenlogik erster Stufe: Prädikat}
         | 
| 224 | 
            +
            \caption{Prädikatenlogik erster Stufe: 1-stelliges Prädikat als Klasse}
         | 
| 141 225 | 
             
            \end{figure}
         | 
| 142 226 |  | 
| 143 227 | 
             
            \begin{figure}
         | 
| 144 228 | 
             
            \begin{equation}
         | 
| 145 | 
            -
             | 
| 146 | 
            -
            \label{eq: | 
| 229 | 
            +
            hasName(x, \textnormal{agb})
         | 
| 230 | 
            +
            \label{eq:fol_predicate2}
         | 
| 147 231 | 
             
            \end{equation}
         | 
| 148 | 
            -
            \caption{Prädikatenlogik erster Stufe:  | 
| 232 | 
            +
            \caption{Prädikatenlogik erster Stufe: 2-stelliges Prädikat als Rolleneigenschaft}
         | 
| 149 233 | 
             
            \end{figure}
         | 
| 150 234 |  | 
| 151 235 | 
             
            \begin{figure}
         | 
| 152 236 | 
             
            \begin{equation}
         | 
| 153 | 
            -
            \ | 
| 154 | 
            -
            \label{eq: | 
| 237 | 
            +
            \forall x\exists y. TextInput(x) \to hasName(x, y)
         | 
| 238 | 
            +
            \label{eq:fol_quantors}
         | 
| 155 239 | 
             
            \end{equation}
         | 
| 156 | 
            -
            \caption{Prädikatenlogik erster Stufe: Existenz- | 
| 240 | 
            +
            \caption{Prädikatenlogik erster Stufe: Quantoren als Existenz-Aussagen}
         | 
| 157 241 | 
             
            \end{figure}
         | 
| 158 242 |  | 
| 159 243 | 
             
            Somit lassen sich wesentlich mächtigere Aussagen treffen, die mit der Aussagenlogik allein nicht möglich sind.
         | 
| 160 | 
            -
             | 
| 244 | 
            +
            Das hat allerdings auch Asuwirkungen auf die Laufzeit des Schlussfolgerns.
         | 
| 161 245 | 
             
            Das Entscheidungsverfahren für die Prädikatenlogik ist unentscheidbar. 
         | 
| 162 246 | 
             
            \\
         | 
| 163 247 |  | 
| 248 | 
            +
            \subsection{Beschreibungslogiken}
         | 
| 249 | 
            +
            \label{sec:desclogic}
         | 
| 250 | 
            +
             | 
| 164 251 | 
             
            Eine entscheidbare Untermenge der Prädikatenlogik erster Stufe bieten die Beschreibungslogiken.
         | 
| 165 | 
            -
            Im Wesentlichen enthält eine Beschreibungslogik die Operatoren der Aussagenlogik ( | 
| 166 | 
            -
            Sie umfassen Individuen (Objekte), Rollen (2-stellige Prädikate) und  | 
| 167 | 
            -
             | 
| 252 | 
            +
            Im Wesentlichen enthält eine Beschreibungslogik die Operatoren der Aussagenlogik (\(\land, \lor, \neg\)), ein- und zweistellige Prädikate sowie eine eingeschränkte Quantifizierung.
         | 
| 253 | 
            +
            Sie umfassen Individuen (Objekte), Rollen (2-stellige Prädikate) und Klassen (1-stellige Prädikate), wobei keine Metamodellierung (Klassen von Klassen) möglich ist.
         | 
| 254 | 
            +
            Normalerweise wird die Wissensbasis dabei in 2 Teile separiert, \textit{TBox} und \textit{ABox}. 
         | 
| 168 255 | 
             
            Das Terminoligische Wissen (\textit{TBox}) beschreibt die Struktur möglicher Welten. 
         | 
| 169 256 | 
             
            Es stellt Begriffe zur Beschreibung von Sachverhalten bereit. 
         | 
| 170 257 | 
             
            So definiert es das Vokabular in einem Anwendungsbereich. 
         | 
| 171 | 
            -
            Das Grundvokabular besteht aus  | 
| 172 | 
            -
            Das  | 
| 258 | 
            +
            Das Grundvokabular besteht aus den Klassen (einstellige Prädikate) und Rollendefinitionen (zweistellige Prädikate). 
         | 
| 259 | 
            +
            Das Assertionale Wissen beschreibt die Sachverhalte, die in einer bestimmten Welt gelten. 
         | 
| 173 260 | 
             
            Es existieren Annahmen (assertions) über einzelne Objekte ausgedrückt mit
         | 
| 174 261 | 
             
            Hilfe des Grundvokabulars.
         | 
| 175 262 |  | 
| 176 263 | 
             
            Die Syntax ist stark an die Prädikatenlogik angelehnt. 
         | 
| 177 264 | 
             
            Es gibt jedoch wesentliche Unterschiede. 
         | 
| 178 | 
            -
            Hervorzuheben ist der Wegfall der Implikation \(\to\). 
         | 
| 179 | 
            -
            Während in der Prädikatenlogik auch Rollenaxiome rechterhand der Implikation stehen  | 
| 265 | 
            +
            Hervorzuheben ist der Wegfall der Implikation (\(\to\)). 
         | 
| 266 | 
            +
            Während in der Prädikatenlogik auch Rollenaxiome rechterhand der Implikation stehen können (\eqref{eq:fol_predicate1}), sind bei Beschreibungslogiken nur Klassen in Subsumptionen möglich \(C_1 \sqsubseteq C_2\).
         | 
| 180 267 | 
             
            Nur ein Teil der Prädikatenlogik ist demnach adäquat in eine Beschreibungslogik zu übersetzen, man spricht in diesem Fall von DL-safe Regeln. 
         | 
| 181 | 
            -
             | 
| 268 | 
            +
             | 
| 269 | 
            +
            Eine Auflistung der Syntax und der Entsprechung in Prädikatenlogik sowie OWL finden Sie in \ref{table:description_logic}.
         | 
| 182 270 | 
             
            \\
         | 
| 183 | 
            -
            Mit dem RL-Profil aus OWL 2  | 
| 271 | 
            +
            Mit dem RL-Profil aus OWL 2 \cite{owl2rl} gibt es eine Sprache, die die gleiche Mächtigkeit wie die Beschreibungslogik (\(\mathcal{SHOIN}(D))\) besitzt und demnach für das Reasoning in entscheidbarer Komplexität bestens geeignet ist.
         | 
| 184 272 | 
             
            Sie hat ein gute Balance zwischen Ausdrucksfähigkeit und Berechenbarkeits-/Verarbeitungseigenschaften.
         | 
| 185 273 | 
             
            OWL 2 ist zu dem Empfehlung des W3C und es existieren bereits einige Reasoner-Implementierungen. 
         | 
| 186 274 | 
             
            Die bekanntesten derzeit sind Fact++, Hermit, KAON2 und Pellet.
         | 
| 187 275 |  | 
| 188 | 
            -
            Axiome der Beschreibungslogik, Prädikatenlogik in OWL 2 RL
         | 
| 189 | 
            -
             | 
| 190 | 
            -
            Die exemplarisch genannten Regeln für die beschriebenen Logiken lassen sich somit in OWL 2 RL wie folgt ausdrücken.
         | 
| 191 | 
            -
             | 
| 192 | 
            -
            \lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/propositional_logic_rule.ttl}
         | 
| 193 | 
            -
             | 
| 194 | 
            -
            \lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/propositional_logic_infered.ttl}
         | 
| 195 | 
            -
             | 
| 196 | 
            -
            \lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/description_logic_rule.ttl}
         | 
| 197 | 
            -
             | 
| 198 | 
            -
            \lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/description_logic_infered.ttl}
         | 
| 199 276 |  | 
| 200 277 | 
             
            \section{Implementierung}
         | 
| 201 278 |  | 
| 202 | 
            -
            \subsection{Anpassungen und Erweiterung des OWL-Converters}
         | 
| 203 | 
            -
             | 
| 204 279 | 
             
            In der Bachelor-Arbeit \cite{Brieger} wurde bereits untersucht inwieweit das Analyse-Tool \textit{AbRUPt} \cite{url_abrupt} verwendet werden kann um eine objektive Beurteilung über die Benutzerfreundlichkeit einer Webseite geben zu können. 
         | 
| 205 280 | 
             
            Die Arbeit zeigt gute Ansätze und setzt auf die Konvertierung der erhobenen Daten in ein OWL-Dokument. 
         | 
| 206 281 | 
             
            Mit einem anschließenden Projekt können mit einem durchdachten Regelsystem Schlussfolgerungen gezogenwerden. 
         | 
| 207 | 
            -
            Das Programm ist als HTML- | 
| 282 | 
            +
            Das Programm ist als Dienst mit HTML-Oberfläche gestaltet und kann lediglich die Webseiten-Daten aus \textit{AbRUPt} umwandeln, die Integration der Webseiten-Besucherdaten ist noch nicht berücksichtigt. 
         | 
| 208 283 | 
             
            Auch die Integration in nachfolgende Projekte erweist sich durch den wenig modularen Aufbau als eher schwierig. 
         | 
| 209 | 
            -
            Mit Einbezug der Ergebnisse aus \cite{Martin} konnte  | 
| 284 | 
            +
            Mit Einbezug der Ergebnisse aus \cite{Martin} konnte ein Konzept für eine sinnvolle Aufbereitung der Daten gezeigt werden. 
         | 
| 210 285 | 
             
            Es ist OWL-Converter entstanden, der erhobene \textit{AbRUPt}-Daten von einem XML-Format in ein OWL-Dokument transformiert.
         | 
| 211 286 |  | 
| 212 | 
            -
             | 
| 213 | 
            -
            \\
         | 
| 287 | 
            +
            \subsection{Anpassungen und Erweiterung des OWL-Converters}
         | 
| 214 288 |  | 
| 215 | 
            -
            Einige wichtige Aspekte wurden  | 
| 216 | 
            -
            Die Ontologie für den \textit{ | 
| 289 | 
            +
            Einige wichtige Aspekte wurden gegenüber dieser Arbeit geändert. 
         | 
| 290 | 
            +
            Die Ontologie für den \textit{AbRUPt-Service} wurde von Grund auf intuitiver gestaltet und um die Konzepte der Webseiten-Besucherdaten erweitert (Fig. onto-Graph). 
         | 
| 217 291 | 
             
            Dabei wurde ebenso auf sinnvolle Konsistenzeigenschaften sowie Inferenz-Regeln zurückgegriffen, die auf Usabilty-Probleme schlussfolgern. (Abschnit Regeln)
         | 
| 218 292 | 
             
            Ein Problem ergab sich für die Eindeutigkeit von Webseiten-Elementen, die nicht kontextbasiert benannt wurden. 
         | 
| 219 293 | 
             
            Mit dem an \textit{REST} angelehnten URI-Aufbau ergeben sich global einheitlich URIs.
         | 
| @@ -223,39 +297,46 @@ Beispielsweise liegt dann das Input-Textelement des Namens für ein Kontaktformu | |
| 223 297 | 
             
            Das sieht zunächst nicht sehr lesbar aus, ist aber unvermeidbar aufgrund möglicher großer Datenbestände. 
         | 
| 224 298 | 
             
            \lstinputlisting[breaklines=true,language=ttl, caption=Nested URIs]{listings/unique_nested_uris.ttl}
         | 
| 225 299 |  | 
| 226 | 
            -
             | 
| 300 | 
            +
            Für die Einstufung von Problemen gibt es die Klasse \textit{Problem}. 
         | 
| 301 | 
            +
            Durch geeignete Abfragen, bspw. mit Sparql (sparql-ref), kann nach dem Reasoning die Liste aller möglichen Probleme abgerufen werden. 
         | 
| 302 | 
            +
            Wie bereits angesprochen können dabei Elemente dazugehören, die aus einem subjektiven Erscheinungsbild annehmbar als Problem ignoriert werden können.
         | 
| 227 303 |  | 
| 228 304 | 
             
            \subsection{Das abrupt-Gem (Converter-Lib + Binary)}
         | 
| 229 305 | 
             
            Für die Neugestaltung des Konvertierung-Tools fiel die Wahl der Technolgie auf \textit{RubyGems}, dem offiziellen Paketsystem von Ruby . 
         | 
| 230 | 
            -
            Zum einen ist die Unterstützung  | 
| 306 | 
            +
            Zum einen ist die Unterstützung \cite{ruby-rdf} für RDF/OWL ausgezeichnet und zum Anderen erweisen sich noch weitere wesentliche Vorteile:
         | 
| 231 307 | 
             
            \begin{itemize}
         | 
| 232 308 | 
             
            \item{Benutzung durch Kommandozeilentool}
         | 
| 233 309 | 
             
            \item{Modularer Aufbau}
         | 
| 234 | 
            -
            \item{Ausgezeichnete  | 
| 310 | 
            +
            \item{Ausgezeichnete Komponententest-Unterstützung}
         | 
| 235 311 | 
             
            \item{Wiederverwendbarkeit durch Einbindung als RubyGem Bibliothek oder des Kommandozeilentools}
         | 
| 236 312 | 
             
            \item{Flexibilität der Eingabe und Ausgabe (bestimmte Services, nur Abrupt/ohne Benutzerdaten, tutrle, rdfxml, n3}
         | 
| 237 313 | 
             
            \end{itemize}
         | 
| 238 314 |  | 
| 239 | 
            -
             | 
| 240 | 
            -
             | 
| 241 | 
            -
             | 
| 242 | 
            -
             | 
| 243 | 
            -
            -  | 
| 244 | 
            -
             | 
| 315 | 
            +
            Das terminologische Wissen (TBox) ist in einem OWL-Dokument gesichert, sodass es separat mit Protege entwickelt und in die Software einfach eingebunden wird. 
         | 
| 316 | 
            +
            Da es sich ausschließlich um statische Inhalte handelt, erweist sich dies als sinnvoll. 
         | 
| 317 | 
            +
            Zur Hervorhebung und Veranschaulichung von nicht-trivialen Regeln existieren weitere OWL-Dokumente, die als Ordnerinhalte der Software hinzugefügt werden. 
         | 
| 318 | 
            +
            Mit dem Befehl \cite{ruby-rdf} lässt sich Konvertierung starten. 
         | 
| 319 | 
            +
            Zunächst werden die statischen Inhalten in ein RDF-Repsoitory geladen. 
         | 
| 320 | 
            +
            Das Assertionale Wissen (ABox) entsteht aus der Transformation der Eingabedaten. 
         | 
| 321 | 
            +
            Die Eingabedaten liegen in der Regel in 2 XML-Dokumenten vor - den Website- und den Besucher-Daten.
         | 
| 322 | 
            +
            Für jeden Kontentyp existiert eine Schema-Datei, die für die nötige Datentypkonvertierung sorgt. 
         | 
| 323 | 
            +
            Dadurch werden aus den XML-Rohdaten die nötigen Werte umgewandelt, bspw. Integer, Date, Decimal, ...
         | 
| 324 | 
            +
            Anschließend erstellt eine zugewiesene Transformater-Klasse aus den XML-Daten die RDF-Statements zu dem RDF-Repository hinzu. 
         | 
| 325 | 
            +
            Der Aufbau der Software ist somit sehr modular, individuell anpassbar, durch Oberklassen generisch und übersichtlich.
         | 
| 245 326 |  | 
| 246 327 | 
             
            \newpage
         | 
| 247 328 |  | 
| 248 329 | 
             
            \section{Schließen auf Probleme mit Inferenz-Regeln}
         | 
| 249 330 | 
             
            Die formale Beschreibungssprache OWL 2 ist eine Empfehlung des W3C vom 11. Dezember 2012 für die Beschreibung von Ontologien. 
         | 
| 250 | 
            -
            Primär geht es darum Modellierungen einer Domäne vorzunehmen, sodass Mensch und Maschine die Bedeutung verarbeiten können. 
         | 
| 251 | 
            -
            OWL 2 basiert technisch auf RDF und RDFS und geht dabei über die Ausdrucksmächtigkeit  | 
| 252 | 
            -
            Es  | 
| 253 | 
            -
            Um die richtige Balance zwischen Ausdrucksstärke und Entscheidbarkeit bzw. Performance zu gewährleisten gibt es 3 verschiedene Sprachebenen. 
         | 
| 254 | 
            -
             | 
| 331 | 
            +
            Primär geht es darum Modellierungen einer Weltanschauung (Domäne) vorzunehmen, sodass Mensch und Maschine die Bedeutung verarbeiten können. 
         | 
| 332 | 
            +
            OWL 2 basiert technisch auf RDF und RDFS und geht dabei über die Ausdrucksmächtigkeit weit hinaus. 
         | 
| 333 | 
            +
            Es ist dokumentenbasiert, was die Erstellung und Verteilung gegenüber einem Binärformat enorm vereinfacht. 
         | 
| 334 | 
            +
            Um die richtige Balance zwischen Ausdrucksstärke und Entscheidbarkeit bzw. Performance zu gewährleisten gibt es 3 verschiedene Sprachebenen - Lite, DL und Full. 
         | 
| 335 | 
            +
            In dieser Arbeit wird der Fokus auf die 2. Sprachebene OWL 2 DL gelegt, für welche es 3 Profile existiert. 
         | 
| 255 336 | 
             
            Das OWL 2 RL Profil ist auf Anwendungen, die ein skalierbares Reasoning verlangen, ohne dabei zu viel Ausdruckskraft zu verlieren, ausgerichtet. 
         | 
| 256 | 
            -
            Die Ausdrucksmächtigkeit entspricht dabei  | 
| 257 | 
            -
            Je nach Anwendung der Axiome ergibt sich das jeweilige Profil, es wird nicht für das  | 
| 258 | 
            -
            Man ist daher darauf bedacht auf gewisse OWL- | 
| 337 | 
            +
            Die Ausdrucksmächtigkeit entspricht dabei der Beschreibungslogiken \(\mathcal{SHOIN}(D)\). 
         | 
| 338 | 
            +
            Je nach Anwendung der Axiome ergibt sich das jeweilige Profil, es wird nicht für das Dokument definiert. 
         | 
| 339 | 
            +
            Man ist daher darauf bedacht auf gewisse OWL-Axiome zu verzichten um nicht in ein ungewünschtes Profil zu gelangen.
         | 
| 259 340 | 
             
            \begin{table}[h]
         | 
| 260 341 | 
             
            \begin{tabular}{|l|l|l|}
         | 
| 261 342 | 
             
            \hline
         | 
| @@ -282,18 +363,113 @@ Eine vernünftige Unterteilung der Axiome ist in \cite{owl2rif} gegeben. | |
| 282 363 |  | 
| 283 364 | 
             
            \subsection{Inkonsistenz-Regeln}
         | 
| 284 365 |  | 
| 285 | 
            -
             | 
| 366 | 
            +
            Für Rollenaxiome können mittels einfacher Regeln Definitions- und Wertebereich festgelegt werden. 
         | 
| 367 | 
            +
            Für den Wertebereich, also der Festlegung der Klassenzugehörigkeit des 2. Parameters von Rollen ergibt sich Formel \eqref{eq:dl_range} sowie dessen Darstellung in OWL 2 RL (Listing \ref{range_owl}).
         | 
| 368 | 
            +
             | 
| 369 | 
            +
            \begin{figure}
         | 
| 370 | 
            +
            \begin{equation}
         | 
| 371 | 
            +
            \top \sqsubseteq \forall\ name\ Dataytpe(\textit{xsd:string})
         | 
| 372 | 
            +
            \label{eq:dl_range}
         | 
| 373 | 
            +
            \end{equation}
         | 
| 374 | 
            +
            \caption{Beschreibungslogik: Wertebereich-Regel für Rollen}
         | 
| 375 | 
            +
            \end{figure}
         | 
| 376 | 
            +
             | 
| 377 | 
            +
            \lstinputlisting[breaklines=true,language=ttl, caption=Wertebereich-Regel für Rollen in OWL 2 RL,label=range_owl]{listings/inconsistency_rule.ttl}
         | 
| 286 378 |  | 
| 287 379 | 
             
            \subsection{Produktions-Regeln}
         | 
| 288 380 |  | 
| 289 | 
            -
             | 
| 381 | 
            +
            Durch Inferenzen entstehen neue Klassenzugehörigkeiten. 
         | 
| 382 | 
            +
            Aus Einbahnstraßenseiten (Seiten ohne Links) entstehen Problemfälle (Listing \ref{production_owl}). 
         | 
| 383 | 
            +
            \begin{figure}
         | 
| 384 | 
            +
            \begin{equation}
         | 
| 385 | 
            +
            State\ \sqcap \leq 0\ hasLink.Link \sqsubseteq Problem
         | 
| 386 | 
            +
            \label{eq:dl_infered}
         | 
| 387 | 
            +
            \end{equation}
         | 
| 388 | 
            +
            \caption{Beschreibungslogik: Produktionsregel}
         | 
| 389 | 
            +
            \end{figure}
         | 
| 390 | 
            +
             | 
| 391 | 
            +
            \lstinputlisting[breaklines=true,language=ttl, caption=Produktionsregel in OWL 2 RL,label=production_owl]{listings/production_rule.ttl}
         | 
| 290 392 |  | 
| 291 393 | 
             
            \subsection{Listen-Regeln}
         | 
| 394 | 
            +
            Durch Listenregeln können Sammlungen genutzt werden um Restriktionen aufzubauen oder durch Kettenregeln Hilfsrollen zu aktivieren (\eqref{eq:dl_list}, Listing \ref{list_owl}).
         | 
| 395 | 
            +
             | 
| 396 | 
            +
            \begin{figure}
         | 
| 397 | 
            +
            \begin{equation}
         | 
| 398 | 
            +
            hasPage \circ hasState \sqsubseteq hasStateThorugh
         | 
| 399 | 
            +
            \label{eq:dl_list}
         | 
| 400 | 
            +
            \end{equation}
         | 
| 401 | 
            +
            \caption{Beschreibungslogik: Kettenregel}
         | 
| 402 | 
            +
            \end{figure}
         | 
| 403 | 
            +
             | 
| 404 | 
            +
            \lstinputlisting[breaklines=true,language=ttl, caption=Kettenregl in OWL 2 RL,label=list_owl]{listings/list_rule.ttl}
         | 
| 405 | 
            +
             | 
| 292 406 | 
             
            \subsection{Datentyp-Regeln}
         | 
| 407 | 
            +
            Als mächtigstes Werkzeug erweisen sich die Datentypregeln, die es erlauben, aus Zahlenbereichseinschränkungen und Datentypdefinitionen Probleme abzuleiten. 
         | 
| 408 | 
            +
            Der Lesbarkeitsindex einer Seite sollte einen definierten Wert nicht überschreiten um nicht als zu komplex zu gelten (\eqref{eq:dl_datatype}, Listing \ref{datatype_owl}).
         | 
| 409 | 
            +
             | 
| 410 | 
            +
             | 
| 411 | 
            +
            \begin{figure}
         | 
| 412 | 
            +
            \begin{equation}
         | 
| 413 | 
            +
            readability \geq 8.0\ Datatype(\textit{xsd:decimal}) \sqsubseteq Problem
         | 
| 414 | 
            +
            \label{eq:dl_datatype}
         | 
| 415 | 
            +
            \end{equation}
         | 
| 416 | 
            +
            \caption{Beschreibungslogik: Datentypregel}
         | 
| 417 | 
            +
            \end{figure}
         | 
| 418 | 
            +
             | 
| 419 | 
            +
            \lstinputlisting[breaklines=true,language=ttl, caption=Datentypregel in OWL 2 RL,label=datatype_owl]{listings/datatype_rule.ttl}
         | 
| 293 420 |  | 
| 294 | 
            -
            \ | 
| 421 | 
            +
            \subsection{Erweiterungen}
         | 
| 422 | 
            +
            Die Implementierung durch einen Regelsatz mit OWL 2 RL ist eine ansehnliche Vorgehensweise für das Auffinden von Problemen. 
         | 
| 423 | 
            +
            Für viele Anwendungsfälle muss man dennoch auf Erweiterungen zurückgreifen. 
         | 
| 424 | 
            +
            Die Beschreibungslogik \(\mathcal{SHOIN}(D)\) weist zwar eine vernünftige Mächtigkeit auf, lässt dabei gegenüber konventioneller Programmiersprachen die Arithmetik völligst außer Acht. 
         | 
| 425 | 
            +
            So ist es nicht möglich Summen über Elemente, Durchschnittswerte, Minima und Maxima zu ermitteln. 
         | 
| 426 | 
            +
            In konventionellen Datenbanken gilt die Annahme der Weltabgeschlossenheit (Closed World Assumption), man kann aus den vorhandenen Daten ableiten, welche Daten nicht vorhanden sind. 
         | 
| 427 | 
            +
            Das größte Element ist also direkt ablesbar, weil kein anderes größeres Element dieses übersteigt. 
         | 
| 428 | 
            +
            In der Wissensdatenbank beschrieben durch OWL 2 gilt diese Annahme nicht. 
         | 
| 429 | 
            +
            Durch die fundierte Basis der Prädikatenlogik arbeitet OWL 2 RL auf der Annahme einer offenen Welt (Open World Assumption). 
         | 
| 430 | 
            +
            Dies bedeutet, dass alles was nicht explizit als wahr beweisen werden kann, nicht automatisch als falsch bezeichnet wird. 
         | 
| 431 | 
            +
            Das größte Element ist also nicht direkt ablesbar, weil ein anderes größeres (abgeleitetes) Element dieses übersteigen könnte. 
         | 
| 432 | 
            +
            Eine Summe über alle Besucherzeiten kann nicht erfasst werden, wenn davon ausgegangen werden kann, dass neue Besuche hinzukommen können.
         | 
| 433 | 
            +
            Das Überwinden dieses Problems stellt eine große Herausforderung dar, für die zur Zeit lediglich Lösungsansätze existieren. 
         | 
| 434 | 
            +
             | 
| 435 | 
            +
            In vielen Punkten geradlinig und elegant ist die Kombination aus OWL und RuleML -- SWRL. 
         | 
| 436 | 
            +
            SWRL ist eine vom W3C entwickelte Spezifikation für eine Regelsprache in OWL mit einer großen Einschränkung, sie ist unentscheidbar. 
         | 
| 437 | 
            +
            Mittels sogenannter DL-safe Regeln, also Regeln, welche die Einrschänkungen der Beschreibungslogiken einhalten, bietet SWRL die Entscheidbarkeit von OWL 2 RL (PTime) und die Mächtigkeit der Beschreibungslogiken inkl. arithmetischer Funktionen. 
         | 
| 438 | 
            +
             | 
| 439 | 
            +
            SWRL ist kein direkter Bestandteil von OWL 2 RL und funktioniert als Sprach-Erweiterung. 
         | 
| 440 | 
            +
            Sie wird dennoch von vielen Reasonern unterstützt.
         | 
| 441 | 
            +
             | 
| 442 | 
            +
            Will man ohne Erweiterung für OWL 2 RL auskommen, müssen Vorkehrungen bereits in der Vorverarbeitung getroffen werden, die die Einschränkungen der offenen Weltannahme aushebeln. 
         | 
| 443 | 
            +
            Auf gängige Arithmetik \(+, -, *, / AVG(), SUM() \) kann in der unterliegenden Programmiersprache zurückgegriffen werden.
         | 
| 444 | 
            +
            Dabei werden die eingelesen Daten in der Vorverarbeitung somit als abgeschlossen angenommen.
         | 
| 445 | 
            +
            Die Besuchsdauer einer Seite wird durch einfache Differenz (Listing 1.6) ermittelt und als weiteres Wissen der ABox hinzugefügt.
         | 
| 446 | 
            +
             | 
| 447 | 
            +
            \lstinputlisting[breaklines=true,language=Ruby, caption=Erweiterung der TBox in der Vorverarbeitung,label=list_rb]{listings/add_visit_duration.rb}
         | 
| 295 448 |  | 
| 296 449 | 
             
            \section{Zusammenfassung \& Ausblick}
         | 
| 450 | 
            +
            Die Struktur des Converters wurde im Wesentlichen überarbeitet.
         | 
| 451 | 
            +
            Es wurde viel Wert auf die intuitive Verwirklichung des Grundvokabulars der AbRUPt-Ontologie gelegt (Abb. \ref{fig:onto}).
         | 
| 452 | 
            +
             | 
| 453 | 
            +
            \begin{figure}
         | 
| 454 | 
            +
            \caption{Funktionsweise des Converters}
         | 
| 455 | 
            +
            \centering
         | 
| 456 | 
            +
            \includegraphics[width=0.7\textwidth]{figures/tbox}
         | 
| 457 | 
            +
            \label{fig:onto}
         | 
| 458 | 
            +
            \end{figure}
         | 
| 459 | 
            +
             | 
| 460 | 
            +
            Außerdem wurde der Graph um die Konzepte der Besucherdaten erweitert.
         | 
| 461 | 
            +
            Der vorherige Converte war wenig modular und umfasste ca. 2000 Zeilen in nur 4 Dateien.
         | 
| 462 | 
            +
            Die Konfiguration war im Code eingebettet, sodass der Code insgesamt nciht sehr gut wartbar ist.
         | 
| 463 | 
            +
            Die Neuimplementierung sieht einen wesentlichen modulareren Aufbau vor, sodass Anpassungen in der Vorverarbeitung effizient einsetzbar ist.
         | 
| 464 | 
            +
            Sie berücksichtigt außerdem die Transformation der Daten in die korrekten Datentypen (Integer, Decimal, Boolean, ...).
         | 
| 465 | 
            +
            Das Grundvokabular ist komplett separat entwickelt und wird in die Konvertierung miteinbezogen.
         | 
| 466 | 
            +
            Dadurch ist der Zugriff vereinfacht und mittels eigener Entwicklungstools die Ontologie als Graph darstellbar.
         | 
| 467 | 
            +
            Trotz der vielen Anpassungen und Erweiterungen umfasst der Quellcode nun gerade mal ca. 900 Zeilen und 15 Klassen inkl. rudimentären Testcode.
         | 
| 468 | 
            +
            Man kann das Tool mittels Kommandozeiletool ausführen oder in ein Ruby-Projekt als Bibliothek einbinden.
         | 
| 469 | 
            +
             | 
| 470 | 
            +
             | 
| 471 | 
            +
             | 
| 472 | 
            +
             | 
| 297 473 | 
             
            alter Converter:
         | 
| 298 474 |  | 
| 299 475 | 
             
            - ~ 2000 Zeilen, kein Testcode
         | 
| @@ -313,6 +489,17 @@ neuer Converter: | |
| 313 489 | 
             
            - Rubygem: Kommandozeilentool, aber auch Code einbettbar in Ruby Web-Projekt
         | 
| 314 490 |  | 
| 315 491 | 
             
            \section{Fazit}
         | 
| 492 | 
            +
            \# TODO
         | 
| 493 | 
            +
            Die Implementierung durch einen Regelsatz ist eine ansehnliche Vorgehensweise für das Auffinden von Problemen. 
         | 
| 494 | 
            +
            Es generiert aus dem vorhandenen Wissen neues Wissen und setzt dabei auf einen unkonventionellen Programmieransatz. 
         | 
| 495 | 
            +
            Das Wissen und die Regeln sind deskriptiv in einem Dokument beschrieben. 
         | 
| 496 | 
            +
             | 
| 497 | 
            +
             | 
| 498 | 
            +
             | 
| 499 | 
            +
            \begin{itemize}
         | 
| 500 | 
            +
                \item{Regeln und Wissen sind deskriptiv in einem Dokument beschrieben}
         | 
| 501 | 
            +
                \item{}    
         | 
| 502 | 
            +
            \end{itemize}
         | 
| 316 503 |  | 
| 317 504 | 
             
            \nocite{url_dl_primer}
         | 
| 318 505 |  | 
    
        data/lib/abrupt.rb
    CHANGED
    
    
    
        data/lib/abrupt/converter.rb
    CHANGED
    
    | @@ -96,8 +96,8 @@ module Abrupt | |
| 96 96 | 
             
                  xml[:database][:visitor].ensure_to_a.each do |values|
         | 
| 97 97 | 
             
                    ip = values[:ip]
         | 
| 98 98 | 
             
                    next unless ip
         | 
| 99 | 
            -
                    visitor = Transformation::Client::Visitor.new(
         | 
| 100 | 
            -
             | 
| 99 | 
            +
                    visitor = Transformation::Client::Visitor.new(['Website', @uri.to_s],
         | 
| 100 | 
            +
                                                                  ['Visitor', ip], values)
         | 
| 101 101 | 
             
                    add_to_result visitor.add_individuals
         | 
| 102 102 | 
             
                    append_pages_for_visitor(visitor)
         | 
| 103 103 | 
             
                  end
         | 
| @@ -108,12 +108,11 @@ module Abrupt | |
| 108 108 | 
             
                  pages = visitor.values[:pages][:page].ensure_to_a
         | 
| 109 109 | 
             
                  pages.each do |page|
         | 
| 110 110 | 
             
                    time = ::Abrupt.format_time(page[:entertime])
         | 
| 111 | 
            -
                    Transformation::Client::Base.subclasses.each do | | 
| 112 | 
            -
                       | 
| 113 | 
            -
             | 
| 114 | 
            -
                          ['Visit', time], page
         | 
| 111 | 
            +
                    Transformation::Client::Base.subclasses.each do |transformer_class|
         | 
| 112 | 
            +
                      transformer = transformer_class.new(visitor.parent_uri + visitor.uri,
         | 
| 113 | 
            +
                                                          ['Visit', time], page
         | 
| 115 114 | 
             
                      )
         | 
| 116 | 
            -
                      add_to_result  | 
| 115 | 
            +
                      add_to_result transformer.add_individuals
         | 
| 117 116 | 
             
                    end
         | 
| 118 117 | 
             
                  end
         | 
| 119 118 | 
             
                end
         | 
| @@ -2,11 +2,13 @@ | |
| 2 2 | 
             
            module Abrupt
         | 
| 3 3 | 
             
              module Transformation
         | 
| 4 4 | 
             
                module Client
         | 
| 5 | 
            -
                  # Transformation  | 
| 5 | 
            +
                  # Transformation class for client visit data
         | 
| 6 6 | 
             
                  class Visit < Base
         | 
| 7 7 | 
             
                    def add_individuals
         | 
| 8 8 | 
             
                      @values[:name] = @uri.last
         | 
| 9 9 | 
             
                      super
         | 
| 10 | 
            +
                      @values.delete :name
         | 
| 11 | 
            +
                      add_visit_duration
         | 
| 10 12 | 
             
                      @values.each do |key, value|
         | 
| 11 13 | 
             
                        add_property(key, value) if value
         | 
| 12 14 | 
             
                      end
         | 
| @@ -18,14 +20,14 @@ module Abrupt | |
| 18 20 | 
             
                      enumerable = value.is_a?(Hash) || value.is_a?(Array)
         | 
| 19 21 | 
             
                      return if enumerable # value.is_a?(Enumerable)
         | 
| 20 22 | 
             
                      name = case key
         | 
| 21 | 
            -
                             when  | 
| 23 | 
            +
                             when :uri
         | 
| 22 24 | 
             
                               uri = [@parent_uri[1], value].map(&:remove_last_slashes)
         | 
| 23 25 | 
             
                               parent_uri_path = (@parent_uri[0..-3] + ['Page', uri.join])
         | 
| 24 26 | 
             
                               parent_uri = "#{VOC}#{parent_uri_path.join('/')}"
         | 
| 25 | 
            -
                               # Page  | 
| 27 | 
            +
                               # Page hasPageVisit visit
         | 
| 26 28 | 
             
                               add_object_property(parent_uri, 'PageVisit', resolve_uri)
         | 
| 27 29 | 
             
                               key
         | 
| 28 | 
            -
                             when  | 
| 30 | 
            +
                             when :size # TODO: transform via customize_to_schema
         | 
| 29 31 | 
             
                               'contentlength'
         | 
| 30 32 | 
             
                             else
         | 
| 31 33 | 
             
                               key
         | 
| @@ -50,6 +52,14 @@ module Abrupt | |
| 50 52 | 
             
                                               attributes)
         | 
| 51 53 | 
             
                      @result += page_view.add_individuals
         | 
| 52 54 | 
             
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    def add_visit_duration
         | 
| 57 | 
            +
                      leavetime = Abrupt.parse_time(@values[:leavetime])
         | 
| 58 | 
            +
                      enterteime = Abrupt.parse_time(@values[:entertime])
         | 
| 59 | 
            +
                      return unless leavetime && enterteime # maybe no recognized leavetime
         | 
| 60 | 
            +
                      visit_duration = (leavetime - enterteime).to_f # in seconds
         | 
| 61 | 
            +
                      add_data_property('visitDuration', visit_duration)
         | 
| 62 | 
            +
                    end
         | 
| 53 63 | 
             
                  end
         | 
| 54 64 | 
             
                end
         | 
| 55 65 | 
             
              end
         | 
    
        data/lib/abrupt/version.rb
    CHANGED
    
    
    
        data/spec/converter_spec.rb
    CHANGED
    
    | @@ -5,7 +5,7 @@ describe Abrupt::Converter, :vcr do | |
| 5 5 | 
             
              before(:each) { Abrupt::Converter.instance.init }
         | 
| 6 6 |  | 
| 7 7 | 
             
              context '#append_website_data' do
         | 
| 8 | 
            -
                it 'should convert to hash with customized datatypes' do
         | 
| 8 | 
            +
                it 'should convert to hash with customized datatypes', broken_on_ci: true do
         | 
| 9 9 | 
             
                  crawled_hash = FactoryGirl.attributes_for(:rikscha_website_data)
         | 
| 10 10 | 
             
                  crawled_hash = crawled_hash.deep_symbolize_keys[:data]
         | 
| 11 11 | 
             
                  Abrupt::Converter.instance.append_website_data(website_data_file)
         | 
| @@ -25,7 +25,7 @@ describe Abrupt::Converter, :vcr do | |
| 25 25 | 
             
              context 'converting' do
         | 
| 26 26 | 
             
                it 'from hash to the correct repo' do
         | 
| 27 27 | 
             
                  pending 'dev'
         | 
| 28 | 
            -
                  crawled_hash = FactoryGirl.attributes_for(: | 
| 28 | 
            +
                  crawled_hash = FactoryGirl.attributes_for(:rikscha_website_data)
         | 
| 29 29 | 
             
                  converted_repo = Abrupt::Converter.to_repository crawled_hash
         | 
| 30 30 | 
             
                  expected_repo = RDF::Repository.load(website_repo_file)
         | 
| 31 31 | 
             
                  expect(converted_repo).to be_isomorphic_with(expected_repo)
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: abrupt
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Manuel Dudda
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-03-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rest-client
         | 
| @@ -312,7 +312,7 @@ files: | |
| 312 312 | 
             
            - assets/rules/datatypes/cax-required.ttl
         | 
| 313 313 | 
             
            - assets/rules/list/prp-hasState.ttl
         | 
| 314 314 | 
             
            - assets/rules/production/non_required_form_element.ttl
         | 
| 315 | 
            -
            - assets/rules/production/ | 
| 315 | 
            +
            - assets/rules/production/state_has_no_link.ttl
         | 
| 316 316 | 
             
            - assets/schema/schema.json
         | 
| 317 317 | 
             
            - assets/schema/v1/complexity.json
         | 
| 318 318 | 
             
            - assets/schema/v1/input.json
         | 
| @@ -322,11 +322,13 @@ files: | |
| 322 322 | 
             
            - assets/schema/v1/subject.json
         | 
| 323 323 | 
             
            - assets/voc/tbox.ttl
         | 
| 324 324 | 
             
            - bin/abrupt
         | 
| 325 | 
            +
            - doc/paper/listings/add_visit_duration.rb
         | 
| 325 326 | 
             
            - doc/paper/listings/datatype_rule.ttl
         | 
| 326 327 | 
             
            - doc/paper/listings/description_logic_infered.ttl
         | 
| 327 328 | 
             
            - doc/paper/listings/description_logic_rule.ttl
         | 
| 328 329 | 
             
            - doc/paper/listings/inconsistency_rule.ttl
         | 
| 329 330 | 
             
            - doc/paper/listings/limitations.ttl
         | 
| 331 | 
            +
            - doc/paper/listings/list_rule.ttl
         | 
| 330 332 | 
             
            - doc/paper/listings/production_rule.ttl
         | 
| 331 333 | 
             
            - doc/paper/listings/propositional_logic_infered.ttl
         | 
| 332 334 | 
             
            - doc/paper/listings/propositional_logic_rule.ttl
         | 
| @@ -400,7 +402,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 400 402 | 
             
                  version: '0'
         | 
| 401 403 | 
             
            requirements: []
         | 
| 402 404 | 
             
            rubyforge_project: 
         | 
| 403 | 
            -
            rubygems_version: 2.4. | 
| 405 | 
            +
            rubygems_version: 2.4.5
         | 
| 404 406 | 
             
            signing_key: 
         | 
| 405 407 | 
             
            specification_version: 4
         | 
| 406 408 | 
             
            summary: Tools for the AbRUPt project.
         |