Συνεισφορά ειδών περιεχομένου

Παροχή ενός νέου είδους περιεχομένου

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

Οι πρόσθετες λειτουργίες ορίζουν τα είδη περιεχομένου συνεισφέροντας μια επέκταση για το σημείο επέκτασης org.eclipse.core.runtime.contentTypes. Σε αυτή την επέκταση, μια πρόσθετη λειτουργία ορίζει μια απλή ταυτότητα και το όνομα για το είδος περιεχομένου (η πλήρης ταυτότητα είναι πάντα η απλή ταυτότητα με το πρόθημα του τρέχοντος χώρου ονομάτων). Το ακόλουθο τμήμα κώδικα δείχνει μια εκδοχή με καθοδικό περιορισμό για τη συνεισφορά είδους περιεχομένου org.eclipse.core.runtime.text

	<extension point="org.eclipse.core.runtime.contentTypes">
		<content-type 
			id="text"
			name="%textContentTypeName">
			file-extensions="txt">
			<describer class="org.eclipse.core.internal.content.TextContentDescriber"/>
</content-type>		
		...

Το γνώρισμα file-extensions καθορίζει ποιες επεκτάσεις αρχείου συσχετίζονται με το είδος περιεχομένου (σε αυτό το παράδειγμα, ".txt"). Το γνώρισμα file-names (δεν χρησιμοποιείται σε αυτή την περίπτωση) επιτρέπει τη συσχέτιση πλήρων ονομάτων. Και τα δύο γνωρίσματα λαμβάνονται υπόψη από την πλατφόρμα κατά την εκτέλεση του εντοπισμού και της περιγραφής του είδους περιεχομένου (με την προϋπόθεση ότι ο πελάτης παρέχει ένα πλήρες όνομα).

Το στοιχείο describer χρησιμοποιείται για τον καθορισμό ενός περιγραφέα περιεχομένου για το είδος περιεχομένου.

Εντοπισμός και περιγραφή περιεχομένου

Ένας είδος περιεχομένου θα πρέπει να παρέχει έναν περιγραφέα περιεχομένου εάν τα όποια προσδιοριζόμενα χαρακτηριστικά υπάρχουν επιτρέπουν τον αυτόματο εντοπισμό του είδους περιεχομένου ή άλλες ενδιαφέρουσες ιδιότητες δεδομένων που ανήκουν στο είδος περιεχομένου. Στην περίπτωση του σημείου επέκτασης org.eclipse.core.runtime.text, ο εντοπισμός του είδους περιεχομένου δεν είναι δυνατός με μια απλή ματιά στα περιεχόμενα. Ωστόσο, οι ροές κειμένου μπορεί να συνοδεύονται από το πρόθημα σημάδι σειράς byte, μια ιδιότητα την οποία οι πελάτες ενδέχεται να θελήσουν να γνωρίσουν, εξασφαλίζοντας έτσι έναν περιγραφέα περιεχομένου.

Ο περιγραφέας είναι μια υλοποίηση της κλάσης IContentDescriber ή ITextContentDescriber. Η τελευταία είναι μια εξειδίκευση, της προηγούμενης κλάσης, η οποία πρέπει να υλοποιείται από περιγραφείς ειδών περιεχομένου με προσανατολισμό κειμένου. Ανεξάρτητα από τη φύση του είδους περιεχομένου, ο περιγραφέας έχει δύο αρμοδιότητες: να διευκολύνει τον προσδιορισμό της καταλληλότητας του είδος περιεχομένου για μια συγκεκριμένη ροή δεδομένων και την εξαγωγή ιδιοτήτων από μια ροή δεδομένων που υποθετικά ανήκει στο είδος περιεχομένου του.

Η μέθοδος describe(stream, description) καλείται όποτε η πλατφόρμα επιχειρεί να καθορίσει το είδος περιεχομένου για μια συγκεκριμένη ροή δεδομένων ή να περιγράψει τα περιεχόμενά της. Η περιγραφή είναι null όταν απαιτείται μόνο εντοπισμός. Διαφορετικά, ο περιγραφέας θα πρέπει να επιχειρήσει να συμπληρώσει την περιγραφή περιεχομένου με οποιεσδήποτε ιδιότητες μπορούν να εντοπιστούν διαβάζοντας τη ροή, και μόνον αυτές. Η σήμανση του είδους περιεχομένου θα πρέπει να χρησιμοποιείται για να δηλώσει τυχόν ιδιότητες οι οποίες έχουν προεπιλεγμένες τιμές (για παράδειγμα το org.eclipse.core.runtime.xml δηλώνει το UTF-8 ως το προεπιλεγμένο σύνολο χαρακτήρων).

