Почему мой тест XML не сходит с очень простой схемой XSD?
-
26-09-2019 - |
Вопрос
Я немного новичок в XML схеме. Буду благодарен, если кто-то поможет мне понять, почему мой XML не проверяется с схемой:
Вот моя схема:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/testSchema" xmlns="http://www.example.org/testSchema">
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="Name">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" />
<xs:element name="LastName" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Вот мой тест XML:
<?xml version="1.0" encoding="UTF-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
Я получаю после получения ошибки Eclipse XML Editor / Validator:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{Name}' is expected.
Я не мог понять, что не так с этой схемой или моим XML.
Решение
Все, что вам нужно сделать, это добавить elementformdefault = "квалифицированное", и у вас все будет хорошо. Чтобы понять это поведение, прочитайте «Вы квалифицированы?» раздел @ http://msdn.microsoft.com/en-us/library/ms950796.aspx.
Другие советы
Просто добавьте ElementformDefault = «квалифицировано» к атрибутам схемы.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/testSchema"
elementFormDefault="qualified"
xmlns="http://www.example.org/testSchema">
И ваш оригинал будет работать
<?xml version="1.0" encoding="utf-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
Похоже, вы не будете указывать, как подтвердить FirstName
и LastName
элементы; дать элемент спецификации для тех type="xsd:string"
(куда xsd
Необходимо сопоставить с пространством имен типа данных XML схемы XML, конечно), и все должно быть хорошо.
Но вам лучше не вложить эти элементы так глубоко. Положить их все на том же уровне и использовать ref="Name"
связывать их все вместе; Это делает вашу схему гораздо более гибкой и полезной.