W3C home > Mailing lists > Public > public-media-annotation@w3.org > April 2010

Re: [W3C Media Annotation WG] Request for Expert Review

From: Silvia Pfeiffer <silviapfeiffer1@gmail.com>
Date: Mon, 5 Apr 2010 22:14:29 +1000
Message-ID: <x2k2c0e02831004050514n18dd451bn554ff5774a6c9b92@mail.gmail.com>
To: Soohong Daniel Park <soohong.park@samsung.com>, public-media-annotation@w3.org
Cc: Joakim Söderberg <joakim.soderberg@ericsson.com>, tmichel@w3.org
Dear Soohong, all,

Here is now my feedback on the API document.

On Tue, Mar 16, 2010 at 3:17 PM, Soohong Daniel Park
<soohong.park@samsung.com> wrote:
> [2]
> API for Media Resource 1.0 [Version 09 March 2010]
> http://www.w3.org/TR/2010/WD-mediaont-api-1.0-20100309/
> Abstract: This specification defines a client-side API to access metadata
> information related to media resources on the Web. The overall purpose of
> the API is to provide developers with a convenient access to metadata
> information stored in different metadata formats. The API will be introduced
> in an abstract manner using the interface definition language Web IDL.
> Thereby, the Media Ontology Core Properties will be used as a pivot
> vocabulary in the API.


1. Section 2.1: MAObject

You need to introduce MAObject better. What is it for? IIUC it is the
parent class to all return types - i.e. it is a generic list of
attributes for any property. I am not actually sure it is that useful
- in an application, that is information about the transcoding. I
would probably prefer if the properties were subclassed from a
MetadataSource object. But I am not sure you need that, either.

2. Section 2.1: Language

I would not define Language as a part of the return value of some of
the properties - it is very unlikely that a annotation uses different
languages for different properties. I would only manage the language
on the level of the metadata source level.

3. Section 2.2: setContext

I would suggest renaming that function. Also, your parameters are not
quite right:

boolean setMAResource ( in DOMString mediaResource, in optional
MetadataSource[] metadataSources);

(note the replacement of "Object" with "MetadataSource").

3. Section 2.3

You need to make sure that the full definition of "getProperty" is
printable (for me, it went off the right edge of my page).

Also, you only return one MAObject IIUC, so don't make the return value a list.

Also, I believe that the API should be independent of a format and
thus the sourceFormat and the subtype parameters are not useful.

Also, I believe the API should be independent of the language in use -
if you really wanted language selection to be made on the metadata
files, then this should be handled at a different level.

Further, I believe your "fragment" parameter may also refer to data
tracks in media resources, which I find a more important parameter
than all the other optional one, so would prefer to have that as the
second parameter.

Thus, it should probably look like:

MAObject getProperty(in DOMString propertyName, in optional DOMString fragment);

Note that I am not quite sure how to represent in Web IDL that the
MAObject is the union of all the possible return values for all
getProperty requests. I don't think how it is currently done is quite
correct, since it only returns the parent class, not the child

Further, I would suggest as an example for how to introduce this into
a UA: the  following example for how to introduce it into HTML5:

