- From: Rahul Srivastava <Rahul.Srivastava@Sun.COM>
- Date: Wed, 10 Apr 2002 10:15:08 +0000 (Asia/Calcutta)
- To: xmlschema-dev@w3.org
- Cc: jeni@jenitennison.com
> Jeni Tennison wrote... > Hi Jeni, > > Rahul Srivastava wrote... > > > > I have two small schemas for an instance file defining Id/y > > constraints. One works and the other does not. I doubt the other one > > is invalid. > <snip/> > > On the other hand, in the one that doesn't work: > > > schema2: This does not works > > > > <xsd:element name="root"> > > <xsd:complexType> > > <xsd:sequence> > > <xsd:element name="Book" maxOccurs="unbounded"> > > <xsd:complexType> > > <xsd:sequence> > > <xsd:element name="isbn" type="xsd:string"/> > > </xsd:sequence> > > <xsd:attribute name="name" type="xsd:string" use="required"/> > > </xsd:complexType> > > > > <xsd:key name="BookKey"> > > <xsd:selector xpath="."/> > > <xsd:field xpath="isbn"/> > > </xsd:key> > > > > </xsd:element> > > </xsd:sequence> > > </xsd:complexType> > > </xsd:element> > > The key says: > > "Within each <Book> element, that <Book> element itself must have a > unique value for its <isbn> element child." > > All that this actually tests is that the <Book> element doesn't have > two <isbn> element children. You are only testing whether one <Book> > element has a unique value. > > The location of the identity constraint determines the scope in which > it holds; the selector selects the elements that should have unique > values; the fields select the attributes and elements of those > elements that should be combined to give the unique values. > > Basically, the only reason you'd ever want to use an XPath of '.' > within xs:selector is if you were using the identity constraint as a > hack to test a co-occurrence constraint. But, is using a '.' as the XPath expr. for a selector valid? The rec. says: http://www.w3.org/TR/xmlschema-1/#section-Identity-constraint-Definition-Validation-Rules [[ Validation Rule: Identity-constraint Satisfied For an element information item to be locally ·valid· with respect to an identity-constraint all of the following must be true: 1 The {selector}, with the element information item as the context node, evaluates to a node-set (as defined in [XPath]). [Definition:] Call this the target node set. 2 Each node in the ·target node set· is an element node among the descendants of the context node. .... ]] Looking at point 2 above, it reflects that, we cannot use '.' as the XPath expr. for a selector. Does *descendants of the context node* includes the context node? On the other hand the production rule for the XPath expr. for the selector allows '.' as a valid XPath expr. http://www.w3.org/TR/xmlschema-1/#coss-identity-constraint Please clarify. Thanks, Rahul.
Received on Wednesday, 10 April 2002 00:52:48 UTC