为给定的XML文件创建XSD的简单方法

By simon at 2018-02-28 • 0人收藏 • 11人看过

我想编写一个XSD文件来验证以下XML xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<eventos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="eventos31.xsd">
<evento tipo="musical">
    <compania>
        <nombre_compania>La Joven Compañia</nombre_compania>
        <interpretes>
            <interprete codint="I1"> Javier   Ariano</interprete>
            <interprete codint="I2"> Alejandro Chaparro</interprete>
            <interprete codint="I3"> Jesús Lavi</interprete>
            <interprete codint="I4"> Rosa Martí</interprete>
            <interprete codint="I5"> Laura Montesinos</interprete>
            <interprete codint="I6"> Maria Romero</interprete>
            <interprete codint="I7"> Ález Villazán</interprete>
            <interprete codint="I8"> Jorge Yumar</interprete>
        </interpretes>
        <director-a> José Luis Arellano García</director-a>
        <web_compania dirweb= "www.lajovencompania.com"/>
    </compania> 
    <nombre_espectaculo>Priscila, reina del desierto</nombre_espectaculo>
    <cuando>
        <fecha dia="22" mes="febrero" anio="2018"/>
        <hora inicio="20:30" fin="23:00"/>
    </cuando>
    <descripcion>Narra las aventuras de tres artistas drag</descripcion>
    <precio>55€</precio>
    <duracion>2h 30min</duracion>
</evento>
<evento tipo="magia">
    <mago>
        <nombre_mago> Jorge Blass</nombre_mago>
        <mail dirmail= "naka@7rojo.com"/>
        <shows>
            <show codshow="C1"> Palabra de Mago</show>
            <show codshow="C2"> Arte de la Magia</show>
            <show codshow="C3"> Birlibirloque</show>
        </shows>
    </mago> 
    <nombre_espectaculo>Palabra de mago</nombre_espectaculo>
    <cuando>
        <fecha dia="02" mes="Junio" anio="2018"/>
        <hora inicio="19:00" fin="20:30"/>
    </cuando>
    <descripcion>Trucos de magia de Jorge Blas</descripcion>
    <precio>18€</precio>
    <duracion>1h 30min</duracion>
</evento>
<evento tipo="humor">
    <comico>
        <nombre_comico> Dani Mateo</nombre_comico>
        <ciudad> Granollers</ciudad>
        <edad> 38</edad>
        <redes_sociales>
            <blog> danimateo.blogspot.com</blog>
            <twitter> @DaniMateoAgain</twitter>
            <facebook> @dani.mateo</facebook>
        </redes_sociales>
    </comico>   
    <nombre_espectaculo>Dani Mateo,10 aniversario</nombre_espectaculo>
    <cuando>
        <fecha dia="09" mes="Junio" anio="2018"/>
        <hora inicio="20:30" fin="22:00"/>
    </cuando>
    <precio>21€</precio>
    <duracion>1h 30min</duracion>
</evento>
这是我到目前为止所尝试的
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="eventos">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="evento" maxOccurs="unbounded">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="compania">
                <xs:complexType>
                    <xs:sequence>
                    <xs:element name="nombre_compania" type="xs:string" />
                    <xs:element name="interpretes">
                        <xs:complexType>
                        <xs:sequence>
                            <xs:element name="interprete" maxOccurs="unbounded"/>   
                        </xs:sequence>
                            <xs:attribute name="codint" type="xs:string" use="required"/>
                        </xs:complexType>
                    </xs:element>   
                    <xs:element name="director-a" type="xs:string" />
                    <xs:element name="web_compania"/>   
                    </xs:sequence>
                    <xs:attribute name="dirweb" type="xs:string"/>
                </xs:complexType>
            </xs:element>   
            <xs:element name="nombre_espectaculo" type="xs:string" maxOccurs="unbounded"/>  
            <xs:element name="cuando">
                        <xs:complexType>
                            <xs:sequence>
                            <xs:element name="fecha"/>
                            <xs:element name="hora"/>
                            </xs:sequence>
                            <xs:attribute name="dia" type="xs:integer"/>
                            <xs:attribute name="mes" type="xs:string"/>
                            <xs:attribute name="anio" type="xs:integer"/>
                            <xs:attribute name="inicio" type="xs:string"/>
                            <xs:attribute name="fin" type="xs:string"/>
                        </xs:complexType>
            </xs:element>   
            <xs:element name="descripcion" type="xs:string"/>
            <xs:element name="precio" type="xs:string"/>
            <xs:element name="duracion" type="xs:string"/>
            <xs:element name="mago" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nombre_mago" type="xs:string"/>
                        <xs:element name="mail"/>   
                        <xs:element name="shows">
                            <xs:complexType>
                            <xs:sequence>
                            <xs:element name="show" type="xs:string"/>  
                            </xs:sequence>
                            <xs:attribute name="codshow" type="xs:string" use="required"/>
                            </xs:complexType>
                        </xs:element>   
                    </xs:sequence>
                    <xs:attribute name="dirmail" type="xs:string"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="comico" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nombre_comico" type="xs:string"/>
                        <xs:element name="ciudad" type="xs:string"/>
                        <xs:element name="edad" type="xs:integer"/>
                        <xs:element name="redes_sociales">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="blog" type="xs:string"/>
                                    <xs:element name="twitter" type="xs:string"/>
                                    <xs:element name="facebook" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>   
                    </xs:sequence>
                </xs:complexType>
            </xs:element>   
        </xs:sequence>
        <xs:attribute name="tipo" type="xs:string"/>
    </xs:complexType>   
    </xs:element>
    </xs:sequence>
    </xs:complexType>   
