2009-12-14 18 views
5

Tengo un sistema heredado que produce XML con marcas de tiempo similares a la norma ISO 8601, pero con el espacio utilizado hasta la fecha y la hora por separado. P.ej. 2009-12-31 00:00:00 . Me gustaría definir un esquema que defina el rango posible para estas marcas de tiempo. xsd:dateTime sean particularmente idóneos para tal fin, sin embargo, se utiliza T como separador entre la fecha y la hora. No puedo modificar el sistema heredado para devolver marcas de tiempo usando T como separador.Modificar xsd: dateTime tipo simple de usar separador diferente fecha y tiempo

¿Hay alguna manera de tener una definición simpleType que se deriva de xsd:dateTime, pero altera el separador o tengo que confiar en una cadena con un patrón apropiado y comentarios legibles por humanos?

Actualización: Según tengo entendido, puedo usar un patrón para dateTime para restringir el rango de objetos dateTime para la entrada, pero esto no altera el carácter separador.

Ejemplo:

<xs:restriction base="xs:dateTime"> 
    <xs:pattern value="[2].*:[0-9]{2}"/> 
</xs:restriction> 

Esto sólo permitiría dateTime con año empezando con 2000 y sin fracciones de segundo y la información de zona horaria.

Resumen de las respuestas:

No es posible utilizar xs:dateTime como el tipo de base para esto. Sin embargo, es posible usar xs:string y definir un patrón.

<xs:restriction base="xs:string"> 
    <xs:pattern value="[0-9]{4}-[01][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-6][0-9]"/> 
</xs:restriction> 

Mediante el uso de una cadena, por supuesto, cualquier herramientas automáticas que utilizan el esquema para crear enlaces de lenguaje también habrá recuperar una cadena, la conversión al tipo de lenguaje apropiado para la fecha/hora tiene que ser hecho a mano.

Respuesta

14

Usted puede hacer una restricción habitual patrón de expresión del tipo de datos xs:string.

Por ejemplo:

<xs:element name="specialDateTime"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][9-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

Editar

me encontré con este ejemplo a http://www.cs.wisc.edu/condor/classad/refman/node9.html. Parece que puede poner una restricción en un patrón de dateTime:

<xsd:simpleType> 
    <xsd:restriction base="xsd:dateTime"> 
    <xsd:pattern value="\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d[+\-]\d\d:\d\d" /> 
    </xsd:restriction> 
</xsd:simpleType> 

Espero que ayude.

+0

Sí, lo sé. Pero esperaba algo que derive de dateTime, de modo que pueda usar XMLBeans como un mapeador automatizado de Schema a Java. –

+0

Nunca he intentado usar un elemento 'pattern' con otra cosa que no sea una cadena, pero quizás funcione con' dateTime'. Sin duda vale la pena intentarlo. – devuxer

+0

No puedo pensar una mejor respuesta que esta ... Ciertamente, XSD está sujeto a infinidad de restricciones .. No puedes usar XSD a tu manera ... –

3

no creo que se pueden derivar algo más de xsd: dateTime, como los procesadores XML no serán capaces de entender esto. Su mejor opción es usar una cuerda con el patrón correcto.

+0

sí .. Estoy de acuerdo .. demasiado –

Cuestiones relacionadas