自定义XSD简单类型接受日期或日期时间

时间:2015-06-05 21:01:49

标签: xml xsd xsd-validation

我有一个XML元素

height: 96px

使用自定义日期类型元素

<ManufactureDate>20150316</ManufactureDate>

用于验证,但现在我希望另一个元素具有相同的<xs:simpleType name="CustomDate"> <xs:restriction base="xs:string"> <xs:maxLength value="8"/> <xs:whiteSpace value="collapse"/> <xs:pattern value="\d*"/> </xs:restriction> /xs:simpleType> 数据类型,但是给出一个带有时间的输入,如下所示

CustomDate

有谁知道如何更改<ExpirationDate>20150316T15:53:00</ExpirationDate> 以接受这两种格式?

4 个答案:

答案 0 :(得分:1)

一种可能的方法是根据您的simpleType类型定义为自定义日期创建另一个CustomDate

<xs:simpleType name="CustomDateTime">
    <xs:restriction base="xs:string">
       <xs:maxLength value="17"/>
       <xs:whiteSpace value="collapse"/>
       <xs:pattern value="\d*T\d\d:\d\d:\d\d"/>
    </xs:restriction>
</xs:simpleType>

然后您可以使用xs:union接受两种自定义类型,例如:

<xs:simpleType name="CustomDateOrDateTime">
     <xs:union memberTypes="CustomDate CustomDateTime"/>
</xs:simpleType>

您可以采取其他几种方法,例如,更改正则表达式模式以接受日期与时间和没有时间。虽然,我不知道确切的要求,即是否可以改变maxLength限制,等等。

答案 1 :(得分:1)

我喜欢@ har07的想法使用<div class="box box-default"> <div class="box-header with-border"> <h3 class="box-title"> <i class="{{ $icon_classes }}"></i> {{ $box_title }} </h3> </div><!-- /.box-header --> <div class="box-body"> <div class="row"> @include('includes.global.pie_chart', $browser_usage_pie_chart_options) </div><!-- /.row --> </div><!-- /.box-body --> @if($box_footer_text) <div class="box-footer text-center"> <a href="javascript::;" class="uppercase">{{ $box_footer_text }}</a> </div><!-- /.box-footer --> @endif </div><!-- /.box --> ,但如果您真的想直接修改现有的xs:union以接受可选的时间组件,则可以使用:

CustomDate

请注意,这些基于正则表达式的约束仅在词汇上接近日期和时间数据类型。例如,<xs:simpleType name="CustomDate"> <xs:restriction base="xs:string"> <xs:whiteSpace value="collapse"/> <xs:pattern value="\d{8}(T\d\d(:\d\d){2})?"/> </xs:restriction> </xs:simpleType> 禁止大于12的月份,这些模式会接受它们。

答案 2 :(得分:0)

感谢所有回复。我可以通过改变模式来解决这个问题。

我刚使用<xs:pattern value="(\d*)|(\d*T\d{2}:\d{2}:\d{2})"/>来使其发挥作用。

因为我之前错过了括号,所以它之前对我不起作用。

谢谢

答案 3 :(得分:0)

作为@ har07提出的解决方案的补充,我将提出以下建议:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xml:lang="DA">
  <xs:element name="myDateTime" type="CustomDateTime" />
  <xs:simpleType name="DateType">
    <xs:restriction base="xs:date" >
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DateTimeType">
    <xs:restriction base="xs:dateTime" >
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CustomDateTime">
    <xs:union memberTypes="DateType DateTimeType"/>
  </xs:simpleType>
</xs:schema>

它使用标准的XSD date和dateTime格式,我怀疑这将是最标准的做法,而不是发明一种新格式。我什至认为这应该可行:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xml:lang="DA">
  <xs:element name="SlutDato" type="CustomDateTime" />
  <xs:simpleType name="CustomDateTime">
    <xs:union memberTypes="xs:dateTime xs:date"/>
  </xs:simpleType>
</xs:schema>