DataStream: XSD Schema in XML einbetten

Hallo an alle, ich habe eine wahrscheinlich sehr dumme Frage, aber ich konnte es nicht allein schaffen. Es geht um ein XML Dokument, welcher validiert werden muss. Dafür habe ich eine Schema erstellt, aber ich weiss es nicht wie ich in XML sage, dass er dieses Schema zu der Validierung benutzen soll. Es sollte sowas wie bei HTML in head steht. Z.b so wie ich css in html eingebe, aber in XML. Es gibt online Validatoren, aber da mein Datei sehr gross ist, funktioniert es nicht. Und ich will es auch lernen, wie man sowas machen kann. Ich habe gegoogelt und da stand sowas wie targetNamespase, aber ich habe keine Ahnung was für ein URI da stehen muss. Hier ein kleines Beispiel wie mein Code aussieht:

index.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<document>
<title>XYZ</title>
<issuer resource="http://dbpedia.org/resource/XYZ">XYZ</issuer>
<resource>http://google.com</resource>
</document>

index.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="document">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="title" type="xsd:string"/>
              <xsd:element name="issuer" type="xsd:string"/>
                <xsd:complexType>
                  <xsd:simpleContent>
                    <xsd:extension base="xsd:string">
                      <xsd:attribute name="resource" type="xsd:string"/>
                    </xsd:extension>
                  </xsd:simpleContent>
                </xsd:complexType>
              <xsd:element name="resource" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

akzeptierte Antworten

  1. Hallo DataStream,

    probiere es so, das Schema hatte auch noch ein Problem. Ein Zielnamensraum ist hier offenbar nicht nötig. Habe noch den Attribut-Typ xsd:anyURI eingebaut (wäre auch beim Element resource sinnvoll).

    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="index.xsd">
      <document>
        <title>XYZ</title>
        <issuer resource="http://dbpedia.org/resource/XYZ">XYZ</issuer>
        <resource>http://google.com</resource>
      </document>
    </root>
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="root">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="document">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="title" type="xsd:string"/>
                  <xsd:element name="issuer">
                    <xsd:complexType>
                      <xsd:simpleContent>
                        <xsd:extension base="xsd:string">
                          <xsd:attribute name="resource" type="xsd:anyURI"/>
                        </xsd:extension>
                      </xsd:simpleContent>
                    </xsd:complexType>
                  </xsd:element>
                  <xsd:element name="resource" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    
    

    Grüße, Thomas

    1. Hallo Thomas, vielen Dank für dein Antwort.

      Ein Zielnamensraum ist hier offenbar nicht nötig.

      Wann ist den ein Zielraum nötig?

      Habe noch den Attribut-Typ xsd:anyURI eingebaut (wäre auch beim Element resource sinnvoll).

      Wieso wäre es sinnvoll?

      Und ich verstehe nicht wieso es zu dem root Element ein xsi kommt und nicht xsd?

      Grüße

      1. Hallo DataStream,

        Wann ist den ein Zielraum nötig?

        Wenn man einen verwenden möchte, etwa bei der Etablierung eines Standardformates oder zur Verknüpfung unterschiedlicher Dokumenttypen.

        Habe noch den Attribut-Typ xsd:anyURI eingebaut (wäre auch beim Element resource sinnvoll). Wieso wäre es sinnvoll?

        Weil es den gezeigten Webadresseninhalt genauer beschreibt als ein String.

        Und ich verstehe nicht wieso es zu dem root Element ein xsi kommt und nicht xsd?

        xsi steht für XML Schema Instance, ist quasi die Alternative zur <!DOCTYPE …>-Zeile bei DTDs.

        Grüße, Thomas