Przy okazji migracji danych z Joggera na Octopress potrzebowałem szybko dostać schemat struktury całego XML’a eksportu, aby się upewnić, czy w XML’u nie czekają na mnie żadne niespodzianki. Są dostępne różne narzędzia, łącznie z tymi online, ale okazało się że szybko da się to wykonać z wykorzystaniem klasy XmlSchemaInference z .NET:

``` c# Pobieranie XSD z XML w C# XmlReader reader = XmlReader.Create(“jogger_eksport.xml”); XmlSchemaSet schemaSet = new XmlSchemaSet(); XmlSchemaInference schema = new XmlSchemaInference();

schemaSet = schema.InferSchema(reader);

using (TextWriter writer = File.CreateText(“jogger_eksport.xsd”)) foreach (XmlSchema s in schemaSet.Schemas()) s.Write(writer); ```

otrzymałem XSD, oczywiście bardzo ogólny, joggerowego eksportu:

<?xml version="1.0" encoding="windows-1250"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="jogger">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="user">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="jid" type="xs:string" />
              <xs:element name="domain" type="xs:string" />
              <xs:element name="alias" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" name="entry">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="date" type="xs:string" />
              <xs:element name="jid" type="xs:string" />
              <xs:element name="level_id" type="xs:unsignedByte" />
              <xs:element name="comment_mode" type="xs:unsignedByte" />
              <xs:element name="subject" type="xs:string" />
              <xs:element name="body" type="xs:string" />
              <xs:element name="tags" type="xs:string" />
              <xs:element name="permalink" type="xs:string" />
              <xs:element name="trackback" type="xs:string" />
              <xs:element maxOccurs="unbounded" name="category" type="xs:string" />
              <xs:element minOccurs="0" maxOccurs="unbounded" name="comment">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="date" type="xs:string" />
                    <xs:element name="nick" type="xs:string" />
                    <xs:element name="nick_url" type="xs:string" />
                    <xs:element name="body" type="xs:string" />
                    <xs:element name="ip" type="xs:string" />
                    <xs:element name="trackback" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>