/ / namespace i atrybuty z foo, bar - xml-namespaces

przestrzenie nazw i atrybuty z foo, bar - xml-namespaces

Mam ten kawałek kodu:

<a:foo qux="A" xmlns:a="B" xmlns:b="C">
<b:bar a:quux="D" xmlns="E"/>
<xmlns xmlns:a="F" xmlns="G">
<baz a:corge="H" xmlns:baz="I" xmlns=""/>
</xmlns>
</a:foo>

Moje pytanie brzmi, jakie obszary nazw ma foo, bar i bas? i które przestrzenie nazw ma qux, quux i forge?

Myślę, że foo należy do a, a bar należy do b, ale nie wiem, czy to prawda?

Odpowiedzi:

0 dla odpowiedzi № 1

Twoja próbka kodu wydaje się bardzo myląca. Przestrzenie nazw są podstawowym pojęciem w XML. Jeśli nie znasz przestrzeni nazw, poświęć czas, aby je poznać i zrozumieć.

Kilka ogólnych uwag:

  • xmlns="something" jest deklaracją przestrzeni nazw - nie jest atrybutem,
  • nie mylić prefiksów przestrzeni nazw z identyfikatorami URI przestrzeni nazw, są one oddzielne,
  • nie mylić przedrostków przestrzeni nazw z nieprefiksowanymi nazwami elementów lub atrybutów, są one oddzielne,
  • elementy i atrybuty mogą należeć do przestrzeni nazw,
  • nie używać xmlns jako nazwa elementu,
  • jeśli używasz prefiksu, musi on być powiązany z identyfikatorem URI obszaru nazw znajdującym się w zasięgu

Odpowiedzi na Twoje pytania znajdują się poniżej jako komentarze do twojego przykładowego kodu.

<!-- foo belongs to "B", attribute qux has no namespace -->
<a:foo qux="A" xmlns:a="B" xmlns:b="C">
<!-- bar belongs to "C", quux belongs to "B" -->
<b:bar a:quux="D" xmlns="E"/>
<!-- Using element names that begin with xml is against the
XML recommendation. Furthermore, xmlns as element name
does not create a namespace definition -->
<xmlns xmlns:a="F" xmlns="G">
<!-- baz has no namespace, since this element has an empty
default namespace declaration that overrides the one
set the parent element.
corge belongs to "F" because prefix "a" was redefined
in the parent element -->
<baz a:corge="H" xmlns:baz="I" xmlns=""/>
</xmlns>
</a:foo>