- From: Mukul Gandhi <gandhi.mukul@gmail.com>
- Date: Tue, 12 Jul 2011 19:07:46 +0530
- To: Avinash Nagabhushan <avinash.sit@gmail.com>
- Cc: xmlschema-dev@w3.org
Including the "dept" structure recursively within itself, looks a bit
inefficient to me.
I think you want your schema to say that, a "dept" can include other
departments. Since you already have the attribute "num" on "dept", you
can used XSD identity-constraints to enforce uniqueness and
referential integrity for department numbers (i.e @num).
I would propose a schema like following for this use case:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Organization">
<xs:complexType>
<xs:sequence>
<xs:element name="dept" type="Department" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:key name="dept_key">
<xs:selector xpath="dept"/>
<xs:field xpath="@num"/>
</xs:key>
<xs:keyref name="prnt_dept_ref" refer="dept_key">
<xs:selector xpath="dept"/>
<xs:field xpath="parent"/>
</xs:keyref>
</xs:element>
<xs:complexType name="Department">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="total_emp" type="xs:positiveInteger"/>
<xs:element name="parent" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="num" type="xs:string"/>
</xs:complexType>
</xs:schema>
A sample instance for this schema is following,
<Organization>
<dept num="d1"> <!-- this "dept" doesn't have a parent department -->
<name>dept 1</name>
<total_emp>5</total_emp>
</dept>
<dept num="d2">
<name>dept 2</name>
<total_emp>8</total_emp>
<parent>d1</parent>
</dept>
<dept num="d3">
<name>dept 3</name>
<total_emp>15</total_emp>
<parent>d1</parent>
</dept>
<dept num="d4">
<name>dept 4</name>
<total_emp>7</total_emp>
<parent>d2</parent>
</dept>
</Organization>
I hope this helps.
On Tue, Jul 12, 2011 at 11:50 AM, Avinash Nagabhushan
<avinash.sit@gmail.com> wrote:
> Hi Sir,
>
> I am writing an schema for the following structure:
>
> Organization
> dept +
> @num
> name
> total_emp
> dept +
> where dept elements are nested within another dept element, but all
> departments are under organization.
>
>
> My Schema is:
>
>
> <xs:schema xmlns:ns1="http://www.ns1.com"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://www.ns1.com">
> <xs:element name="Organization">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="Department" maxOccurs="unbounded">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="Name"/>
> <xs:element name="TotalEmp"/>
> <xs:element ref="ns1:Department" minOccurs="0" maxOccurs="unbounded"/>
> </xs:sequence>
> <xs:attribute name="num" type="xs:string"/>
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> </xs:schema>
>
>
> There is a validation error saying "ns1:Department" is not a QName and
> cannot find declaration for the same. Is there something wrong in my
> definition?
>
>
> Can you please let me know whether it is a correct approach or wrong?
>
>
> Thanks,
>
> Avinash K N
--
Regards,
Mukul Gandhi
Received on Tuesday, 12 July 2011 13:38:34 UTC