Heim  >  Artikel  >  Backend-Entwicklung  >  Spezifisches Beispiel für die Codefreigabe von XML- und Schema-Namespaces

Spezifisches Beispiel für die Codefreigabe von XML- und Schema-Namespaces

黄舟
黄舟Original
2017-04-01 13:55:431902Durchsuche

Das oben erwähnte XML und Schemas Einige verwandte Inhalte des Namespace werden im Detail vorgestellt. Lassen Sie uns anhand von Beispielen mehr darüber erfahren:

Beispiel 1: Wichtige Punkte um Verwandte Konzepte von Namespaces zu verstehen

Das folgende Beispiel ist eine XML-Schemadatei mit dem Namen „note.xsd“

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="to" type="xs:string"/>
           <xsd:element name="from" type="xs:string"/>
           <xsd:element name="heading" type="xs:string"/>
           <xsd:element name="body" type="xs:string"/>
        </xsd:sequence>
      </xsd:complexType>
</xsd:element>
</xsd:schema>

Das XML-Dokument unten und oben Es ist im Zusammenhang mit dem im Artikel angegebenen XML-Schema mit dem Namen „note.xml“ und die folgende Diskussion konzentriert sich auf diese beiden Dokumente.               Die Elemente und Datentypen , die in diesem Schema verwendet werden, stammen aus dem Namespace „

www.w3.org/2001/XMLSchema

“ (es heißt auch, dass sie aus „www“ stammen). .w3.org/2001/XMLSchema"Namespace-Elemente und Datentypen müssen mit "xsd: " Präfix. Als Namespace-Bezeichner (in einer Deklaration als Präfix für ein Element oder Attribut ) können Sie es auch ohne xsd oder xsi verwenden. Dieses xmlns-Attribut enthält grundlegende XML-Schemaelemente wie Element, Attribut, complexType, group, simpleType usw.

<?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don&#39;t forget me this weekend!</body>
</note>
Für jedes XML-Schemadefinitionsdokument (XSD) gibt es ein Schemaelement der obersten Ebene (XSD). Die Definition muss diesen Namespace enthalten :

www.w3.org/2001/XMLSchema
d. h. dieser Namespace ist der durch die XML-Schema-Spezifikation definierte Standard-Namespace – alle XML-Schema-Elemente müssen zu diesem Namespace gehören > Dieses Fragment: targetNamespace=" www.w3schools.com“ weist auf dieses Schema hin Die durch (note, to, from, heading, body) definierten Elemente stammen aus dem Namespace „www.w3schools.com“. Das Attribut targetNamespace stellt den URI des Namespace dar, der dem Schema entspricht. Das heißt, der Namespace muss in anderen -Dokumenten (einschließlich seines eigenen Dokuments) deklariert werden, die auf das -Schema verweisen, und sein URI sollte der Attributwert von targetNamespace sein. Hier müssen wir beispielsweise den durch note.xsd definierten erweiterten Datentyp verwenden (Hinweis, to, from, heading, body), daher wird auch der Namespace xmlns="www.w3schools.com" deklariert. Und der Namespace ist der Standard-Namespace (kein Präfix). Das Attribut „targetNamespace“ deklariert einen XML-Namespace für alle neuen Typen, die explizit im Schema erstellt werden.

Sehen wir uns an, wie der Anfang des durch dieses Schema angegebenen XML-Dokuments note.xml aussehen wird:

<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">

     其中缺省名称空间声明xmlns="www.w3schools.com"就是和刚刚声明的XML Schema的名称空间相结合来规定该XML文档。(即该文档用到了此名称空间中定义的数据) xmlns:xsi="www.w3.org/2001/XMLSchema-instance" 是任何XML实例文档固有的XML模式实例名称空间,它由XML模式规范定义。而xsi:schemaLocation="www.w3schools.com note.xsd"则规定了该名称空间所对应的schema的位置,即在相同路径的note.xsd文件。

     例二:重点理解Schema文档使用自身定义类型

     xsd文件中定义了一个targetNameSpace后,其内部定义的元素,属性,类型等都属于该targetNameSpace,其自身或外部xsd文件使用这些元素,属性等都必须从定义的targetNameSpace中找。修改一下note.xsd,去除默认名称空间的声明,并添加一个复杂类型:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>

        上述代码中,复杂类型stu是找不到的,因为你定义了一个名称空间"www.w3schools.com",该复杂类型存在于"www.w3schools.com"中,因此应该修改代码如下:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns:student="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="student:stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>

        若自身并不使用重用组件,仅供外部使用的话,则只定义targetNameSpace就可以,不用指定别名。
        通过上面的例子,我们可以很深刻的理解targetNameSpace。targetNamespace定义了Schema定义的新元素与属性的名称空间。而"www.w3.org/2001/XMLSchema"名称空间则定义了element, attribute, complexType, group, simpleType等元素。

    理解了上面的两个例子,Schema的命名空间的内容应该就明了了。



Das obige ist der detaillierte Inhalt vonSpezifisches Beispiel für die Codefreigabe von XML- und Schema-Namespaces. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn