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 "2016-08-15" { 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 "artists"; 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 instance-identifier; 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 "The playlist name."; } leaf song-number { type uint32; mandatory true; description "Song number in playlist to play."; } } } }