RE: Schema that mandates elements and attributes from disparate namespaces?

On Friday, March 14, 2008, at 01:15AM, "Michael Kay" <mike@saxonica.com> wrote:
>Yes, you can do this. You just use
><xs:attribute ref="foo:msg"/>
>or
><xs:element ref="bar:charlie"/>
>
>In this schema document you need to declare the namespace prefix and do an
>xs:import for the schema document where the other attribute/element is
>declared; then you put the declaration itself in a separate module with a
>different targetNamespace.

Thank you for your help; I had actually tried this, but had made typos in my namespaces and thought I was on the wrong track. Trying it again proved successful.

For the archives, here's a triplet of sample files showing the success:

<!-- foo.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bar="http://www.bar.com" xmlns="http://www.foo.com/">
  <xs:import namespace="http://www.bar.com" schemaLocation="bar.xsd"/>
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="native">
          <xs:complexType>
            <xs:attribute ref="bar:foreign" use="required"/>
          </xs:complexType>
        </xs:element>
        <xs:element ref="bar:jim"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

<!-- bar.xsd -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.bar.com">
  <xs:element name="jim">
    <xs:complexType>
      <xs:attribute name="whee" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:attribute name="foreign" type="xs:string" fixed="YAY" />  
</xs:schema>

<!-- foo_test.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:bar="http://www.bar.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="foo.xsd">
  <native bar:foreign="YAY"/>
  <bar:jim whee="all good"/>
</root>

Received on Friday, 14 March 2008 18:46:31 UTC