- From: Alison Meynert <AlisonM@schemasoft.com>
- Date: Mon, 26 May 2003 11:40:33 -0700
- To: "'xmlschema-dev@w3.org'" <xmlschema-dev@w3.org>
- Message-ID: <2D8FAB29FBEED31190F40060081C295DA78541@schemail.schemasoft.lan>
Hi,
Can an attribute with a specified default be a keyref? When I try to validate the following example instance document with XML Spy, I get this error message:
Undefined values for keyref identity constraint 'patternForegroundColorRef' - the values referred to in the field selector must match an existing unique/key value.
I take this to mean that if I specify an attribute as a keyref, it is required in the instance document?
Example schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="ColorTableIndexType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxExclusive value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ColorHexType">
<xs:restriction base="xs:string">
<xs:pattern value="0x[A-F0-9]{2}"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="color">
<xs:complexType>
<xs:attribute name="index" type="ColorTableIndexType" use="required"/>
<xs:attribute name="r" type="ColorHexType" use="required"/>
<xs:attribute name="g" type="ColorHexType" use="required"/>
<xs:attribute name="b" type="ColorHexType" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="colorTable">
<xs:complexType>
<xs:sequence>
<xs:element ref="color" minOccurs="8" maxOccurs="8"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pattern">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="foregroundColor" type="ColorTableIndexType" use="optional" default="1"/>
<xs:attribute name="backgroundColor" type="ColorTableIndexType" use="optional" default="0"/>
</xs:complexType>
</xs:element>
<xs:element name="patternTable">
<xs:complexType>
<xs:sequence>
<xs:element ref="pattern" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="drawing">
<xs:complexType>
<xs:sequence>
<xs:element ref="colorTable"/>
<xs:element ref="patternTable"/>
</xs:sequence>
</xs:complexType>
<xs:key name="colorKey">
<xs:selector xpath="colorTable/color"/>
<xs:field xpath="@index"/>
</xs:key>
<xs:keyref name="patternForegroundColorRef" refer="colorKey">
<xs:selector xpath="patternTable/pattern"/>
<xs:field xpath="@foregroundColor"/>
</xs:keyref>
<xs:keyref name="patternBackgroundColorRef" refer="colorKey">
<xs:selector xpath="patternTable/pattern"/>
<xs:field xpath="@backgroundColor"/>
</xs:keyref>
</xs:element>
</xs:schema>
Example instance:
<?xml version="1.0" encoding="UTF-8"?>
<drawing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="drawing_schema.xsd">
<colorTable>
<color index="0" r="0x00" g="0x00" b="0x00"/>
<color index="1" r="0xFF" g="0xFF" b="0xFF"/>
<color index="2" r="0xFF" g="0x00" b="0x00"/>
<color index="3" r="0x00" g="0xFF" b="0x00"/>
<color index="4" r="0x00" g="0x00" b="0xFF"/>
<color index="5" r="0xFF" g="0xFF" b="0x00"/>
<color index="6" r="0xFF" g="0x00" b="0xFF"/>
<color index="7" r="0x00" g="0xFF" b="0xFF"/>
</colorTable>
<patternTable>
<pattern name="foo" foregroundColor="2" backgroundColor="4"/>
<pattern name="bar"/>
</patternTable>
</drawing>
Thanks,
Alison Meynert
--
alisonm@schemasoft.com
Developer
Schema Software, Inc.
http://www.schemasoft.com
Received on Monday, 26 May 2003 14:41:16 UTC