- From: George Cristian Bina <george@oxygenxml.com>
- Date: Mon, 07 Aug 2006 21:41:29 +0300
- To: lawrence.michel@post.ch
- CC: xmlschema-dev@w3.org
Hi, This is called co-occurrence constraint and it is not supported by the (current version of) XML Schema. You need to define a more relaxed schema and place the constraints at some other level, at application level for instance or using Schematron embedded rules. Below you can find a sample XML Schema with Schematron embedded rules: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name=" Product"> <xsd:annotation> <xsd:appinfo> <pattern xmlns="http://www.ascc.net/xml/schematron" name=""> <rule context="Product[@pr_name='ONE']"> <assert test="@pr_Info='A' or @pr_Info='B'">For product ONE pr_Info should be A or B.</assert> </rule> <rule context="Product[@pr_name='TWO']"> <assert test="@pr_Info='C' or @pr_Info='D'">For product TWO pr_Info should be C or D.</assert> </rule> </pattern> </xsd:appinfo> </xsd:annotation> <xsd:complexType> <xsd:attribute name="pr_name"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="ONE"/> <xsd:enumeration value="TWO"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="pr_Info"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="A"/> <xsd:enumeration value="B"/> <xsd:enumeration value="C"/> <xsd:enumeration value="D"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> </xsd:element> </xsd:schema> Best Regards, George --------------------------------------------------------------------- George Cristian Bina <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com lawrence.michel@post.ch wrote: > Hi all, > > I'm actually trying to design an XML-Schema that should be universally > used within form creation (Xforms, XSL-t processing, and XML validation > check). I'm actually designing one that should be representing a graph > of all possible valid attribute combination within an element. Below a > simple example: > > Here a basic Product element in XML: > > <Product pr_name="ONE" pr_Info="A"/> > > Now, according to some business rules, let's say that all products named > "ONE" should have their pr_Info attribute set to either A or B, and all > products named "TWO" should have their pr_Info attribute set to either C > or D. > > A possible solution is to design an XML-schema proposing a choice of all > Product element representing all possible combination according to their > pr_Name. > > I'm looking to have to design it with the use of attribute groups, such > as (pseudo-code below): > > attributeGroupA is: > Attribute name="pr_Info" value=restriction on either A or B > attributeGroupB is: > Attribute name="pr_Info" value=restriction on either C or D > > Element product > start choice > choice 1: attribute pr_Name = ONE and attributeGroupA > choice 2: attribute pr_Name = TWO and attributeGroupB > end choice > /Element > > Which will correspond to validate XML data such as: > > <Product pr_name="ONE" pr_Info="A"/> > <Product pr_name="TWO" pr_Info="C"/> > <Product pr_name="ONE" pr_Info="B"/> > (...) > > Any idea would be greatful > > Best regards ;-) > > Lawrence Michel > >
Received on Monday, 7 August 2006 18:38:08 UTC