Vra

Dit is iets wat ek altyd 'n bietjie moeilik vind om aan ander te verduidelik:Waarom bestaan ​​XML-naamruimtes?Wanneer moet ons dit gebruik en wanneer nie?Wat is die algemene slaggate wanneer u met naamruimtes in XML werk?

Ook, hoe hou dit verband met XML-skemas?Moet XSD-skemas altyd met 'n naamruimte geassosieer word?

Was dit nuttig?

Oplossing

Hulle is vir die feit dat verskeie opmaak tale word gekombineer, sonder om te bekommer oor botsende element en skryf name.

Byvoorbeeld, kyk na enige bietjie van XSLT kode, en dan dink wat sou gebeur as jy nie naamruimtes gebruik het en probeer het om 'n XSLT waar die uitset moet "template", "vir-elke" bevat skryf, ens, elemente. Sintaksfoute, is wat.

Ek sal die raad en slaggate om ander te laat met meer ervaring as ek.

Ander wenke

Hoekom doen XML name spaces bestaan?

As gevolg, terug in 1997, 'n paar baie invloedryke persone in die W3C wou hulle, en sou nie sonder 'n antwoord neem. Selfs toe dit blyk, durf ek sê finaal, dat daar beter maniere om die "probleem" op te los hulle gedink het hulle het, het hulle steeds hul invloed uitgeoefen om hul begeertes geskryf het in 'n W3C Aanbeveling.

