abrupt 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rubocop.yml +16 -0
- data/.travis.yml +34 -0
- data/Gemfile +4 -0
- data/Guardfile +51 -0
- data/LICENSE.txt +22 -0
- data/README.md +36 -0
- data/Rakefile +7 -0
- data/abrupt.gemspec +41 -0
- data/assets/rules/datatypes/cax-RequiredFormElement.ttl +34 -0
- data/assets/rules/datatypes/cax-readability.ttl +18 -0
- data/assets/rules/datatypes/cax-required.ttl +15 -0
- data/assets/rules/list/prp-hasState.ttl +10 -0
- data/assets/rules/production/non_required_form_element.ttl +24 -0
- data/assets/rules/production/state_has_no_html_element.ttl +21 -0
- data/assets/schema/schema.json +49 -0
- data/assets/schema/v1/complexity.json +142 -0
- data/assets/schema/v1/input.json +1136 -0
- data/assets/schema/v1/link.json +41 -0
- data/assets/schema/v1/picture.json +47 -0
- data/assets/schema/v1/readability.json +51 -0
- data/assets/schema/v1/subject.json +88 -0
- data/assets/voc/tbox.ttl +1632 -0
- data/bin/abrupt +63 -0
- data/doc/paper/listings/datatype_rule.ttl +0 -0
- data/doc/paper/listings/description_logic_infered.ttl +3 -0
- data/doc/paper/listings/description_logic_rule.ttl +15 -0
- data/doc/paper/listings/inconsistency_rule.ttl +0 -0
- data/doc/paper/listings/limitations.ttl +10 -0
- data/doc/paper/listings/production_rule.ttl +0 -0
- data/doc/paper/listings/propositional_logic_infered.ttl +6 -0
- data/doc/paper/listings/propositional_logic_rule.ttl +15 -0
- data/doc/paper/listings/unique_nested_uris.ttl +10 -0
- data/doc/paper/literature.bib +56 -0
- data/doc/paper/main.tex +322 -0
- data/doc/poster/Poster.key +0 -0
- data/doc/poster/Poster.pdf +0 -0
- data/doc/poster/poster.indd +0 -0
- data/doc/poster/resources/graph.graffle +0 -0
- data/doc/poster/resources/graph.png +0 -0
- data/doc/poster/resources/graph_crop.png +0 -0
- data/lib/abrupt.rb +90 -0
- data/lib/abrupt/converter.rb +130 -0
- data/lib/abrupt/crawler.rb +125 -0
- data/lib/abrupt/service/absolute_url.rb +32 -0
- data/lib/abrupt/service/base.rb +75 -0
- data/lib/abrupt/service/complexity.rb +27 -0
- data/lib/abrupt/service/input.rb +15 -0
- data/lib/abrupt/service/link.rb +15 -0
- data/lib/abrupt/service/picture.rb +19 -0
- data/lib/abrupt/service/readability.rb +26 -0
- data/lib/abrupt/service/subject.rb +19 -0
- data/lib/abrupt/transformation/base.rb +145 -0
- data/lib/abrupt/transformation/client/base.rb +8 -0
- data/lib/abrupt/transformation/client/page_view.rb +27 -0
- data/lib/abrupt/transformation/client/visit.rb +56 -0
- data/lib/abrupt/transformation/client/visitor.rb +19 -0
- data/lib/abrupt/transformation/website/base.rb +8 -0
- data/lib/abrupt/transformation/website/complexity.rb +20 -0
- data/lib/abrupt/transformation/website/input.rb +42 -0
- data/lib/abrupt/transformation/website/link.rb +27 -0
- data/lib/abrupt/transformation/website/picture.rb +26 -0
- data/lib/abrupt/transformation/website/readability.rb +15 -0
- data/lib/abrupt/transformation/website/subject.rb +22 -0
- data/lib/abrupt/version.rb +7 -0
- data/spec/cassettes/Abrupt_Crawler/outputs_correct_hash.yml +91250 -0
- data/spec/converter_spec.rb +34 -0
- data/spec/crawler_spec.rb +11 -0
- data/spec/factories/crawled_hashes.rb +468 -0
- data/spec/fixtures/rikscha-mainz.owl +17456 -0
- data/spec/fixtures/rikscha.ohneBilder.2013-04-30_2013-08-17.xml +51759 -0
- data/spec/fixtures/rikscha.ohneBilder.2013-04-30_2013-08-17_min.xml +81 -0
- data/spec/fixtures/rikscha_Result.xml +11594 -0
- data/spec/fixtures/rikscha_Result_min.xml +574 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/transformation/base_spec.rb +18 -0
- data/spec/transformation/website/complexity_spec.rb +188 -0
- data/spec/transformation/website/input_spec.rb +181 -0
- data/spec/transformation/website/link_spec.rb +13 -0
- data/spec/transformation/website/picture_spec.rb +20 -0
- data/spec/transformation/website/readability_spec.rb +22 -0
- data/spec/transformation/website/subject_spec.rb +40 -0
- metadata +424 -0
data/bin/abrupt
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'commander'
|
4
|
+
require_relative '../lib/abrupt'
|
5
|
+
|
6
|
+
class AbruptApp
|
7
|
+
include Commander::Methods
|
8
|
+
|
9
|
+
def run
|
10
|
+
program :name, 'Abrupt'
|
11
|
+
program :version, Abrupt::VERSION
|
12
|
+
program :help, 'Author', 'Manuel Dudda <manuelddudda@redpeppix.de>'
|
13
|
+
program :help, 'Source Code', 'https://github.com/manuel84/abrupt'
|
14
|
+
program :description, 'Automated Reasoning for Web Usability Problems'
|
15
|
+
|
16
|
+
command :crawl do |c|
|
17
|
+
c.syntax = 'abrupt crawl [options]'
|
18
|
+
c.description = 'Crawls a website'
|
19
|
+
c.option '-nofollow', "don't follow links"
|
20
|
+
c.option '--lang STRING', String, 'language'
|
21
|
+
c.option '--services STRING', Array, 'riscpl'
|
22
|
+
c.option '--verbose STRING', String, ''
|
23
|
+
c.option '--format STRING', String, 'xml or owl'
|
24
|
+
c.action do |args, options|
|
25
|
+
Abrupt.crawl args.first, options.__hash__
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
command :convert do |c|
|
30
|
+
c.syntax = 'abrupt convert src_crawled_data src_user_data [options]'
|
31
|
+
c.description = 'Converts and merges xml files to owl'
|
32
|
+
c.option '--format STRING', String, 'Specifies the output format, possible [turtle|rdfxml|ntriples] (default=turtle)'
|
33
|
+
c.option '--output STRING', String, 'Specifies an output file'
|
34
|
+
c.option '--assertions STRING', String, 'Specifies the included assertions, possible [tbox,user,website,rules] (default=tbox,user,website,rules)'
|
35
|
+
c.action do |args, options|
|
36
|
+
format = RDF::Format.for(options.output) unless options.format
|
37
|
+
options.default :format => 'turtle' # default turtle syntax output
|
38
|
+
options.default :assertions => 'tbox,user,website,rules'
|
39
|
+
format ||= RDF::Format.for(options.format.to_sym)
|
40
|
+
result = case args.count
|
41
|
+
when 0 then
|
42
|
+
puts "arg error"
|
43
|
+
when 1 then
|
44
|
+
Abrupt.convert args.first, options.__hash__
|
45
|
+
else
|
46
|
+
Abrupt.convert args.first, args[1], options.__hash__
|
47
|
+
end
|
48
|
+
if options.output
|
49
|
+
output_file = File.open(options.output, 'w')
|
50
|
+
format.writer.new(output_file, prefixes: Abrupt::PREFIXES) do |writer|
|
51
|
+
writer << result
|
52
|
+
end
|
53
|
+
else
|
54
|
+
puts result.dump Abrupt::Converter.instance.format, prefixes: Abrupt::PREFIXES
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
run!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
AbruptApp.new.run # if $0 == __FILE__
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
@prefix wdm: <http://wba.cs.hs-rm.de/wdm-service/wdmOWL/> .
|
2
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
3
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
4
|
+
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
6
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
7
|
+
|
8
|
+
|
9
|
+
[
|
10
|
+
a owl:Restriction;
|
11
|
+
rdfs:subClassOf wdm:Problem;
|
12
|
+
owl:minQualifiedCardinality "2"^^xsd:nonNegativeInteger;
|
13
|
+
owl:onDataRange xsd:boolean;
|
14
|
+
owl:onProperty wdm:required
|
15
|
+
] .
|
File without changes
|
@@ -0,0 +1,10 @@
|
|
1
|
+
wdm:RequiredFormElement rdf:type owl:Class ;
|
2
|
+
|
3
|
+
owl:equivalentClass [ rdf:type owl:Restriction ;
|
4
|
+
owl:onProperty wdm:name ;
|
5
|
+
owl:hasValue "agb"
|
6
|
+
] .
|
7
|
+
|
8
|
+
# not possible to infer a property from a class
|
9
|
+
# nicht möglich eine Rolle aus einer Klasse zu folgern.
|
10
|
+
# C(x) -> P(X, true)
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
a Checkbox
|
2
|
+
name agb
|
3
|
+
-> required true
|
4
|
+
|
5
|
+
[
|
6
|
+
a owl:Restriction;
|
7
|
+
owl:onProperty wdm:name;
|
8
|
+
owl:hasValue "agb";
|
9
|
+
rdfs:subClassOf wdm:RequiredFormElement
|
10
|
+
] .
|
11
|
+
|
12
|
+
wdm:required-true rdfs:samePropertyAs wdm:required;
|
13
|
+
rdfs:domain wdm:RequiredFormElement;
|
14
|
+
rdfs:range true^^boolean .
|
15
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@prefix wdm: <http://wba.cs.hs-rm.de/wdm-service/wdmOWL/> .
|
2
|
+
|
3
|
+
wdm:Website/http://www.rikscha-mainz.de/Page/http://www.rikscha-mainz.de/Kontakt/State/state5/Form/kontaktformular/Text/name a wdm:Text;
|
4
|
+
wdm:class "text";
|
5
|
+
wdm:id "name";
|
6
|
+
wdm:maxlength 60;
|
7
|
+
wdm:name "name";
|
8
|
+
wdm:placeholder "Vorname Nachname";
|
9
|
+
wdm:size 40;
|
10
|
+
wdm:type "text" .
|
@@ -0,0 +1,56 @@
|
|
1
|
+
@misc{Brieger,
|
2
|
+
AUTHOR = {Brieger, Silas Markus},
|
3
|
+
YEAR = {2014},
|
4
|
+
TITLE = {{Aufbereitung und Umstrukturierung Webseiten spezifischer Daten in OWL}},
|
5
|
+
SCHOOL = {Hochschule RheinMain},
|
6
|
+
}
|
7
|
+
|
8
|
+
@article{url_dl_primer,
|
9
|
+
author = {Markus Kr{\"{o}}tzsch and
|
10
|
+
Frantisek Simancik and
|
11
|
+
Ian Horrocks},
|
12
|
+
title = {A Description Logic Primer},
|
13
|
+
journal = {CoRR},
|
14
|
+
volume = {abs/1201.4089},
|
15
|
+
year = {2012},
|
16
|
+
url = {http://arxiv.org/abs/1201.4089},
|
17
|
+
timestamp = {Wed, 10 Oct 2012 21:28:47 +0200},
|
18
|
+
biburl = {http://dblp.uni-trier.de/rec/bib/journals/corr/abs-1201-4089},
|
19
|
+
bibsource = {dblp computer science bibliography, http://dblp.org}
|
20
|
+
}
|
21
|
+
|
22
|
+
@manual{url_abrupt,
|
23
|
+
AUTHOR = {Hochschule RheinMain},
|
24
|
+
YEAR = {2014},
|
25
|
+
TITLE = {AbRUPt},
|
26
|
+
ADDRESS = {http://wba.cs.hs-rm.de/AbRUPt/service/},
|
27
|
+
}
|
28
|
+
|
29
|
+
@article{Martin,
|
30
|
+
AUTHOR {Martin, Ludger},
|
31
|
+
TITLE = {A RESTful Web Service to Estimating Time Requirements for Web Forms},
|
32
|
+
YEAR = {2013},
|
33
|
+
}
|
34
|
+
|
35
|
+
@article{ruby-rdf,
|
36
|
+
AUTHOR = {Arto Bendiken, Ben Lavender, Gregg Kellogg},
|
37
|
+
YEAR = {2015},
|
38
|
+
TITLE = {ruby-rdf/rdf},
|
39
|
+
ADDRESS = {http://rubygems.org/gems/rdf},
|
40
|
+
}
|
41
|
+
|
42
|
+
@article{owl2rl,
|
43
|
+
AUTHOR = {W3C},
|
44
|
+
YEAR = {2012},
|
45
|
+
TITLE = {OWL 2 Web Ontology Language
|
46
|
+
Profiles (Second Edition)},
|
47
|
+
ADDRESS = {http://www.w3.org/TR/owl2-profiles/#OWL_2_RL},
|
48
|
+
}
|
49
|
+
|
50
|
+
@article{owl2rif,
|
51
|
+
AUTHOR = {W3C},
|
52
|
+
YEAR = {2013},
|
53
|
+
TITLE = {OWL 2 RL in RIF (Second Edition)},
|
54
|
+
ADDRESS = {http://www.w3.org/TR/rif-owl-rl},
|
55
|
+
}
|
56
|
+
|
data/doc/paper/main.tex
ADDED
@@ -0,0 +1,322 @@
|
|
1
|
+
|
2
|
+
%%%%%%%%%%%%%%%%%%%%%%% paper_sem_web.tex %%%%%%%%%%%%%%%%%%%%%%%%%
|
3
|
+
%
|
4
|
+
% This is the LaTeX source for the instructions to authors using
|
5
|
+
% the LaTeX document class 'llncs.cls' for contributions to
|
6
|
+
% the Lecture Notes in Computer Sciences series.
|
7
|
+
% http://www.springer.com/lncs Springer Heidelberg 2006/05/04
|
8
|
+
%
|
9
|
+
% It may be used as a template for your own input - copy it
|
10
|
+
% to a new file with a new name and use it as the basis
|
11
|
+
% for your article.
|
12
|
+
%
|
13
|
+
% NB: the document class 'llncs' has its own and detailed documentation, see
|
14
|
+
% ftp://ftp.springer.de/data/pubftp/pub/tex/latex/llncs/latex2e/llncsdoc.pdf
|
15
|
+
%
|
16
|
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
17
|
+
|
18
|
+
|
19
|
+
\documentclass[runningheads,a4paper]{llncs}
|
20
|
+
\usepackage[utf8x]{inputenc}
|
21
|
+
\usepackage{amssymb}
|
22
|
+
|
23
|
+
\setcounter{tocdepth}{3}
|
24
|
+
\usepackage{graphicx}
|
25
|
+
\usepackage{mathtools}
|
26
|
+
\usepackage{url}
|
27
|
+
|
28
|
+
\usepackage{listings}
|
29
|
+
|
30
|
+
\usepackage{xcolor}
|
31
|
+
\definecolor{grey}{rgb}{0.5,0.5,0.5}
|
32
|
+
\lstdefinelanguage{ttl}{
|
33
|
+
sensitive=true,
|
34
|
+
morecomment=[l][\color{grey}]{@},
|
35
|
+
morecomment=[l][\color{black}]{\#},
|
36
|
+
morestring=[b][\color{black}]\",
|
37
|
+
numbers=left,
|
38
|
+
frame=shadowbox,
|
39
|
+
basicstyle=\scriptsize\ttfamily,
|
40
|
+
tabsize=2,
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
\urldef{\mailsa}\path|manuel.b.dudda@student.hs-rm.de|
|
45
|
+
\newcommand{\keywords}[1]{\par\addvspace\baselineskip
|
46
|
+
\noindent\keywordname\enspace\ignorespaces#1}
|
47
|
+
|
48
|
+
\begin{document}
|
49
|
+
|
50
|
+
\mainmatter % start of an individual contribution
|
51
|
+
|
52
|
+
% first the title is needed
|
53
|
+
\title{Schließen auf Usability-Probleme mit OWL 2 RL}
|
54
|
+
|
55
|
+
% a short form should be given in case it is too long for the running head
|
56
|
+
\titlerunning{TODO: }
|
57
|
+
|
58
|
+
% the name(s) of the author(s) follow(s) next
|
59
|
+
%
|
60
|
+
% NB: Chinese authors should write their first names(s) in front of
|
61
|
+
% their surnames. This ensures that the names appear correctly in
|
62
|
+
% the running heads and the author index.
|
63
|
+
%
|
64
|
+
\author{Manuel Dudda}
|
65
|
+
%
|
66
|
+
\authorrunning{TODO:}
|
67
|
+
% (feature abused for this document to repeat the title also on left hand pages)
|
68
|
+
|
69
|
+
% the affiliations are given next; don't give your e-mail address
|
70
|
+
% unless you accept that it will be published
|
71
|
+
\institute{Hochschule RheinMain Informatik Master of Science \\
|
72
|
+
Fachbereich Design Informatik Medien \\
|
73
|
+
Campus Unter den Eichen 5
|
74
|
+
65195 Wiesbaden , Deutschland\\
|
75
|
+
\mailsa\\
|
76
|
+
\url{https://github.com/manuel84/abrupt}}
|
77
|
+
|
78
|
+
%
|
79
|
+
% NB: a more complex sample for affiliations and the mapping to the
|
80
|
+
% corresponding authors can be found in the file "llncs.dem"
|
81
|
+
% (search for the string "\mainmatter" where a contribution starts).
|
82
|
+
% "llncs.dem" accompanies the document class "llncs.cls".
|
83
|
+
%
|
84
|
+
|
85
|
+
\toctitle{Lecture Notes in Computer Science}
|
86
|
+
\tocauthor{Authors' Instructions}
|
87
|
+
\maketitle
|
88
|
+
|
89
|
+
|
90
|
+
\begin{abstract}
|
91
|
+
Die Usability von Internetauftritten wird größtenteils subjektiv wahrgenommen.
|
92
|
+
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
|
+
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.
|
95
|
+
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
|
+
\end{abstract}
|
97
|
+
|
98
|
+
|
99
|
+
\section{Einleitung}
|
100
|
+
\# TODO
|
101
|
+
\newpage
|
102
|
+
\section{Logik und Berechenbarkeit}
|
103
|
+
|
104
|
+
\# [WiP]
|
105
|
+
|
106
|
+
Mit der Aussagenlogik lassen sich beschränkt 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
|
+
|
108
|
+
\begin{figure}
|
109
|
+
\begin{align}
|
110
|
+
\begin{split}
|
111
|
+
A &= \textnormal{Die Checkbox hat den Namen \textit{agb}.}\\
|
112
|
+
B &= \textnormal{Die Checkbox ist kein Pflichtfeld.}\\
|
113
|
+
A \to C &= \textnormal{Die Checkbox mit Namen \textit{agb} ist ein Pflichtfeld.}\\
|
114
|
+
(A \to C) \land B &= \textnormal{Es liegt ein Usability-Problem vor.}
|
115
|
+
\label{eq:propositional_logic}
|
116
|
+
\end{split}
|
117
|
+
\end{align}
|
118
|
+
\caption{Aussagenlogische Formlen}
|
119
|
+
\end{figure}
|
120
|
+
|
121
|
+
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
|
+
Diese ist allerdings nicht als solches ausgezeichnet (\(B\)).
|
123
|
+
Aus dieser Inkonsistenzeigenschaft ergibt sich ein Problem (\(A \land C\)).
|
124
|
+
Die Aussage \((A \to C)\) könnte genauso als die Negation von \(B\) definiert werden.
|
125
|
+
Es ergäbe sich daraus eine Kontradiktion \((\neg B \land B)\), einer Formel die stets zu \textit{falsch} ausgewertet wird.
|
126
|
+
Über Wahrheitstafeln können jegliche (zusammengesetzte) Aussagen auf deren Wahrheitsgehalt überprüft werden.
|
127
|
+
Damit verdeutlicht sich einfach, dass das Schlussfolgern über die aussagenlogische Formeln ein entscheidbares Problem darstellt.
|
128
|
+
\\
|
129
|
+
|
130
|
+
Eine Erweiterung der Aussagenlogik stellt die Prädikatenlogik dar.
|
131
|
+
In der Prädikatenlogik werden Elementaraussagen hinsichtlich ihrer Struktur untersucht.
|
132
|
+
Mit Prdäikaten können Rolleneigenschaften über Individuen festgelegt werden, bspw. für den Namen eines Individuums \textit{x} kann gelten $HasName(x, 'agb')$.
|
133
|
+
Quantoren geben an, von wie vielen Individuen eine Aussage erfüllt wird, so kann die Aussage über die Existenz eines Individuums \textit{x} mit dem Namen \textit{agb} getroffen werden $\exists x. HasName(x, 'agb')$.
|
134
|
+
% \renewcommand{\figurename}{Fig.}
|
135
|
+
\begin{figure}
|
136
|
+
\begin{equation}
|
137
|
+
istPflichtfeld(x)
|
138
|
+
\label{eq:fol_predicate}
|
139
|
+
\end{equation}
|
140
|
+
\caption{Prädikatenlogik erster Stufe: Prädikat}
|
141
|
+
\end{figure}
|
142
|
+
|
143
|
+
\begin{figure}
|
144
|
+
\begin{equation}
|
145
|
+
\forall x. \neg Checkbox(x) \land (\neg istPflichtfeld(x) \lor istPflichtfeld(x))
|
146
|
+
\label{eq:fol_quantors1}
|
147
|
+
\end{equation}
|
148
|
+
\caption{Prädikatenlogik erster Stufe: All-Quatnor}
|
149
|
+
\end{figure}
|
150
|
+
|
151
|
+
\begin{figure}
|
152
|
+
\begin{equation}
|
153
|
+
\exists x\exists y. Website(x) \land name(x, y)
|
154
|
+
\label{eq:fol_quantors2}
|
155
|
+
\end{equation}
|
156
|
+
\caption{Prädikatenlogik erster Stufe: Existenz-Quantor}
|
157
|
+
\end{figure}
|
158
|
+
|
159
|
+
Somit lassen sich wesentlich mächtigere Aussagen treffen, die mit der Aussagenlogik allein nicht möglich sind.
|
160
|
+
Dies hat allerdings auch Asuwirkungen auf die Laufzeit des Schlussfolgerns.
|
161
|
+
Das Entscheidungsverfahren für die Prädikatenlogik ist unentscheidbar.
|
162
|
+
\\
|
163
|
+
|
164
|
+
Eine entscheidbare Untermenge der Prädikatenlogik erster Stufe bieten die Beschreibungslogiken.
|
165
|
+
Im Wesentlichen enthält eine Beschreibungslogik die Operatoren der Aussagenlogik (Negation, und, oder), ein- und zweistellige Prädikate sowie eine eingeschränkte Quantifizierung.
|
166
|
+
Sie umfassen Individuen (Objekte), Rollen (2-stellige Prädikate) und Konzepte (Klassen), wobei keine Klassen von Klassen möglich sind.
|
167
|
+
Normalerweie wird die Wissensbasis dabei in 2 Teile separiert.
|
168
|
+
Das Terminoligische Wissen (\textit{TBox}) beschreibt die Struktur möglicher Welten.
|
169
|
+
Es stellt Begriffe zur Beschreibung von Sachverhalten bereit.
|
170
|
+
So definiert es das Vokabular in einem Anwendungsbereich.
|
171
|
+
Das Grundvokabular besteht aus Konzepten (einstellige Prädikate) und Rollen (zweistellige Prädikate).
|
172
|
+
Das Assertionales Wissen beschreibt die Sachverhalte, die in einer bestimmten Welt gelten.
|
173
|
+
Es existieren Annahmen (assertions) über einzelne Objekte ausgedrückt mit
|
174
|
+
Hilfe des Grundvokabulars.
|
175
|
+
|
176
|
+
Die Syntax ist stark an die Prädikatenlogik angelehnt.
|
177
|
+
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 kann, sind bei Beschreibungslogiken nur Konzepte in Subsumptionen möglich \(C_1 \sqsubseteq C_2\).
|
180
|
+
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
|
+
Eine Auflistung der Syntax und der Entsprechung in Prädikatenlogik sowie OWL finden Sie in \ref{table:description_logic}
|
182
|
+
\\
|
183
|
+
Mit dem RL-Profil aus OWL 2 (\cite{owl2rl}) gibt es eine Sprache, die die gleiche Mächtigkeit wie die Beschreibungslogik (ALC...) besitzt und demnach für das Reasoning in entscheidbarer Komplexität bestens geeignet ist.
|
184
|
+
Sie hat ein gute Balance zwischen Ausdrucksfähigkeit und Berechenbarkeits-/Verarbeitungseigenschaften.
|
185
|
+
OWL 2 ist zu dem Empfehlung des W3C und es existieren bereits einige Reasoner-Implementierungen.
|
186
|
+
Die bekanntesten derzeit sind Fact++, Hermit, KAON2 und Pellet.
|
187
|
+
|
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
|
+
|
200
|
+
\section{Implementierung}
|
201
|
+
|
202
|
+
\subsection{Anpassungen und Erweiterung des OWL-Converters}
|
203
|
+
|
204
|
+
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
|
+
Die Arbeit zeigt gute Ansätze und setzt auf die Konvertierung der erhobenen Daten in ein OWL-Dokument.
|
206
|
+
Mit einem anschließenden Projekt können mit einem durchdachten Regelsystem Schlussfolgerungen gezogenwerden.
|
207
|
+
Das Programm ist als HTML-Dienst gestaltet und kann lediglich die Webseiten-Daten aus \textit{AbRUPt} umwandeln, die Integration der Webseiten-Besucherdaten ist noch nicht integriert.
|
208
|
+
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 eine Konzept für eine sinnvolle Aufbereitung der Daten gezeigt werden.
|
210
|
+
Es ist OWL-Converter entstanden, der erhobene \textit{AbRUPt}-Daten von einem XML-Format in ein OWL-Dokument transformiert.
|
211
|
+
|
212
|
+
\#TODO:warum eigentlich wdm-service?
|
213
|
+
\\
|
214
|
+
|
215
|
+
Einige wichtige Aspekte wurden in dieser Arbeit geändert.
|
216
|
+
Die Ontologie für den \textit{wdm-service} wurde von Grund auf intuitiver gestaltet und um die Konzepte der Webseiten-Besucherdaten erweitert (Fig. onto-Graph).
|
217
|
+
Dabei wurde ebenso auf sinnvolle Konsistenzeigenschaften sowie Inferenz-Regeln zurückgegriffen, die auf Usabilty-Probleme schlussfolgern. (Abschnit Regeln)
|
218
|
+
Ein Problem ergab sich für die Eindeutigkeit von Webseiten-Elementen, die nicht kontextbasiert benannt wurden.
|
219
|
+
Mit dem an \textit{REST} angelehnten URI-Aufbau ergeben sich global einheitlich URIs.
|
220
|
+
Dabei wird der Kontext in die URI-Struktur jeweils eingebettet.
|
221
|
+
Ein Formular-Element kann somit auf mehreren Webseiten mit gleicher Id, Name und sonstigen Attributen koexistieren und wird nicht zu dem selben OWL-Element konvertiert.
|
222
|
+
Beispielsweise liegt dann das Input-Textelement des Namens für ein Kontaktformular innerhalb von Formular (Form = \textit{kontaktformular}), Seitenstatus (State = \textit{state5}), Seiten-URL (Page = \textit{http://www.rikscha−mainz.de/Kontakt}) und der zugehörigen Website (Website = \textit{http://www.rikscha−mainz.de}).
|
223
|
+
Das sieht zunächst nicht sehr lesbar aus, ist aber unvermeidbar aufgrund möglicher großer Datenbestände.
|
224
|
+
\lstinputlisting[breaklines=true,language=ttl, caption=Nested URIs]{listings/unique_nested_uris.ttl}
|
225
|
+
|
226
|
+
\#TODO: Erweiterung Struktur um Problem-Klasse
|
227
|
+
|
228
|
+
\subsection{Das abrupt-Gem (Converter-Lib + Binary)}
|
229
|
+
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 für RDF/OWL durch \cite{ruby-rdf} ausgezeichnet und zum Anderen erweisen sich noch weitere wesentliche Vorteile:
|
231
|
+
\begin{itemize}
|
232
|
+
\item{Benutzung durch Kommandozeilentool}
|
233
|
+
\item{Modularer Aufbau}
|
234
|
+
\item{Ausgezeichnete Unittest-Unterstützung}
|
235
|
+
\item{Wiederverwendbarkeit durch Einbindung als RubyGem Bibliothek oder des Kommandozeilentools}
|
236
|
+
\item{Flexibilität der Eingabe und Ausgabe (bestimmte Services, nur Abrupt/ohne Benutzerdaten, tutrle, rdfxml, n3}
|
237
|
+
\end{itemize}
|
238
|
+
|
239
|
+
\#TODO: Grundstruktur/Vokabular als Ausgangsbasis, eigenes mit Protege entwicketes OWL-Dok
|
240
|
+
- Regeln einzelne OWL-Dokumente
|
241
|
+
- Converter modular aufgebaut (jeder Service readability, ... eigene Klasse)
|
242
|
+
- JSON-Schema für die Datentypsicherheit
|
243
|
+
- Webseiten-Benutzerdaten
|
244
|
+
- Kommandozeilentool help (Params, output)
|
245
|
+
|
246
|
+
\newpage
|
247
|
+
|
248
|
+
\section{Schließen auf Probleme mit Inferenz-Regeln}
|
249
|
+
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 wiet hinaus.
|
252
|
+
Es is somit auch dokumentenbasiert, was die Erstellung und Verteilung gegenüber einem Binärformat enorm vereinfacht.
|
253
|
+
Um die richtige Balance zwischen Ausdrucksstärke und Entscheidbarkeit bzw. Performance zu gewährleisten gibt es 3 verschiedene Sprachebenen.
|
254
|
+
Hier wird der Fokus auf die 2. Sprachebene OWL 2 DL gelegt, für die widerrum 3 Profile existieren.
|
255
|
+
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 direkt der Beschreibungslogiken.
|
257
|
+
Je nach Anwendung der Axiome ergibt sich das jeweilige Profil, es wird nicht für das Dokumenten vorab definiert.
|
258
|
+
Man ist daher darauf bedacht auf gewisse OWL-Axioma zu verzichten um nicht in das ungewünschte Profil reinzurutschen.
|
259
|
+
\begin{table}[h]
|
260
|
+
\begin{tabular}{|l|l|l|}
|
261
|
+
\hline
|
262
|
+
Prädikatenlogik erster Stufe & Beschreibungslogik ACL & OWL 2 RL \\ \hline
|
263
|
+
$ C_1 \sqcap ... \sqcap C_n $ & $ C_1 \sqcap ... \sqcap C_n $ & \textit{intersectionOf} \\ \hline
|
264
|
+
$ C_1 \sqcup ... \sqcup C_n $ & $ C_1 \sqcup ... \sqcup C_n $ & \textit{unionOf} \\ \hline
|
265
|
+
$ \neg C $ & $ \neg C $ & \textit{complementOf} \\ \hline
|
266
|
+
$ \{a_1\} \sqcup ... \sqcup \{a_n\} $ & $ \{a_1\} \sqcup ... \sqcup \{a_n\} $ & \textit{oneOf} \\ \hline
|
267
|
+
$ \forall P.C $ & $ \forall P.C $ & \textit{allValuesFrom} \\ \hline
|
268
|
+
$ \exists P.C $ & $ \exists P.C $ & \textit{someValuesFrom} \\ \hline
|
269
|
+
$ \geq n P $ & $ \geq n P $ & \textit{minCardinality} \\ \hline
|
270
|
+
$ \leq n P $ & $ \leq n P $ & \textit{maxCardinality} \\ \hline
|
271
|
+
$ C_1 \sqsubseteq C_2 $ & $ C_1 \sqsubseteq C_2 $ & \textit{subClassOf} \\ \hline
|
272
|
+
$ C_1 \equiv C_2 $ & $ C_1 \equiv C_2 $ & \textit{equivalentClass} \\ \hline
|
273
|
+
$ C_1 \sqsubseteq \neg C_2 $ & $ C_1 \sqsubseteq \neg C_2 $ & \textit{disjointWith} \\ \hline
|
274
|
+
$ \{a_1\} \sqsubseteq \{a_2\} $ & $ \{a_1\} \sqsubseteq \{a_2\} $ & \textit{sameIndividualAs} \\ \hline
|
275
|
+
\end{tabular}
|
276
|
+
\label{table:description_logic}
|
277
|
+
\caption{Syntax der Beschreibungslogik und Entsprechung in der Prädikatenlogik sowie in OWL 2 RL}
|
278
|
+
\end{table}
|
279
|
+
|
280
|
+
Eine vernünftige Unterteilung der Axiome ist in \cite{owl2rif} gegeben.
|
281
|
+
|
282
|
+
|
283
|
+
\subsection{Inkonsistenz-Regeln}
|
284
|
+
|
285
|
+
\lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/inconsistency_rule.ttl}
|
286
|
+
|
287
|
+
\subsection{Produktions-Regeln}
|
288
|
+
|
289
|
+
\lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/production_rule.ttl}
|
290
|
+
|
291
|
+
\subsection{Listen-Regeln}
|
292
|
+
\subsection{Datentyp-Regeln}
|
293
|
+
|
294
|
+
\lstinputlisting[breaklines=true,language=ttl, caption=Regel xx]{listings/datatype_rule.ttl}
|
295
|
+
|
296
|
+
\section{Zusammenfassung \& Ausblick}
|
297
|
+
alter Converter:
|
298
|
+
|
299
|
+
- ~ 2000 Zeilen, kein Testcode
|
300
|
+
|
301
|
+
- in nur 4 Klassen
|
302
|
+
|
303
|
+
- Konfigurationen hartgecodet, schlecht wartbar
|
304
|
+
\\
|
305
|
+
neuer Converter:
|
306
|
+
|
307
|
+
- nur 800 Zeilen inkl. Crawlr (beta), Testcode
|
308
|
+
|
309
|
+
- Vokabular (T-Box) ausgelagert
|
310
|
+
|
311
|
+
- höchstens 130 Zeilen pro Klasse
|
312
|
+
|
313
|
+
- Rubygem: Kommandozeilentool, aber auch Code einbettbar in Ruby Web-Projekt
|
314
|
+
|
315
|
+
\section{Fazit}
|
316
|
+
|
317
|
+
\nocite{url_dl_primer}
|
318
|
+
|
319
|
+
\bibliography{literature}
|
320
|
+
\bibliographystyle{alpha}
|
321
|
+
|
322
|
+
\end{document}
|