Thursday, May 31, 2007

DOM und SAX

DOM war von Anfang an als eine plattform- und sprachunabhängige Schnittstellenbeschreibung für den Zugriff auf XML-Dokumente (und auf HTML) konzipiert.

SAX wurde zunächst nur als Java-API entwickelt, die aktuelle Version liegt aber auch in Varianten für andere Entwicklungsumgebungen vor.

Diese beiden Techniken sind vom Ansatz her grundverschieden. Die größe des XML-Dokuments spielt für SAX keine Rolle da immer nur eine Zeile (sequenziell) aus dem Dokument verarbeitet wird. SAX erlaubt daher eine schnelle Verarbeitung des gesamten Dokuments in einem Durchgang.

Um eine gezielte Bearbeitung bestimmter Stellen im Dokument oder Sprünge von einer Stelle zu anderen gewährleisten zu können muss man DOM verwenden. DOM erlaubt nicht nur das Herumspringen sondern auch das Einfügen von neuen Knoten.

Man kann natürlich auch beide Technoligien miteinander kombinieren.
Wann SAX?
  • Wenn das XML-Dokument lineare Daten repräsentiert. (Keine tiefen Verschachtelungen)
  • Bei großen XML-Dokumenten. (Der Parser sieht nur ein kleines Stück des XML-Dokuments auf einmal)
  • Wenn eine fein abgestimmte Steuerung benötigt wird.

DOM ist mit Hilfe der der sprachunabhängigen Interface Definition Language definiert worden.

Tuesday, May 29, 2007

XML Schema

Defizite von DTDs:
  • Präzise Unterscheidung von Datentypen
  • Festlegung von erlaubten Wertebreichen
  • Kontrolle über bestimmte Zeichenmuster
  • Vorgabe von Standardwerten
  • DTDs sind nicht selbst in XML formulierbar ==> zusätzlicher Editor notwendig
  • Nicht über Programmierschnittstellen zugreifbar ( wie z.B. DOM)

Ein Schema beschreibt und definiert also eine Klasse von XML-Dokumenten, indem es die Bedeutung, die mögliche Verwendung und die Beziehung der Teile festlegt, aus denen das Dokument besteht:

  • Datentypen
  • Elemente und ihr Inhalt
  • Attribute und ihre möglichen Werte
  • Entitäten und ihr Inhalt
  • Notation

Wichtig: Ein Schema ist selbst ein XML-Dokument und kann dadruch auf Wohlgeformtheit und Gültigkeit überprüft werden.

Komplexe Datentypen

  • Können einfache oder auch komplexe Datentypen enthalten
  • Komplexe Datentypen können auch ohne Namenszuordnung definiert werden. (= anonyme Datentypen)

Das Inhaltsmodell eines komplexen Datentyps setzt sich aus Teilen zusammen, die auch Partikel genannt werden.

Sequenzen

  • Legt Reihenfolge der Elemente verbindlich fest
  • Angeführte Elemente müssen vorkommen
  • Abfolge der angeführten Elemente muss genau eingehalten werden

Einfache Datentypen

Elemente die nur einen Wert enthalten, wie z.B. eine Zahl, ein Datum oder Text. Der Wert von Attributen gehört immer zu den simpleTypes ==> Keine Kindelemente oder Unterelemente!

Anonyme Datentypen

Diese sind immer dann problemlos, wenn der jeweilige Datentyp nur einmal verwendet wird und auch eine Übernahme in ein anderes Schema nicht vorgesehen ist. Restrictions sind ebenfalls nicht möglich.

Attribute

Dieses Element kann innerhalb von komplexen Datentypen verwendet werden, wobei es immer hinter den Elementendeklarationen erscheinen muss. Attribute können nicht geschachtelt werden oder andere Elemente enthalten. Die Reihenfolge der Attributdeklaration zu einem Datentyp ist beliebig. Die Namen der Attribute innerhalb eines koplexen Datentyps müssen aber eindeutig sein.

Namensräume

XML-Schema unterstützt die Verwendung von Namensräumen und ermöglicht dadurch die Überprüfung der Gültigkeit von XML-Dokumenten, die verschiedene Vokabulare mischen. Namenskonflikte können somit vermieden werden.

Der Default-Namespace kann durch weglassen des Präfixes bei der Deklaration des Namensraumes definiert werden. Dies hat aber den Nachteil, dass vorgegebene Datentypen und benutzerdefinierte Datentypen nicht mehr sofort unterschieden werden können.