interface HTMLMediaElement : HTMLElement {
  getter MAObject getProperty(in             DOMString propertyName,
                                            in optional unsigned long

(I don't think any other type of fragment than the track index makes
sense for HTML5).

4. Section Identifier

Your examples are all a bit incomplete in their JSON representation. I
will write a full example for this section - the others need to be
changed logically to this, too, though I will only indicate this where
it may be confusing.

Identifier.value =
Identifier.type = "URI"

Usage as a service:
* Request: http://example.com/my-media-resource?ma-query=identifier
* Response in JSON:
{    "Identifier": {
           // This first lot is inherited from MAObject, though I am
unclear what the values should be
            "unstructuredValue": ???,
            "uri" : ???,
            "sourceFormat": ???,
            "fragmentIdentifier": ???,
            "mappingType": ???,
        "type": "URI"

Usage as a UA call in JavaScript in a Web Browser:

video = document.getElementByTagName("video")[0];
id = video.getProperty("identifier");

Resulting in:
id.value = "http://www.w3c.org/2008/WebVideo/Annotations/wiki/Image:MAWG-Stockholm-20090626.JPG"
and id.type = "URI"
and the other values as above in JSON

5. Section Title

* remove "Language" from the inheritance list - should not be per
property but per metadata resource

* Example should be:
title.value = "MAWG Stockholm 20090626"
title.type = "Video title"

* JSON response should be as in the identifier example above

* add a UA JavaScript example as above

* similarly adapt Language, Locator

6. Section Contributor

* why are we suddenly using "id" and "role" as attribute values? They
should continue to be "value" and "type" like in the previous
properties for consistency.

* in this example, you have a set of return values, so the spec needs
to look different:

interface Contributors {
    attribute DOMString value;
    attribute DOMString type;

interface Contributor: MAObject {
    attribute Contributors[] contributor;

* JSON reply thus looks something like:

{    "Contributor": {
           // This first lot is inherited from MAObject, though I am
unclear what the values should be
            "unstructuredValue": ???,
            "uri" : ???,
            "sourceFormat": ???,
            "fragmentIdentifier": ???,
            "mappingType": ???,
            "contributor": [ {
                     "value": "http://individuals.example.com/Contributor1",
                     "type": "editor"
                     "value": "http://individuals.example.com/Contributor2",
                     "type": "producer"

7. Section Creator

* replace "StringObject" with "Creator"

* again, the value is a list, so it has to be something like:

interface Creator: MAObject {
  attribute DOMString[] values;

* the JSON looks something like:

{    "Creator": {
           // This first lot is inherited from MAObject, though I am
unclear what the values should be
            "unstructuredValue": ???,
            "uri" : ???,
            "sourceFormat": ???,
            "fragmentIdentifier": ???,
            "mappingType": ???,

8. Section CreationDate

* you talk about both "CreationDate" and "Date" here. If you want this
value to have a type of e.g. "creation date" and "publish date", it
should not be called "CreationDate", but only "Date".

*also, this may possibly return a list of dates rather than just one value

9. Section Location

* your response value should be a JSON list something like:

{    "Location": {
           // This first lot is inherited from MAObject, though I am
unclear what the values should be
            "unstructuredValue": ???,
            "uri" : ???,
            "sourceFormat": ???,
            "fragmentIdentifier": ???,
            "mappingType": ???,
          "name": "San Jose",
          "longitude": 37.3398...,
          "latitude": -121.88...,
          "altitude": 0,
          "system": "GPS"

10. Section Description

* replace "StringObject" with "Description"

11. Section Keyword

* replace "StringObject with "Keyword"

* there should be a list of values:

interface Keyword: MAObject {
  attribute DOMString[] value;

12. Section Genre

* replace "StringObject" with "Genre"

13. Section Collection

* replace "StringObject" with "Collection"

14. Section Policy

* replace "Policy" with "License" as it is called in the Ontology (or
do it the other way roung)
* replace "policy" attribute with "value"
* add a "link" attribute (or something similar) with a link to the license text

interface License: MAObject {
  attribute DOMString value;
  attribute DOMString link;
  attribute DOMString organization;
  attribute DOMString type;

* example needs to map the fields

15. Section Publisher

* replace "StringObject" with "Publisher"
* publisher does not have a need for a language attribute

16. Section FrameSize

* Request should use the correct property name: replace
"technical-properties" with "frameSize"

17. Section Format

* doesn't need a language attribute
* replace "StringObject" with "Format"
* interface should be:

interface Format: MAObject {
  attribute DOMString value;

18. Section Samplingrate

* replace "UnsignedLongObject" with "Samplingrate"

* example should have a common samplingrate for audio, e.g. 44100 Hz

19. Section Framerate

* replace "FloatObject" with "Framerate"

20. Section Bitrate

* you should rename it to AverageBitrate - anything else doesn't
really make sense in the context of modern codecs
* should be provided in kbps (kilobit per second)
* replace "FloatObject" with "AverageBitrate"
* example value could be more useful, e.g. 45.06 kbps

21. Section 2.4 getDiagnosis

* the request should not have a "=" at the end of the URI
* same for 2.5.1 and 2.5.2 examples

22. Section 2.5.3 getOriginalData

* the return value should not be a DOMString list - it's simply a
single, very long string for the requested source format - not for all
possible formats

* in the examples, the quotes (") inside the string need to be escaped

23. Section 3

* if you introduce all the examples above for web service and for user
agent scenarios, you might not need this section

24. Section 4

* mentions "setting metadata" - I am not sure that can be done easily
across formats actually ... I'd be curious how you will realise that

Uff, got through the sections! I am quite happy with the documents
overall, so please take my feedback as improvements on an already good
set of documents.

Best Regards,
Received on Monday, 5 April 2010 12:15:23 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:17:37 UTC