</xs:element>   
使用xmllint xmllint -schema eventos31.xsd 48985313.xml 我明白了
48985313.xml:6: element interpretes: Schemas validity error : Element 'interpretes': The attribute 'codint' is required but missing.
48985313.xml:29: element mago: Schemas validity error : Element 'mago': This element is not expected. Expected is ( compania ).
48985313.xml:48: element comico: Schemas validity error : Element 'comico': This element is not expected. Expected is ( compania ).
48985313.xml fails to validate
获取现有XML文件的XSD的最简单方法是什么?

3 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

将您的文档加载到* Eclipse 中,并安装了“ Eclipse Xml编辑器 和工具“我可以看出你有各种各样的错误或者在你的xml文档中。您 应该逐行通过错误,并问问自己在哪里纠正 它 - 在XSD或中XML文件。   1. *第6行: cvc-complex-type.4:属性'codint'必须出现在元素“解释”中。

这可以修复通过将codint属性添加到标签中 XML文件。它也可以修复我的XSD定义 一个ccordingly。   2. 第29行: cvc-complex-type.2.4.a:发现无效内容以元素“mago”开头。 '{compania}之一' 是期待。 ...继续...尝试理解错误...尝试修复XSD或XML ...如果什么都不起作用,请提问堆栈溢出   3. 第32行 cvc-type.3.1.1:元素'show'是一个简单的类型,所以它不能有属性,除了tho其名称空间名称与'http://www.w3.org/2001/XMLSchema-instance'相同并且[本地名称]是'type','无','schemaLocation'或'noNamespaceSchemaLocation'。但是,发现了'codshow'这个属性。   4. 第33行 Element'sh如何'是一个简单的类型,所以它不能拥有属性...... 5. 第34行元素'show'是一个简单类型,所以它不能拥有属性butes ...   6. 第35行元素'show'是一个简单类型,所以它不能具有属性...   7. 第48行内容无效发现从元素'comico'开始。预计会有'{compania}'之一。

2018-02-28   #2

将您的文档加载到* Eclipse 中,并安装了“ Eclipse Xml编辑器 和工具“我可以看出你有各种各样的错误或者在你的xml文档中。您 应该逐行通过错误,并问问自己在哪里纠正 它 - 在XSD或中XML文件。   1. *第6行: cvc-complex-type.4:属性'codint'必须出现在元素“解释”中。

这可以修复通过将codint属性添加到标签中 XML文件。它也可以修复我的XSD定义 一个ccordingly。   2. 第29行: cvc-complex-type.2.4.a:发现无效内容以元素“mago”开头。 '{compania}之一' 是期待。 ...继续...尝试理解错误...尝试修复XSD或XML ...如果什么都不起作用,请提问堆栈溢出   3. 第32行 cvc-type.3.1.1:元素'show'是一个简单的类型,所以它不能有属性,除了tho其名称空间名称与'http://www.w3.org/2001/XMLSchema-instance'相同并且[本地名称]是'type','无','schemaLocation'或'noNamespaceSchemaLocation'。但是,发现了'codshow'这个属性。   4. 第33行 Element'sh如何'是一个简单的类型,所以它不能拥有属性...... 5. 第34行元素'show'是一个简单类型,所以它不能拥有属性butes ...   6. 第35行元素'show'是一个简单类型,所以它不能具有属性...   7. 第48行内容无效发现从元素'comico'开始。预计会有'{compania}'之一。

