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