Upload
adalheidis-reffner
View
112
Download
0
Embed Size (px)
Citation preview
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Idee
▪ Elektronische Kommunikation wissenschaftlicher Ergebnisse
▪ schneller, kostengünstig und transparent Zugang zu wissenschaftlichen Produkten
▪ Profile
▪ Publikationen
▪ Projekte
▪ Verbesserung und Optimierung Wissenstransfer
▪ Zentraler Zugangspunkt
▪ ?Wettbewerbssteigerung
Zeitraum und Organisation
▪ Start Januar 2004
▪ Anforderungsaufnahme und Konzeptionsphase von Januar bis Juni 2004 unter Einbeziehung und monatlichen Treffs mit Verantwortlichen der Institute
▪ Implementation von Juni 2005 bis April 2005
▪ Datenvorerfassung parallel noch während Implementation im November 2004
▪ Leitungsausschuss mit Einbindung unterschiedlicher Institutionen wie Rektorat, Forschungskommission und Bibliothek
▪ Mehr als 30 Institute mit ca. 400 aktuellen Forschern
▪ Durchführung: 2 wissenschaftliche Mitarbeiter
▪ 1 Mitarbeiter für Projektkoordination und Betreuung▪ 1 Mitarbeiter für Implemtierung
Anforderung
▪ Integration relevanter bereits bestehender Datenbanken auf Lotus Notes Basis
▪ Import aus unterschiedlichen Quellen (Word, Lotus Notes, Exel usw.)
▪ Export Funktion zurück in Lotus Notes basiertes „Content Management Framework“
▪ Integration in bestehende Webseiten
▪ Darstellungsunabhängige Bereitstellung
▪ Export in Bibliothekssysteme
▪ Anbindung an bestehendes Lotus Notes Authentifizierungssystem auf Basis eines LDAP Baums
▪ Distribution in weitere Systeme (Sidos usw.)
Anforderung
▪ Funktions- bzw. Datenumfang
▪ Forscherprofile
▪ Publikationsdatenbank
▪ Projektdatenbank
▪ Unterschiedliche Auswertungsmechanismen
▪ Schnelle Variationen und Veränderungen der Formularfelder und Datenbankstruktur aufgrund der Organistationstruktur des Projektes
Anforderung
▪ Verknüpfung der Forscherprofile, Projekte und Publikationen (Relationen erstellen)
▪ Gruppierung von Personen (virtuelle Zusammenarbeit an Publikationen oder Projekten)
▪ Rechteproblematik (Urheberrechtsaspekte usw.)
▪ Sehr detaillierte und spezifische Suchmöglichkeiten über die Metadaten (Bibliographische Daten)
▪ Volltextsuche über Dokumente wurde nicht als dringend notwendig erachtet
▪ Mehrsprachigkeit
Gestaltungs- und Informationsdesign
▪ Informationsreduzierung
▪ Design in Zusammenarbeit mit Universität der Künste entstanden
▪ Dreifache Clusterung der Navigation
▪ Bedardsbezogen
▪ Kontextuell
▪ […]
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Plattformarchitektur // Komponenten
▪ PHP5
▪ Start mit 5.0.0
▪ Aktuell 5.0.4
▪ MySQL als Datenbank
▪ Start mit 4.1.x
▪ Aktuell 5.0.5dev mit XPath Patch
▪ Gettext (Mehrsprachigkeit)
▪ Pear::Translation2 mit Gettext Erweiterung
▪ Smarty als Template Engine
▪ LiveUser als Security Framework
▪ Noch auf Liveuser 0.13.3 (ausgekoppelt aus Pear Tree wegen Anpassungen)
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Design Patterns // Code Structure
▪ geplant als Open Source Projekt
▪ Veröffentlichung als LGPL Code in den nächsten Wochen
▪ Wichtig Code Struktur und Dokumentation
▪ PEAR Klassen als Richtlinie + PHPDOC
▪ http://pear.php.net/manual/en/standards.sample.php (+)
▪ http://manual.phpdoc.org/ (+)
▪ http://cvs.sourceforge.net/viewcvs.py/wikipedia/phase3/includes/SpecialSearch.php?view=markup (-) < NO GO!
Design Patterns // DESIGN
▪ Horde Framework
▪ http://www.horde.org/papers/
▪ DESIGN: „What does designing NOT mean?“ [2]
▪ Making everything a class.▪ Using UML.▪ Having a complete API before starting to code.▪ Using classes at all.
▪ DESIGN: „What DOES it mean?“ [2]
▪ Having a plan for an API, and considering everything that it affects, before starting to code each component of an application.
▪ Writing organized, consistent code.▪ Being aware of code duplication, and being willing to
refactor as you go.▪ Being wary of the easy path.
Design Patterns // Factory & Singleton
// Call Factory $instance = ClassName::factory(“mysql“);
/** * Create a new DB connection object for the specified database * type * * @param string $type database type, for example "mysql" * * @return mixed a newly created DB object, or a DB error code on * error * * access public */ static function factory($type) { include_once("DB/${type}.php");
$classname = "DB_${type}";
if (!class_exists($classname)) { return PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null, null, 'DB_Error', true); }
$obj = new $classname;
return $obj; }
Design Patterns // Whats new about PHP5?
▪ Neues Object Modell [3]
▪ kein „&“ mehr notwendig um Referenz auf Objekten zu erzeugen (nun Default)
▪ explicit object cloning (clone $object)
▪ public, private & protected access modifiers
▪ Unified constructor name __construct()
▪ Object destructor support by defining a __destructor()
▪ Interfaces
▪ „Final“ methods and classes
▪ Static members and functions (Singleton & Factory)
▪ Exception handling (try - catch)
Design Patterns // Whats new about PHP5?
▪ Neue Funktionen e.g. http_build_query()
▪ SimpleXML
▪ LIBXML2 + UTF8 jetzt als Default vorher EXPAT
▪ Siehe Thread: http://bugs.php.net/bug.php?id=29711
▪ SOAP
▪ Neue Zend Engine (schnelle & stabiler)
▪ Wikipedia Erweiterung (!)
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Sicherheitskonzept (=pear::liveuser)
▪ Umsetzung mit Pear::LiveUser [1]
▪ http://pear.limbourg.com
▪ Authentifizierung gegen multiple Quelle (auch zusammen verwendbar)
▪ LDAP
▪ IMAP / POP3
▪ XML
▪ DB
▪ Permission Layer – Zugriffsteuerung auf einzelne Module der Plattform
▪ Simple Permissions (e.g. Rights To User)
▪ Medium Permissions (e.g. +Groups & +Area Admins)
▪ Complex Permissions (e.g. +Subgroups, Rights Level & Inheritance)
Sicherheitskonzept (=pear::liveuser)
▪ Anbindung an Lotus Notes LDAP Baum mit mehr als 4000 Accounts
O=UNISG, C=CH
OU=MCM OU=IWI
CN=
Max Muster2
CN=
Max Muster1
CN=
Max Muster3
CN=
Max Muster4
Attr B
Attr A
Attr B
Attr A
Sicherheitskonzept (=pear::liveuser)
▪ Stufenmodell für Authentifizierung
Anmeldung
Publikationen Projekte Profile
LiveUser DB / LDAP BACKEND
Versuch der Anmeldung Prüfen gegen DB Interface
Erfolgreiche AnmeldungGescheitert gegen DB
Prüfen gegen LDAP
Erfolgreiche Anmeldung ggf. Update PasswortGescheitert gegen LDAP
Sicherheitskonzept (=pear::liveuser)
▪ Vierstufiges Sichermodel (KISS!!!)
LDAP
Universität
Institut
Person
Content Object
PEA
R::
LiveU
ser
Publikationen Projekte Profile
Module
Sicherheitskonzept // ContentObjects
Owner-Status
Edit Rights View Rights
Content Objects
vergibt vergibt
vergibt
sehensehen ändern
sehen ändern löschen
vergib
t
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Datenbankmodell // Basisstruktur
MySQL
Content Object Publikationen Projekte Profile
Parser
XMLDocument
XMLDocument
XMLDocument
Pear::Quickform
Transforming XML Elements to Quickform Elements
Creating Formulare
Smarty Display Formular
Dateneingabe
ParserMatching Input Data against XML File and Cleanup e.g.
hidden or not used Fields
Datenbankmodell // XML Dokument
<?xml version="1.0"?><document>
<element><name>type</name><id>type</id><type>select</type><options>
<option value="article">article</option><option value="book">book</option></options>
</element><element>
<name>publication-details</name><id>publication-details</id><type>hidden</type><value>submit</value>
</element><element>
<name>language</name><type>language</type>
</element>…..
</document>
Datenbankmodell // XML in Datenbank
<?xml version="1.0" encoding="ISO-8859-1"?><contentObject _type="array">
<type _type="string">book</type> <language _type="string">de</language> <title _type="string">Erfolgreiches Benchmarking in Forschung und
Entwicklung</title> <publisher _type="string">Verlag Carl Hanser</publisher> <location_of_publisher _type="string">München, Wein</location_of_publisher> <series_title _type="string" /> <series_number _type="string" /> <pages _type="string" /> <volume _type="string" /> <date_of_publishing _type="array">
<Y _type="string">2002</Y> </date_of_publishing> <ISBN_number _type="string" /> <review _type="string">0</review> <project _type="string">none</project> <classification _type="string">1</classification> <research_area _type="string">0</research_area> <keywords _type="string" /> <abstract _type="string" />
….</contentObject>
Datenbankmodell // Dublin Core
▪ Dublin Core noch nicht implementiert
▪ Web Services sollen jedoch Dublin Core XML Format liefern
<?xml version="1.0"?>
<metadata xmlns="http://example.org/myapp/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://example.org/myapp/ http://example.org/myapp/schema.xsd"xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>UKOLN</dc:title><dc:description>UKOLN is a national focus of expertise in digital information
management. It provides policy, research and awareness servicesto the UK library, information and cultural heritage communities.UKOLN is based at the University of Bath.
</dc:description><dc:publisher>UKOLN, University of Bath</dc:publisher><dc:identifier>http://www.ukoln.ac.uk/</dc:identifier>…
</metadata>
Datenbankmodell // Datenbankstruktur
▪ Normales Text Feld (z.B. Longtext)
XML Data Field (Fulltext)
Datenbankmodell // XPath Queries
▪ Einfache Datenabfrage mittels extractValue(xml, xpath) [5]
mysql> SELECT co_object_data FROM cO_publications;+--------------------------------------------+| co_object_data |+--------------------------------------------+|<?xml version="1.0" encoding="ISO-8859-1"?> ||<conte... |+--------------------------------------------+
mysql> SELECT extractValue(co_object_data,’/contentObject/title’) FROM cO_publications;+-------------------------------------------------------+| extractValue(co_object_data,’/contentObject/title’) |+-------------------------------------------------------+|Erfolgreiches Benchmarking in Forschung und Entwicklung|+-------------------------------------------------------+
Datenbankmodell // XPath Queries
▪ Schnelle Datenabfrage mittels Nutzung des „Match“ Operators [and match (xml) against (‘Benchmarking')]
▪ Auch komplexere Abfrage möglich nach Index, Attribut, Value oder Boolean Match
mysql> SELECT extractValue(co_object_data,’/contentObject/title’) as title FROM cO_publications and match (co_object_data) against (‘Benchmarking');+-------------------------------------------------------+| title |+-------------------------------------------------------+|Erfolgreiches Benchmarking in Forschung und Entwicklung|+-------------------------------------------------------+
Datenbankmodell // XPath Queries
▪ Update von XML Teilen im Dokument möglich mit updateXML(xml, xpath, value)
mysql> select updateXML(co_object_data,'/contentObject/title', '<title_new>Neuer titel</title_new>') as title;+-------------------------------------------------------+| title |+-------------------------------------------------------+|<contentObject><title_new>ein neuer titel</title_new>…</contentObject> |+-------------------------------------------------------+
Datenbankmodell // Towards MySQL 5.1
▪ 100% XPath Standard Implementierung [5]
▪ ExistsNode() -> Boolean Check
▪ Fulltext Optimized für XML
▪ Special XML data type (Data Integrity!!!) + Compression (!)
▪ “Automatic invocation of FULLTEXT searches from inside ExtractValue() and ExistsNode() without having to use explicit MATCH operator”
▪ Stored Procedures + XPath = :-O▪ Performance▪ Einfacheres Handling – Wrapper auf Datenbankbasis und
nicht als Middleware?
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Features // WS - ImageMagick
▪ Wikipedia Integration via PHP5 Webservices Schnittstelle
▪ Amazon Integration bei Büchern mit ISBN Nummer
▪ Google Suggestion Check
▪ Image Rendering der Photos für einheitliches Design mittels ImageMagick Farbverschiebung + Skalierung (Zuschneiden) in Graustufendesign
Wanderpfad
▪ Idee der Plattform
▪ Zeitraum und Organisation
▪ Anforderungen
▪ Gestaltungs- und Informationsdesign
▪ Plattformarchitektur
▪ Design Patterns (=PHP)
▪ Sicherheitskonzept (=pear::LiveUser)
▪ Datenbankmodell (=MySQL)
▪ Features (=WebServices)
▪ Weiterentwicklungen
Weiterentwicklungen
▪ Integration Dublin Core Meta Data Standard [4]
▪ Amazon nutzen um fehlende Bücherdaten zu replizieren
▪ Web Services Schnittstelle mit Dublin Core ▪ Freier Zugang für Öffentlichkeit an Schnittstelle (Google &
Amazon Modell)
▪ Automatisch PDF Generierung von Forscherprofil + Publikationsverzeichnis + Projektverzeichnis mit Verlinkung auf Alexandria
▪ Diverse Exports und Statistische Auswertung
▪ Search Engine Friendly Optimization (mod_rewrite):// Danke Hannes ;-)
▪ Integration XPath Update Befehl
Thomas Nicolai{thomas dot nicolai} at {unisg dot ch}
Institut für Medien und Kommunikationsmanagement Universität St.GallenBlumenbergplatz 99000 St.GallenSwitzerland
http://www.mcm.unisg.ch
Kontakt
Referenzen
▪ [1] Pear::Liveuser▪ http://php-mag.net/itr/online_artikel/show.php3?nodeid=114&id=595
▪ http://www.backendmedia.com/LiveUser/LiveUser-Dateien/v3_document.htm
▪ [2] Horde Framework▪ http://www.horde.org/papers/kongress2002-design_patterns/
▪ [3] PHP5 Zend News▪ http://www.zend.com/php5/articles/engine2-php5-changes.php
▪ http://www.zend.com/php5/articles/engine2-php-oo.php
▪ [4] Dublin Core Meta Data Standard▪ http://www.dublincore.org
▪ [5] Alexander Barkov@MySQL XPath Patch▪ http://mysql.r18.ru/~bar/myxml/XMLXpathSupportInMySQL.pdf
▪ http://mysql.r18.ru/~bar/myxml/mysql-xml.tar.gz
Referenzen
▪ [6] MySQL XPath Installationsanleitung▪ http://lists.mysql.com/mysql/184167
▪ [7] Gadgetopia Diskussion über MySQL + XPath▪ http://www.gadgetopia.com/2004/07/13/DataGlobbingWithMySQLRegex.html