【问题标题】:XML Schema validation issuesXML Schema 验证问题
【发布时间】:2014-03-26 17:41:12
【问题描述】:

我正在尝试为这些行编写 XML 架构:

<place id = "1234">
   <placeName lang = "de" type = "std"> SOMENAME <gender> n </gender> </placeName>
</place>

架构如下:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="place">
    <xs:complexType >
     <xs:complexContent>
       <xs:restriction base="xs:anyType"> 

           <xs:sequence>
            <xs:element name= "placeName">
               <xs:complexType>
                 <xs:simpleContent>
                    <xs:extension base="xs:string">

                        <xs:sequence>  
                         <xs:element name= "gender" type= "xs:string"/>

                        </xs:sequence>    
                        <xs:attribute name= "lang" type= "xs:string" />
                        <xs:attribute name= "type" type= "xs:string" />             
                    </xs:extension>

                 </xs:simpleContent>
               </xs:complexType> 
             </xs:element>
           </xs:sequence>
         <xs:attribute name="id" type="xs:string" />
       </xs:restriction>
      </xs:complexContent>
     </xs:complexType>
    </xs:element>   
   </xs:schema>

我继续收到此错误:E [Xerces] s4s-elt-invalid-content.1:“#AnonType_placeNameplace”的内容无效。元素 'sequence' 无效、错位或经常出现。 表示的“序列”是第二个,用于“性别”标签。


在我做了一些改变之后:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="place">
    <xs:complexType >
     <xs:complexContent mixed = "true">
       <xs:extension base="xs:anyType"> 

           <xs:sequence>
            <xs:element name= "placeName">
               <xs:complexType>
                 <xs:complexContent mixed= "true">
                     <xs:extension base="xs:anyType">

                        <xs:sequence>  
                         <xs:element name= "gender" type= "xs:string"/>

                        </xs:sequence>    
                        <xs:attribute name= "lang" type= "xs:string" />
                        <xs:attribute name= "type" type= "xs:string" />             
                    </xs:extension>

                 </xs:complexContent>
               </xs:complexType> 
             </xs:element>
           </xs:sequence>
   <xs:attribute name="id" type="xs:string" />
       </xs:extension>
     </xs:complexContent>
    </xs:complexType>
 </xs:element>   
</xs:schema>

我继续收到此错误:cos-nonambig: placeName 和 WC[##any](或它们替换组中的元素)违反“唯一粒子属性”。在针对此模式进行验证期间,将为这两个粒子创建歧义

【问题讨论】:

  • 问题结束,谢谢大家!我找到了这个神奇的工具:freeformatter.com/xsd-generator.html 我的问题是如果节点(placeName)已经包含属性字符串和子模式字符串,我无法指定“字符串”(SOMENAME)。但是根据上面的 xml-xsd 转换器,我什至不需要指定节点包含文本字符串。太好了!

标签: xml xsd


【解决方案1】:

您不能在simpleContent 中使用sequence,我怀疑您真正想要的是使用complexContent,但将类型设为mixed="true"

【讨论】:

  • 谢谢!我按照您所说的进行了更改,并将“混合”添加到地点的节点。我编辑了这个问题。现在我有另一个错误,但总体上看起来更好 - 现在当我可视化架构时,我的所有节点和属性都存在。
【解决方案2】:

扩展 xs:anyType 不起作用。它的意思是“你可以有任何元素序列,后跟一个地名”。如果没有前瞻,这本质上是无法解析的,因为当您找到一个地名时,您不知道它是“任何元素序列”的一部分,还是最终的地名。

顺便说一句,请不要以这种方式编辑您的问题以将其变成一个完全不同的问题。它使人们无法理解现有的答案。

【讨论】:

  • 如果我输入“xs:string”而不是anyType,我仍然会收到错误,这次是另一个错误:[Xerces] src-ct.1: Complex Type Definition Representation Error for type '#AnonType_place' .使用时,基类型必须是 complexType。 'string' 是一个简单类型。
  • 问题被重新编辑,现在它包含了代码的初始版本
  • 完全不清楚为什么要通过限制或扩展来定义类型。为什么不直接将其定义为“从头开始”?
  • 抱歉,我不太明白你所说的从头算什么意思?我到底应该在我的代码中更改什么?
  • 对不起拉丁文。我的意思是,定义一个只定义它允许包含的元素和属性的类型,而不是试图通过限制或扩展从不同的类型派生它。
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 2012-01-08
  • 2011-06-19
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多