2012-03-16 18 views
1

XPath 1.0を使用してSchematronアサートテストを再利用するにはどうすればよいですか?具体的には、検出された属性名を使用してテストを再利用する方法。私はこれを行うことができない場合、私はテストを再利用したいと思いますし、それぞれの名前付き属性の1つのテストを持っています。 (私はXPath 2.0だけが変数を使用できると思った)。 XSDスキーマからわかるように、同じテストがありますが、異なる属性名を使用しています。注:私はタイムゾーンのテストが絶対確実ではないことを知っています、それは単なる例です。XPath 1.0を使用してSchematronでアサートテストを再利用するにはどうすればよいですか?

XMLを考える:

<?xml version="1.0" encoding="utf-8"?> 
<MyData versionDate="2010-12-09" dataBeginDate="2012-03-01" dataEndDate="2012-03-10" extractedWhen="2012-03-09T10:08:40"> 
    <Site Site_key="999"> 
    <SitePatient Patient_key="1"> 
     <txt_MyName value="test myname"/> 
     <txt_Surname value="test surname" signedWhen="2012-03-08T22:02:39"/> 
     <dat_BirthDate value="2010-06-15" signedWhen="2012-03-08T22:02:39"/> 
     <sel_Status value="Enrolled" signedWhen="2012-03-08T22:02:39"/> 
     <dat_StatusDate value="2012-03-05-05:00" signedWhen="2012-03-08T22:02:39"/> 
     <sel_Something value="" valueDate="2012-03-08" signedWhen="2012-03-08T22:02:39"/> 
    </SitePatient> 
    </Site> 
</MyData> 

は、XSDを考える:あなたの最初の与えられたコンテキストから

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:sch="http://www.ascc.net/xml/schematron"> 
<xs:annotation> 
<xs:appinfo> 
    <sch:title>Schematron Validation</sch:title> 
</xs:appinfo> 

<xs:appinfo> 
    <sch:pattern name="Check TimeZone constraints"> 
    <sch:rule context="*[@signedWhen]"> 
    <sch:assert test="(substring(@signedWhen, 11, 1) != '-') and (substring(@signedWhen, 11, 1) != '+') and (substring(@signedWhen, 11, 1) != 'Z')"> 
     <name/> must not include TimeZone information 
    </sch:assert> 
    </sch:rule> 
    </sch:pattern> 
</xs:appinfo> 

<xs:appinfo> 
    <sch:pattern name="Check TimeZone constraints"> 
    <sch:rule context="*[@valueDate]"> 
    <sch:assert test="(substring(@valueDate, 11, 1) != '-') and (substring(@valueDate, 11, 1) != '+') and (substring(@valueDate, 11, 1) != 'Z')"> 
     <name/> must not include TimeZone information 
    </sch:assert> 
    </sch:rule> 
    </sch:pattern> 
</xs:appinfo> 

答えて

1

を、「* [signedWhen @]は、現在のノードにアクセスできる必要があります。さらに、他の属性を "./@value"で取得することもできます。また、sch:letを変数として使用してこの値を保持することもできます。ヨーヨーだったウルの完全な質問。

+1

let変数はXPath 2.0用として使用することはできません。 – user610064

関連する問題