Κατά την πλήρη λειτουργία του, η εκτέλεση του περιγραφέα αναμένεται να είναι όσο το δυνατόν ταχύτερη. Όσο λιγότερο αναγκαία είναι η ανάγνωση της ροής δεδομένων, τόσο το καλύτερο. Επίσης, αναμένεται η δήλωση της υλοποίησης του περιγραφέα περιεχομένου σε ένα πακέτο το οποίο εξαιρείται από την ενεργοποίηση της πρόσθετης λειτουργίας (δείτε την κεφαλίδα δήλωσης δέσμης Eclipse-AutoStart). Δεδομένου ότι, κατά την απόδοση αρχικών τιμών στο πλαίσιο είδους περιεχομένου, δημιουργούνται χρήσεις για το σύνολο των περιγραφέων, η αποτυχία συμμόρφωσης με αυτή την απαίτηση, προκαλεί πρόωρη ενεργοποίηση, η οποία πρέπει να αποφεύγεται. Μελλοντικές υλοποιήσεις της πλατφόρμας ενδέχεται να απορρίψουν τη δημιουργία χρήσης περιγραφέων εάν κάτι τέτοιο πρόκειται να ενεργοποιήσει την αντίστοιχη πρόσθετη λειτουργία.

Επέκταση υπάρχοντος είδους περιεχομένου

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

<content-type 
	id="xml"
	name="%xmlContentTypeName"
	base-type="org.eclipse.core.runtime.text"
	file-extensions="xml">
	<describer class="org.eclipse.core.internal.content.XMLContentDescriber"/>
	<property name="charset" default="UTF-8"/>
</content-type>

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

Σημειώστε ότι το είδος περιεχομένου XML παρακάμπτει ορισμένα γνωρίσματα είδους περιεχομένου που αρχικά ορίζονταν σε είδος περιεχομένου Κειμένου όπως οι συσχετίσεις αρχείου και η υλοποίηση περιγραφέα. Επίσης, αυτό το είδος περιεχομένου δηλώνει μια προεπιλεγμένη τιμή ιδιότητας για την ιδιότητα charset. Αυτό σημαίνει ότι κατά την περιγραφή του περιεχομένου για μια ροή δεδομένων που θεωρείται ότι ανήκει στο είδος περιεχομένου XML, εάν ο περιγραφέας δεν συμπληρώσει την ιδιότητα του συνόλου χαρακτήρων, η πλατφόρμα θα την ορίσει στο σύνολο χαρακτήρων "UTF-8".

Ως ένα άλλο παράδειγμα, το είδος περιεχομένου org.eclipse.ant.core.antBuildFile (για σενάρια δόμησης Ant) επεκτείνει το είδος περιεχομένου XML:

<content-type  
id="antBuildFile"
name="%antBuildFileContentType.name"
base-type="org.eclipse.core.runtime.xml"
file-names="build.xml"
file-extensions="macrodef,ent,xml">
<describer
class="org.eclipse.ant.internal.core.contentDescriber.AntBuildfileContentDescriber">
</describer>
</content-type>

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

Πρόσθετες συσχετίσεις αρχείων

Μπορείτε να προσθέσετε νέες συσχετίσεις αρχείων σε υπάρχοντα είδη περιεχομένου. Για παράδειγμα, η πρόσθετη λειτουργία πόρων συσχετίζει το σημείο επέκτασης org.eclipse.core.runtime.xml με τα αρχεία ".έργου":

<extension point="org.eclipse.core.runtime.contentTypes">
	<file-association content-type="org.eclipse.core.runtime.xml" file-names=".project"/>
	...

Δημιουργία ψευδώνυμων για είδη περιεχομένου

Λόγω της επεκτάσιμης φύσης του Eclipse, ενδέχεται το είδος περιεχομένου στο οποίο βασίζεται μια πρόσθετη λειτουργία να μην είναι διαθέσιμο στην παραμετροποίηση ενός δεδομένου προϊόντος. Είναι κάτι που μπορείτε να επιλύσετε χρησιμοποιώντας την εκχώρηση ψευδώνυμων για είδη περιεχομένου. Ένα ψευδώνυμο είδους περιεχομένου είναι ένα σύμβολο κράτησης θέσης για κάποιο άλλο προτιμώμενο είδος περιεχομένου η διαθεσιμότητα του οποίου δεν είναι εξασφαλισμένη. Για παράδειγμα, το Περιβάλλον εκτέλεσης δηλώνει ένα ψευδώνυμο (org.eclipse.core.runtime.properties) για το είδος περιεχομένου ιδιοτήτων Java που παρέχεται από τα Εργαλεία Ανάπτυξης Java (org.eclipse.jdt.core.javaProperties):

<!-- a placeholder for setups where JDT's official type is not available -->			
<content-type id="properties" name="%propertiesContentTypeName"
base-type="org.eclipse.core.runtime.text"
alias-for="org.eclipse.jdt.core.javaProperties"
file-extensions="properties">
<property name="charset" default="ISO-8859-7"/>
</content-type>

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