Die Zuordnung der Namen zu den Komponenten eines bestimmten Schemas kann in jedem Fall einen eigenen Namensraum konstituieren, die Empfehlung nennt ihn target namespace. Dieser Namensraum wird dadurch gebildet, dass er über eine entsprechende Deklaration identifiziert wird.

Valide Schema Definitionen

1. Default Namespace mit Präfix

From Misc

Zugehörige valide XML-Instanz:

From Misc

Error durch weglassen des Präfixes im Schema-Dokument:

From Misc

2. Definition eines Target-Namespaces:

From Misc

Zugehörige valide XML-Instanz:

From Misc


Error da das elementFormDefault Attribut im XML-Schemadokument default-mässig auf unqualified eingestellt ist und in der XML-Instanz als Default-Namespace der selebe Namespace wie der targetNamespace im Schema-File deklariert ist.

Dadurch erwartet der XML-Parser als erstes Element innerhalb des Wurzel-Eelements ein unqualifiziertes Element. Das Problem kann dadurch behoben werden indem dem Wurzel-Element und dem Default-Namespace ein Präfix zugeordnet wird. In der validen Abbildung geschieht dies durch das default-Präfix.


Weiters kann der Fehler behoben werden indem das elementFormDefault-Attribut im Schema-File auf qualified gesetzt wird, da jetzt der Namensraum als Vorgabe verwendet wird. Diese Einstellung kann man in der letzten Abbildung sehen.

From Misc

Hier ist das elementFormDefault-Attribut im Schema auf qualified gesetzt und daher können die Präfixe komplette in der zugehörigen XML-Instaz weggelassen werden.

From Misc

Hacks

Um z.B. xsd:decimal um ein Attribug "waehrung" zu erweitern, um diesen einfachen Datentyp mit dem Eurozeichen zu verknüpfen dient folgender Code:

From Misc


Thursday, May 24, 2007

BCN | Day Four ...

... Will code 4 money ;o)

From Barcelona
Me still luv Java

From Barcelona


From Barcelona


From Barcelona


From Barcelona


From Barcelona


From Barcelona


From Barcelona




Yo,what's crackin' !!!



Cheers

Tuesday, May 22, 2007

BCN | Day Three ...

... no comment ;o)






Cheers

Monday, May 21, 2007

Barcelona | Day Two ...

... Pix are online! Today we saw some of the awesome Gaudì buildings and we also went up to Parc Güell which was a very exhausting trip because we had to negotiate over a lot of stairs until we got up to one of the highest points in Barca where we got this wonderful view!


From Barcelona




From Barcelona




From Barcelona




From Barcelona




From Barcelona



I don't want to show off but this pic is soooo cool ... Hilarious!! ;o)

From Barcelona



Cheers

Sunday, May 20, 2007

Barca | First Day ...

... and we (Schoki and me) already fell in love with this city. I dont't want to bore you with long stories, just check the pictures and get yourself an impression about Barca:


From Barcelona




From Barcelona




From Barcelona




From Barcelona




From Barcelona




From Barcelona




From Barcelona



By clicking on the Barcelona Link under the pictures you will be directed to the full Barca-Album. I will update this album almost every day, depends on how much time I have between coffee, beach and a lil bit of culture ;o). The very cool thing is that we have free W-Lan in our Hostel. That R-O-C-K-S! So, enough dinner-time ;o)
Cheers

Saturday, May 19, 2007

Countdown | Barcelona

I'm so exited! Finally I'm goin' to c the beach in a few hours! Rock'n'Roll!!!


From Misc


From Misc


Who is jealous? Yeah, you should be!

Cheers

A good one ...

... Java vs Ruby ;o) ... Hilarious, check it out:



Cheers

Friday, May 18, 2007

Wednesday, May 16, 2007

Subversion | Important Stuff

In diesem Post möchte ich einige Dinge, die mir bezüglich Subversion wichtig sind, zusammenfassen. Ich habe bereits einmal die Unterschiede zwischen CVS und Subversion aufgezählt und möchte auf diesen Post hier noch einmal verweisen. CVS vs. Subversion

Und los gehts:

Parallele Änderungen an Dateien:
  • Subversion verwendet den Check-out nur zur Erstellung der Arbeitskopien und man muss Dateien mit einem separaten Lock-Befehl sperren.
  • Sobald eine Datei im Repository gesperrt ist, werden weiter Lock-Befehle mit einer Fehlermeldung quittiert.
  • Die Freigabe erfolgt entweder mit einem separaten Befehl (Unlock) oder beim Check-in.
  • Subversion beherrscht seit Version 1.2 sowohl Copy-Modify-Merge als auch Lock-Modify-Unlock, man kann hier also pro Konfigurationselement entscheiden, welche Methode besser geeignet ist.

