Talk:XMBML Coding
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)
[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 |
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)