Τεχνολογικά θέματα υποδομών ηλεκτρονικού εμπορίου
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Ανάπτυξη εφαρμογών Internet
Η δομή του Internet
Εφαρμογή
Το επίπεδο εφαρμογής στο Internet καλύπτει τα επίπεδα
εφαρμογής και παρουσίασης του OSI.
Τα πιο συχνά πρωτόκολλα που χρησιμοποιούνται από τους
χρήστες είναι:
- HTTP/HTML
- πρόσβαση στο Web
- FTP
- μεταφορά αρχείων
- SMTP
- μεταφορά email
- POP/IMAP
- ανάγνωση email
- Telnet
- χρήση από απόσταση
Μια σειρά από πρωτόκολλα στο επίπεδο αυτό υποστηρίζουν τη λειτουργία και
τη διαχείριση του δικτύου:
- DNS
- Κατανεμημένος κατάλογος ονομάτων
- SNMP
- Διαχείριση από απόσταση
- BOOTP
- Αρχικό φόρτωμα κώδικα
- RARP
- Αντίστροφη μετατροπή διευθύνσεων
Μεταφορά
Στο επίπεδο της μεταφοράς χρησιμοποιούνται δύο πρωτόκολλα:
- TCP
- Transmission Control Protocol
- UDP
- User Datagram Protoco
Δίκτυο
Στο επίπεδο του δικτύου το Internet Protocol (IP) μαζί με το
Internet Control Message Protocol εξασφαλίζουν τη μεταφορά δεδομένων
από τον αποστολέα στον παραλήπτη.
Το παρακάτω σχήμα παριστάνει τη σχέση ανάμεσα στα διάφορα πρωτόκολλα
του internet:
Αρχιτεκτονική του παγκόσμιου ιστού
- Ο παγκόσμιος ιστός (world wide web)
είναι υλοποιημένες σύμφωνα με το μοντέλο
πελάτη-υπηρέτη (client-server).
- Υπηρέτες ακούν για εντολές του πρωτοκόλλου HTTP
στη θύρα TCP 80 και απαντούν ανάλογα με το περιεχόμενο της εντολής.
- Οι απαντήσεις είναι συνήθως υπερκείμενο (hypertext)
δομημένο σύμφωνα με το πρότυπο HTML.
- Παραπομπές σε άλλες σελίδες ή περιεχόμενο γίνονται με την
τυποποιημένη χρήση των Uniform Resource Locators (URL).
- Τόσο ο πελάτης, όσο και ο υπηρέτης μπορούν να προσαρμόσουν
δυναμικά το περιεχόμενο μιας σελίδας.
Προσδιορισμός στοιχείων με URI
Ο προσδιορισμός στοιχείων στο πρωτόκολλο HTTP
γίνεται με τη χρήση των Uniform Resource Identifiers.
Η χρήση τους επιτρέπει τον προσδιορισμό άλλων σελίδων τοπικά, σε άλλα
μηχανήματα, καθώς και ερωτήσεων:
http://www.spinellis.gr
http://www.altavista.com/cgi-bin/query?pg=q&text=yes&q=link%3akerkis%2emath%2eaegean%2egr%2f%7edspin+%2dhost%3akerkis%2emath%2eaegean%2egr&stq=10&c9k
Το πρωτόκολλο HTTP
Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
Παράδειγμα:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Περιγραφή σελίδων με HTML
H HTML είναι μια εφαρμογή της SGML για την περιγραφή σελίδων στο Web.
Περιοχές του κειμένου σημειώνονται με ετικέτες (tags).
Κάθε ετικέτα περιλαμβάνει το όνομά της και παραμέτρους.
Οι ετικέτες γράφονται ως εξής:
<όνομα ετικέτας παράμετροι>
Μια περιοχή του κειμένου μπορεί να σημειωθεί ως εξής:
<ετικέτα>
περιοχή που σημειώνεται
</ετικέτα>
Βασικές ετικέτες που υποστηρίζει η HTML είναι οι παρακάτω:
- HTML
- περιγραφή ολόκληρης σελίδας
- HEAD
- επικεφαλίδα της σελίδας
- BODY
- κείμενο της σελίδας
- H1-H6
- επικεφαλίδες του κειμένου
- P
- αλλαγή παραγράφου
- UL
- λίστα με τελείες
- OL
- αριθμημένη λίστας
- LI
- στοιχείο λίστας
- BR
- αλλαγή γραμμής
- HR
- οριζόντια γραμμή
- IMG
- εικόνα
- A
- (anchor) σημείο πρόσβασης από ή σε υπερκείμενο
- PRE
- προστοιχειοθετημένο κείμενο
- DL, DT, DD
- λίστα περιγραφών, περιγραφές
- I
- πλάγιοι χαρακτήρες
- B
- έντονοι χαρακτήρες
Παράδειγμα σελίδας:
<!doctype html public "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<TITLE>Τίτλος της σελίδας</title>
<META NAME="GENERATOR" CONTENT="thread.pl">
<META NAME="AUTHOR" CONTENT="Diomidis Spinellis">
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-7">
<LINK REV="made" HREF="mailto:dds@aueb.gr">
<LINK REL="ToC" href="./web/index.htm">
<LINK REV="Subdocument" href="./web/index.htm">
<LINK REL="previous" href="./web/http.htm">
<LINK REL="next" href="./web/cgi.htm">
</HEAD>
<BODY>
<H1>Επικεφαλίδα πρώτου επιπέδου</H1><HR>
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
<a name="G42"> (<em>με έντονο κείμενο</em>)</a>
και μια λίστα:
<ul>
<li> στοιχείο 1
<li> στοιχείο 2
</ul>
<p>
Νέα παράγραφος με ένωση υπερκειμένου στο
<A HREF="http://www.aueb.gr">Οικονομικό Πανεπιστήμιο</A>
<HR>
</BODY>
</HTML>
Αυτή θα εμφανιστεί ως εξής:
Επικεφαλίδα πρώτου επιπέδου
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
(με έντονο κείμενο)
και μια λίστα:
Νέα παράγραφος με ένωση υπερκειμένου στο
Οικονομικό Πανεπιστήμιο (http://www.aueb.gr)
Χαρακτηριστικά της Java
Κατηγορίες ενεργού περιεχομένου
- Ενεργό περιεχόμενο στον πελάτη
- Ενεργό περιεχόμενο στον εξυπηρετητή
- Υβριδικό μοντέλο
Ενεργό περιεχόμενο στον πελάτη
- Animated GIF files, sound files, movies, ALT tags
- Javascript και DOM
- Macromedia Flash
- Java applets
- Active-X
Επικοινωνία πελάτη εξυπηρετητή
- Εφαρμογές που ακολουθούν το μοντέλο του Web
- Εφαρμογές που χρησιμοποιούν πρωτόκολλο HTTP
- Εφαρμογές που χρησιμοποιούν το πρωτόκολλο TCP/IP
Τρόποι υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή
- Εκτέλεση ανά αίτηση
- Δεξαμενή με διεργασίες ή νήματα
- Χρήση προτύπων σελίδων
- Επεκτάσεις του Web Server
Τεχνολογίες υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή
- Εκτέλεση ανά αίτηση: CGI
- Δεξαμενή με διεργασίες ή νήματα:
- Χρήση προτύπων σελίδων:
- Microsoft Active Server Pages (ASP),
- Sun Java Server Pages (JSP)
- Hypertext Pre-Processor (PHP)
- Επεκτάσεις του Web Server
- NSAPI (Netscape FastTrack)
- ISAPI (Microsoft IIS)
- Apache extension API (mod_*)
Η τεχνολογία CGI
Υλοποίηση
Προβλήματα
- Απόδοση
- Ανίχνευση συνεδρίας
- Στενή σύνδεση της επεξεργασίας με την εμφάνιση
Η τεχνολογία Fast CGI
Υλοποίηση στον εξυπηρετητή
- Μοναδική εκκίνηση
- Mini application server
- FIFO queue
Προβλήματα
- Εργαλεία ανάπτυξης
- Ειδικές βιβλιοθήκες για ανίχνευση συνεδρίας (session afinity)
Παράδειγμα
#!/usr/bin/perl
#load the necessary modules
use Pg;
use CGI qw/:standard/;
use CGI::Fast;
#connect to the database
$conn = Pg::connectdb("dbname=comments host=193.250.160.3\
user=george password=george");
die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
#Create a new FastCGI object
#This is the main program loop
while(new CGI::Fast){
$name=param("name");
$email=param("email");
$comments=param("comments");
#insert the record to the database
$query="insert into comments values('".$name."','".$email.\
"','".$comments."')";
$result=$conn->exec($query);
die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
print "All done OK";
}
#close the connection
$conn->requestCancel;
Η τεχνολογία Servlets
Υλοποίηση
- Java
- Ένα νήμα ανά αίτηση
- Servlet container (JVM + κλάσεις υποστήριξης)
Πλεονεκτήματα
- Κάλυψη συνεδρίας μέσω καθολικών αντικειμένων
- Πρόσβαση σε όλες τις βιβλιοθήκες της Java (JDBC, XML, XSLT, cookies)
- Java Server Pages - Jasper JSP pre-compiler
- Μεταφερσιμότητα
Υποστήριξη
- Tomcat (apache)
- iPlanet
- WebSphere
Παράδειγμα
import java.io.*;
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class comments extends HttpServlet {
Connection con=null;
//This is executed only once during servlet loading
public void init(ServletConfig config) throws ServletException{
super.init(config);
try {
Class.forName("org.postgresql.Driver");
con=DriverManager.getConnection("jdbc:postgresql:comments",
"george","george");
}
catch (ClassNotFoundException e) {
System.out.println("No such class:"+e.getMessage());
}
catch (SQLException s) {
System.out.println("Connection error"+s.getMessage());
}
}
//The function that handles POST requests
public void doPost (HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException{
//Get input parameters
String name=req.getParameter("name");
String email=req.getParameter("email");
String comments=req.getParameter("comments");
PrintWriter out=res.getWriter();
res.setContentType("text/html");
//Insert the record into the database
try {
Statement stmt=con.createStatement();
stmt.execute("INSERT INTO comments values('"+name+"','"+email+
"','"+comments+"')");
out.println("All done ok");
}
catch (SQLException s) {
out.println("Connection error"+s.getMessage());
}
finally {
out.println("</BODY></HTML>");
}
}
//GET and POST requests are handled in the same way
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException{
doPost (req,res);
}
//Only called when the servlet is unloaded
public void destroy() {
try {
con.close();
}
catch (SQLException s) {
System.out.println("Connection error"+s.getMessage());
}
}
Η τεχνολογία PHP
Παρόμοια αυστήματα
Χαρακτηριστικά PHP
- Σελίδες που περιέχουν HTML και κώδικα PHP
- Η γλώσσα περιέχει στοιχεία από την Perl και τη C
- Πλούσιες βιβλιοθήκες
- Πρόσβαση σε ΒΔ
- Γραφικά
- Ανίχνευση συνεδρίας
- Μεταφορά αρχείων
- Δημιουργία PDF
- Email
- Εκτέλεση ώς Apache extension (mod_php) ή CGI
Παράδειγμα (PHP 4)
<?php
$db = pg_pconnect ("host=localhost dbname=comments user=george password=george");
$update="insert into comments(name,email,comment) values ('$name','$email','$comments')";
echo $name,$email,$comments;
pg_exec ($db,$update);
?>
Παράδειγμα (PHP 5)
<?php
if(isset($HTTP_POST_VARS['name']) $name=$HTTP_POST_VARS['name'];
if(isset($HTTP_POST_VARS['email']) $name=$HTTP_POST_VARS['email'];
if(isset($HTTP_POST_VARS['comments']) $name=$HTTP_POST_VARS['comments'];
$db = pg_pconnect ("host=localhost dbname=comments user=george password=george")
or die("Couldn't Connect to the database") ;
$update = "insert into comments(name,email,comment) values ('$name','$email','$comments')";
echo $name,$email,$comments;
if (!pg_exec($db,$update))
echo "There was a problem with the sql statement" ;
else
echo "SQL Excecuted Successfully" ;
?>
API εξυπηρετητή
Υλοποιήσεις
- NSAPI (Netscape)
- ISAPI (Microsoft)
- Apache API (apache)
Μεταφορά δεδομένων
Μεταφορά δεδομένων από τον πελάτη στον εξυπηρετητή μέσω HTTP μπορεί να γίνει με
τους παρακάτω τρόπους:
- URL
http://www.amazon.com/exec/obidos/shopping-basket/ref=top_nav_sb_gateway/103-2141875-9969416)
- POST
POST http://www.amazon.com/exec/obidos/search-handle-form/103-2141875-9969416 HTTP/1.0
...
url=index%3Daps&field-keywords=java+enterprise&explorer-type=gift&Go.x=10&Go.y=10
- Cookie
GET http://www.amazon.com
...
Cookie: ubid-main=430-7602259-8325423; x-main=hQFiIxHUFj8mCscT@Yb5Z7xsVsOFQjBf;session-id=103-2141875-9969416; session-id-time=1038902400; obidos_path_continue-shopping=continue-shopping-url=/subst/home/home.html/103-2141875-9969416&continue-shopping-post-data=&continue-shopping-description=generic.gateway.default
Υλοποίηση συνεδρίας
- Αποθήκευση όλων των πληροφοριών στο URL
- Αποθήκευση κωδικού συνεδρίας στο URL
- Αποθήκευση όλων των πληροφοριών σε cookie
- Αποθήκευση κωδικού συνεδρίας σε cookie
Παραδείγματα URL:
http://www.driveme.gr/Athens/AthensMap.ASP?wcu=$cmd=2$id=4_2000_11_09_08_00_20_296
http://www.perseus.tufts.edu/cgi-bin/perscoll?collection=Perseus:collection:Greco-Roman
http://terraserver.microsoft.com/GetPageByXY.asp?XId=9782&YId=12293&SrcId=2&ImgDate=05/17/1992&ImgSize=2&DSize=0
Παραδείγματα cookies:
bbs.cordis.lu FALSE / FALSE 2137621534 CFID 47215
bbs.cordis.lu FALSE / FALSE 2137621534 CFTOKEN 18919068
.harvard.edu TRUE / FALSE 2051222305 SITESERVER ID=7f29e95efe695b0ab41c161acdfb0163
search.support.microsoft.com FALSE / FALSE 1019403742 AnswerWiz 1=serial+mouse+detection&Count=1
search.support.microsoft.com FALSE / FALSE 1019403742 Params S=F&VR=http%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fsupport%3Bhttp%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fservicedesks%2Fwebcasts%3Bhttp%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fhighlights&KT=ALL&FR=0&HSL=0&LN=EN%2DUS&FSL=0&TSL=0&A=T&SD=GN&SPR=W95&PSL=0&LQ=serial+mouse+detection&T=B&T1=7d&DU=C
search.support.microsoft.com FALSE / FALSE 1019403742 Global LN=EN%2DUS
Απλοί κανόνες
- Κράτα τα συχνά χρησιμοποιούμενα δεδομένα σε μέσα γρήγορης πρόσβασης
- Κράτα τα δεδομένα κοντά στον τόπο χρήσης τους
- Κράτα τοπικά αντίγραφα των δεδομένων όπου είναι δυνατό
- Μην αφήνεις να δημιουργούνται σημεία συνωστισμού
- Ελαχιστοποίησε την ανάγκη για καθολική γνώση της κατάστασης του συστήματος
- Κράτα συγγενή δεδομένα στον ίδιο τόπο
- Εξέτασε τη δυνατότητα χρήσης εξειδικευμένων εξυπηρετητών
- Χρησιμοποίησε στην κατάλληλη για τις ανάγκες τεχνολογία
- Χρησιμοποίησε παράλληλες τεχνικές επεξεργασίας
- Εκμεταλλεύσου τεχνικές συμπίεσης
- Σχεδίασε το σύστημα με την αποτυχία στο νου
- Ελαχιστοποίησε το χρόνο απόκρισης
- Σχεδίασε από την αρχή την ασφάλεια του συστήματος
Βιβλιογραφία
- The
perl-apache intergration project.
Available online http://perl.apache.org.
- Bouchaib Bahli and
Dany Di Tullio.
Web
engineering: An assessment of empirical research.
Communications of AIS, 12(14), 2003.
- T. Berners-Lee and D. Connolly.
RFC 1866: Hypertext Markup
Language — 2.0, November 1995.
- T. Berners-Lee,
L. Masinter, and M. McCahill.
RFC 1738: Uniform Resource
Locators (URL), December 1994.
- S.B. Subrhamanya B.M. Subraya.
Object driven performance testing of web applications.
In First Asia-Pacific conference on Quality Software. IEEE,
2000.
- R. Braden.
RFC 1122: Requirements for
Internet hosts — communication layers, October 1989.
See also STD3 [STD0003].
- R. Braden.
RFC 1123: Requirements for
Internet hosts — application and support, October 1989.
See also STD3 [STD0003].
- Microsoft Corporation.
The component object model specification.
Technical report, Microsoft Corporation, Redmond, WA, USA, October 1995.
- R. Fielding,
J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, et al.
RFC 2068: Hypertext transfer
protocol — HTTP/1.1, January 1997.
- Piero Fraternali.
Tools and approaches for developing data-intensive web applications: A survey.
ACM Computing Surveys, 31(9):227–263, September 1999.
- Giorgos Gousios
and Diomidis Spinellis.
A comparison of portable dynamic web content technologies for the apache
web server.
In Proceedings of the 3rd International System Administration and
Networking Conference SANE 2002, pages 103–119, Maastricht, The
Netherlands, May 2002.
Best refereed paper award.
- Stefanos
Gritzalis and Diomidis Spinellis.
Addressing threats and security issues in World Wide Web
technology.
In Proceedings CMS '97 3rd IFIP TC6/TC11 International joint working
Conference on Communications and Multimedia Security, pages 33–46,
Athens, Greece, September 1997. IFIP, Chapman & Hall.
- Elisabeth
Hendrickson and Martin Fowler.
The software engineering of internet software.
IEEE Software, 19(2):23–24, March/April 2002.
- Arun Ivengar, Jim
Challerger, and Paul Dantzing.
High-performance web design techniques.
IEEE Internet Computing, March-April 2000.
- The
jakarta project.
Available online http://jakarta.apache.org.
- K. N. King.
Java
Programming: from the Beginning, pages 1–38.
W. W. Norton & Company, New York, NY, USA, 2000.
- Evangelia Kopanaki,
Vangelis Karkaletsis, Constantine D. Spyropoulos, Nikos Avradinis, Nikos
Fakotakis, Theodore Kalamboukis, Basilis Kladis, Yannis Lazarou, Themis
Panayiotopoulos, and Diomidis Spinellis.
MITOS: An integrated web-based system for information management ( http://www.spinellis.gr/pubs/conf/2001-EPY-Mitos/html/mitos.html).
In 8th Panhellenic Informatics Conference, Nicosia, Cyprus,
November 2001. Greek Computer Society.
- E. Krol.
RFC 1118: Hitchhikers guide to
the Internet, September 1989.
- Mike Morrison, Joline
Morrison, and Anthony Keyes.
Integrating web sites and databases.
Communications of the ACM, 45(9):81–86, September 2002.
- Object
Management Group, Inc.
The common object request broker: Architecture and specification, July 1996.
Revision 2.0 (Updated).
- J. Postel.
RFC 768: User Datagram
Protocol, August 1980.
See also STD6 [STD0006].
- J. Postel.
RFC 774: Internet protocol
handbook: Table of contents, October 1980.
Obsoletes RFC0766 [RFC0766].
- J. Postel.
RFC 791: Internet
protocol, September 1981.
Obsoletes RFC0760 [RFC0760].
- J. Postel.
RFC 792: Internet control
message protocol, September 1981.
Obsoletes RFC0777 [RFC0777]. See also STD5 [STD0005].
- J. Postel.
RFC 793: Transmission Control
Protocol, September 1981.
See also STD7 [STD0007]. Updates RFC0761 [RFC0761].
- Konstantinos Raptis,
Diomidis Spinellis, and Sokratis Katsikas.
Multi-technology distributed objects and their integration ( http://www.spinellis.gr/pubs/jrnl/2001-CSI-Components/html/imtd.html).
Computer Standards & Interfaces, 23:157–168, July 2001.
- Jesse Reisman.
Web site design: Less
is more.
IT Professional, 1(5):63–64, September/October 1999.
- J. Siegel.
A preview of CORBA 3.
Computer, 32(5):114–116, May 1999.
- Shikharesh Majumdar
Sucheta Nandipalli.
Techniques for achieving high performance web servers.
In International Conference for Parallel Processing. IEEE, 2000.
- Sun
Microsystems Inc.
Java remote
method invocation specification.
Available online http://java.sun.com/docs/guide/rmi/spec/rmiTOC.html/ (February
2002), December 1999.
Revision 1.7, Java 2 SDK, Standard Edition, v1.3.0.
- Jason Hunter with
William Crawford.
Java Servlet Programming.
O' Reilly, 2001.
Διαχείριση υπολογιστικών συστημάτων
Σταθμοί εργασίας
Κύριες εργασίες:
- Εγκατάσταση λειτουργικού συστήματος και εφαρμογών
- Αυτοματοποίηση
- Αποφεύγουμε προεγκατεστημένα συστήματα
- Ενημέρωση λειτουργικού συστήματος και εφαρμογών
- Καθορισμός παραμέτρων δικτύου (DHCP)
Εξυπηρετητές
Σημαντικά στοιχεία:
- Υλικό
- Εσωτερικός χώρος
- Δυνατότητες επέκτασης
- Είσοδος και έξοδος
- Εγκατάσταση σε ικρίωμα
- Πρόσβαση μόνο στο εμπρόσθιο μέρος
- Αντικατάσταση εξαρτημάτων σε λειτουργία
- Συστήματα RAID
- Πολιτική συντήρησης
- Αντίγραφα εφεδρείας
- Εγκατάσταση το κέντρο υπολογιστών
- Διαφορετικό λογισμικό
- Απομακρυσμένη πρόσβαση
- Διαχωρισμός του δικτύου της διαχείρισης των υπολογιστών από το
δίκτυο της χρήσης τους
Εξυπηρετητές σε ικρίωμα (rack)
Υπηρεσίες
Βασικές αρχές και προσεγγίσεις:
- Ανοιχτή αρχιτεκτονική
- Πρωτόκολλα και προϊόντα
- Σύνδεση ανεξάρτητα από το τον εξυπηρετητή (π.χ. mail.company.gr)
- Λειτουργία στο υπολογιστικό κέντρο
- Πολλαπλοί εξυπηρετητές για την ίδια υπηρεσία
- Παρακολούθηση της λειτουργίας
- Ένα μηχάνημα ανά υπηρεσία
Τεχνικές αποσφαλμάτωσης
Βασική στρατηγική:
- Κατανόηση του προβλήματος
- Εύρεση της αιτίας (όχι του συμπτώματος) και αποκατάσταση
- Χρήση εργαλείων
Δύο τεχνικές:
- Διαδοχική εξάλειψη πιθανών αιτιών (π.χ. αφαίρεση οδηγών)
- Διαδοχική εκλέπτυνση πιθανών αιτιών (π.χ. traceroute)
Παραδείγματα εργαλείων:
- ping
- traceroute / tracert
- nslookup
- strace / truss / apispy
- grep / locate / regedit
- "Use the source Luke"
Η αρχή της μοναδικής διόρθωσης
- Διορθώνουμε το πρόβλημα και όχι το σύμπτωμα
- ... για πάντα ...
- ... χωρίς να ανακαλύψουμε ξανά τον τροχό ...
- ... σε όλα τα μηχανήματα ...
- Η αυτοματοποίηση συνήθως βοηθά
Χώροι ονοματοδοσίας
Χώροι ονομάτων:
- Χρήστες
- Μηχανήματα
- Διευθύνσεις δικτύου
- Αρχεία
- Ομάδες χρηστών
Πολιτικές ονοματοδοσίας:
- Τύπος ονομάτων
- Αλγοριθμικός (π.χ. pc01, pc02, dspin, gvour, ptsah, gpap02)
- Θεματικός (π.χ. thira, naxos, paros, kriti, thasos, samos, ithaki)
- Λειτουργικός (π.χ. finance, admin, guest)
- Ελεύθερος, με προτεραιότητα
- Τοπική κάλυψη
- Εύρος έκθεσης
Διαδικασίες διαχείρισης:
- Προσθήκη
- Αλλαγή
- Διαγραφή
- Οι παραπάνω διαδικασίες εκτελούνται κατά προτίμηση κεντρικά
Καταστροφές: σχεδιασμός και αποκατάσταση
Τύποι καταστροφών
- Φυσικές (π.χ. σεισμός, πυρκαγιά, πλημμύρα)
- Ανθρώπινες (π.χ. διακοπή ρεύματος, τρομοκρατική ενέργεια, μπουλντόζα)
Προϋπολογισμός = κόστος καταστροφής * πιθανότητα καταστροφής
Ενέργειες:
Διαχείριση αλλαγών
- Χρήση εργαλείων διαχείρισης αλλαγών (π.χ. CVS, RCS)
- Αρχείο των αλλαγών
- Έλεγχος μετά από κάθε αλλαγή
- Ενημέρωση όσων επηρεάζονται
Αναβαθμίσεις
Διαδικασία αναβάθμισης υπηρέτη:
- Κατάσταση προσφερομένων υπηρεσιών
- Ποιες υπηρεσίες προσφέρει ο υπηρέτης
- Ποιοι τις χρησιμοποιούν
- Ποιο λογισμικό τις προσφέρει
- Επιβεβαίωση πως κάθε λογισμικό θα δουλεύει στη νέα έκδοση
- Προγραμματισμός διαδικασίας ελέγχου για κάθε υπηρεσία
- Προγραμματισμός εφεδρείας
- Επιλογή του κατάλληλου χρόνου συντήρησης
- Ανακοίνωση
- Εκτέλεση των ελέγχων στην παλιά υπηρεσία
- Αναβάθμιση (μαζί με βοηθό)
- Επανάληψη των ελέγχων
- Αν αποτύχει, υποχώρηση σύμφωνα με την εφεδρεία
- Επικοινωνία με τους πελάτες
Αναβάθμιση στην υπηρεσία TAXISnet.
Συγκέντρωση και αποκέντρωση
Για τις αποφάσεις σχετικά με συγκέντρωση και αποκέντρωση χρησιμοποιούμε τα
παρακάτω στοιχεία:
- Λόγοι που μας οδηγούν στη συγκεκριμένη απόφαση
- Πρόβλημα που θέλουμε να λύσουμε
- Διαχειριζόμαστε κεντρικά όσο πιο πολλά στοιχεία ρεαλιστικά μπορούμε
- Όσο πιο πολλά στοιχεία διαχειριζόμαστε κεντρικό τόσο πιο πιθανό
είναι να χρειαστεί να τα διαμορφώσουμε για κάποιες ειδικές ανάγκες
- Όταν κάποια τεχνολογία γίνει προϊόν μαζικής χρήσης είναι έτοιμη για
κεντρική διαχείριση
- Η μετάβαση σε κεντρική διαχείριση είναι σαν οποιαδήποτε άλλη αλλαγή
- ... είναι όμως και μια μοναδική ευκαιρία για να κάνουμε καλή εντύπωση
- Ακούμε τους πελάτες, αλλά ξέρουμε πως τον τελικό λόγο έχει η διοίκηση
Υποψήφιοι για κεντρική διαχείριση:
- Κατανεμημένα συστήματα
- Υπηρεσίες σε λιγότερα μηχανήματα
- Διαχείριση συστημάτων
- Αποφάσεις για την υποδομή
- Προμήθειες
- Υποστήριξη
Η υπηρεσία βοηθείας
Η υπηρεσία βοηθείας σχεδιάζεται με βάση τα παρακάτω στοιχεία:
- Τι υποστηρίζεται
- Ποιος υποστηρίζεται
- Πότε παρέχεται η υποστήριξη
- Ποιος είναι ο χρόνος απόκρισης
Βασικό στοιχείο για την εύρυθμη λειτουργία της είναι ένα πληροφοριακό
σύστημα για την καταγραφή και διαχείριση των αιτήσεων.
Κάθε αίτηση αποκτά ένα αναγνωριστικό στοιχείο (ticket)
με το οποίο τα στελέχη της υπηρεσίας και ο τελικός πελάτης ενημερώνονται
για την πρόοδο.
Υποστήριξη πελατών
Βήματα
- Χαιρετισμός
- Μαθαίνουμε το πρόβλημα
- Επαναλαμβάνουμε το πρόβλημα και συμφωνούμε με τον πελάτη
- Δοκιμάζουμε το πρόβλημα
- Μαζεύουμε προτάσεις για την αντιμετώπιση
- Επιλέγουμε τη λύση
- Εκτελούμε τη λύση
- Ελέγχουμε τη λύση
- Συμφωνούμε με τον πελάτη πως το πρόβλημα έχει λυθεί
Οργάνωση του κέντρου πληροφορικής
- Φυσική πρόσβαση και ασφάλεια
- Ικριώματα
- Πυροπροστασία
- Ασφάλεια από φυσικές καταστροφές
- Δικτύωση και ψευδοπατώματα
- Ηλεκτρικό ρεύμα
- Κλιματισμός
- Έλεγχος θερμοκρασίας, πρόσβασης, ρεύματος
- Επιγραφές
- Εργαλεία
- Χώροι εργασίας
- Χώροι αποθήκευσης
- Τρόπος μετακίνησης εξοπλισμού
Εσωτερικό αίθουσας υπολογιστών
Το κέντρο υπολογιστών στο εργαστήριο πολυμέσων του ΟΤΕ
Δίκτυα
Η τοπολογία του δικτύου μπορεί να καθοριστεί:
- Επίπεδα (όλα τα στοιχεία του δικτύου βρίσκονται στο ίδιο επίπεδο 3)
- Με βάση τη φυσική διάταξη του δικτύου
- Με βάση τη λειτουργική διάταξη του δικτύου
Σημαντικό τμήμα της δικτύωσης είναι το
ενδιάμεσο πλαίσιο τερματισμού (intermediate distribution frame (IDF))
Σε αυτό καταλήγουν οι δικτυακές συνδέσεις ενός ορόφου και με τη χρήση
καλωδίων μπορούν να συνδεθούν οι υπολογιστές με το δίκτυο.
Κάθε πλαίσιο πρέπει να είναι αριθμημένο με το κτίριο, όροφο και αριθμό
του πλαισίου.
Κάθε σύνδεση έχει έναν ξεχωριστό αριθμό με βάση τη θέση της και πιθανώς
και τον αντίστοιχο υποδοχέα.
Έτσι π.χ. η σύνδεση 1/4/2/12Α μπορεί να είναι η σύνδεση
στο κτίριο 1, όροφο 4, πλαίσιο 2, γραφείο 12, υποδοχέας Α.
Σε μεγάλες εγκαταστάσεις το
ενδιάμεσο πλαίσιο τερματισμού τερματίζεται σε ένα
κύριο πλαίσιο τερματισμού (main distribution frame (MDF))
το οποίο συνήθως είναι στο κέντρο υπολογιστών.
Βασικές αρχές:
- Απλή αρχιτεκτονική
- Αξιόπιστη κατασκευή
- Επιγραφές και τεκμηρίωση
- Χρήση της καλύτερης δυνατής καλωδίωσης
- Αδιάλειπτη τροφοδοσία στα πλαίσια τερματισμού
- Τα ενδιάμεσα πλαίσια τερματισμού τοποθετούνται σε ανάλογες θέσεις
των ορόφων
- Συγκεκριμένα σημεία οροθέτησης (demarcation point)
με τους παροχείς.
- Χρήση ανοιχτών πρωτοκόλλων (IETF, IEEE)
- Απλή δρομολόγηση
- Χρήση δρομολογητών (και όχι υπολογιστών)
- Ελαχιστοποίηση των διαφορετικών προμηθευτών
- Αποφυγή της εξαιρετικά πρόσφατης τεχνολογίας
Πλαίσιο τερματισμού - διακρίνονται τα
συστήματα αδιάλειπτης τροφοδοσίας στο κάτω μέρος.
Υπηρεσίες email
Λειτουργικά στοιχεία:
- Μεταφορά
- Παράδοση
- Επεξεργασία πολλαπλών διανομών (mailing lists)
Βασικά στοιχεία για τη σωστή της υπηρεσίας email:
- Απλή αρχιτεκτονική βασισμένη σε ανοιχτά πρότυπα (SMTP, IMAP, POP)
- Σωστή ονοματοδοσία και διαχείρισή της
- Παρακολούθηση της λειτουργίας (λογαριασμός postmaster)
- Πολιτική προστασία προσωπικών δεδομένων
- Ασφάλεια
Αντίγραφα εφεδρείας και ανάκτηση
Αντίγραφα εφεδρείας χρειάζονται όταν:
- Διαγραφούν στοιχεία
- Χαλάσει το βασικό μέσο αποθήκευσης
- Ως αρχεία της επιχείρησης
Για βελτιστοποίηση της διαδικασίας,
διαχωρίζουμε τα παρακάτω αντίγραφα εφεδρείας
Κάθε επίπεδο περιέχει τις αλλαγές από το προηγούμενο μικρότερο επίπεδο.
Πρόσθετα στοιχεία:
- Τα αντίγραφα εφεδρείας πρέπει να φυλάσσονται σε άλλο (ασφαλή) χώρο
- Περιοδικά δοκιμάζουμε την ανάκτηση αρχείων καθώς και την ανάκτηση
ολόκληρου δίσκου
Βιβλιογραφία
Ασκήσεις
- Παραθέστε τις υπηρεσίες που προσφέρει το κέντρο υπολογιστών του
Πανεπιστημίου.
- Δώστε ένα παράδειγμα όπου διορθώνεται το σύμπτωμα αντί για την αιτία.
- Περιγράψτε την πολιτική ονοματοδοσίας και τις διαδικασίες
διαχείρισης για τα ονόματα κάτω από το .gr domain.
Περιγραφή δεδομένων με XML και κανονικές εκφράσεις
Βάσεις της XML
Έγγραφα XML
Παράδειγμα: ένα στοιχείο με κείμενο
<city>Larisa</city>
Παράδειγμα: στοιχείο με περιεχόμενο άλλα στοιχεία
<?xml version="1.0" encoding="US-ASCII" ?>
<city_info>
<name>Larisa</name>
<area_code>241</area_code>
<latitude>39.38</latitude>
<longitude>-22.25</longitude>
<country>Greece</country>
</city_info>
Παράδειγμα: κενό στοιχείο
<alumnus />
Προσδιορισμοί
- Κάθε ετικέτα αρχής μπορεί να περιέχει και πρόσθετους
προσδιορισμούς (attributes)
- Οι προσδιορισμοί ορίζονται με τη σύνταξη όνομα=τιμή μέσα στην ετικέτα
- Η τιμή πρέπει να βρίσκεται μέσα σε μονά ή διπλά εισαγωγικά
- Για κάθε όνομα μπορεί να οριστεί ένας μόνο προσδιορισμός
Παράδειγμα:
<city country="el" id="HER">
<name>Hrakleio</name>
</city>
Ως προσιδιορισμούς συνιστάται να γράφουμε απλές τιμές που ορίζουν:
- Μεταδεδομένα
- Κλειδιά
- Συσχετίσεις
Οντότητες και σχόλια
Οι παρακάτω οντότητες (entities)
μπορούν να οριστούν περιφραστικά:
Οντότητα | Σύνταξη XML |
< | < |
& | & |
> | > |
" | " |
' | ' |
Σχόλια μέσα σε ένα έγγραφο XML γράφονται ως
<!-- περιεχόμενο -->
Ορισμός τύπου εγγράφων
Υποστηρίζονται οι παρακάτω ορισμοί:
- Απλοί χαρακτήρες (parsed character data)
-
<!ELEMENT name (#PCDATA)>
Ένα στοιχείο
<!ELEMENT student (person_data)>
Ακολουθία στοιχείων
<!ELEMENT person_data (name, surname)>
Κανένα ή ένα στοιχείο
<!ELEMENT person_name (given_name, initial?, last_name)>
Μηδέν ή περισσότερα στοιχεία
<!ELEMENT owned_cars (car*)>
Ένα ή περισσότερα στοιχεία
<!ELEMENT course_lecturer (person_data+)>
Επιλογή στοιχείων
<!ELEMENT engine (two_stroke | four_stroke | wankel | rotary)>
Χρήση παρενθέσεων
<!ELEMENT person_details (name, surname, (vat_number | id_number))>
Κενό περιεχόμενο
<!ELEMENT alumnus EMPTY>
Τυχαίο περιεχόμενο
<!ELEMENT text ANY>
Παράδειγμα - DTD
<!--
-
- Document Type Description for the projects
-
- $Id: project.dtd,v 1.2 2004/01/24 20:20:04 bkarak Exp $
-
-->
<!ELEMENT project (
shortname,
projtitle,
startdate?,
enddate,
web_site?,
our_budget?,
total_budget?,
funding_agency?,
funding_programme?,
project_code?,
partner*,
logo?,
description
)>
<!ELEMENT projtitle (#PCDATA)>
<!ELEMENT our_budget (#PCDATA)>
<!ELEMENT total_budget (#PCDATA)>
<!ELEMENT funding_agency (#PCDATA)>
<!ELEMENT funding_programme (#PCDATA)>
<!ELEMENT project_code (#PCDATA)>
<!ELEMENT web_site (#PCDATA)>
<!ELEMENT startdate (#PCDATA)>
<!ELEMENT enddate (#PCDATA)>
<!ELEMENT shortname (#PCDATA)>
<!ELEMENT logo (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT partner (shortname, country, web_site?)>
<!ELEMENT shortname (#PCDATA)>
<!ELEMENT country (#PCDATA)>
Παράδειγμα - αντίστοιχη XML
<?xml version="1.0"?>
<project>
<shortname>mExpress</shortname>
<projtitle>mobile in-EXhibition PRovision of Electronic Support Services</projtitle>
<startdate>20020305</startdate>
<enddate>20040401</enddate>
<web_site>http://mexpress.intranet.gr/</web_site>
<our_budget>328 EUR</our_budget>
<total_budget>3,493 EUR</total_budget>
<funding_agency>European Commission</funding_agency>
<funding_programme>IST</funding_programme>
<project_code>IST-2001-33432</project_code>
<partner>
<shortname>Intracom</shortname>
<country>EL</country>
<web_site>http://www.intracom.gr</web_site>
</partner>
<partner>
<shortname>Ericsson</shortname>
<country>DK</country>
<web_site>http://www.ericsson.com/</web_site>
</partner>
<partner>
<shortname>ELISA</shortname>
<country>FIN</country>
<web_site>http://www.elisa.com</web_site>
</partner>
<partner>
<shortname>POULIADIS</shortname>
<country>EL</country>
<web_site>http://www.pouliadis.gr</web_site>
</partner>
<partner>
<shortname>SSF</shortname>
<country>FIN</country>
<web_site>http://www.ssf.fi/</web_site>
</partner>
<partner>
<shortname>HUT</shortname>
<country>FIN</country>
<web_site>http://www.hut.fi</web_site>
</partner>
<partner>
<shortname>FFC</shortname>
<country>FIN</country>
</partner>
<partner>
<shortname>ROTA</shortname>
<country>EL</country>
<web_site>http://www.rota.gr</web_site>
</partner>
<logo>../images/p_mexpress.gif</logo>
<description>
mEXPRESS aims to exploit the technological opportunities arising from
evolution in the areas of wireless networks and positioning mechanisms in
order to support and facilitate the professional exhibition industry in
a context-aware manner. It will contribute to the economic development of
the Community by providing means for efficient operation and interaction
in information-rich environments such as exhibitions, and significantly
enhancing promotional activities and business communications. The mEXPRESS
project will provide an integrated mediation platform (mEXPRESS Service
Provider) oriented to exhibition shows and events.
</description>
</project>
Ορισμός τύπων προσδιορισμών
Οι προδιορισμοί που επιτρέπονται σε ένα στοιχείο ορίζονται με στοιχεία
της μορφής
<!ATTLIST όνομα_στοιχείου
όνομα_προσδιορισμού τύπος_προσδιορισμού περιορισμός
...
>
Υποστηρίζονται μεταξύ άλλων οι παρακάτω τύποι προσδιορισμού
- Χαρακτήρες
- CDATA
- Απαρίθμηση
- (επιλογή1 | επιλογή2 | ...)
- Κλειδί
- ID
- Αναφορά σε κλειδί
- IDREF
- Αναφορά σε κλειδιά
- IDREFS
Οι πιο χρήσιμοι περιορισμοί προσδιορισμών είναι:
- #IMPLIED
- Προαιρετικός προσδιορισμός
- #REQUIRED
- Υποχρεωτικός προσδιορισμός
Παράδειγμα - DTD
<!ATTLIST project
id ID #REQUIRED
contact CDATA #IMPLIED
scientific_coordinator CDATA #IMPLIED
project_manager CDATA #IMPLIED
group CDATA #REQUIRED
international (yes | no) #REQUIRED
type (consulting | rtd | training | dissemination) #REQUIRED
>
Παράδειγμα - XML
<?xml version="1.0"?>
<project
id="p_mexpress"
group="g_sense g_wrc"
scientific_coordinator="m_dds"
contact="m_pateli"
international="yes"
type="rtd"
project_manager="m_pateli"
>
<!-- ... -->
</project>
Μετασχηματισμοί
Παράδειγμα XSLT
<?xml version="1.0"?>
<!-- Apply using
xml tr project.xslt mexpress.xml
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="project">
<h1>
<xsl:value-of select="shortname" />
-
<xsl:value-of select="projtitle" />
</h1>
<!-- Show Logo -->
<xsl:element name="img">
<xsl:attribute name="src"><xsl:value-of select="logo" /></xsl:attribute>
</xsl:element>
<br /> <br />
<!-- Project Summary information -->
<xsl:if test="count(project_code) != 0">
Project Code:
<xsl:value-of select="project_code" />
<xsl:if test="@international = 'yes'">
(International)
</xsl:if>
<br/>
</xsl:if>
<xsl:if test="count(funding_programme) != 0">
Funding programme: <xsl:value-of select="funding_programme" />
<br />
</xsl:if>
<xsl:if test="count(funding_agency) != 0">
Funding Agency: <xsl:value-of select="funding_agency" />
<br />
</xsl:if>
<xsl:if test="@type != ''">
Project type:
<xsl:choose>
<xsl:when test="@type = 'rtd'">RTD</xsl:when>
<xsl:when test="@type = 'consulting'">Consulting</xsl:when>
<xsl:when test="@type = 'training'">Training</xsl:when>
<xsl:when test="@type = 'dissemination'">Dissemination</xsl:when>
</xsl:choose>
<br />
</xsl:if>
<xsl:if test="count(web_site) != 0">
Web site:
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="web_site"/></xsl:attribute>
<xsl:value-of select="web_site" />
</xsl:element>
<br />
<br />
</xsl:if>
<xsl:if test="count(our_budget) != 0">
ELTRUN budget: <xsl:value-of select="our_budget" />
<br />
</xsl:if>
<xsl:if test="count(total_budget) != 0">
Total budget: <xsl:value-of select="total_budget" />
<br />
</xsl:if>
<br />
</xsl:template>
</xsl:stylesheet>
Αποτέλεσμα HTML
mExpress
-
mobile in-EXhibition PRovision of Electronic Support Services
Project Code:
IST-2001-33432
(International)
Funding programme: IST
Funding Agency: European Commission
Project type:
RTD
Web site:
http://mexpress.intranet.gr/ (http://mexpress.intranet.gr/)
ELTRUN budget: 328 EUR
Total budget: 3,493 EUR
|
Το μοντέλο αντικειμένων εγγράφων
Η υλοποίηση του μοντέλου αντικειμένων εγγράφων στη Java
Η επεξεργασία ενός αρχείου XML γίνεται μέσω ενός συντακτικού αναλυτή
DocumentBuilder
που παράγεται από την κλάση DocumentBuilderFactory
// Create the DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// Create the document builder
DocumentBuilder db = dbf.newDocumentBuilder();
Η μέθοδος parse του συντακτικού αναλυτή DocumentBuilder επιστρέφει ένα
αντικείμενο που υποστηρίζει τη διεπαφή Document.
Μπορεί να κληθεί με όρισμα:
Παράδειγμα: υπολογισμός μέσου όρου
/*
* Print the average value of the specified node
* D. Spinellis, January 2004
*/
import javax.xml.parsers.*;
import java.io.*;
import org.w3c.dom.*;
class Average {
public static void main(String args[]) {
if (args.length != 2) {
System.err.println("Usage: Average element file");
System.exit(1);
}
Document doc = null;
try {
// Create the DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// Create the document builder
DocumentBuilder db = dbf.newDocumentBuilder();
// Create DOM document from the file
doc = db.parse(new File(args[1]));
} catch (Exception e) {
System.err.println("Parsing failed: " + e);
System.exit(1);
}
NodeList grades = doc.getElementsByTagName(args[0]);
double sum = 0.0;
for (int i = 0; i < grades.getLength(); i++) {
String grade = grades.item(i).getFirstChild().getNodeValue();
sum += (new Integer(grade)).doubleValue();
}
System.out.println(sum / grades.getLength());
}
}
Σύνταξη κανονικών εκφράσεων
- Μια κανονική έκφραση (regular expression) επιτρέπει τον ορισμό σύνθετων συμβολοσειρών με δηλωτικό τρόπο.
- Η κανονική έκφραση αποτελείται από
- γράμματα (που παριστάνουν τον εαυτό τους) και
- ειδικά σύμβολα
Τα παρακάτω σύμβολα έχουν ειδικό νόημα:
- ^
- Αρχή της γραμμής
- $
- Τέλος της γραμμής
- .
- Οποιοδήποτε γράμμα
- [abc]
- Ένα από τα γράμματα a, b, ή c
- [a-z]
- Ένα από τα γράμματα a μέχρι z
- [^abc]
- Οποιοδήποτε γράμμα εκτός από τα a, b, και c.
- Έκφραση?
- Η έκφραση μία ή καμία φορά
- Έκφραση*
- Η έκφραση μηδέν ή περισσότερες φορές
- Έκφραση+
- Η έκφραση μία ή περισσότερες φορές
- Έκφραση{n}
- Η έκφραση n φορές
- Έκφραση{n,}
- Η έκφραση τουλάχιστον n φορές
- Έκφραση{n,m}
- Η έκφραση τουλάχιστον n αλλά
όχι περισσότερες από m φορές
- Έκφραση1|Έκφραση2
- Η έκφραση1 ή η έκφραση2
- (Έκφραση)
- Το περιεχόμενο στην παρένθεση
- \1 \2 ... \n
- To περιεχόμενο της νοστής παρένθεσης
- \0nnn
- Χαρακτήρας με οκταδική τιμή nnn
- \0xnnn
- Χαρακτήρας με δεκαεξαδική τιμή nnn
- \\
- Ο χαρακτήρας \
- \t
- Ο χαρακτήρας tab
- \n
- Ο χαρακτήρας newline
- \r
- Ο χαρακτήρας carriage return
- \a
- Ο χαρακτήρας alert
- \f
- Ο χαρακτήρας form feed
- \e
- Ο χαρακτήρας escape
- \cx
- Ο χαρακτήρας control-x (a-z)
- \d
- Ψηφίο
- \D
- Μη ψηφίο
- \s
- Κενό
- \S
- Μη κενό
- \p{InGreek}
- Ελληνικό γράμμα: όνομα μπλοκ http://www.unicode.org/Public/3.0-Update/Blocks-3.txt (http://www.unicode.org/Public/3.0-Update/Blocks-3.txt)
- \P{InGreek}
- Μη ελληνικό γράμμα
Χρήση κανονικών εκφράσεων
- Στη Java οι κανονικές εκφράσεις μπορούν να οριστούν
με τη βοήθεια της κλάσης Pattern.
- Η μέθοδος Pattern.compile(String re) επιστρέφει ένα αντικείμενο
τύπου Pattern που είναι η κανονική έκφραση re μεταγλωττισμένη.
- Η μέθοδος matcher(String s) του παραπάνω αντικειμένου επιστρέφει
ένα αντικείμενο m τύπου Matcher το οποίο μπορεί να ταιριάξει τη συμβολοσειρά
re με το αντικείμενο s.
- Στο αντικείμενο m:
- η μέθοδος m.find() προσπαθεί να ταιριάξει την κανονική έκφραση σε οποιαδήποτε θέση
- η μέθοδος m.matches() προσπαθεί να ταιριάξει την κανονική έκφραση από
την αρχή μέχρι το τέλος της συμβολοσειράς
Και οι δύο μέθοδοι επιστρέφουν true αν η συμβολοσειρά ταιρίαζει με την
κανονική έκφραση.
- Η μέθοδοι m.start() και m.end() επιστρέφουν τις θέσεις της
συμβολοσειράς που ταίριαξε με την κανονική έκφραση.
Παράδειγμα: Εύρεση κανονικών εκφράσεων σε αρχείο
/*
* Globally match regular expression and print
* Modelled after the Unix command with the same name
* D. Spinellis, January 2004
*/
import java.util.regex.*;
import java.io.*;
class Grep {
public static void main(String args[]) {
if (args.length != 2) {
System.err.println("Usage: Grep pattern file");
System.exit(1);
}
Pattern cre = null; // Compiled RE
try {
cre = Pattern.compile(args[0]);
} catch (PatternSyntaxException e) {
System.err.println("Invalid RE syntax: " + e.getDescription());
System.exit(1);
}
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(args[1])));
} catch (FileNotFoundException e) {
System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
System.exit(1);
}
try {
String s;
while ((s = in.readLine()) != null) {
Matcher m = cre.matcher(s);
if (m.find())
System.out.println(s);
}
} catch (Exception e) {
System.err.println("Error reading line: " + e.getMessage());
System.exit(1);
}
}
}
Παράδειγμα:
java Grep "abo" /usr/dict/words
...
sabotage
seaboard
taboo
thereabouts
turnabout
vagabond
whereabout
...
java Grep "^abo" /usr/dict/words
aboard
abode
abolish
abolition
abominable
abominate
aboriginal
java Grep bent /usr/dict/words
absorbent
bent
benthic
debenture
incumbent
recumbent
java Grep "bent$" /usr/dict/words
absorbent
bent
incumbent
recumbent
java Grep "[^AEIOUYaeiouy]{5,}" /usr/dict/words
angstrom
Armstrong
birthplace
bremsstrahlung
corkscrew
Dijkstra
downstream
hardscrabble
jockstrap
Knightsbridge
lengthly
Nietzsche
nightclub
offspring
postscript
Rothschild
...
java Grep "(.)(.)(.)\3\2\1" /usr/dict/words
braggart
Brenner
collocation
diffident
dissident
glossolalia
grammar
grammarian
installation
staccato
suffuse
Διαίρεση συμβολοσειρών με πρότυπα
Παράδειγμα: επεξεργασία αρχείων πρόσβαση σε ιστοσελίδες
/*
* Collect and print Web statistics
* D. Spinellis, January 2004
*/
import java.util.*;
import java.util.regex.*;
import java.io.*;
class WebStats {
/**
* Increment the integer value of map's member by 1
* The member is obtained by using the matcher to extract
* the specified group from the string s
*/
static void increment(Map map, String s, Matcher m, int group) {
String member = s.substring(m.start(group), m.end(group));
Integer i = (Integer)map.get(member);
if (i == null)
i = new Integer(1);
else
i = new Integer(i.intValue() + 1);
map.put(member, i);
}
/** List the contents of the given map */
static void list(String title, Map map) {
System.out.println("\n" + title);
Set s = map.entrySet();
Iterator i;
for (i = s.iterator(); i.hasNext(); ) {
Map.Entry e = (Map.Entry)i.next();
System.out.println(e.getValue() + " " + e.getKey());
}
}
public static void main(String args[]) {
if (args.length != 1) {
System.err.println("Usage: WebStats file");
System.exit(1);
}
Pattern cre = null; // Compiled RE
try {
// A standard log line is a line like:
// 192.168.136.16 - - [26/Jan/2004:19:45:48 +0200] "GET /c136.html HTTP/1.1" 200 1674 "http://office/c120.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007"
cre = Pattern.compile(
"([-\\w.]+)\\s+" + // 1. Host
"([-\\w]+)\\s+" + // 2. Logname
"([-\\w]+)\\s+" + // 3. User
"\\[(\\d+)/" + // 4. Date
"(\\w+)/" + // 5. Month
"(\\d+):" + // 6. Year
"(\\d+):" + // 7. Hour
"(\\d+)" + // 8. Minute
"([^]]+?)\\]\\s+" + // 9. Rest of time
"\"([-\\w]+)\\s*" + // 10. Request verb
"([^\\s]*)" + // 11. Request URL
"([^\"]*?)\"\\s+" + // 12. Request protocol etc.
"(\\d+)\\s+" + // 13. Status
"([-\\d]+)\\s+" + // 14. Bytes
"\"([^\"]*)\"\\s+" + // 15. Referrer URL
"\"([^\"]*)\"" // 16. Client
);
} catch (PatternSyntaxException e) {
System.err.println("Invalid RE syntax: " + e.getDescription());
System.exit(1);
}
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
} catch (FileNotFoundException e) {
System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
System.exit(1);
}
HashMap host = new HashMap();
HashMap hour = new HashMap();
HashMap request = new HashMap();
HashMap referrer = new HashMap();
try {
String s;
while ((s = in.readLine()) != null) {
Matcher m = cre.matcher(s);
if (!m.matches())
System.out.println("Invalid line: " + s);
else {
increment(host, s, m, 1);
increment(hour, s, m, 7);
increment(request, s, m, 11);
increment(referrer, s, m, 15);
}
}
} catch (Exception e) {
System.err.println("Error reading line: " + e.getMessage());
System.exit(1);
}
list("Host Access Counts", host);
list("Hourly Access Counts", hour);
list("Request URL Access Counts", request);
list("Referrer URL Access Counts", referrer);
}
}
Βιβλιογραφία
- Rogers Cadenhead και Laura Lemay
Πλήρες εγχειρίδιο της Java 2 Εκδόσεις Μ. Γκιούρδας, Αθήνα 2003.
Κεφάλαια 21 και 28.
- A. V. Aho and M. J.
Corasick.
Efficient string matching: an aid to bibliographic search.
Communications of the ACM, 18(6):333–340, 1975.
- Jeffrey E. Friedl and
Andy Oram, editors.
Mastering Regular Expressions: Powerful Techniques for Perl and Other
Tools.
O'Reilly and Associates, Sebastopol, CA, second edition, 2002.
- Eric Hamilton.
Literate programming—expanding generalized regular expressions.
Communications of the ACM, 31(12):1376–1385, December 1988.
- Elliotte Rusty Harold
and W. Scott Means.
XML
in a Nutshell.
O'Reilly and Associates, Sebastopol, CA, 2001.
- Andrew Hume.
Grep wars: The strategic search initiative.
In Peter Collinson, editor, Proceedings of the EUUG Spring 88
Conference, pages 237–245, Buntingford, UK, 1988. European UNIX
User Group.
- Ken Thompson.
Programming techniques: Regular expression search algorithm.
Communications of the ACM, 11(6):419–422, 1968.
(doi:10.1145/363347.363387 (http://dx.doi.org/10.1145/363347.363387))
Μηχανές αναζήτησης
Η δομή μίας μηχανής αναζήτησης σε μία εικόνα
Επισκέπτες
- Υπεύθυνοι για την ανάκτηση εγγράφων από το διαδύκτιο
- Συνήθως συνεργάζονται πολλοι υπολογιστές παράλληλα ενώ κάθε υπολογιστής επισκέπτεται ταυτόχρονα πολλούς προορισμούς
- Τα ανακτημένα έγγραφα αποθηκεύονται και για κάθε ένα από αυτά δημιουργείται ένα άθροισμα ελέγχου
- Στρατηγικές επανεξέτασης
- Κάθε έγγραφο επανεξετάζεται με την ίδια συχνότητα
- Κάθε έγγραφο επανεξετάζεται σύμφωνα με τον ρυθμό που ανανεώνεται
- Έγγραφα που δεν ανανεώνονται συχνά δεν εξετάζονται συχνά, έγγραφα που ανανεώνονται συνεχώς δεν εξετάζονται καθόλου, έγγραφα που ανανεώνονται συχνά εξετάζονται συχνά
- Στρατηγικές επίσκεψης
- Εκκίνηση από τυχαία έγγραφα
- Εκκίνηση από "σημαντικά" έγγραφα
Ταμιευτήρας εγγράφων
- Αποθηκεύει συμπιεσμένα έγγραφα και αθροίσματα ελέγχου
- Μεγαλύτερη συμπίεση συνήθως σημαίνει μικρότερη ταχύτητα
- Το Google προτιμάει το γρηγορότερο zlib που δινει συμπίεση 3:1 από το bzip2 θα έδινε 4:1 αλλά είναι πολύ πιο αργό
Μηχανή αναζήτησης | Αριθμός διαθέσιμων εγγράφων |
Google | > 4,2 δις |
AllTheWeb | > 3,1 δις |
Δημιουργός ευρετηρίου
- Υπεύθυνος για την δημιουργία του αντεστραμένου ευρετηρίου και του ταμιευτήρα συνδέσμων
- Ανάλυση εγγράφων και διαχωρισμός σε όρους (λέξεις) από τις οποίες προκύπτει το αντεστραμένο ευρετήριο
- Οι όροι μπορεί να απλοποιηθούν πριν την αποθήκευση τους, π.χ. κεφαλαία σε μικρά
- Από έναν όρο μπορεί να προκύψουν περισσότερες από μία καταχωρήσεις, π.χ. U.S.A. → [U.S.A., USA] ή on-line → [online, on, line, on-line]
- Ανάκτηση συνδέσμων και αποθήκευση τους στον ταμιευτήρα συνδέσμων
Αντιστραμμένο ευρετήριο
- Αποθηκεύει τις εξής πληροφορίες για κάθε όρο:
- Συχνότητα εμφάνισης του όρου σε κάθε έγγραφο
- Σχετικότητα του όρου με κάθε έγγραφο στο οποίο συναντάται
- Τοποθεσία του ορου σε κάθε έγγραφο στο οποίο συναντάται
- Συνήθως η σχετικότητα ενός όρου με ενα έγγραφο υπολογίζεται ως εξής: TF * log(IDF) [cf. Salton]
- TF = συχνότητα εμφάνισης του όρου στο συγκεκριμένο έγγραφο
- IDF = αντιστραμμένη συχνότητα εγγράφου ως προς τον όρο = συνολικος αριθμός εγγράφων / αριθμός εγγράφων που περιέχουν τον όρο
- Aν έχουμε 1000 έγγραφα και ο όρος εμφανίζεται σε 950 από αυτα τοτε log(1000/950) = 0.02
- Aν έχουμε 1000 έγγραφα και ο όρος εμφανίζεται σε 50 από αυτα τοτε log(1000/5) = 2.3
- Ο υπολογισμός αυτός διακρίνει όρους με μεγάλη συχνοτητα σε λίγα έγγραφα
Ταμιευτήρας συνδέσμων
- Για κάθε έγγραφο καταχωρεί:
- Τους συνδέσμους που οδηγούν σε αυτό το έγγραφο
- Τους συνδέσμους που οδηγούν σε άλλα έγγραφα
- Το κείμενο των συνδεσμων
- Στατιστικά τα οποία είναι χρήσιμα για των προσδιορισμό "σημαντικών" σελίδων ανεξαρτήτως των όρων αναζήτησης
Βαθμολογητής εγγράφων
- Βαθμολόγηση με βάση τις αναφορές
- Αν ένα έγγραφο έχει πολλούς εξωτερικούς συνδέσμους που οδηγούν σε αυτήν τότε μπορούμε να πούμε πως είναι "αυθεντία" σε κάποιο θέμα
- Αν ένα έγγραφο περιέχει πολλούς συνδέσμους που οδηγούν σε "αυθεντίες" τότε είναι σημαντικός κόμβος
- Βαθμολόγηση με βάση την πιθανότητα επίσκεψης
- 'Ένας επισκέπτης που ξεκινάει από ένα τυχαίο έγγραφο και ακολουθεί τυχαίους συνδέσμους έχει μεγαλύτερη πιθανότητα να φτάσει σε κάποια έγγραφα από ότι σε κάποια άλλα
- PageRank
- Ο αλγόριθμος που χρησιμοποιεί το Google
- P(A) = (1-d) + d(P(T1)/C(T1) + ... + P(Tn)/C(Tn))
- P(A): PageRank της σελίδας A
- PC(Ti): Ο αριθμός εξερχομένων συνδέσμων της σελίδας Ti
- d: Μια σταθερά μεταξύ 0 και 1 που αντιπροσωπεύει την πιθανότητα ο χρήστης να συνεχίσει την πλοήγηση του ακολουθώντας ακόμη έναν σύνδεσμο
Μηχανή αναζήτησης
- Δέχεται ως ερώτηση ένα συνδιασμό όρων
- Συνδιάζει την ανέξαρτητη βαθμόλογια κάθε εγγράφου που περιέχει όλους τους όρους με την βαθμολογία κάθε όρου σε κάθε έγγραφο που παρουσιάζεται
- Συνήθως δεν είναι γνωστο πώς γίνεται αυτός ο συνδιασμός
- Παρουσιαζει τα έγγραφα ανάλογα με την βαθμολογία τους
Ποσοτική αποτίμηση
- Ακρίβεια
- Από το σύνολο των εγγράφων που επέστρεψε η μηχανή αναζήτησης πόσα είναι σχετικά;
- Πιθανόν τα σχετικά έγγραφα να παρουσιάζονται πρώτα και τα άσχετα τελευταία οπότε μπορεί η μικρή ακρίβεια να μην είναι μεγάλο πρόβλημα
- Κάλυψη
- Από το σύνολο των σχετικών εγγράφων πόσα επέστρεψε η μηχανή αναζήτησης;
- Δύσκολο έως αδύνατο να υπολογίσουμε τον αριθμό των όλων σχετικών εγγράφων
Αποτίμηση μηχανών αναζήτησης
- Ταχύτητα απάντησης
- Χαλασμένοι σύνδεσμοι
- Πολλαπλές όμοιες απαντήσεις
- Σχετικά αποτελέσματα μέσα στην πρώτη σελίδα αποτελεσμάτων
- Ειδικές κατηγορίες χρηστων: άτομα με ειδικές αναγκες, ηλικιωμένοι
Διαχωρισμός σε συστοιχίες
- Προϋπόθεση: παρόμοια έγγραφα έχουν παρόμοια λεξικά ιστογράμματα
- Ιεραρχικός διαχωρισμός σε συστοιχίες
- Ξεκινάμε υπολογίζοντας τις ομοίοτητες των εγγράφων ανά δύο
- Διαλέγουμε τα δύο έγγραφα με την μέγιστη ομοιότητα και δημιουργούμε μια συστοιχία
- Συνεχίζουμε συγκρινοντας έγγραφα και συστοιχίες μεταξύ τους
- Επαναληπτικός (ευρετικός) διαχωρισμός σε συστοιχίες
- Ξεκινάμε με κάποιες συστοιχίες
- Συγκρίνουμε κάθε έγγραφο με όλες τις συστοιχίες και αν η ομοιότητα του με κάποια από αυτές ξεπερνάει ένα επιλεγμένο όριο το τοποθετούμε εκεί
- Γρήγορη μέθοδος αλλά με μικρότερη ακρίβεια
- Χρήσεις
- Μετά απο μία αναζήτηση: διαχωρισμός των αποτελεσμάτων σε συστοιχίες με βάση την μεταξύ τους ομοιότητα
- Πριν την αναζήτηση: αναζήτηση σε μια απο τις συστοιχίες με βαση την ομοίοτητα της ερώτησης με τις υπάρχουσες συστοιχίες
Ομαδοποίηση
- Με βάση μία υπάρχουσα ιεραρχία από κατηγορίες (π.χ. Yahoo) σε ποιά κατηγορία ανήκει ένα συγκεκριμένο έγγραφο;
Εκεί όπου οι μηχανές αναζήτησης δεν φτάνουν
- Οι μηχανές αναζήτησης βλέπουν λιγότερο από 1% των διαθέσιμων εγγράφων
- Παραδείγματα:
- Βάσεις δεδομένων
- Μικρές αγγελίες
- Πληστειριασμοί
- Oι εκδόσεις του μεγαλύτερου εκδότη παγκοσμίως, της Αμερικανίκης κυβέρνησης, δεν ειναι προσβάσιμες μεσω των μηχανών αναζήτησης
Οι μεγαλύτεροι σε βάθος δικτύακοι τόποι
- Σύμφωνα με την Brightplanel Corporation
Name | Type | Web Size (GBs) | Rec Num (000) |
National Climatic Data Center (NOAA) | Public | 366,000 | 41,012,794 |
NASA EOSDIS | Public | 219,600 | 24,607,676 |
National Oceanographic (combined with Geophysical) Data Center (NOAA) | Public/Fee | 32,940 | 3,691,151 |
Alexa | Public (partial) | 15,860 | 1,777,221 |
Right-to-Know Network (RTK Net) | Public | 14,640 | 1,640,512 |
MP3.com | Public | 4,300 | 481,844 |
Αναζήτηση εικόνων με βάση τα συμφραζόμενα
- Έτσι δουλεύουν οι περισσότερες μηχανές αναζήτησης
- Αναζητούμε τις λέξεις κλειδία:
- στο τμήμα alt="" της εικόνας
- στις λέξεις κοντά στην εικόνα
- στο όνομα του αρχείου
Αναζήτηση εικόνων με βάση το περιεχόμενο
- Χρησιμοποιούμε χαρακτηριστικά της εικόνας όπως
- η τοποθέτεση των απεικονισθέντων αντικειμένων στον χώρο και η σχετική τους διάταξη (πιθανώς αργή αναζήτηση)
- το χρωματικό ιστόγραμμα (γρηγορότερη αναζήτηση)
Αναζήτηση σε ομότιμα δίκτυα
- Μη αυστηρώς δομημένα δίκτυα
- Gnutella (BFS)
- Freenet (DFS)
- Δυνατότητα αναζήτησης με βάση το κλειδί του υπό αναζήτηση αντικειμένου (πχ όνομα αρχείου) αλλά και ένα μέρος του περιεχομένου (πχ MP3 info)
- Μη αποδοτική αναζήτηση, δίχως εγγυήσεις ως προς την εύρεση αντικειμένων ακόμη και αν αυτά είναι διαθέσιμα
- Βελτιστοποίηση της μεθόδου επιλογής κόμβων για την δρομολόγηση της ερώτησης με βάση κριτήρια όπως ο αριθμός και η ποιότητα των αποτελεσμάτων τους σε προηγούμενες αναζητήσεις, η ταχύτητα απάντησης, κτλ.
- Εναλλακτική λύση η δημιουργία τοπικών υπέρ-κόμβων που μπορούν να απαντήσουν ερωτήσεις εκ μέρους όλων των κόμβων που απέχουν N βήματα
- Αυστηρώς δομημένα δίκτυα
- Chord
- CAN
- Tapestry
- Kademlia
- Κάθε αντικείμενο έχει μία (ή παραπάνω) προσδιορισμένη θέση στο δίκτυο ανάλογα με τις ιδιότητες του
- Η ανάκτηση οποιοδήποτε αντικειμένου υπάρχει στο δίκτυο είναι εγγυημένη μέσα σε ένα οριοθετημένο αριθμό βημάτων
- Η αναζήτηση με βάση το περιεχόμενο είναι δυσκολότερη και δεν παρέχεται εγγενώς
- Τοπικό ευρετήριο, μεγάλο κόστος για την επικοινωνία με όλους τους κόμβους του δικτύου
- Καθολικό ευρετήριο, μεγάλο κόστος για τον συνδυασμό αποτελεσμάτων
Περαιτέρω μελέτη
- Automatic text processing, Gerald Salton
- The Anatomy of a Large-Scale Hypertextual Web Search Engine, Sergey Brin and Lawrence Page (http://www7.scu.edu.au/programme/fullpapers/1921/com1921.htm)
- The PageRank Citation Ranking: Bringing Order to the Web. Page, Lawrence; Brin, Sergey; Motwani, Rajeev; Winograd, Terry (http://dbpubs.stanford.edu/pub/1999-66)
- Estimating the Usefulness of Search Engines, Weiyi Meng and King-Lup Liu and Clement T. Yu and Wensheng Wu and Naphtali Rishe (http://csdl.computer.org/comp/proceedings/icde/1999/0071/00/00710146abs.htm)
- Risks of Quantitative Studies, Jakob Nielsen (http://www.useit.com/alertbox/20040301.html)
- The Cluster-Abstraction Model: Unsupervised Learning of Topic Hierarchies from Text Data, Thomas Hofmann (http://www.cs.brown.edu/~th/papers/Hofmann-IJCAI99.pdf)
- Deep Web White Paper (http://brightplanet.com/technology/deepweb.asp)
- VisualSEEk: a fully automated content-based image query system, John R. Smith and Shih-Fu Chang (http://www.ctr.columbia.edu/~jrsmith/html/pubs/acmmm96/acmfin.html)
- The State Hermitage Musuem: QBIC Colour and Layout Searches (http://www.hermitagemuseum.org/fcgi-bin/db2www/qbicSearch.mac/qbic?selLang=English)
Πρότυπα ανταλλαγής επιχειρηματικών εγγράφων
Εισαγωγή
Παραδοσιακά, η πλέον αποτελεσματική μέθοδος επικοινωνίας μιας επιχείρησης
με μία άλλη (Β2Β) στο χώρο του eCommerce (ηλεκτρονικού εμπορίου) ήταν
η ηλεκτρονική ανταλλαγή δεδομένων (Electronic Data Interchange). Η μέθοδος
αυτή άρχισε να εφαρμόζεται από το 1970 και σήμερα καλύπτει τις ανάγκες του
95% των μεγάλων επιχειρήσεων (Fortune 500), επιτρέποντας την ανταλλαγή
σχετικά απλών εγγράφων όπως είναι οι παραγγελίες, τα τιμολόγια και οι ειδοποιήσεις.
Όμως, το EDI τελικά δεν είχε την αναμενόμενη απήχηση (εν μέρει λόγω του
υψηλού κόστους υλοποίησης) και στην πραγματικότητα έχει υιοθετηθεί από λιγότερο
του 5%, του συνόλου των επιχειρήσεων. Επίσης, πολλές φορές τα πρότυπα όπως το
EDIFACT και Ansi EDI (ΗΠΑ) στην πράξη προσαρμόστηκαν στις ανάγκες των εκάστοτε
εταιριών, με αποτέλεσμα τα μηνύματα των εταιριών αυτών τελικά να μην είναι συμβατά
μεταξύ τους. Έτσι, το πρότυπο EDI της FORD είναι διαφορετικό από το πρότυπο EDI
της General Motors και το πρότυπο της Tesco είναι διαφορετικό από εκείνο της
Marks and Spencer. Η έλλειψη ενός καθολικού προτύπου εμποδίζει την ανάπτυξη
πακέτων λογισμικού που θα μπορούσαν να χρησιμοποιηθούν από οποιαδήποτε επιχείρηση,
με αποτέλεσμα η υλοποίηση των συστημάτων EDI να γίνεται επί παραγγελία,
καθιστώντας την λύση αυτή απαγορευτική για τις περισσότερες μικρομεσαίες
επιχειρήσεις.
Το πρότυπο UN/EDIFACT
Το UN / EDIFACT είναι το πιο διαδεδομένο πρότυπο ανταλλαγής ηλεκτρονικών εγγράφων. Χρησιμοποιείται από το 1970 και απευθύνεται κυρίως σε μεγάλες επιχειρήσεις. Είναι μια τεράστια συλλογή επιχειρηματικών εγγράφων.
Τα κύρια χαρακτηριστικά του είναι:
- Τα δεδομένα κρατούνται σε αρχεία χαρακτήρων (ASCII)
- Η γραμμογράφηση των εγγράφων γίνεται με ειδικό τρόπο (επηρεασμένο από την COBOL)
- Επιτρέπονται μετασχηματισμοί των εγγράφων για να καλυφθούν οι περιπτώσεις ασυμβατότητας
- Οι ενδιαφερόμενες επιχειρήσεις γίνονται μέλη ενός VAN (Value Added Network) και ανταλλάσουν δεδομένα με τα άλλα μέλη του
- Τον μετασχηματισμό των εγγράφων, όπως και την πιστοποίηση την αναλαμβάνει ενδιάμεσος φορέας που εγγυάται την ακεραιότητα και ασφαλή μετακίνηση
- Δεν συνηθίζεται επιχειρήσεις να ανταλλάσουν δεδομένα μέσω δημόσιων δυκτίων
- Δεν ορίζονται διεργασίες, το EDIFACT ασχολείται μόνο με απλά έγγραφα
Προβλήματα που παρουσίαζει:
- Το κόστος για τις μικρομεσαίες επιχειρήσεις ήταν απαγορευτικό
- 5% διείσδυση στο σύνολο των επιχειρήσεων
- Είναι ικανοποιητικό για απλά έγγραφα, δεν υποστήριζει διαδικασίες
Τα νέα πρότυπα ανταλλαγής επιχειρηματικών εγγράφων
- UN/CEFACT
- ebXML
- RosettaNet
- BASDA (ebis-XML)
- xCBL
- XBRL
Σημαντική διαφορά είναι ότι τα νέα πρότυπα διαχωρίζουν διεργασίες από τα έγγραφα.
Διαδικασίες
Στον μοντέρνο επιχειρηματικό κόσμο προέκυψε η ανάγκη να γίνει πιο σύνθετη η μέθοδος ανταλλαγής εγγράφων. Ως αποτέλεσμα αυτού είχαμε την διείσδυση των επιχειρηματιών διαδικασιών ως μέρη των προτύπων ηλεκτρονικών εγγράφων.
Με την χρήση διαδικασιών έχουμε ως στόχο να καθορίσουμε:
- Εισαγωγή της επιχειρηματικής λογικής στα πλάισια διεπιχειρησιακών διαδικασιών ανταλλαγής ηλεκτρονικών εγγράφων
- Διασφάλιση μεταφοράς των ηλεκτρονικών εγγράφων, χειρισμός των πιθανών λαθών
- Καθορισμός μεθόδων/πρωτοκόλλων χρήσης, δημιρουγία ενός πλαισίου υλοποίησης με την χρήση διαφανών τεχνολογιών
Παράδειγμα εγγράφου ορισμού διαδικασίας ebXML
<ProcessSpecification name="Simple" version="1.1" uuid="[1234-5678-901234]">
<!-- Business Documents -->
<BusinessDocument name="Catalog Request"/>
<BusinessDocument name="Catalog"/>
<BusinessDocument name="Purchase Order"/>
<BusinessDocument name="PO Acknowledgement"/>
<BusinessDocument name="Credit Request"/>
<BusinessDocument name="Credit Confirm"/>
<BusinessDocument name="ASN"/>
<BusinessDocument name="CreditAdvice"/>
<BusinessDocument name="DebitAdvice"/>
<BusinessDocument name="Invoice"/>
<BusinessDocument name="Payment"/>
<BusinessDocument name="Inventory Report Request"/>
<BusinessDocument name="Inventory Report"/>
<BusinessDocument name="Inventory Report"/>
<Package name="Ordering">
<!-- First the overall MultiParty Collaboration -->
<MultiPartyCollaboration name="DropShip">
<BusinessPartnerRole name="Customer">
<Performs initiatingRole="requestor"/>
<Performs initiatingRole="buyer"/>
<Transition fromBusinessState="Catalog Request" toBusinessState="Create Order"/>
</BusinessPartnerRole>
<BusinessPartnerRole name="Retailer">
<Performs respondingRole="provider"/>
<Performs respondingRole="seller"/>
<Performs initiatingRole="Creditor"/>
<Performs initiatingRole="buyer"/>
<Performs initiatingRole="Payee"/>
<Performs respondingRole="Payor"/>
<Performs initiatingRole="requestor"/>
<Transition fromBusinessState="Create Order" toBusinessState="Check Credit"/>
<Transition fromBusinessState="Check Credit" toBusinessState="Create Order"/>
</BusinessPartnerRole>
<BusinessPartnerRole name="DropShip Vendor">
<Performs respondingRole="seller"/>
<Performs initiatingRole="payee"/>
<Performs respondingRole="provider"/>
</BusinessPartnerRole>
<BusinessPartnerRole name="Credit Authority">
<Performs respondingRole="credit service"/>
<Performs respondingRole="payor"/>
</BusinessPartnerRole>
</MultiPartyCollaboration>
<!-- Now the Binary Collaborations -->
<BinaryCollaboration name="Request Catalog">
<InitiatingRole name="requestor"/>
<RespondingRole name="provider"/>
<BusinessTransactionActivity name="Catalog Request" businessTransaction="Catalog Request" fromAuthorizedRole="requestor" toAuthorizedRole="provider"/>
</BinaryCollaboration>
<BinaryCollaboration name="Firm Order" timeToPerform="P2D">
<Documentation>timeToPerform = Period: 2 days from start of transaction</Documentation>
<InitiatingRole name="buyer"/>
<RespondingRole name="seller"/>
<BusinessTransactionActivity name="Create Order" businessTransaction="Create Order" fromAuthorizedRole="buyer" toAuthorizedRole="seller"/>
</BinaryCollaboration>
<BinaryCollaboration name="Product Fulfillment" timeToPerform="P5D">
<Documentation>timeToPerform = Period: 5 days from start of transaction</Documentation>
<InitiatingRole name="buyer"/>
<RespondingRole name="seller"/>
<BusinessTransactionActivity name="Create Order" businessTransaction="Create Order" fromAuthorizedRole="buyer" toAuthorizedRole="seller"/>
<BusinessTransactionActivity name="Notify shipment" businessTransaction="Notify of advance shipment" fromAuthorizedRole="buyer" toAuthorizedRole="seller"/>
<Start toBusinessState="Create Order"/>
<Transition fromBusinessState="Create Order" toBusinessState="Notify shipment"/>
<Success fromBusinessState="Notify shipment" conditionGuard="Success"/>
<Failure fromBusinessState="Notify shipment" conditionGuard="BusinessFailure"/>
</BinaryCollaboration>
<BinaryCollaboration name="Inventory Status">
<InitiatingRole name="requestor"/>
<RespondingRole name="provider"/>
<BusinessTransactionActivity name="Inventory Report Request" businessTransaction="Inventory Report Request" fromAuthorizedRole="requestor" toAuthorizedRole="provider"/>
<BusinessTransactionActivity name="Inventory Report" businessTransaction="Inventory Report" fromAuthorizedRole="provider" toAuthorizedRole="requestor"/>
</BinaryCollaboration>
<BinaryCollaboration name="Credit Inquiry">
<InitiatingRole name="creditor"/>
<RespondingRole name="credit service"/>
<BusinessTransactionActivity name="Check Credit" businessTransaction="Check Credit" fromAuthorizedRole="creditor" toAuthorizedRole="credit service"/>
</BinaryCollaboration>
<BinaryCollaboration name="Credit Payment">
<InitiatingRole name="payee"/>
<RespondingRole name="payor"/>
<BusinessTransactionActivity name="Process Credit Payment" businessTransaction="Process Credit Payment" fromAuthorizedRole="payee" toAuthorizedRole="payor"/>
</BinaryCollaboration>
<!-- A compound BinaryCollaboration for illustration purposes-->
<BinaryCollaboration name="Credit Charge">
<InitiatingRole name="charger"/>
<RespondingRole name="credit service"/>
<CollaborationActivity name="Credit Inquiry" binaryCollaboration="Credit Inquiry" fromAuthorizedRole="charger" toAuthorizedRole="credit service"/>
<CollaborationActivity name="Credit Payment" binaryCollaboration="Credit Payment" fromAuthorizedRole="charger" toAuthorizedRole="payor"/>
<Transition fromBusinessState="Credit Inquiry" toBusinessState="Credit Payment"/>
</BinaryCollaboration>
<BinaryCollaboration name="Fulfillment Payment">
<InitiatingRole name="payee"/>
<RespondingRole name="payor"/>
<BusinessTransactionActivity name="Process Payment" businessTransaction="Process Payment" fromAuthorizedRole="payee" toAuthorizedRole="payor"/>
</BinaryCollaboration>
<!-- Here are all the Business Transactions needed -->
<BusinessTransaction name="Catalog Request">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Catalog Request"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Catalog"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Create Order">
<RequestingBusinessActivity name="" isNonRepudiationRequired="true" timeToAcknowledgeReceipt="P2D" timeToAcknowledgeAcceptance="P3D">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Purchase Order"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="" isNonRepudiationRequired="true" timeToAcknowledgeReceipt="P5D">
<DocumentEnvelope isPositiveResponse="true" businessDocument="PO Acknowledgement"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Check Credit ">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Credit Request"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Credit Confirm"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Notify of advance shipment">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="ASN"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="" timeToAcknowledgeReceipt="P2D"/>
</BusinessTransaction>
<BusinessTransaction name="Process Credit Payment">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="CreditAdvice"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="DebitAdvice"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Process Payment">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Invoice"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Payment"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Request Inventory Report">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Inventory Report Request"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Inventory Report"/>
</RespondingBusinessActivity>
</BusinessTransaction>
<BusinessTransaction name="Inventory Report">
<RequestingBusinessActivity name="">
<DocumentEnvelope isPositiveResponse="true" businessDocument="Inventory Report"/>
</RequestingBusinessActivity>
<RespondingBusinessActivity name=""/>
</BusinessTransaction>
</Package>
</ProcessSpecification>
Έγγραφα
Τα ηλεκτρονικά έγγραφα περιέχουν την δομή της επιχειρηματικής πληροφορία. Κάθε έγγραφο συνήθως αποτελείται από δύο διακριτά μέρη: (1) την επικεφαλίδα, η οποία περιέχει στοιχεία για το σύστημα και την διεργασία και (2) τα επιχειρηματικά δεδομένα.
Στα σύγχρονα πρότυπα τα πρότυπα χρησιμοποιούν XML για την αναπαράσταση των δεδομένων, ενώ η πιστοποίηση και η περιγραφή της δομής γίνεται με την χρήση DTD ή X-Schema.
Παράδειγμα εγγράφου xCBL (Τιμολόγιο)
<Invoice>
<InvoiceHeader>
<InvoiceNumber>Invoice/InvoiceHeader/InvoiceNumber</InvoiceNumber>
<InvoiceIssueDate>2003-01-01T00:00:01</InvoiceIssueDate>
<InvoicePurpose>
<InvoicePurposeCoded>Original</InvoicePurposeCoded>
</InvoicePurpose>
<InvoiceType>
<InvoiceTypeCoded>MeteredServicesInvoice</InvoiceTypeCoded>
</InvoiceType>
</InvoiceHeader>
<InvoiceDetail>
<ListOfInvoiceItemDetail>
<InvoiceItemDetail>
<InvoiceBaseItemDetail>
<LineItemNum>
<core:BuyerLineItemNum>1001</core:BuyerLineItemNum>
</LineItemNum>
<InvoicedQuantity>
<core:QuantityValue>1002</core:QuantityValue>
<core:UnitOfMeasurement>
<core:UOMCoded>1</core:UOMCoded>
</core:UnitOfMeasurement>
</InvoicedQuantity>
</InvoiceBaseItemDetail>
<InvoicePricingDetail>
<core:ListOfPrice>
<core:Price>
<core:UnitPrice>
<core:UnitPriceValue>1003</core:UnitPriceValue>
</core:UnitPrice>
</core:Price>
</core:ListOfPrice>
</InvoicePricingDetail>
</InvoiceItemDetail>
</ListOfInvoiceItemDetail>
</InvoiceDetail>
</Invoice>
Το πρότυπο UN/CEFACT
Το UN / CEFACT αποτελεί απόγονο του UN / EDIFACT. Είναι ουσιαστικά η μετατροπή των παραδοσιακών EDI μηνυμάτων σε αντίστοιχα XML.
Τα βασικά του χαρακτηριστικά είναι:
- Επικεντρώνεται στα έγγραφα και όχι στις διαδικασίες
- Χρησιμοποιεί XML για την περιγραφή των δεδομένων
- Για την μεταφορά και την μοντελλοποίηση των διεργασιών προτείνει την χρήση του προτύπου ebXML
- Είναι το επίσημο πρότυπο των Ηνωμένων Εθνών και τυγχάνει μεγάλης υποστήριξης
Το πρότυπο είναι ακόμα υπό ανάπτυξη και δεν υπάρχουν διαθέσιμε έγγραφα δημοσιευμένα.
Η πρωτοβουλία ebXML
Το πρότυπο ebXML ορίζει ένα σύνολο από προδιαγραφές οι οποίες επιτρέπουν σε επιχειρήσεις ανεξάρτητα από το μέγεθος τους και την γεωγραφική τους τοποθεσία, να πραγματοποιούν συναλλαγές μέσω διαδικτύου.
Χαρακτηριστικά του ebXML:
- Ασχολείται με τον σχεδιασμό των διαδικασιών (Business Processes)
- Δεν παρέχει δομές ηλεκτρονικών εγγράφων, αλλά επιτρέπει τον καθορισμό αυτών ανά περίπτωση (Business Messages)
- Αρχιτεκτονική του ebXML είναι τμηματική (modular)
- το πρότυπο βασίζεται στην οικογένεια των τεχνολογιών της XML
- Η μεταφορά δεδομένων γίνεται με την χρήση SOAP, HTTP, ενώ στη τελευταία έκδοση υποστηρίζεται και η χρήση web services
- Παρέχονται υπηρεσίες καταλόγου εγγράφων και εταιριών με την χρήση των registry και repository
Η πρωτοβουλία xCBL
το πρότυπο xCBL αναπτύχθηκε απο μια συνεργασία των εταιριών Microsoft, SAP και Commerce One ως μια βασική συλλογή ηλεκτρονικών εγγράφων για χρήση στο e-Business.
Χαρακτηριστικά του xCBL:
- Βασιζεται στην XML
- Τα έγγραφα διαθέτουν σχήματα δεδομένων σε X-Schema
- Δεν ορίζει επιχειρηματικές διαδικασίες
- Διαθέται ονοματολογίες ανά περιοχές χρήσης (functional areas)
Περιοχές χρήσης xCBL
- Core
- Order Management
- Pre Order Management
- Financial
- Material Management
- Message Management
- Application Integration
- Catalog
- Statistics and refactoring
Η πρωτοβουλία RosettaNet
το πρότυπο RossetaNet αποτελεί μια προσπάθεια καθορισμού μεθόδου ανταλλαγής ηλεκτρονικών εγγράφων στο χώρο του e-Business. Είναι αρκετά διαδεδομένο και έχει την υποστήριξη 500 και πλέον οργανισμών και επιχειρήσεων.
Βασικά Χαρακτηριστικά του προτύπου είναι:
- Βασίζεται στην XML και άλλες συγγενείς τεχνολογίες
- Εστιάζει στις επιχειρηματικές διαδικασίες και όχι στα έγγραφα
- Προτείνεται το RNIF (RossetaNet Implementation Framework)
- Η ανταλλάγη των εγγράφων γίνεται με απευθείας σύνδεση των ενδιαφερομένων
- Υποστηρίζεται από την πλατφόρμα και ενδιάμεσος φορέας, αλλά δεν θεωρείται καλή πρακτική
- Το πρότυπο προβλέπει χειρισμό λαθών και κάθε μήνυμα ενισχύεται με επικεφαλίδα που περιέχει σχετικές πληροφορίες
- Η μεταφορά των δεδομένων γίνεται μέσω των πρωτοκόλλων HTTP, SMTP ή από οποιοδήποτε άλλο πρωτόκολλο μεταφοράς δεδομένων (ανοιχτή αρχιτεκτονική)
- Για την κωδικοποίηση χρησιμοποιείται MIME (RFC 2311)
- Ενίσχυση της ασφάλειας πρόβλεπεται χρησιμοποιώντας HTTPS, S/MIME, SSL κτλ.
Η πρωτοβουλία BASDA (ebis-XML)
Το ebis-XML είναι ένα πρότυπο του οργανισμού BASDA (Business and Accountancy Software Developers Association) για ανταλλαγή δεδομένων σε εφαρμογές e-Business. Επιτρέπει την άμεση ανταλλαγή των παρακάτω εγγράφων:
- Παραγγελιών
- Τιμολογίων
- Παραστατικά Πληρωμών
- Ειδοποιήσεις παράδοσης
- Intrastat
Βασικά χαρακτηριστικά του προτύπου:
- Τα έγγραφα βασίζονται στην XML
- Διατίθενται σχήματα δεδομένων σε X-Schema
- Μηχανισμοί μεταφοράς των εγγράφων τα πρωτόκολλα SMTP, IMAP, POP, HTTP
- Παρέχονται XSL stylesheet για την μετατροπή των εγγράφων σε HTML, PDF κτλ.
- Για την διασφάλιση της ακεραιότητας των δεδομένων έχουν ενσωματωθει αθροίσματα ελέγχου (CRC Checksums) ή/και μεταφορά μέσω HTTPS (SSL)
- Υποστηρίζεται από 120 εταιρίες λογισμικού
Η πρωτοβουλία XBRL
Το πρότυπο XBRL (eXtensive Business Reporting Language) αποτελεί μια προσπάθεια δημιουργίας ενός προτύπου που θα χρησιμοποιείται για την δημιουργία, ανταλλαγή και σύγκριση εταιρικών δεδομένων. Αυτά μπορεί να είναι οικονομικά μεγέθη, στατιστικά στοιχεία κτλ.
Το πρότυπο αυτό είναι εξέλιξη του προτύπου XFRML (eXtensive Financial Reporting Markup Language) που δημιουργήθηκε το 2000.
Τα κύρια χαρακτηριστικά του είναι:
- Βασίζεται στην τεχνολογία XML, X-Schema και XLink
- Δεν καθορίζει μέθοδο μοντελλοποίησης διαδικασιών, παρά μόνο στα έγγραφα
- Τα έγγραφα δημιουργούνται από στοιχεία (elements) XML τα οποία προϋπάρχουν στην κύρια (core) γλώσσα του XBRL
- Δεν προβλέπει συμβατότητα με κανένα άλλο πρότυπο πχ. ebXML, OFX/IFX (Open Financial Exchange)
- Υποστηρίζεται από την OASIS (ebXML)
Σύγκριση
Κριτήρια σύγκρισης
- Επεκτασιμότητα
- Ευκολία στην υλοποίηση
- Συμβατότητα με άλλα πρότυπα
- Υποστήριξη προτύπου
- Ωριμότητα
- Άδεια χρήσης
Αποτελέσματα σύγκρισης
Το έργο PRAXIS
Το έργο "PRAXIS: Διασύνδεση εφαρμογών και διενέργεια Δια-επιχειρησιακών δοσοληψιών μέσω διαδικτύου" αποτελεί μια προσπάθεια έρευνας και πιλοτικής εφαρμογής μεθοδολογιών, υποδομών και διατάξεων που θα επιτρέπουν στην τυπική - συνήθως μικρή και μεσαία - Ελληνική επιχείρηση να διενεργήσει ένα σύνολο BUsiness-to-Business Λειτουργιών.
Οι συναλλασόμενοι φορείς μπορεί να είναι:
- Επιχειρήσεις
- Τραπεζικοί οργανισμοί
- Κρατικοί φορείς (TaxisNet, Εθνική στατιστική υπηρεσία)
- Λογιστικά γραφεία
Κύρια χρακτηριστικά του συστήματος είναι:
- Υλοποιείται ειδικό πρότυπο εγγράφων βασισμένο σε XML
- Επιτρέπει την ασύγχρονη αποστολή/λήψη ηλεκτρονικών εγγράφων
- Υποστηρίζει επιχειρησιακές διαδικασίες
- Η μεταφορά των δεδομένων γίνεται με την χρήση TCP/IP, Web Services, SOAP κτλ.
- Υπάρχει πρόβλεψη για υποστήριξη άλλων προτύπων π.χ. xCBL, ebXML κτλ.
Η αρχιτεκτονική του συστήματος απεικονίζεται στο παρακάτω σχήμα:
Παραπομπές
- BASDA.
e-business: An overview (http://www.basda.org/pub_img/uploads/A5%20e-commerce%280303.pdf), March 2003.
- Basda
ebis-xml, 2004.
Presentation.
- David Booth, Hugo Haas,
Francis McCabe, Eric Newcomer, Michael Champion, Chris Ferris, and David
Orchard.
Web services architecture (http://www.w3.org/ws-arch/).
Technical report, W3C, February 2004.
- Tim Bray, Jean Paoli,
C.M. Sperberg-McQueen, Eve Maler, and Francois Yergeau.
Extensible markup language
(xml) 1.0.
Technical report, W3C, February 2004.
- Un / cefact: United nations centre for
trade facilitation and electronic business.
- James Clark.
Xsl transofrmations (xslt) (http://www.w3.org/TR/xslt/).
Technical report, W3C, November 1999.
- ebXML
Requirements Team.
ebxml requirements specification
v1.06.
Technical report, ebXML, May 2001.
- Phillip Engel, Walter
Hamscher, Geoffrey Shuetrim, David vun Kannon, and Hugh Wallis.
Extensible business reporting language v2.1 (http://www.xbrl.org/).
Draft, XBRL, December 2003.
- United Nations
Electronic Commision for Europe.
Un / edifact:
United nations directories for electronic data interchange for
administration, commerce and transport.
- Mathew MacKenzie.
ebxml messaging services specification v2.1 (http://www.oasis-open.org/committees/download.php/6130/wd-ebMS-2_1-04.pdf).
Draft, ebXML, March 2004.
- RosettaNet.
Rosetta implementation framework (rnif):
Core specification.
Technical report, RosettaNet, March 2002.
- xcbl (xml common business
language).