tags:

views:

222

answers:

3

I'm new to XSD, and I'm quite confused as to when to use attribute, and when to use element?

Why cant we specify minOccurs and maxOccurs in attribute?

Also, why is it we cannot specify use="required" in element?

+1  A: 
<element myAttribute="value">
   <subElement />
   <subElement anotherAttribute="this is an attribute's value">Element value</subElement>
</element>

You can't have more than one attribute with the same name in XML, therefore you can't use minOccurs and maxOccurs for attributes.

You don't need use="required" for elements because you can have minOccurs="1" instead.

It is your choice when to use attributes and when to use elements. Here are some guidelines: http://www.ibm.com/developerworks/xml/library/x-eleatt.html

cbp
+2  A: 

An element is an XML node - and it can contain other nodes, or attributes. It can be a simple type or a complex type. It is an XML entity.

An attribute is a descriptor. It can't contain anything and can only be a simple type.

Have a look at this. Of course, you can just google something like "XML element vs attribute"

Kirk Broadhurst
Unlike the other replies, who seem to try to explain *how* to define an element/attribute, you are to the point.
+1  A: 

An element is an XML element - a opening tag, some content, a closing tag - they are the building blocks of your XML document:

<test>someValue</test>

Here, "test" would be an element.

Attributes is an additional info on a tag - it's an "add-on" or an extra info on an element, but can never exist alone:

<test id="5">somevalue</test>

"id" is an attribute.

You cannot have multiple attributes of the same name on a single tag --> minOccurs/maxOccurs makes no sense. You can define required (or not) for an attribute - anything else doesn't make sense.

The elements are defined by their occurrence inside complex types - e.g. if you have a complex type with a <xs:sequence> inside - you are defining that all elements must be present and must the in this particular order:

<xs:complexType name="SomeType">
   <xs:sequence>       
      <xs:element name="Element1" type="xs:string" />
      <xs:element name="Element2" type="xs:string" />
   </xs:sequence>
</xs:complexType>

Inside an element of that type, the sub-elements "Element1" and "Element2" are required and must appear in this order - there's no need for "required" or not (like with attributes). Whether or not an element is required is defined by the use of minOccurs and maxOccurs; both are =1 by default, e.g. the element must occur, and can only occur once. By tweaking those settings, you can define an element to be optional (minOccurs=0), or allow it to show up several times (maxOccurs > 1).

I'd strongly recommend you check out the W3Schools Tutorial on XML Schema and learn some more about XML schema.

Marc

marc_s