- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 29 Nov 2002 15:31:19 +0000
- To: xmlschema-dev@w3.org, Stuart Brown <sbrown@extenza.com>
Hi Stuart, > I can write a xsd:restriction pattern for the attribute simple type > as follows: > > <xsd:pattern > value="(doThis|doThat|doSomethingElseEntirely)\(\c+\)(,(doThis|doThat|doSome > thingElseEntirely)\(\c+\))*"/> > > which (I hope) enforces the function names, the parens, and a > requirement that the content of the parens by characters permitted > by xsd:NMTOKEN only, but (and I bet you saw this coming) is there > any way that I can enforce the parens contents to be IDREFs? At the > moment I am contemplating either leaving it with my clunky element > sequence, or using the above pattern and providing additional > Schematron (or sim.) validation for the key validation. Yes, you'd have to use Schematron to validate a string structured like that. What about having the structure look more like: <implement do="doThis DEF1 doThat DEF2 doSomethingElseEntirely DEF3" /> and then defining the simple type for the do attribute as a list type: <xs:simpleType name="actions"> <xs:restriction> <xs:simpleType> <xs:list> <xs:simpleType> <xs:union memberTypes="xs:IDREF"> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="doThis" /> <xs:enumeration value="doThat" /> <xs:enumeration value="doSomethingElseEntirely" /> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> </xs:list> </xs:simpleType> <xs:minLength value="2" /> <xs:pattern value="(doThis|doThat|doSomethingElseEntirely) \c+ ((doThis|doThat|doSomethingElseEntirely) \c+ )*" /> </xs:restriction> </xs:simpleType> In other words, make the do attribute hold a list of IDREFs and function names, paired together. The pattern guarantees that the values are arranged properly in pairs. Untested. Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/
Received on Friday, 29 November 2002 10:31:31 UTC