Tags und Baselines

  • Vor einem Refactoring sollte der Zustand eines Projekts festgehalten werden. (Snapshot)
  • Im technischen Sinn, gibt es keine Unterschiede zwischen Tags und Baselines.
  • Subversion kennt keine separaten Befehle zur Erstellung von Tags oder Baselines im Repository.
  • Releases zeichnen sich dadurch ab, dass die Anwender damit arbeiten.

Branches

  • Unter einem Peer-Review versteht man die Kontrolle einer Änderung durch einen sachkundigen Gutachter.
  • Bei Branches handelt es sich um verzweigte oder parallele Entwicklungspfade.
  • Branches sind eine Alternative zu einem linearen Entwicklungspfad.
  • Nachteile eines linearen Entwicklungspfades sind die schlechte Ausnutzung der Ressourcen im Projekt und die nicht vorhandene Abdeckung des Zeitraumes nach Erstellung eienr Baseline. Dadurch ist es nicht möglich, kritische Bug-Fixes für ein produktives Release separat auszuliefern, da im Entwicklungspfad ja schon die erweiterte Funktionalität des Folge-Releases implementiert wird.
  • Irgendwann müssen alle im Release-Brunch durchgeführten Änderungen und Bug-Fixes auch in den Trunk übernommen werden. Die beiden Brunches werden also wieder zusammengeführt.

Änderungsmanagement

  • Ein guter Aufsetzpunkt für das Änderungsmanagement ist die erste Baseline im Projekt.

Releasemanagement

  • Zu bevorzugen sind Releases, die funktionale Erweiterungen auf der Ebene von Subsystemen bündeln. Jedes Release ändert dadurch schwerpunktmässig nur einen bestimmten Teil des Systems.
  • Wird ein System komplett neu entwickelt, bilden statt Change Requests beispielsweise die umzusetzenden Use Cases die Grundlage für die Release-Planung.
  • Release-Nummern: Release x.y.z ==> X = Hauptrelease, Y = Wartungsrelease, Z = Patch
  • Hauptrelease: Änderungen an verwendeten Dateiformaten, grundsätzliche Überarbeitung der Benutzeroberfläche, komplett neue Subsysteme oder Komponenten, ...
  • Wartungsrelease: Fehlerbehebungen, funktionale Erweiterungen mit nur geringen oder keinen Auswirkungen auf den Betrieb des System, ...
  • Patches: sollten im Normalfall nicht notwendig sein, ausschließlich zur Fehlerbehebung, Procedere zur Auslieferung eines Patches sollte genau dokumentiert sein da diese oft sehr unerwartet bzw. schnell implementiert werden müssen.

Audits, Metriken und Berichte

  • Mit Hilfe von Audits wird in einem KM-Prozess überprüft, ob die KM-Elemente alle an sie gestellten Anforderungen erfüllen.
  • Audits vergleichen den Istzustand mit einem vorher festgelegten Sollzustand.
  • Pro Audit werden Teilnehmerkreis, der Zeitpunkt und das genau Ziel festgehalten.
  • Metriken erlauben differenziertere Aussagen über die Qualität des Systems und den Status des Projektes als Audits, da diese im Prinzip nur boolesche Ergebnisse liefern.
  • Es gibt: Produkt~, Projekt~ und Prozessmetriken
  • Geziehlte Auswahl von Metriken nach dem GQM-Verfahren (Goal-Question-Metric) am Anfang des Projekts.
  • Ausführliche Dokumentation der verwendeten Metriken und Schwellenwerte im KM-Handbuch.
  • Metricen liefern nur Hinweise auf mögliche Probleme. Wenn ein Schwellenwert verletzt wird, sollte man ein Quelltext-Audit ansetzen um sich ein genaues Bild von der Lage zu verschaffen. Keinesfalls einfch die "Behebung des Fehlers" fordern.

