2009-09-25 3 views
17

Можно ли использовать hyphen- в имени XML-элемента?Использование имени элемента XML

например.

<rank-type>Rank</rank-type> 
+1

Я думаю, что это действительно так, но я знаю, что это делает SimpleXML-парсер в PHP недовольным, когда вы пытаетесь ссылаться на узлы, такие как $ node-> child-node. – inkedmn

+0

inkedmn, я ожидаю, что это сделает php-парсер недовольным, а не SimplXML-парсером ;-) Потому что это эффективно '$ node-> child-node'. –

+1

Действительно, но изящно. – Will

ответ

28

Как легко заявил Винко и хакера, ответ

Да, дефис разрешены в именах, будь то для имен элементов или атрибутов. Однако a тире не может быть первым символом в названии.

W3C standard определяет имена следующим образом (раздел 2.3)

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 
NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
Name ::= NameStartChar (NameChar)* 

Игнорирования различного расширенного ASCII charactes и двухбайтовые символов (которые начинаются с символом # в определении синтаксиса), имя должно начаться с верхней или строчной буквой (AZ), двоеточие (:) или подчеркивание. Символы, следующие за этим стартовым символом, если таковые имеются, т. Е. Если имя не является одним символом, могут быть любыми допустимыми стартовыми символами и/или любыми цифрами (0-9), знаменитой чертой (-) и точкой (.)

Как указано в других ответах, по возможности желательно избегать определенных символов, даже если они могут быть законными, чтобы мы не столкнулись с некоторыми трудностями, связанными с реализацией, с различными синтаксическими анализаторами и уровнями взаимодействия.

Сам W3C неявно подтвердил использование тире, поскольку они широко используются в XSL, например.

5

Да, это так. Но ваш пример показывает имя элемента, а не имя атрибута. Это также верно.

11

Это не имя атрибута, а имя элемента.

В любом случае - поддерживается как для атрибутов, так и для имен элементов в спецификации до тех пор, пока имя не начинается с него (< -foo> не является допустимым именем элемента).

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

W3CSchools' (polemic) recommendations

Сделать имена описательный. Имена с разделителем подчеркивания хороши: < first_name>, < last_name>.

Имена должны быть короткими и простыми, как это: < BOOK_TITLE> не нравится: < the_title_of_the_book>.

Избегайте знаков "-". Если вы назовете что-то «сперва», некоторое программное обеспечение может подумать, что вы хотите сначала вычесть имя .

Избегайте "." персонажи. Если вы назовете что-то «first.name», некоторое программное обеспечение может считать, что «имя» является свойством объектом «первым».

Избегайте знаков ":". Колонки: зарезервированы для использования для чего-то , называемого пространствами имен (более поздние).

Документы XML часто имеют соответствующую базу данных . Хорошая практика заключается в использовании правил именования вашей базы данных для элементов в XML-документах .

Не-английские буквы, такие как éòá, абсолютно легальны в XML, но следите за проблемами, если ваш поставщик программного обеспечения не поддерживает их.

+2

Итак, '' является хорошим имя элемента и '' нет? –

+0

Они оба действительны. Я предполагаю, что у этого вопроса может быть причина в каком-то инциденте, который у него был с. Это может быть неисправное программное обеспечение. –

+1

Vinko, я сказал «хороший», не «действительный». Я думаю, что забавно, когда «w3cschools» обвиняют «w3c» в использовании худших практик ;-) И * лично * по ¬стным причинам, я на стороне «w3c». –

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