Χρήση των ειδών περιεχομένου

Σημείωση:  Ειδικά για την συζήτηση αυτή, θα αποφύγουμε τη χρήση της λέξης αρχείο κατά την αναφορά μας στο περιεχόμενο. Ο μηχανισμός περιεχομένου του περιβάλλοντος εκτέλεσης δεν υποθέτει ότι το περιεχόμενο περιέχεται σε ένα αρχείο που βρίσκεται στο σύστημα αρχείων. Ωστόσο, περιλαμβάνει ένα πρωτόκολλο που επιτρέπει τη συσχέτιση ειδών περιεχομένου με μοτίβα ονοματοδοσίας αρχείων. Στην πράξη, αυτά τα ονόματα αρχείων αντιπροσωπεύουν αρχεία στο σύστημα αρχείων, αλλά τίποτα στην υλοποίηση του συστήματος περιεχομένου δεν υποθέτει ότι το περιεχόμενο βρίσκεται στο σύστημα αρχείων. Η ενότητα Κωδικοποίηση αρχείων και είδη περιεχομένου εξετάζει τις δυνατότητες του είδους περιεχομένου με προσανατολισμό αρχείου, τις οποίες συνεισφέρει η πρόσθετη λειτουργία της πλατφόρμας και οι προγραμματιστές που ενδιαφέρονται για τη χρήση API είδους περιεχομένου, θα πρέπει οπωσδήποτε να τη διαβάσουν.

Μαθαίνοντας για τα είδη περιεχομένου

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

Η διεπαφή IContentTypeManager είναι το σημείο καταχώρησης που παρέχει πρόσβαση στα περισσότερα API ειδών περιεχομένου που παρέχονται από το περιβάλλον εκτέλεσης της πλατφόρμας. Για να αποκτήσουν μια παραπομπή στη διεπαφή IContentTypeManager της πλατφόρμας, οι πελάτες μπορούν να χρησιμοποιήσουν το API της Πλατφόρμας:

IContentTypeManager contentTypeManager = Platform.getContentTypeManager();

Οι πελάτες μπορούν να χρησιμοποιήσουν τη διεπαφή IContentTypeManager της πλατφόρμας για να μάθουν σχετικά με τα είδη περιεχομένου του συστήματος.

Εντοπισμός του είδους περιεχομένου για μια ροή δεδομένων

Με δεδομένη μια ροή bytes, μπορείτε να καθορίσετε το είδος του περιεχομένου της καλώντας το API IContentTypeManager ως εξής:

InputStream stream = ...;
IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml");
stream.close();

Αυτή η ενέργεια επιστρέφει την πιο κατάλληλη κλάση IContentType λαμβανομένων υπόψη των δεδομένων εισόδου ή null σε περίπτωση που δεν είναι δυνατός ο εντοπισμός είδους περιεχομένου. Για μια δεδομένη ροή δεδομένων, πολλά είδη περιεχομένου ενδέχεται να θεωρούνται ως κατάλληλα. Σε αυτή την περίπτωση, η πλατφόρμα χρησιμοποιεί ορισμένα ευρετικά στοιχεία προκειμένου να καθορίσει ποια είδη θα πρέπει να επιλέξετε. Το όνομα αρχείου είναι το πρώτο κριτήριο επιλογής για τα είδη περιεχομένου. Μπορεί να παραλειφθεί, αλλά προκύπτουν τα εξής δύο θέματα: ενδέχεται τα αποτελέσματα να μην είναι τόσο σωστά επειδή μη-συσχετισμένα είδη περιεχομένου ίσως αποδεχθούν τα ίδια δεδομένα εισόδου. Παρατηρείται επίσης μια μεγάλη απόκλιση απόδοσης, δεδομένου ότι η δυνατότητα για ανάλυση της ροής πρέπει να παρέχεται σε όλα τα είδη περιεχομένου στην πλατφόρμα. Έτσι, εκτός κι αν δεν είναι διαθέσιμο, οι πελάτες θα πρέπει πάντα, μαζί με τη ροή, να παρέχουν ένα όνομα αρχείου.

Περιγραφή μιας ροής δεδομένων

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

InputStream stream = ...; 
IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml");
stream.close();

Η χρήση IContentDescription περιγράφει το είδος περιεχομένου και πρόσθετες σχετικές πληροφορίες που εξάγονται από τα περιεχόμενα που παρέχονται. Η περιγραφή περιεχομένου αποθηκεύει ιδιότητες σχετικές με το περιεχόμενο σε μορφή ζευγών κλειδιού/τιμής. Η ίδια η πλατφόρμα έχει τη δυνατότητα να περιγράφει ιδιότητες όπως είναι το σύνολο χαρακτήρων και η σειρά byte ροών που βασίζονται σε κείμενο, ενώ κάποιες άλλες ιδιότητες μπορούν να καθορίζονται από τους παροχείς είδους περιεχομένου.

Παροχή συμφραστικών λειτουργιών

Νέα είδη περιεχομένου συχνά ορίζονται ως ειξιδίκευση άλλων που ήδη υπάρχουν. Αυτή η ιεραρχία εγκαθιστά μια σχέση "is a" ανάμεσα στο είδος περιεχομένου που προκύπτει και το βασικό του είδος. Οι προγραμματιστές πρέπει να τηρούν αυτή την ιεραρχία κατά την υλοποίηση συμφραστικών λειτουργιών. Αν μια δεδομένη λειτουργία ισχύει για ένα δεδομένο είδος περιεχομένου, η λειτουργία αυτή πρέπει να ισχύει επίσης και για οποιοδήποτε άλλο είδος περιεχομένου προκύψει. Η μέθοδος IContentType.isKindOf(IContentType superType) προσδιορίζει την πιθανή συσχέτιση δύο ειδών περιεχομένου IContentType. Η μέθοδος IContentType.getBaseType() επιτρέπει τον καθορισμό του βασικού είδους για το είδος περιεχομένου IContentType.