Subversion

  • Subversion erfüllt ACID. (Atomicity, Consistency, Isolation und Durability)
  • Sowohl die Server- als auch die Clientkomponenten von Subversion wurde in C auf Basis der Apache Portable Runtime (APR) entwickelt, einer Bibliothek zur Unterstützung der plattformunabhängigen Entwicklung.
  • Der Subversion-Client ist nicht auf eine ständige Verbindung zum Repository angewiesen. So kann man beispielsweise im Zug oder Flugzeug problemlos Änderungen an den Dateien im lokalen Arbeitsbereich vornehmen. Auch komplexerer Operationen, wie z.B. die Rücknahme von Änderungen an einer Datei im Arbeitsbereich, werden vorm Client offline durchgeführt. Ermöglicht wird dies durch einen lokalen Cache des Clients, in dem die letzten gültigen Versionen der Dateien aus dem Repository vorgehalten werden.

Arbeitsweise des Subversion Repositories

  • Wichtigstes Konzept von Subversion: Revision.
  • Subversion vergibt für jede Transaktion, die ins Repository geschrieben wird, eine sequenziell hoch gezählte Revisionsnummer.
  • Die Revision kennzeichnet alle im Rahmen der Transaktion geänderten Dateien und Verzeichnisse. Diese Menge der Änderungen wird auch als Changeset der Revision x bezeichniet.
  • Weiters markiert die Revision einen bestimmten Stand des gesamten Repositorys, man spricht dann von einem Repository in Revision x.

Erstellung eines Repositories

Benutzer und Zugriffsrechte

  • Subversion erzeugt Repositories standardmässig völlig ungeschützt.
  • Sicherheitseinstellungen für ein Repository werden über die Datei svnserve.conf festgelegt. Diese Datei befindet sich im conf-Verzeichnis des Repositorys.
  • Nach dem Anlegen eines neuen Repositories enthält diese Datei nur auskommentierte Zeilen.
  • svnserve beherrscht nur einen sehr einfachachen Authentifizierungsmechanismus und bedeutet, dass die users.conf Datei sowohl Usernamen als auch Passwörter in Klartext enthält.
  • access.conf: Zugriffsrechte auf das Repository pro User und abhängig von der Projektstruktur.
  • Berechtigungen in der access.conf werden an Unterverzeichnisse vererbt. Z.B. [/] Dies bedeutet oberste Ebene und spricht das komplette Repository an.

Auf der folgenden Abbildung kann man eine erste Konfiguration meines Beispiel-Repositories erkennen. Es werden die svnserve.conf, die access.conf und die users.conf dargestellt.

From Misc

  • Als Berechtigungen kann entweder ein r (lesender Zugriff), rw (lesenser und schreibender Zugriff) oder ein Leerzeichen (kein Zugriff) eingetragen werden.

Zugriff auf das Repository

  • Starten des Subversion-Servers svnserve: svnserve -d -r d:\path\to\repository
  • Zugriff auf das Repository über den SVN-Client svn: svn list svn://YOUR_ADDRESS/repo

Notiz: In meinem Fall sieht die Ordnerstruktur so aus, dass ich auf meinem D-Laufwerk ein Verzeichnis svn-repos angelegt habe, und in diesem hab ich eine test-repo mittels svnadmin angelegt. Um nun auf dieses zugreifen zu können, muss man svnserve -d -r svn-repos aufrufen und nicht das test-repo selbst.

  • Die Angabe des Repositories im Anschluss auf das svn://HOSTNAME/ bezieht sich auf das beim Start von svnserve angegebene Basisverzeichnis.

Tags und Branches

  • Bezeichnungstemplates für Branches und Tags Buch Seite 94.
  • Tags sind unveränderlich, Branches stellen echte Projektverzweigungen dar und können mit trunk zusammengeführt werden.
  • Tags nur lesend für Developer zugreifbar machen. (access.conf)

Subversion Properties am Client

  • Geltungsbereich entweder einzelne Datei aber auch komplettes Verzeichnis.
  • Properties wirken jedoch nicht rekursiv, d.h. sie müssen Unterverzeichnissen explizit zugewiesen werden.
  • WIchtige Properties: svn:mime-type, svn:eol-style, svn:needs-lock
  • svn:mime-type: Unterscheidung zwischen Textdateien und Binärdateien für Subversion. Wird mime-type nicht explizit gesetzt, verwendet Subversion für binäre Dateien standardmässig application/octet-stream. Textdateien erhalten per Default keinen MIME-Typ.
  • svn:eol-style: Umgang von Subversion mit Zeilenendmarkierungen von Textdateien. Sinnvoll meißtens die Einstellung native, da Subversion in diesem Fall die Zeilenendmarkierung automatisch an die Bedürfnisse des verwendeten Betriebssystems anpasst.
  • svn:needs-lock: Steuert welche Dateien zwingend mit dem Lock-Modify-Unloc-Ansatz bearbeitet werden müssen. Dieses Property besitzt keinen Wert, die alleinige Zuweisung zu einer Datei ist ausreichend.
  • svn propset: Setzen einer Property für eine Datei mittels svn-Client.
  • svn propdel: Löschen einer Property mittels svn-Client.
  • Lokale Konfigurationsdatei: Referenz

