marklogic中的xsd <any>不同结果

时间:2016-05-31 11:13:44

标签: xquery marklogic marklogic-8

XML:

<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body xml:lang="en"><div></div></body>
</note>

XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
    </xs:import>
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="heading" type="xs:string"/>
                <xs:element name="body">
                    <xs:complexType mixed="true">
                        <xs:complexContent>
                            <xs:extension base="someType">
                                <xs:attribute ref="xml:lang" use="required">
                                </xs:attribute>
                            </xs:extension>
                        </xs:complexContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="someType" mixed="true">
        <xs:sequence>
            <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/>
        </xs:sequence>  
    </xs:complexType>

</xs:schema>

选中this并且它有效。 但这在Marklogic中不起作用,错误是:

XDMP-VALIDATEMISSINGELT: (err:XQDY0027) validate lax { $node } -- Missing required elements: Expected ((any(skip,!())+),(any(skip,!())+)) at fn:doc("d:/xml.xml")/*:note/*:body using schema "/schemas/xsd.xsd"

我的目的是在正文中强制出现HTML内容,如下所示:

<body xml:lang="en"><div></div></body>

2 个答案:

答案 0 :(得分:1)

似乎MarkLogic架构解析中存在一个错误,其中complexType被标记为“混合”并且还具有扩展名。

如果您正在扩展另一种混合类型,那么第一个'混合'是多余的,这样一切都将按预期工作。

所以你应该尝试使用架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"    targetNamespace="http://www.w3schools.com"    xmlns="http://www.w3schools.com"    elementFormDefault="qualified">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
  </xs:import>
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string"/>
        <xs:element name="from" type="xs:string"/>
        <xs:element name="heading" type="xs:string"/>
        <xs:element name="body">
          <xs:complexType>
            <xs:complexContent>
              <xs:extension base="someType">
                <xs:attribute ref="xml:lang" use="required">
                </xs:attribute>
              </xs:extension>
            </xs:complexContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="someType" mixed="true">
    <xs:sequence>
      <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

答案 1 :(得分:0)

在深入挖掘之前,我只想澄清一些问题 - 你的模式在哪里?

MarkLogic希望模式存在于特定内容数据库配置中引用的模式数据库中。这默认为Schemas数据库。

您是否已将所有引用的Scemas包含在内(通过XML或XSD进入Schemas数据库?)

在此处查看详细信息,包括MarkLogic解析模式的顺序和位置:https://docs.marklogic.com/guide/admin/schemas

最后,在开始探索MarkLogic中的架构使用时,请注意在更改架构时重新启动MarkLogic是个好主意。从技术上讲,您不需要重新启动,但实际上只需要清除一些缓存,但如果可以重新启动,那么这可以让您更快地完成并保持学习曲线。