Генерация XSD с использованием LinqToXml - PullRequest
0 голосов
/ 22 января 2009

Кто-нибудь знает, как сгенерировать XSD с помощью LinqToXml? Я не могу найти примеры этого нигде. XSD будет иметь довольно низкий уровень сложности:

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio 6.1.18.0 - FREE Community Edition (http://www.liquid-technologies.com)-->
<xs:schema 
    elementFormDefault="qualified" 
    targetNamespace="http://schemas.xxx.yy/CRM/2009/01/DeadAnimalReport" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Name">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:length value="35" />
        </xs:restriction>
    </xs:simpleType>
    </xs:element>

    <xs:element name="Email" type="xs:string" />

    <xs:element name="Selection">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:length value="15" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

    <xs:element name="DeliveryDate" type="xs:date" />
</xs:schema>

Контекстная конструкция инструментария, позволяющая бизнес-аналитикам генерировать схемы сообщений вместе с некоторыми связанными артефактами, которые выходят за рамки вопроса. Инструмент XSD будет сгенерирован из объектов CLR в объектной модели приложения.

Объекты довольно простые - корневой объект, который содержит достаточно информации для построения пространства имен вместе с набором других объектов, представляющих элементы (тип, имя и т. Д.)

Спасибо

Sean

Ответы [ 3 ]

1 голос
/ 22 января 2009

Почему вы хотите использовать LINQ в этом сценарии? Как выглядят исходные данные?

Не так много информации, но в любом случае:

Вы можете создать свой XSD, используя подобный код:

XNamespace nsXS = "http://www.w3.org/2001/XMLSchema";
XElement root = new XElement(nsXS + "schema",
    new XAttribute("elementFormDefault", "qualified"),
    new XAttribute("targetNamespace", "http://schemas.xxx.yy/CRM/2009/01/DeadAnimalReport"),
    new XElement(nsXS + "element",
        new XElement(nsXS + "simpleType",
            new XElement(nsXS + "restriction",
                new XAttribute("base", "xs:string")),
                new XElement(nsXS + "length", new XAttribute("value", 35)))));

Если у вас есть какие-то объекты, вы можете использовать проекции:

var q =
    new XElement(nsXS + "schema",
                 from s in someObjects
                 select GetXsdDefinition(s)
        );

, где

GetXsdDefinition - это метод, который принимает ваш объект в качестве аргумента и возвращает его определение XSD

0 голосов
/ 22 января 2009

Поскольку вы хотите использовать LinqToXml, я предполагаю, что ваш сценарий заключается в том, что у вас уже есть какой-то Xml и вы хотите, чтобы Xsd использовал его.

LinqToXml на самом деле не имеет ничего общего с Xsd ...

Возможно, вы захотите взглянуть на Xsd Inference tools.

0 голосов
/ 22 января 2009

Существует также LINQ to XSD, возможно, это то, что вы ищете! Вы можете найти его ЗДЕСЬ

...