Можно ли сделать так, чтобы моя XML-схема (XSD) давала мне VS Intellisense с элементами, которые имеют * любое * имя? - PullRequest
1 голос
/ 28 января 2011

Ниже приведен образец XSD и образец XML.XSD написан для XML следующим образом:

<Columns>
    <Column label="etc..."></Column>
</Columns>

Я бы хотел, чтобы XSD разрешал элементы с любым именем вместо просто «Столбец».Что я действительно хочу, так это intellisense для работы в Visual Studio, чтобы я мог ввести любое имя элемента вместо «Столбец» и при этом получать подсказки для различных атрибутов столбца.Это возможно?Я просто искал intellisense.Мне не нужно фактически проверять XML с использованием схемы.

Пример XML:

<?xml version="1.0" encoding="utf-8" ?>
<Columns name="FindPatient" label="Find Patient">
    <Name label="Patient Name" display="yes" order="1"/>
    <MRN label="MRN #" display="yes" order="2"/>
    <BirthDate label="Birth Date" format="shortdate" align="right" display="yes" order="3"/>
    <SSN label="SSN" format="hiddenSsn" display="yes" order="4" notSortable="yes"/>
    <DateOfService label="Date Of Service" format="shortdate" align="right" display="no" order="5"/>
    <AdmitDate label="Admit Date" format="shortdate" align="right" display="no" order="6"/>
    <DischargeDate label="Discharge Date" format="shortdate" align="right" display="no" order="7"/>
    <Address label="Address" display="yes" order="8"/>
    <Facility label="Facility" display="yes" order="9"/>
</Columns>

Пример XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ColumnConfiguration" targetNamespace="http://example.com/columnconfiguration" xmlns="http://example.com/columnconfiguration" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="yesNo">
        <xs:restriction base="xs:string">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="Column">
        <xs:attribute name="label" type="xs:string" use="required"/>
        <xs:attribute name="display" type="yesNo" use="required"/>
        <xs:attribute name="order" type="xs:integer" use="required"/>
        <xs:attribute name="format" type="format" use="optional"/>
        <xs:attribute name="align" type="xs:string" use="optional"/>
        <xs:attribute name="tooltip" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="Columns">
        <xs:sequence>
            <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Columns" type="Columns"/>
</xs:schema>

1 Ответ

1 голос
/ 28 января 2011

заменить

<xs:complexType name="Columns">
    <xs:sequence>
        <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

на

решение: разрешить любой дочерний элемент без указания их

<xs:complexType name="Columns">
    <xs:sequence>
        <xs:any minOccurs="1"/>
    </xs:sequence>
</xs:complexType>

решение 2: разрешить некоторые четко определенные дочерние элементы

<xs:complexType name="Columns">
    <xs:choice minOccurs="1" maxOccurs="unbound">
        <xs:element name="Column" type="Column" minOccurs="1" maxOccurs="unbounded"/>
        <!-- add other xs:element here -->
    </xs:choice>
</xs:complexType>
...