B
bmichel
Regarding the XSD schema shown below, I want to modifiy it so that:
- the "owner_id" attribute in the "dog" element to exist in one of the
"owner" element "id" attribute.
- the "id" attribute in the "owner" element is unique.
How should I modify the XSD?
Examples (in the xml):
Example 1 should be validated
== Example 1 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
</owners>
<dogs>
<dog owner_id="123">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 1 ==
Example 2 should not be validated, because id 765 is not that of an
owner
== Example 2 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
</owners>
<dogs>
<dog owner_id="765">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 2 ==
Example 3 should not be validated because two owner have the same id
== Example 3 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
<owner id="123">
<name>Money Penny</name>
</owner>
</owners>
<dogs>
<dog owner_id="123">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 3 ==
======= XSD STARTS =======
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- Root: 'petshop' element -->
<xs:element name="petshop" type="petshop_type"/>
<!-- 'petshop' element type definition
Composed of one instance of each of the following elements: 'dogs',
'owners' -->
<xs:complexType name="petshop_type">
<xs:sequence>
<xs:element name="owners" type="owners_type"/>
<xs:element name="dogs" type="dogs_type"/>
</xs:sequence>
</xs:complexType>
<!-- 'owners' element type definition -->
<xs:complexType name="owners_type">
<xs:sequence>
<xs:element name="owner" type="owner_type" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xsositiveInteger" use="required"/>
</xs:complexType>
<!-- 'owner' element type definition -->
<xs:complexType name="owner_type">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xsositiveInteger" use="required"/>
</xs:complexType>
<!-- 'dogs' element type definition -->
<xs:complexType name="dogs_type">
<xs:sequence>
<xs:element name="dog" type="dog_type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- 'dog' element type definition -->
<xs:complexType name="dog_type">
<xs:sequence>
<xs:element name="dog_name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="owner_id" type="xsositiveInteger"
use="required"/>
</xs:complexType>
</xs:schema>
======= XSD ENDS =======
- the "owner_id" attribute in the "dog" element to exist in one of the
"owner" element "id" attribute.
- the "id" attribute in the "owner" element is unique.
How should I modify the XSD?
Examples (in the xml):
Example 1 should be validated
== Example 1 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
</owners>
<dogs>
<dog owner_id="123">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 1 ==
Example 2 should not be validated, because id 765 is not that of an
owner
== Example 2 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
</owners>
<dogs>
<dog owner_id="765">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 2 ==
Example 3 should not be validated because two owner have the same id
== Example 3 ==
<petshop>
<owners>
<owner id="123">
<name>James Bond</name>
</owner>
<owner id="123">
<name>Money Penny</name>
</owner>
</owners>
<dogs>
<dog owner_id="123">
<name>Popeye</name>
</dog>
</dogs>
</petshop>
== End Example 3 ==
======= XSD STARTS =======
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- Root: 'petshop' element -->
<xs:element name="petshop" type="petshop_type"/>
<!-- 'petshop' element type definition
Composed of one instance of each of the following elements: 'dogs',
'owners' -->
<xs:complexType name="petshop_type">
<xs:sequence>
<xs:element name="owners" type="owners_type"/>
<xs:element name="dogs" type="dogs_type"/>
</xs:sequence>
</xs:complexType>
<!-- 'owners' element type definition -->
<xs:complexType name="owners_type">
<xs:sequence>
<xs:element name="owner" type="owner_type" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xsositiveInteger" use="required"/>
</xs:complexType>
<!-- 'owner' element type definition -->
<xs:complexType name="owner_type">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xsositiveInteger" use="required"/>
</xs:complexType>
<!-- 'dogs' element type definition -->
<xs:complexType name="dogs_type">
<xs:sequence>
<xs:element name="dog" type="dog_type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- 'dog' element type definition -->
<xs:complexType name="dog_type">
<xs:sequence>
<xs:element name="dog_name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="owner_id" type="xsositiveInteger"
use="required"/>
</xs:complexType>
</xs:schema>
======= XSD ENDS =======