Bachelorarbeit: Entwicklung eines RDF Schemas für Java-Programme
bearbeitet von Safak Ökmen
Zusammenfassung
Manipulierbare Systeme erlauben Endbenutzern das Verändern des Quellcodes eines Programms zur Laufzeit. Dabei bedienen sich die Endanwender eines Editors, der die Komplexität des zugrunde liegenden Programms verbirgt. Je nach Expertise des Endanwenders kann er mit Hilfe des Editors verschieden tief greifende Änderungen in einem Programm durchführen.
Zur Realisierung eines solchen Editors ist es wichtig, die Programmen bereits vorgegebene Struktur zu nützen. Das Ziel der Bachelorarbeit ist es, diese greifbar und durch Programme abfragbar zu machen. Beispielsweise soll eine Abfrage der Art ?Liefere alle Klassen vom Typ Event? an. Hierzu ist es nötig verschiedene, abstrakte Präsentationsformen (Modelle) von Programmen (UML-Modelle, hypergraphbasierte, ... ) zu vergleichen. Zudem soll das Modell auch die Abfrage bestimmter Tags, die als Kommentare im Programmcode enthalten sind (ähnlich Javadoc), ermöglichen. Auf Basis dieses Modells sind dann Abfragen zu realisieren. Das Werkzeug soll dann in einen bestehenden Editor für die Manipulation von Anwendungen für Endanwender integriert werden.
Arbeitsergebnisse
*
Ausarbeitung
Some Notes
Notes and toDo's
- Kommentaretags im Quellcode
- kleine Beispiele versuchen zu parsen
- Hyena installieren
- RDF Darstellung und Java Quellcode sollten möglichst synchron sein jederzeit.
- RDF ändern (hinzufügen, löschen, etc.) und zurück zum Java Quellcode wechseln können.
- RDF präsentation is Wissen über ein Java Programm mit Verweis auf änderbarem Code.
- Event ist ein "passieren" das dem Endanwender vertraut ist.
Action Items
Beispiel für einen Syntaxbaum (engl. parse tree) (WHILE - Sprache)
"Semantics with Applications: A formal Introduction", ISBN: 0-471-92980-8, http://www.daimi.au.dk/%7Ebra8130/Wiley_book/wiley.html
n
∈ Num (numerals),
x
∈ Var (variables),
a
∈ Aexp (arithmetic expression),
b
∈ Bexp (boolean expression),
S
∈ Stm (statement)
BNF-Notation:
a ::=
n | x | a
1 + a
2 | a
1 * a
2 | a
1 - a
2
b ::=
true | false | a
1 = a
2 | a
1 ≤ a
2 |
¬ b | b
1 ∧ b
2
S ::=
x := a | skip | S
1 ; S
2 | if b then S
1 else S
2 | while b do S
generated by Graphviz
(i don't recommend manually
specifying a graph with Graphviz- so far)
An Ontology is a conceptual schema within a given domain, typically a hierarchical data structure containing all the relevant
entities and their relationships and rules.
An Ontology is a specification (formal description) of a conceptualization.
RDF is a framework to model meta-data about a resource on the web.
RDF is a knowledge modeling language.
RDF defines a set of meta-data properties (e.g. 'creator') that can be associated with ressources.
Eine Liste für uns relevanter Eigenschaften von Java Programmen:
- Konstruktoren,
- packeges,
- Klassen /Subklassen /Superklassen /abstrakte Klassen /innere Klassen,Konstruktoren,
- Methoden /main Methode (Applets?),
- Attribute (Typinformationen),
- Interfaces,
- (Javadoc),
- (import Statements),
- (Modifikatoren (public /private /protected)),
- (Eingabe -, und Übergabeparameter an Methoden (Konstruktoren)),
- Kommentare.
Beispiel für einen Syntaxbaum (JAVA)
//% The source file must be named HelloWorld.java
public class HelloWorld{
//% The main method is passed an array of command-line parameters
public static void main(String[] args){
System.out.println("Hello World!");
}
}
(
http://en.wikipedia.org/wiki/Java_programming_language#Hello_World)
native (RDF) Statements:
- Das Java Programm enthält eine Klasse "HelloWorld".
- Die Klasse "HelloWorld" hat eine Beschreibung "The source file must be named HelloWorld.java".
- Die Klasse "HelloWorld" hat einen Modifikator "public".
- Die Klasse "HelloWorld" enthält eine Methode "main".
- Die Methode "main" hat eine Beschreibung "The main method is passed an array of command-line parameters".
- Die Methode "main" hat einen Modifikator "public".
- Die Methode "main" hat einen Modifikator "static".
- Die Methode "main" hat einen Rückgabewert "void".
- Die Methode "main" enthält eine Anweisung "System.out.println("Hello World!");". (Hier vielleicht schon zu detailliert?)
RDF Graph:
nky:= not known yet
- <nky:javaProgram nky:consistOf nky:"HelloWorld">
- <nky:"HelloWorld" rdf:type nky:class>
- <nky:"HelloWorld" nky:own nky:"The source file must be named HelloWorld.java">
- <nky:"The source file must be named HelloWorld.java" rdf:type nky:comment>
- <nky:"HelloWorld" nky:own nky:"public">
- <nky:"public" rdf:type nky:modificator>
- <nky:"HelloWorld" nky:consistOf nky:"main">
- <nky:"main" rdf:type nky:method>
- <nky:"main" nky:own nky:"The main method is passed an array of command-line parameters">
- <nky:"The main method is passed an array of command-line parameters" rdf:type nky:comment>
- <nky:"main" nky:own nky:"public">
- <nky:"main" nky:own nky:"static">
- <nky:"static" rdf:type nky:modificator>
- <nky:"main" nky:own nky:"void">
- <nky:"void" rdf:type nky:modificator>
- <nky:"main" nky:own nky:"System.out.println("Hello World!");">
- <nky:"System.out.println("Hello World!");" rdf:type nky:expression>
XML Serialization (RDF/XML):
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:nky="URI zur eigenen Syntaxdefinition (literal, javaProgram, class, modificator, comment, method, expression, own, consistOf)">
<nky:javaProgram rdf:about="Link zum Einstiegspunkt in das Programm">
<nky:consistOf>"Hello World" </nky:consistOf>
</nky:javaProgram>
<nky:literal rdf:about="Hello World"> //(link zum Anfang von Klasse HelloWorld?)
<rdf:type>class</rdf:type>
<nky:own>"The source file must be named HelloWorld.java"
<nky:own>"public"</nky:own>
<nky:consistOf>"main"</nky:consistOf>
</nky:literal>
<nky:literal rdf:about="The source file must be named HelloWorld.java">
<rdf:type>comment </rdf:type>
</nky:literal>
<nky:literal rdf:about="public">
<rdf:type>modificator </rdf:type>
</nky:literal>
<nky:literal rdf:about="main">
<rdf:type>method </rdf:type>
<nky:own>"The main method is passed an array of command-line parameters"</nky:own>
<nky:own>"public"</nky:own>
<nky:own>"static"</nky:own>
<nky:own>"void"</nky:own>
<nky:own>"System.out.println("Hello World!");"</nky:own>
</nky:literal>
<nky:literal rdf:about="The main method is passed an array of command-line parameters">
<rdf:type>comment</rdf:type>
</nky:literal>
<nky:literal rdf:about="static">
<rdf:type>modificator</rdf:type>
</nky:literal>
<nky:literal rdf:about="void">
<rdf:type>modificator</rdf:type>
</nky:literal>
<nky:literal rdf:about="System.out.println("Hello World!);">
<rdf:type>expression</rdf:type>
</nky:literal>
</rdf:RDF>
Menge aller Modifikatoren = {
- abstract,
- final,
- native,
- private,
- protected,
- public,
- strictfp,
- static,
- synchronized,
- transient,
- volatile.
}
"Java in a Nutshell", ISBN: 3-89721-190-4, Seite: 142
Sonderzeichen aus
ISO-8859-1
oder
ISO-8859-15
oder
unicode (utf-8)