2013-07-10 3 views
0

Я и мой коллега попали в спор о действии xml. Я очень уверен, что узел xml может иметь либо текст, либо другие узлы xml, но не оба:является ли этот xml действительным?

Другими словами - Это допустимый xml? (Я говорю это НЕ)

<dt> 
    blah blah text 
    <test0> 
     some node content 
    </test0> 
    <test1> 
     blah blah some text <some_node>A</some_node> 
    </test1> 
    <test2> 
     noncount 
    </test2> 
    <test3> 
     blah blah some text <some_node>B</some_node> 
    </test3> 
</dt> 

EDIT: Мой коллега утверждает, что, поскольку .dtd файл имеет #PCDATA в нем, как так:

<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* > 

Это означает, что могут быть и другие XML-тегов в это, а также текст.

+2

Действительно. Вы можете использовать онлайн-валидатор следующим образом: http://www.w3schools.com/xml/xml_validator.asp –

+0

Почему тогда простой XML-анализатор PHP разбивает эти встроенные теги при смешивании с текстом? – user2568737

ответ

6

Существует различие в XML между хорошо сформированным и действительным. Иногда люди говорят, что они действительны, когда они имеют в виду хорошо сформированные, что вызывает недоумение. XML - это набор синтаксических правил для построения словаря. Сам по себе XML ничего не говорит о том, какие элементы и атрибуты разрешены, или где вы можете их разместить. Если документ придерживается синтаксиса XML, он хорошо сформирован. Ваш пример - это хорошо сформированный XML.

Действительность означает, что используемые элементы и атрибуты используются в соответствии с некоторыми DTD или схемой. Вы дали этот пример DTD сниппет:

<!ELEMENT dt (#PCDATA | test0 | test1 | test2 | test3)* > 

Ваш Коллега является правильным, что XML вы дали действует в соответствии с этим DTD (предполагается, что, конечно же, что содержание всех тестируемых элементов действует). Если DTD Выглядело это вместо того, чтобы:

<!ELEMENT dt (test0 | test1 | test2 | test3)* > 

Тогда ваш пример не будет действительным, но он все равно будет хорошо сформирован.

На практике смешение текста и дочерних элементов чрезвычайно распространено.

+0

Почему PHP-анализатор simpleXml разделяет эти встроенные теги при смешивании с текстом? – user2568737

+1

@ user2568737 Предлагаю вам спросить создателей этого программного обеспечения. Я также предлагаю вам читать спецификации форматов, а не полагаться на поведение случайного программного обеспечения, которое вам нравится. – Marcin

3

Это хорошо образованный XML. Текстовые узлы полностью прекрасны, также если они смешаны, если другие, которые называются "mixed content".

Действительный XML требует определения схемы XML или DTD, отсутствующей в вашем фрагменте. Если вы добавите тот, который запрещает смешанный контент, он останется хорошо сформированным XML, просто не следуя этой схеме.

3

Вы ошиблись.

Содержимое XML может содержать смеси элементов и текста (символьные данные).

Вы можете найти примеры этого в любом документе XHTML.

+1

HTML-документы не являются необходимыми документами XML. –

+0

Slaks сказал XHTML, а не HTML. Документы XHTML представляют собой хорошо сформированные XML-документы по определению. –

+1

@MichaelKay: Я отредактировал его после его комментария. – SLaks

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