Nazwa, położenie i treść tego pliku są częścią interfejsu API obszaru roboczego. Oznacza to, że nie można ich zmienić w sposób, który utrudniłby pracę innym użytkownikom pliku. Na potrzeby ewentualnych przyszłych zmian zachowano jednak prawo do dodawania do pliku kolejnych elementów i atrybutów. Z tego powodu klienci odczytujący treść pliku opisu powinni tolerować nieznane elementy i atrybuty.
Klienci, którzy modyfikują, usuwają lub zastępują plik opisu projektu, działają na własną odpowiedzialność. Projekty z niepoprawnym plikiem opisu lub pozbawione tego pliku nie są już zwykle użyteczne. Jeśli przy uruchomieniu obszaru roboczego stwierdzona zostanie obecność projektu z niepoprawnym plikiem opisu, projekt jest zamykany, a jego otwarcie nie będzie możliwe do czasu naprawienia pliku opisu. Mechanizmy obszaru roboczego na ogół nie podejmują prób automatycznej naprawy brakującego lub niepoprawnego pliku opisu. Jedynym odstępstwem od tej zasady jest ponowne generowanie brakujących plików opisów podczas zapisywania obszaru roboczego i przy wywołaniach metody IProject.setDescription.
Modyfikacje w pliku opisu projektu mają w większości przypadków ten sam efekt, co zmiana opisu projektu za pomocą metody IProject.setDescription. Pierwszy wyjątek polega na tym, że dodawanie lub usuwanie natury projektu nie powoduje wywołania odpowiedniej metody natury (configure lub deconfigure). Drugim wyjątkiem jest ignorowanie zmian nazwy projektu.
W razie utworzenia nowego projektu w miejscu, w którym już znajduje się plik opisu innego projektu, treść tego pliku będzie uważana za opis projektu. Jedynym odstępstwem będzie ignorowanie nazwy projektu w istniejącym pliku, jeśli nie jest ona zgodna z nazwą tworzonego projektu. Jeśli plik opisu na dysku jest niepoprawny, próba utworzenia projektu nie powiedzie się.
Znaczniki konfiguracji:
<!ELEMENT projectDescription (name, comment, projects, buildSpec, natures, linkedResources)>
<!ELEMENT name EMPTY>
<!ELEMENT comment EMPTY>
<!ELEMENT buildSpec (buildCommand)*>
<!ELEMENT buildCommand (name, arguments)>
<!ELEMENT name EMPTY>
<!ELEMENT arguments (dictionary?)>
<!ELEMENT dictionary (key, value)*>
<!ELEMENT key EMPTY>
<!ELEMENT value EMPTY>
<!ELEMENT natures (nature)*>
<!ELEMENT nature EMPTY>
<!ELEMENT linkedResources (link)*>
<!ELEMENT link (name, type, location)>
<!ELEMENT name EMPTY>
<!ELEMENT type EMPTY>
<!ELEMENT location EMPTY>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>WinterProject</name>
<comment>This is a cool project.</comment>
<projects>
<project>org.seasons.sdt</project>
<project>CoolStuff</project>
</projects>
<buildSpec>
<buildCommand>
<name>org.seasons.sdt.seasonBuilder</name>
<arguments>
<dictionary>
<key>climate</key>
<value>cold</value>
</dictionary>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.seasons.sdt.seasonNature</nature>
</natures>
</projectDescription>
Informacje o interfejsie API: Treść pliku opisu projektu jest odwzorowywana na interfejs org.eclipse.core.resources.IProjectDescription. Plik opisu projektu można zastąpić metodą IProject.setDescription().