Как вы пишете XML-схему для этого XML? - PullRequest
0 голосов
/ 19 марта 2011

Как вы пишете XSD для этого строфа XML?

<sales>
    <orders>
        <order type="online">1234</order>
        <order type="online">2334</order>
        <order type="retail">7834</order>
        <order type="retail">5654</order>
    </orders>
</sales>

Ответы [ 3 ]

1 голос
/ 19 марта 2011

С одной стороны, вы можете получить различные инструменты для генерации общей схемы из вашего XML, но никто не будет точно знать, какие ограничения важны. Например, важно ли ограничить «тип» в вашем примере только «онлайн» или «в розницу»? Чтобы все было правильно, вам нужно написать XML-схему самостоятельно.

Хотя XML-схема в целом сложна, вы можете получить основы, прочитав Учебник по XML-схеме или одно из множества учебных пособий.

1 голос
/ 20 марта 2011

Существует бесконечное количество схем, для которых ваш XML-документ является допустимым экземпляром.Чтобы написать схему, нам нужно больше узнать о множестве допустимых экземпляров.Например, являются ли «онлайн» и «розничная торговля» единственными допустимыми значениями атрибута типа или есть другие допустимые значения?А как насчет контента (1234 и т. Д.) - это всегда четыре цифры или это просто совпадение, что все значения, которые вы нам показали, ровно четыре цифры?

Есть ряд инструментов, которые довольно неплохо справляются.работа по созданию схемы из одного экземпляра, но они должны догадываться об ответах на вопросы, такие как приведенные выше.

1 голос
/ 19 марта 2011

Поиск файлов программы c: \ для xsd.exe ( Инструмент определения схемы Xml ).Затем используйте его как xsd.exe c: \ your.xml .Вот вывод для вашего xml-записки:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="sales" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="sales" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="orders">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="order" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="order_Text" msdata:Ordinal="1">
                    <xs:extension base="xs:unsignedShort">
                      <xs:attribute name="type" type="xs:string" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

... конечно, это может быть упрощено, если вы немного понимаете элементы.

<xs:element name="sales">
  <xs:complexType>      
    <xs:sequence>
      <xs:element name="orders">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="order" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="type" type="xs:string"/>                        
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...