Die folgende Abbildung zeigt eine Beispiel-Config Datei meiner Subversion-Konfigurationsdatei am Client:

From Misc

Anlegen der Struktur im Repository

  • In einem temporären Verzeichnis die Struktur anlegen und gleiche Verzeichnis folgendes Kommando aufrufen:
  • svn import svn://localhost/name_des_repositorys -m "Import der Projektstruktur" --username UN --password PW
  • Das Änderungskommentar wird in der Versionshistorie der von den Änderungen betroffenen Verzeichnisse und Dateien hinterlegt.
  • TODO

Saturday, May 12, 2007

BBQ @ Wood-Quarter ;o)

... some new pix from the last easter-weekend. Hmmm... it was BBQ-time and the weather was also perfect. A great w/e with my family and here are the pix:


From Easter Weekend


From Easter Weekend


From Easter Weekend


From Easter Weekend


From Easter Weekend


Cheers

Wednesday, May 09, 2007

Artifactory Dependency Viewer

Here are some nice digrams of my bookstore dependencies. Your able to see all direct and all transetive dependencies. You just need to use Artifactory as your Maven-Proxy and then you can get the Dependency Viewer which generates those cind of diagrams. Very nice!

From Misc

And now with all test-dependencies turned on (only junit ;o):


From Misc

You're also able to customize the diagram by dragging the dependencies where you want to have them. You just have to pass the pom-file of the project of which you want the dep-viewer to generate the diagram.

Try it out!

Cheers

Tuesday, May 08, 2007

SMSn 4 F-R-E-E

Yeah, I found a website which allows you to send free sms. You just have to register your mobile-number and then you can start sending free sms. There's also a sidebar-gadget for Windows Vista... That R-O-C-K-S!
From Misc

Have fun sms-ing!

Cheers

Stalker How-To ...

... check out the new 'Karte & Route' functionality of Herold!!!

Check out the pictures of ma hood:
From Herold

... and ma old hood ...
From Herold

... ma court at Steady ...
From Herold

... and my office:
From Herold

Cheers

Valid, Valid, Valid

As I wrote in my last post about my lil xml-project at university and that I've learned something new about namespaces and xsd-files: you can change the prefix in an xml-instance of a xsd-file and the xml-instance still stays valid. Check the following code-snippets:

First the XSD:

From Misc


And here is the XML-Instance with the same prefix as in the XSD ...

From Misc


... and here after I've changed the prefix:

From Misc


So the 'tutor' at university was right and I really have learned something new... yeah!

Keep coding ... Cheers

Monday, May 07, 2007

How to integrate Namespaces...

... into a Document Type Definition.

Because of one lecture at University (Semistrukturierte Daten) I had to implement some very easy XML-Stuff. One thing I couldn't remember was how to integrate a Namespace-Definition in a DTD. Of course I know that if you define a Präfix and an URI for a Namespace in a DTD essentially means to just define a new name for the element which you would like to have in a corresponding XML-Instance of your DTD. Checkout the following code-snipped:

From Misc

Also you must declare the Präfix (in my case 'dbai') for all Elements which also should use this Namespace in your XML-Instance. The bottom line is that I received all points for the exercise (I'd like to show off ;o) and that I would prefer more of such easy university-projects.

Ahh ... One thing I've learned and I still have to check out is that if you declare a Namespace in a XSD und you change the präfix of the Namespace in you XML-Instance the XML-File still must be valid. Hmmm.. we'll see!

So long...

Friday, May 04, 2007

Buzzword-Attack

In this post I'd like to show off with some new buzzwords. Have you already heard about WPF or WPF/E or even Silverlight? Have you ever read the phrase"I'm a Java-Developer, now I think in Adobe Flex 2"? What a pitty, you really should have. Of course you heard something about AJAX and the Web 2.0 and all the cool possibilities you have with those new "old" technologies to implement new RIA's.

Have you ever heard about Expression Blend or Expression Design or the Adobe Flex Builder based on the Eclipse Rich-Client Platform? And again, you should have. I don't really want to explain all this new amazing technologies but you should check out the following websites:



From Misc


From Misc


From Misc


From Misc


From Misc


Have fun coding!!