sysmodelgen bugfix when drawing collections next to nested packages. Major revision to validation script checklinks.pl (it's now reliable). joinsysdef.pl now reports errors on duplicate IDs.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE SystemDefinition [
<!ELEMENT SystemDefinition ( systemModel )>
<!ATTLIST SystemDefinition
name CDATA #REQUIRED
schema CDATA #REQUIRED
>
<!-- all paths are relative to the environment variable specified by the root attribute, or SOURCEROOT if not. -->
<!-- System Model Section of DTD -->
<!ELEMENT systemModel (layer+)>
<!ELEMENT layer (block* | collection*)*>
<!-- Kernel Services, Base Services, OS Services, Etc -->
<!ATTLIST layer
name CDATA #REQUIRED
long-name CDATA #IMPLIED
levels NMTOKENS #IMPLIED
span CDATA #IMPLIED
>
<!ELEMENT block (subblock* | collection*)*>
<!-- Generic OS services, Comms Services, etc -->
<!ATTLIST block
levels NMTOKENS #IMPLIED
span CDATA #IMPLIED
level NMTOKEN #IMPLIED
name CDATA #REQUIRED
long-name CDATA #IMPLIED
>
<!ELEMENT subblock (collection)*>
<!-- Cellular Baseband Services, Networking Services, etc -->
<!ATTLIST subblock
name CDATA #REQUIRED
long-name CDATA #IMPLIED
>
<!ELEMENT collection (component)*>
<!-- Screen Driver, Content Handling, etc -->
<!ATTLIST collection
name CDATA #REQUIRED
long-name CDATA #IMPLIED
level NMTOKEN #IMPLIED
>
<!ELEMENT component (unit)*>
<!-- contains units or is a package or prebuilt -->
<!ATTLIST component
name CDATA #REQUIRED
long-name CDATA #IMPLIED
deprecated CDATA #IMPLIED
introduced CDATA #IMPLIED
contract CDATA #IMPLIED
plugin (Y|N) "N"
filter CDATA #IMPLIED
class NMTOKENS #IMPLIED
supports CDATA #IMPLIED
purpose ( optional | mandatory | development ) "optional"
>
<!ELEMENT unit EMPTY >
<!-- must be buildable (bld.inf) -->
<!-- bldFile may someday be removed in favour of mrp -->
<!ATTLIST unit
mrp CDATA #IMPLIED
filter CDATA #IMPLIED
bldFile CDATA #IMPLIED
root CDATA #IMPLIED
version NMTOKEN #IMPLIED
prebuilt NMTOKEN #IMPLIED
late (Y|N) #IMPLIED
priority CDATA #IMPLIED
>
]>
<SystemDefinition name="Symbian^3" schema="2.0.1">
<systemModel>
<layer name="app" long-name="Applications" levels="services apps">
<block name="speechsrv" level="services" long-name="Speech Recognition UIs" levels="engine framework ui">
<collection name="speechsrv_plat" long-name="Speech Recognition UIs Platform Interfaces" level="ui">
<component name="vas_api" long-name="VAS API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/vas_api/group"/>
</component>
<component name="nss_devasr_api" long-name="NSS DevASR API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_devasr_api/group"/>
</component>
<component name="tts_hw_device_api" long-name="TTS HW Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/tts_hw_device_api/group"/>
</component>
<component name="voice_commands_resource_header_api" long-name="Voice Commands Resource Header API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/voice_commands_resource_header_api/group"/>
</component>
<component name="nss_mmf_tts_custom_commands_api" long-name="NSS MMF TTS Custom Commands API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_mmf_tts_custom_commands_api/group"/>
</component>
<component name="srsf_cenrep_settings_api" long-name="SRSF CenRep Settings API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/srsf_cenrep_settings_api/group"/>
</component>
<component name="voice_ui_plugin_api" long-name="Voice UI Plug-in API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/voice_ui_plugin_api/group"/>
</component>
<component name="nss_tts_utility_api" long-name="NSS TTS Utility API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_tts_utility_api/group"/>
</component>
<component name="nss_srs_custom_commands_api" long-name="NSS SRS Custom Commands API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_srs_custom_commands_api/group"/>
</component>
<component name="srsf_secondarydisplay_api" long-name="SRSF Secondary Display API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/srsf_secondarydisplay_api/group"/>
</component>
<component name="asrs_hw_device_api" long-name="ASRS Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/asrs_hw_device_api/group"/>
</component>
<component name="vas_vcommand_api" long-name="VAS Voice Command API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/vas_vcommand_api/group"/>
</component>
<component name="adaptation_hw_device_api" long-name="Adaptation Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/adaptation_hw_device_api/group"/>
</component>
<component name="nss_devtts_api" long-name="NSS DevTTS API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_devtts_api/group"/>
</component>
<component name="nss_srs_utility_api" long-name="NSS SRS Utility API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_srs_utility_api/group"/>
</component>
<component name="recognition_hw_device_api" long-name="Recognition Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/recognition_hw_device_api/group"/>
</component>
<component name="vas_contact_handler_api" long-name="VAS Contact Handler API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/vas_contact_handler_api/group"/>
</component>
<component name="nlp_hw_device" long-name="NLP Hardware Device" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nlp_hw_device/group"/>
</component>
<component name="nss_si_speech_recognition_data_api" long-name="NSS SI Speech Recognition Data API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_si_speech_recognition_data_api/group"/>
</component>
<component name="nss_tts_common_api" long-name="NSS TTS Common API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/nss_tts_common_api/group"/>
</component>
<component name="grcompiler_hw_device_api" long-name="Grammar Compiler Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/grcompiler_hw_device_api/group"/>
</component>
<component name="ttp_hw_device_api" long-name="TTP Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/ttp_hw_device_api/group"/>
</component>
<component name="vocman_hw_device_api" long-name="VocMan Hardware Device API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/vocman_hw_device_api/group"/>
</component>
<component name="speech_synthesis_clientserver_api" long-name="Speech Synthesis Client-Server API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/speech_synthesis_clientserver_api/group"/>
</component>
<component name="voice_ui_accessory_button_handling_api" long-name="Voice UI Accessory Button Handling API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/voice_ui_accessory_button_handling_api/group"/>
</component>
<component name="ui_voice_recognition_api" long-name="UI Voice Recognition API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/ui_voice_recognition_api/group"/>
</component>
<component name="vcommand_settings_cenrep_api" long-name="Voice Command Settings CenRep API" filter="s60" class="api">
<unit bldFile="/sf/app/speechsrv/speechsrv_plat/vcommand_settings_cenrep_api/group"/>
</component>
</collection>
<collection name="voiceui" long-name="Voice UI" level="ui">
<component name="vcommand" filter="s60" long-name="Voice Commands UI" introduced="^1">
<unit bldFile="/sf/app/speechsrv/voiceui/vcommand/group"/>
</component>
<component name="voiceuivoicerecognition" filter="s60" long-name="Voice UI Recognition" introduced="^1">
<unit bldFile="/sf/app/speechsrv/voiceui/voiceuivoicerecognition/group"/>
</component>
<component name="pbkinfoviewimpl" filter="s60" long-name="Phonebook Info View Implementation" introduced="^1">
<unit bldFile="/sf/app/speechsrv/voiceui/pbkinfoviewimpl/group"/>
</component>
<component name="aiwpbkinfoviewprovider" filter="s60" long-name="AIW Phonebook Info View Provider" introduced="^1" plugin="Y">
<unit bldFile="/sf/app/speechsrv/voiceui/aiwpbkinfoviewprovider/group"/>
</component>
<component name="vccontrolpanelplugin" filter="s60" long-name="Voice Commands Control Panel Plugin" introduced="^1" plugin="Y">
<!-- component is commented out until configuration is in place. Currently #included from voiceui_build -->
<!--<unit bldFile="voiceui/vccontrolpanelplugin/group"/>-->
</component>
<component name="voiceui_build" filter="s60" long-name="Voice UI Build" introduced="^1">
<!-- can this be put into the other components? -->
<unit bldFile="/sf/app/speechsrv/voiceui/group"/>
</component>
</collection>
<collection name="srsf" long-name="Speech Recognition and Synthesis Framework" level="framework">
<component name="sispeechrecognitiondata" filter="s60" long-name="SI Speech Recognition Data">
<unit bldFile="/sf/app/speechsrv/srsf/sispeechrecognitiondata/group"/>
</component>
<component name="ttscommon" filter="s60" long-name="TTS Common">
<unit bldFile="/sf/app/speechsrv/srsf/ttscommon/group"/>
</component>
<component name="devtts" filter="s60" long-name="Text to Speech">
<unit bldFile="/sf/app/speechsrv/srsf/devtts/group"/>
</component>
<component name="ttscustomcommands" filter="s60" long-name="TTS Custom Commands">
<unit bldFile="/sf/app/speechsrv/srsf/ttscustomcommands/group"/>
</component>
<component name="ttscontrollerplugin" filter="s60" long-name="TTS Controller Plugin" plugin="Y">
<unit bldFile="/sf/app/speechsrv/srsf/ttscontrollerplugin/group"/>
</component>
<component name="ttsutility" filter="s60" long-name="TTS Utility">
<unit bldFile="/sf/app/speechsrv/srsf/ttsutility/group"/>
</component>
<component name="speechsynthesis" filter="s60" long-name="Speech Synthesis">
<!-- can only have one unit. #include these from a common bld.inf -->
<unit bldFile="/sf/app/speechsrv/srsf/speechsynthesis/client/group"/>
<unit bldFile="/sf/app/speechsrv/srsf/speechsynthesis/server/group"/>
</component>
<component name="devasr" filter="s60" long-name="Audio Recording and Speech Recognition">
<unit bldFile="/sf/app/speechsrv/srsf/devasr/group"/>
</component>
<component name="sicc" filter="s60" long-name="Speaker Independent Custom Commands">
<unit bldFile="/sf/app/speechsrv/srsf/sicc/group"/>
</component>
<component name="sisrscontrollerplugin" filter="s60" long-name="SI SRS Controller Plugin" plugin="Y">
<unit bldFile="/sf/app/speechsrv/srsf/sisrscontrollerplugin/group"/>
</component>
<component name="siutility" filter="s60" long-name="Speaker Independent Utility">
<unit bldFile="/sf/app/speechsrv/srsf/siutility/group"/>
</component>
<component name="nssvasapi" filter="s60" long-name="NSS VAS API">
<unit bldFile="/sf/app/speechsrv/srsf/nssvasapi/group"/>
</component>
<component name="nssvascontacthdlr" filter="s60" long-name="NSS VAS Contact Handler">
<unit bldFile="/sf/app/speechsrv/srsf/nssvascontacthdlr/group"/>
</component>
<component name="vcommandhandler" filter="s60" long-name="Voice Command Handler">
<unit bldFile="/sf/app/speechsrv/srsf/vcommandhandler/group"/>
</component>
<component name="vuiphandler" filter="s60" long-name="Voice UI Plugin Handler">
<unit bldFile="/sf/app/speechsrv/srsf/vuiphandler/group"/>
</component>
<component name="vcommandexecutor" filter="s60" long-name="Voice Command Executor">
<unit bldFile="/sf/app/speechsrv/srsf/vcommandexecutor/group"/>
</component>
<component name="vcommandexecutorbearer" filter="s60" long-name="Voice Command Executor Bearer">
<unit bldFile="/sf/app/speechsrv/srsf/vcommandexecutorbearer/group"/>
</component>
<component name="vcommandmanager" filter="s60" long-name="Voice Command Manager">
<unit bldFile="/sf/app/speechsrv/srsf/vcommandmanager/group"/>
</component>
<component name="vcexecutorapp" filter="s60" long-name="Voice Command Executor Application">
<unit bldFile="/sf/app/speechsrv/srsf/vcexecutorapp/group"/>
</component>
<component name="profileobserverplugin" filter="s60" long-name="Profile Observer Plugin" plugin="Y">
<unit bldFile="/sf/app/speechsrv/srsf/profileobserverplugin/group"/>
</component>
<component name="srsf_build" filter="s60" long-name="Speech Recognition and Synthesis Framework Build">
<!-- should distribute this into the above components -->
<unit bldFile="/sf/app/speechsrv/srsf/group"/>
</component>
</collection>
<collection name="speechsrv_info" long-name="Speech Recognition UIs Info" level="ui">
<component name="speechsrv_test" filter="s60,test,unit_test" purpose="development" long-name="Speech Recognition UIs Test">
<unit bldFile="/sf/app/speechsrv/tsrc/group"/>
</component>
</collection>
</block>
</layer>
</systemModel>
</SystemDefinition>