Τεχνολογικά θέματα υποδομών ηλεκτρονικού εμπορίου

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
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:

Αρχιτεκτονική του παγκόσμιου ιστού

Προσδιορισμός στοιχείων με URI

Ο προσδιορισμός στοιχείων στο πρωτόκολλο HTTP γίνεται με τη χρήση των Uniform Resource Identifiers. Η χρήση τους επιτρέπει τον προσδιορισμό άλλων σελίδων τοπικά, σε άλλα μηχανήματα, καθώς και ερωτήσεων:
http://www.dmst.aueb.gr/dds
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 /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

Κατηγορίες ενεργού περιεχομένου

Ενεργό περιεχόμενο στον πελάτη

Επικοινωνία πελάτη εξυπηρετητή

Τρόποι υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή

Τεχνολογίες υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή

Η τεχνολογία CGI

Υλοποίηση

Προβλήματα

Η τεχνολογία Fast CGI

Υλοποίηση στον εξυπηρετητή

Προβλήματα

Παράδειγμα

#!/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

Υλοποίηση

Πλεονεκτήματα

Υποστήριξη

Παράδειγμα

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

Παράδειγμα (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 εξυπηρετητή

Υλοποιήσεις

Μεταφορά δεδομένων

Μεταφορά δεδομένων από τον πελάτη στον εξυπηρετητή μέσω HTTP μπορεί να γίνει με τους παρακάτω τρόπους:

Υλοποίηση συνεδρίας

Παραδείγματα 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

Απλοί κανόνες

Βιβλιογραφία

Διαχείριση υπολογιστικών συστημάτων

Σταθμοί εργασίας

Κύριες εργασίες:

Εξυπηρετητές

Σημαντικά στοιχεία:


Εξυπηρετητές σε ικρίωμα (rack)

Υπηρεσίες

Βασικές αρχές και προσεγγίσεις:

Τεχνικές αποσφαλμάτωσης

Βασική στρατηγική: Δύο τεχνικές: Παραδείγματα εργαλείων:

Η αρχή της μοναδικής διόρθωσης

Χώροι ονοματοδοσίας

Χώροι ονομάτων: Πολιτικές ονοματοδοσίας: Διαδικασίες διαχείρισης:

Καταστροφές: σχεδιασμός και αποκατάσταση

Τύποι καταστροφών Προϋπολογισμός = κόστος καταστροφής * πιθανότητα καταστροφής

Ενέργειες:

Διαχείριση αλλαγών

Αναβαθμίσεις

Διαδικασία αναβάθμισης υπηρέτη:
  1. Κατάσταση προσφερομένων υπηρεσιών
    1. Ποιες υπηρεσίες προσφέρει ο υπηρέτης
    2. Ποιοι τις χρησιμοποιούν
    3. Ποιο λογισμικό τις προσφέρει
  2. Επιβεβαίωση πως κάθε λογισμικό θα δουλεύει στη νέα έκδοση
  3. Προγραμματισμός διαδικασίας ελέγχου για κάθε υπηρεσία
  4. Προγραμματισμός εφεδρείας
  5. Επιλογή του κατάλληλου χρόνου συντήρησης
  6. Ανακοίνωση
  7. Εκτέλεση των ελέγχων στην παλιά υπηρεσία
  8. Αναβάθμιση (μαζί με βοηθό)
  9. Επανάληψη των ελέγχων
  10. Αν αποτύχει, υποχώρηση σύμφωνα με την εφεδρεία
  11. Επικοινωνία με τους πελάτες


Αναβάθμιση στην υπηρεσία TAXISnet.

Συγκέντρωση και αποκέντρωση

Για τις αποφάσεις σχετικά με συγκέντρωση και αποκέντρωση χρησιμοποιούμε τα παρακάτω στοιχεία: Υποψήφιοι για κεντρική διαχείριση:

Η υπηρεσία βοηθείας

Η υπηρεσία βοηθείας σχεδιάζεται με βάση τα παρακάτω στοιχεία: Βασικό στοιχείο για την εύρυθμη λειτουργία της είναι ένα πληροφοριακό σύστημα για την καταγραφή και διαχείριση των αιτήσεων. Κάθε αίτηση αποκτά ένα αναγνωριστικό στοιχείο (ticket) με το οποίο τα στελέχη της υπηρεσίας και ο τελικός πελάτης ενημερώνονται για την πρόοδο.

Υποστήριξη πελατών

Βήματα
  1. Χαιρετισμός
  2. Μαθαίνουμε το πρόβλημα
  3. Επαναλαμβάνουμε το πρόβλημα και συμφωνούμε με τον πελάτη
  4. Δοκιμάζουμε το πρόβλημα
  5. Μαζεύουμε προτάσεις για την αντιμετώπιση
  6. Επιλέγουμε τη λύση
  7. Εκτελούμε τη λύση
  8. Ελέγχουμε τη λύση
  9. Συμφωνούμε με τον πελάτη πως το πρόβλημα έχει λυθεί

Οργάνωση του κέντρου πληροφορικής


Εσωτερικό αίθουσας υπολογιστών


Το κέντρο υπολογιστών στο εργαστήριο πολυμέσων του ΟΤΕ

Δίκτυα

Η τοπολογία του δικτύου μπορεί να καθοριστεί:


Σημαντικό τμήμα της δικτύωσης είναι το ενδιάμεσο πλαίσιο τερματισμού (intermediate distribution frame (IDF)) Σε αυτό καταλήγουν οι δικτυακές συνδέσεις ενός ορόφου και με τη χρήση καλωδίων μπορούν να συνδεθούν οι υπολογιστές με το δίκτυο. Κάθε πλαίσιο πρέπει να είναι αριθμημένο με το κτίριο, όροφο και αριθμό του πλαισίου. Κάθε σύνδεση έχει έναν ξεχωριστό αριθμό με βάση τη θέση της και πιθανώς και τον αντίστοιχο υποδοχέα. Έτσι π.χ. η σύνδεση 1/4/2/12Α μπορεί να είναι η σύνδεση στο κτίριο 1, όροφο 4, πλαίσιο 2, γραφείο 12, υποδοχέας Α.


Σε μεγάλες εγκαταστάσεις το ενδιάμεσο πλαίσιο τερματισμού τερματίζεται σε ένα κύριο πλαίσιο τερματισμού (main distribution frame (MDF)) το οποίο συνήθως είναι στο κέντρο υπολογιστών.

Βασικές αρχές:


Πλαίσιο τερματισμού - διακρίνονται τα συστήματα αδιάλειπτης τροφοδοσίας στο κάτω μέρος.

Υπηρεσίες email

Λειτουργικά στοιχεία: Βασικά στοιχεία για τη σωστή της υπηρεσίας email:

Αντίγραφα εφεδρείας και ανάκτηση

Αντίγραφα εφεδρείας χρειάζονται όταν: Για βελτιστοποίηση της διαδικασίας, διαχωρίζουμε τα παρακάτω αντίγραφα εφεδρείας Κάθε επίπεδο περιέχει τις αλλαγές από το προηγούμενο μικρότερο επίπεδο.

Πρόσθετα στοιχεία:

Βιβλιογραφία

Ασκήσεις

  1. Παραθέστε τις υπηρεσίες που προσφέρει το κέντρο υπολογιστών του Πανεπιστημίου.
  2. Δώστε ένα παράδειγμα όπου διορθώνεται το σύμπτωμα αντί για την αιτία.
  3. Περιγράψτε την πολιτική ονοματοδοσίας και τις διαδικασίες διαχείρισης για τα ονόματα κάτω από το .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 />

Προσδιορισμοί

Παράδειγμα:
<city country="el" id="HER">
<name>Hrakleio</name>
</city>
Ως προσιδιορισμούς συνιστάται να γράφουμε απλές τιμές που ορίζουν:

Οντότητες και σχόλια

Οι παρακάτω οντότητες (entities) μπορούν να οριστούν περιφραστικά:
ΟντότηταΣύνταξη XML
<&lt;
&&amp;
>&gt;
"&quot;
'&apos;

Σχόλια μέσα σε ένα έγγραφο 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());
            }
    }

    Σύνταξη κανονικών εκφράσεων

    Τα παρακάτω σύμβολα έχουν ειδικό νόημα:
    ^
    Αρχή της γραμμής
    $
    Τέλος της γραμμής
    .
    Οποιοδήποτε γράμμα
    [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}
    Μη ελληνικό γράμμα

    Χρήση κανονικών εκφράσεων

    Παράδειγμα: Εύρεση κανονικών εκφράσεων σε αρχείο

    /*
     * 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);
            }
    }

    Βιβλιογραφία

    Μηχανές αναζήτησης

    Η δομή μίας μηχανής αναζήτησης σε μία εικόνα

    Μηχανές αναζήτησης στο Internet

    Επισκέπτες

    Ταμιευτήρας εγγράφων

    Δημιουργός ευρετηρίου

    Αντιστραμμένο ευρετήριο

    Ταμιευτήρας συνδέσμων

    Βαθμολογητής εγγράφων

    Μηχανή αναζήτησης

    Ποσοτική αποτίμηση

    Αποτίμηση μηχανών αναζήτησης

    Διαχωρισμός σε συστοιχίες

    Ομαδοποίηση

    Εκεί όπου οι μηχανές αναζήτησης δεν φτάνουν

    Οι μεγαλύτεροι σε βάθος δικτύακοι τόποι

    Αναζήτηση εικόνων με βάση τα συμφραζόμενα

    Αναζήτηση εικόνων με βάση το περιεχόμενο

    Αναζήτηση σε ομότιμα δίκτυα

    Περαιτέρω μελέτη

    Πρότυπα ανταλλαγής επιχειρηματικών εγγράφων

    Εισαγωγή

    Παραδοσιακά, η πλέον αποτελεσματική μέθοδος επικοινωνίας μιας επιχείρησης με μία άλλη (Β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 και απευθύνεται κυρίως σε μεγάλες επιχειρήσεις. Είναι μια τεράστια συλλογή επιχειρηματικών εγγράφων.

    Τα κύρια χαρακτηριστικά του είναι: Προβλήματα που παρουσίαζει:

    Τα νέα πρότυπα ανταλλαγής επιχειρηματικών εγγράφων

    Σημαντική διαφορά είναι ότι τα νέα πρότυπα διαχωρίζουν διεργασίες από τα έγγραφα.

    Διαδικασίες

    Στον μοντέρνο επιχειρηματικό κόσμο προέκυψε η ανάγκη να γίνει πιο σύνθετη η μέθοδος ανταλλαγής εγγράφων. Ως αποτέλεσμα αυτού είχαμε την διείσδυση των επιχειρηματιών διαδικασιών ως μέρη των προτύπων ηλεκτρονικών εγγράφων.

    Με την χρήση διαδικασιών έχουμε ως στόχο να καθορίσουμε:

    Παράδειγμα εγγράφου ορισμού διαδικασίας 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.

    Τα βασικά του χαρακτηριστικά είναι: Το πρότυπο είναι ακόμα υπό ανάπτυξη και δεν υπάρχουν διαθέσιμε έγγραφα δημοσιευμένα.

    Η πρωτοβουλία ebXML

    Το πρότυπο ebXML ορίζει ένα σύνολο από προδιαγραφές οι οποίες επιτρέπουν σε επιχειρήσεις ανεξάρτητα από το μέγεθος τους και την γεωγραφική τους τοποθεσία, να πραγματοποιούν συναλλαγές μέσω διαδικτύου.

    Χαρακτηριστικά του ebXML:

    Η πρωτοβουλία xCBL

    το πρότυπο xCBL αναπτύχθηκε απο μια συνεργασία των εταιριών Microsoft, SAP και Commerce One ως μια βασική συλλογή ηλεκτρονικών εγγράφων για χρήση στο e-Business.

    Χαρακτηριστικά του xCBL:

    Περιοχές χρήσης xCBL

    Η πρωτοβουλία RosettaNet

    το πρότυπο RossetaNet αποτελεί μια προσπάθεια καθορισμού μεθόδου ανταλλαγής ηλεκτρονικών εγγράφων στο χώρο του e-Business. Είναι αρκετά διαδεδομένο και έχει την υποστήριξη 500 και πλέον οργανισμών και επιχειρήσεων.

    Βασικά Χαρακτηριστικά του προτύπου είναι:

    Η πρωτοβουλία BASDA (ebis-XML)

    Το ebis-XML είναι ένα πρότυπο του οργανισμού BASDA (Business and Accountancy Software Developers Association) για ανταλλαγή δεδομένων σε εφαρμογές e-Business. Επιτρέπει την άμεση ανταλλαγή των παρακάτω εγγράφων: Βασικά χαρακτηριστικά του προτύπου:

    Η πρωτοβουλία XBRL

    Το πρότυπο XBRL (eXtensive Business Reporting Language) αποτελεί μια προσπάθεια δημιουργίας ενός προτύπου που θα χρησιμοποιείται για την δημιουργία, ανταλλαγή και σύγκριση εταιρικών δεδομένων. Αυτά μπορεί να είναι οικονομικά μεγέθη, στατιστικά στοιχεία κτλ.

    Το πρότυπο αυτό είναι εξέλιξη του προτύπου XFRML (eXtensive Financial Reporting Markup Language) που δημιουργήθηκε το 2000.

    Τα κύρια χαρακτηριστικά του είναι:

    Σύγκριση

    Κριτήρια σύγκρισης
    Αποτελέσματα σύγκρισης

    Το έργο PRAXIS

    Το έργο "PRAXIS: Διασύνδεση εφαρμογών και διενέργεια Δια-επιχειρησιακών δοσοληψιών μέσω διαδικτύου" αποτελεί μια προσπάθεια έρευνας και πιλοτικής εφαρμογής μεθοδολογιών, υποδομών και διατάξεων που θα επιτρέπουν στην τυπική - συνήθως μικρή και μεσαία - Ελληνική επιχείρηση να διενεργήσει ένα σύνολο BUsiness-to-Business Λειτουργιών.

    Οι συναλλασόμενοι φορείς μπορεί να είναι: Κύρια χρακτηριστικά του συστήματος είναι: Η αρχιτεκτονική του συστήματος απεικονίζεται στο παρακάτω σχήμα:

    Παραπομπές