2016-02-03 3 views
1

У меня проблемы с очень простой схемой. В корневом элементе xml, указанном схемой, первый ребенок корневого элемента указан как имеющий xmlns = "", который вызывает проблемы проверки для меня.XML-схема приводит к элементу xml без пространства имен

Я искал и искал и неоднократно пытался выяснить, почему это происходит, и я не имел никакого успеха. Это вызывает большую проблему с моим кодом сервера, поскольку я составляю тело xml, и проверка его не выполняется из-за того, что мой элемент не имеет xmlns = "".

Я хотел бы понять, почему xmlns = "" является результатом определения схемы и как это исправить.

Вот схема:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org" 
    xmlns="http://www.example.org"> 

    <xs:simpleType name="XYZ"> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="10"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:complexType name="ABC"> 
     <xs:sequence> 
      <xs:element name="PQR" type="XYZ"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:element name="A1"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="result" type="ABC"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

Основа этой схемы, следующий документ создан:

<?xml version="1.0" encoding="UTF-8"?> 
<A1 xmlns="http://www.example.org"> 
    <result xmlns=""> 
     <PQR></PQR> 
    </result> 
</A1> 

Я хотел бы это:

<?xml version="1.0" encoding="UTF-8"?> 
<A1 xmlns="http://www.example.org"> 
    <result> 
     <PQR></PQR> 
    </result> 
</A1> 

Я смотрел на это и пытался что-то около дня. Должен ли элемент <result> просто быть частью пространства имен target, делая xmlns = "" ненужным?

Кроме того, когда я пытаюсь проверить его я получаю следующее сообщение об ошибке:

System ID: /Users/dev/Desktop/Untitled3.xml 
Main validation file: /Users/dev/Desktop/Untitled3.xml 
Schema: /Users/dev/Desktop/test.xsd 
Engine name: Xerces 
Severity: error 
Description: cvc-complex-type.2.4.a: Invalid content was found starting with element '{"http://www.example.org":PQR}'. One of '{PQR}' is expected. 
Start location: 4:10 
End location: 4:13 
URL: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type 

ответ

2

Добавление

elementFormDefault="qualified" 

к вашему xs:schema элемент должен решить эту проблему. Если бы я сделать эту небольшую модификацию, а затем позволить Кислород генерировать образец XML-документ, то результат

<?xml version="1.0" encoding="UTF-8"?> 
<A1 xmlns="http://www.example.org"> 
    <result> 
     <PQR>PQR0</PQR> 
    </result> 
</A1> 

Смотри, например, this question and answers для объяснения, почему это помогает, но суть в нем: elementFormDefault="qualified" сообщает проверяющему процессору, что элементы, которые вы упоминаете в XSD, должны находиться в целевом пространстве имен. Значение по умолчанию для elementFormDefault является «неквалифицированным».

Если установлено значение «неквалифицировано», все элементы будут считаться не имеющими пространства имен по умолчанию, за исключением самого внешнего элемента вашего XML-документа, который, как предполагается, будет содержать пространство имен, которое вы указали здесь:

xmlns="http://www.example.org" 
+0

@DaveE Добро пожаловать. - И вы можете задать дополнительные вопросы, даже не пытаясь решить их «на один день» :), просто убедитесь, что они так же хорошо написаны, как и этот. –

Смежные вопросы