2009-09-25 20 views
17

Czy można użyć nazwy hyphen- w nazwie elementu XML?Używanie - w nazwie elementu XML

np.

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

Myślę, że to jest ważne, ale wiem, że sprawia, że ​​parser SimpleXML w PHP jest niezadowolony, gdy próbujesz odwołać się do węzłów takich jak $ node-> child-node. – inkedmn

+0

inkedmn, Spodziewam się, że parser PHP będzie niezadowolony, a nie parser SimplXML ;-) Ponieważ jest to efektywnie '$ node-> child - node'. –

+1

Ważny, ale fugly. – Will

Odpowiedz

28

Jak łatwo stwierdzić przez Vinko i hakerów, odpowiedź jest

Tak, kreski są dozwolone w nazwach, czy dla nazw elementów lub nazw atrybutów. Jednak kreska nie może być pierwszym znakiem w nazwie.

The W3C standard definiuje nazwy w następujący sposób (sekcja 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)* 

Pomijając różne Charactes rozszerzonym ASCII i znaki dwubajtowe (które zaczynające się znakiem # w definicji składni), nazwa musi zacząć z górnym lub dolnym litery (AZ), dwukropkiem (:) lub podkreślenie. Znaki następujące po tym znaku początkowym, jeśli występują, tj. Jeśli nazwa nie jest pojedynczym znakiem, mogą być dowolnymi z ważnych znaków początkowych i/lub dowolnych cyfr (0-9), słynnego myślnika (-) i kropki (.)

Jak wskazano w innych odpowiedziach, w miarę możliwości wskazane jest unikanie niektórych znaków, nawet jeśli są one legalne, aby nie ryzykować napotkania pewnych trudności związanych z implementacją różnych parserów i warstw interopowych.

Sam W3C domyślnie potwierdził użycie kresek, ponieważ są one na przykład szeroko stosowane w XSL.

5

Tak, jest. Ale twój przykład pokazuje nazwę elementu, a nie nazwę-atrybutu. Który jest również ważny.

11

To nie jest nazwa atrybutu, ale nazwa elementu.

W każdym przypadku - jest obsługiwany zarówno w przypadku atrybutów, jak i nazw elementów w specyfikacji, o ile nazwa nie rozpoczyna się od niego (< -foo> nie jest prawidłową nazwą elementu).

Niektóre programy mogą jednak zadławić, więc ostrzegaj. Jeśli musisz użyć takiego oprogramowania, spróbuj znaleźć lepsze oprogramowanie lub poproś programistów, aby właściwie wspierali specyfikację XML.

W3CSchools' (polemic) recommendations

Bądź nazwy opisowe. Nazwy z separatorem podkreślenia są ładne: < first_name>, < last_name>.

Nazwy powinny być krótkie i proste, jak tym: < BOOK_TITLE> nie podoba: < the_title_of_the_book>.

Unikaj znaków "-". Jeśli nazwiesz " coś" imię ", niektóre oprogramowanie może myśleć, że chcesz najpierw odejść od nazwy .

Unikaj "." postacie. Jeśli podasz nazwę "first.name", niektóre oprogramowanie może pomyśleć, że "name" jest własnością obiektu obiektu "first".

Unikaj znaków ":". Dwukropki są zarezerwowane do użycia dla czegoś nazwanego nazwanych przestrzeniami nazw (więcej później).

Dokumenty XML często mają odpowiadającą bazę danych . Dobrą praktyką jest używanie reguł nazewnictwa w bazie danych dla elementów w dokumentach XML .

Litery inne niż angielskie, takie jak éòá, są całkowicie legalne w XML, ale uważaj na problemy, jeśli twój dostawca oprogramowania ich nie obsługuje.

+2

Tak więc '' jest miłym nazwa elementu i '" nie jest? –

+0

Oba są prawidłowe. Zakładam, że pytanie może mieć przyczynę w jakimś incydencie, jaki miał z -. Przyczyną może być wadliwe oprogramowanie. –

+1

Vinko, powiedziałem "ładny", a nie "ważny". Myślę, że to zabawne, gdy 'w3cschools' oskarża' w3c' o używanie najgorszych praktyk ;-) I * osobiście * ze względów ze względów estetycznych, jestem na stronie 'w3c'. –

Powiązane problemy