XML、XSD 和 XSLT 学生的项目

Posted

技术标签:

【中文标题】XML、XSD 和 XSLT 学生的项目【英文标题】:XML, XSD and XSLT student's project 【发布时间】:2020-04-25 04:53:02 【问题描述】:

我必须为我的大学项目制作 xml、xml 架构和 xslt。我从验证器收到 3 个错误。你能帮助我吗? 那是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="transform.xslt"?> 
<mojehobby>
        <naglowek>
            <naglowek_glowny>
                Moje hobby
            </naglowek_glowny>

            <podnaglowek>
                muzyka 
            </podnaglowek>
        </naglowek>
        <images>
            <zdjecie src="AP4.jpg" href="https://www.facebook.com/AfterPeppers/"></zdjecie>
            <zdjecie src="COSTER1.jpg" href="https://www.facebook.com/Coster-433619970040235/"></zdjecie>
            <zdjecie src="TSF2.jpg" href="https://www.facebook.com/The-Second-Floor-200535016957502/"></zdjecie>                
        </images>
        <dana>
            <artykul>
                <tytul>
                    Historia
                </tytul>
                <naglowek_artykulu>
                    O muzyce i nauce
                </naglowek_artykulu>
                <tresc_artykulu>     
                <tresc>
                  Some text
                </tresc>
                </tresc_artykulu>
            </artykul>
        </dana>
        <o_artykule>
            <autor>
            <imie_autora>Krzysztof</imie_autora>
            <nazwisko_autora>Stencel</nazwisko_autora>
            </autor>
            <data>15.12.2019</data>
        </o_artykule>
        <stopka href="">
        <tresc></tresc>
        <data></data>
        </stopka>
</mojehobby>

那是 XSD:

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="krotki_string">
    <xs:restriction base="xs:string">
        <xs:maxLength value="30"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="article">
    <xs:restriction base="xs:string">
        <xs:minLength value="400"/>
    </xs:restriction>
</xs:simpleType>    

<xs:simpleType name="imie">
    <xs:restriction base="xs:string">
        <xs:maxLength value="25"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="nazwisko">
    <xs:restriction base="xs:string">
        <xs:maxLength value="50"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="data">
    <xs:restriction base="xs:string">
        <xs:maxLength value="10"/>
    </xs:restriction>
</xs:simpleType>
<xs:complexType name="tresc">

</xs:complexType>

<xs:complexType name="image">
    <xs:attribute name="src"/>
    <xs:attribute ref="href"/>
</xs:complexType>   

<xs:complexType name="images">
    <xs:sequence>
        <xs:element name="zdjecie" type="image" maxOccurs="3"/>
    </xs:sequence>
</xs:complexType>   

<xs:complexType name="tresc_artykulu">
    <xs:sequence>
        <xs:element name="tresc" type="article" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="footer">
    <xs:sequence>
        <xs:element name="tresc" type="krotki_string"/>
        <xs:element name="data" type="data"/>
    </xs:sequence>  
</xs:complexType>


<xs:element name="o_artykule">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="autor" type="simpleType">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="imie_autora" type="imie"/>
                        <xs:element name="nazwisko_autora" type="nazwisko"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="data" type="data"/>
        </xs:sequence>  
    </xs:complexType>   
</xs:element>

<xs:element name="naglowek">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="naglowek_glowny" type="krotki_string"/>
            <xs:element name="podnaglowek" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>   

<xs:element name="dana">
    <xs:sequence>
        <xs:complexType name="artykul">
            <xs:sequence>
                <xs:element name="tytul" type="krotki_string"/>
                <xs:element name="naglowek_artykulu" type="krotki_string"/>             
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="tresc_artykulu">
            <xs:sequence>
                <xs:element name="tresc" type="article" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>   
    </xs:sequence>
</xs:element>
<xs:element name="mojehobby">
<xs:complexType>
    <xs:sequence>
        <xs:element ref="naglowek"/>
        <xs:element name="images" type="images"/>
        <xs:element ref="dana"/>
    </xs:sequence>
</xs:complexType>   
</xs:element>

<xs:attribute name="href"/>
</xs:schema>    

还有错误:

Validation  87, 15  s4s-elt-must-match.1: The content of 'dana' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: sequence.
 Validation     64, 47  src-element.3: Element 'autor' has both a 'type' attribute and a 'anonymous type' child. Only one of these is allowed for an element.
 Validation     40, 15  cvc-complex-type.2.4.d: Invalid content was found starting with element 'o_artykule'. No child element is expected at this point.

