2013-08-20 5 views
0

У меня есть этот XSDключ, KeyRef тег в XSD

<xs:schema version="1.0" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="foo"> 
    <xs:complexType> 
     <xs:choice> 
     <xs:element name="bar" 
        minOccurs="0" 
        maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="id" 
          use="required" 
          type="xs:string" /> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="batz" 
        minOccurs="0" 
        maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="idref" 
          use="required" 
          type="xs:string" /> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    <xs:key name="ID"> 
     <xs:selector xpath="./bar" /> 
     <xs:field xpath="@id" /> 
    </xs:key> 
    <xs:keyref name="IDREF" refer="ID"> 
     <xs:selector xpath="./batz" /> 
     <xs:field xpath="@idref" /> 
    </xs:keyref> 
    </xs:element> 
</xs:schema> 

и у меня есть эти два XML, которые используют этот XSD как validaion:
первый

<?xml version="1.0" encoding="UTF-8"?> 
<foo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xsi:noNamespaceSchemaLocation= 
     'file:/home/tareq/NetBeansProjects/HTML5Application/public_html/refTest.xsd'> 
    <bar id="1"/> 
    <bar id="2"/> 
</foo> 

второй:

<?xml version="1.0" encoding="UTF-8"?> 
<foo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xsi:noNamespaceSchemaLocation = 
     'file:/home/tareq/NetBeansProjects/HTML5Application/public_html/refTest.xsd'> 
    <batz idref="1" /> <!-- this should succeed because <bar id="1"> exists --> 
    <batz idref="3" /> <!-- this should FAIL --> 
</foo> 

проверка правильности ошибки и правильная работа при замене choice t ag с тегом sequence, и я пишу два xml в одном xml.
проблема возникает в этом xsd, я имею в виду, что два xml не могут быть ref/keyref между собой.
вот что я сейчас вижу, и вот что я пытаюсь сделать с 3 дней.

ответ

2

Если вы правильно поняли, вы хотите использовать ключ XSD и keyref для проверки (a) того, что значения в одном документе XML уникальны в этом документе (с использованием xsd: key) и (b), что значения в другом документе XML рисуются только из значений, указанных в первом документе (с использованием xsd: keyref).

Цель (а) достижима; цель (б) не достижима с XSD. Ограничения ссылочной целостности XSD предназначены для использования в одном документе XML, а не в границах документа. Чтобы проверить ограничения целостности границ документов, вы можете использовать WDC-язык моделирования сервисов (который, по существу, предназначен для расширения XSD с помощью проверки целостности нескольких документов такого рода) или Schematron. Удачи.

-1

f Я правильно понимаю вас, вы хотите использовать ключ XSD и keyref для проверки (a) того, что значения в одном документе XML уникальны в этом документе (с использованием ключа xsd:) и (b), что значения в другом документе XML рисуются только из значений, указанных в первом документе (с использованием xsd: keyref).

Цель (а) достижима; цель (б) не достижима с XSD. Ограничения ссылочной целостности XSD предназначены для использования в одном документе XML, а не в границах документа. Чтобы проверить ограничения целостности границ документа, вы можете использовать язык моделирования обслуживания W3C (который

Смежные вопросы