xsd - tutorial - Agregue atributos a un tipo simple o restricción a un tipo complejo en el esquema XML.
xsd base (2)
Me gustaría proponer mi ejemplo con una explicación más detallada de lo que realmente requiere para mezclar el tipo heredado con las restricciones al agregar atributos.
este es el lugar donde define su tipo heredado (en mi caso es xs: string one con una restricción de longitud de campo 1024 aplicada). no puede tener esto como un tipo estándar para su campo ya que también va a agregar un "atributo" a su campo.
<xs:simpleType name="string1024Type">
<xs:restriction base="xs:string">
<xs:maxLength value="1024"/>
</xs:restriction>
</xs:simpleType>
este es el lugar donde se define su elemento en función de su tipo privado (en mi caso es "string1024Type") y se adjunta el atributo necesario:
<xs:element maxOccurs="unbounded" name="event">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="string1024Type">
<xs:attribute default="list" name="node" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Ambos bloques podrían estar en lugares completamente separados de su esquema. lo importante es seguir solo una vez más: no se puede combinar la herencia y la atribución en la misma definición de elemento.
El problema es el siguiente:
Tengo el siguiente fragmento de código XML:
<time format="minutes">11:60</time>
El problema es que no puedo agregar el atributo y la restricción al mismo tiempo. El formato de atributo solo puede tener los valores minutos, horas y segundos. La hora tiene el patrón de restricción /d{2}:/d{2}
<xs:element name="time" type="timeType"/>
...
<xs:simpleType name="formatType">
<xs:restriction base="xs:string">
<xs:enumeration value="minutes"/>
<xs:enumeration value="hours"/>
<xs:enumeration value="seconds"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="timeType">
<xs:attribute name="format">
<xs:simpleType>
<xs:restriction base="formatType"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
Si hago un tipo complejo de tipo de tiempo, puedo agregar un atributo, pero no la restricción, y si hago un tipo simple, puedo agregar la restricción pero no el atributo. ¿Hay alguna manera de solucionar este problema? Esta no es una restricción muy extraña, ¿o sí?
Para agregar atributos que tiene que derivar por extensión, para agregar facetas tiene que derivar por restricción. Por lo tanto, esto debe hacerse en dos pasos para el contenido secundario del elemento. El atributo se puede definir en línea:
<xsd:simpleType name="timeValueType">
<xsd:restriction base="xsd:token">
<xsd:pattern value="/d{2}:/d{2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="timeType">
<xsd:simpleContent>
<xsd:extension base="timeValueType">
<xsd:attribute name="format">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="seconds"/>
<xsd:enumeration value="minutes"/>
<xsd:enumeration value="hours"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>