[
https://issues.apache.org/jira/browse/XERCESJ-1396?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14289046#comment-14289046
]
Sven Meyer commented on XERCESJ-1396:
-------------------------------------
This issues doesn't seem to be fixed. See
http://stackoverflow.com/questions/28092391/enforcing-xsd-key-and-keyref-constraints-is-not-working-well-with-a-recursive-sc
for an example.
Another example:
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
xmlns:ir="http://itude.com/schemas/codegen/ir/java"
vc:minVersion="1.1"
targetNamespace="http://itude.com/schemas/codegen/ir/java"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="source-file" type="ir:SourceFile" />
<xs:element name="wrapper">
<xs:alternative test="@type = 'document'" type="ir:DocumentWrapper" />
<xs:alternative test="@type = 'element'" type="ir:ElementWrapper" />
<xs:key name="IndexedGetterKey">
<xs:selector xpath="./ir:indexed-getter" />
<xs:field xpath="@name" />
</xs:key>
<xs:keyref name="IndexedGetterKeyRef" refer="ir:IndexedGetterKey">
<xs:selector xpath="./ir:default-getter" />
<xs:field xpath="@indexed-getter-name" />
</xs:keyref>
<xs:key name="ListGetterKey">
<xs:selector xpath="./ir:list-getter" />
<xs:field xpath="@name" />
</xs:key>
<xs:keyref name="ListGetterKeyRef" refer="ir:ListGetterKey">
<xs:selector xpath="./ir:indexed-getter" />
<xs:field xpath="@list-getter-name" />
</xs:keyref>
</xs:element>
<xs:complexType name="SourceFile">
<xs:all>
<xs:element ref="ir:wrapper" />
</xs:all>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="Wrapper">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="default-getter">
<xs:alternative test="@type = 'text'" type="ir:DefaultTextGetter" />
<xs:alternative test="@type = 'element'" type="ir:DefaultElementGetter"
/>
<xs:alternative test="@type = 'attribute'" type="ir:AttributeGetter" />
</xs:element>
<xs:element name="indexed-getter">
<xs:alternative test="@type = 'text'" type="ir:IndexedTextGetter" />
<xs:alternative test="@type = 'element'" type="ir:IndexedElementGetter"
/>
</xs:element>
<xs:element name="list-getter" type="ir:ListGetter" />
<xs:element ref="ir:wrapper" />
</xs:choice>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="document" />
<xs:enumeration value="element" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="DocumentWrapper">
<xs:complexContent>
<xs:extension base="ir:Wrapper">
<xs:attribute name="document-variable-name" type="xs:string"
use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ElementWrapper">
<xs:complexContent>
<xs:extension base="ir:Wrapper">
<xs:attribute name="element-variable-name" type="xs:string"
use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Getter">
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="SingleItemGetter">
<xs:complexContent>
<xs:extension base="ir:Getter">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="text" />
<xs:enumeration value="element" />
<xs:enumeration value="attribute" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DefaultTextGetter">
<xs:complexContent>
<xs:extension base="ir:SingleItemGetter">
<xs:attribute name="indexed-getter-name" type="xs:string"
use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DefaultElementGetter">
<xs:complexContent>
<xs:extension base="ir:SingleItemGetter">
<xs:attribute name="indexed-getter-name" type="xs:string"
use="required" />
<xs:attribute name="return-type" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IndexedTextGetter">
<xs:complexContent>
<xs:extension base="ir:SingleItemGetter">
<xs:attribute name="list-getter-name" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="IndexedElementGetter">
<xs:complexContent>
<xs:extension base="ir:SingleItemGetter">
<xs:attribute name="list-getter-name" type="xs:string" use="required" />
<xs:attribute name="return-type" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ListGetter">
<xs:complexContent>
<xs:extension base="ir:Getter">
<xs:attribute name="element-name" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="AttributeGetter">
<xs:complexContent>
<xs:extension base="ir:SingleItemGetter">
<xs:attribute name="attribute-name" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<ir:source-file
xmlns:ir="http://itude.com/schemas/codegen/ir/java"
name="Trees">
<ir:wrapper
type="document"
name="Trees"
document-variable-name="treesDocument">
<ir:default-getter
name="getRoot"
type="element"
return-type="Root"
indexed-getter-name="getRoot" />
<ir:indexed-getter
name="getRoot"
type="element"
return-type="Root"
list-getter-name="getRootElements" />
<ir:list-getter
name="getRootElements"
element-name="root" />
<ir:wrapper
type="element"
name="Root"
element-variable-name="rootElement">
<ir:default-getter
name="getNode"
type="element"
return-type="Node"
indexed-getter-name="getNodex" />
<ir:indexed-getter
name="getNode"
type="element"
return-type="Node"
list-getter-name="getNodeElements" />
<ir:list-getter
name="getNodeElements"
element-name="node" />
<ir:wrapper
type="element"
name="Node"
element-variable-name="nodeElement">
<ir:default-getter
name="getValue"
type="attribute"
attribute-name="value" />
</ir:wrapper>
</ir:wrapper>
</ir:wrapper>
</ir:source-file>
> key/keyref does not validate with recursion
> -------------------------------------------
>
> Key: XERCESJ-1396
> URL: https://issues.apache.org/jira/browse/XERCESJ-1396
> Project: Xerces2-J
> Issue Type: Bug
> Components: XML Schema 1.0 Structures
> Affects Versions: 2.9.1
> Environment: Window, with Eclipse and the xerces plug-in is
> org.apache.xerces_2.9.0.v200805270400
> Reporter: Chu Minh Toan
> Assignee: Michael Glavassevich
>
> Hi everyone,
> Is it true that key/keyref does not validate with recursion? I have this
> question because that when I validate the following xml file, the validation
> of an element defined with recursion doesn't work. Following is xml and the
> corresponding xsd file. (I validate xml file with Eclipse and the xerces
> plug-in is org.apache.xerces_2.9.0.v200805270400). Thanks in advance!
> Toan.
> xsd file :
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <xsd:element name="CompositeType" type="CompositeType" />
> <xsd:element name="Model" type="Model">
> <!-- CompositeTypeKey/KeyRef -->
> <xsd:key name="CompositeTypeKey">
> <xsd:selector
> xpath=".//CompositeType" />
> <xsd:field xpath="./typeName" />
> </xsd:key>
> <xsd:keyref name="CompositeTypeRef" refer="CompositeTypeKey">
> <xsd:selector
> xpath=".//Attribute/CompositeTypeReference" />
> <xsd:field xpath="." />
> </xsd:keyref>
> </xsd:element>
> <xsd:complexType name="CompositeType">
> <xsd:sequence>
> <xsd:element minOccurs="0" name="typeName"
> type="xsd:string" />
> <xsd:element maxOccurs="unbounded" minOccurs="0"
> name="Attribute" type="Attribute" />
> </xsd:sequence>
> </xsd:complexType>
> <xsd:complexType name="Attribute">
> <xsd:sequence>
> <xsd:element minOccurs="0" name="name" type="xsd:string" />
> <xsd:choice minOccurs="1">
> <xsd:element minOccurs="1" maxOccurs="1"
> name="CompositeType" type="CompositeType" />
> <xsd:element minOccurs="1" maxOccurs="1"
> name="CompositeTypeReference" type="xsd:string" />
> </xsd:choice>
> </xsd:sequence>
> </xsd:complexType>
> <xsd:complexType name="Model">
> <xsd:sequence>
> <xsd:element maxOccurs="unbounded" minOccurs="0"
> name="CompositeType" type="CompositeType" />
> </xsd:sequence>
> </xsd:complexType>
> </xsd:schema>
> xml file :
> <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
> <Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:noNamespaceSchemaLocation="test.xsd" >
> <CompositeType>
> <typeName>Bozo</typeName>
> </CompositeType>
> <CompositeType>
> <typeName>MyData</typeName>
> <Attribute>
> <name>b</name>
> <CompositeTypeReference>Bozo</CompositeTypeReference>
> </Attribute>
> <Attribute>
> <name>d</name>
> <CompositeType>
> <typeName>CustomData</typeName>
> </CompositeType>
> </Attribute>
> <Attribute>
> <name>n</name>
> <CompositeType>
> <typeName>NewData</typeName>
> <Attribute>
> <name>m</name>
> <CompositeTypeReference>My</CompositeTypeReference>
> </Attribute>
> <Attribute>
> <name>c</name>
> <CompositeTypeReference>Custom</CompositeTypeReference>
> </Attribute>
> </CompositeType>
> </Attribute>
> </CompositeType>
> </Model>
> Notice that when validate if the validation of recursion works, there will be
> two errors at :
> <CompositeTypeReference>My</CompositeTypeReference>
> <CompositeTypeReference>Custom</CompositeTypeReference>
> because the right references are :
> <CompositeTypeReference>MyData</CompositeTypeReference>
> <CompositeTypeReference>CustomData</CompositeTypeReference>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]