У меня есть файл XSD (определение схемы XML), для которого требуется список перечисления (ограничение), состоящий из всех классов в заданном (ScoreService.App_Code.Entities
) пространстве имен.
Я использую xsd.exe, автоматизированный в процессе сборки для выполнения задачи создания XSD-файла из рассматриваемых классов, и он правильно считывает их из сборки среды выполнения (MyBaseClass
, MyClassA
, ...), без проблем создавая следующий xsd-файл:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MyBaseClass" nillable="true" type="MyBaseClass" />
<xs:complexType name="MyBaseClass">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Id" type="xs:int" />
</xs:sequence>
</xs:complexType>
<xs:element name="MyClassA" nillable="true" type="MyClassA" />
<xs:complexType name="MyClassA">
<xs:complexContent mixed="false">
<xs:extension base="MyBaseClass" />
</xs:complexContent>
</xs:complexType>
...
</xs:schema>
Но, насколько мне известно, я не смогу использовать это в перечислении xsd. Я предполагаю, что могу что-то сделать с атрибутами класса, чтобы контролировать внешний вид вывода XSD, но большинство атрибутов, которые я пробовал, применимы только к свойствам/членам.
Я хотел бы создать структуру XSD, похожую на:
<xs:simpleType name="ParamTypeRestriction">
<xs:restriction base="xs:string">
<xs:enumeration value="MyBaseClass"></xs:enumeration>
<xs:enumeration value="MyClassA"></xs:enumeration>
...
</xs:restriction>
</xs:simpleType>
Возможно ли это без дальнейшей автоматизации, такой как обработка сгенерированного файла xsd вручную? Если да, то как?
enum ParamTypeRestriction { MyBaseClass, MyClassA, ... }
в коде, что приведет к желаемому xsd, но, возможно, это не то, что вы хотели бы сделать, потому что значения перечисления не имеют ничего общего с классами, за исключением того, что они имеют одинаковые имена. - person Martin   schedule 04.12.2015dir
для создания файла с таким перечислением, но это было бы немного хакерски... - person Martin   schedule 04.12.2015