Задать вопрос
@lilota

Как применяются key , keyref xml schema?

<парковаться xmlns="http://parken.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://parken.org parken.xsd">
    <машина номер="12341"/>
    <машина номер="258"/>
    <машина номер="12"/>
    <машина номер="4587"/>
    <парковка id="12">
        <парк>258</parkt>
        <парк>12</parkt>
    </парковка>
    <парковка id="1597">
        <парк>12341</parkt>
        <парк>4587</parkt>
    </парковка>
</парковаться>

на основе этого xml документа надо составить схему, в которой машины имеют разные номера, парковки имеют разные id. На одной парковке может стоять только одна машина, которая уже известна из документа и каждой машине разрешается стоять максимально только на одной парковке. Как применить эти ограничения с помощью key keyref и unique. вот моя схема что смогла сделать дальше не знаю, Подскажите?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://parken.org" xmlns:tns="http://parken.org" elementFormDefault="qualified">
    <xs:element name="парковаться">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="машина" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute name="номер" type="xs:positiveInteger"></xs:attribute>
                    </xs:complexType>
                    
                    <xs:key name="номерType">
                        <xs:selector xpath="tns:парковаться/tns:машина></xs:selector>
                        <xs:field xpath="@номер"></xs:field>
                    </xs:key>
                
                </xs:element>
                <xs:element name="парковка" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="парк" type="xs:positiveInteger" maxOccurs="unbounded"></xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:positiveInteger"></xs:attribute>
                    </xs:complexType>
                    
                    <xs:key name="idType">
                        <xs:selector xpath="tns:парковаться/tns:парковка"></xs:selector>
                        <xs:field xpath="@id"></xs:field>
                    </xs:key>
                    
                   <b> <xs:keyref refer="tns:номерType" name="номерRefType">
                        <xs:selector xpath="????"></xs:selector>
                        <xs:field xpath="?????"></xs:field>
                    </xs:keyref>    </b>                
                    
                </xs:element>
            </xs:sequence>
         </xs:complexType>
    </xs:element>

</xs:schema>
  • Вопрос задан
  • 3692 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Termit7000
Исходя из
На одной парковке может стоять только одна машина

т.е. на одной парковке не может стоять больше одной известной машины (в приведенном выше примере XML может)

XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://parken.org" targetNamespace="http://parken.org" elementFormDefault="qualified">
	<xs:element name="парковаться">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="машина" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="номер" type="xs:string"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="парковка" minOccurs="1" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="парк" type="xs:string" maxOccurs="1"/>
						</xs:sequence>
						<xs:attribute name="id" type="xs:string"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>

		<xs:key name="УникальностьМашин">
			<xs:selector xpath="tns:машина"/>
			<xs:field xpath="@номер"/>
		</xs:key>

		<xs:key name="УникальностьПарковок">
			<xs:selector xpath="tns:парковка"/>
			<xs:field xpath="@id"/>
		</xs:key>

		<xs:keyref name="МашинаНаПарковкеСуществует" refer="tns:УникальностьМашин">
			<xs:selector xpath="tns:парковка/tns:парк"/>
			<xs:field xpath="."/>
		</xs:keyref>

		<xs:key name="ОднаМашинаНаОднойПарковке">
			<xs:selector xpath="tns:парковка"/>
			<xs:field xpath="@id"/>
			<xs:field xpath="tns:парк"/>
		</xs:key>

	</xs:element>
</xs:schema>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы