История динамических возможностей 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 поддерживает в отношении динамических функций и запросов?

0 ответов

Другие вопросы по тегам