This
specification
defines
an
API
to
access
metadata
information
related
to
media
resources
on
the
Web.
The
overall
purpose
is
to
provide
developers
with
a
convenient
access
to
metadata
information
stored
in
different
metadata
formats.
The
core
properties
,
defined
in
the
Ontology
for
Media
Resources
1.0
specification,
will
be
used
as
a
pivot
vocabulary
in
this
API.
The
description
of
relations
between
these
core
properties
and
the
metadata
formats
in
scope
are
documented
in
the
Ontology
for
Media
Resources
1.0
specification
in
order
to
provide
cross-community
data
integration.
This
API
is
described
using
the
interface
definition
language
Web
IDL
[
WEBIDL
].
[[WEBIDL]].
The
decision
to
use
Web
IDL,
which
offers
bindings
for
ECMAScript
and
Java,
can
be
based
on
the
Use
Cases
and
Requirements
for
Ontology
and
API
for
Media
Resources
1.0
[
MEDIA-ANNOT-REQS
].
[[!MEDIA-ANNOT-REQS]].
This API defines/exposes interfaces that enables users/applications to consume metadata in an interoperable manner. Here, interoperability between metadata formats is ensured by the use of the Ontology for Media Resources 1.0 as pivot metadata format. This API offers operations to request particular metadata information represented in a certain metadata format related to media resources on the Web. Further it specifies the actual representation of the core properties and the behaviour of this API.
Refers to the formats in scope of Ontology for Media Resources 1.0 .
Refers to the Formats out of scope of Ontology for Media Resources 1.0 .
In this document the terms "Ontology", "Media Resource", "Property", "Mapping" and "Property value types" are to be interpreted as defined in Section 2 of Ontology for Media Resources 1.0 .
Before introducing the two example usage scenarios of this API, two modes of operations must be defined: asynchronous and synchronous mode. For this API the asynchronous mode is considered to be used as default where calls return without waiting for the request to finish its execution: a call-back function is provided to be invoked when the request terminates. In contrast to that, the synchronous mode implicates an immediate answer to every request.
We consider two scenarios, where this API could be implemented:
User agent
Web Service
The two scenarios are shown in Figure 1.
Note: This specification only defines this API for Media Resources. Other components depicted in Figure 1 (e.g., access/extraction/storage of metadata) are not covered.
In both scenarios, this API serves as a mediator between a client application and the actual metadata sources. Interoperability is ensured by defining i) operations for accessing the metadata information, ii) common object structure and iii) API behaviour (e.g., status codes). Following this, an implementation has to implement this stack of components:
An implementation of the API for Media Resources (as defined in this document), which provides the actual GETTER methods for the properties.
An implementation of the mappings from a specific source format to the core properties. Here, the API for Media Resources 1.0 may use the Ontology for Media Resources 1.0 specification.
A format specific API to access the metadata. This can be an API for retrieving a metadata document describing a media resource (e.g. an XML parser and a set of XPath statements) or an extractor to read metadata embedded in the media resource (e.g. a library to read EXIF information from JPEG images). In order to define the context in which this API is applied, at least a unidirectional reference from the media resource to the metadata document or vice versa is needed. If this is not the case such a reference needs to be provided by the web application (scenario 1), web service (scenario 2) or media repository (scenario 2).
Note that, this API provides access to metadata information stored in different metadata formats. As such, different instances of the same property can exist.
This
API
defines
a
number
of
interfaces
using
[
WEBIDL
].
[[WEBIDL]].
These
can
be
grouped
in
the
following
categories:
Interfaces
defining
the
actual
retrieval
operations
for
metadata,
called
MediaResource
,
and
provided
in
both
synchronous
and
asynchronous
versions
(see
Section
4.1
,
Section
4.2
and
Section
4.3
)
Interfaces
defining
the
data
structure
of
response
objects/metadata
annotations,
called
MediaAnnotation
(see
Section
4.4
and
Section
4.5
)
An
interfaces
defining
a
data
structure
for
metadata
sources,
called
MetadataSource
(see
Section
4.6
)
Next,
the
different
interfaces
and
exposed
operations
(in
case
of
the
MediaResource
interfaces
and
its
implementing
interfaces)
are
discussed.
Implementations
of
this
API
must
MUST
support
at
least
one
of
the
versions
and
must
MUST
support
the
other
interfaces
defined
in
this
document.
We
have
not
specified
exceptions
on
the
operations
or
on
accessing
the
attributes.
Instead,
a
status
code
is
returned
(in
the
synchronous
API)
or
can
be
accessed
(in
the
asynchronous
API)
in
case
an
error
occurs
indicating
the
state
of
processing
(see
Section
4.7
).
Then,
the
interfaces
for
the
return
types,
i.e.,
MediaAnnotation
and
its
specializations,
and
MetadataSource
are
defined.
The
IDL
fragment
in
Appendix
A
of
this
specification
must
be
interpreted
as
required
for
conforming
IDL
fragments,
as
described
in
the
“Web
IDL”
specification.
[
WEBIDL
]
[[WEBIDL]]
MediaResource
interface
The
MediaResource
interface
is
the
core
of
this
API
and
provides
operations
to
access
the
metadata
properties
of
a
specific
media
resource.
Here,
a
clear
separation
between
asynchronous
and
synchronous
mode
of
operation
has
been
achieved
by
defining
two
implementing
interfaces,
the
AsyncMediaResource
and
the
SyncMediaResource
interface.
Objects
of
these
interfaces
will
be
created
by
calling
createMediaResource
of
the
MediaResource
interface.
The
actual
connection
to
a
specified
metadata
source
will
be
created
with
the
execution
of
the
getMediaProperty
operation
of
AsyncMediaResource
or
SyncMediaResource
interface.
4.1.1
Methods
1
for
asynchronous,
createMediaResource
2
for
synchronous
and
3
for
both
modes.
AsyncMediaResource
or
SyncMediaResource
interface.
Further,
it
allows
to
set
the
specific
media
resource
and
metadata
sources
to
which
this
API
is
applied.
1
for
asynchronous
and
2
for
synchronous
mode
should
be
used.
Example
for
getSupportedModes
:
ma = new MediaResource(); var mode = ma.getSupportedModes(); /** Resulting in: * { "supportedModes" : 3 } */
Example
for
createMediaResource
:
metadataSources = new MetadataSource[2]; metadataSources[0] = new MetadataSource( "http://www.w3.org/2008/WebVideo/Annotations/drafts/metadata_formats/DC_example1.xml","dc"); metadataSources[1] = new MetadataSource( "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG","exif");mediaResourcemediaResource = new MediaResource();aSyncObject metadataSources syncObject metadataSourcesif (mediaResource.getSupportedModes() == 1 || mediaResource.getSupportedModes() == 3) { aSyncObject = mediaResource.createMediaResource( "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", metadataSources, 1); } else if (mediaResource.getSupportedModes() == 2 || mediaResource.getSupportedModes() == 3) { syncObject = mediaResource.createMediaResource( "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", metadataSources, 2); }
AsyncMediaResource
interface
The
AsyncMediaResource
interface
provides
a
number
of
operations
that
allow
accessing
the
metadata
of
a
media
resource.
By
calling
the
getMediaProperty
operation
with
the
argument
"title"
we
can
retrieve
the
title
of
the
corresponding
media
resource.
Next,
we
give
the
Web
IDL
description
of
the
AsyncMediaResource
interface
and
describe
the
different
operations
that
are
part
of
it.
The
mediaResource
argument
identifies
the
media
resource,
for
which
the
implementation
of
this
API
should
try
to
find
relevant
metadata
sources.
Optionally,
references
to
metadata
sources
can
be
passed
using
an
array
of
objects,
each
implementing
the
MetadataSource
interface.
This
interface
holds
an
URI
identifying
the
metadata
source
(metadataSource)
and
the
name
of
the
actual
metadata
format
(sourceFormat).
In
this
section
the
MediaAnnotations
interface
is
used
in
the
interface
definitions.
It
serves
as
a
container
to
hold
general
values
about
properties
enabling
an
iteration
over
a
set
of
different
properties.
Its
explanation
can
be
found
in
Section
4.4
MediaAnnotation
interface,
described
in
Section
4.4
.
Depending
on
the
requested
property,
the
returned
objects
implement
a
different
subtypes
(inheriting
from
the
MediaAnnotation
interface).
Requesting
"title"
gives
back
an
array
of
objects
implementing
the
Title
interface,
requesting
"creator"
results
in
objects
implementing
the
Creator
interface
and
so
on.
These
interfaces
are
described
in
Section
4.5
.
An
example
can
be
found
here
.
successCallback
object
implements
the
PropertyCallback
interface
and
holds
a
handleEvent
operation
that
needs
to
be
called
once
all
data
for
the
requested
property
is
gathered.
This
handleEvent
operation
needs
to
be
called
with
a
new
MediaAnnotation
array.
errorCallback
object
implements
the
ErrorCallback
interface
and
holds
a
handleEvent
operation
that
needs
to
be
called
if
an
attempt
fails.
This
handleEvent
operation
needs
to
be
called
with
a
new
DOMString
representing
the
status
code
of
the
error
(see
Section
4.7
for
details).
successCallback
object
implements
the
MetadataCallback
interface
and
holds
a
handleEvent
operation
that
needs
to
be
called
once
all
properties
having
values
are
listed.
This
handleEvent
operation
needs
to
be
called
with
a
new
DOMString
array
holding
the
original
metadata.
errorCallback
object
implements
the
ErrorCallback
interface
and
holds
a
handleEvent
operation
that
needs
to
be
called
if
an
attempt
fails.
This
handleEvent
operation
needs
to
be
called
with
a
new
DOMString
representing
the
status
code
of
the
error
(see
Section
4.7
for
details).
PropertyCallback
interface
The
PropertyCallback
interface
holds
a
handleEvent
operation
that
needs
to
be
called
once
all
data
for
the
requested
property
has
been
gathered.
MediaAnnotation
interface,
described
in
Section
4.4
.
Depending
on
the
requested
property,
the
returned
objects
implement
a
different
subtypes
(inheriting
from
the
MediaAnnotation
interface).
MetadataCallback
interface
The
MetadataCallback
interface
holds
a
handleEvent
operation
that
needs
to
be
called
once
the
requested
metadata
has
been
gathered.
Example
for
asynchronous
getMediaProperty
:
aSyncMediaResource = mediaResource.createMediaResource("http://www.imdb.com/title/tt0133152/", new Array(), 1); aSyncMediaResource.getMediaProperty(["title"], successCallback, errorCallback, "", "", ""); function successCallback(MediaAnnotation[] mediaAnnotations) { ... }/** Resulting in: * [ { "Title" : { * "propertyName" : "title", * "value" : "Planet of the apes", * "language" : en-us", * ... * "statusCode" : 200 * } * }, * { "Title" : { * "propertyName" : "title", * "value" : "Monkey Planet", * "language" : en-us", * ..., * "statusCode" : 200 * } * }, * { ... * } ] */ function errorCallback(DOMString error) { ... } /** Resulting in: * { error: { "statusCode" : 415 } } */
Example
for
asynchronous
getOriginalMetadata
:
aSyncMediaResource = mediaResource.createMediaResource( "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", new Array(), 1); aSyncMediaResource.getOriginalMetadata("dc", successCallback, errorCallback);function successCallback(DOMString[] metadata) { ... }/** Resulting in: * [ { "statusCode" : 200 * }, * {"originalMetadata" : "<metadata xmlns='http://example.org/myapp/' * xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' * xsi:schemaLocation='http://example.org/myapp/ http://example.org/myapp/schema.xsd' * xmlns:dc='http://purl.org/dc/elements/1.1/'> * <dc:title>DC title</dc:title> * </metadata>" * } ] */function errorCallback(DOMString error) { ... } /** Resulting in: * { error: { "statusCode" : 415 } } */
SyncMediaResource
interface
The
SyncMediaResource
interface
provides
a
number
of
operations
to
access
the
metadata
of
a
media
resource.
Next,
we
give
the
Web
IDL
description
of
the
SyncMediaResource
interface
for
synchronous
requests
and
describe
the
different
operations
that
are
part
of
it.
The
MediaResource
defines
a
constructor
that
can
be
called
to
construct
the
object
based
on
an
identifier
of
the
media
resource
and
optionally
some
metadata
sources.
The
mediaResource
argument
identifies
the
media
resource,
for
which
the
implementation
of
this
API
should
try
to
find
relevant
metadata
sources.
Optionally,
references
to
metadata
sources
can
be
passed
using
an
array
of
objects,
each
implementing
the
MetadataSource
interface.
This
interface
holds
two
attributes,
namely
an
URI
identifying
the
metadata
source
(
metadataSource
)
and
the
name
of
the
actual
metadata
format
(
sourceFormat
).
An
example,
how
to
create
this
object
can
be
found
here
.
MediaAnnotation
interface
(see
Section
4.3
).
Depending
on
the
requested
property,
the
returned
objects
implement
a
different
subtypes
(inheriting
from
the
MediaAnnotation
interface).
Requesting
"title"
gives
back
an
array
of
objects
implementing
the
Title
interface,
requesting
"creator"
results
in
objects
implementing
the
Creator
interface
and
so
on.
These
subtypes
are
described
in
Section
4.4
.
The
operation
returns
a
MediaAnnotation
array
holding
the
requested
properties.
If
an
error
occurs
during
retrieval,
a
MediaAnnotation
object
with
the
corresponding
status
code
(e.g.,
400,
404
or
415)
will
be
generated
and
inserted
at
the
first
position
of
the
array.
An
example
can
be
found
here
.
In
this
section
the
MediaAnnotations
interface
is
used
in
the
interface
definitions.
It
serves
as
a
container
to
hold
general
values
about
properties
enabling
an
iteration
over
a
set
of
different
properties.
Its
explanation
can
be
found
in
Section
4.4
DOMString
array
holding
the
status
code
of
the
request
at
the
first
and
the
original
metadata
at
the
second
position.
An
example
can
be
found
here
.
The
examples
in
this
section
use
getMediaProperty()
to
get
an
object
implementing
the
MediaAnnotation
interface.
The
noErrorStatus
function
ensures
that
no
error
is
present
and
the
requested
properties
carry
values.
We
give
some
JavaScript
examples
on
how
to
use
the
synchronous
MediaResource
interface
and
it's
operations.
Example
for
synchronous
getMediaProperty
:
syncMediaResource = mediaResource.createMediaResource("http://www.imdb.com/title/tt0133152/", new Array(), 2); title = syncMediaResource.getMediaProperty(["title"], "", "", "");*/if (noErrorStatus(title[0].statusCode) == true) { ... } /** Resulting in: * [ { "Title" : { * "propertyName" : "title", * "value" : "Planet of the apes", * "language" : en-us", * ..., * "statusCode" : 200 * } * }, * { "Title" : { * "propertyName" : "title", * "value" : "Planet der Affen", * "language" : "de-de", * ..., * "statusCode" : 200 * } * }, * { ... * } ] */
Example
for
synchronous
getOriginalMetadata
:
syncMediaResource = mediaResource.createMediaResource("http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", new Array(), 2); dcMetadata = syncMediaResource.getOriginalMetadata("DC");if (noErrorStatus(dcMetadata[0].statusCode) == true) { ... }/** Resulting in: * [ { "statusCode" : 200 * }, * {"originalMetadata" : "<metadata xmlns='http://example.org/myapp/' * xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' * xsi:schemaLocation='http://example.org/myapp/ http://example.org/myapp/schema.xsd' * xmlns:dc='http://purl.org/dc/elements/1.1/'> * <dc:title>DC title</dc:title> * </metadata>" * } ] */
MediaAnnotation
interface
MediaAnnotation
interface
is
used
as
the
return
type
of
MediaResource.getMediaProperty
operation.
It
is
a
container
to
hold
general
values
about
properties
enabling
an
iteration
over
a
set
of
different
properties.
Depending
on
the
requested
property,
this
interface
will
be
enlarged
by
more
specific
attributes.
As
several
properties
are
complex
types,
specific
derived
types
of
MediaAnnotation
have
been
defined,
added
these
properties
with
the
appropriate
types.
However,
MediaAnnotation
can
be
used
as
a
generic
return
type
to
access
a
printable
string
representation
of
the
property
(in
the
value
attribute).
It
also
includes
a
status
code.
In
case
of
general
errors,
the
first
element
of
the
returned
MediaAnnotation
array
contains
the
global
error
code,
otherwise
the
status
can
be
given
for
each
of
the
returned
properties.
The following design considerations have been used for specifying the derived types for each of the properties:
MediaAnnotation
,
adding
typed
attributes
according
to
the
specification
in
the
ontology
document.
value
with
a
printable
string
representation,
it
is
recommended
to
follow
these
steps:
value
a
string
that
is
found
in
another
attribute.
This
is
considered
an
acceptable
amount
of
redundancy
for
the
benefit
of
having
a
generic
value
field
for
all
properties
that
can
be
used
regardless
of
the
specific
property
and
data
type
of
the
attributes.
URI|string
,
the
interface
shall
have
two
attributes,
one
with
"Link"
and
one
with
"Label"
appended
to
the
attribute
name,
representing
the
URI
and
string
respectively
MediaAnnotation
or
one
of
the
derived
interfaces
for
one
of
the
properties.
The
noErrorStatus
function
ensures
that
no
error
is
present
and
the
requested
properties
carry
values.
The
MediaAnnotation
interface
will
be
never
instantiated
-
only
the
implementing
subtypes
will
be
created.
These
must
MUST
be
filled
at
least
with
the
parameters
specified
in
the
MediaAnnotation
interface
and
may
MAY
be
filled
with
the
specific
attributes.
mediaAnnotation = image.getMediaProperty(["title"], "", "", "");if (noErrorStatus(mediaAnnotation[0].statusCode) == true) { ... } /** Resulting in: * [ { "Title" : { * "propertyName" : "title", * "value" : "Gone with the Wind", * "language" : "en-us", * "sourceFormat" : "mpeg7", * "fragmentIdentifier" : "http://www.example.com/video.ogv#t=10,20", * "mappingType" : "Exact match", * "statusCode" : 200 * } * } ]
This
section
describes
the
different
properties
that
can
be
requested
through
the
MediaResource.getMediaProperty()
operation.
When
invoking
this
operation,
objects
implementing
the
MediaAnnotation
interface
are
returned
that
represent
the
specified
property.
All
properties
are
represented
with
an
interface
inherited
from
the
MediaAnnotation
interface
(following
the
design
guidelines
described
above).
Several of the following return type interfaces can hold the value of the property as both URI (i.e., a pointer to a controlled vocabulary) or as free text. The URI is preferred, and the respective attribute of the return value shall be filled whenever possible (i.e., when the information is included in or can be constructed from the source metadata).
In
the
following,
for
each
property,
a
(synchronous)
JavaScript
example
illustrates
the
usage
of
the
property
specific
attributes.
In
any
case,
the
genereal
attributes
of
the
MediaAnnotation
interface
could
be
also
requested.
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"identifier"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Identifier
interface
is
returned
representing
the
identifier
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
id = image.getMediaProperty(["identifier"]); /** Resulting in: * [ { "Identifier" : { * "propertyName" : "identifier", * "identifierLink" : "urn:uuid:36a87260-1102-11df-8a39-0800200c9a66", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"title"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Title
interface
is
returned
representing
the
title
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
title = song.getMediaProperty(["title"]); /** Resulting in: * [ { "Title" : { * "propertyName" : "title", * "titleLabel" : "Artificial Horizon" , * "typeLink" : "http://www.ebu.ch/metadata/cs/ebu_ObjectTypeCodeCS.xml#21", * "typeLabel" : "Album title", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"language"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Language
interface
is
returned
representing
the
language
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
getMediaProperty
operation.
Recommended
best
practice
is
to
use
BCP
47
language = video.getMediaProperty(["language"]); /** Resulting in: * [ { "Language" : { * "propertyName" : "language", * "languageLabel" : "en-us", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"locator"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Locator
interface
is
returned
representing
the
locator
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
locator = image.getMediaProperty(["locator"]); /** Resulting in: * [ { "Locator" : { * "propertyName" : "locator", * "locatorLink" : "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"contributor"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Contributor
interface
is
returned
representing
the
contributor
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
contributor = video.getMediaProperty(["contributor"]); /** Resulting in: * [ { "Contributor" : { * "propertyName" : "contributor", * "contributorLink" : "http://en.wikipedia.org/wiki/Tim_Burton", * "contributorLabel" : "Tim Burton", * "roleLink" : "http://www.imdb.com/name/nm0000318/", * "roleLabel" : "director", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"creator"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Creator
interface
is
returned
representing
the
creator
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
creator = video.getMediaProperty(["creator"]); /** Resulting in: * [ { "Creator" : { * "propertyName" : "creator", * "creatorLink" : "http://dbpedia.org/resource/William_Shakespeare", * "creatorLabel" : "William Shakespeare", * "roleLink" : "http://www.ebu.ch/metadata/cs/ebu_RoleCodeCS.xml#22.5", * "roleLabel" : "playwright", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"date"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Date
interface
is
returned
representing
the
date
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
This
property
has
been
renamed
from
"Date"
into
"MADate"
since
the
appearance
of
naming
conflicts
is
possible
in
web
applications.
maDate = video.getMediaProperty(["date"]); /** Resulting in: * [ { "MADate" : { * "propertyName" : "date", * "date": "2009-06-26T15:30:00", * "typeLink" : "urn:smpte:ul:06.0E.2B.34.01.01.01.02.07.02.01.10.02.03.00.00", * "typeLabel" : "modification date", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"location"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Location
interface
is
returned
representing
the
location
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
coordiateSystem
attribute
(default
is
WGS84).
latitude
coordiateSystem
coordiateSystem
attribute
(default
is
WGS84).
location = video.getMediaProperty(["location"]); /** Resulting in: * [ { "Location" : { * "propertyName" : "location", * "locationLink" : "http://en.wikipedia.org/wiki/San_Jose,_California", * "locationLabel" : "San Jose", * "longitude" : 37.33986481118008, * "latitude" : -121.88507080078125, * "altitude" : 0, * "coordinateSystemLabel" : "WGS84", * "coordinateSystemLink" : "http://www.w3.org/2003/01/geo/wgs84_pos#Point", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"description"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Description
interface
is
returned
representing
the
description
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
description = image.getMediaProperty(["description"]); /** Resulting in: * [ { "Description" : { * "propertyName" : "description", * "descriptionLabel" : "Group picture of the W3C MAWG at the F2F meeting in Stockholm.", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"keyword"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Keyword
interface
is
returned
representing
the
keyword
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
keyword = image.getMediaProperty(["keyword"]); /** Resulting in: * [ { "Keyword" : { * "propertyName" : "keyword", * "keywordLabel" : "meeting with people from outside the organisation", * "keywordLink" : "http://sw.opencyc.org/2008/06/10/concept/en/MeetingWithOrganizationalOutsiders", * "statusCode" : 200 * } * }, * { "Keyword" : { * "propertyName" : "keyword", * "keywordLabel" : "standardisation", * "keywordLink" : "http://purl.org/vocabularies/princeton/wn30/synset-standardization-noun-1", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"genre"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Genre
interface
is
returned
representing
the
genre
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
genre = image.getMediaProperty(["genre"]); /** Resulting in: * [ { "Genre" : { * "propertyName" : "genre", * "genreLabel" : "Sports", * "genreLink" : "http://www.ebu.ch/metadata/cs/ebu_ContentGenreCS.xml#3.1.1.9" * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"rating"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Rating
interface
is
returned
representing
the
rating
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
rating = image.getMediaProperty(["rating"]); /** Resulting in: * [ { "Rating" : { * "propertyName" : "rating", * "ratingValue" : 10.0, * "ratingSystemLabel" : "John Doe", * "ratingSystemLink" : "http://individuals.example.com/JohnDoe", * "minimum" : 0, * "maximum" : 10.0, * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"relation"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Relation
interface
is
returned
representing
the
relation
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
relation = image.getMediaProperty(["relation"]); /** Resulting in: * [ { "Relation" : { * "propertyName" : "relation", * "targetLink" : "http://www.w3.org/2008/WebVideo/Annotations/wiki/Image:MAWG-Stockholm-20090626_thumb.JPG", * "targetLabel" : "Group picture of MAWG in Stockholm", * "typeLink" : "http://www.ebu.ch/metadata/cs/ebu_HowRelatedCS.xml#19", * "typeLabel" : "thumbnail", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"collection"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Collection
interface
is
returned
representing
the
collection
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
collection = image.getMediaProperty(["collection"]); /** Resulting in: * [ { "Collection" : { * "propertyName" : "collection", * "collectionLink" : "http://individuals.example.com/JohnDoe/myWorkPictures/", * "collectionLabel" : "My Work Pictures", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"copyright"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Copyright
interface
is
returned
representing
the
copyright
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
copyright = image.getMediaProperty(["copyright"]); /** Resulting in: * [ { "Copyright" : { * "propertyName" : "copyright", * "copyrightLabel" : "All images in the collection are copyrighted by John Doe.", * "holderLabel" : "John Doe", * "holderLink" : "http://individuals.example.com/JohnDoe", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"policy"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Policy
interface
is
returned
representing
the
policy
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
policy = image.getMediaProperty(["policy"]); /** Resulting in: * [ { "Policy" : { * "propertyName" : "policy", * "statementLink" : "http://creativecommons.org/licenses/by/2.5/", * "statementLabel" : "Attribution 2.5 Generic (CC BY 2.5)", * "typeLabel" : "license", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"publisher"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Publisher
interface
is
returned
representing
the
publisher
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
publisher = image.getMediaProperty(["publisher"]); /** Resulting in: * [ { "Publisher" : { * "propertyName" : "publisher", * "publisherLabel" : "ACME", * "publisherLink" : "http://company.example.com/ACME", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"targetAudience"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
TargetAudience
interface
is
returned
representing
the
targetAudience
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
targetAudience = image.getMediaProperty(["targetAudience"]); /** Resulting in: * [ { "TargetAudience" : { * "propertyName" : "targetAudience", * "audienceLink" : "http://www.mpaa.org/ratings/what-each-rating-means#NC-17", * "audienceLabel" : "No One 17 and Under Admitted", * "classificationSystemLink" : "http://www.mpaa.org/ratings", * "classificationSystemLabel" : "MPAA", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"fragment"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Fragment
interface
is
returned
representing
the
fragment
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
getMediaProperty
operation.
getMediaProperty
operation.
fragment = movie.getMediaProperty(["fragment"]); /** Resulting in: * [ { "Fragment" : { * "propertyName" : "fragment", * "identifier" : "http://www.example.com/video.ogv#t=10,20", * "roleLabel" : "chapter", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"namedFragment"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
NamedFragment
interface
is
returned
representing
the
namedFragment
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
namedFragment = movie.getMediaProperty(["namedFragment"]); /** Resulting in: * [ { "NamedFragment" : { * "propertyName" : "namedFragment", * "identifier" : "http://www.example.com/video.ogv#t=30,35", * "label" : "kissScene", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"frameSize"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
FrameSize
interface
is
returned
representing
the
frameSize
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
frameSize = image.getMediaProperty(["frameSize"]); /** Resulting in: * [ { "FrameSize" : { * "propertyName" : "framesize", * "width" : 3072, * "height" : 2304, * "unit" : "pixels", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"compression"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Compression
interface
is
returned
representing
the
compression
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
compression = video.getMediaProperty(["compression"]); /** Resulting in: * [ { "Compression" : { * "propertyName" : "compression", * "compressionLabel" : "H.264/AVC", * "compressionLink" : "urn:example-org:codingnames2010#ITU-H264", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"duration"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Duration
interface
is
returned
representing
the
duration
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
duration = video.getMediaProperty(["duration"]); /** Resulting in: * [ { "Duration" : { * "propertyName" : "duration", * "duration" : 3600, * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"format"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
Format
interface
is
returned
representing
the
format
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
format = image.getMediaProperty(["format"]); /** Resulting in: * [ { "Format" : { * "propertyName" : "format", * "formatLabel" : "image/jpeg", * "formatLink" : "http://dbpedia.org/resource/JPEG", * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"samplingRate"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
SamplingRate
interface
is
returned
representing
the
samplingRate
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
samplingrate = audio.getMediaProperty(["samplingRate"]); /** Resulting in: * [ { "SamplingRate" : { * "propertyName" : "samplingRate", * "samplingRate" : 44100, * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"frameRate"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
FrameRate
interface
is
returned
representing
the
frameRate
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
framerate = video.getMediaProperty(["frameRate"]); /** Resulting in: * [ { "FrameRate" : { * "propertyName" : "frameRate", * "frameRate" : 30, * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"averageBitRate"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
AverageBitRate
interface
is
returned
representing
the
averageBitRate
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
bitrate = video.getMediaProperty(["averageBitRate"]); /** Resulting in: * [ { "AverageBitRate" : { * "propertyName" : "averageBitRate", * "averageBitRate" : 45.06, * "statusCode" : 200 * } * } ] */
When
the
MediaResource.getMediaProperty
operation
is
invoked
with
"numTracks"
as
a
value
of
the
propertyName
parameter,
an
object
implementing
the
NumTracks
interface
is
returned
representing
the
numTracks
property
(defined
in
the
Ontology
for
Media
Resources
1.0
specification).
numTracks = video.getMediaProperty(["numTracks"]); /** Resulting in: * [ { "NumTracks" : { * "propertyName" : "numTracks", * "number" : 2, * "typeString" : "audio", * "statusCode" : 200 * } * } ] */
MetadataSource
interface
MetadataSource
interface
is
used
to
identify
other
metadata
sources.
metadataSources = new MetadataSource("http://www.w3.org/2008/WebVideo/Annotations/drafts/metadata_formats/DC_example1.xml","dc");
This section introduces a set of status codes for the defined API to indicate the system behavior. As described in section 4.4 , the status code is returned as one of the attributes of the MediaAnnotation object returned by a method call to the API. These status codes are used on the API level, and applied to either client side or server side implementations.
Later versions of this document may include additional status codes.
Numerical Code | Textual Description | Example |
---|---|---|
200 | OK | property delivered correctly |
204 | No Content | property retrieved without content |
206 | Partial Content | only a subset of the available data stored in the result set |
400 | Bad Request | syntactical error |
404 | Not Found | the queries resource is not found |
415 | Unsupported Media Type | get duration call on an image data store |
462 | Property not defined in Source Format | location is not defined in MediaRSS |
500 | Internal Server Error | internal library (e.g., extractor) crashes |
562 | Property not supported | only a subset of properties implemented |
This
part
illustrates
some
examples
how
to
use
this
API
using
JavaScript
in
actual
implementations.
Moreover,
in
these
examples
it
is
assumed
that
the
implementation
of
this
API
knows
where
to
find
the
metadata
that
corresponds
to
a
specific
media
resource
(if
necessary
the
location
of
the
metadata
can
be
configured
by
the
use
of
the
MetadataSource
interface).
The
implementation
should
provide
the
mappings
of
different
metadata
formats
to
the
core
properties
of
the
Ontology
for
Media
Resources
1.0
specification.
//search the video array for the one with title "Apocalypse now" for (var i = 0; i < mediaResourceVideoArray.length; i++) {titles//request for the titles of the video, the variable "titles" //will be filled with an array of MediaAnnotation objects. titles = mediaResourceVideoArray[i].getMediaProperty(["title"], "", "", "");//check if the request is finished correctly if (noErrorStatus(titles[0].statusCode) == true) {for (var j = 0; j < titles.length; j++) {//check if the title matches if (titles[j].titleLabel == "Apocalypse Now") {tempResults//request for the director of the video, the variable "results" //will be filled with an array of MediaAnnotation objects. tempResults = mediaResourceVideoArray[i].getMediaProperty(["contributor"], "", "", "");resultfor (var k = 0; k < tempResults.length; k++) { if (tempResults[i].roleLabel == "director") { result = tempResults[i]; break; } } } } } } /** Resulting in: * [ { "Contributor" : { * "propertyName" : "contributor", * "value" : "Francis Ford Coppola", * ..., * "statusCode" = 200 * } * } ] */
//get the id of the second song using the fragments property tracks = albumMediaResource.getMediaProperty(["fragment"], "", "", ""); trackIdentifier = tracks[1].identifier;mediaResource syncMediaResource//use this identifier to get the mediaResource object that represents the track mediaResource = new MediaResource(); if (mediaResource.getSupportedModes() == 2 || mediaResource.getSupportedModes() == 3) { syncMediaResource = mediaResource.createMediaResource(trackIdentifier, new Array(), 2); }title//get the title of the track title = syncMediaResource.getMediaProperty(["title"], "", "", ""); /** Resulting in: * [ { "Title" : { * "propertyName" : "title", * "value" : "I Still Haven't Found What I'm Looking For", * ..., * "statusCode" = 200 * } * } ] */
genre = movie.getMediaProperty(["genre"], "", "", "en-us"); /** Resulting in: * [ { "Genre" : { * "propertyName" : "genre", * "value" : "Action", * ..., * "statusCode" = 200 * } * }, * { "Genre" : { * "propertyName" : "genre", * "value" : "Drama", * ..., * "statusCode" = 200 * } * }, * { ... * } ] */
This part illustrates how this API could be implemented using web services. Note that, Web IDL currently does not provide bindings for web services. The given examples correspond to the examples given in Section 4.5 for each property.
Request: http://example.com/my-media-resource/?getOriginalMetadata=DC
Response
(JSON
format):
[ { "statusCode" : "200" }, {"originalMetadata" : "<?xml version='1.0'?><metadata xmlns='http://example.org/myapp/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://example.org/myapp/ http://example.org/myapp/schema.xsd' xmlns:dc='http://purl.org/dc/elements/1.1/'><dc:title>DC title</dc:title></metadata>"} ]
The following examples illustrate how to request values for the different properties.
Request: http://example.com/my-media-resource/?ma-query=identifier
Response
(JSON
format):
[ { "Identifier" : { "propertyName" : "identifier", "identifierLink" : "urn:uuid:36a87260-1102-11df-8a39-0800200c9a66", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=title
Response
(JSON
format):
[ { "Title" : { "propertyName" : "title", "value" : "Artificial Horizon", "typeLink" : "http://www.ebu.ch/metadata/cs/ebu_ObjectTypeCodeCS.xml#21", "typeLabel" : "Album title", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=language
Response
(JSON
format):
[ { "Language" : { "propertyName" : "language", "languageLabel" : "en-us", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=locator
Response
(JSON
format):
[ { "Locator" : { "propertyName" : "locator", "locatorLink" : "http://www.w3.org/2008/WebVideo/Annotations/wiki/images/9/93/MAWG-Stockholm-20090626.JPG", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=contributor
Response
(JSON
format):
[ { "Contributor" : { "propertyName" : "contributor", "contributorLink" : "http://en.wikipedia.org/wiki/Tim_Burton", "contributorLabel" : "Tim Burton", "roleLink" : "http://www.imdb.com/name/nm0000318/", "roleLabel" : "director", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=creator
Response
(JSON
format):
[ { "Creator" : { "propertyName" : "creator", "creatorLink" : "http://dbpedia.org/resource/William_Shakespeare", "creatorLabel" : "William Shakespeare", "roleLink" : "http://www.ebu.ch/metadata/cs/ebu_RoleCodeCS.xml#22.5", "roleLabel" : "playwright", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=date
Response
(JSON
format):
[ { "MADate" : { "propertyName" : "date", "date": "2009-06-26T15:30:00", "typeLink" : "urn:smpte:ul:06.0E.2B.34.01.01.01.02.07.02.01.10.02.03.00.00", "typeLabel" : "modification date", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=location
Response
(JSON
format):
[ { "Location" : { "propertyName" : "location", "locationLink" : "http://en.wikipedia.org/wiki/San_Jose,_California", "locationLabel" : "San Jose", "longitude" : 37.33986481118008, "latitude" : -121.88507080078125, "altitude" : 0, "coordinateSystemLabel" : "WGS84", "coordinateSystemLink" : "http://www.w3.org/2003/01/geo/wgs84_pos#Point", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=description
Response
(JSON
format):
[ { "Description" : { "propertyName" : "description", "descriptionLabel" : "Group picture of the W3C MAWG at the F2F meeting in Stockholm.", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=keyword
Response
(JSON
format):
[ { "Keyword" : { "propertyName" : "keyword", "keywordLabel" : "meeting with people from outside the organisation", "keywordLink" : "http://sw.opencyc.org/2008/06/10/concept/en/MeetingWithOrganizationalOutsiders", "statusCode" : 200 } }, { "Keyword" : { "propertyName" : "keyword", "keywordLabel" : "standardisation", "keywordLink" : "http://purl.org/vocabularies/princeton/wn30/synset-standardization-noun-1", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=genre
Response
(JSON
format):
[ { "Genre" : { "propertyName" : "genre", "genreLabel" : "Sports", "genreLink" : "http://www.ebu.ch/metadata/cs/ebu_ContentGenreCS.xml#3.1.1.9", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=rating
Response
(JSON
format):
[ { "Rating" : { "propertyName" : "rating", "ratingValue" : 10.0, "ratingSystemLabel" : "John Doe", "ratingSystemLink" : "http://individuals.example.com/JohnDoe", "minimum" : 0, "maximum" : 10.0, "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=relation
Response
(JSON
format):
[ { "Relation" : { "propertyName" : "relation", "targetLink" : "http://www.w3.org/2008/WebVideo/Annotations/wiki/Image:MAWG-Stockholm-20090626_thumb.JPG", "targetLabel" : "Group picture of MAWG in Stockholm", "typeLink" : "http://www.ebu.ch/metadata/cs/ebu_HowRelatedCS.xml#19", "typeLabel" : "thumbnail", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=collection
Response
(JSON
format):
[ { "Collection" : { "propertyName" : "collection", "collectionLink" : "http://individuals.example.com/JohnDoe/myWorkPictures/", "collectionLabel" : "My Work Pictures", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=copyright
Response
(JSON
format):
[ { "Copyright" : { "propertyName" : "copyright", "copyrightLabel" : "All images in the collection are copyrighted by John Doe.", "holderLabel" : "John Doe", "holderLink" : "http://individuals.example.com/JohnDoe", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=policy
Response
(JSON
format):
[ { "Policy" : { "propertyName" : "policy", "statementLink" : "http://creativecommons.org/licenses/by/2.5/", "statementLabel" : "Attribution 2.5 Generic (CC BY 2.5)", "typeLabel" : "license", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=publisher
Response
(JSON
format):
[ { "Publisher" : { "propertyName" : "publisher", "publisherLabel" : "ACME", "publisherLink" : "http://company.example.com/ACME", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=targetAudience
Response
(JSON
format):
[ { "TargetAudience" : { "propertyName" : "targetAudience", "audienceLink" : "http://www.mpaa.org/ratings/what-each-rating-means#NC-17", "audienceLabel" : "No One 17 and Under Admitted", "classificationSystemLink" : "http://www.mpaa.org/ratings", "classificationSystemLabel" : "MPAA", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=fragment
Response
(JSON
format):
[ { "Fragment" : { "propertyName" : "fragment", "identifier" : "http://www.example.com/video.ogv#t=10,20", "roleLabel" : "chapter", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=namedFragment
Response
(JSON
format):
[ { "NamedFragment" : { "propertyName" : "namedFragment", "label" : "kissScene", "identifier" : "http://www.example.com/video.ogv#t=30,35", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=frameSize
Response
(JSON
format):
[ { "FrameSize" : { "propertyName" : "framesize", "width" : 3072, "height" : 2304, "unit" : "pixels", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=compression
Response
(JSON
format):
[ { "Compression" : { "propertyName" : "compression", "compressionLabel" : "H.264/AVC", "urn:example-org:codingnames2010#ITU-H264", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=duration
Response
(JSON
format):
}
]
[ { "Duration" : { "propertyName" : "duration", "duration" : 3600, "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=format
Response
(JSON
format):
[ { "Format" : { "propertyName" : "format", "formatLabel" : "image/jpeg", "formatLink" : "http://dbpedia.org/resource/JPEG", "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=samplingRate
Response
(JSON
format):
[ { "SamplingRate" : { "propertyName" : "samplingRate", "samplingRate" : 44100, "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=frameRate
Response
(JSON
format):
[ { "FrameRate" : { "propertyName" : "frameRate", "frameRate" : 30, "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=averageBitRate
Response
(JSON
format):
[ { "AverageBitRate" : { "propertyName" : "averageBitRate", "averageBitRate" : 45.06, "statusCode" : 200 } } ]
Request: http://example.com/my-media-resource/?ma-query=numTracks
Response
(JSON
format):
[ { "NumTracks" : { "propertyName" : "numTracks", "number" : 2, "typeString" : "audio", "statusCode" : 200 } } ]
This specification defines a API to access metadata information related to media resources on the Web. These APIs will provide means for requesting metadata information, which can already be accessed in one or different formats, either as separate document or embedded in media resources. As such, this API introduces no additional security issue.
One should nevertheless note that some metadata could be used to access personal information about someone without declaration of agreement. For example, temporal and geographic information about a media resource could indirectly provide information about its creator.
There
are
related
activities
and
technical
documents
in
W3C
working
on
this
topics,
such
as
Policy
Requirements
[
POLICY-REQS
]
[[POLICY-REQS]]
in
DAP
WG,
ODRL
1.1
[
ODRL11
],
[[ODRL11]],
P3P
1.1
[
P3P11
]
[[P3P11]]
and
PLING
Wiki
[
PLING-WIKI
].
[[PLING-WIKI]].
Follow this link to download the WebIDL description as IDL file.
module mawg { interface MediaResource { short getSupportedModes(); MediaResource createMediaResource(in DOMString mediaResource, in optional MetadataSource[] metadataSources, in optional short mode); }; interface AsyncMediaResource : MediaResource { void getMediaProperty(in DOMString[] propertyNames, in PropertyCallback successCallback, in ErrorCallback errorCallback, in optional DOMString fragment, in optional DOMString sourceFormat, in optional DOMString language ); void getOriginalMetadata (in DOMString sourceFormat, in MetadataCallback successCallback, in ErrorCallback errorCallback); }; interface PropertyCallback { void handleEvent (in MediaAnnotation[] mediaAnnotations); }; interface MetadataCallback { void handleEvent (in DOMString[] metadata); }; interface ErrorCallback { void handleEvent (in DOMString errorStatus); }; interface SyncMediaResource : MediaResource { MediaAnnotation[] getMediaProperty(in DOMString[] propertyNames, in optional DOMString fragment, in optional DOMString sourceFormat, in optional DOMString language); DOMString[] getOriginalMetadata (in DOMString sourceFormat); }; interface MetadataSource { attribute DOMString metadataSource; attribute DOMString sourceFormat; }; interface MediaAnnotation { attribute DOMString propertyName; attribute DOMString value; attribute DOMString language; attribute DOMString sourceFormat; attribute DOMString fragmentIdentifier; attribute DOMString mappingType; attribute short statusCode; }; interface Identifier : MediaAnnotation { attribute DOMString identifierLink; }; interface Title : MediaAnnotation { attribute DOMString titleLabel; attribute DOMString typeLink; attribute DOMString typeLabel; }; interface Language : MediaAnnotation { attribute DOMString languageLink; attribute DOMString languageLabel; }; interface Locator : MediaAnnotation { attribute DOMString locatorLink; }; interface Contributor : MediaAnnotation { attribute DOMString contributorLink; attribute DOMString contributorLabel; attribute DOMString roleLink; attribute DOMString roleLabel; }; interface Creator : MediaAnnotation { attribute DOMString creatorLink; attribute DOMString creatorLabel; attribute DOMString roleLink; attribute DOMString roleLabel; }; interface MADate : MediaAnnotation { attribute DOMString date; attribute DOMString typeLink; attribute DOMString typeLabel; }; interface Location : MediaAnnotation { attribute DOMString locationLink; attribute DOMString locationLabel; attribute double longitude; attribute double latitude; attribute double altitude; attribute DOMString coordinateSystemLabel; attribute DOMString coordinateSystemLink; }; interface Description : MediaAnnotation { attribute DOMString descriptionLabel; }; interface Keyword : MediaAnnotation { attribute DOMString keywordLink; attribute DOMString keywordLabel; }; interface Genre : MediaAnnotation { attribute DOMString genreLink; attribute DOMString genreLabel; }; interface Rating : MediaAnnotation { attribute double ratingValue; attribute DOMString ratingSystemLink; attribute DOMString ratingSystemLabel; attribute double min; attribute double max; }; interface Relation : MediaAnnotation { attribute DOMString targetLink; attribute DOMString targetLabel; attribute DOMString typeLink; attribute DOMString typeLabel; }; interface Collection : MediaAnnotation { attribute DOMString collectionLink; attribute DOMString collectionLabel; }; interface Copyright : MediaAnnotation { attribute DOMString copyrightLabel; attribute DOMString holderLink; attribute DOMString holderLabel; }; interface Policy : MediaAnnotation { attribute DOMString statementLink; attribute DOMString statementLabel; attribute DOMString typeLink; attribute DOMString typeLabel; }; interface Publisher : MediaAnnotation { attribute DOMString publisherLink; attribute DOMString publisherLabel; }; interface TargetAudience : MediaAnnotation { attribute DOMString audienceLink; attribute DOMString audienceLabel; attribute DOMString classificationSystemLink; attribute DOMString classificationSystemLabel; }; interface Fragment : MediaAnnotation { attribute DOMString identifier; attribute DOMString roleLink; attribute DOMString roleLabel; }; interface NamedFragment : MediaAnnotation { attribute DOMString identifier; attribute DOMString label; }; interface FrameSize : MediaAnnotation { attribute double width; attribute double height; attribute DOMString unit; }; interface Compression : MediaAnnotation { attribute DOMString compressionLink; attribute DOMString compressionLabel; }; interface Duration : MediaAnnotation { attribute double duration; }; interface Format : MediaAnnotation { attribute DOMString formatLink; attribute DOMString formatLabel; }; interface SamplingRate : MediaAnnotation { attribute double samplingRate; }; interface FrameRate : MediaAnnotation { attribute double frameRate; }; interface AverageBitRate : MediaAnnotation { attribute double averageBitRate; }; interface NumTracks : MediaAnnotation { attribute short number; attribute DOMString typeString; };};
Note: The following subsections lists all significant changes applied to the API for Media Resources 1.0 specification received in LC.
-- General changes ---
---[LC 2406] 2001-09-10 ---
---[LC 2410] 2001-09-10 ---
---[LC 2419] 2001-09-10 ---
---[LC 2394] 2001-09-10 ---
The following subsection lists all significant changes applied to the API for Media Resources 1.0 specification. These have been decided during the 10th Face-to-face meeting hosted by Apple in Silicon Valley, Ca, USA.
The following subsection lists all significant changes applied to the API for Media Resources 1.0 specification. These have been decided during the 12th Face-to-face meeting hosted by JOANNEUM, Graz, Austria.
This document is the work of the W3C Media Annotations Working Group .
Members
of
the
Working
Group
are
(at
the
time
of
writing,
and
by
alphabetical
order):
Werner
Bailer
(JOANNEUM
RESEARCH),
Tobias
Bürger
((public)
Invited
expert),
Eric
Carlson
(Apple,
Inc.),
Pierre-Antoine
Champin
(Université
de
Lyon),
Ashish
Chawla
((public)
Invited
expert),
Jaime
Delgado
(Universitat
Politècnica
de
Catalunya),
Jean-Pierre
Evain
((public)
Invited
expert),
Martin
Höffernig
(JOANNEUM
RESEARCH),
Philip
Jägenstedt
(Opera
Software),
Ralf
Klamma
((public)
Invited
expert),
WonSuk
Lee
(Samsung
Electronics
Co.,
Ltd.),
Véronique
Malaisé
(Vrije
Universiteit),
Erik
Mannens
(IBBT),
Hui
Miao
(Samsung
Electronics
Co.,
Ltd.),
Thierry
Michel
(W3C/ERCIM),
Frank
Nack
(University
of
Amsterdam),
Soohong
Daniel
Park
(Samsung
Electronics
Co.,
Ltd.),
Silvia
Pfeiffer
(W3C
Invited
Experts),
Chris
Poppe
(IBBT),
Victor
Rodríguez
(Universitat
Politècnica
de
Catalunya),
Felix
Sasaki
(Potsdam
University
of
Applied
Sciences),
David
Singer
(Apple,
Inc.),
Florian
Stegmaier
((public)
Invited
expert),
John
Strassner
((public)
Invited
expert),
Joakim
Söderberg
(ERICSSON),
Mari
Carmen
Suárez-Figueroa
Sutárez-Figueroa
((public)
Invited
expert)
Thai
Wey
Then
(Apple,
Inc.),
Ruben
Tous
(Universitat
Politècnica
Polittécnica
de
Catalunya),
Raphaël
Troncy
(EURECOM),
Vassilis
Tzouvaras
(K-Space),
Davy
Van
Deursen
(IBBT).
The people who have contributed to discussions on public-media-annotation@w3.org are also gratefully acknowledged.