2009-12-14 7 views
5

Mam starszą wersję systemu, który produkuje XML ze znacznikami czasowymi podobnymi do ISO 8601, ale z przestrzenią używaną do oddzielania daty i czasu. Na przykład. 2009-12-31 00:00:00. Chciałbym zdefiniować schemat, który definiuje możliwy zakres dla tych znaczników czasowych. xsd:dateTime byłby dobrze przystosowany do tego celu, jednak używa T jako separatora między datą i czasem. Nie mogę zmodyfikować starego systemu, aby zwracać znaczniki czasu, używając T jako separatora.Modyfikuj xsd: datTime prosty typ, aby używać innego separatora daty i czasu.

Czy istnieje sposób, aby zdefiniować simpleType definicję, która pochodzi od xsd:dateTime, ale zmienia separator lub czy muszę polegać na łańcuchu z odpowiednim wzorem i czytelnymi komentarzami?

Aktualizacja: Jak rozumiem, mogę użyć wzoru na dateTime ograniczyć zakres obiektów datetime na wejściu, ale to nie zmienia znak separatora.

przykład:

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

To pozwala jedynie na dateTime latami, poczynając od 2000 bez sekund frakcyjnych i strefa czasowa.

Streszczenie odpowiedzi:

Nie jest możliwe użycie xs:dateTime jako typ bazowy dla tego produktu. Możliwe jest jednak użycie xs:string i zdefiniowanie wzoru.

<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> 

Korzystając ciąg, oczywiście, żadnych automatycznych narzędzi, które używają schematu do tworzenia powiązań językowych będzie również pobrać ciąg, konwersja do odpowiedniego typu językowego dla data/czas musi być zrobione ręcznie.

Odpowiedz

14

Można wykonać ograniczenie dla wzoru wyrażenia regularnego dla typu danych xs:string.

Na przykład:

<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> 

Edit

Znalazłem ten przykład w http://www.cs.wisc.edu/condor/classad/refman/node9.html. Wygląda na to, może umieścić ograniczenie wzór na 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> 

nadzieję, że pomoże.

+0

Tak wiem. Ale liczyłem na coś, co wywodzi się z dateTime, dzięki czemu mogę używać XMLBean jako zautomatyzowanego programu mapującego Schema-to-Java. –

+0

Nigdy wcześniej nie próbowałem używać elementu 'pattern' z czymkolwiek innym niż ciąg znaków, ale może faktycznie działałoby z' dateTime'. Z pewnością warto spróbować. – devuxer

+0

Nie mogę wymyślić lepszej odpowiedzi niż to. Z pewnością XSD związany z piekłem ograniczeń .. Nie możesz używać XSD na swój własny sposób .. –

3

Nie sądzę, że można uzyskać coś innego z xsd: dateTime, ponieważ procesory XML nie będą w stanie tego zrozumieć. Najlepiej jest użyć struny o odpowiednim wzorze.

+0

tak .. Zgadzam się .. też –

Powiązane problemy