2016-05-08 14 views
1

Ich brauche Hilfe mit XSL und XML-Schema.
Dies ist XML-Datei:XML, XSL, XML Schema

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="spellstyle.xsl"?> 
<spells xmlns="spels.xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="spellsschema.xsd"> 
<spell category="fire" cooldown="18" manacost="100"> 
    <name>Fire Breath</name> 
    <image id="FireBreath"/> 
    <discription>Some text</discription> 
    <category>Fire</category> 
    <cooldown>18</cooldown> 
    <manacost>100</manacost> 
</spell> 
</spells> 

Dieses XML-Schema ist:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="spells.xml" elementFormDefault="qualified"> 
<xs:element name="spells"> 
<xs:complexType> 
    <xs:sequence> 
     <xs:element name="spell"> 
     <xs:attribute name="category" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:pattern value="fire|water|air|earth"/> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
     <xs:attribute name="cooldown" type="xs:duration" use="required"/> 
     <xs:attribute name="manacost" type="xs:decimal" use="required"/> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="name" type="xs:string"/> 
        <xs:element name="image"/> 
        <xs:element name="discription" type="xs:string"/> 
        <xs:element name="category" type="xs:string"/> 
        <xs:element name="cooldown" type="xs:duration"/> 
        <xs:element name="manacost" type="xs:decimal"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

Dies ist XSL:

<?xml version="1.0" encoding="utf-8"?> 
<!-- DWXMLSource="spells.xml" --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:for-each select="spells/spell"> 
    <xsl:value-of select="discription"/> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet>  

Die Sache ist, wenn ich meine XSL-Datei, XML-Stop aply überhaupt zeigen. Und ich denke mein XML-Schema funktioniert auch nicht richtig. Meine Einschränkungen werden ebenfalls ignoriert.
Was mache ich?

+0

In XML haben Sie 'xmlns =" ​​spels.xml "', in xsd haben Sie 'targetNamespace =" spells.xml "'. Ist es ein Tippfehler? –

+0

Ja ist es. Vergiss es. – stroibot

Antwort

0

xsi:schemaLocation="spellsschema.xsd" ist falsch, Sie müssen ein Paar Namespace-URI und Ort URI in dort: xsi:schemaLocation="spells.xml spellsschema.xsd".

+0

Ich verstehe es nicht. Ich habe das so gemacht, wie du gesagt hast, aber es ignoriert immer noch meine Einschränkungen. Was ich meine ist, wenn ich Attribut '" category "' zum Beispiel entferne, das noch normalerweise zeigt, aber '" category "' ist erforderliches Attribut. Oder wenn ich das Attribut '" cooldown "' was 'xs: duration' ist auf' "Hello World" 'noch immer normal arbeiten lasse. – stroibot

+0

Nun müssen Sie erklären, wie Sie versuchen, Ihr XML gegen das Schema zu validieren, dh welchen validierenden Parser oder Editor Sie verwenden, da die schemabasierte Validierung von vielen XML-Parsern überhaupt nicht unterstützt wird, sicherlich nicht von diesen XML-Parser, die zum Beispiel in Browsern verwendet werden. Und natürlich ist der Tippfehler im Namespace-Namen wichtig, solange die XML-Instanz und das Schema nicht die gleiche Namespace-URI haben, wird jeder validierende Parser sicherlich keinen Grund haben, das Schema zu überprüfen. Beginne damit, deine Frage zu bearbeiten, korrigiere die Probleme und sag uns, welche Software du benutzt, um sie zu validieren. –