- From: George Cristian Bina <george@oxygenxml.com>
- Date: Wed, 22 Sep 2010 15:56:09 +0300
- To: Marie Bilde Rasmussen <mariebilderas@gmail.com>
- CC: xmlschema-dev@w3.org
Hi Marie,
Substitution groups have also constraints. The type of the specialized
subject element needs to be validly derived from the Subject type
http://www.w3.org/TR/xmlschema-1/#e-props-correct
***
4 If there is a {substitution group affiliation}, the {type definition}
of the element declaration must be validly derived from the {type
definition} of the {substitution group affiliation}, given the value of
the {substitution group exclusions} of the {substitution group
affiliation}, as defined in Type Derivation OK (Complex) (§3.4.6) (if
the {type definition} is complex) or as defined in Type Derivation OK
(Simple) (§3.14.6) (if the {type definition} is simple).
***
Assuming a definition for Subject type and element as
<xs:simpleType name="Subject">
<xs:restriction base="xs:string">
<xs:enumeration value="a"/>
<xs:enumeration value="b"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Subject" type="Subject"/>
then following to Type Derivation OK (Simple) (§3.14.6)
http://www.w3.org/TR/xmlschema-1/#cos-st-derived-ok
***
Schema Component Constraint: Type Derivation OK (Simple)
For a simple type definition (call it D, for derived) to be validly
derived from a type definition (call this B, for base) given a subset of
{extension, restriction, list, union} (of which only restriction is
actually relevant) one of the following must be true:
1 They are the same type definition.
2 All of the following must be true:
2.1 restriction is not in the subset, or in the {final} of its own {base
type definition};
2.2 One of the following must be true:
2.2.1 D's ·base type definition· is B.
2.2.2 D's ·base type definition· is not the ·ur-type definition· and is
validly derived from B given the subset, as defined by this constraint.
2.2.3 D's {variety} is list or union and B is the ·simple ur-type
definition·.
2.2.4 B's {variety} is union and D is validly derived from a type
definition in B's {member type definitions} given the subset, as defined
by this constraint.
***
you can see that a new subject defined as
<xs:element name="NewSubject" substitutionGroup="Subject"
type="NewSubject"/>
<xs:simpleType name="NewSubject">
<xs:union memberTypes="Subject">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="c"/>
<xs:enumeration value="d"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
does not work. Only a restriction of the Subject type will work in this
case.
Best Regards,
George
--
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
On 9/22/10 3:29 PM, Marie Bilde Rasmussen wrote:
> Hi George,
> You are right. And Thankyou. I just found the same paragraph in the spec
> (grrrr!). I am ow considering a solution with a specialized vocabulary
> in a separate element, placed in substitution group with my <Subject>
> element as it's head. If substitution groups can't be <redefined>d, I'll
> allow these <specialized-subject>-elements in the most general schema -
> these elements probably won't bother my authors as much as if I expanded
> the Simpletype in it's original definition, forcing them to choose from
> a list of alternatives that would be far too long for them.
> Thanks again!
> best regards,
> Marie
> 2010/9/22 George Cristian Bina <george@oxygenxml.com
> <mailto:george@oxygenxml.com>>
>
> Hi Marie,
>
>
>
> > Danish-English-technical.xsd builds on it's turn upon
> > Danish-English.xsd, but this time I have chosen to use <xs:redefine>,
> > because in these special dictionaries, I need to modify the
> SimpleType
> > "Subject" by extension.
> ------------^^^^^^^^^^^^^
>
> The derivation methods for simple types are restriction, list and
> union, extension is for complex types. In case of redefinitions of
> simple types you can use only restriction, see
> Schema Representation Constraint: Redefinition Constraints and Semantics
> http://www.w3.org/TR/xmlschema-1/#src-redefine
> ***
> 5 Within the [children], each <simpleType> must have a <restriction>
> among its [children] and each <complexType> must have a restriction
> or extension among its grand-[children] the ·actual value· of whose
> base [attribute] must be the same as the ·actual value· of its own
> name attribute plus target namespace;
> ***
>
> Best Regards,
> George
> --
> George Cristian Bina
> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com <http://www.oxygenxml.com/>
>
>
> On 9/22/10 2:23 PM, Marie Bilde Rasmussen wrote:
>
> Hello.
> I have an xml schema, let's call it dictionary.xsd, describing
> general
> structures and datatypes used in dictionaries. dictionary.xsd
> contains a
> definition of a SimpleType called Subjects. The SimpleType is a
> restriction of xs:string and it contains a long list of
> enumerations.
> Another - more specialized - schema, called Danish-English.xsd
> is built
> upon dictionary.xsd. This is done by using <xs:include>.
> A third - even more specialized - schema, called
> Danish-English-technical.xsd builds on it's turn upon
> Danish-English.xsd, but this time I have chosen to use
> <xs:redefine>,
> because in these special dictionaries, I need to modify the
> SimpleType
> "Subject" by extension.
> I cannot figure out how to do this. I am not allowed to do so.
> This has worked for me with only one level of inclusion. Could
> the fact
> that I want to redefine a schema on a level that is more than one
> nesting leve l"away" be the problem?
> below I have tried to illustrate the nesting and the Type
> Definitions:
> Danish-English-technical.xsd (redefines SimpleType "Subjects")
> ->
> redefines
> Danish-English.xsd
> ->
> includes
> dictionary.xsd (declares SimpleType "Subjects" as a restriction of
> xs:string by enumeration)
> I would be grateful for any input.
> Regards,
> Marie
>
>
Received on Wednesday, 22 September 2010 12:57:06 UTC