2018-02-28   #3

如果您不想获取XML Schema的基本知识并通过修复XSD 你可以使用像[trang]这样的XSD生成器(https:// github.com/relaxng/jing- trang)为你生成一个XSD。有时这个程序会提供一些 提示如何修复original XSD。 trang 48985313.xml eventos31.xsd

  <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xs:import namespace="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="xsi.xsd"/>
    <xs:element name="eventos">
      <xs:complexType>
        <xs:sequence>
          <xs:element maxOccurs="unbounded" ref="evento"/>
        </xs:sequence>
        <xs:attribute ref="xsi:noNamespaceSchemaLocation" use="required"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="evento">
      <xs:complexType>
        <xs:sequence>
          <xs:choice>
            <xs:element ref="comico"/>
            <xs:element ref="compania"/>
            <xs:element ref="mago"/>
          </xs:choice>
          <xs:element ref="nombre_espectaculo"/>
          <xs:element ref="cuando"/>
          <xs:element minOccurs="0" ref="descripcion"/>
          <xs:element ref="precio"/>
          <xs:element ref="duracion"/>
        </xs:sequence>
        <xs:attribute name="tipo" use="required" type="xs:NCName"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="comico">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="nombre_comico"/>
          <xs:element ref="ciudad"/>
          <xs:element ref="edad"/>
          <xs:element ref="redes_sociales"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="nombre_comico" type="xs:string"/>
    <xs:element name="ciudad" type="xs:NCName"/>
    <xs:element name="edad" type="xs:integer"/>
    <xs:element name="redes_sociales">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="blog"/>
          <xs:element ref="twitter"/>
          <xs:element ref="facebook"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="blog" type="xs:NCName"/>
    <xs:element name="twitter" type="xs:string"/>
    <xs:element name="facebook" type="xs:string"/>
    <xs:element name="compania">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="nombre_compania"/>
          <xs:element ref="interpretes"/>
          <xs:element ref="director-a"/>
          <xs:element ref="web_compania"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="nombre_compania" type="xs:string"/>
    <xs:element name="interpretes">
      <xs:complexType>
        <xs:sequence>
          <xs:element maxOccurs="unbounded" ref="interprete"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="interprete">
      <xs:complexType mixed="true">
        <xs:attribute name="codint" use="required" type="xs:NCName"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="director-a" type="xs:string"/>
    <xs:element name="web_compania">
      <xs:complexType>
        <xs:attribute name="dirweb" use="required" type="xs:NCName"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="mago">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="nombre_mago"/>
          <xs:element ref="mail"/>
          <xs:element ref="shows"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="nombre_mago" type="xs:string"/>
    <xs:element name="mail">
      <xs:complexType>
        <xs:attribute name="dirmail" use="required"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="shows">
      <xs:complexType>
        <xs:sequence>
          <xs:element maxOccurs="unbounded" ref="show"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="show">
      <xs:complexType mixed="true">
        <xs:attribute name="codshow" use="required" type="xs:NCName"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="nombre_espectaculo" type="xs:string"/>
    <xs:element name="cuando">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="fecha"/>
          <xs:element ref="hora"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="fecha">
      <xs:complexType>
        <xs:attribute name="anio" use="required" type="xs:integer"/>
        <xs:attribute name="dia" use="required" type="xs:integer"/>
        <xs:attribute name="mes" use="required" type="xs:NCName"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="hora">
      <xs:complexType>
        <xs:attribute name="fin" use="required" type="xs:NMTOKEN"/>
        <xs:attribute name="inicio" use="required" type="xs:NMTOKEN"/>
      </xs:complexType>
    </xs:element>
    <xs:element name="descripcion" type="xs:string"/>
    <xs:element name="precio" type="xs:string"/>
    <xs:element name="duracion" type="xs:string"/>
  </xs:schema>

登录后方可回帖

Loading...