- From: Barclay Alan K Contr AEDC/DYN <Alan.Barclay@arnold.af.mil>
- Date: Tue, 2 Nov 2004 23:00:20 -0000
- To: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
- Message-ID: <200411022300.iA2N0h7x009925@andes.arnold.af.mil>
I have a schema that has a many2many relationship as follows:
Root----X----Y
|
|-A----B
Where all are 1..N and B has a multiple field foreign key-type relationship
whose keys are X and Y.
(In reality, B also has another foreign key relationship with A, but it is
express compositionally rather than with key/keyref - i.e. by the
parent-child relationship.)
In an RDBMS, the B table would Look like (BPK,AFK,XFK,YFK) where the last
two fields (XFK,YFK) would be a single multi-field foreign key.
I have been able to solve this if I replicate the XPK value in the Y Node
(i.e. Y-Node has XPK and YPK elements where the XPK is simply a copy of the
parent value).
Basically, I have a Key at Root similar to:
<xs:key name="XYKEY">
<xs:selector xpath="./X/Y"/>
<xs:field xpath="XID"/>
<xs:field xpath="YID"/>
</xs:key>
and a 2-field unique and 2-field keyref at A:
<xs:keyref name="XYKEYREF" refer="XYKEY">
<xs:selector xpath="./B"/>
<xs:field xpath="BFK1"/>
<xs:field xpath="BFK2"/>
</xs:keyref>
<xs:unique name="NoDups">
<xs:selector xpath="B"/>
<xs:field xpath="BFK1"/>
<xs:field xpath="BFK2"/>
</xs:unique>
This works and validates just like I want, however I have to duplicate the
X-value in the Y node.
Is there any way to specify a multi-field Key whose uniqueness is on the
combined values in the parent and child?
E.g.
<Root>
<X>
<XID>1</XID>
<Y>
<YID>1</YID>
</Y>
<Y>
<YID>2</YID>
</Y>
</X>
<X>
<XID>2</XID>
<Y>
<YID>1</YID>
</Y>
<Y>
<YID>3</YID>
</Y>
</X>
<A>
<B>
<BFK1>1</BFK1>
<BFK2>1</BFK2>
<Value>V1</Value>
</B>
<B>
<BFK1>2</BFK1>
<BFK2>2</BFK2> <==== Would Fail to validate here.
<Value>V2</Value>
</B>
</A>
</Root>
Thanks,
-Alan
Received on Tuesday, 2 November 2004 23:02:45 UTC