Пространство имен назначения схемы XSD
Я пытаюсь настроить новую схему gml Feature, однако мне кажется, что я что-то неправильно понимаю с пространством имен. Вот моя схема:
<xs:schema targetNamespace="http://localhost/dar" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://localhost/dar">
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" />
<xs:element name="Region" substitutionGroup="gml:_Feature">
<xs:complexType>
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="regionId" type="xs:string" />
<xs:element name="regionName" type="xs:string" />
<xs:element ref="gml:Polygon" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
И вот мой тестовый XML документ:
<wfs:FeatureCollection xmlns="http://localhost/dar" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://localhost/dar http://localhost/dar/DariusFeatures.xsd
http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<gml:boundedBy>
<gml:Envelope srsName="http://www.opengis.net/gml/srs/epsg.xml#63266405">
<gml:lowerCorner>10 10</gml:lowerCorner>
<gml:upperCorner>20 20</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<gml:featureMember>
<Region>
<regionId>region432762</regionId>
<regionName>Southern Block</regionName>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:coordinates>38.324,21.754 38.424,21.754 38.424,21.854 38.324,21.854 38.324,21.754 </gml:coordinates>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</Region>
</gml:featureMember>
Теперь схема хорошо проверяет в eclipse, однако, когда я пытаюсь проверить документ xml, eclipse сообщает мне, что целевое пространство имен файла схемы имеет значение "null"?
Как видно, я развернул схему на localhost
, Кто-нибудь может увидеть, где я запутался?
3 ответа
Попробуйте добавить следующую строку в вашу XML-схему:
<xs:import namespace="http://www.opengis.net/wfs" schemaLocation="http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" />
Учитывая эту строку (и elementFormDefault="qualised" в xs:schema, как сказал Ян), xml должен проверяться.
Короткая версия: вам нужно добавить elementFormDefault="qualified"
на ваш xs:schema
элемент.
Более длинная версия: по умолчанию в целевое пространство имен попадают только объявления элементов верхнего уровня, элементы, вложенные в сложные типы, не объявляются в пространство имен. Поэтому схема, как написано в настоящее время, ожидает regionName
а также regionId
быть в пространстве имен, но ваш документ XML содержит их в http://localhost/dar
Пространство имен. elementFormDefault
заставляет вложенные "локальные" элементы принимать целевое пространство имен.
Ну, прошло несколько дней, а проблема с проверкой до сих пор остается загадкой. В качестве обходного пути я обнаружил, что есть новая версия веб-службы OGC по адресу: http://schemas.opengis.net/wfs/2.0/wfs.xsd которой используется gml 3.2 вместо gml 3.1.1.
После небольших изменений, чтобы использовать этот новый формат все отлично!