Spațiu de nume (XML)

Spațiile de nume XML sunt utilizate pentru a identifica în mod unic elementele și atributele dintr-un document XML și pentru a putea amesteca mai multe limbaje XML într-un singur document. Modul lor de funcționare poate fi comparat cu codurile de zonă pentru numerele de telefon.

De exemplu, elementul <p> din XHTML descrie un paragraf; într-un limbaj XML pentru o bază de date de persoane, <p> ar putea reprezenta un element pentru o persoană. Spațiile de nume permit ca aceste elemente să fie clar distinse.

Mecanismul spațiului de nume pentru datele XML a fost dezvoltat de consorțiul W3 și a fost disponibil în cea de-a treia ediție din 8 decembrie 2009 atât pentru XML 1.0, cât și pentru XML 1.1. Prima versiune a specificației este datată 14 ianuarie 1999, la aproximativ un an de la adoptarea specificației XML. Din acest motiv se găsește z. De exemplu, în recomandarea pentru MathML 1.0 nu este specificat spațiu de nume. A doua versiune a fost lansată pe 16 august 2006.

Structura spațiilor de nume XML

Spațiile de nume sunt reprezentate de URI-uri , mai ales adrese web normale. Trebuie remarcat faptul că adresa corespunzătoare nu trebuie să existe . Poate fi definit liber. De asemenea, este important ca informațiile din spațiul de nume să fie sensibile la majuscule, inclusiv în partea gazdă, precum și orice codare URL , de ex. B.% C3% A4 în loc de ä, trebuie respectat.

Dacă o adresă URL este utilizată ca spațiu de nume, totuși, este logic să oferiți informații suplimentare despre limbajul XML la această adresă, de ex. B. o definiție a tipului de document (DTD) sau o schemă XML .

Folosiți spații de nume

Pentru spațiile de nume se folosește atributul xmlns(pentru engleză .: XML N ame s pace):

<html xmlns="http://www.w3.org/1999/xhtml">
  ... restliche HTML-Datei
</html>

Elementul <html> și toate elementele sale copil, adică elementele din <html>... </html>, aparțin spațiului de nume de aici W3C XHTML namespace. Spațiile de nume pot fi, de asemenea, imbricate:

<html xmlns="http://www.w3.org/1999/xhtml">
  ... XHTML-Elemente
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    ... MathML-Elemente
  </math>
  ... XHTML-Elemente
</html>

Prefixe

În plus față de metoda descrisă mai sus, există un mecanism de prefix : elementele pot fi setate în orice spațiu de nume folosind un șir de caractere separat de numele elementului prin două puncte. Prefixul nu trebuie să aibă nicio relație cu spațiul de nume, ci trebuie mai întâi „legat” de spațiul de nume:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:m="http://www.w3.org/1998/Math/MathML">
  ... XHTML-Elemente
  <m:math>
    ... MathML-Elemente mit m:-Präfix
  </m:math>
  ... XHTML-Elemente
</html>

În acest exemplu, prefixul m este legat de spațiul de nume MathML din elementul <html> cu specificația xmlns: m = "..." . După aceea, elementele pot fi specificate prin specificarea

<m:Elementname>...</m:Elementname>

să fie setat în spațiul de nume corespunzător.

Numele propriu-zis al elementului, adică partea fără un prefix principal și două puncte, se numește numele local al elementului. Numele complet sau calificat al elementului ( QName pe scurt ) constă dintr-un URI al spațiului de nume și un nume local, astfel încât prefixul poate fi ales după dorință.

Prefixul xmlns

Din punct de vedere tehnic, o construcție de tip este xmlns:mun atribut cu un prefix al spațiului de nume. În cazul utilizării prefixelor, există un spațiu de nume suplimentar

 xmlns:xmlns="http://www.w3.org/2000/xmlns/"

în document. Cu toate acestea, acest lucru nu este specificat în mod explicit, ci este asumat de programele de procesare XML. La fel ca următorul xml , acest prefix este, de asemenea, permanent legat de spațiul de nume specificat mai sus.

Prefixul xml

