OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Problem w/ Schema for elements with similar defs

[ Lists Home | Date Index | Thread Index ]
  • From: =?UNKNOWN?Q?Jos=E9?= Manuel Beas <jmbeas@telenium.es>
  • To: XML-DEV <xml-dev@lists.xml.org>
  • Date: Thu, 28 Dec 2000 20:14:10 +0100

I am trying to write an XML Schema to support the following problem:

Let's say I have the following xml instance to represent a set of objects
named "pantalla".
---------------
<pantallas xmlns="http://www.telenium.es/XML"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://www.telenium.es/XML pantallas.xsd">
  <pantalla nombre="Prueba">
    <parametros>
      <parametro nombre="p1"/>
    </parametros>
    <dimensiones x="100" y="100"/>
    <consulta valor="titulo">
      <texto nombre="T1" ancho="40" alto="10"/>
    </consulta>
    <recurso valor="boton">
      <texto nombre="B1" ancho="20" alto="20"/>
    </recurso>
    <consulta valor="foto">
      <imagen nombre="F1" ancho="100" alto="40" x="10" y="80"/>
    </consulta>
  </pantalla>
</pantallas>
---------------

1. "pantallas" has 0 or more "pantalla" in it.

2. Every "pantalla" has an attribute "nombre" (required)

3. Every "pantalla" has a prologue made of a set of elements like
"parametros" or "dimensiones".
3.1. "parametros" can appear only once (for a given "pantalla"), but it's
optional
3.2. "dimensiones" is required

4. Every "pantalla" has a rest of the content. It is made of elements
"consulta" or "recurso" in any order and number.

5. "consulta" and "recurso" have some common characteristics:
5.1. Both have an attribute called "valor"
5.2. Both can content an element "texto"
5.3. Only "consulta" can content an element "imagen"

6. "texto" and "consulta" have a common set of attributes: "nombre", "ancho"
and "alto"


I've tried the following XSD but unsuccesfully because I've not been able to
write the rules for (4) and (5.3):
---------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema
	targetNamespace="http://www.telenium.es/XML"
	xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
	xmlns="http://www.telenium.es/XML"
	elementFormDefault="qualified" attributeFormDefault="unqualified">

	<xsd:element name="pantallas">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="pantalla" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="pantalla">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="parametros" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="dimensiones" minOccurs="1" maxOccurs="1"/>
				<xsd:element name="consulta" type="consultaTipo" minOccurs="0"
maxOccurs="unbounded"/>
				<xsd:element name="recurso" type="consultaTipo" minOccurs="0"
maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:attribute name="nombre"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="parametros">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="parametro" minOccurs="1" maxOccurs="unbounded">
					<xsd:complexType>
						<xsd:attribute name="nombre" type="xsd:string" use="required"/>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="dimensiones">
		<xsd:complexType>
			<xsd:attribute name="x" type="xsd:integer"/>
			<xsd:attribute name="y" type="xsd:integer"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="consultaTipo">
		<xsd:choice>
			<xsd:element ref="texto"/>
			<xsd:element ref="imagen"/>
		</xsd:choice>
		<xsd:attribute name="valor"/>
	</xsd:complexType>

	<xsd:element name="texto">
		<xsd:complexType>
			<xsd:attributeGroup ref="componenteBasico"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="imagen">
		<xsd:complexType>
			<xsd:attributeGroup ref="componenteBasico"/>
			<xsd:attribute name="x" type="xsd:integer"/>
			<xsd:attribute name="y" type="xsd:integer"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:attributeGroup name="componenteBasico">
		<xsd:attribute name="nombre" type="xsd:string"/>
		<xsd:attribute name="ancho" type="xsd:integer"/>
		<xsd:attribute name="alto" type="xsd:integer"/>
	</xsd:attributeGroup>
</xsd:schema>
---------------------

I'll be extremely grateful for your help. And just in case... I wish you a
very good New Year.

Best Regards,
José Manuel Beas
--
José Manuel Beas (jmbeas@telenium.es)
Software Engineer
TELENIUM, The New Millennium Telecom Company
Agustín de Foxá, 25, plta. 13
28036 MADRID
Tel. +34 91 315 85 62 (ext. 260)
Fax +34 91 315 63 37
http://www.telenium.es






 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS