标签: xml-validation

Intellij IDEA:如何验证 XML SCHEMA 1

我正在使用 JDK 7 在 IDEA 13.02 中尝试 XML SCHEMA 1.1

这是我从教程中获得的 XML 架构代码。当我在 IntelliJ IDEA 中打开此文件并单击“验证”时,出现以下错误:

cvc-complex-type.2.4.a:发现以元素“openContent”开头的无效内容。'{" http://www.w3.org/2001/XMLSchema ":annotation, " http://www.w3.org/2001/XMLSchema ":simpleContent, " http://www.w3.org 之一/2001/XMLSchema ":complexContent, " http://www.w3.org/2001/XMLSchema ":group, " http://www.w3.org/2001/XMLSchema ":all, " http://www .w3.org/2001/XMLSchema “:选择,” http://www.w3.org/2001/XMLSchema “:序列,” http://www.w3.org/2001/XMLSchema “:属性,” http预计为://www.w3.org/2001/XMLSchema ":attributeGroup, " http://www.w3.org/2001/XMLSchema ":anyAttribute}'。

这是使用 XML Schema 1.1 增强功能的 XSD 文件:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.books.org"
        xmlns:pub="http://www.books.org"
        elementFormDefault="qualified">

    <complexType name="Publication" abstract="true">
        <openContent mode="interleave">
            <any />
        </openContent>
        <sequence>
            <element name="Title" type="string" />
            <element name="Author" type="string" />
            <element name="Date" …
Run Code Online (Sandbox Code Playgroud)

xml xsd intellij-idea xml-validation

5
推荐指数
1
解决办法
1万
查看次数

XSD maxLength 和 minLength 应用于整数

我在找出如何告诉 XSD 字段数据的最小长度必须为 12 位数字和最大长度为 14 位数字时遇到一些麻烦。有没有人知道如何做到这一点,因为minlengthmaxlength只能用于字符串。

<xs:simpleType name="timestamp_vorige_inspectie">
    <xs:restriction base="xs:integer">
        <xs:minLength value="12"/>
    </xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

xml xsd integer xml-validation xsd-validation

5
推荐指数
1
解决办法
1万
查看次数

从另一个 XSD 导入复杂类型

我发现将复杂类型从一个 XSD 文件导入和引用到另一个 XSD 文件时遇到困难。让我用一个例子来说明我的场景

学生.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
    xmlns="xyz"
    elementFormDefault="qualified">

    <xsd:element name="student" type="student" />

    <xsd:complexType name="student">
        <xsd:sequence>
            <xsd:element name="id" type="xsd:string" />
            <xsd:element name="birth-date" type="xsd:date" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

这是另一个 XSD,Teacher.xsd,我想在其中引用 Student.xsd 中的复杂类型 Student

老师.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="xyz"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="xyz"
    xmlns="xyz"
    elementFormDefault="qualified">

    <xsd:import schemaLocation="student.xsd"
        namespace="xyzzz" />

    <xsd:element name="teacher" type="teacher" />

    <xsd:complexType name="teacher">
        <xsd:sequence>
            <xsd:element name="id" type="xsd:string" />
            <xsd:element name="name" type="xsd:string" />

            // TODO - Refer to student from student.xsd

        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

我看过其他 Stack …

xml xsd xml-validation xsd-validation

5
推荐指数
1
解决办法
8920
查看次数

在 XSD 中,如何只允许元素内容中存在空格?

我正在为一个没有内容、只有属性的元素编写 XSD,这看起来相当简单:

  <xs:complexType name="ViewElement">
    <xs:attribute name="Name" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:element name="VIEW" type="ViewElement" minOccurs="0" maxOccurs="unbounded"/>
Run Code Online (Sandbox Code Playgroud)

如果 XML 包含

<VIEW Name='V_UP'></VIEW>
Run Code Online (Sandbox Code Playgroud)

或者

<VIEW Name='V_UP'/>
Run Code Online (Sandbox Code Playgroud)

效果很好。但如果 XML 包含

<VIEW Name='V_UP'>
</VIEW>
Run Code Online (Sandbox Code Playgroud)

我明白了

该元素不能包含空格。内容模型为空。

我想让 XML 的作者能够灵活地以这种方式编写 XML,但我不知道如何允许内容,而只允许空白内容。有什么建议么?

xml xsd xml-validation xsd-validation

5
推荐指数
1
解决办法
2686
查看次数

错误:S4s-elt-character:除“xs:appinfo”和“xs:documentation”之外的架构元素中不允许使用非空白字符

我有这个 xml-Schema:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
        <xs:element name="Fussballmannschaft">
                <xs:complexType>
                        <xs:attribute name="Name" type="xs:string" />
                        <xs:attribute name="Stadt" type="xs:string" />
                        <xs:attribute name="Tabellenplatz" type="xs:string" />
                        <xs:element name="Spieler">
                                <xs:complexType>
                                        <xs:attribute name="SpielerID" type="xs:string" />
                                        <xs:keyref name="I_D" refer="Name" />
                                        <xs:attribute name="Name" type="xs:string" />
                                        <xs:element name="Torwart">
                                                <xs:attribute name="GehealteneElfmeter" type="xs:integer" />
                                                <xs:keyref name="ID_Torwart" refer="SpielerID" />
                                        </xs:element>
                                        <xs:element name="Verteidiger">
                                                <xs:attribute name="GewonneneZweikaempfe" type="xs:integer" />
                                                <xs:keyref name="ID_Verteidiger" refer="SpielerID" />
                                        </xs:element>
                                        <xs:element name="Stuermer">
                                                <xs:attribute name="GeschosseneTore" type="xs:integer" />
                                                <xs:keyref name="ID_Stuermer" refer="SpielerID" />
                                        </xs:element>
                                </xs:complexType>
                        </xs:element>
                </xs:complexType>
        </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

和这个样本:

<Fussballmannschaft Name="BVB">
<Stadt>Dortmund</Stadt>
<Tabellenplatz>3</Tabellenplatz>
    <Spieler …
Run Code Online (Sandbox Code Playgroud)

xml xsd xml-validation xsd-validation

5
推荐指数
3
解决办法
1万
查看次数

使用ASP.NET WebAPI对POST请求进行XML模式验证

我试图找到一个解决方案来验证POST请求中发送的XML数据是否满足给定的自定义XML模式.

如果我使用XmlMediaTypeFormatterASP.NET Web API提供的,我没有可用的架构验证,据我所知.例如:如果我有型号类型......

public class Order
{
    public string Code { get; set; }
    public int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...并在一个POST操作ApiController...

public HttpResponseMessage Post(Order order)
{
    if (ModelState.IsValid)
    {
        // process order...
        // send 200 OK response for example
    }
    else
        // send 400 BadRequest response with ModelState errors in response body
}
Run Code Online (Sandbox Code Playgroud)

...我可以发布以下"错误的"XML数据,但仍然会得到200 OK响应:

User-Agent: Fiddler
Host: localhost:45678
Content-Type: application/xml; charset=utf-8

<Order> <Code>12345</Nonsense> </Order>   // malformed XML
Run Code Online (Sandbox Code Playgroud)

要么:

<Order> <CustomerName>12345</CustomerName> </Order>    // …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc xsd xml-validation asp.net-mvc-4 asp.net-web-api

4
推荐指数
2
解决办法
5615
查看次数

使用相对路径使用DTD或XSD进行本地XML验证?

可以使用文档类型描述(DTD)或XML架构(xsd)定义和验证XML文件,如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<annotation xmlns="http://www.xyz.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.xyz.com
    file:system.xsd" >
Run Code Online (Sandbox Code Playgroud)

要么

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE annotation SYSTEM "http://www.xyz.de/system.dtd">
Run Code Online (Sandbox Code Playgroud)

两种方式都定义了找到DTD或XSD的URL.有没有办法给出相对或本地路径?所以我可以将它们与XML文件一起存储,而不是依赖于服务器?

xml xsd dtd xml-validation xsd-validation

4
推荐指数
1
解决办法
1万
查看次数

如何声明complexType只有一个子元素?

使用XML Schema声明a complexType只有一个子元素时,以下三种方法都实现了目标:

<xs:complexType> <xs:sequence> <xs:element ref="somevalue"/> </xs:sequence> </xs:comlexType>
<xs:complexType> <xs:choice>   <xs:element ref="somevalue"/> </xs:choice>   </xs:comlexType>
<xs:complexType> <xs:all>      <xs:element ref="somevalue"/> </xs:all>      </xs:comlexType>
Run Code Online (Sandbox Code Playgroud)

显然,sequence,choiceall不是必须的,为单独的元件,因为它们应当由用于指示多个元素的顺序.是否有一种更简洁的方式来声明complexType只有一个子元素?(即一个消除使用sequence,all或者choice,某种方式.)

xml xsd xml-validation xsd-validation

4
推荐指数
1
解决办法
3836
查看次数

如何从XML文件引用本地XSD?

我想编写一个简单的XML文件,其中包含位于我计算机上同一本地目录中的自定义xsd文件.我不明白文件开头的必要语法(我已经google了,但XSD教程似乎只关注元素定义而不是xsd:schema).

我的sys_params.xsd开始了:

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<xsd:element     name="shipOrder" type="order"/>
Run Code Online (Sandbox Code Playgroud)

我的sys_params.xml开始了:

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com sys_params.xsd"

<orderperson>John Smith</orderperson>
Run Code Online (Sandbox Code Playgroud)

我的XML在xml上报告此验证错误:

错误架构文档"sys_params.xsd"具有与实例文档" http://www.w3schools.com "中指定的目标命名空间不同的目标命名空间

毫无疑问,我的代码是错误的,但我需要一些帮助来纠正它.

xml xsd xml-validation xsd-validation

4
推荐指数
1
解决办法
7803
查看次数

如何在XSD中将复杂类型重用于多个元素?

我一直无法找到任何有关此的信息,可能是由于我没有掌握术语。我想要做的是为货币创建一个模板元素(已经有),并在两个地方使用两个不同的名称(即currentBalancemaxBalance)使用它。

我当前的模板格式为:

<xsd:element name="currency">
    <xsd:complexType>
        <xsd:simpleContent>
            <xsd:extension base="xsd:double">
                <xsd:attribute ref="currencyCode" />
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)

xml xsd xml-validation xsd-validation

4
推荐指数
1
解决办法
1493
查看次数