[Developers] query for values vs name/id
Tim Sturge
tsturge at metaweb.com
Thu May 24 17:36:37 UTC 2007
The shortcut:
"/music/artist/active_start": [{}]
The explanation:
There's a bit of a trick to this. MQL divides the world into "values"
and "objects". If you look at the expected_type of a property (try the query
{ "query0":
{ "query":
{ "id": "<a-property-like-/music/artist/active_start>",
"type": "/type/property",
"expected_type": null
}
}
}
You will find out if a property expects a value (one of /type/id,
/type/key, /type/text, /type/rawstring, /type/int, /type/float,
/type/boolean and /type/uri) or an object (anything else)
Then you can ask
[{ "name": null, "id": null, "type": [], "optional": true }]
for the objects and
[{ "value": null, "type": null, "optional": true }]
for the values. (the optional: true ensures the query doesn't fail if
the property is missing)
[{}]
asks MQL to automatically inspect the expected_type for you and insert
one or other of the clauses you see above, depending on which is
appropriate. It's what we use internally 90% of the time.
Tim
Steve Sak wrote:
> Given that I've performed a query to get the properties of some class,
> say /music/artist and now want to get the "values" and maybe some other
> attributes of those properties what does the query look like? The
> problem I'm running into is when asking for attributes explicitly I
> can't tell if the property refers to a primitive attibute or another
> object. Perhaps I'm just missing something obvious.
>
> For instance:
>
> {"query0": { "query":[{
> "limit":1,
> "name":"The Police",
> "type":"/music/artist",
> "/music/artist/active_start":[{"name":null,"id":null}],
> "/music/artist/acquire_webpage":[{"name":null,"id":null}],
> "/music/artist/album":[{"name":null,"id":null}],
> "/music/artist/similar_artist":[{"name":null,"id":null}],
> "/music/artist/origin":[{"name":null,"id":null}],
> "/music/artist/home_page":[{"name":null,"id":null}],
> "/music/artist/active_end":[{"name":null,"id":null}],
> "/music/artist/label":[{"name":null,"id":null}],
> "/music/artist/artist_similar":[{"name":null,"id":null}],"
> /music/artist/genre":[{"name":null,"id":null}],
> "/music/artist/track":[{"name":null,"id":null}],
> "/music/artist/contribution":[{"name":null,"id":null}],
> "/music/artist/member":[{"name":null,"id":null}]}]}}
>
> gives the error:
>
> {
> "status": "/mql/status/error",
> "messages": [ {
> "info": {
> "property": "name",
> "expected_type": "/type/datetime"
> },
> "query": [ {
> "/music/artist/active_start": [ {
> "error_inside": ".",
> "name": null,
> "id": null
> }],
> "/music/artist/acquire_webpage": [ {
> "name": null,
> "id": null
> }],
> "limit": 1,
> "type": "/music/artist",
> "/music/artist/album": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/similar_artist": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/home_page": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/origin": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/active_end": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/label": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/genre": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/artist_similar": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/track": [ {
> "name": null,
> "id": null
> }],
> "/music/artist/contribution": [ {
> "name": null,
> "id": null
> }],
> "name": "The Police",
> "/music/artist/member": [ {
> "name": null,
> "id": null
> }]
> }],
> "type": "/mql/error",
> "message": "Type /type/datetime does not have property name",
> "path": "/music/artist/active_start",
> "status": "/mql/status/type_error"
> }]
> }
> _______________________________________________
> Developers mailing list
> Developers at freebase.com
> http://lists.freebase.com/mailman/listinfo/developers
>
More information about the Developers
mailing list