Sök…


Anmärkningar

Element- och attributnamn i XML kallas QNames (kvalificerade namn).

Ett QName består av:

  • ett namnområde (en URI)
  • ett prefix (ett NCName, NC eftersom det inte innehåller någon kolon)
  • ett lokalt namn (ett NCName)

Endast namnområdet och det lokala namnet är relevanta för att jämföra två QN-namn. Prefixet är bara en proxy till namnområdet.

Namnområdet och prefixet är valfritt, men namnområdet är alltid när det finns prefixet (detta säkerställs på syntaktisk nivå, så det kan inte göras fel).

Den lexikala representationen av ett QName är prefix:local-name . Namnytan är bunden separat med de speciella xmlns:... -attributen (påminnelse: attribut som börjar med xml är reserverade i XML).

Om prefixet är tomt, används ingen kolon i den lexikala representationen av QName, som bara innehåller det local-name . QNames med ett tomt prefix har antingen inget namnutrymme (om inget standardnamnområde är i omfattning) eller finns i standardnamnområdet.

Bind ett prefix till ett namnområde

Ett namnområde är en URI, men för att undvika verbositet används prefix som proxy.

I följande exempel är prefixet my-prefix bundet till namnområdet http://www.example.com/my-namespace med hjälp av specialattributet xmlns:my-prefix ( my-prefix kan ersättas med något annat prefix) :

<?xml version="1.0"?>
<my-prefix:foo xmlns:my-prefix="http://www.example.com/my-namespace">
  <!-- the element my-prefix:foo
       lives in the namespace http://www.example.com/my-namespace -->
</my-prefix:foo>

Frånvaro av namnutrymme

I XML lever element- och attributnamn i namnutrymmen.

Som standard finns de inte i något namnområde:

<?xml version="1.0"?>
<foo attr="value">
  <!-- the foo element is in no namespace, neither is the attr attribute -->
</foo>

Irrelevans av prefix

Dessa två dokument är semantiskt ekvivalenter, eftersom namnområden är viktiga, inte prefix.

<?xml version="1.0"?>
<myns:foo xmlns:myns="http://www.example.com/my-namespace">
</myns:foo>

<?xml version="1.0"?>
<ns:foo xmlns:ns="http://www.example.com/my-namespace">
</ns:foo>

Standard namnutrymme

Standardnamnområdet är namnområdet som motsvarar frånvaron av något prefix. Det kan deklareras med det speciella attributet xmlns .

<?xml version="1.0"?>
<foo xmlns="http://www.example.com/my-namespace">
  <!-- the element foo is in the namespace
       http://www.example.com/my-namespace -->
</foo>

Om inget standardnamnområde anges är namnen utan prefix i inget namnutrymme.

Attributnamn utan prefix

Element och attribut uppträder annorlunda med avseende på standardnamnområden. Detta är ofta källan till förvirring.

Ett attribut vars namn inte har något prefix bor i inget namnområde, även när ett standardnamnområde är inom räckvidd .

<?xml version="1.0"?>
<foo attr="value" xmlns="http://www.example.com/my-namespace">
  <!-- The attribute attr is in no namespace, even though
       a default namespace is in scope. The element foo,
       however, is in the default namespace. -->
</foo>

Omfattning av namnutrymmebindningar

En namnutrymmebindning (speciell xmlns eller xmlns:... attribut) är i omfattning för alla ättlingar till det bifogande elementet, inklusive detta element.

<?xml version="1.0"?>
<root>
  <my:element xmlns:my="http://www.example.com/ns1">
    <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  </my:element>
  <my:element xmlns:my="http://www.example.com/ns2">
    <!-- here, the prefix my is bound to http://www.example.com/ns2 -->
  </my:element>
</root>

Bindningen kan åsidosättas i ett kapslat element (detta påverkar dock läsbarheten):

<?xml version="1.0"?>
<my:element xmlns:my="http://www.example.com/ns1">
  <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  <my:first-child-element/>

  <my:child-element xmlns:my="http://www.example.com/ns2">
    <!-- here, the prefix my is bound to http://www.example.com/ns2,
         including for the element my:child-element -->
  </my:child-element>

  <!-- here, the prefix my is bound to http://www.example.com/ns1 -->
  <my:last-child-element/>

</my:element>

Det är mycket vanligt att deklarera alla namnutrymmebindningar i rotelementet, vilket förbättrar läsbarheten.

<?xml version="1.0"?>
<root
  xmlns="http://www.example.com/default-namespace"
  xmlns:ns1="http://www.example.com/ns1"
  xmlns:ns2="http://www.example.com/ns2">
  
  <ns1:element>
    <ns2:other-element/>
  </ns1:element>

</root>


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow