XML, XSD и XSLT студенческий проект - PullRequest
0 голосов
/ 07 января 2020

Я должен сделать 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 Ответ

0 голосов
/ 07 января 2020

Относительно ошибок:

  1. Ошибка

    Проверка 87, 15 s4s-elt-must-match.1: Содержание 'dana' должен совпадать (аннотация ?, (simpleType | complexType) ?, (уникальный | ключ | keyref) *)). Обнаружена проблема, начиная с: sequence.

    испущено, потому что вы забыли обернуть xs: sequence в xs: complexType. Вы сделали это правильно в следующем xs: element mojehobby.

  2. Затем, также в dana, вы попытались определить xs: complexTypes в последовательности - это недопустимо. Объединение всех элементов в последовательности xs: исправит это.

  3. Ошибка

    Проверка 64, 47 ср c -элемент.3: Элемент ' У autor есть и атрибут type, и дочерний тип anonymous. Только один из них разрешен для элемента.

    просто означает, что вы пытаетесь применить два типа к одному и тому же элементу. Избавься от одного и все будет хорошо. (Здесь: атрибут type)

  4. Ошибка

    Проверка 40, 15 cv c -complex-type.2.4.d: Неверно содержимое было найдено, начиная с элемента 'o_artykule'. На этом этапе не ожидается дочерний элемент.

    действительно происходит, потому что вы забыли включить элемент xs: в качестве дочернего элемента правила 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>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...