Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Keys and Scope

From: Matt Knowles <MattK@-----------.--->
To: "xmlschema-dev@--.---" <-------------@--.--->
Date: 11/11/2008 3:28:00 PM
Hi everyone,

I'm new to XML and keep getting the feeling that everything is upside-down from my normal understanding of scope.

I have a Schema defined:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchema2"
                targetNamespace="http://tempuri.org/XMLSchema2.xsd"
                elementFormDefault="qualified"
                xmlns:s="http://tempuri.org/XMLSchema2.xsd"
                xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="Section" type="s:SectionType">
                <xs:key name="DefinitionKey">
                        <xs:selector xpath="s:Define"/>
                        <xs:field xpath="@name"/>
                </xs:key>
                <xs:keyref name="DefinitionRef" refer="s:DefinitionKey">
                        <xs:selector xpath="s:Refer"/>
                        <xs:field xpath="@ref"/>
                </xs:keyref>
        </xs:element>
        <xs:complexType name="SectionType" mixed="true">
                <xs:sequence minOccurs="1" maxOccurs="1">
                        <xs:sequence minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="Define" type="s:DefineType"/>
                        </xs:sequence>
                        <xs:choice minOccurs="0" maxOccurs="unbounded">
                                <xs:element name="Refer" type="s:ReferType"/>
                                <xs:element ref="s:Section"/>
                        </xs:choice>
                </xs:sequence>
        </xs:complexType>
        <xs:complexType name="DefineType">
                <xs:complexContent>
                        <xs:extension base="s:SectionType">
                                <xs:attribute name="name" type="xs:string"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
        <xs:complexType name="ReferType">
                <xs:complexContent>
                        <xs:extension base="s:SectionType">
                                <xs:attribute name="ref" type="xs:string"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
</xs:schema>

I have the following instance document:

<?xml version="1.0" encoding="utf-8" ?>
<Section xmlns="http://tempuri.org/XMLSchema2.xsd">
        <Define name="one"/>
        <Refer ref="one"/> <!-- Allow: defined in current node. -->
        <Refer ref="two"/> <!-- Error: not defined in current or ancestor node. -->
        <Section>
                <Define name="two"/>
                <Refer ref="one"/> <!-- Allow: defined in ancestor node. -->
                <Refer ref="two"/> <!-- Allow: defined in current node. -->
        </Section>
</Section>

I would like to define the keys and keyrefs in the schema such that I can enforce the rules in the comments above, but I'm not finding a way to do this.

Basically, I'm thinking of a node and all it's child nodes as my scope, and would like to Refer to anything Defined in the same scope, but disallow any References to things Defined out of scope.

The closest I've been able to come is the reverse, where I can Refer to anything Defined in the current or any descendant node, by changing:

                <xs:key name="DefinitionKey">
                        <xs:selector xpath=".//s:Define"/>
                        <xs:field xpath="@name"/>
                </xs:key>

Am I hopelessly stuck in a mindset that just doesn't work with XML?  Or is there an obvious solution I'm just overlooking?

Any help would be greatly appreciated.

Thanks,
Matt Knowles





transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent