Nach einigen gründlichen Tests mit xmllint habe ich hier die eindeutige Erklärung gefunden. Betrachten Sie das folgende Schema:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yyyzzz.com"
xmlns:p="http://abced.com"
xmlns:q="http://pqr.com"
xmlns="http://yyyzzz.com">
<xsd:element name="recipe" type="recipeType" />
<xsd:complexType name="recipeType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="desc" type="xsd:string" />
<xsd:attribute name="archetype" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
Das obige Schema gilt für das folgende Dokument:
<?xml version="1.0"?>
<recipe xmlns="http://yyyzzz.com">
Deciphering the purpose of targetNamespace
</recipe>
Der Grund dafür ist, dass xmlns = "http://yyyzzz.com" automatisch an das Element gebunden wird, das auch vom Schema definiert wird! Das heißt, es wird auch an das Rezeptrezept- Element gebunden .
Mit demselben XML-Dokument, jedoch mit leicht geändertem Schema wie unten, wird nun auch der Unterschied überprüft und genauer betrachtet:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
version="1.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yyyzzz.com"
xmlns="http://eigenfield.aparicio.com"
xmlns:EGboy="http://yyyzzz.com">
<xsd:element name="recipe" type="EGboy:recipeType" />
<xsd:complexType name="recipeType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="desc" type="xsd:string" />
<xsd:attribute name="archetype" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
Ignorieren , wenn die anderen Xmlns verschwunden, sondern genau hinsehen , um type = „EGboy: recipeType“ . Wir können nicht vertrauen mehr auf dem xmlns weil es daher anderen Wert hat, wir das Präfix setzen müssen EGboy vor recipeType .
Das XML - Dokument nicht einmal von der Pflege EGboy Präfix dieses Präfix nur für das Schema auf die richtigen Bezug zu nehmen Xmlns im Fall gibt es viele.