Location: PHPKode > projects > StreamOnTheFly > node/code/doc/README.xbmf.txt
Problems with XBMF:

- Some metadata is described in a way which has no meaning outside the SOTF network.
  (For example: <topic>001td12</topic>) This results in data loss when sending XBMF
  to other networks, and also when receiving XBMF from other networks/sources.

- Administrative metadata is mixed with real metadata. The station
  name is real metadata, while the station identifier within the sotf
  network is administrative. Administrative metadata is needed to
  correctly identify/update a programme, to see rights/permissions.
  While real metadata is needed to get real information about the programme.

- Container format: we could allow compression. An uncompressed tar
  can be large (with attached images, etc.). We could consider using
  zip or tar.gz??

Suggested changes in XBMF:

- currently the root container directory must be named XBMF.
  Suggestion: the container dir name could contain a mnemonic: XBMF_mnemonic
  For example: XBMF_literadio_2003_34

- Administrative metadata should go into a separate <administrative><sotf> subtree.
  For example: owner, program id, etc.

- Controlled vocabularies, such as roles, genres, etc. could be given for example 
  in a default language + internal id.

- Normal metadata should get closer to DC and SOMA

- Allow metadata in SOMA format as well in the XBMF package (SOMA=DC
  more or less, so we get both our format and a real DC format)
  Suggested filename: metadata-soma.xml

- Change the main opening tag from <sotfPublish> to <xbmf>


Current status:

the thing has an identifying name, which has a local part, let's call it track name.

our raw metadata file is stored as metadata.xml

SOMA file is stored as  metadata-soma.xml

there is a subdirectory called 'other' which may contain arbitrary
files/urls (urls are stored in separate files or in a single one?)

audio/video files can be arranged in separate subdirectories
or the type can be encoded into the filename. I think subdirs are better.
So if there is an 'audio' subdir, we can collect various audio formats of
the same thing from the files in there. If there is a 'video' subdir, it
is a video archive, and video content is in there.

The file name conventions within these subdirs are also important. It's
useful to encode audio/video properties into the filename. For audio
files:

<TRACK>-<BITRATE>-<CHANNELS>-<SAMPLERATE>.<FORMAT>

Example for an xbmf:

IST_MAX_MULLER <dir>
        metadata.xml
        metadata-soma.xml
	icon.png
        other <dir>
                max_muller_at_night.gif
                max_muller.com.lnk
                important.doc
        audio <dir>
                IST_MAX_MULLER_128kbps_2chn_44100Hz.mp3
                IST_MAX_MULLER_64kbps_2chn_44100Hz.ogg
                IST_MAX_MULLER_24kbps_1chn_44100Hz.mp3

Importing XBMF

Incoming XBMF containers should be placed in the node/incoming directory.
The software then periodically checks this directory, and moves the new XBMF 
into the node database.

XBMF can also be imported manually under admin menu.

Configuration option(s):

// whether imported files are published by default
$config['publishxbmf'] = false;



Original DTD for XBMF metadata by Thomas Hassan:

<!ELEMENT address (#PCDATA |br )*>
<!ELEMENT alternative (#PCDATA )>
<!ELEMENT basetitle (#PCDATA )>
<!ELEMENT br EMPTY >
<!ELEMENT contributor (entity )>
<!ELEMENT creator (entity )>
<!ELEMENT date (#PCDATA |period )*>
<!ATTLIST date type NMTOKEN #REQUIRED >
<!ELEMENT description (#PCDATA )>
<!ELEMENT e-mail (#PCDATA )>
<!ELEMENT end (#PCDATA )>
<!ELEMENT entity (address |e-mail |logo |name |role |uri )*>
<!ATTLIST entity type NMTOKEN #REQUIRED >
<!ELEMENT episodesequence (#PCDATA )>
<!ELEMENT episodetitle (#PCDATA )>
<!ELEMENT extent (#PCDATA )>
<!ELEMENT format (resourcelocation,extent,medium )>
<!ATTLIST format type CDATA #REQUIRED >
<!ELEMENT identifier (#PCDATA )>
<!ELEMENT language (#PCDATA )>
<!ELEMENT logo (#PCDATA )>
<!ELEMENT medium (#PCDATA )>
<!ELEMENT name (#PCDATA )>
<!ATTLIST name type NMTOKEN #REQUIRED >
<!ELEMENT period (start,end )>
<!ATTLIST period name CDATA #REQUIRED >
<!ELEMENT publisher (entity )>
<!ELEMENT resourcelocation (#PCDATA )>
<!ELEMENT rights (#PCDATA )>
<!ELEMENT role (#PCDATA )>
<!ATTLIST role scheme CDATA #REQUIRED >
<!ELEMENT start (#PCDATA )>
<!ELEMENT subject (#PCDATA )>
<!ATTLIST subject scheme CDATA #REQUIRED >
<!ELEMENT title (basetitle,alternative,episodesequence,episodetitle )>
<!ELEMENT type (#PCDATA )>
<!ELEMENT uri (#PCDATA )>
<!ELEMENT Metadata (title,creator,subject+,description,publisher,contributor*,date+,type,
identifier,format+,language+,rights )>
<!ATTLIST Metadata version NMTOKEN #REQUIRED >

An example of XBMF metadata generated by sotf station software:

<?xml version="1.0"?>
<sotfPublish>
  <title>xbmf test</title>
	<alternative>
	  just a test for xbmf
	</alternative>
	<series>
	  <id>200se2</id>
		<title>zeit</title>
		<description></description>
	</series>
	<stationid>200st2</stationid>
	<language>ger</language>
	<rights>admin</rights>
	<genre>1</genre>
	<topic>000td2</topic>
	<description></description>
	<contributor>www.pvl.at</contributor>
	<identifier>700</identifier>
	<creator>
	  <entity type="organisation">
		  <name type="organizationname">PublicVoiceLAB</name>
			<name type="organizationacronym">PVL</name>
			<e-mail>hide@address.com</e-mail>
			<address>Vienna</address>
			<logo>http://www.pvl.at/logo.gif</logo>
			<uri>http://www.pvl.at/</uri>
		</entity>
	</creator>
	<publisher>
		<entity type="organisation">
		  <name type="organizationname">PublicVoiceLAB</name>
			<name type="organizationacronym">PVL</name>
			<e-mail>hide@address.com</e-mail>
			<address>Vienna</address>
			<logo>http://www.pvl.at/logo.gif</logo>
			<uri>http://www.pvl.at/</uri>
		</entity>
	</publisher>
	<date type="created">2003-11-19</date>
	<date type="issued">2003-11-19</date>
	<date type="available"></date>
	<date type="modified"></date>
	<owner>
	  <auth_id>1157</auth_id>
		<login>admin</login>
		<name>Admin</name>
		<role>1</role>
	</owner>
	<publishedby>
	  <auth_id>1157</auth_id>
		<login>admin</login>
		<name>Admin</name>
		<role>1</role>
	</publishedby>
</sotfPublish> 
Return current item: StreamOnTheFly