Извлечение схемы из XSD-файла в scala: scalaxb

У меня есть XSD-файл вместе с XML, схема, о которой я не знаю. Можно сказать, что XSD - это схема для настоящего XML, но я не совсем понимаю, как действовать дальше.

Во время поиска я наткнулся на пакет scalaxb, предписанный для выполнения этого требования. Может ли кто-нибудь помочь мне в достижении этого; Я не делал такого рода обработку xsd раньше, так что я немного новичок в этом. Хотя я получил небольшой код для проверки XML из XSD, который выглядел нормально. Но добыча это то, что я застрял сейчас.

Из-за моего ограниченного понимания XSD я не мог различить, какой элемент следует рассматривать как поле схемы, а какой - нет. Ценю любую помощь.

Фрагмент файла XSD:

   <xs:element name="preList">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="nNumber" type="remNum"/>
            <xs:element name="fileName" type="FileName"/>
            <xs:element name="recordCnt" type="RecordCount"/>
            <xs:choice maxOccurs="unbounded">
               <xs:element ref="tfiws"/>
               <xs:element ref="structured"/>
            </xs:choice>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   <xs:element name="tfiws">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="header" minOccurs="0"/>
            <xs:element name="tfMst" type="TFMsg"/>
            <xs:element name="turns" minOccurs="0">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="tDate" type="SDate" minOccurs="0"/>
                     <xs:element name="direction" type="Direction" minOccurs="0"/>
                     <xs:element name="mstAmount" type="MSTAmount" minOccurs="0"/>
                     <xs:element name="minDate" type="EDate" minOccurs="0"/>
                  </xs:sequence>
                  <xs:attributeGroup ref="RequiredAttrs"/>
               </xs:complexType>
                </xs:element>
...and so on.

Код для проверки:

class validate {
  def validateXML(xmlFilePath: String, xsdFilePath: String): Boolean = {
    try{
      val factory: SchemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)

      val schema: Schema = factory.newSchema(new File(xsdFilePath))

      val validator: Validator = schema.newValidator()
      validator.validate(new StreamSource(new File(xmlFilePath)))
      true
    } 
    catch {
      case NonFatal(error) => error.printStackTrace()
      false
    }
  }
}

1 ответ

Я нашел способ обойти scalaxb, Лучшая библиотека для преобразования XSD в классы в scala, Он создает 3 файла из XSD: скала-код с чертами и классами из XSD, scalaxb.scala(что я до сих пор пытаюсь выяснить, почему) и соответствующий файл примера XML. Вот и все. Как только я получил сегрегированные поля в формате класса, было легко создавать схему отныне.

Другие вопросы по тегам