Can we add new attribute or change type of existing attribute to a "Referenced Element"?

Posted by JSteve on Stack Overflow See other posts from Stack Overflow or by JSteve
Published on 2010-06-15T14:54:08Z Indexed on 2010/06/17 16:53 UTC
Read the original article Hit count: 241

Filed under:
|

In my XML schema I have an element being referenced tens of times by other elements but with different enumerated values for one of its attribute.
For now, instead of creating this element in global space and referencing it later, I am creating a new instance wherever it is needed. This approach has increased my schema size enormously because of repeated creation of almost same element many times. It also may have adverse effect on efficiency of the schema.
The only way that I see is to create element once and then reference it many times but my problem is: one of the attribute of this referenced element is required to have a different set of enumerations for each referencing element.
My question is:
Is it possible to to add an attribute to a "Referenced Element" in XML Schema?

Something like this:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myDomain.com" xmlns="http://www.myDomain.com" elementFormDefault="qualified">

  <xs:simpleType name="myValues1">
    <xs:restriction base="xs:string">
      <xs:enumeration value="value1" />
      <xs:enumeration value="value2" />
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="myElement">
    <xs:complexType mixed="true">
      <xs:attribute name="attr1" type="xs:string" />
      <xs:attribute name="attr2" type="xs:string" />
    </xs:complexType>
  </xs:element>

  <xs:element name="MainElement1">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="myElement">
          <xs:complexType>
            <xs:attribute name="myAtt" type="myValues1" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="mainAtt1" />
    </xs:complexType>
  </xs:element>

</xs:schema>

Or can we change type of an existing attribute of a "Referenced Element" in XML Schema?
something like this:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myDomain.com" xmlns="http://www.myDomain.com" elementFormDefault="qualified">

  <xs:simpleType name="myValues1">
    <xs:restriction base="xs:string">
      <xs:enumeration value="value1" />
      <xs:enumeration value="value2" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="myValues2">
    <xs:restriction base="xs:string">
      <xs:enumeration value="value3" />
      <xs:enumeration value="value4" />
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="myElement">
    <xs:complexType mixed="true">
      <xs:attribute name="attr1" type="xs:string" />
      <xs:attribute name="attr2" type="xs:string" />
      <xs:attribute name="myAtt" type="myValues1" />
    </xs:complexType>
  </xs:element>

  <xs:element name="MainElement1">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="myElement">
          <xs:complexType>
            <xs:attribute name="myAtt" type="myValues2" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="mainAtt1" />
    </xs:complexType>
  </xs:element>

</xs:schema>

© Stack Overflow or respective owner

Related posts about schema

Related posts about xml-schema