Die grootste knaap in die deur nou 'n uitgebreide mitologie rondom XML Name is dat daar 'n tegniese meriete vir hulle. (Dit is die stroomaf effek van 'n Aanbeveling eenvoudig bestaande en dus beset My Titel - "Gee, daar is gotta 'n (goeie) redes wees!" -. In teenstelling met 'n forgetable voetnoot iewers)

baie pyn, geen wins .

Wanneer moet ons gebruik dit en wanneer moet ons nie?

Jy moet nooit gebruik dit as jy dit kan help. Ongelukkig het die meedoënlose bevordering van hierdie BAD [*] toestel deur belanghebbende partye vandag wat maak dit bykans onmoontlik om nie te hê om mee rekening XML name spaces op 'n sekere punt of 'n ander bevorder 'n clusterf * k van specs. So, selfs as jy vermy XML name spaces jouself, jy sal-naamruimte aangepak crud op jou afkom uit alle rigtings, of nog erger, Tool wat eenvoudig weier om te werk nie, tensy jy hulle so crud voed vind.

Wat is die algemene slaggate by die werk met naamruimtes in XML?

Een baie algemeen slaggat is in die gebruik van Xpath uitdrukkings met dokumente waar 'n naamruimte is "gebreke": die naamruimte sal eksplisiete in die uitdrukkings te wees. Nog 'n probleem is met behulp van hulle "korrek" wanneer die bou van dokumente: hulle probleme skep uit lug .

Ook, hoe dit verband hou met XML skemas? Moet XSD skemas altyd gepaard gaan met 'n naamruimte?

Daar is geen nodige verband, behalwe dat die XSD Schema spec is ontwikkel in 'n tyd toe net oor almal in die komitee het die XML Naamruimtes bietjie in hul tande. Sodat hulle gewerk dit in so diep as wat hulle kon. Dit is moontlik, in elk geval, om XSD skemas gebruik sonder naamruimtes, maar dit is 'n steil opdraande kragtige slag as net oor elke toolset ondersteun XSD skemas aanvaar dat jy sal wees "wil" om naamruimtes gebruik.

[*] BAD = gebreek soos Ontwerp

UPDATE: 'n Ou opstel oor hierdie non-oplossing vir 'n nie-probleem .

Dit is amper dieselfde as om te vra "waarom gebruik ons ​​pakkette vir Java/C#?":

  • herbruikbaarheid:Jy kan 'n stel etikette/kenmerke wat jy definieer oor verskillende tipes xml-dokumente hergebruik.
  • modulariteit:As jy 'n "aspek" by jou XML moet voeg;om 'n naamspasie by jou xml-dokument by te voeg, is makliker as om jou hele xml-skemadefinisie te verander.
  • Vermy die besoedeling van die "hoof" naamruimte:Jy dwing nie jou ontleder om met 'n groot skemadefinisie te werk nie, gebruik net die naamruimte wat jy nodig het.

Die grootste slaggat IMHO is mens-interaksie te interpreteer dokumente bv om kode om 'n XML Doc verwerk ontwikkel. Dit is ook maklik om te fokus op die letterlike uitdrukking van die dokument eerder as die infoset gevolg van die ontleding van die dokument.

Bv. die volgende knope

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

is almal semanties identies -. Nog baie anders as die naïef oog

Die 1ste voorbeeld lewer 'n baie algemene fout ontwikkeling XPaths - ontbreek die feit dat " 'n" is in 'n naamruimte - dus // 'n opbrengs geen wedstryde. (Of erger nog wat ooreenstem met die knope in 'n ander naamruimte!)

Die 3de voorbeeld maak 'n ander fout in begrip - wat die voorvoegsel teks is semanties beduidend. Wanneer die ontleding van dokumente met XPath kan ek enige voorvoegsel Ek hou vir wat ooreenstem met so lank as wat dit is uri wedstryde dié van die dokument verklaar.

Dink aan hulle as vanne vir tipe element. As jy het twee vriende, beide Bob genoem, en jy praat oor een van hulle, dalk iemand vra wat Bob jy praat. Net sê "Bob" is nie baie behulpsaam, so jy sê "Bob Smith", of "Bob Jones".

Dit is dieselfde met tipes element. Soms is 'n kort naam is nie genoeg nie, want verskillende mense dieselfde naam kan kies. So jy sluit 'n URI as 'n "Van", om te onderskei tussen die verskillende Bobs daar buite.

XML is 'n super-taal, wat beteken dat dit die basis vir enige XML-gebaseerde taal (maak sin, reg?). Dink aan XML as 'n pen wat enige vonnis kan skryf, in enige taal. Dit hang alles af van die skrywer, en verkieslik die taal moet bekend wees aan die leser.

'n XML naamruimte is basies die naam van die taal, amper soos "Engels" of "עברית". Ek help die ontvanger van die XML-dokument om dit te ontleed en die inligting in te onttrek.

Kom ons sê dat ek 'n meubelfabriek en jy het 'n meubelwinkel. jou stoor aansoek en my aanbod aansoek is heeltemal onverwante, maar toe hulle deur XML-boodskappe te kommunikeer, moet die boodskappe verstaanbaar en maklik ontleed deur beide kante wees

Daarom, beide stelsels moet weet die skedule , wat die taal sintaksis definieer en ooreengekom beperkings. Dink maar aan die skema as die woordeboek en grammatika handboek. Die skema is die dokument wat beide stelsels moet weet, dat wie skryf die parsing kode in elke stelsel moet weet, en dit sluit die verklaring van die naamruimte.

Elke naamruimte is aangewys as 'n URI, wat in die meeste gevalle is die plek van die skedule dokument wat dit definieer.

Natuurlik nie elke XML dokument moet 'n naamruimte, veral wanneer dit nie gebruik word om inligting oor te dra na 'n afgeleë stelsel. Byvoorbeeld, wanneer jy afleveringen voorwerpe in XML vir volhard in jou databasis.

Ons gebruik naamruimtes omdat mense xeep wil dieselfde woorde gebruik om verskillende dinge beteken in hul eie private Idaho. Gewoonlik, kan jy bepaal uit konteks wat 'n persoon beteken. In 'n personeel databasis, die XML is personeelrekords. In 'n register voertuig databasis, die XML is voertuig register rekords.

Beide hou 'n tag met die naam "plek", maar die tag beteken verskillende dinge vir elke en bevat verskillende velde.

Nou, dis koel, maar wat as jy nodig het of wil XML stoor van beide in dieselfde databasis? Of, meer interessant, wat indien beide databasisse wil XML stukke slaan uit 'n ander, 'n gemeenskaplike databasis (bv: 'n Rekeninge databasis).

XML name spaces assosieer met elke XML-kode 'n URI, sodanig dat die naamplaatjie self het 'n url in die voorkant van dit, dit is deel van die etiket naam (natuurlik werklike XML dokumente te gebruik 'n snelskrif hoef dit te doen). dis asof die twee plek tags heeltemal anders is vernoem, so daar is geen verwarring - deur versigtig die keuse van die URI, sy maklik om te oortuig dat die tag name gewoond bots wees. As 'n bonus, kan die twee heeltemal verskillende plek tags sluit dinge van die databasis rekeninge, en uitdruklik verklaar dat hulle praat dieselfde ding.

Die ding wat al hierdie nuttige maak is XPath.

Met die bogenoemde, kan jy begin om XPath uitdrukkings wat sê dinge soos skryf: vind my enige accounts:account overdue afdelings oral in hierdie xml. Of:. Vind my enige accounts:warning message items op enige plek in hierdie spesifieke stuk van XML, waar die waarskuwing boodskap is 'n kind node (egter diep) van óf 'n personnel:payment node of 'n vehicle:status node

Dit XPath uitdrukking iewers kan gebruik word in 'n XSLT dokument, wie se werk dit is om die XML te omskep in XHTML of Xpdf, vir vertoning.

Wat is die beloning? Hoekom dit doen? Omdat jy die XML loglêer kan soek, trek uit al die rekeninge agterstallig boodskappe waar hulle verskyn, sonder dat hulle verwar met "boodskap" tags geproduseer deur ander stelsels , omskep 'em na XHTML, en vertoon dit in vet rooi via 'n css tag:. al sonder die skryf van 'n stukkie van die proses-kode

Byvoorbeeld: XML Naamruimtes deur Voorbeeld

In my woorde: As jy 'n paar XML-formaat vir buitelandse maatskappy moet gebruik (byvoorbeeld) en wat jy nodig het in XML dokument 'n paar inligting, wat dieselfde naam het, 'n naamruimte wat jy nodig het. Byvoorbeeld:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

en jy wil saamsmelt sommige data in hierdie dokument, wat 'n gelyknamige het, maar 'n ander sin (so waarde aan), moet jy 'n naamruimte gebruik:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

Natuurlik - jy kan 'n naam van kenmerk verander. Byvoorbeeld om "my_unique_color". Kiem in 'n ander dokument, daar kan wees kenmerk met dieselfde naam weer. So, as jy 'n unieke naamruimte (ons web domein byvoorbeeld), kan jy altyd gebruik dieselfde name van elemente en / of eienskappe withoud enige probleme.

Van die W3 aanbeveling ...

  

XML name spaces bied 'n eenvoudige metode vir kwalifiserende element en skryf name gebruik in Extensible Markup Language dokumente deur hulle te assosieer met naamruimtes word geïdentifiseer deur URI verwysings.

Name word gebruik om name wat jy gebruik in die dokument disambiguate. Dit gee jou ook die vermoë om 'n kort naam bind aan 'n naam ruimte wat dan gebruik kan word om te verwys na 'n afgeleë element of kenmerk. Die naam ruimte self verwys na die plek wat die elemente definieer en eienskappe jy in die dokument gebruik. Daar is 'n baie meer om te weet, maar dit is die hart van dit. Daar is 'n baie meer inligting hier .

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top