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