Elemento <xdr:ElementType>

Define un tipo de elemento que se va a utilizar con el elemento de los esquemas reducidos de datos XML (XDR) Schema.

<ElementType
  content="{empty | textOnly | eltOnly | mixed}" 
  dt:type="datatype" 
  model="{open | closed}" 
  name="idref" 
  order="{one | seq | many}">

Atributos

  • contenido
    Un indicador de si el contenido debe estar vacío o puede contener texto, elementos o las dos cosas. A este atributo pueden asignarse los siguientes valores. El valor predeterminado para el atributo content es mixed. Cuando el atributo content se establece como mixed, el atributo order precisa un valor many.

    empty

    El elemento no puede incluir contenido.

    textOnly

    Elemento solo puede incluir texto, no elementos. Si el atributo model se establece como open, el elemento puede incluir texto y otros elementos sin nombre.

    eltOnly

    Elemento solo puede incluir los elementos especificados. No puede incluir texto libre.

    mixtos

    El elemento puede incluir una mezcla de elementos con nombre y texto. El valor predeterminado es mixed. Si el valor del atributo content es mixed, los atributos minOccurs y maxOccurs no desencadenarán un error de validación en caso de que el número de elementos secundarios esté fuera de los límites especificados.

NotaNota

No se permiten elementos con content="empty" y model="open".

Ejemplo

ms256223.collapse_all(es-es,VS.120).gifDescripción 

El siguiente ejemplo muestra el uso del atributo content con diferentes valores.

<ElementType name="x" content="empty"/>
<ElementType name="x" content="textOnly"/>
<ElementType name="x" content="eltOnly">
  <element type="y"/>
</ElementType>
<ElementType name="x" content="mixed">
  <element type="q"/>
  <element type="r"/>
</ElementType>

Ejemplo de código heredado

El siguiente ejemplo muestra el atributo content para una definición de tipo de documento (DTD) equivalente.

