Jensen, Richard and all,

I'd like to propose some other issues beside Jensen's:

1) How to represent the current data schema
2) How to declare the data schema precisely in the capabilities

Most JSON libraries would have no problem "parsing" the result, since a
JSONValue can always be converted to an array, an object or a primitive
type (scalar value).  The question is how the application/client and the
server have the same understanding of the data.  For example, some
extensions have already taken into consideration the compatibility with
multi-cost, but if such extensions are to be combined together, what is
the correct processing order?

One solution, as Jensen proposes, is to usea data schema.  The client
can pre-compile its schema tree used in a request so that the ALTO
library can correctly understand the structure of the cost value. 
However, instead of using the cost-schema, Ithink maybe it is possible
to extend the cost types directly, and all the options can be embedded
in the query.  For example,

{
    "cost-metric": "multicost",
    "cost-mode": "compound",  // or "vector", makes no difference now
    "multi-cost-types": [
        {"cost-metric": "calendar", "cost-mode": "compound",
"calendar-type": [
            {"cost-metric": "routingcost", "cost-mode": "numerical"}
        ], "calendar-attributes": {...}}
    ]
}

However, it can still be very painful for the server to declare the
capabilities precisely.  Haven't got a good solution for that now.

Regards,
Kai


On 19/07/16 03:08, Jensen Zhang wrote:
> Personally speaking, I think there are two issues about cost-type
> definition:
>
> 1) How to make the compound type compatible with RFC7285;
> 2) How to extend single cost-type easily. (Maybe we want to support
> generic types)
>
> A simple design I think is to introduce a special cost-mode called
> "compound". When cost-mode value is "compound", "multi-cost-types"
> field will be required. If the cost-mode value is not equal to
> "compound", we need to suppose the cost-type is always a single type.
>
> I don't think about the benefit from supporting generic types very
> clearly. We can introduce another some basic cost-mode like identity,
> vector and map.
>
> The recommended usage can look like:
>
> if meta.cost-type.cost-mode == "compound"
>   ElemType is array && "multi-cost-types" field is required
> else if meta.cost-type.cost-mode == "numerical"
>   ElemType is number
> else if meta.cost-type.mode == "ordinal"
>   ElemType is non-negative int
> else if meta.cost-type.mode == "identity"
>   ElemType is string
> else if meta.cost-type.mode == "vector"
>   ElemType is array
> else if meta.cost-type.mode == "map"
>   ElemType is object
>
> I think it is general enough to express arbitrary JSONValue. But I am
> not sure making the cost-mode cover generic types is helpful.
> Actually, "vector" and "map" are not single types. They are compound
> types indeed. If we want to express the cost-type accurately, one
> solution I think is to introduce a new field called "cost-schema" in
> cost-type:
>
> object {
>          CostMetric cost-metric;
>          CostMode   cost-mode;
>          [CostSchema cost-schema;]
>          [JSONString description;]
>        } CostType;
>
> The cost-schema field for cost-type is just like DTD for xml. And we
> can design complex compound types by using cost-schema.
>
> But I don't plan to deprecate "multi-cost-types" field. Because I
> think multi-cost is not a compound type but a class of compound types.
> For example, cost-maps with multi-cost [bw, hopcount] and with
> [hopcount, delay] can have the same capability [bw, hopcount, delay].
>
> The above is my current thought.
>
> Best,
> Jensen
>
> On Mon, Jul 18, 2016 at 8:11 AM, Y. Richard Yang <[email protected]
> <mailto:[email protected]>> wrote:
>
>     Hi all,
>
>     Several of us are reviewing the documents in the WG. Here is one
>     common issue: We see that quite a few documents depend on encoding
>     the types of the elements in a cost map. This is a complexity that
>     the based protocol RFC7285 identifies and hence decided to make
>     the type the generic type JSONValue. But in the spirit of being
>     strong typed, a specific cost map needs an indication of the type.
>     For those who need some review, please see:
>
>     - Cost Map
>     response: https://tools.ietf.org/html/rfc7285#section-11.2.3.6
>       Requirements: 
>
>         media-type: application/alto-costmap+json
>
>         meta: MUST include cost-type and dependent-tag of the network map
>
>         data: "An implementation of the protocol in this document
>         SHOULD assume that the cost is a JSONNumber and fail to parse
>     if it
>         is not, unless the implementation is using an extension to this
>         document that indicates when and how costs of other data types are
>         signaled."
>
>     - Filtered Cost Map
>     response: https://tools.ietf.org/html/rfc7285#section-11.3.2
>
>       Defined as the same as Cost Map.
>
>     - Endpoint Cost
>     Service: https://tools.ietf.org/html/rfc7285#section-11.5.1
>
>         media-type: application/alto-endpointcost+json
>         meta: "The "meta" field of an endpoint cost response MUST
>     include the "cost-
>        type" field, to indicate the cost type used."
>
>     The current definition of cost-type has two components: cost-mode
>     and cost-metric,
>     and cost-mode has two values defined: numerical and ordinal, both
>     indicate a single
>     number. At the same time, multiple active drafts
>     (https://datatracker.ietf.org/wg/alto/documents/)
>     need compound types for the elements of a cost map:
>
>     - [multi-cost] 
>     This draft is probably the one which we need to resolve the issue
>     the most urgent. Assume that
>     it uses the current alto-costmap+json media type, then it cannot
>     satisfy the requirement of "meta"
>     including cost-type.
>
>     - [cost-calendar]
>     Cost calendar requires a compound data type as well.
>
>     - [fcs]
>     fcs depends on multi-cost and hence can have an issue as well.
>
>     - [path-vector]
>     The current definition of path-vector needs a vector of network
>     elements. 
>
>     - [te-metrics]
>     It appears that this document is fine, but may need to watch on
>     related consistency issues.
>
>     The preceding is not a minor syntax/encoding issue. How to handle
>     types is a basic problem. 
>     Conceptually, a cost map, as in the base protocol is param'ed type:
>     Map< String, Map< String, ElemType > >
>
>     (Note: Some may argue that String above should be typed identifier.)
>
>     So far, we have defined ElemType to be JSONValue, and used the
>     cost-type to indicate more specifics:
>     if meta.cost-type.cost-mode == "numerical"
>       ElemType is float
>     else if meta.cost-type.mode == "ordinal"
>       ElemType is non-negative int
>
>     My personal feeling is that we may need to start to introduce new
>     cost-mode values to allow generic types. For those who are PL
>     experts, it is a good chance to chime in. It is an important issue
>     that the WG may want to work together to achieve a consistent,
>     extensible design.
>
>     Cheers,
>     Richard
>
>     References:
>     -
>     [multi-cost] https://datatracker.ietf.org/doc/draft-ietf-alto-multi-cost/
>     - [cost-calendar]
>     https://datatracker.ietf.org/doc/draft-randriamasy-alto-cost-calendar/
>     - [fcs] https://datatracker.ietf.org/doc/draft-gao-alto-fcs/
>     -
>     [path-vector] 
> https://datatracker.ietf.org/doc/draft-yang-alto-path-vector/
>     -
>     [te-metrics] https://datatracker.ietf.org/doc/draft-wu-alto-te-metrics/
>
>     _______________________________________________
>     alto mailing list
>     [email protected] <mailto:[email protected]>
>     https://www.ietf.org/mailman/listinfo/alto
>
>

_______________________________________________
alto mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/alto

Reply via email to