เริ่มจากใช้ CMD Prompt ของ Visual Studio คือ Developer Command Prompt
เดาว่าน่าจะมีการ set path มาครบถ้วน ซึ่งจะทำให้ใช้งาน utilities ได้ดีกว่า มั้ง


ทีนี้ เราก็สามารถใช้ XSD ในการ convert XSD ไฟล์ ให้กลายเป็น Class file
C:\Program Files\Microsoft Visual Studio\2022\Community>xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.8.3928.0]
Copyright (C) Microsoft Corporation. All rights reserved.
xsd.exe -
Utility to generate schema or class files from given source.
xsd.exe <schema>.xsd /classes|dataset [/e:] [/l:] [/n:] [/o:] [/s] [/uri:]
xsd.exe <assembly>.dll|.exe [/outputdir:] [/type: [...]]
xsd.exe <instance>.xml [/outputdir:]
xsd.exe <schema>.xdr [/outputdir:]
- OPTIONS -
/classes
Generate classes for this schema. Short form is '/c'.
/dataset
Generate sub-classed DataSet for this schema. Short form is '/d'.
/enableLinqDataSet
Generate LINQ-enabled sub-classed Dataset for the schemas provided. Short form is '/eld'.
/element:<element>
Element from schema to process. Short form is '/e:'.
/fields
Generate fields instead of properties. Short form is '/f'.
/order
Generate explicit order identifiers on all particle members.
/enableDataBinding
Implement INotifyPropertyChanged interface on all generated types
to enable data binding. Short form is '/edb'.
/language:<language>
The language to use for the generated code. Choose from 'CS', 'VB', 'JS',
'VJS', 'CPP' or provide a fully-qualified name for a class implementing
System.CodeDom.Compiler.CodeDomProvider. The default language
is 'CS' (CSharp). Short form is '/l:'.
/namespace:<namespace>
The namespace for generated class files. The default namespace
is the global namespace. Short form is '/n:'.
/nologo
Suppresses the banner.
/out:<directoryName>
The output directory to create files in. The default
is the current directory. Short form is '/o:'.
/type:<type>
Type from assembly to generate schema for. Multiple types may be provided.
If no types are provided, then schemas for all types in an assembly
are generated. Short form is '/t:'.
/uri:<uri>
Uri of elements from schema to process. Short form is '/u:'.
- ADVANCED -
/parameters:<file>
Read command-line options from the specified xml file. Short form is '/p:'.
- ARGUMENTS -
<schema>.xsd Name of a schema containing elements to import.
<assembly>.dll|exe Name of an assembly containing types to generate schema for.
<instance>.xml Name of an xml file to infer xsd schema from.
<schema>.xdr Name of an xdr schema to convert to xsd.
Multiple file arguments of the same type may be provided.
C:\Program Files\Microsoft Visual Studio\2022\Community>

และนี่คือ class ที่ได้

ถ้าไฟล์ XSD Basic ล่ะก็ วิธีนี้ดีเลย รวดเร็วมาก
แต่ถ้า XSD มัน Advance มากๆ เราต้องตรวจสอบ แล้วก็แก้ไขไฟล์ที่ได้
ซึ่งก็ค่อนข้างยุ่งยากเลยทีเดียว
ปัญหา #1 การจัดกลุ่ม หรือลำดับ?
ปรกติแล้ว เหมือนว่าไฟล์ที่ได้จากการใช้ XSD-gen สร้างขึ้นมา มันมักจะใช้งาน <xsd:sequence> เป็นหลัก ซึ่ง sequence มันจะคิดว่า Element ที่อยู่ภายในจะต้องเรียงลำดับตามที่กำหนด โดยเราสามารถระบูได้ว่า มันเรียงอย่างไร แต่ละการเรียง มันจะมีโอกาสเกิดได้กี่ครั้ง ซึ่งส่วนนี้ XSD-gen น่าจะต้องทำผิด ไม่มากก็น้อย เพราะ XML file ที่ป้อนให้ XSD-gen ไม่น่าจะครอบคลุมทุก case อยู่แล้ว
ทีนี้ถ้าเราต้องการเปลี่ยน การจัดกลุ่ม หรือจัดลำดับในลักษณะนี้ เราก็ต้องเปลี่ยน keyword นี้หน่อย
ใน XSD มีตัวกำหนดการจัดกลุ่ม (Compositor) อยู่ 3 แบบหลักๆ คือ:
<xsd:sequence>(ลำดับ): Element ลูกทั้งหมด ต้อง ปรากฏตามลำดับที่กำหนดไว้เท่านั้น<xsd:all>(ทั้งหมด): Element ลูกทั้งหมด สามารถ ปรากฏในลำดับใดก็ได้ (สลับกันได้)<xsd:choice>(ตัวเลือก): สามารถมี Element ลูกได้ เพียงตัวเดียว จากรายการที่กำหนด
ซึ่งทั้ง 3 แบบ มันมีข้อจำกัดของมันอยู่