empty: <!ELEMENT x EMPTY>
textOnly: <!ELEMENT x (#PCDATA)>
eltOnly: <!ELEMENT x y>
mixed: <!ELEMENT x (#PCDATA | q | r)*>
  • dt:type
    Tipo de dato del elemento. Los tipos de datos válidos se definen en la referencia de tipos de datos de esquemas XDR.

  • modelo
    Un indicador de si el contenido puede incluir solo lo que aparece definido en el modelo de contenido. El valor predeterminado es open.

    <ElementType name="x" model="open"/>
    

    Cuando el modelo se define como open, el elemento puede incluir elementos o atributos adicionales no declarados de manera explícita en el modelo de contenido. Estas etiquetas adicionales proceden del mismo espacio de nombres o de uno distinto. Si se encuentran en el mismo espacio de nombres, debe haber una definición ElementType o AttributeType correspondiente en el esquema.

    Cuando el modelo se define como closed, el elemento no puede incluir elementos y contenido mezclado que no aparezca especificado en el modelo de contenido. La DTD utiliza un modelo cerrado.

  • name
    Nombre del elemento. Este atributo es necesario. Si este tipo de elemento se declara como un elemento secundario válido de otro tipo de elemento, se especifica este nombre en un elemento element.

    <ElementType name="x">
    </ElementType>
    

    La DTD equivalente es la siguiente.

    <!ELEMENT x EMPTY>
    
  • orden
    Un indicador de cómo van a aparecer los elementos. Este indicador puede contener los siguientes valores.

    one

    Permite solo uno de un conjunto de elementos. Para que un documento realice de forma correcta la validación cuando se especifica el atributo one, debe especificarse como closed el atributo model para ElementType.

    seq

    Precisa que los elementos aparezcan en la secuencia determinada.

    many

    Permite que los elementos aparezcan en cualquier orden (o no aparezcan). Si especifica many para el atributo order, los valores maxOccurs dejarán de ser relevantes durante la validación.

    El valor seq debe especificar secuencias válidas. Por ejemplo, puede utilizarse para especificar cuándo es válida una secuencia concreta, como x1,y1 o x2,y2, pero no son válidas otras combinaciones posibles. El valor seq sirve para la misma función que los paréntesis en una DTD. El valor predeterminado es seq.

    En el siguiente ejemplo se muestra el valor one. El valor del atributo model debe ser closed cuando se especifica one para el atributo order.

    <ElementType name="z" content="eltOnly" order="one" model="closed">
    <element type="x" minOccurs="1" maxOccurs="1"/>
    <element type="y" minOccurs="1" maxOccurs="1"/>
    </ElementType>
    

    En el siguiente ejemplo se muestra el valor seq.

    <ElementType name="x" content="eltOnly" order="one" model="closed">
      <group order="seq" content="eltOnly" model="closed">
        <element type="x1"/>
        <element type="y1"/>
      </group>
      <group order="seq" content="eltOnly" model="closed">
        <element type="x2"/>
        <element type="y2"/>
      </group>
    </ElementType>
    

    En el siguiente ejemplo se muestra el valor many.

    <ElementType name="x" content="eltOnly" order="many" model="closed">
      <element type="q"/>
      <element type="r"/>
    </ElementType>
    

    El valor many del atributo order hace que los atributos minOccurs y maxOccurs sean irrelevantes durante la validación. En vez de utilizar el valor many para el atributo order junto con minOccurs y maxOccurs, utilice el valor seq. Por ejemplo, considere el siguiente esquema, que establece order="seq".

    <?xml version="1.0"?>
    <Schema name="SampleSchema" xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
        <ElementType name="PublisherID" model="closed" dt:type="ID"
          content="textOnly">
        </ElementType>
        <ElementType name="PublisherName" model="closed" dt:type="string"
          content="textOnly">
        </ElementType>
    
        <ElementType name="Publisher" model="closed" content="eltOnly"
          order="many">
          <element type="PublisherID"/>
          <element type="PublisherName"/>
        </ElementType>
    
        <ElementType name="Book" model="closed" content="eltOnly"
          order="seq">
        <element type="Publisher" minOccurs="1" maxOccurs="1"/>
        </ElementType>  
    
    </Schema>
    

Si se valida el siguiente documento XML en función del esquema anterior, la validación fallará porque el número de elementos Publisher supera el valor maxOccurs especificado de 1. Sin embargo, si el valor order se establece en many, la validación se completará correctamente de manera incorrecta ya que no se tendrá en cuenta el valor maxOccurs="1".

<?xml version='1.0'?>
<Book xmlns="x-schema:orderschema.xml" >

<Publisher>
    <PublisherID>P1</PublisherID>
    <PublisherName>GGG</PublisherName>
</Publisher>
<Publisher>
    <PublisherID>P2</PublisherID>
    <PublisherName>North</PublisherName>
</Publisher>

</Book>

Información de elemento

Número de apariciones

Ilimitado

Elementos primarios

Schema

Elementos secundarios

attribute, AttributeType, datatype, description, element, group

Propiedades de los elementos

TAG

Explicación

Name="idref"

Los elementos ElementType y AttributeType deben tener nombres.

Model="open"

En este elemento se permiten elementos o contenido mezclado no especificados en el modelo de contenido. Para subclasificar una definición concreta, este valor debe estar abierto (cuando se implemente la herencia en el futuro).

Model="closed"

En este elemento no se permiten elementos o contenido mezclado no especificados en el modelo de contenido.

content="empty"

Es posible que el elemento no contenga nada.

content="textOnly"

El elemento solo puede incluir texto, no elementos. Si model="open", es posible que el elemento contenga texto y otros elementos sin nombres.

*

content="mixed"

El elemento puede incluir una mezcla de elementos con nombre y texto entremezclado. Si model="open", es posible que el elemento contenga texto y otros elementos sin nombres. Implica order='many' y maxOccurs="*"!

order='one'

Permite solo uno de un conjunto de elementos.

*

order='seq'

Indica que los elementos deben aparecer en la secuencia enumerada. Es parecido al valor predeterminado de una lista de elementos, aunque es necesario para poder agrupar secuencias, como en el ejemplo en el que x1,y1 o x2,y2 son válidos pero no lo son otras combinaciones. Sirve para el mismo rol que los paréntesis en una DTD.

order='many'

Los elementos pueden aparecer en cualquier orden (o no aparecer).

dt:type=datatype

Especifica que el elemento debe incluir un número entero. Para obtener una lista de tipos de datos primitivos, consulte la referencia de tipos de datos de esquemas XDR.

Comentarios

El término "element type" hace referencia al tipo de elemento de los que son instancias todos los elementos que comparten un nombre. Los tipos de elementos se declaran en esquemas; los elementos aparecen en documentos. Los tipos de elementos se declaran con el tipo de elemento ElementType.

Ejemplo

<ElementType name="x">
  <!-- element content declarations go here -->
</ElementType>

Vea también

Referencia

Referencias de los tipos de datos de los esquemas XDR