2016-06-20 6 views
1

У меня есть схема, которая дает мне это определение, и нигде в схеме нет ссылки на whitespace (никогда не указывается сохранение/сбой/замена на что-либо).Недопустимое значение по умолчанию для сложного типа mixed = true

<xs:element name="Content"> 
    <xs:complexType mixed="true"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"/> 
    </xs:complexType> 
</xs:element> 

Я столкнулся с каким-то кодом, который делает .trim() на строке, полученную во время синтаксического анализа этого элемента. Если это означает, что значение whiteSpace равно collapse, то trim() будет считаться действительным, но если он подразумевает preserve или replace, то trim() будет ошибкой. Сторонний код в другом месте, по-видимому, обрабатывает его как preserve, но я не уверен, что это мотивированное решение, основанное на схеме.

Удаление обрезки - это то, что мне нужно сделать, чтобы наш код соответствовал их коду, поэтому мой путь ясен, но мне стало любопытно, было ли существующее поведение технически правильным (если нет других мест в код, который может быть затронут).

Я потратил время на поиск в Google и на полчаса или около того, чтобы выбрать спецификацию схемы xml и не нашел четкого ответа, поэтому, прежде чем я потрачу гораздо больше времени, выясняю, что, вероятно, подразумевается по умолчанию на основе сочетание из 2-3 областей спецификации, я думал, что попрошу здесь в надежде, что кто-то уже отследил это, и только знает ответ. (или кому-то становится любопытно и отслеживает его для удовольствия).

ответ

0

Фрагмент whiteSpace может быть использован для ограничения пространства значений типов, полученных из строки; он не направляет синтаксический анализатор XML, чтобы обрезать или нормализовать значения строк. Подумайте об этом как о указании ограничений на достоверность компонентов XML-документа, а не как направить изменения в анализируемые значения этих компонентов.

+0

Это немного сложнее, чем это. В контексте XSLT/XQuery whiteSpace изменяет введенное значение узла, который должен быть свернут/нормализован, но он не меняет строковое значение. На уровне PSVI терминология отличается, но эффект подобен. –

+0

@MichaelKay: Я интерпретировал OP как подразумевающее, что объявление whiteSpace в XSD может повлиять на обрезку строки, созданной при разборе документа экземпляра XML. Возможно, я неправильно понял. Скажите, правда, я ошибаюсь, полагая, что это только проверка, а не поиск, на что влияет объявление whiteSpace в XSD? – kjhughes

+1

Пространственный грань влияет на «фактическое значение» узла в PSVI. Но, конечно, большинство людей, выполняющих валидацию, интересуются только тем, действительно ли документ действителен, они не будут смотреть на другие свойства узлов PSVI. Вероятно, они, скорее всего, будут использовать PSVI, если они используют XSLT или XQuery, ориентированные на схему, и в этом случае «фактическое значение» PSVI становится «типизированным значением XDM». –

0

Фрагмент whiteSpace применяется только к простым типам, поэтому я не вижу, как он относится к вашему сложному сложному типу.

В обычном использовании смешанного содержимого для представления помеченного текста документа пробелы, как правило, значительны. Конечно, нет способа объявить в схеме, что это не существенно. Но ваше приложение может узнать больше о данных, чем указано в схеме; только приложение может узнать, безопасно ли обрезать пробелы.