Hi Jack!
> One thing I'm unsure about is whether cardinality and order
> constraints should be specified in the attribute. This means that any
> type that uses the attribute is constrained in the same way.
>
> I'm not used to having attribute definitions independent of type
> definitions. I don't know that it is bad. I'm just not sure what
> limitations come with this model. This discussion thread highlights
> related issues. "requiredAttribute" is the first case where a type
> definition explicitly refers to independently defined attributes.
This is a good observation, and here are some supplemental information
to understand some tradeoffs.
In XML schemas, it is what they do if my memory is good: they define
ComplexTypes, and a complex type is defined by its attributes and all
their attributes such as: required, etc. But there is a reason why they
called these things: ComplexType.... because they can become quite
complex :)
Right now, the attributes are described in such a way that it is the
definition of these attributes that "constrain" their usage (with the
allowedValue, allowedType attributes, and now minValues, maxValues and
orderedValues). The logic is certainly different than the one of system
such as the XML schemas.
I think that the beauty of processing that way is that users and systems
implementators will use smaller and simpler constructs to create their
schemas.
But I hear what you say here: lets say we have an attribute A, with some
cardinality and order constraints. You can use that attribute to define
types X and Y. However, you create a new type W, which would like to
re-use attribute A, but for a different purpose, with different
cardinality and order constraints. What do you do?
Well, the minding I personally have here is: if such a constrains are
that different, is A really the good attribute to describe W? Maybe it
is just a matter of creating another attribute B with these constraints.
That way, all defined attributes are purposefully created while keeping
the schema as simple as possible (even if fewer attributes). You don't
have to create and maintain these complex types which is a major benefit.
I really think these are too different modeling practices, with good and
bad.
About the "requiredAttribute" attribute that is "attached" to a type,
then this is another question. The attribute allowedType is enough to
know how to use a vocavulary, because you know how an attribute can be
used, to describe what kind of record. However, there are usecases where
something like "requiredAttribute" is helpful when a system ingest datasets.
Lets say you ingest some dataset on the BKN People node. You are
expecting all people to have at least a name and a homepage, and all
document to have a title, abstract and some kind of ID. Without
something like "requiredAttribute", we have nothing to model this,
except if you hard code this in the system. And if such "requirement"
needs are not specified somewhere, some UI pages can look funky because
of key missing pieces of data.
Otherwise, would you have something similar/related to suggest? These
are still proposals :)
> My question is whether it is important to support metadata specific to
> the binding of a type and attribute. I don't know if this
> functionality is important for bibliographic schema. It may also be
> possible to add the functionality later if necessary using techniques
> like what is used for "requiredAttribute".
So, you are questioning the utility (at the moment), of only
requiredAttribute, or all the others as well?
Thanks,
Take care,
Fred