schematron-nokogiri 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,72 @@
1
+ <schema xmlns="http://purl.oclc.org/dsdl/schematron">
2
+
3
+ <title>
4
+ Florida Digital Archive SIP Validation
5
+ </title>
6
+
7
+ <ns prefix="mets" uri="http://www.loc.gov/METS/"/>
8
+ <ns prefix="dts" uri="http://www.fcla.edu/dls/md/daitss/"/>
9
+ <ns prefix="xlink" uri="http://www.w3.org/1999/xlink"/>
10
+
11
+ <pattern name="Descriptor should have Agreement Info">
12
+
13
+ <rule context="/mets:mets">
14
+ <assert test="mets:amdSec/mets:digiprovMD/mets:mdWrap/mets:xmlData/dts:daitss/dts:AGREEMENT_INFO">
15
+ A digiprovMD wrapping an AGREEMENT_INFO element is required
16
+ </assert>
17
+ </rule>
18
+
19
+ <rule context="//dts:AGREEMENT_INFO">
20
+ <assert test="@ACCOUNT">Agreement Info must have an account</assert>
21
+ <assert test="@PROJECT">Agreement Info must have a project</assert>
22
+ </rule>
23
+
24
+ </pattern>
25
+
26
+ <pattern name="All files must have a location">
27
+ <rule context="//mets:file">
28
+ <assert test="mets:FLocat">a file must have a location</assert>
29
+ <assert test="mets:FLocat/@xlink:href">a file location must have a path reference</assert>
30
+ </rule>
31
+ </pattern>
32
+
33
+ <pattern name="All file checksums must be proper MD5 or SHA-1">
34
+
35
+ <rule context="//mets:file[@CHECKSUM and @CHECKSUMTYPE = 'MD5']">
36
+ <assert test="string-length(@CHECKSUM) = 32">
37
+ MD5 must be 32 characters
38
+ </assert>
39
+ <assert test="string-length(translate(@CHECKSUM, '0987654321abcdefABCDEF', '')) = 0">
40
+ MD5 must be only characters 0-9, A-Z, a-z
41
+ </assert>
42
+ </rule>
43
+
44
+ <rule context="//mets:file[@CHECKSUM and @CHECKSUMTYPE = 'SHA-1']">
45
+ <assert test="string-length(@CHECKSUM) = 40">
46
+ SHA-1 must be 40 characters
47
+ </assert>
48
+ <assert test="string-length(translate(@CHECKSUM, '0987654321abcdefABCDEF', '')) = 0">
49
+ SHA-1 must be only characters 0-9, A-Z, a-z
50
+ </assert>
51
+ </rule>
52
+
53
+ </pattern>
54
+
55
+ <pattern name="All files must be referenced in the structMap">
56
+ <rule context="//mets:file">
57
+ <assert test="./@ID = //mets:fptr/@FILEID">
58
+ file must be referenced in the structMap
59
+ </assert>
60
+ </rule>
61
+ </pattern>
62
+
63
+ <pattern name="All fptr in the structMap should point to a file">
64
+ <rule context="//mets:fptr">
65
+ <assert test="./@FILEID = //mets:file/@ID">
66
+ file pointer must reference a file
67
+ </assert>
68
+ </rule>
69
+ </pattern>
70
+
71
+
72
+ </schema>
@@ -0,0 +1,35 @@
1
+ <schema xmlns="http://purl.oclc.org/dsdl/schematron">
2
+
3
+ <title>
4
+ Florida Digital Archive SIP Validation
5
+ </title>
6
+
7
+ <ns prefix="mets" uri="http://www.loc.gov/METS/"/>
8
+ <ns prefix="pre" uri="info:lc/xmlns/premis-v2"/>
9
+ <ns prefix="dts" uri="http://www.fcla.edu/dls/md/daitss/"/>
10
+
11
+ <pattern name="PREMIS object should bein the proper buckets">
12
+
13
+ <rule context="//pre:event">
14
+ <assert test="parent::mets:xmlData/parent::mets:mdWrap/parent::mets:digiprovMD">
15
+ PREMIS events must be contained in a METS digiprovMD
16
+ </assert>
17
+ </rule>
18
+
19
+ <rule context="//pre:object">
20
+ <assert test="parent::mets:xmlData/parent::mets:mdWrap/parent::mets:techMD">
21
+ PREMIS objects must be contained in a METS techMD
22
+ </assert>
23
+ </rule>
24
+
25
+ </pattern>
26
+
27
+ <pattern name="METS should have embedded PREMIS">
28
+ <rule context="mets:mets">
29
+ <report test="not(//mets:mdWrap[@MDTYPE='PREMIS'])">
30
+ This METS file has no embedded PREMIS
31
+ </report>
32
+ </rule>
33
+ </pattern>
34
+
35
+ </schema>
@@ -0,0 +1,54 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ require 'schematron-nokogiri'
3
+
4
+ describe SchematronNokogiri::Schema do
5
+
6
+ it "should load a schema from a libxml document" do
7
+ file = File.join "spec", "schema", "pim.sch"
8
+ doc = Nokogiri::XML(File.open(file))
9
+ lambda { SchematronNokogiri::Schema.new doc }.should_not raise_error
10
+ end
11
+
12
+ it "should validate a good instance doc" do
13
+ schema_file = File.join 'spec', 'schema', 'fda_sip.sch'
14
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example1.xml'
15
+
16
+ schema_doc = Nokogiri::XML(File.open(schema_file))
17
+ instance_doc = Nokogiri::XML(File.open(instance_file))
18
+
19
+ stron = SchematronNokogiri::Schema.new schema_doc
20
+ results = stron.validate instance_doc
21
+
22
+ results.should be_empty
23
+ end
24
+
25
+ it "should detect errors for a bad document" do
26
+ schema_file = File.join 'spec', 'schema', 'fda_sip.sch'
27
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example2.xml'
28
+
29
+ schema_doc = Nokogiri::XML(File.open(schema_file))
30
+ instance_doc = Nokogiri::XML(File.open(instance_file))
31
+
32
+ stron = SchematronNokogiri::Schema.new schema_doc
33
+ results = stron.validate instance_doc
34
+
35
+ results.should_not be_empty
36
+ end
37
+
38
+ it "should log report rules in the results" do
39
+ schema_file = File.join 'spec', 'schema', 'pim.sch'
40
+ instance_file = File.join 'spec', 'instances', 'daitss-sip', 'Example1.xml'
41
+
42
+ schema_doc = Nokogiri::XML(File.open(schema_file))
43
+ instance_doc = Nokogiri::XML(File.open(instance_file))
44
+
45
+ stron = SchematronNokogiri::Schema.new schema_doc
46
+ results = stron.validate instance_doc
47
+
48
+ results.length.should == 1
49
+ results.first[:rule_type].should == 'report'
50
+
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1 @@
1
+ # nothing here yet
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: schematron-nokogiri
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Francesco Lazzarino
8
+ - Alexandru Szasz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-05-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.6'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.6'
28
+ description: Using this gem you can validate an XML document using a ISO Schematron
29
+ validation file
30
+ email: alexxed@gmail.com
31
+ executables:
32
+ - stron-nokogiri
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".semver"
37
+ - LICENSE.txt
38
+ - README.md
39
+ - bin/stron-nokogiri
40
+ - iso-schematron-xslt1/iso_abstract_expand.xsl
41
+ - iso-schematron-xslt1/iso_dsdl_include.xsl
42
+ - iso-schematron-xslt1/iso_schematron_message.xsl
43
+ - iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl
44
+ - iso-schematron-xslt1/iso_svrl_for_xslt1.xsl
45
+ - iso-schematron-xslt1/readme.txt
46
+ - lib/schematron-nokogiri.rb
47
+ - schematron-nokogiri.gemspec
48
+ - spec/command_spec.rb
49
+ - spec/feature_requests_spec.rb
50
+ - spec/instances/daitss-sip/Example1.xml
51
+ - spec/instances/daitss-sip/Example2.xml
52
+ - spec/instances/premis-in-mets/bad.xml
53
+ - spec/instances/premis-in-mets/good.xml
54
+ - spec/schema/fda_sip.sch
55
+ - spec/schema/pim.sch
56
+ - spec/schema_spec.rb
57
+ - spec/spec_helper.rb
58
+ homepage: https://github.com/alexxed/schematron
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.4.8
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: ISO Schematron Validation using Nokogiri
82
+ test_files: []
83
+ has_rdoc: