2015-11-20 3 views
2

Действительно ли это для элемента XML типа anyURI, чтобы содержать пробелы?Может ли xsd тип 'anyURI' содержать пробелы?

Схема говорит, что это так, но говорит, что она очень обескуражена.

http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#anyURI

NOTE: Spaces are, in principle, allowed in the ·lexical space· of anyURI, however, their use is highly discouraged (unless they are encoded by %20). 

Третья сторона устанавливает эту аудиторию с не избежали пространств, например, «Веб-сайт один». Но это кажется очень странным, кто-то может подтвердить, что я не схожу с ума, пожалуйста :)

Update

Я хотел бы упомянуть, я имею в виду аудитории элемента в схеме SAML2 утверждение, которое просто говорится это как anyUri, но если он может в равной степени быть строкой («один два три»), почему он даже установлен как anyUri.

ответ

3

Первая точка: фаза whiteSpace типа данных xs: anyURI определяется как «коллапс», что означает, что ведущие и завершающие символы пробелов игнорируются, а внутренние последовательности пробелов эквивалентны одному пространственному символу.

Второй пункт: как указано в сорок два, если вы можете получить юридический URI, применяя процентное кодирование, то это законный (XSD 1.0) экземпляр xs:anyURI: в частности, "website one" является юридическим представителем родственника URI "website%20one".

(Я хотел бы использовать термин «wannabe URI», чтобы описать строку, которая не является URI, но становится URI после применения экранирования. XSD 1.0 допускает URI для Uannabe. Одна из основных трудностей здесь заключается в том, что вы не знаю, удалился ли URI, если вы применили ускорение дважды, вы получаете "website%2520one", что приводит к беспорядку.)

Наконец, в XSD 1.1 все ставки отключены: «Значение пространства anyURI - это набор последовательности конечной длины из нуля или более символов (как определено в [XML]), которые · соответствуют · производству Char из [XML]. ». По сути, было так много дискуссий о том, что было законным, а что нет, учитывая разнообразие спецификаций URI/IRI/LEIRI, что группа схем решила, что в отношении действительности все идет.

2

Не твердое подтверждение, но вы, вероятно, не сойдете с ума, по крайней мере, не по этой причине.

Даже если допускаются пробелы в anyURI, это было бы очень глупо включать их, так как они не имеют права в качестве ссылки URI в соответствии с RFC 3986.

Однако в спецификации XML-схеме, как раз перед вами нотой цитируемой, есть и этот отрывок:

· Лексического пространство · из anyURI является последовательностью символов конечной длиной, которые, когда алгоритм определенной в разделе 5.4 [Язык привязки XML] применяется к ним, приводят к строкам, которые являются законными URI в соответствии с [RFC 2396] с поправками [RFC 2732].

Относительный алгоритм указывает, что до разрешения ссылки на URI, полученной из элемента anyURI, вы должны избегать «незаконных» символов.

2

RFC 2396 (который предшествовал 3986 и был актуальным на момент создания XML-схемы) говорит об использовании пробельных символов «для разграничения URI во многих контекстах».

В качестве таковых мы могли предположить, что строки "http://example.net/" и " http://example.net/ " были оба изображениями того же URI. То есть они занимают одну и ту же точку в пространстве значений в терминах XML-схемы, но отличаются в терминах лексическое пространство.

Это также может вызвать головные боли, поэтому вам лучше не использовать пробелы вообще.

+0

Хорошая точка. Третья сторона генерирует этот элемент как предложение с пробелами («Веб-сайт Один»), поэтому я не контролирую его, но хотел бы сказать «это неправильно», но, к сожалению, он кажется действительным даже если они далеки от желаемых. –

+0

Это действительный способ сделать что-то, что на следующем уровне недействительно; сам URI не должен содержать пробела. –

+0

В моем коде C# произошла ошибка, когда я передал его классу Uri(), но когда я проанализировал его как относительный URL, он, похоже, принял его. –

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