- 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