Talk:XMBML Coding

From PS3 Developer wiki
Revision as of 12:08, 12 September 2021 by Sandungas (talk | contribs) (→‎XML structure levels)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Tips and tools[edit source]

  • An usefull trick to help documenting xml strings is to drag-and-drop all PS3 .xml files (from path dev_flash/vsh/resource/explore/xmb/) to notepad++. Then use the search function in notepad++ (ctrl+F) to search for a text string and click in "find all in all opened documents"

Suggestions, etc[edit source]

  • The <View id>'s "root", "root_for_dex", "root_for_BDU", "tool_root", "shop_root", "shop_guest_root", "shop_staff_root", "root_arcade" refered as XMB enviroments is not an accurate definition, is an invented name, i have no idea if there is a more accurate definition in other parts of the firmware, documentation, whatever... if someone has a better idea please update the frontpage and erase this section here in talkpage --Sandungas (talk) 23:42, 23 January 2014 (EST)
  • The View ID "root" usually is refered as the identifyer of a group of items that will be loaded by retail XMB, but not always, e.g:
    • Retail XMB network column is built loading the "root" items of the file "category_network.xml" (there are no debug items in this file)
    • Debug XMB network column is built loading the "root" items of the file "category_network_tool2.xml" (there are no retail items in this file)


Automated XMB/XML navigation[edit source]

Is posible to automatize the navigation of the cursor in XMB by sending commands from a plugin.sprx (and maybe other alternative ways)

This "navigation sequences" can be seen inside some plugins.sprx, and seems to be direct references to the structure of the XML files, is not clear where is the complete list of functions so by now this is only a messy list to take some notes

  • focus_category can be used with game, photo, video, etc... any XMB column
  • wait (e.g: 1000, 2000)
  • focus_segment_index seg_newvmc 0 (loads a segment from a .xml, then sets the value 0)
  • focus_segment_index seg_sdpsp 0.scroll_list -1 1000 (this is a complex sequence of actions)
  • open_list
  • yield

More detailed info in Explore plugin page

XML structure levels[edit source]

The table is ok but it has a problem, is not posible to represent where is located <String> (chldren of <Pair>)... so this probably needs to be replaced by something better

XML tag levels Common tags
lv1 lv2 lv3 lv4 lv5 version id class key attr src include
XMBML Yes No No No No No No
View No Yes No No No No No
Attributes Table No No No Yes No No Opt
Pair No No No Yes No No No
Items Query No No Yes Yes Opt Opt No
Item No No Yes Yes Opt Opt No
XMBML generic structure descriptor from explore_plugin.sprx
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

0027A950  58 4D 42 4D 4C 00 00 00 76 65 72 73 69 6F 6E 00  XMBML...version.
0027A960  31 2E 30 00 00 00 00 00 56 69 65 77 00 00 00 00  1.0.....View....
0027A970  69 64 00 00 00 00 00 00 49 74 65 6D 73 00 00 00  id......Items...
0027A980  49 74 65 6D 00 00 00 00 51 75 65 72 79 00 00 00  Item....Query...
0027A990  6B 65 79 00 00 00 00 00 63 6C 61 73 73 00 00 00  key.....class...
0027A9A0  61 74 74 72 00 00 00 00 73 72 63 00 00 00 00 00  attr....src.....
0027A9B0  74 79 70 65 3A 00 00 00 63 6C 73 69 64 3A 00 00  type:...clsid:..
0027A9C0  41 74 74 72 69 62 75 74 65 73 00 00 00 00 00 00  Attributes......
0027A9D0  54 61 62 6C 65 00 00 00 6B 65 79 00 00 00 00 00  Table...key.....
0027A9E0  69 6E 63 6C 75 64 65 00 50 61 69 72 00 00 00 00  include.Pair....
0027A9F0  6B 65 79 00 00 00 00 00 53 74 72 69 6E 67 00 00  key.....String..
  • This is the last unknown, seems to be used to specify a class by its ID (used as replacement of type:), is unknown if it can be used with Query classes, Item classes, or with both
 <Query class="clsid:unknown_id"/>
 <Item class="clsid:unknown_id"/>

#include Table[edit source]

In old firmwares there seems to be a way to include attribute tables inside other attribute tables, it works in the same way like in some coding languages, the included stuff needs to be loaded before the tag that includes it, and the names used are the same than the table keys, as example, using the minimalistic example of front page:

	<View id="example">
		<Attributes>
			<Table key="PS3_cover_size">
				<Pair key="icon_fixed_width"><String>170</String></Pair>
				<Pair key="icon_fixed_height"><String>200</String></Pair>
 			</Table>
			<Table key="game_001" include="PS3_cover_size">
				<Pair key="icon"><String>...game_001_cover.jpg</String></Pair>
 			</Table>
			<Table key="game_002" include="PS3_cover_size">
				<Pair key="icon"><String>...game_002_cover.jpg</String></Pair>
 			</Table>
			<Table key="game_003" include="PS3_cover_size">
				<Pair key="icon"><String>...game_003_cover.jpg</String></Pair>
 			</Table>
		</Attributes>
		<Items>
			<Item key="game_001" attr="game_001"/>
			<Item key="game_001" attr="game_002"/>
			<Item key="game_001" attr="game_003"/>
		</Items>
	</View>

In the example the attribute tables named "game_xxx" are going to load the contents of the table named "PS3_cover_size", this can be used when there are several items that uses the same attributes, is posible to create some common groups of attributes that defines a group (for restrictions or shared features), and then create more items or querys that loads an small attribute table specific for the icon + additionally the included attributes common for this kind of item. This is specially useful to make custom .xml files much smaller by removing duplicated lines (like webman)


Music lists[edit source]

In category_music.xml firmware 0.83

	<View id="root">
		<Attributes>
			<Table key="attr_hdd_contents">
				<Pair key="view0"><String>xcb://localhost/query?sort=+Music:MusicServed.playerForSort+Music:MusicServed.listTitleForSort+Music:MusicServed.trackNumber&cond=Aa+Music:Music.codec</String></Pair>
				<Pair key="view1"><String>xcb://localhost/query?sort=+Music:MusicServed.listTitleForSort&cond=Aa+Music:MusicServed.listTitleForSort_lst</String></Pair>
				<Pair key="view2"><String>xcb://localhost/query?sort=+Music:MusicServed.playerForSort&cond=Aa+Music:MusicServed.playerForSort_lst</String></Pair>
				<Pair key="view3"><String>xcb://localhost/query?sort=+Music:MusicServed.genre&cond=Aa+Music:MusicServed.genre_lst</String></Pair>
			</Table>
		</Attributes>

		<Items>
			<Query 
				class="type:x-xmb/folder-pixmap" 
				key="seg_hdd_contents" 
				attr="attr_hdd_contents"
				src="xcb://localhost/query?sort=+Music:MusicServed.playerForSort+Music:MusicServed.listTitleForSort+Music:MusicServed.trackNumber&cond=Aa+Music:Music.codec"
				/>
		</Items>
	</View>
  • Non-standard/unknown:
    • Attribute keys: view0, view1, view2, view3
    • XMB database field names terminated with _lst: (listTitleForSort_lst, playerForSort_lst, genre_lst)