История динамических возможностей GML Абстрактное ограничение временных интервалов
Я разрабатываю схему приложения GML, в которой я намерен часто использовать замену и расширение gml:DynamicFeature для стандартизированной поддержки запросов времени WFS.
Я хочу ограничить дочерние элементы gml: history для конкретной динамической функции как подмножество доступных расширений gml:AbstractTimeSliceType.
Например, с учетом приведенной ниже схемы:
<element name="Position" type="PositionType" substitutionGroup="gml:DynamicFeature"/>
<!-- -->
<complexType name="PositionType">
<complexContent>
<extension base="gml:DynamicFeatureType">
<sequence>
... relevant elements here.
</sequence>
</extension>
</complexContent>
</complexType>
<element name="CoordinateInstance" type="CoordinateInstanceType" substitutionGroup="gml:AbstractTimeSlice"/>
<!-- -->
<complexType name="CoordinateInstanceType">
<complexContent>
<extension base="gml:AbstractTimeSliceType">
<sequence>
<element name="coordinates" type="gml:DirectPositionType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="SomeOtherTimeSlice" type="SomeOtherTimeSliceType" substitutionGroup="gml:AbstractTimeSlice"/>
<!-- -->
<complexType name="SomeOtherTimeSliceType">
<complexContent>
<extension base="gml:AbstractTimeSliceType">
<sequence>
<element name="other" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
Ограничение должно позволять это:
<Position gml:id="ID_1">
<gml:history>
<CoordinateInstance gml:id="CID_1">
<geo:validTime>
<geo:timePosition>2015-03-23T00:00:00</geo:timePosition>
</geo:validTime>
<coordinates uomLabels="m">-2389026.389 5043317.021 -3078529.8</coordinates>
</CoordinateInstance>
<CoordinateInstance gml:id="CID_2">
<geo:validTime>
<geo:timePosition>2015-03-16T00:00:00</geo:timePosition>
</geo:validTime>
<coordinates uomLabels="m">-2389026.39 5043317.021 -3078529.799</coordinates>
</CoordinateInstance>
</gml:history>
</Position>
Но следует запретить это:
<Position gml:id="ID_1">
<gml:history>
<SomeOtherTimeSlice gml:id="CID_1">
<geo:validTime>
<geo:timePosition>2015-03-23T00:00:00</geo:timePosition>
</geo:validTime>
<other>This element should never be allowed here.</other>
</SomeOtherTimeSlice>
<CoordinateInstance gml:id="CID_2">
<geo:validTime>
<geo:timePosition>2015-03-16T00:00:00</geo:timePosition>
</geo:validTime>
<coordinates uomLabels="m">-2389026.39 5043317.021 -3078529.799</coordinates>
</CoordinateInstance>
</gml:history>
</Position>
Есть ли какой-нибудь способ обеспечить это с помощью XML-схемы?
Я посмотрел, как переопределить элементы с помощью ограничений, здесь: http://docstore.mik.ua/orelly/xml/schema/ch08_02.htm но я не знаю, как использовать эту технику в этом контексте, потому что gml:DynamicFeature использует группу gml:DynamicProperties, и это усложняет способ ограничения. Кроме того, он должен быть совместим с запросами WFS для динамических функций.
Пожалуйста помоги!
РЕДАКТИРОВАТЬ: я попробовал следующую схему, но получил ошибки:
<complexType name="CoordinateVelocityDynamicFeatureType">
<complexContent>
<restriction base="gml:DynamicFeatureType">
<sequence>
<sequence>
<group ref="gml:StandardObjectProperties"/>
</sequence>
<sequence>
<element ref="gml:boundedBy" minOccurs="0"/>
<element ref="gml:location" minOccurs="0"/>
</sequence>
<sequence>
<element ref="gml:validTime" minOccurs="0"/>
<element ref="geo:PositionHistory" minOccurs="0"/>
<element ref="gml:dataSource" minOccurs="0"/>
<element ref="gml:dataSourceReference" minOccurs="0"/>
</sequence>
</sequence>
</restriction>
</complexContent>
</complexType>
<!-- -->
<element name="PositionHistory" type="geo:PositionHistoryPropertyType" substitutionGroup="gml:history"/>
<!-- -->
<complexType name="PositionHistoryPropertyType">
<complexContent>
<restriction base="gml:HistoryPropertyType">
<sequence>
<element ref="geo:CoordinateInstance"/>
</sequence>
<attributeGroup ref="gml:OwnershipAttributeGroup"/>
</restriction>
</complexContent>
</complexType>
<!-- -->
<element name="Position" type="geo:PositionType" substitutionGroup="gml:DynamicFeature"/>
<!-- -->
<complexType name="PositionType">
<complexContent>
<extension base="geo:CoordinateVelocityDynamicFeatureType">
Ошибки:
Файл D:\git\eGeodesy\0.2\geodesyml\schemas\geodesyml\geodesyml\ObservationSystem.xsd недопустим. Тип 'geo:CoordinateVelocityDynamicFeatureType' не является допустимым ограничением типа 'gml:DynamicFeatureType'. (см. Подробности) Местоположение ошибки: схема / complexType / complexContent / ограничение / @base Подробности rcase-NameAndTypeOK.1: объявления {name} и {целевое пространство имен} не совпадают: элемент ограничения есть, а базовый элемент есть. range-ok.1: эта часть модели содержимого не является допустимым ограничением, поскольку значение 'minOccurs' '0' меньше, чем '1'. rcase-NameAndTypeOK.2: диапазон вхождения не является допустимым ограничением диапазона вхождения. rcase-NameAndTypeOK.1: Объявления {name} и {target namespace} не совпадают: элемент ограничения равен, а элемент base -. rcase-RecurseLax.2: не существует полного сохраняющего порядок функционального отображения от частиц к частицам. rcase-RecurseAsIfGroup: не является допустимым ограничением частицы группы моделей. rcase-NameAndTypeOK.1: Элемент не соответствует имени и целевому пространству имен термина соответствующей базовой частицы. (см. ниже) Несоответствие имени: ограничение, база. Несоответствие имени: ограничение, база. cos-частиц-restrict.2.1: группы замещения были расширены до групп выбора модели. (см. ниже) Группа подстановки элемента была расширена до группы моделей выбора. (см. ниже) 'gml:location' 'gml:priorityLocation' Группа подстановки элемента была расширена до группы выбора модели. (см. ниже) 'geo:validTime' 'gml:validTime' Группа замещения элемента была расширена до группы выбора модели. (см. ниже) 'geo:validTime' 'gml:validTime' Группа замещения элемента была расширена до группы выбора модели. (см. ниже) 'gml:history' 'geo:PositionHistory' 'gml:track' rcase-Recurse.2.1: это должно ограничивать соответствие базовой модели контента. деривация-ок-ограничение.5.4: тип содержимого не является допустимым ограничением типа содержимого.
Также я не уверен, будет ли WFS переопределять gml:DynamicFeatureType путем замены gml: history на более ограничительный тип PositionHistoryPropertyType. Кто-нибудь знает, что типичная WFS поддерживает в отношении динамических функций и запросов?