module example-jukebox { namespace "http://example.com/ns/example-jukebox"; prefix "jbox"; organization "Example, Inc."; contact "support at example.com"; description "Example Jukebox Data Model Module"; revision "2015-04-04" { description "Initial version."; reference "example.com document 1-4673"; } identity genre { description "Base for all genre types"; } // abbreviated list of genre classifications identity alternative { base genre; description "Alternative music"; } identity blues { base genre; description "Blues music"; } identity country { base genre; description "Country music"; } identity jazz { base genre; description "Jazz music"; } identity pop { base genre; description "Pop music"; } identity rock { base genre; description "Rock music"; } container jukebox { presence "An empty container indicates that the jukebox service is available"; description "Represents a jukebox resource, with a library, playlists, and a play operation."; container library { description "Represents the jukebox library resource."; list artist { key name; description "Represents one artist resource within the jukebox library resource."; leaf name { type string { length "1 .. max"; } description "The name of the artist."; } list album { key name; description "Represents one album resource within one artist resource, within the jukebox library."; leaf name { type string { length "1 .. max"; } description "The name of the album."; } leaf genre { type identityref { base genre; } description "The genre identifying the type of music on the album."; } leaf year { type uint16 { range "1900 .. max"; } description "The year the album was released"; } container admin { description "Administrative information for the album."; leaf label { type string; description "The label that released the album."; } leaf catalogue-number { type string; description "The album's catalogue number."; } } list song { key name; description "Represents one song resource within one album resource, within the jukebox library."; leaf name { type string { length "1 .. max"; } description "The name of the song"; } leaf location { type string; mandatory true; description "The file location string of the media file for the song"; } leaf format { type string; description "An identifier string for the media type for the file associated with the 'location' leaf for this entry."; } leaf length { type uint32; units "seconds"; description "The duration of this song in seconds."; } } // end list 'song' } // end list 'album' } // end list 'artist' leaf artist-count { type uint32; units "songs"; config false; description "Number of artists in the library"; } leaf album-count { type uint32; units "albums"; config false; description "Number of albums in the library"; } leaf song-count { type uint32; units "songs"; config false; description "Number of songs in the library"; } } // end library list playlist { key name; description "Example configuration data resource"; leaf name { type string; description "The name of the playlist."; } leaf description { type string; description "A comment describing the playlist."; } list song { key index; ordered-by user; description "Example nested configuration data resource"; leaf index { // not really needed type uint32; description "An arbitrary integer index for this playlist song."; } leaf id { type leafref { path "/jbox:jukebox/jbox:library/jbox:artist/" + "jbox:album/jbox:song/jbox:name"; } mandatory true; description "Song identifier. Must identify an instance of /jukebox/library/artist/album/song/name."; } } } container player { description "Represents the jukebox player resource."; leaf gap { type decimal64 { fraction-digits 1; range "0.0 .. 2.0"; } units "tenths of seconds"; description "Time gap between each song"; } } } rpc play { description "Control function for the jukebox player"; input { leaf playlist { type string; mandatory true; description "playlist name"; } leaf song-number { type uint32; mandatory true; description "Song number in playlist to play"; } } } }