【问题讨论】:

【参考方案1】:

关于错误:

    错误

    Validation 87, 15 s4s-elt-must-match.1: 'dana' 的内容必须匹配 (annotation?, (simpleType | complexType)?, (unique | key | keyref)*))。发现问题开始于:序列。

    已发出,因为您忘记将 xs:sequence 包装在 xs:complexType 中。你在下面的 xs:element mojehobby 中做对了。

    接下来,同样在dana 中,您尝试按顺序定义 xs:complexTypes - 这是不允许的。合并 xs:sequence 中的所有元素将修复它。

    错误

    验证 64、47 src-element.3:元素“auto”同时具有“type”属性和“anonymous type”子级。一个元素只允许使用其中一个。

    仅指您尝试将两种类型应用于同一元素的事实。摆脱一个,你会没事的。 (这里:type 属性)

    错误

    验证 40、15 cvc-complex-type.2.4.d:发现以元素“o_artykule”开头的无效内容。此时不需要子元素。

    确实发生了,因为您忘记将 xs:element 作为mojehobby 规则的子元素包含在内。这也适用于 stopka 及其子代。

我还在 XSD 文件中添加了一些提示。还是会报错,因为内容无效:几个节点的内容超出了字符串类型中定义的xs:maxLength限制。 但是,这是经过调试的工作版本:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="krotki_string">
        <xs:restriction base="xs:string">
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="article">
        <xs:restriction base="xs:string">
            <xs:minLength value="400"/>
        </xs:restriction>
    </xs:simpleType>


    <xs:simpleType name="imie">
        <xs:restriction base="xs:string">
            <xs:maxLength value="25"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="nazwisko">
        <xs:restriction base="xs:string">
            <xs:maxLength value="50"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="data">
        <xs:restriction base="xs:string">
            <xs:maxLength value="10"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="tresc">

    </xs:complexType>

    <xs:complexType name="image">
        <xs:attribute name="src"/>
        <xs:attribute ref="href"/>
    </xs:complexType>


    <xs:complexType name="images">
        <xs:sequence>
            <xs:element name="zdjecie" type="image" maxOccurs="3"/>
        </xs:sequence>
    </xs:complexType>


    <xs:complexType name="tresc_artykulu">
        <xs:sequence>
            <xs:element name="tresc" type="article" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="footer">
        <xs:sequence>
            <xs:element name="tresc" type="krotki_string"/>
            <xs:element name="data" type="data"/>
        </xs:sequence>
        <xs:attribute ref="href"/>
        <!-- Note that attribute definitions have to appear at the end of the complex type - here referencing the attribute at the end of the file -->
    </xs:complexType>

    <xs:element name="o_artykule">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="autor">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="imie_autora" type="imie"/>
                            <xs:element name="nazwisko_autora" type="nazwisko"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="data" type="data"/>
            </xs:sequence>            
        </xs:complexType>        
    </xs:element>

    <xs:element name="naglowek">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="naglowek_glowny" type="krotki_string"/>
                <xs:element name="podnaglowek" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="dana">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="artykul">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="tytul" type="krotki_string"/>
                            <xs:element name="naglowek_artykulu" type="krotki_string"/>

                            <xs:element name="tresc_artykulu" type="tresc_artykulu" maxOccurs="1"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>        
    </xs:element>

    <xs:element name="mojehobby">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="naglowek"/>
                <xs:element name="images" type="images"/>
                <xs:element ref="dana"/>
                <xs:element ref="o_artykule"/>            <!-- Added element for reference type -->
                <xs:element name="stopka" type="footer"/> <!-- Added element for defined type -->
            </xs:sequence>
        </xs:complexType>        
    </xs:element>

    <xs:attribute name="href"/>
</xs:schema>

希望这会有所帮助。

【讨论】:

以上是关于XML、XSD 和 XSLT 学生的项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSD、目录解析器和用于 XSLT 的 JAXP DOM 验证 XML

如何使用 XSLT 显示 XSD 验证的 XML

使用 xslt 按升序对 xsd 格式的 XML 进行排序

根据 XSD 兼容 XML 输入 -> XSD 兼容 XML 输出的 1:1 映射从 XSD 生成 XSLT 文件

基于 XSD 变化的动态 XSLT 生成

不在运动列表中的所有学生的 xslt 输出