Elementele XML nu trebuie să xmlînceapă cu șirul de caractere . Rezultă din aceasta că prefixele spațiului de nume XML nu trebuie să xmlînceapă cu nici unul . De fapt, este xmllegat de un spațiu de nume pentru elementele și atributele pe care consorțiul W3 le rezervă pentru extensiile XML.

URI-ul acestui spațiu de nume este http://www.w3.org/XML/1998/namespace. Nu trebuie specificat în mod explicit, ci este inserat chiar de programele de procesare.

În prezent există următoarele atribute cu prefix xml(începând cu aprilie 2010):

atribut importanţă exemplu
xml: lung Informații despre limbă despre conținut. Definită de ISO 3166 și ISO 639 . Valori: cod de limbă din 2 cifre urmat opțional de o cratimă și un cod de țară cu 2 cifre cu majuscule. Excepție: coduri de țară și limbă nestandardizate.
<p xml:lang="de">
  Inhalt in deutscher Sprache, Land: undefiniert
</p>
<p xml:lang="en-US">
  Inhalt in englischer Sprache, Land: Vereinigte Staaten
</p>
<p xml:lang="sindarin-MITTELERDE">
  Inhalt in grauelbisch, Land: Mittelerde
</p>
xml: spațiu Poate accepta păstrarea și implicit a celor două valori . conservare înseamnă că spațiile și întreruperile de linie sunt afișate exact așa cum sunt în textul sursă al fișierului (ca și în cazul elementului <pre> din HTML). implicit înseamnă că mai multe spații și întreruperi de linie sunt combinate într-un singur spațiu (implicit).
<div xml:space="default">
  ASCII-Art:
  <p xml:space="preserve">
   ¦\      _,,,---,,_
   /,`.-'`'    -.  ;-;;,_
  ¦,4-  ) )-,_..;\ (  `'-'
   '---(_/--'  `-'\_)  fL
  </p>
</div>
xml: bază Adresa URL de bază de la care sunt evaluate toate legăturile relative din element.
<h3>Wikipedia-Links</h3>
<ul xml:base="http://de.wikipedia.org/wiki/">
  <li><a href="XML">XML</a></li>
  <li><a href="SGML">SGML</a></li>
</ul>
xml: id Identificator unic pentru element în întregul document
<p xml:id="Kapitel_1">Ein Absatz</p>

<p><a href="#Kapitel_1">Link zum obigen Absatz</a></p>

Atribute

Atributele din XML sunt așa-numitele noduri asociate . Nu sunt tratați ca niște copii normali ai unui element. În cazul spațiilor de nume, aceasta înseamnă că atributele nu se află în spațiul de nume al elementului în care sunt notate, ci mai degrabă în spațiul de nume nul în mod implicit.

Există cazuri în care doriți să modificați în mod explicit acest lucru. De exemplu, legăturile în SVG sunt preluate din limbajul XLink , care oferă un set de atribute cu care pot fi descrise legăturile. În acest caz, atributelor individuale trebuie să li se dea un prefix:

<svg xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink">
  <a xlink:href="grafik2.svg">Link zu Grafik 2</a>
</svg>

Nu există nicio modalitate de a seta atribute într-un anumit spațiu de nume fără un prefix.

exemplu

În exemplul următor, sunt amestecate elemente sau atribute din limbajele XML XHTML ( albastru ), MathML ( roșu ), SVG ( verde ) și fără spațiu de nume (negru). În special, trebuie remarcat faptul că atributul xmlns în sine nu se află în niciun spațiu de nume; valoarea sa este doar colorată pentru a indica ce elemente sunt afectate de acesta.

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:svg="http://www.w3.org/2000/svg">
  <head>
    <title>Beispiel-Datei mit mehreren Namensräumen</title>
  </head>
  <body>
    <h1>Eine Mathe-Formel:</h1>
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <mi>x</mi><mo>=</mo><mn>2</mn>
    </math>
    <p>Und noch ein kleines Bild dazu:</p>
    <svg:svg>
      <svg:rect x="0" y="0" width="10" height="10" />
      <svg:text>
        <svg:tspan>Eine Formel in der Grafik:</svg:tspan>
        <svg:tspan>
          <math xmlns="http://www.w3.org/1998/Math/MathML">
            <mi>y</mi><mo>=</mo><mn>1</mn>
          </math>
        </svg:tspan>
      </svg:text>
    </svg:svg>
    <p>Eine SVG Grafik kann auch ohne Präfix verwendet werden:</p>
    <svg xmlns="http://www.w3.org/2000/svg">
      <circle svg:cx="10" svg:cy="10" svg:r="5" svg:fill="red" />
    </svg>
  </body>
</html>

Notarea spațiului de nume conform lui James Clark

Prefixele spațiului de nume pot fi alese liber. În unele contexte, de ex. B. Dacă vedeți doar o mică secțiune a unui document XML mai complex, acest arbitrar poate duce la neînțelegeri. Prin urmare, James Clark a introdus o notație diferită pentru numele elementelor în articolul său XML Namespaces , care se bucură de o popularitate crescândă în documentarea datelor XML.

Un exemplu simplu ar putea arăta astfel:

 <{http://www.w3.org/1999/xhtml}html>
   <{http://www.w3.org/2000/svg}svg>
   </{http://www.w3.org/2000/svg}svg>
 </{http://www.w3.org/1999/xhtml}html>

Elementele din textul care rulează sunt apoi de ex. B. după cum sa {http://www.w3.org/1999/xhtml}htmlmenționat.

URI-ul unui spațiu de nume este plasat în fața fiecărui element între paranteze. Aceasta caracterizează în mod unic elementul cu spațiul său de nume. Acesta este marele avantaj al acestei metode, care la prima vedere pare un pic greoaie.

Vă rugăm să rețineți că această notație nu este un XML valid. Este folosit doar pentru a ilustra și documenta spațiile de nume.

Dificultăți cu spațiile de nume XML

Coloane în numele elementelor

Programele de procesare XML sunt împărțite în două grupuri:

  • Programe care observă și procesează spații de nume
  • Programe care ignoră spațiile de nume

Cea mai importantă diferență este modul în care sunt utilizate două puncte în numele elementelor. Dacă documentul este procesat de un program sensibil la spațiul de nume, toate punctele trebuie interpretate ca separatoare pentru prefixe și nume de elemente - altfel programul generează o eroare. Programele care nu fac distincția între spațiile de nume nu efectuează această verificare.

În XML în sine, este permisă definirea elementelor care au deja două puncte în numele elementului. Cu toate acestea, acest lucru nu este în mod expres recomandat. Cu toate acestea, fișierele care utilizează spații de nume sunt astfel documente XML bine formate.

Adresele URL ca spații de nume

Este o întrebare obișnuită în forumurile relevante ce ar trebui să fie stocat sub adresa URL care este utilizată ca definiție a spațiului de nume. Răspunsul simplu este că nimic nu trebuie să existe acolo. Adresele URL și, în general, URI-urile, sunt folosite ca definiție, deoarece pot oferi o indicație cu privire la cine a fost dezvoltată „limba” și deoarece persoanele sau organizațiile respective au un control cel puțin simbolic asupra unui anumit interval de adrese URL (de exemplu, http: //www.w3.org/… pentru consorțiul W3).

Definiții tip de document și spații de nume

Limbajele XML sunt încă deseori definite astăzi cu așa-numitele definiții de tip document. Aceste DTD, care datează din epoca SGML , nu au fost niciodată destinate să respecte spațiile de nume (DTD-urile au fost dezvoltate în anii 1980). Este foarte greoaie și uneori imposibilă, de ex. B. cu orice prefixe sau în XSLT pentru a configura o DTD valabilă în general pentru un limbaj XML sau un document.

O încercare de a face acest lucru pentru XHTML, MathML și SVG într-un singur fișier poate fi găsită la consorțiul W3. Acolo, prin intermediul unor entități care pot fi definite ulterior, este posibil să se redefinească prefixele pentru fiecare document.

Vezi si

Dovezi individuale

  1. Spațiu de nume W3C XHTML (engleză)
  2. Spațiu de nume XML W3C (engleză)
  3. XML namespaces conform lui James Clark (engleză)
  4. Către profilul XHTML + MathML + SVG (engleză)

Link-uri web